Merge "selinux: update prebuilt tools"
diff --git a/lib/python2.7/site-packages/selinux/__init__.py b/lib/python2.7/site-packages/selinux/__init__.py
index b81b031..7a14d18 100644
--- a/lib/python2.7/site-packages/selinux/__init__.py
+++ b/lib/python2.7/site-packages/selinux/__init__.py
@@ -69,7 +69,7 @@
     _newclass = 0
 
 
-import shutil, os, stat
+import shutil, os, errno, stat
 
 DISABLED = -1
 PERMISSIVE = 0
@@ -87,7 +87,12 @@
         status, context = matchpathcon(path, mode)
 
     if status == 0:
-        status, oldcontext = lgetfilecon(path)
+        try:
+            status, oldcontext = lgetfilecon(path)
+        except OSError as e:
+            if e.errno != errno.ENODATA:
+                raise
+            oldcontext = None
         if context != oldcontext:
             lsetfilecon(path, context)
 
@@ -405,1031 +410,6 @@
 def selinux_status_deny_unknown():
   return _selinux.selinux_status_deny_unknown()
 selinux_status_deny_unknown = _selinux.selinux_status_deny_unknown
-COMMON_FILE__IOCTL = _selinux.COMMON_FILE__IOCTL
-COMMON_FILE__READ = _selinux.COMMON_FILE__READ
-COMMON_FILE__WRITE = _selinux.COMMON_FILE__WRITE
-COMMON_FILE__CREATE = _selinux.COMMON_FILE__CREATE
-COMMON_FILE__GETATTR = _selinux.COMMON_FILE__GETATTR
-COMMON_FILE__SETATTR = _selinux.COMMON_FILE__SETATTR
-COMMON_FILE__LOCK = _selinux.COMMON_FILE__LOCK
-COMMON_FILE__RELABELFROM = _selinux.COMMON_FILE__RELABELFROM
-COMMON_FILE__RELABELTO = _selinux.COMMON_FILE__RELABELTO
-COMMON_FILE__APPEND = _selinux.COMMON_FILE__APPEND
-COMMON_FILE__UNLINK = _selinux.COMMON_FILE__UNLINK
-COMMON_FILE__LINK = _selinux.COMMON_FILE__LINK
-COMMON_FILE__RENAME = _selinux.COMMON_FILE__RENAME
-COMMON_FILE__EXECUTE = _selinux.COMMON_FILE__EXECUTE
-COMMON_FILE__SWAPON = _selinux.COMMON_FILE__SWAPON
-COMMON_FILE__QUOTAON = _selinux.COMMON_FILE__QUOTAON
-COMMON_FILE__MOUNTON = _selinux.COMMON_FILE__MOUNTON
-COMMON_SOCKET__IOCTL = _selinux.COMMON_SOCKET__IOCTL
-COMMON_SOCKET__READ = _selinux.COMMON_SOCKET__READ
-COMMON_SOCKET__WRITE = _selinux.COMMON_SOCKET__WRITE
-COMMON_SOCKET__CREATE = _selinux.COMMON_SOCKET__CREATE
-COMMON_SOCKET__GETATTR = _selinux.COMMON_SOCKET__GETATTR
-COMMON_SOCKET__SETATTR = _selinux.COMMON_SOCKET__SETATTR
-COMMON_SOCKET__LOCK = _selinux.COMMON_SOCKET__LOCK
-COMMON_SOCKET__RELABELFROM = _selinux.COMMON_SOCKET__RELABELFROM
-COMMON_SOCKET__RELABELTO = _selinux.COMMON_SOCKET__RELABELTO
-COMMON_SOCKET__APPEND = _selinux.COMMON_SOCKET__APPEND
-COMMON_SOCKET__BIND = _selinux.COMMON_SOCKET__BIND
-COMMON_SOCKET__CONNECT = _selinux.COMMON_SOCKET__CONNECT
-COMMON_SOCKET__LISTEN = _selinux.COMMON_SOCKET__LISTEN
-COMMON_SOCKET__ACCEPT = _selinux.COMMON_SOCKET__ACCEPT
-COMMON_SOCKET__GETOPT = _selinux.COMMON_SOCKET__GETOPT
-COMMON_SOCKET__SETOPT = _selinux.COMMON_SOCKET__SETOPT
-COMMON_SOCKET__SHUTDOWN = _selinux.COMMON_SOCKET__SHUTDOWN
-COMMON_SOCKET__RECVFROM = _selinux.COMMON_SOCKET__RECVFROM
-COMMON_SOCKET__SENDTO = _selinux.COMMON_SOCKET__SENDTO
-COMMON_SOCKET__RECV_MSG = _selinux.COMMON_SOCKET__RECV_MSG
-COMMON_SOCKET__SEND_MSG = _selinux.COMMON_SOCKET__SEND_MSG
-COMMON_SOCKET__NAME_BIND = _selinux.COMMON_SOCKET__NAME_BIND
-COMMON_IPC__CREATE = _selinux.COMMON_IPC__CREATE
-COMMON_IPC__DESTROY = _selinux.COMMON_IPC__DESTROY
-COMMON_IPC__GETATTR = _selinux.COMMON_IPC__GETATTR
-COMMON_IPC__SETATTR = _selinux.COMMON_IPC__SETATTR
-COMMON_IPC__READ = _selinux.COMMON_IPC__READ
-COMMON_IPC__WRITE = _selinux.COMMON_IPC__WRITE
-COMMON_IPC__ASSOCIATE = _selinux.COMMON_IPC__ASSOCIATE
-COMMON_IPC__UNIX_READ = _selinux.COMMON_IPC__UNIX_READ
-COMMON_IPC__UNIX_WRITE = _selinux.COMMON_IPC__UNIX_WRITE
-COMMON_DATABASE__CREATE = _selinux.COMMON_DATABASE__CREATE
-COMMON_DATABASE__DROP = _selinux.COMMON_DATABASE__DROP
-COMMON_DATABASE__GETATTR = _selinux.COMMON_DATABASE__GETATTR
-COMMON_DATABASE__SETATTR = _selinux.COMMON_DATABASE__SETATTR
-COMMON_DATABASE__RELABELFROM = _selinux.COMMON_DATABASE__RELABELFROM
-COMMON_DATABASE__RELABELTO = _selinux.COMMON_DATABASE__RELABELTO
-FILESYSTEM__MOUNT = _selinux.FILESYSTEM__MOUNT
-FILESYSTEM__REMOUNT = _selinux.FILESYSTEM__REMOUNT
-FILESYSTEM__UNMOUNT = _selinux.FILESYSTEM__UNMOUNT
-FILESYSTEM__GETATTR = _selinux.FILESYSTEM__GETATTR
-FILESYSTEM__RELABELFROM = _selinux.FILESYSTEM__RELABELFROM
-FILESYSTEM__RELABELTO = _selinux.FILESYSTEM__RELABELTO
-FILESYSTEM__TRANSITION = _selinux.FILESYSTEM__TRANSITION
-FILESYSTEM__ASSOCIATE = _selinux.FILESYSTEM__ASSOCIATE
-FILESYSTEM__QUOTAMOD = _selinux.FILESYSTEM__QUOTAMOD
-FILESYSTEM__QUOTAGET = _selinux.FILESYSTEM__QUOTAGET
-DIR__IOCTL = _selinux.DIR__IOCTL
-DIR__READ = _selinux.DIR__READ
-DIR__WRITE = _selinux.DIR__WRITE
-DIR__CREATE = _selinux.DIR__CREATE
-DIR__GETATTR = _selinux.DIR__GETATTR
-DIR__SETATTR = _selinux.DIR__SETATTR
-DIR__LOCK = _selinux.DIR__LOCK
-DIR__RELABELFROM = _selinux.DIR__RELABELFROM
-DIR__RELABELTO = _selinux.DIR__RELABELTO
-DIR__APPEND = _selinux.DIR__APPEND
-DIR__UNLINK = _selinux.DIR__UNLINK
-DIR__LINK = _selinux.DIR__LINK
-DIR__RENAME = _selinux.DIR__RENAME
-DIR__EXECUTE = _selinux.DIR__EXECUTE
-DIR__SWAPON = _selinux.DIR__SWAPON
-DIR__QUOTAON = _selinux.DIR__QUOTAON
-DIR__MOUNTON = _selinux.DIR__MOUNTON
-DIR__ADD_NAME = _selinux.DIR__ADD_NAME
-DIR__REMOVE_NAME = _selinux.DIR__REMOVE_NAME
-DIR__REPARENT = _selinux.DIR__REPARENT
-DIR__SEARCH = _selinux.DIR__SEARCH
-DIR__RMDIR = _selinux.DIR__RMDIR
-DIR__OPEN = _selinux.DIR__OPEN
-FILE__IOCTL = _selinux.FILE__IOCTL
-FILE__READ = _selinux.FILE__READ
-FILE__WRITE = _selinux.FILE__WRITE
-FILE__CREATE = _selinux.FILE__CREATE
-FILE__GETATTR = _selinux.FILE__GETATTR
-FILE__SETATTR = _selinux.FILE__SETATTR
-FILE__LOCK = _selinux.FILE__LOCK
-FILE__RELABELFROM = _selinux.FILE__RELABELFROM
-FILE__RELABELTO = _selinux.FILE__RELABELTO
-FILE__APPEND = _selinux.FILE__APPEND
-FILE__UNLINK = _selinux.FILE__UNLINK
-FILE__LINK = _selinux.FILE__LINK
-FILE__RENAME = _selinux.FILE__RENAME
-FILE__EXECUTE = _selinux.FILE__EXECUTE
-FILE__SWAPON = _selinux.FILE__SWAPON
-FILE__QUOTAON = _selinux.FILE__QUOTAON
-FILE__MOUNTON = _selinux.FILE__MOUNTON
-FILE__EXECUTE_NO_TRANS = _selinux.FILE__EXECUTE_NO_TRANS
-FILE__ENTRYPOINT = _selinux.FILE__ENTRYPOINT
-FILE__EXECMOD = _selinux.FILE__EXECMOD
-FILE__OPEN = _selinux.FILE__OPEN
-LNK_FILE__IOCTL = _selinux.LNK_FILE__IOCTL
-LNK_FILE__READ = _selinux.LNK_FILE__READ
-LNK_FILE__WRITE = _selinux.LNK_FILE__WRITE
-LNK_FILE__CREATE = _selinux.LNK_FILE__CREATE
-LNK_FILE__GETATTR = _selinux.LNK_FILE__GETATTR
-LNK_FILE__SETATTR = _selinux.LNK_FILE__SETATTR
-LNK_FILE__LOCK = _selinux.LNK_FILE__LOCK
-LNK_FILE__RELABELFROM = _selinux.LNK_FILE__RELABELFROM
-LNK_FILE__RELABELTO = _selinux.LNK_FILE__RELABELTO
-LNK_FILE__APPEND = _selinux.LNK_FILE__APPEND
-LNK_FILE__UNLINK = _selinux.LNK_FILE__UNLINK
-LNK_FILE__LINK = _selinux.LNK_FILE__LINK
-LNK_FILE__RENAME = _selinux.LNK_FILE__RENAME
-LNK_FILE__EXECUTE = _selinux.LNK_FILE__EXECUTE
-LNK_FILE__SWAPON = _selinux.LNK_FILE__SWAPON
-LNK_FILE__QUOTAON = _selinux.LNK_FILE__QUOTAON
-LNK_FILE__MOUNTON = _selinux.LNK_FILE__MOUNTON
-CHR_FILE__IOCTL = _selinux.CHR_FILE__IOCTL
-CHR_FILE__READ = _selinux.CHR_FILE__READ
-CHR_FILE__WRITE = _selinux.CHR_FILE__WRITE
-CHR_FILE__CREATE = _selinux.CHR_FILE__CREATE
-CHR_FILE__GETATTR = _selinux.CHR_FILE__GETATTR
-CHR_FILE__SETATTR = _selinux.CHR_FILE__SETATTR
-CHR_FILE__LOCK = _selinux.CHR_FILE__LOCK
-CHR_FILE__RELABELFROM = _selinux.CHR_FILE__RELABELFROM
-CHR_FILE__RELABELTO = _selinux.CHR_FILE__RELABELTO
-CHR_FILE__APPEND = _selinux.CHR_FILE__APPEND
-CHR_FILE__UNLINK = _selinux.CHR_FILE__UNLINK
-CHR_FILE__LINK = _selinux.CHR_FILE__LINK
-CHR_FILE__RENAME = _selinux.CHR_FILE__RENAME
-CHR_FILE__EXECUTE = _selinux.CHR_FILE__EXECUTE
-CHR_FILE__SWAPON = _selinux.CHR_FILE__SWAPON
-CHR_FILE__QUOTAON = _selinux.CHR_FILE__QUOTAON
-CHR_FILE__MOUNTON = _selinux.CHR_FILE__MOUNTON
-CHR_FILE__EXECUTE_NO_TRANS = _selinux.CHR_FILE__EXECUTE_NO_TRANS
-CHR_FILE__ENTRYPOINT = _selinux.CHR_FILE__ENTRYPOINT
-CHR_FILE__EXECMOD = _selinux.CHR_FILE__EXECMOD
-CHR_FILE__OPEN = _selinux.CHR_FILE__OPEN
-BLK_FILE__IOCTL = _selinux.BLK_FILE__IOCTL
-BLK_FILE__READ = _selinux.BLK_FILE__READ
-BLK_FILE__WRITE = _selinux.BLK_FILE__WRITE
-BLK_FILE__CREATE = _selinux.BLK_FILE__CREATE
-BLK_FILE__GETATTR = _selinux.BLK_FILE__GETATTR
-BLK_FILE__SETATTR = _selinux.BLK_FILE__SETATTR
-BLK_FILE__LOCK = _selinux.BLK_FILE__LOCK
-BLK_FILE__RELABELFROM = _selinux.BLK_FILE__RELABELFROM
-BLK_FILE__RELABELTO = _selinux.BLK_FILE__RELABELTO
-BLK_FILE__APPEND = _selinux.BLK_FILE__APPEND
-BLK_FILE__UNLINK = _selinux.BLK_FILE__UNLINK
-BLK_FILE__LINK = _selinux.BLK_FILE__LINK
-BLK_FILE__RENAME = _selinux.BLK_FILE__RENAME
-BLK_FILE__EXECUTE = _selinux.BLK_FILE__EXECUTE
-BLK_FILE__SWAPON = _selinux.BLK_FILE__SWAPON
-BLK_FILE__QUOTAON = _selinux.BLK_FILE__QUOTAON
-BLK_FILE__MOUNTON = _selinux.BLK_FILE__MOUNTON
-BLK_FILE__OPEN = _selinux.BLK_FILE__OPEN
-SOCK_FILE__IOCTL = _selinux.SOCK_FILE__IOCTL
-SOCK_FILE__READ = _selinux.SOCK_FILE__READ
-SOCK_FILE__WRITE = _selinux.SOCK_FILE__WRITE
-SOCK_FILE__CREATE = _selinux.SOCK_FILE__CREATE
-SOCK_FILE__GETATTR = _selinux.SOCK_FILE__GETATTR
-SOCK_FILE__SETATTR = _selinux.SOCK_FILE__SETATTR
-SOCK_FILE__LOCK = _selinux.SOCK_FILE__LOCK
-SOCK_FILE__RELABELFROM = _selinux.SOCK_FILE__RELABELFROM
-SOCK_FILE__RELABELTO = _selinux.SOCK_FILE__RELABELTO
-SOCK_FILE__APPEND = _selinux.SOCK_FILE__APPEND
-SOCK_FILE__UNLINK = _selinux.SOCK_FILE__UNLINK
-SOCK_FILE__LINK = _selinux.SOCK_FILE__LINK
-SOCK_FILE__RENAME = _selinux.SOCK_FILE__RENAME
-SOCK_FILE__EXECUTE = _selinux.SOCK_FILE__EXECUTE
-SOCK_FILE__SWAPON = _selinux.SOCK_FILE__SWAPON
-SOCK_FILE__QUOTAON = _selinux.SOCK_FILE__QUOTAON
-SOCK_FILE__MOUNTON = _selinux.SOCK_FILE__MOUNTON
-FIFO_FILE__IOCTL = _selinux.FIFO_FILE__IOCTL
-FIFO_FILE__READ = _selinux.FIFO_FILE__READ
-FIFO_FILE__WRITE = _selinux.FIFO_FILE__WRITE
-FIFO_FILE__CREATE = _selinux.FIFO_FILE__CREATE
-FIFO_FILE__GETATTR = _selinux.FIFO_FILE__GETATTR
-FIFO_FILE__SETATTR = _selinux.FIFO_FILE__SETATTR
-FIFO_FILE__LOCK = _selinux.FIFO_FILE__LOCK
-FIFO_FILE__RELABELFROM = _selinux.FIFO_FILE__RELABELFROM
-FIFO_FILE__RELABELTO = _selinux.FIFO_FILE__RELABELTO
-FIFO_FILE__APPEND = _selinux.FIFO_FILE__APPEND
-FIFO_FILE__UNLINK = _selinux.FIFO_FILE__UNLINK
-FIFO_FILE__LINK = _selinux.FIFO_FILE__LINK
-FIFO_FILE__RENAME = _selinux.FIFO_FILE__RENAME
-FIFO_FILE__EXECUTE = _selinux.FIFO_FILE__EXECUTE
-FIFO_FILE__SWAPON = _selinux.FIFO_FILE__SWAPON
-FIFO_FILE__QUOTAON = _selinux.FIFO_FILE__QUOTAON
-FIFO_FILE__MOUNTON = _selinux.FIFO_FILE__MOUNTON
-FIFO_FILE__OPEN = _selinux.FIFO_FILE__OPEN
-FD__USE = _selinux.FD__USE
-SOCKET__IOCTL = _selinux.SOCKET__IOCTL
-SOCKET__READ = _selinux.SOCKET__READ
-SOCKET__WRITE = _selinux.SOCKET__WRITE
-SOCKET__CREATE = _selinux.SOCKET__CREATE
-SOCKET__GETATTR = _selinux.SOCKET__GETATTR
-SOCKET__SETATTR = _selinux.SOCKET__SETATTR
-SOCKET__LOCK = _selinux.SOCKET__LOCK
-SOCKET__RELABELFROM = _selinux.SOCKET__RELABELFROM
-SOCKET__RELABELTO = _selinux.SOCKET__RELABELTO
-SOCKET__APPEND = _selinux.SOCKET__APPEND
-SOCKET__BIND = _selinux.SOCKET__BIND
-SOCKET__CONNECT = _selinux.SOCKET__CONNECT
-SOCKET__LISTEN = _selinux.SOCKET__LISTEN
-SOCKET__ACCEPT = _selinux.SOCKET__ACCEPT
-SOCKET__GETOPT = _selinux.SOCKET__GETOPT
-SOCKET__SETOPT = _selinux.SOCKET__SETOPT
-SOCKET__SHUTDOWN = _selinux.SOCKET__SHUTDOWN
-SOCKET__RECVFROM = _selinux.SOCKET__RECVFROM
-SOCKET__SENDTO = _selinux.SOCKET__SENDTO
-SOCKET__RECV_MSG = _selinux.SOCKET__RECV_MSG
-SOCKET__SEND_MSG = _selinux.SOCKET__SEND_MSG
-SOCKET__NAME_BIND = _selinux.SOCKET__NAME_BIND
-TCP_SOCKET__IOCTL = _selinux.TCP_SOCKET__IOCTL
-TCP_SOCKET__READ = _selinux.TCP_SOCKET__READ
-TCP_SOCKET__WRITE = _selinux.TCP_SOCKET__WRITE
-TCP_SOCKET__CREATE = _selinux.TCP_SOCKET__CREATE
-TCP_SOCKET__GETATTR = _selinux.TCP_SOCKET__GETATTR
-TCP_SOCKET__SETATTR = _selinux.TCP_SOCKET__SETATTR
-TCP_SOCKET__LOCK = _selinux.TCP_SOCKET__LOCK
-TCP_SOCKET__RELABELFROM = _selinux.TCP_SOCKET__RELABELFROM
-TCP_SOCKET__RELABELTO = _selinux.TCP_SOCKET__RELABELTO
-TCP_SOCKET__APPEND = _selinux.TCP_SOCKET__APPEND
-TCP_SOCKET__BIND = _selinux.TCP_SOCKET__BIND
-TCP_SOCKET__CONNECT = _selinux.TCP_SOCKET__CONNECT
-TCP_SOCKET__LISTEN = _selinux.TCP_SOCKET__LISTEN
-TCP_SOCKET__ACCEPT = _selinux.TCP_SOCKET__ACCEPT
-TCP_SOCKET__GETOPT = _selinux.TCP_SOCKET__GETOPT
-TCP_SOCKET__SETOPT = _selinux.TCP_SOCKET__SETOPT
-TCP_SOCKET__SHUTDOWN = _selinux.TCP_SOCKET__SHUTDOWN
-TCP_SOCKET__RECVFROM = _selinux.TCP_SOCKET__RECVFROM
-TCP_SOCKET__SENDTO = _selinux.TCP_SOCKET__SENDTO
-TCP_SOCKET__RECV_MSG = _selinux.TCP_SOCKET__RECV_MSG
-TCP_SOCKET__SEND_MSG = _selinux.TCP_SOCKET__SEND_MSG
-TCP_SOCKET__NAME_BIND = _selinux.TCP_SOCKET__NAME_BIND
-TCP_SOCKET__CONNECTTO = _selinux.TCP_SOCKET__CONNECTTO
-TCP_SOCKET__NEWCONN = _selinux.TCP_SOCKET__NEWCONN
-TCP_SOCKET__ACCEPTFROM = _selinux.TCP_SOCKET__ACCEPTFROM
-TCP_SOCKET__NODE_BIND = _selinux.TCP_SOCKET__NODE_BIND
-TCP_SOCKET__NAME_CONNECT = _selinux.TCP_SOCKET__NAME_CONNECT
-UDP_SOCKET__IOCTL = _selinux.UDP_SOCKET__IOCTL
-UDP_SOCKET__READ = _selinux.UDP_SOCKET__READ
-UDP_SOCKET__WRITE = _selinux.UDP_SOCKET__WRITE
-UDP_SOCKET__CREATE = _selinux.UDP_SOCKET__CREATE
-UDP_SOCKET__GETATTR = _selinux.UDP_SOCKET__GETATTR
-UDP_SOCKET__SETATTR = _selinux.UDP_SOCKET__SETATTR
-UDP_SOCKET__LOCK = _selinux.UDP_SOCKET__LOCK
-UDP_SOCKET__RELABELFROM = _selinux.UDP_SOCKET__RELABELFROM
-UDP_SOCKET__RELABELTO = _selinux.UDP_SOCKET__RELABELTO
-UDP_SOCKET__APPEND = _selinux.UDP_SOCKET__APPEND
-UDP_SOCKET__BIND = _selinux.UDP_SOCKET__BIND
-UDP_SOCKET__CONNECT = _selinux.UDP_SOCKET__CONNECT
-UDP_SOCKET__LISTEN = _selinux.UDP_SOCKET__LISTEN
-UDP_SOCKET__ACCEPT = _selinux.UDP_SOCKET__ACCEPT
-UDP_SOCKET__GETOPT = _selinux.UDP_SOCKET__GETOPT
-UDP_SOCKET__SETOPT = _selinux.UDP_SOCKET__SETOPT
-UDP_SOCKET__SHUTDOWN = _selinux.UDP_SOCKET__SHUTDOWN
-UDP_SOCKET__RECVFROM = _selinux.UDP_SOCKET__RECVFROM
-UDP_SOCKET__SENDTO = _selinux.UDP_SOCKET__SENDTO
-UDP_SOCKET__RECV_MSG = _selinux.UDP_SOCKET__RECV_MSG
-UDP_SOCKET__SEND_MSG = _selinux.UDP_SOCKET__SEND_MSG
-UDP_SOCKET__NAME_BIND = _selinux.UDP_SOCKET__NAME_BIND
-UDP_SOCKET__NODE_BIND = _selinux.UDP_SOCKET__NODE_BIND
-RAWIP_SOCKET__IOCTL = _selinux.RAWIP_SOCKET__IOCTL
-RAWIP_SOCKET__READ = _selinux.RAWIP_SOCKET__READ
-RAWIP_SOCKET__WRITE = _selinux.RAWIP_SOCKET__WRITE
-RAWIP_SOCKET__CREATE = _selinux.RAWIP_SOCKET__CREATE
-RAWIP_SOCKET__GETATTR = _selinux.RAWIP_SOCKET__GETATTR
-RAWIP_SOCKET__SETATTR = _selinux.RAWIP_SOCKET__SETATTR
-RAWIP_SOCKET__LOCK = _selinux.RAWIP_SOCKET__LOCK
-RAWIP_SOCKET__RELABELFROM = _selinux.RAWIP_SOCKET__RELABELFROM
-RAWIP_SOCKET__RELABELTO = _selinux.RAWIP_SOCKET__RELABELTO
-RAWIP_SOCKET__APPEND = _selinux.RAWIP_SOCKET__APPEND
-RAWIP_SOCKET__BIND = _selinux.RAWIP_SOCKET__BIND
-RAWIP_SOCKET__CONNECT = _selinux.RAWIP_SOCKET__CONNECT
-RAWIP_SOCKET__LISTEN = _selinux.RAWIP_SOCKET__LISTEN
-RAWIP_SOCKET__ACCEPT = _selinux.RAWIP_SOCKET__ACCEPT
-RAWIP_SOCKET__GETOPT = _selinux.RAWIP_SOCKET__GETOPT
-RAWIP_SOCKET__SETOPT = _selinux.RAWIP_SOCKET__SETOPT
-RAWIP_SOCKET__SHUTDOWN = _selinux.RAWIP_SOCKET__SHUTDOWN
-RAWIP_SOCKET__RECVFROM = _selinux.RAWIP_SOCKET__RECVFROM
-RAWIP_SOCKET__SENDTO = _selinux.RAWIP_SOCKET__SENDTO
-RAWIP_SOCKET__RECV_MSG = _selinux.RAWIP_SOCKET__RECV_MSG
-RAWIP_SOCKET__SEND_MSG = _selinux.RAWIP_SOCKET__SEND_MSG
-RAWIP_SOCKET__NAME_BIND = _selinux.RAWIP_SOCKET__NAME_BIND
-RAWIP_SOCKET__NODE_BIND = _selinux.RAWIP_SOCKET__NODE_BIND
-NODE__TCP_RECV = _selinux.NODE__TCP_RECV
-NODE__TCP_SEND = _selinux.NODE__TCP_SEND
-NODE__UDP_RECV = _selinux.NODE__UDP_RECV
-NODE__UDP_SEND = _selinux.NODE__UDP_SEND
-NODE__RAWIP_RECV = _selinux.NODE__RAWIP_RECV
-NODE__RAWIP_SEND = _selinux.NODE__RAWIP_SEND
-NODE__ENFORCE_DEST = _selinux.NODE__ENFORCE_DEST
-NODE__DCCP_RECV = _selinux.NODE__DCCP_RECV
-NODE__DCCP_SEND = _selinux.NODE__DCCP_SEND
-NODE__RECVFROM = _selinux.NODE__RECVFROM
-NODE__SENDTO = _selinux.NODE__SENDTO
-NETIF__TCP_RECV = _selinux.NETIF__TCP_RECV
-NETIF__TCP_SEND = _selinux.NETIF__TCP_SEND
-NETIF__UDP_RECV = _selinux.NETIF__UDP_RECV
-NETIF__UDP_SEND = _selinux.NETIF__UDP_SEND
-NETIF__RAWIP_RECV = _selinux.NETIF__RAWIP_RECV
-NETIF__RAWIP_SEND = _selinux.NETIF__RAWIP_SEND
-NETIF__DCCP_RECV = _selinux.NETIF__DCCP_RECV
-NETIF__DCCP_SEND = _selinux.NETIF__DCCP_SEND
-NETIF__INGRESS = _selinux.NETIF__INGRESS
-NETIF__EGRESS = _selinux.NETIF__EGRESS
-NETLINK_SOCKET__IOCTL = _selinux.NETLINK_SOCKET__IOCTL
-NETLINK_SOCKET__READ = _selinux.NETLINK_SOCKET__READ
-NETLINK_SOCKET__WRITE = _selinux.NETLINK_SOCKET__WRITE
-NETLINK_SOCKET__CREATE = _selinux.NETLINK_SOCKET__CREATE
-NETLINK_SOCKET__GETATTR = _selinux.NETLINK_SOCKET__GETATTR
-NETLINK_SOCKET__SETATTR = _selinux.NETLINK_SOCKET__SETATTR
-NETLINK_SOCKET__LOCK = _selinux.NETLINK_SOCKET__LOCK
-NETLINK_SOCKET__RELABELFROM = _selinux.NETLINK_SOCKET__RELABELFROM
-NETLINK_SOCKET__RELABELTO = _selinux.NETLINK_SOCKET__RELABELTO
-NETLINK_SOCKET__APPEND = _selinux.NETLINK_SOCKET__APPEND
-NETLINK_SOCKET__BIND = _selinux.NETLINK_SOCKET__BIND
-NETLINK_SOCKET__CONNECT = _selinux.NETLINK_SOCKET__CONNECT
-NETLINK_SOCKET__LISTEN = _selinux.NETLINK_SOCKET__LISTEN
-NETLINK_SOCKET__ACCEPT = _selinux.NETLINK_SOCKET__ACCEPT
-NETLINK_SOCKET__GETOPT = _selinux.NETLINK_SOCKET__GETOPT
-NETLINK_SOCKET__SETOPT = _selinux.NETLINK_SOCKET__SETOPT
-NETLINK_SOCKET__SHUTDOWN = _selinux.NETLINK_SOCKET__SHUTDOWN
-NETLINK_SOCKET__RECVFROM = _selinux.NETLINK_SOCKET__RECVFROM
-NETLINK_SOCKET__SENDTO = _selinux.NETLINK_SOCKET__SENDTO
-NETLINK_SOCKET__RECV_MSG = _selinux.NETLINK_SOCKET__RECV_MSG
-NETLINK_SOCKET__SEND_MSG = _selinux.NETLINK_SOCKET__SEND_MSG
-NETLINK_SOCKET__NAME_BIND = _selinux.NETLINK_SOCKET__NAME_BIND
-PACKET_SOCKET__IOCTL = _selinux.PACKET_SOCKET__IOCTL
-PACKET_SOCKET__READ = _selinux.PACKET_SOCKET__READ
-PACKET_SOCKET__WRITE = _selinux.PACKET_SOCKET__WRITE
-PACKET_SOCKET__CREATE = _selinux.PACKET_SOCKET__CREATE
-PACKET_SOCKET__GETATTR = _selinux.PACKET_SOCKET__GETATTR
-PACKET_SOCKET__SETATTR = _selinux.PACKET_SOCKET__SETATTR
-PACKET_SOCKET__LOCK = _selinux.PACKET_SOCKET__LOCK
-PACKET_SOCKET__RELABELFROM = _selinux.PACKET_SOCKET__RELABELFROM
-PACKET_SOCKET__RELABELTO = _selinux.PACKET_SOCKET__RELABELTO
-PACKET_SOCKET__APPEND = _selinux.PACKET_SOCKET__APPEND
-PACKET_SOCKET__BIND = _selinux.PACKET_SOCKET__BIND
-PACKET_SOCKET__CONNECT = _selinux.PACKET_SOCKET__CONNECT
-PACKET_SOCKET__LISTEN = _selinux.PACKET_SOCKET__LISTEN
-PACKET_SOCKET__ACCEPT = _selinux.PACKET_SOCKET__ACCEPT
-PACKET_SOCKET__GETOPT = _selinux.PACKET_SOCKET__GETOPT
-PACKET_SOCKET__SETOPT = _selinux.PACKET_SOCKET__SETOPT
-PACKET_SOCKET__SHUTDOWN = _selinux.PACKET_SOCKET__SHUTDOWN
-PACKET_SOCKET__RECVFROM = _selinux.PACKET_SOCKET__RECVFROM
-PACKET_SOCKET__SENDTO = _selinux.PACKET_SOCKET__SENDTO
-PACKET_SOCKET__RECV_MSG = _selinux.PACKET_SOCKET__RECV_MSG
-PACKET_SOCKET__SEND_MSG = _selinux.PACKET_SOCKET__SEND_MSG
-PACKET_SOCKET__NAME_BIND = _selinux.PACKET_SOCKET__NAME_BIND
-KEY_SOCKET__IOCTL = _selinux.KEY_SOCKET__IOCTL
-KEY_SOCKET__READ = _selinux.KEY_SOCKET__READ
-KEY_SOCKET__WRITE = _selinux.KEY_SOCKET__WRITE
-KEY_SOCKET__CREATE = _selinux.KEY_SOCKET__CREATE
-KEY_SOCKET__GETATTR = _selinux.KEY_SOCKET__GETATTR
-KEY_SOCKET__SETATTR = _selinux.KEY_SOCKET__SETATTR
-KEY_SOCKET__LOCK = _selinux.KEY_SOCKET__LOCK
-KEY_SOCKET__RELABELFROM = _selinux.KEY_SOCKET__RELABELFROM
-KEY_SOCKET__RELABELTO = _selinux.KEY_SOCKET__RELABELTO
-KEY_SOCKET__APPEND = _selinux.KEY_SOCKET__APPEND
-KEY_SOCKET__BIND = _selinux.KEY_SOCKET__BIND
-KEY_SOCKET__CONNECT = _selinux.KEY_SOCKET__CONNECT
-KEY_SOCKET__LISTEN = _selinux.KEY_SOCKET__LISTEN
-KEY_SOCKET__ACCEPT = _selinux.KEY_SOCKET__ACCEPT
-KEY_SOCKET__GETOPT = _selinux.KEY_SOCKET__GETOPT
-KEY_SOCKET__SETOPT = _selinux.KEY_SOCKET__SETOPT
-KEY_SOCKET__SHUTDOWN = _selinux.KEY_SOCKET__SHUTDOWN
-KEY_SOCKET__RECVFROM = _selinux.KEY_SOCKET__RECVFROM
-KEY_SOCKET__SENDTO = _selinux.KEY_SOCKET__SENDTO
-KEY_SOCKET__RECV_MSG = _selinux.KEY_SOCKET__RECV_MSG
-KEY_SOCKET__SEND_MSG = _selinux.KEY_SOCKET__SEND_MSG
-KEY_SOCKET__NAME_BIND = _selinux.KEY_SOCKET__NAME_BIND
-UNIX_STREAM_SOCKET__IOCTL = _selinux.UNIX_STREAM_SOCKET__IOCTL
-UNIX_STREAM_SOCKET__READ = _selinux.UNIX_STREAM_SOCKET__READ
-UNIX_STREAM_SOCKET__WRITE = _selinux.UNIX_STREAM_SOCKET__WRITE
-UNIX_STREAM_SOCKET__CREATE = _selinux.UNIX_STREAM_SOCKET__CREATE
-UNIX_STREAM_SOCKET__GETATTR = _selinux.UNIX_STREAM_SOCKET__GETATTR
-UNIX_STREAM_SOCKET__SETATTR = _selinux.UNIX_STREAM_SOCKET__SETATTR
-UNIX_STREAM_SOCKET__LOCK = _selinux.UNIX_STREAM_SOCKET__LOCK
-UNIX_STREAM_SOCKET__RELABELFROM = _selinux.UNIX_STREAM_SOCKET__RELABELFROM
-UNIX_STREAM_SOCKET__RELABELTO = _selinux.UNIX_STREAM_SOCKET__RELABELTO
-UNIX_STREAM_SOCKET__APPEND = _selinux.UNIX_STREAM_SOCKET__APPEND
-UNIX_STREAM_SOCKET__BIND = _selinux.UNIX_STREAM_SOCKET__BIND
-UNIX_STREAM_SOCKET__CONNECT = _selinux.UNIX_STREAM_SOCKET__CONNECT
-UNIX_STREAM_SOCKET__LISTEN = _selinux.UNIX_STREAM_SOCKET__LISTEN
-UNIX_STREAM_SOCKET__ACCEPT = _selinux.UNIX_STREAM_SOCKET__ACCEPT
-UNIX_STREAM_SOCKET__GETOPT = _selinux.UNIX_STREAM_SOCKET__GETOPT
-UNIX_STREAM_SOCKET__SETOPT = _selinux.UNIX_STREAM_SOCKET__SETOPT
-UNIX_STREAM_SOCKET__SHUTDOWN = _selinux.UNIX_STREAM_SOCKET__SHUTDOWN
-UNIX_STREAM_SOCKET__RECVFROM = _selinux.UNIX_STREAM_SOCKET__RECVFROM
-UNIX_STREAM_SOCKET__SENDTO = _selinux.UNIX_STREAM_SOCKET__SENDTO
-UNIX_STREAM_SOCKET__RECV_MSG = _selinux.UNIX_STREAM_SOCKET__RECV_MSG
-UNIX_STREAM_SOCKET__SEND_MSG = _selinux.UNIX_STREAM_SOCKET__SEND_MSG
-UNIX_STREAM_SOCKET__NAME_BIND = _selinux.UNIX_STREAM_SOCKET__NAME_BIND
-UNIX_STREAM_SOCKET__CONNECTTO = _selinux.UNIX_STREAM_SOCKET__CONNECTTO
-UNIX_STREAM_SOCKET__NEWCONN = _selinux.UNIX_STREAM_SOCKET__NEWCONN
-UNIX_STREAM_SOCKET__ACCEPTFROM = _selinux.UNIX_STREAM_SOCKET__ACCEPTFROM
-UNIX_DGRAM_SOCKET__IOCTL = _selinux.UNIX_DGRAM_SOCKET__IOCTL
-UNIX_DGRAM_SOCKET__READ = _selinux.UNIX_DGRAM_SOCKET__READ
-UNIX_DGRAM_SOCKET__WRITE = _selinux.UNIX_DGRAM_SOCKET__WRITE
-UNIX_DGRAM_SOCKET__CREATE = _selinux.UNIX_DGRAM_SOCKET__CREATE
-UNIX_DGRAM_SOCKET__GETATTR = _selinux.UNIX_DGRAM_SOCKET__GETATTR
-UNIX_DGRAM_SOCKET__SETATTR = _selinux.UNIX_DGRAM_SOCKET__SETATTR
-UNIX_DGRAM_SOCKET__LOCK = _selinux.UNIX_DGRAM_SOCKET__LOCK
-UNIX_DGRAM_SOCKET__RELABELFROM = _selinux.UNIX_DGRAM_SOCKET__RELABELFROM
-UNIX_DGRAM_SOCKET__RELABELTO = _selinux.UNIX_DGRAM_SOCKET__RELABELTO
-UNIX_DGRAM_SOCKET__APPEND = _selinux.UNIX_DGRAM_SOCKET__APPEND
-UNIX_DGRAM_SOCKET__BIND = _selinux.UNIX_DGRAM_SOCKET__BIND
-UNIX_DGRAM_SOCKET__CONNECT = _selinux.UNIX_DGRAM_SOCKET__CONNECT
-UNIX_DGRAM_SOCKET__LISTEN = _selinux.UNIX_DGRAM_SOCKET__LISTEN
-UNIX_DGRAM_SOCKET__ACCEPT = _selinux.UNIX_DGRAM_SOCKET__ACCEPT
-UNIX_DGRAM_SOCKET__GETOPT = _selinux.UNIX_DGRAM_SOCKET__GETOPT
-UNIX_DGRAM_SOCKET__SETOPT = _selinux.UNIX_DGRAM_SOCKET__SETOPT
-UNIX_DGRAM_SOCKET__SHUTDOWN = _selinux.UNIX_DGRAM_SOCKET__SHUTDOWN
-UNIX_DGRAM_SOCKET__RECVFROM = _selinux.UNIX_DGRAM_SOCKET__RECVFROM
-UNIX_DGRAM_SOCKET__SENDTO = _selinux.UNIX_DGRAM_SOCKET__SENDTO
-UNIX_DGRAM_SOCKET__RECV_MSG = _selinux.UNIX_DGRAM_SOCKET__RECV_MSG
-UNIX_DGRAM_SOCKET__SEND_MSG = _selinux.UNIX_DGRAM_SOCKET__SEND_MSG
-UNIX_DGRAM_SOCKET__NAME_BIND = _selinux.UNIX_DGRAM_SOCKET__NAME_BIND
-PROCESS__FORK = _selinux.PROCESS__FORK
-PROCESS__TRANSITION = _selinux.PROCESS__TRANSITION
-PROCESS__SIGCHLD = _selinux.PROCESS__SIGCHLD
-PROCESS__SIGKILL = _selinux.PROCESS__SIGKILL
-PROCESS__SIGSTOP = _selinux.PROCESS__SIGSTOP
-PROCESS__SIGNULL = _selinux.PROCESS__SIGNULL
-PROCESS__SIGNAL = _selinux.PROCESS__SIGNAL
-PROCESS__PTRACE = _selinux.PROCESS__PTRACE
-PROCESS__GETSCHED = _selinux.PROCESS__GETSCHED
-PROCESS__SETSCHED = _selinux.PROCESS__SETSCHED
-PROCESS__GETSESSION = _selinux.PROCESS__GETSESSION
-PROCESS__GETPGID = _selinux.PROCESS__GETPGID
-PROCESS__SETPGID = _selinux.PROCESS__SETPGID
-PROCESS__GETCAP = _selinux.PROCESS__GETCAP
-PROCESS__SETCAP = _selinux.PROCESS__SETCAP
-PROCESS__SHARE = _selinux.PROCESS__SHARE
-PROCESS__GETATTR = _selinux.PROCESS__GETATTR
-PROCESS__SETEXEC = _selinux.PROCESS__SETEXEC
-PROCESS__SETFSCREATE = _selinux.PROCESS__SETFSCREATE
-PROCESS__NOATSECURE = _selinux.PROCESS__NOATSECURE
-PROCESS__SIGINH = _selinux.PROCESS__SIGINH
-PROCESS__SETRLIMIT = _selinux.PROCESS__SETRLIMIT
-PROCESS__RLIMITINH = _selinux.PROCESS__RLIMITINH
-PROCESS__DYNTRANSITION = _selinux.PROCESS__DYNTRANSITION
-PROCESS__SETCURRENT = _selinux.PROCESS__SETCURRENT
-PROCESS__EXECMEM = _selinux.PROCESS__EXECMEM
-PROCESS__EXECSTACK = _selinux.PROCESS__EXECSTACK
-PROCESS__EXECHEAP = _selinux.PROCESS__EXECHEAP
-PROCESS__SETKEYCREATE = _selinux.PROCESS__SETKEYCREATE
-PROCESS__SETSOCKCREATE = _selinux.PROCESS__SETSOCKCREATE
-IPC__CREATE = _selinux.IPC__CREATE
-IPC__DESTROY = _selinux.IPC__DESTROY
-IPC__GETATTR = _selinux.IPC__GETATTR
-IPC__SETATTR = _selinux.IPC__SETATTR
-IPC__READ = _selinux.IPC__READ
-IPC__WRITE = _selinux.IPC__WRITE
-IPC__ASSOCIATE = _selinux.IPC__ASSOCIATE
-IPC__UNIX_READ = _selinux.IPC__UNIX_READ
-IPC__UNIX_WRITE = _selinux.IPC__UNIX_WRITE
-SEM__CREATE = _selinux.SEM__CREATE
-SEM__DESTROY = _selinux.SEM__DESTROY
-SEM__GETATTR = _selinux.SEM__GETATTR
-SEM__SETATTR = _selinux.SEM__SETATTR
-SEM__READ = _selinux.SEM__READ
-SEM__WRITE = _selinux.SEM__WRITE
-SEM__ASSOCIATE = _selinux.SEM__ASSOCIATE
-SEM__UNIX_READ = _selinux.SEM__UNIX_READ
-SEM__UNIX_WRITE = _selinux.SEM__UNIX_WRITE
-MSGQ__CREATE = _selinux.MSGQ__CREATE
-MSGQ__DESTROY = _selinux.MSGQ__DESTROY
-MSGQ__GETATTR = _selinux.MSGQ__GETATTR
-MSGQ__SETATTR = _selinux.MSGQ__SETATTR
-MSGQ__READ = _selinux.MSGQ__READ
-MSGQ__WRITE = _selinux.MSGQ__WRITE
-MSGQ__ASSOCIATE = _selinux.MSGQ__ASSOCIATE
-MSGQ__UNIX_READ = _selinux.MSGQ__UNIX_READ
-MSGQ__UNIX_WRITE = _selinux.MSGQ__UNIX_WRITE
-MSGQ__ENQUEUE = _selinux.MSGQ__ENQUEUE
-MSG__SEND = _selinux.MSG__SEND
-MSG__RECEIVE = _selinux.MSG__RECEIVE
-SHM__CREATE = _selinux.SHM__CREATE
-SHM__DESTROY = _selinux.SHM__DESTROY
-SHM__GETATTR = _selinux.SHM__GETATTR
-SHM__SETATTR = _selinux.SHM__SETATTR
-SHM__READ = _selinux.SHM__READ
-SHM__WRITE = _selinux.SHM__WRITE
-SHM__ASSOCIATE = _selinux.SHM__ASSOCIATE
-SHM__UNIX_READ = _selinux.SHM__UNIX_READ
-SHM__UNIX_WRITE = _selinux.SHM__UNIX_WRITE
-SHM__LOCK = _selinux.SHM__LOCK
-SECURITY__COMPUTE_AV = _selinux.SECURITY__COMPUTE_AV
-SECURITY__COMPUTE_CREATE = _selinux.SECURITY__COMPUTE_CREATE
-SECURITY__COMPUTE_MEMBER = _selinux.SECURITY__COMPUTE_MEMBER
-SECURITY__CHECK_CONTEXT = _selinux.SECURITY__CHECK_CONTEXT
-SECURITY__LOAD_POLICY = _selinux.SECURITY__LOAD_POLICY
-SECURITY__COMPUTE_RELABEL = _selinux.SECURITY__COMPUTE_RELABEL
-SECURITY__COMPUTE_USER = _selinux.SECURITY__COMPUTE_USER
-SECURITY__SETENFORCE = _selinux.SECURITY__SETENFORCE
-SECURITY__SETBOOL = _selinux.SECURITY__SETBOOL
-SECURITY__SETSECPARAM = _selinux.SECURITY__SETSECPARAM
-SECURITY__SETCHECKREQPROT = _selinux.SECURITY__SETCHECKREQPROT
-SYSTEM__IPC_INFO = _selinux.SYSTEM__IPC_INFO
-SYSTEM__SYSLOG_READ = _selinux.SYSTEM__SYSLOG_READ
-SYSTEM__SYSLOG_MOD = _selinux.SYSTEM__SYSLOG_MOD
-SYSTEM__SYSLOG_CONSOLE = _selinux.SYSTEM__SYSLOG_CONSOLE
-CAPABILITY__CHOWN = _selinux.CAPABILITY__CHOWN
-CAPABILITY__DAC_OVERRIDE = _selinux.CAPABILITY__DAC_OVERRIDE
-CAPABILITY__DAC_READ_SEARCH = _selinux.CAPABILITY__DAC_READ_SEARCH
-CAPABILITY__FOWNER = _selinux.CAPABILITY__FOWNER
-CAPABILITY__FSETID = _selinux.CAPABILITY__FSETID
-CAPABILITY__KILL = _selinux.CAPABILITY__KILL
-CAPABILITY__SETGID = _selinux.CAPABILITY__SETGID
-CAPABILITY__SETUID = _selinux.CAPABILITY__SETUID
-CAPABILITY__SETPCAP = _selinux.CAPABILITY__SETPCAP
-CAPABILITY__LINUX_IMMUTABLE = _selinux.CAPABILITY__LINUX_IMMUTABLE
-CAPABILITY__NET_BIND_SERVICE = _selinux.CAPABILITY__NET_BIND_SERVICE
-CAPABILITY__NET_BROADCAST = _selinux.CAPABILITY__NET_BROADCAST
-CAPABILITY__NET_ADMIN = _selinux.CAPABILITY__NET_ADMIN
-CAPABILITY__NET_RAW = _selinux.CAPABILITY__NET_RAW
-CAPABILITY__IPC_LOCK = _selinux.CAPABILITY__IPC_LOCK
-CAPABILITY__IPC_OWNER = _selinux.CAPABILITY__IPC_OWNER
-CAPABILITY__SYS_MODULE = _selinux.CAPABILITY__SYS_MODULE
-CAPABILITY__SYS_RAWIO = _selinux.CAPABILITY__SYS_RAWIO
-CAPABILITY__SYS_CHROOT = _selinux.CAPABILITY__SYS_CHROOT
-CAPABILITY__SYS_PTRACE = _selinux.CAPABILITY__SYS_PTRACE
-CAPABILITY__SYS_PACCT = _selinux.CAPABILITY__SYS_PACCT
-CAPABILITY__SYS_ADMIN = _selinux.CAPABILITY__SYS_ADMIN
-CAPABILITY__SYS_BOOT = _selinux.CAPABILITY__SYS_BOOT
-CAPABILITY__SYS_NICE = _selinux.CAPABILITY__SYS_NICE
-CAPABILITY__SYS_RESOURCE = _selinux.CAPABILITY__SYS_RESOURCE
-CAPABILITY__SYS_TIME = _selinux.CAPABILITY__SYS_TIME
-CAPABILITY__SYS_TTY_CONFIG = _selinux.CAPABILITY__SYS_TTY_CONFIG
-CAPABILITY__MKNOD = _selinux.CAPABILITY__MKNOD
-CAPABILITY__LEASE = _selinux.CAPABILITY__LEASE
-CAPABILITY__AUDIT_WRITE = _selinux.CAPABILITY__AUDIT_WRITE
-CAPABILITY__AUDIT_CONTROL = _selinux.CAPABILITY__AUDIT_CONTROL
-CAPABILITY__SETFCAP = _selinux.CAPABILITY__SETFCAP
-CAPABILITY2__MAC_OVERRIDE = _selinux.CAPABILITY2__MAC_OVERRIDE
-CAPABILITY2__MAC_ADMIN = _selinux.CAPABILITY2__MAC_ADMIN
-PASSWD__PASSWD = _selinux.PASSWD__PASSWD
-PASSWD__CHFN = _selinux.PASSWD__CHFN
-PASSWD__CHSH = _selinux.PASSWD__CHSH
-PASSWD__ROOTOK = _selinux.PASSWD__ROOTOK
-PASSWD__CRONTAB = _selinux.PASSWD__CRONTAB
-X_DRAWABLE__CREATE = _selinux.X_DRAWABLE__CREATE
-X_DRAWABLE__DESTROY = _selinux.X_DRAWABLE__DESTROY
-X_DRAWABLE__READ = _selinux.X_DRAWABLE__READ
-X_DRAWABLE__WRITE = _selinux.X_DRAWABLE__WRITE
-X_DRAWABLE__BLEND = _selinux.X_DRAWABLE__BLEND
-X_DRAWABLE__GETATTR = _selinux.X_DRAWABLE__GETATTR
-X_DRAWABLE__SETATTR = _selinux.X_DRAWABLE__SETATTR
-X_DRAWABLE__LIST_CHILD = _selinux.X_DRAWABLE__LIST_CHILD
-X_DRAWABLE__ADD_CHILD = _selinux.X_DRAWABLE__ADD_CHILD
-X_DRAWABLE__REMOVE_CHILD = _selinux.X_DRAWABLE__REMOVE_CHILD
-X_DRAWABLE__LIST_PROPERTY = _selinux.X_DRAWABLE__LIST_PROPERTY
-X_DRAWABLE__GET_PROPERTY = _selinux.X_DRAWABLE__GET_PROPERTY
-X_DRAWABLE__SET_PROPERTY = _selinux.X_DRAWABLE__SET_PROPERTY
-X_DRAWABLE__MANAGE = _selinux.X_DRAWABLE__MANAGE
-X_DRAWABLE__OVERRIDE = _selinux.X_DRAWABLE__OVERRIDE
-X_DRAWABLE__SHOW = _selinux.X_DRAWABLE__SHOW
-X_DRAWABLE__HIDE = _selinux.X_DRAWABLE__HIDE
-X_DRAWABLE__SEND = _selinux.X_DRAWABLE__SEND
-X_DRAWABLE__RECEIVE = _selinux.X_DRAWABLE__RECEIVE
-X_SCREEN__GETATTR = _selinux.X_SCREEN__GETATTR
-X_SCREEN__SETATTR = _selinux.X_SCREEN__SETATTR
-X_SCREEN__HIDE_CURSOR = _selinux.X_SCREEN__HIDE_CURSOR
-X_SCREEN__SHOW_CURSOR = _selinux.X_SCREEN__SHOW_CURSOR
-X_SCREEN__SAVER_GETATTR = _selinux.X_SCREEN__SAVER_GETATTR
-X_SCREEN__SAVER_SETATTR = _selinux.X_SCREEN__SAVER_SETATTR
-X_SCREEN__SAVER_HIDE = _selinux.X_SCREEN__SAVER_HIDE
-X_SCREEN__SAVER_SHOW = _selinux.X_SCREEN__SAVER_SHOW
-X_GC__CREATE = _selinux.X_GC__CREATE
-X_GC__DESTROY = _selinux.X_GC__DESTROY
-X_GC__GETATTR = _selinux.X_GC__GETATTR
-X_GC__SETATTR = _selinux.X_GC__SETATTR
-X_GC__USE = _selinux.X_GC__USE
-X_FONT__CREATE = _selinux.X_FONT__CREATE
-X_FONT__DESTROY = _selinux.X_FONT__DESTROY
-X_FONT__GETATTR = _selinux.X_FONT__GETATTR
-X_FONT__ADD_GLYPH = _selinux.X_FONT__ADD_GLYPH
-X_FONT__REMOVE_GLYPH = _selinux.X_FONT__REMOVE_GLYPH
-X_FONT__USE = _selinux.X_FONT__USE
-X_COLORMAP__CREATE = _selinux.X_COLORMAP__CREATE
-X_COLORMAP__DESTROY = _selinux.X_COLORMAP__DESTROY
-X_COLORMAP__READ = _selinux.X_COLORMAP__READ
-X_COLORMAP__WRITE = _selinux.X_COLORMAP__WRITE
-X_COLORMAP__GETATTR = _selinux.X_COLORMAP__GETATTR
-X_COLORMAP__ADD_COLOR = _selinux.X_COLORMAP__ADD_COLOR
-X_COLORMAP__REMOVE_COLOR = _selinux.X_COLORMAP__REMOVE_COLOR
-X_COLORMAP__INSTALL = _selinux.X_COLORMAP__INSTALL
-X_COLORMAP__UNINSTALL = _selinux.X_COLORMAP__UNINSTALL
-X_COLORMAP__USE = _selinux.X_COLORMAP__USE
-X_PROPERTY__CREATE = _selinux.X_PROPERTY__CREATE
-X_PROPERTY__DESTROY = _selinux.X_PROPERTY__DESTROY
-X_PROPERTY__READ = _selinux.X_PROPERTY__READ
-X_PROPERTY__WRITE = _selinux.X_PROPERTY__WRITE
-X_PROPERTY__APPEND = _selinux.X_PROPERTY__APPEND
-X_PROPERTY__GETATTR = _selinux.X_PROPERTY__GETATTR
-X_PROPERTY__SETATTR = _selinux.X_PROPERTY__SETATTR
-X_SELECTION__READ = _selinux.X_SELECTION__READ
-X_SELECTION__WRITE = _selinux.X_SELECTION__WRITE
-X_SELECTION__GETATTR = _selinux.X_SELECTION__GETATTR
-X_SELECTION__SETATTR = _selinux.X_SELECTION__SETATTR
-X_CURSOR__CREATE = _selinux.X_CURSOR__CREATE
-X_CURSOR__DESTROY = _selinux.X_CURSOR__DESTROY
-X_CURSOR__READ = _selinux.X_CURSOR__READ
-X_CURSOR__WRITE = _selinux.X_CURSOR__WRITE
-X_CURSOR__GETATTR = _selinux.X_CURSOR__GETATTR
-X_CURSOR__SETATTR = _selinux.X_CURSOR__SETATTR
-X_CURSOR__USE = _selinux.X_CURSOR__USE
-X_CLIENT__DESTROY = _selinux.X_CLIENT__DESTROY
-X_CLIENT__GETATTR = _selinux.X_CLIENT__GETATTR
-X_CLIENT__SETATTR = _selinux.X_CLIENT__SETATTR
-X_CLIENT__MANAGE = _selinux.X_CLIENT__MANAGE
-X_DEVICE__GETATTR = _selinux.X_DEVICE__GETATTR
-X_DEVICE__SETATTR = _selinux.X_DEVICE__SETATTR
-X_DEVICE__USE = _selinux.X_DEVICE__USE
-X_DEVICE__READ = _selinux.X_DEVICE__READ
-X_DEVICE__WRITE = _selinux.X_DEVICE__WRITE
-X_DEVICE__GETFOCUS = _selinux.X_DEVICE__GETFOCUS
-X_DEVICE__SETFOCUS = _selinux.X_DEVICE__SETFOCUS
-X_DEVICE__BELL = _selinux.X_DEVICE__BELL
-X_DEVICE__FORCE_CURSOR = _selinux.X_DEVICE__FORCE_CURSOR
-X_DEVICE__FREEZE = _selinux.X_DEVICE__FREEZE
-X_DEVICE__GRAB = _selinux.X_DEVICE__GRAB
-X_DEVICE__MANAGE = _selinux.X_DEVICE__MANAGE
-X_SERVER__GETATTR = _selinux.X_SERVER__GETATTR
-X_SERVER__SETATTR = _selinux.X_SERVER__SETATTR
-X_SERVER__RECORD = _selinux.X_SERVER__RECORD
-X_SERVER__DEBUG = _selinux.X_SERVER__DEBUG
-X_SERVER__GRAB = _selinux.X_SERVER__GRAB
-X_SERVER__MANAGE = _selinux.X_SERVER__MANAGE
-X_EXTENSION__QUERY = _selinux.X_EXTENSION__QUERY
-X_EXTENSION__USE = _selinux.X_EXTENSION__USE
-X_RESOURCE__READ = _selinux.X_RESOURCE__READ
-X_RESOURCE__WRITE = _selinux.X_RESOURCE__WRITE
-X_EVENT__SEND = _selinux.X_EVENT__SEND
-X_EVENT__RECEIVE = _selinux.X_EVENT__RECEIVE
-X_SYNTHETIC_EVENT__SEND = _selinux.X_SYNTHETIC_EVENT__SEND
-X_SYNTHETIC_EVENT__RECEIVE = _selinux.X_SYNTHETIC_EVENT__RECEIVE
-NETLINK_ROUTE_SOCKET__IOCTL = _selinux.NETLINK_ROUTE_SOCKET__IOCTL
-NETLINK_ROUTE_SOCKET__READ = _selinux.NETLINK_ROUTE_SOCKET__READ
-NETLINK_ROUTE_SOCKET__WRITE = _selinux.NETLINK_ROUTE_SOCKET__WRITE
-NETLINK_ROUTE_SOCKET__CREATE = _selinux.NETLINK_ROUTE_SOCKET__CREATE
-NETLINK_ROUTE_SOCKET__GETATTR = _selinux.NETLINK_ROUTE_SOCKET__GETATTR
-NETLINK_ROUTE_SOCKET__SETATTR = _selinux.NETLINK_ROUTE_SOCKET__SETATTR
-NETLINK_ROUTE_SOCKET__LOCK = _selinux.NETLINK_ROUTE_SOCKET__LOCK
-NETLINK_ROUTE_SOCKET__RELABELFROM = _selinux.NETLINK_ROUTE_SOCKET__RELABELFROM
-NETLINK_ROUTE_SOCKET__RELABELTO = _selinux.NETLINK_ROUTE_SOCKET__RELABELTO
-NETLINK_ROUTE_SOCKET__APPEND = _selinux.NETLINK_ROUTE_SOCKET__APPEND
-NETLINK_ROUTE_SOCKET__BIND = _selinux.NETLINK_ROUTE_SOCKET__BIND
-NETLINK_ROUTE_SOCKET__CONNECT = _selinux.NETLINK_ROUTE_SOCKET__CONNECT
-NETLINK_ROUTE_SOCKET__LISTEN = _selinux.NETLINK_ROUTE_SOCKET__LISTEN
-NETLINK_ROUTE_SOCKET__ACCEPT = _selinux.NETLINK_ROUTE_SOCKET__ACCEPT
-NETLINK_ROUTE_SOCKET__GETOPT = _selinux.NETLINK_ROUTE_SOCKET__GETOPT
-NETLINK_ROUTE_SOCKET__SETOPT = _selinux.NETLINK_ROUTE_SOCKET__SETOPT
-NETLINK_ROUTE_SOCKET__SHUTDOWN = _selinux.NETLINK_ROUTE_SOCKET__SHUTDOWN
-NETLINK_ROUTE_SOCKET__RECVFROM = _selinux.NETLINK_ROUTE_SOCKET__RECVFROM
-NETLINK_ROUTE_SOCKET__SENDTO = _selinux.NETLINK_ROUTE_SOCKET__SENDTO
-NETLINK_ROUTE_SOCKET__RECV_MSG = _selinux.NETLINK_ROUTE_SOCKET__RECV_MSG
-NETLINK_ROUTE_SOCKET__SEND_MSG = _selinux.NETLINK_ROUTE_SOCKET__SEND_MSG
-NETLINK_ROUTE_SOCKET__NAME_BIND = _selinux.NETLINK_ROUTE_SOCKET__NAME_BIND
-NETLINK_ROUTE_SOCKET__NLMSG_READ = _selinux.NETLINK_ROUTE_SOCKET__NLMSG_READ
-NETLINK_ROUTE_SOCKET__NLMSG_WRITE = _selinux.NETLINK_ROUTE_SOCKET__NLMSG_WRITE
-NETLINK_FIREWALL_SOCKET__IOCTL = _selinux.NETLINK_FIREWALL_SOCKET__IOCTL
-NETLINK_FIREWALL_SOCKET__READ = _selinux.NETLINK_FIREWALL_SOCKET__READ
-NETLINK_FIREWALL_SOCKET__WRITE = _selinux.NETLINK_FIREWALL_SOCKET__WRITE
-NETLINK_FIREWALL_SOCKET__CREATE = _selinux.NETLINK_FIREWALL_SOCKET__CREATE
-NETLINK_FIREWALL_SOCKET__GETATTR = _selinux.NETLINK_FIREWALL_SOCKET__GETATTR
-NETLINK_FIREWALL_SOCKET__SETATTR = _selinux.NETLINK_FIREWALL_SOCKET__SETATTR
-NETLINK_FIREWALL_SOCKET__LOCK = _selinux.NETLINK_FIREWALL_SOCKET__LOCK
-NETLINK_FIREWALL_SOCKET__RELABELFROM = _selinux.NETLINK_FIREWALL_SOCKET__RELABELFROM
-NETLINK_FIREWALL_SOCKET__RELABELTO = _selinux.NETLINK_FIREWALL_SOCKET__RELABELTO
-NETLINK_FIREWALL_SOCKET__APPEND = _selinux.NETLINK_FIREWALL_SOCKET__APPEND
-NETLINK_FIREWALL_SOCKET__BIND = _selinux.NETLINK_FIREWALL_SOCKET__BIND
-NETLINK_FIREWALL_SOCKET__CONNECT = _selinux.NETLINK_FIREWALL_SOCKET__CONNECT
-NETLINK_FIREWALL_SOCKET__LISTEN = _selinux.NETLINK_FIREWALL_SOCKET__LISTEN
-NETLINK_FIREWALL_SOCKET__ACCEPT = _selinux.NETLINK_FIREWALL_SOCKET__ACCEPT
-NETLINK_FIREWALL_SOCKET__GETOPT = _selinux.NETLINK_FIREWALL_SOCKET__GETOPT
-NETLINK_FIREWALL_SOCKET__SETOPT = _selinux.NETLINK_FIREWALL_SOCKET__SETOPT
-NETLINK_FIREWALL_SOCKET__SHUTDOWN = _selinux.NETLINK_FIREWALL_SOCKET__SHUTDOWN
-NETLINK_FIREWALL_SOCKET__RECVFROM = _selinux.NETLINK_FIREWALL_SOCKET__RECVFROM
-NETLINK_FIREWALL_SOCKET__SENDTO = _selinux.NETLINK_FIREWALL_SOCKET__SENDTO
-NETLINK_FIREWALL_SOCKET__RECV_MSG = _selinux.NETLINK_FIREWALL_SOCKET__RECV_MSG
-NETLINK_FIREWALL_SOCKET__SEND_MSG = _selinux.NETLINK_FIREWALL_SOCKET__SEND_MSG
-NETLINK_FIREWALL_SOCKET__NAME_BIND = _selinux.NETLINK_FIREWALL_SOCKET__NAME_BIND
-NETLINK_FIREWALL_SOCKET__NLMSG_READ = _selinux.NETLINK_FIREWALL_SOCKET__NLMSG_READ
-NETLINK_FIREWALL_SOCKET__NLMSG_WRITE = _selinux.NETLINK_FIREWALL_SOCKET__NLMSG_WRITE
-NETLINK_TCPDIAG_SOCKET__IOCTL = _selinux.NETLINK_TCPDIAG_SOCKET__IOCTL
-NETLINK_TCPDIAG_SOCKET__READ = _selinux.NETLINK_TCPDIAG_SOCKET__READ
-NETLINK_TCPDIAG_SOCKET__WRITE = _selinux.NETLINK_TCPDIAG_SOCKET__WRITE
-NETLINK_TCPDIAG_SOCKET__CREATE = _selinux.NETLINK_TCPDIAG_SOCKET__CREATE
-NETLINK_TCPDIAG_SOCKET__GETATTR = _selinux.NETLINK_TCPDIAG_SOCKET__GETATTR
-NETLINK_TCPDIAG_SOCKET__SETATTR = _selinux.NETLINK_TCPDIAG_SOCKET__SETATTR
-NETLINK_TCPDIAG_SOCKET__LOCK = _selinux.NETLINK_TCPDIAG_SOCKET__LOCK
-NETLINK_TCPDIAG_SOCKET__RELABELFROM = _selinux.NETLINK_TCPDIAG_SOCKET__RELABELFROM
-NETLINK_TCPDIAG_SOCKET__RELABELTO = _selinux.NETLINK_TCPDIAG_SOCKET__RELABELTO
-NETLINK_TCPDIAG_SOCKET__APPEND = _selinux.NETLINK_TCPDIAG_SOCKET__APPEND
-NETLINK_TCPDIAG_SOCKET__BIND = _selinux.NETLINK_TCPDIAG_SOCKET__BIND
-NETLINK_TCPDIAG_SOCKET__CONNECT = _selinux.NETLINK_TCPDIAG_SOCKET__CONNECT
-NETLINK_TCPDIAG_SOCKET__LISTEN = _selinux.NETLINK_TCPDIAG_SOCKET__LISTEN
-NETLINK_TCPDIAG_SOCKET__ACCEPT = _selinux.NETLINK_TCPDIAG_SOCKET__ACCEPT
-NETLINK_TCPDIAG_SOCKET__GETOPT = _selinux.NETLINK_TCPDIAG_SOCKET__GETOPT
-NETLINK_TCPDIAG_SOCKET__SETOPT = _selinux.NETLINK_TCPDIAG_SOCKET__SETOPT
-NETLINK_TCPDIAG_SOCKET__SHUTDOWN = _selinux.NETLINK_TCPDIAG_SOCKET__SHUTDOWN
-NETLINK_TCPDIAG_SOCKET__RECVFROM = _selinux.NETLINK_TCPDIAG_SOCKET__RECVFROM
-NETLINK_TCPDIAG_SOCKET__SENDTO = _selinux.NETLINK_TCPDIAG_SOCKET__SENDTO
-NETLINK_TCPDIAG_SOCKET__RECV_MSG = _selinux.NETLINK_TCPDIAG_SOCKET__RECV_MSG
-NETLINK_TCPDIAG_SOCKET__SEND_MSG = _selinux.NETLINK_TCPDIAG_SOCKET__SEND_MSG
-NETLINK_TCPDIAG_SOCKET__NAME_BIND = _selinux.NETLINK_TCPDIAG_SOCKET__NAME_BIND
-NETLINK_TCPDIAG_SOCKET__NLMSG_READ = _selinux.NETLINK_TCPDIAG_SOCKET__NLMSG_READ
-NETLINK_TCPDIAG_SOCKET__NLMSG_WRITE = _selinux.NETLINK_TCPDIAG_SOCKET__NLMSG_WRITE
-NETLINK_NFLOG_SOCKET__IOCTL = _selinux.NETLINK_NFLOG_SOCKET__IOCTL
-NETLINK_NFLOG_SOCKET__READ = _selinux.NETLINK_NFLOG_SOCKET__READ
-NETLINK_NFLOG_SOCKET__WRITE = _selinux.NETLINK_NFLOG_SOCKET__WRITE
-NETLINK_NFLOG_SOCKET__CREATE = _selinux.NETLINK_NFLOG_SOCKET__CREATE
-NETLINK_NFLOG_SOCKET__GETATTR = _selinux.NETLINK_NFLOG_SOCKET__GETATTR
-NETLINK_NFLOG_SOCKET__SETATTR = _selinux.NETLINK_NFLOG_SOCKET__SETATTR
-NETLINK_NFLOG_SOCKET__LOCK = _selinux.NETLINK_NFLOG_SOCKET__LOCK
-NETLINK_NFLOG_SOCKET__RELABELFROM = _selinux.NETLINK_NFLOG_SOCKET__RELABELFROM
-NETLINK_NFLOG_SOCKET__RELABELTO = _selinux.NETLINK_NFLOG_SOCKET__RELABELTO
-NETLINK_NFLOG_SOCKET__APPEND = _selinux.NETLINK_NFLOG_SOCKET__APPEND
-NETLINK_NFLOG_SOCKET__BIND = _selinux.NETLINK_NFLOG_SOCKET__BIND
-NETLINK_NFLOG_SOCKET__CONNECT = _selinux.NETLINK_NFLOG_SOCKET__CONNECT
-NETLINK_NFLOG_SOCKET__LISTEN = _selinux.NETLINK_NFLOG_SOCKET__LISTEN
-NETLINK_NFLOG_SOCKET__ACCEPT = _selinux.NETLINK_NFLOG_SOCKET__ACCEPT
-NETLINK_NFLOG_SOCKET__GETOPT = _selinux.NETLINK_NFLOG_SOCKET__GETOPT
-NETLINK_NFLOG_SOCKET__SETOPT = _selinux.NETLINK_NFLOG_SOCKET__SETOPT
-NETLINK_NFLOG_SOCKET__SHUTDOWN = _selinux.NETLINK_NFLOG_SOCKET__SHUTDOWN
-NETLINK_NFLOG_SOCKET__RECVFROM = _selinux.NETLINK_NFLOG_SOCKET__RECVFROM
-NETLINK_NFLOG_SOCKET__SENDTO = _selinux.NETLINK_NFLOG_SOCKET__SENDTO
-NETLINK_NFLOG_SOCKET__RECV_MSG = _selinux.NETLINK_NFLOG_SOCKET__RECV_MSG
-NETLINK_NFLOG_SOCKET__SEND_MSG = _selinux.NETLINK_NFLOG_SOCKET__SEND_MSG
-NETLINK_NFLOG_SOCKET__NAME_BIND = _selinux.NETLINK_NFLOG_SOCKET__NAME_BIND
-NETLINK_XFRM_SOCKET__IOCTL = _selinux.NETLINK_XFRM_SOCKET__IOCTL
-NETLINK_XFRM_SOCKET__READ = _selinux.NETLINK_XFRM_SOCKET__READ
-NETLINK_XFRM_SOCKET__WRITE = _selinux.NETLINK_XFRM_SOCKET__WRITE
-NETLINK_XFRM_SOCKET__CREATE = _selinux.NETLINK_XFRM_SOCKET__CREATE
-NETLINK_XFRM_SOCKET__GETATTR = _selinux.NETLINK_XFRM_SOCKET__GETATTR
-NETLINK_XFRM_SOCKET__SETATTR = _selinux.NETLINK_XFRM_SOCKET__SETATTR
-NETLINK_XFRM_SOCKET__LOCK = _selinux.NETLINK_XFRM_SOCKET__LOCK
-NETLINK_XFRM_SOCKET__RELABELFROM = _selinux.NETLINK_XFRM_SOCKET__RELABELFROM
-NETLINK_XFRM_SOCKET__RELABELTO = _selinux.NETLINK_XFRM_SOCKET__RELABELTO
-NETLINK_XFRM_SOCKET__APPEND = _selinux.NETLINK_XFRM_SOCKET__APPEND
-NETLINK_XFRM_SOCKET__BIND = _selinux.NETLINK_XFRM_SOCKET__BIND
-NETLINK_XFRM_SOCKET__CONNECT = _selinux.NETLINK_XFRM_SOCKET__CONNECT
-NETLINK_XFRM_SOCKET__LISTEN = _selinux.NETLINK_XFRM_SOCKET__LISTEN
-NETLINK_XFRM_SOCKET__ACCEPT = _selinux.NETLINK_XFRM_SOCKET__ACCEPT
-NETLINK_XFRM_SOCKET__GETOPT = _selinux.NETLINK_XFRM_SOCKET__GETOPT
-NETLINK_XFRM_SOCKET__SETOPT = _selinux.NETLINK_XFRM_SOCKET__SETOPT
-NETLINK_XFRM_SOCKET__SHUTDOWN = _selinux.NETLINK_XFRM_SOCKET__SHUTDOWN
-NETLINK_XFRM_SOCKET__RECVFROM = _selinux.NETLINK_XFRM_SOCKET__RECVFROM
-NETLINK_XFRM_SOCKET__SENDTO = _selinux.NETLINK_XFRM_SOCKET__SENDTO
-NETLINK_XFRM_SOCKET__RECV_MSG = _selinux.NETLINK_XFRM_SOCKET__RECV_MSG
-NETLINK_XFRM_SOCKET__SEND_MSG = _selinux.NETLINK_XFRM_SOCKET__SEND_MSG
-NETLINK_XFRM_SOCKET__NAME_BIND = _selinux.NETLINK_XFRM_SOCKET__NAME_BIND
-NETLINK_XFRM_SOCKET__NLMSG_READ = _selinux.NETLINK_XFRM_SOCKET__NLMSG_READ
-NETLINK_XFRM_SOCKET__NLMSG_WRITE = _selinux.NETLINK_XFRM_SOCKET__NLMSG_WRITE
-NETLINK_SELINUX_SOCKET__IOCTL = _selinux.NETLINK_SELINUX_SOCKET__IOCTL
-NETLINK_SELINUX_SOCKET__READ = _selinux.NETLINK_SELINUX_SOCKET__READ
-NETLINK_SELINUX_SOCKET__WRITE = _selinux.NETLINK_SELINUX_SOCKET__WRITE
-NETLINK_SELINUX_SOCKET__CREATE = _selinux.NETLINK_SELINUX_SOCKET__CREATE
-NETLINK_SELINUX_SOCKET__GETATTR = _selinux.NETLINK_SELINUX_SOCKET__GETATTR
-NETLINK_SELINUX_SOCKET__SETATTR = _selinux.NETLINK_SELINUX_SOCKET__SETATTR
-NETLINK_SELINUX_SOCKET__LOCK = _selinux.NETLINK_SELINUX_SOCKET__LOCK
-NETLINK_SELINUX_SOCKET__RELABELFROM = _selinux.NETLINK_SELINUX_SOCKET__RELABELFROM
-NETLINK_SELINUX_SOCKET__RELABELTO = _selinux.NETLINK_SELINUX_SOCKET__RELABELTO
-NETLINK_SELINUX_SOCKET__APPEND = _selinux.NETLINK_SELINUX_SOCKET__APPEND
-NETLINK_SELINUX_SOCKET__BIND = _selinux.NETLINK_SELINUX_SOCKET__BIND
-NETLINK_SELINUX_SOCKET__CONNECT = _selinux.NETLINK_SELINUX_SOCKET__CONNECT
-NETLINK_SELINUX_SOCKET__LISTEN = _selinux.NETLINK_SELINUX_SOCKET__LISTEN
-NETLINK_SELINUX_SOCKET__ACCEPT = _selinux.NETLINK_SELINUX_SOCKET__ACCEPT
-NETLINK_SELINUX_SOCKET__GETOPT = _selinux.NETLINK_SELINUX_SOCKET__GETOPT
-NETLINK_SELINUX_SOCKET__SETOPT = _selinux.NETLINK_SELINUX_SOCKET__SETOPT
-NETLINK_SELINUX_SOCKET__SHUTDOWN = _selinux.NETLINK_SELINUX_SOCKET__SHUTDOWN
-NETLINK_SELINUX_SOCKET__RECVFROM = _selinux.NETLINK_SELINUX_SOCKET__RECVFROM
-NETLINK_SELINUX_SOCKET__SENDTO = _selinux.NETLINK_SELINUX_SOCKET__SENDTO
-NETLINK_SELINUX_SOCKET__RECV_MSG = _selinux.NETLINK_SELINUX_SOCKET__RECV_MSG
-NETLINK_SELINUX_SOCKET__SEND_MSG = _selinux.NETLINK_SELINUX_SOCKET__SEND_MSG
-NETLINK_SELINUX_SOCKET__NAME_BIND = _selinux.NETLINK_SELINUX_SOCKET__NAME_BIND
-NETLINK_AUDIT_SOCKET__IOCTL = _selinux.NETLINK_AUDIT_SOCKET__IOCTL
-NETLINK_AUDIT_SOCKET__READ = _selinux.NETLINK_AUDIT_SOCKET__READ
-NETLINK_AUDIT_SOCKET__WRITE = _selinux.NETLINK_AUDIT_SOCKET__WRITE
-NETLINK_AUDIT_SOCKET__CREATE = _selinux.NETLINK_AUDIT_SOCKET__CREATE
-NETLINK_AUDIT_SOCKET__GETATTR = _selinux.NETLINK_AUDIT_SOCKET__GETATTR
-NETLINK_AUDIT_SOCKET__SETATTR = _selinux.NETLINK_AUDIT_SOCKET__SETATTR
-NETLINK_AUDIT_SOCKET__LOCK = _selinux.NETLINK_AUDIT_SOCKET__LOCK
-NETLINK_AUDIT_SOCKET__RELABELFROM = _selinux.NETLINK_AUDIT_SOCKET__RELABELFROM
-NETLINK_AUDIT_SOCKET__RELABELTO = _selinux.NETLINK_AUDIT_SOCKET__RELABELTO
-NETLINK_AUDIT_SOCKET__APPEND = _selinux.NETLINK_AUDIT_SOCKET__APPEND
-NETLINK_AUDIT_SOCKET__BIND = _selinux.NETLINK_AUDIT_SOCKET__BIND
-NETLINK_AUDIT_SOCKET__CONNECT = _selinux.NETLINK_AUDIT_SOCKET__CONNECT
-NETLINK_AUDIT_SOCKET__LISTEN = _selinux.NETLINK_AUDIT_SOCKET__LISTEN
-NETLINK_AUDIT_SOCKET__ACCEPT = _selinux.NETLINK_AUDIT_SOCKET__ACCEPT
-NETLINK_AUDIT_SOCKET__GETOPT = _selinux.NETLINK_AUDIT_SOCKET__GETOPT
-NETLINK_AUDIT_SOCKET__SETOPT = _selinux.NETLINK_AUDIT_SOCKET__SETOPT
-NETLINK_AUDIT_SOCKET__SHUTDOWN = _selinux.NETLINK_AUDIT_SOCKET__SHUTDOWN
-NETLINK_AUDIT_SOCKET__RECVFROM = _selinux.NETLINK_AUDIT_SOCKET__RECVFROM
-NETLINK_AUDIT_SOCKET__SENDTO = _selinux.NETLINK_AUDIT_SOCKET__SENDTO
-NETLINK_AUDIT_SOCKET__RECV_MSG = _selinux.NETLINK_AUDIT_SOCKET__RECV_MSG
-NETLINK_AUDIT_SOCKET__SEND_MSG = _selinux.NETLINK_AUDIT_SOCKET__SEND_MSG
-NETLINK_AUDIT_SOCKET__NAME_BIND = _selinux.NETLINK_AUDIT_SOCKET__NAME_BIND
-NETLINK_AUDIT_SOCKET__NLMSG_READ = _selinux.NETLINK_AUDIT_SOCKET__NLMSG_READ
-NETLINK_AUDIT_SOCKET__NLMSG_WRITE = _selinux.NETLINK_AUDIT_SOCKET__NLMSG_WRITE
-NETLINK_AUDIT_SOCKET__NLMSG_RELAY = _selinux.NETLINK_AUDIT_SOCKET__NLMSG_RELAY
-NETLINK_AUDIT_SOCKET__NLMSG_READPRIV = _selinux.NETLINK_AUDIT_SOCKET__NLMSG_READPRIV
-NETLINK_AUDIT_SOCKET__NLMSG_TTY_AUDIT = _selinux.NETLINK_AUDIT_SOCKET__NLMSG_TTY_AUDIT
-NETLINK_IP6FW_SOCKET__IOCTL = _selinux.NETLINK_IP6FW_SOCKET__IOCTL
-NETLINK_IP6FW_SOCKET__READ = _selinux.NETLINK_IP6FW_SOCKET__READ
-NETLINK_IP6FW_SOCKET__WRITE = _selinux.NETLINK_IP6FW_SOCKET__WRITE
-NETLINK_IP6FW_SOCKET__CREATE = _selinux.NETLINK_IP6FW_SOCKET__CREATE
-NETLINK_IP6FW_SOCKET__GETATTR = _selinux.NETLINK_IP6FW_SOCKET__GETATTR
-NETLINK_IP6FW_SOCKET__SETATTR = _selinux.NETLINK_IP6FW_SOCKET__SETATTR
-NETLINK_IP6FW_SOCKET__LOCK = _selinux.NETLINK_IP6FW_SOCKET__LOCK
-NETLINK_IP6FW_SOCKET__RELABELFROM = _selinux.NETLINK_IP6FW_SOCKET__RELABELFROM
-NETLINK_IP6FW_SOCKET__RELABELTO = _selinux.NETLINK_IP6FW_SOCKET__RELABELTO
-NETLINK_IP6FW_SOCKET__APPEND = _selinux.NETLINK_IP6FW_SOCKET__APPEND
-NETLINK_IP6FW_SOCKET__BIND = _selinux.NETLINK_IP6FW_SOCKET__BIND
-NETLINK_IP6FW_SOCKET__CONNECT = _selinux.NETLINK_IP6FW_SOCKET__CONNECT
-NETLINK_IP6FW_SOCKET__LISTEN = _selinux.NETLINK_IP6FW_SOCKET__LISTEN
-NETLINK_IP6FW_SOCKET__ACCEPT = _selinux.NETLINK_IP6FW_SOCKET__ACCEPT
-NETLINK_IP6FW_SOCKET__GETOPT = _selinux.NETLINK_IP6FW_SOCKET__GETOPT
-NETLINK_IP6FW_SOCKET__SETOPT = _selinux.NETLINK_IP6FW_SOCKET__SETOPT
-NETLINK_IP6FW_SOCKET__SHUTDOWN = _selinux.NETLINK_IP6FW_SOCKET__SHUTDOWN
-NETLINK_IP6FW_SOCKET__RECVFROM = _selinux.NETLINK_IP6FW_SOCKET__RECVFROM
-NETLINK_IP6FW_SOCKET__SENDTO = _selinux.NETLINK_IP6FW_SOCKET__SENDTO
-NETLINK_IP6FW_SOCKET__RECV_MSG = _selinux.NETLINK_IP6FW_SOCKET__RECV_MSG
-NETLINK_IP6FW_SOCKET__SEND_MSG = _selinux.NETLINK_IP6FW_SOCKET__SEND_MSG
-NETLINK_IP6FW_SOCKET__NAME_BIND = _selinux.NETLINK_IP6FW_SOCKET__NAME_BIND
-NETLINK_IP6FW_SOCKET__NLMSG_READ = _selinux.NETLINK_IP6FW_SOCKET__NLMSG_READ
-NETLINK_IP6FW_SOCKET__NLMSG_WRITE = _selinux.NETLINK_IP6FW_SOCKET__NLMSG_WRITE
-NETLINK_DNRT_SOCKET__IOCTL = _selinux.NETLINK_DNRT_SOCKET__IOCTL
-NETLINK_DNRT_SOCKET__READ = _selinux.NETLINK_DNRT_SOCKET__READ
-NETLINK_DNRT_SOCKET__WRITE = _selinux.NETLINK_DNRT_SOCKET__WRITE
-NETLINK_DNRT_SOCKET__CREATE = _selinux.NETLINK_DNRT_SOCKET__CREATE
-NETLINK_DNRT_SOCKET__GETATTR = _selinux.NETLINK_DNRT_SOCKET__GETATTR
-NETLINK_DNRT_SOCKET__SETATTR = _selinux.NETLINK_DNRT_SOCKET__SETATTR
-NETLINK_DNRT_SOCKET__LOCK = _selinux.NETLINK_DNRT_SOCKET__LOCK
-NETLINK_DNRT_SOCKET__RELABELFROM = _selinux.NETLINK_DNRT_SOCKET__RELABELFROM
-NETLINK_DNRT_SOCKET__RELABELTO = _selinux.NETLINK_DNRT_SOCKET__RELABELTO
-NETLINK_DNRT_SOCKET__APPEND = _selinux.NETLINK_DNRT_SOCKET__APPEND
-NETLINK_DNRT_SOCKET__BIND = _selinux.NETLINK_DNRT_SOCKET__BIND
-NETLINK_DNRT_SOCKET__CONNECT = _selinux.NETLINK_DNRT_SOCKET__CONNECT
-NETLINK_DNRT_SOCKET__LISTEN = _selinux.NETLINK_DNRT_SOCKET__LISTEN
-NETLINK_DNRT_SOCKET__ACCEPT = _selinux.NETLINK_DNRT_SOCKET__ACCEPT
-NETLINK_DNRT_SOCKET__GETOPT = _selinux.NETLINK_DNRT_SOCKET__GETOPT
-NETLINK_DNRT_SOCKET__SETOPT = _selinux.NETLINK_DNRT_SOCKET__SETOPT
-NETLINK_DNRT_SOCKET__SHUTDOWN = _selinux.NETLINK_DNRT_SOCKET__SHUTDOWN
-NETLINK_DNRT_SOCKET__RECVFROM = _selinux.NETLINK_DNRT_SOCKET__RECVFROM
-NETLINK_DNRT_SOCKET__SENDTO = _selinux.NETLINK_DNRT_SOCKET__SENDTO
-NETLINK_DNRT_SOCKET__RECV_MSG = _selinux.NETLINK_DNRT_SOCKET__RECV_MSG
-NETLINK_DNRT_SOCKET__SEND_MSG = _selinux.NETLINK_DNRT_SOCKET__SEND_MSG
-NETLINK_DNRT_SOCKET__NAME_BIND = _selinux.NETLINK_DNRT_SOCKET__NAME_BIND
-DBUS__ACQUIRE_SVC = _selinux.DBUS__ACQUIRE_SVC
-DBUS__SEND_MSG = _selinux.DBUS__SEND_MSG
-NSCD__GETPWD = _selinux.NSCD__GETPWD
-NSCD__GETGRP = _selinux.NSCD__GETGRP
-NSCD__GETHOST = _selinux.NSCD__GETHOST
-NSCD__GETSTAT = _selinux.NSCD__GETSTAT
-NSCD__ADMIN = _selinux.NSCD__ADMIN
-NSCD__SHMEMPWD = _selinux.NSCD__SHMEMPWD
-NSCD__SHMEMGRP = _selinux.NSCD__SHMEMGRP
-NSCD__SHMEMHOST = _selinux.NSCD__SHMEMHOST
-NSCD__GETSERV = _selinux.NSCD__GETSERV
-NSCD__SHMEMSERV = _selinux.NSCD__SHMEMSERV
-ASSOCIATION__SENDTO = _selinux.ASSOCIATION__SENDTO
-ASSOCIATION__RECVFROM = _selinux.ASSOCIATION__RECVFROM
-ASSOCIATION__SETCONTEXT = _selinux.ASSOCIATION__SETCONTEXT
-ASSOCIATION__POLMATCH = _selinux.ASSOCIATION__POLMATCH
-NETLINK_KOBJECT_UEVENT_SOCKET__IOCTL = _selinux.NETLINK_KOBJECT_UEVENT_SOCKET__IOCTL
-NETLINK_KOBJECT_UEVENT_SOCKET__READ = _selinux.NETLINK_KOBJECT_UEVENT_SOCKET__READ
-NETLINK_KOBJECT_UEVENT_SOCKET__WRITE = _selinux.NETLINK_KOBJECT_UEVENT_SOCKET__WRITE
-NETLINK_KOBJECT_UEVENT_SOCKET__CREATE = _selinux.NETLINK_KOBJECT_UEVENT_SOCKET__CREATE
-NETLINK_KOBJECT_UEVENT_SOCKET__GETATTR = _selinux.NETLINK_KOBJECT_UEVENT_SOCKET__GETATTR
-NETLINK_KOBJECT_UEVENT_SOCKET__SETATTR = _selinux.NETLINK_KOBJECT_UEVENT_SOCKET__SETATTR
-NETLINK_KOBJECT_UEVENT_SOCKET__LOCK = _selinux.NETLINK_KOBJECT_UEVENT_SOCKET__LOCK
-NETLINK_KOBJECT_UEVENT_SOCKET__RELABELFROM = _selinux.NETLINK_KOBJECT_UEVENT_SOCKET__RELABELFROM
-NETLINK_KOBJECT_UEVENT_SOCKET__RELABELTO = _selinux.NETLINK_KOBJECT_UEVENT_SOCKET__RELABELTO
-NETLINK_KOBJECT_UEVENT_SOCKET__APPEND = _selinux.NETLINK_KOBJECT_UEVENT_SOCKET__APPEND
-NETLINK_KOBJECT_UEVENT_SOCKET__BIND = _selinux.NETLINK_KOBJECT_UEVENT_SOCKET__BIND
-NETLINK_KOBJECT_UEVENT_SOCKET__CONNECT = _selinux.NETLINK_KOBJECT_UEVENT_SOCKET__CONNECT
-NETLINK_KOBJECT_UEVENT_SOCKET__LISTEN = _selinux.NETLINK_KOBJECT_UEVENT_SOCKET__LISTEN
-NETLINK_KOBJECT_UEVENT_SOCKET__ACCEPT = _selinux.NETLINK_KOBJECT_UEVENT_SOCKET__ACCEPT
-NETLINK_KOBJECT_UEVENT_SOCKET__GETOPT = _selinux.NETLINK_KOBJECT_UEVENT_SOCKET__GETOPT
-NETLINK_KOBJECT_UEVENT_SOCKET__SETOPT = _selinux.NETLINK_KOBJECT_UEVENT_SOCKET__SETOPT
-NETLINK_KOBJECT_UEVENT_SOCKET__SHUTDOWN = _selinux.NETLINK_KOBJECT_UEVENT_SOCKET__SHUTDOWN
-NETLINK_KOBJECT_UEVENT_SOCKET__RECVFROM = _selinux.NETLINK_KOBJECT_UEVENT_SOCKET__RECVFROM
-NETLINK_KOBJECT_UEVENT_SOCKET__SENDTO = _selinux.NETLINK_KOBJECT_UEVENT_SOCKET__SENDTO
-NETLINK_KOBJECT_UEVENT_SOCKET__RECV_MSG = _selinux.NETLINK_KOBJECT_UEVENT_SOCKET__RECV_MSG
-NETLINK_KOBJECT_UEVENT_SOCKET__SEND_MSG = _selinux.NETLINK_KOBJECT_UEVENT_SOCKET__SEND_MSG
-NETLINK_KOBJECT_UEVENT_SOCKET__NAME_BIND = _selinux.NETLINK_KOBJECT_UEVENT_SOCKET__NAME_BIND
-APPLETALK_SOCKET__IOCTL = _selinux.APPLETALK_SOCKET__IOCTL
-APPLETALK_SOCKET__READ = _selinux.APPLETALK_SOCKET__READ
-APPLETALK_SOCKET__WRITE = _selinux.APPLETALK_SOCKET__WRITE
-APPLETALK_SOCKET__CREATE = _selinux.APPLETALK_SOCKET__CREATE
-APPLETALK_SOCKET__GETATTR = _selinux.APPLETALK_SOCKET__GETATTR
-APPLETALK_SOCKET__SETATTR = _selinux.APPLETALK_SOCKET__SETATTR
-APPLETALK_SOCKET__LOCK = _selinux.APPLETALK_SOCKET__LOCK
-APPLETALK_SOCKET__RELABELFROM = _selinux.APPLETALK_SOCKET__RELABELFROM
-APPLETALK_SOCKET__RELABELTO = _selinux.APPLETALK_SOCKET__RELABELTO
-APPLETALK_SOCKET__APPEND = _selinux.APPLETALK_SOCKET__APPEND
-APPLETALK_SOCKET__BIND = _selinux.APPLETALK_SOCKET__BIND
-APPLETALK_SOCKET__CONNECT = _selinux.APPLETALK_SOCKET__CONNECT
-APPLETALK_SOCKET__LISTEN = _selinux.APPLETALK_SOCKET__LISTEN
-APPLETALK_SOCKET__ACCEPT = _selinux.APPLETALK_SOCKET__ACCEPT
-APPLETALK_SOCKET__GETOPT = _selinux.APPLETALK_SOCKET__GETOPT
-APPLETALK_SOCKET__SETOPT = _selinux.APPLETALK_SOCKET__SETOPT
-APPLETALK_SOCKET__SHUTDOWN = _selinux.APPLETALK_SOCKET__SHUTDOWN
-APPLETALK_SOCKET__RECVFROM = _selinux.APPLETALK_SOCKET__RECVFROM
-APPLETALK_SOCKET__SENDTO = _selinux.APPLETALK_SOCKET__SENDTO
-APPLETALK_SOCKET__RECV_MSG = _selinux.APPLETALK_SOCKET__RECV_MSG
-APPLETALK_SOCKET__SEND_MSG = _selinux.APPLETALK_SOCKET__SEND_MSG
-APPLETALK_SOCKET__NAME_BIND = _selinux.APPLETALK_SOCKET__NAME_BIND
-PACKET__SEND = _selinux.PACKET__SEND
-PACKET__RECV = _selinux.PACKET__RECV
-PACKET__RELABELTO = _selinux.PACKET__RELABELTO
-PACKET__FLOW_IN = _selinux.PACKET__FLOW_IN
-PACKET__FLOW_OUT = _selinux.PACKET__FLOW_OUT
-PACKET__FORWARD_IN = _selinux.PACKET__FORWARD_IN
-PACKET__FORWARD_OUT = _selinux.PACKET__FORWARD_OUT
-KEY__VIEW = _selinux.KEY__VIEW
-KEY__READ = _selinux.KEY__READ
-KEY__WRITE = _selinux.KEY__WRITE
-KEY__SEARCH = _selinux.KEY__SEARCH
-KEY__LINK = _selinux.KEY__LINK
-KEY__SETATTR = _selinux.KEY__SETATTR
-KEY__CREATE = _selinux.KEY__CREATE
-CONTEXT__TRANSLATE = _selinux.CONTEXT__TRANSLATE
-CONTEXT__CONTAINS = _selinux.CONTEXT__CONTAINS
-DCCP_SOCKET__IOCTL = _selinux.DCCP_SOCKET__IOCTL
-DCCP_SOCKET__READ = _selinux.DCCP_SOCKET__READ
-DCCP_SOCKET__WRITE = _selinux.DCCP_SOCKET__WRITE
-DCCP_SOCKET__CREATE = _selinux.DCCP_SOCKET__CREATE
-DCCP_SOCKET__GETATTR = _selinux.DCCP_SOCKET__GETATTR
-DCCP_SOCKET__SETATTR = _selinux.DCCP_SOCKET__SETATTR
-DCCP_SOCKET__LOCK = _selinux.DCCP_SOCKET__LOCK
-DCCP_SOCKET__RELABELFROM = _selinux.DCCP_SOCKET__RELABELFROM
-DCCP_SOCKET__RELABELTO = _selinux.DCCP_SOCKET__RELABELTO
-DCCP_SOCKET__APPEND = _selinux.DCCP_SOCKET__APPEND
-DCCP_SOCKET__BIND = _selinux.DCCP_SOCKET__BIND
-DCCP_SOCKET__CONNECT = _selinux.DCCP_SOCKET__CONNECT
-DCCP_SOCKET__LISTEN = _selinux.DCCP_SOCKET__LISTEN
-DCCP_SOCKET__ACCEPT = _selinux.DCCP_SOCKET__ACCEPT
-DCCP_SOCKET__GETOPT = _selinux.DCCP_SOCKET__GETOPT
-DCCP_SOCKET__SETOPT = _selinux.DCCP_SOCKET__SETOPT
-DCCP_SOCKET__SHUTDOWN = _selinux.DCCP_SOCKET__SHUTDOWN
-DCCP_SOCKET__RECVFROM = _selinux.DCCP_SOCKET__RECVFROM
-DCCP_SOCKET__SENDTO = _selinux.DCCP_SOCKET__SENDTO
-DCCP_SOCKET__RECV_MSG = _selinux.DCCP_SOCKET__RECV_MSG
-DCCP_SOCKET__SEND_MSG = _selinux.DCCP_SOCKET__SEND_MSG
-DCCP_SOCKET__NAME_BIND = _selinux.DCCP_SOCKET__NAME_BIND
-DCCP_SOCKET__NODE_BIND = _selinux.DCCP_SOCKET__NODE_BIND
-DCCP_SOCKET__NAME_CONNECT = _selinux.DCCP_SOCKET__NAME_CONNECT
-MEMPROTECT__MMAP_ZERO = _selinux.MEMPROTECT__MMAP_ZERO
-DB_DATABASE__CREATE = _selinux.DB_DATABASE__CREATE
-DB_DATABASE__DROP = _selinux.DB_DATABASE__DROP
-DB_DATABASE__GETATTR = _selinux.DB_DATABASE__GETATTR
-DB_DATABASE__SETATTR = _selinux.DB_DATABASE__SETATTR
-DB_DATABASE__RELABELFROM = _selinux.DB_DATABASE__RELABELFROM
-DB_DATABASE__RELABELTO = _selinux.DB_DATABASE__RELABELTO
-DB_DATABASE__ACCESS = _selinux.DB_DATABASE__ACCESS
-DB_DATABASE__INSTALL_MODULE = _selinux.DB_DATABASE__INSTALL_MODULE
-DB_DATABASE__LOAD_MODULE = _selinux.DB_DATABASE__LOAD_MODULE
-DB_DATABASE__GET_PARAM = _selinux.DB_DATABASE__GET_PARAM
-DB_DATABASE__SET_PARAM = _selinux.DB_DATABASE__SET_PARAM
-DB_TABLE__CREATE = _selinux.DB_TABLE__CREATE
-DB_TABLE__DROP = _selinux.DB_TABLE__DROP
-DB_TABLE__GETATTR = _selinux.DB_TABLE__GETATTR
-DB_TABLE__SETATTR = _selinux.DB_TABLE__SETATTR
-DB_TABLE__RELABELFROM = _selinux.DB_TABLE__RELABELFROM
-DB_TABLE__RELABELTO = _selinux.DB_TABLE__RELABELTO
-DB_TABLE__USE = _selinux.DB_TABLE__USE
-DB_TABLE__SELECT = _selinux.DB_TABLE__SELECT
-DB_TABLE__UPDATE = _selinux.DB_TABLE__UPDATE
-DB_TABLE__INSERT = _selinux.DB_TABLE__INSERT
-DB_TABLE__DELETE = _selinux.DB_TABLE__DELETE
-DB_TABLE__LOCK = _selinux.DB_TABLE__LOCK
-DB_PROCEDURE__CREATE = _selinux.DB_PROCEDURE__CREATE
-DB_PROCEDURE__DROP = _selinux.DB_PROCEDURE__DROP
-DB_PROCEDURE__GETATTR = _selinux.DB_PROCEDURE__GETATTR
-DB_PROCEDURE__SETATTR = _selinux.DB_PROCEDURE__SETATTR
-DB_PROCEDURE__RELABELFROM = _selinux.DB_PROCEDURE__RELABELFROM
-DB_PROCEDURE__RELABELTO = _selinux.DB_PROCEDURE__RELABELTO
-DB_PROCEDURE__EXECUTE = _selinux.DB_PROCEDURE__EXECUTE
-DB_PROCEDURE__ENTRYPOINT = _selinux.DB_PROCEDURE__ENTRYPOINT
-DB_COLUMN__CREATE = _selinux.DB_COLUMN__CREATE
-DB_COLUMN__DROP = _selinux.DB_COLUMN__DROP
-DB_COLUMN__GETATTR = _selinux.DB_COLUMN__GETATTR
-DB_COLUMN__SETATTR = _selinux.DB_COLUMN__SETATTR
-DB_COLUMN__RELABELFROM = _selinux.DB_COLUMN__RELABELFROM
-DB_COLUMN__RELABELTO = _selinux.DB_COLUMN__RELABELTO
-DB_COLUMN__USE = _selinux.DB_COLUMN__USE
-DB_COLUMN__SELECT = _selinux.DB_COLUMN__SELECT
-DB_COLUMN__UPDATE = _selinux.DB_COLUMN__UPDATE
-DB_COLUMN__INSERT = _selinux.DB_COLUMN__INSERT
-DB_TUPLE__RELABELFROM = _selinux.DB_TUPLE__RELABELFROM
-DB_TUPLE__RELABELTO = _selinux.DB_TUPLE__RELABELTO
-DB_TUPLE__USE = _selinux.DB_TUPLE__USE
-DB_TUPLE__SELECT = _selinux.DB_TUPLE__SELECT
-DB_TUPLE__UPDATE = _selinux.DB_TUPLE__UPDATE
-DB_TUPLE__INSERT = _selinux.DB_TUPLE__INSERT
-DB_TUPLE__DELETE = _selinux.DB_TUPLE__DELETE
-DB_BLOB__CREATE = _selinux.DB_BLOB__CREATE
-DB_BLOB__DROP = _selinux.DB_BLOB__DROP
-DB_BLOB__GETATTR = _selinux.DB_BLOB__GETATTR
-DB_BLOB__SETATTR = _selinux.DB_BLOB__SETATTR
-DB_BLOB__RELABELFROM = _selinux.DB_BLOB__RELABELFROM
-DB_BLOB__RELABELTO = _selinux.DB_BLOB__RELABELTO
-DB_BLOB__READ = _selinux.DB_BLOB__READ
-DB_BLOB__WRITE = _selinux.DB_BLOB__WRITE
-DB_BLOB__IMPORT = _selinux.DB_BLOB__IMPORT
-DB_BLOB__EXPORT = _selinux.DB_BLOB__EXPORT
-PEER__RECV = _selinux.PEER__RECV
-X_APPLICATION_DATA__PASTE = _selinux.X_APPLICATION_DATA__PASTE
-X_APPLICATION_DATA__PASTE_AFTER_CONFIRM = _selinux.X_APPLICATION_DATA__PASTE_AFTER_CONFIRM
-X_APPLICATION_DATA__COPY = _selinux.X_APPLICATION_DATA__COPY
 class context_s_t(_object):
     __swig_setmethods__ = {}
     __setattr__ = lambda self, name, value: _swig_setattr(self, context_s_t, name, value)
@@ -1492,107 +472,6 @@
 def context_user_set(*args):
   return _selinux.context_user_set(*args)
 context_user_set = _selinux.context_user_set
-SECCLASS_SECURITY = _selinux.SECCLASS_SECURITY
-SECCLASS_PROCESS = _selinux.SECCLASS_PROCESS
-SECCLASS_SYSTEM = _selinux.SECCLASS_SYSTEM
-SECCLASS_CAPABILITY = _selinux.SECCLASS_CAPABILITY
-SECCLASS_FILESYSTEM = _selinux.SECCLASS_FILESYSTEM
-SECCLASS_FILE = _selinux.SECCLASS_FILE
-SECCLASS_DIR = _selinux.SECCLASS_DIR
-SECCLASS_FD = _selinux.SECCLASS_FD
-SECCLASS_LNK_FILE = _selinux.SECCLASS_LNK_FILE
-SECCLASS_CHR_FILE = _selinux.SECCLASS_CHR_FILE
-SECCLASS_BLK_FILE = _selinux.SECCLASS_BLK_FILE
-SECCLASS_SOCK_FILE = _selinux.SECCLASS_SOCK_FILE
-SECCLASS_FIFO_FILE = _selinux.SECCLASS_FIFO_FILE
-SECCLASS_SOCKET = _selinux.SECCLASS_SOCKET
-SECCLASS_TCP_SOCKET = _selinux.SECCLASS_TCP_SOCKET
-SECCLASS_UDP_SOCKET = _selinux.SECCLASS_UDP_SOCKET
-SECCLASS_RAWIP_SOCKET = _selinux.SECCLASS_RAWIP_SOCKET
-SECCLASS_NODE = _selinux.SECCLASS_NODE
-SECCLASS_NETIF = _selinux.SECCLASS_NETIF
-SECCLASS_NETLINK_SOCKET = _selinux.SECCLASS_NETLINK_SOCKET
-SECCLASS_PACKET_SOCKET = _selinux.SECCLASS_PACKET_SOCKET
-SECCLASS_KEY_SOCKET = _selinux.SECCLASS_KEY_SOCKET
-SECCLASS_UNIX_STREAM_SOCKET = _selinux.SECCLASS_UNIX_STREAM_SOCKET
-SECCLASS_UNIX_DGRAM_SOCKET = _selinux.SECCLASS_UNIX_DGRAM_SOCKET
-SECCLASS_SEM = _selinux.SECCLASS_SEM
-SECCLASS_MSG = _selinux.SECCLASS_MSG
-SECCLASS_MSGQ = _selinux.SECCLASS_MSGQ
-SECCLASS_SHM = _selinux.SECCLASS_SHM
-SECCLASS_IPC = _selinux.SECCLASS_IPC
-SECCLASS_PASSWD = _selinux.SECCLASS_PASSWD
-SECCLASS_X_DRAWABLE = _selinux.SECCLASS_X_DRAWABLE
-SECCLASS_X_SCREEN = _selinux.SECCLASS_X_SCREEN
-SECCLASS_X_GC = _selinux.SECCLASS_X_GC
-SECCLASS_X_FONT = _selinux.SECCLASS_X_FONT
-SECCLASS_X_COLORMAP = _selinux.SECCLASS_X_COLORMAP
-SECCLASS_X_PROPERTY = _selinux.SECCLASS_X_PROPERTY
-SECCLASS_X_SELECTION = _selinux.SECCLASS_X_SELECTION
-SECCLASS_X_CURSOR = _selinux.SECCLASS_X_CURSOR
-SECCLASS_X_CLIENT = _selinux.SECCLASS_X_CLIENT
-SECCLASS_X_DEVICE = _selinux.SECCLASS_X_DEVICE
-SECCLASS_X_SERVER = _selinux.SECCLASS_X_SERVER
-SECCLASS_X_EXTENSION = _selinux.SECCLASS_X_EXTENSION
-SECCLASS_NETLINK_ROUTE_SOCKET = _selinux.SECCLASS_NETLINK_ROUTE_SOCKET
-SECCLASS_NETLINK_FIREWALL_SOCKET = _selinux.SECCLASS_NETLINK_FIREWALL_SOCKET
-SECCLASS_NETLINK_TCPDIAG_SOCKET = _selinux.SECCLASS_NETLINK_TCPDIAG_SOCKET
-SECCLASS_NETLINK_NFLOG_SOCKET = _selinux.SECCLASS_NETLINK_NFLOG_SOCKET
-SECCLASS_NETLINK_XFRM_SOCKET = _selinux.SECCLASS_NETLINK_XFRM_SOCKET
-SECCLASS_NETLINK_SELINUX_SOCKET = _selinux.SECCLASS_NETLINK_SELINUX_SOCKET
-SECCLASS_NETLINK_AUDIT_SOCKET = _selinux.SECCLASS_NETLINK_AUDIT_SOCKET
-SECCLASS_NETLINK_IP6FW_SOCKET = _selinux.SECCLASS_NETLINK_IP6FW_SOCKET
-SECCLASS_NETLINK_DNRT_SOCKET = _selinux.SECCLASS_NETLINK_DNRT_SOCKET
-SECCLASS_DBUS = _selinux.SECCLASS_DBUS
-SECCLASS_NSCD = _selinux.SECCLASS_NSCD
-SECCLASS_ASSOCIATION = _selinux.SECCLASS_ASSOCIATION
-SECCLASS_NETLINK_KOBJECT_UEVENT_SOCKET = _selinux.SECCLASS_NETLINK_KOBJECT_UEVENT_SOCKET
-SECCLASS_APPLETALK_SOCKET = _selinux.SECCLASS_APPLETALK_SOCKET
-SECCLASS_PACKET = _selinux.SECCLASS_PACKET
-SECCLASS_KEY = _selinux.SECCLASS_KEY
-SECCLASS_CONTEXT = _selinux.SECCLASS_CONTEXT
-SECCLASS_DCCP_SOCKET = _selinux.SECCLASS_DCCP_SOCKET
-SECCLASS_MEMPROTECT = _selinux.SECCLASS_MEMPROTECT
-SECCLASS_DB_DATABASE = _selinux.SECCLASS_DB_DATABASE
-SECCLASS_DB_TABLE = _selinux.SECCLASS_DB_TABLE
-SECCLASS_DB_PROCEDURE = _selinux.SECCLASS_DB_PROCEDURE
-SECCLASS_DB_COLUMN = _selinux.SECCLASS_DB_COLUMN
-SECCLASS_DB_TUPLE = _selinux.SECCLASS_DB_TUPLE
-SECCLASS_DB_BLOB = _selinux.SECCLASS_DB_BLOB
-SECCLASS_PEER = _selinux.SECCLASS_PEER
-SECCLASS_CAPABILITY2 = _selinux.SECCLASS_CAPABILITY2
-SECCLASS_X_RESOURCE = _selinux.SECCLASS_X_RESOURCE
-SECCLASS_X_EVENT = _selinux.SECCLASS_X_EVENT
-SECCLASS_X_SYNTHETIC_EVENT = _selinux.SECCLASS_X_SYNTHETIC_EVENT
-SECCLASS_X_APPLICATION_DATA = _selinux.SECCLASS_X_APPLICATION_DATA
-SECINITSID_KERNEL = _selinux.SECINITSID_KERNEL
-SECINITSID_SECURITY = _selinux.SECINITSID_SECURITY
-SECINITSID_UNLABELED = _selinux.SECINITSID_UNLABELED
-SECINITSID_FS = _selinux.SECINITSID_FS
-SECINITSID_FILE = _selinux.SECINITSID_FILE
-SECINITSID_FILE_LABELS = _selinux.SECINITSID_FILE_LABELS
-SECINITSID_INIT = _selinux.SECINITSID_INIT
-SECINITSID_ANY_SOCKET = _selinux.SECINITSID_ANY_SOCKET
-SECINITSID_PORT = _selinux.SECINITSID_PORT
-SECINITSID_NETIF = _selinux.SECINITSID_NETIF
-SECINITSID_NETMSG = _selinux.SECINITSID_NETMSG
-SECINITSID_NODE = _selinux.SECINITSID_NODE
-SECINITSID_IGMP_PACKET = _selinux.SECINITSID_IGMP_PACKET
-SECINITSID_ICMP_SOCKET = _selinux.SECINITSID_ICMP_SOCKET
-SECINITSID_TCP_SOCKET = _selinux.SECINITSID_TCP_SOCKET
-SECINITSID_SYSCTL_MODPROBE = _selinux.SECINITSID_SYSCTL_MODPROBE
-SECINITSID_SYSCTL = _selinux.SECINITSID_SYSCTL
-SECINITSID_SYSCTL_FS = _selinux.SECINITSID_SYSCTL_FS
-SECINITSID_SYSCTL_KERNEL = _selinux.SECINITSID_SYSCTL_KERNEL
-SECINITSID_SYSCTL_NET = _selinux.SECINITSID_SYSCTL_NET
-SECINITSID_SYSCTL_NET_UNIX = _selinux.SECINITSID_SYSCTL_NET_UNIX
-SECINITSID_SYSCTL_VM = _selinux.SECINITSID_SYSCTL_VM
-SECINITSID_SYSCTL_DEV = _selinux.SECINITSID_SYSCTL_DEV
-SECINITSID_KMOD = _selinux.SECINITSID_KMOD
-SECINITSID_POLICY = _selinux.SECINITSID_POLICY
-SECINITSID_SCMP_PACKET = _selinux.SECINITSID_SCMP_PACKET
-SECINITSID_DEVNULL = _selinux.SECINITSID_DEVNULL
-SECINITSID_NUM = _selinux.SECINITSID_NUM
 SELINUX_DEFAULTUSER = _selinux.SELINUX_DEFAULTUSER
 
 def get_ordered_context_list(*args):
@@ -1644,6 +523,7 @@
 SELABEL_OPT_BASEONLY = _selinux.SELABEL_OPT_BASEONLY
 SELABEL_OPT_PATH = _selinux.SELABEL_OPT_PATH
 SELABEL_OPT_SUBSET = _selinux.SELABEL_OPT_SUBSET
+SELABEL_OPT_DIGEST = _selinux.SELABEL_OPT_DIGEST
 SELABEL_NOPT = _selinux.SELABEL_NOPT
 
 def selabel_open(*args):
@@ -1674,6 +554,18 @@
   return _selinux.selabel_lookup_best_match_raw(*args)
 selabel_lookup_best_match_raw = _selinux.selabel_lookup_best_match_raw
 
+def selabel_digest(*args):
+  return _selinux.selabel_digest(*args)
+selabel_digest = _selinux.selabel_digest
+SELABEL_SUBSET = _selinux.SELABEL_SUBSET
+SELABEL_EQUAL = _selinux.SELABEL_EQUAL
+SELABEL_SUPERSET = _selinux.SELABEL_SUPERSET
+SELABEL_INCOMPARABLE = _selinux.SELABEL_INCOMPARABLE
+
+def selabel_cmp(*args):
+  return _selinux.selabel_cmp(*args)
+selabel_cmp = _selinux.selabel_cmp
+
 def selabel_stats(*args):
   return _selinux.selabel_stats(*args)
 selabel_stats = _selinux.selabel_stats
@@ -2317,6 +1209,10 @@
   return _selinux.selinux_sepgsql_context_path()
 selinux_sepgsql_context_path = _selinux.selinux_sepgsql_context_path
 
+def selinux_openssh_contexts_path():
+  return _selinux.selinux_openssh_contexts_path()
+selinux_openssh_contexts_path = _selinux.selinux_openssh_contexts_path
+
 def selinux_systemd_contexts_path():
   return _selinux.selinux_systemd_contexts_path()
 selinux_systemd_contexts_path = _selinux.selinux_systemd_contexts_path
diff --git a/lib/python2.7/site-packages/selinux/_selinux.so b/lib/python2.7/site-packages/selinux/_selinux.so
index f4a045f..c313d2b 100755
--- a/lib/python2.7/site-packages/selinux/_selinux.so
+++ b/lib/python2.7/site-packages/selinux/_selinux.so
Binary files differ
diff --git a/lib/python2.7/site-packages/selinux/audit2why.so b/lib/python2.7/site-packages/selinux/audit2why.so
index e7daaab..2c91578 100755
--- a/lib/python2.7/site-packages/selinux/audit2why.so
+++ b/lib/python2.7/site-packages/selinux/audit2why.so
Binary files differ
diff --git a/lib/python2.7/site-packages/setools/__init__.py b/lib/python2.7/site-packages/setools/__init__.py
index 4d03553..1108706 100644
--- a/lib/python2.7/site-packages/setools/__init__.py
+++ b/lib/python2.7/site-packages/setools/__init__.py
@@ -17,13 +17,12 @@
 # License along with SETools.  If not, see
 # <http://www.gnu.org/licenses/>.
 #
-#try:
-#    import pkg_resources
-#    # pylint: disable=no-member
-#    __version__ = pkg_resources.get_distribution("setools").version
-#except ImportError:  # pragma: no cover
-#    __version__ = "unknown"
-__version__ = "3.3.8"
+try:
+    import pkg_resources
+    # pylint: disable=no-member
+    __version__ = pkg_resources.get_distribution("setools").version
+except ImportError:  # pragma: no cover
+    __version__ = "unknown"
 
 # Python classes for policy representation
 from . import policyrep
diff --git a/lib/python2.7/site-packages/setools/dta.py b/lib/python2.7/site-packages/setools/dta.py
index 271efc4..53328f4 100644
--- a/lib/python2.7/site-packages/setools/dta.py
+++ b/lib/python2.7/site-packages/setools/dta.py
@@ -16,6 +16,8 @@
 # License along with SETools.  If not, see
 # <http://www.gnu.org/licenses/>.
 #
+# pylint: disable=unsubscriptable-object
+
 import itertools
 import logging
 from collections import defaultdict, namedtuple
@@ -232,12 +234,12 @@
         """
         Get the domain transition graph statistics.
 
-        Return:  tuple(nodes, edges)
-
-        nodes    The number of nodes (types) in the graph.
-        edges    The number of edges (domain transitions) in the graph.
+        Return: str
         """
-        return (self.G.number_of_nodes(), self.G.number_of_edges())
+        if self.rebuildgraph:
+            self._build_graph()
+
+        return nx.info(self.G)
 
     #
     # Internal functions follow
@@ -357,6 +359,7 @@
     #
     def _build_graph(self):
         self.G.clear()
+        self.G.name = "Domain transition graph for {0}.".format(self.policy)
 
         self.log.info("Building graph from {0}...".format(self.policy))
 
diff --git a/lib/python2.7/site-packages/setools/fsusequery.py b/lib/python2.7/site-packages/setools/fsusequery.py
index 6825a45..f79f50e 100644
--- a/lib/python2.7/site-packages/setools/fsusequery.py
+++ b/lib/python2.7/site-packages/setools/fsusequery.py
@@ -20,7 +20,7 @@
 import re
 
 from . import contextquery
-from .descriptors import CriteriaDescriptor, CriteriaSetDescriptor
+from .descriptors import CriteriaDescriptor, CriteriaSetDescriptor, RuletypeDescriptor
 
 
 class FSUseQuery(contextquery.ContextQuery):
@@ -56,7 +56,7 @@
                     No effect if not using set operations.
     """
 
-    ruletype = None
+    ruletype = RuletypeDescriptor("validate_fs_use_ruletype")
     fs = CriteriaDescriptor("fs_regex")
     fs_regex = False
 
diff --git a/lib/python2.7/site-packages/setools/infoflow.py b/lib/python2.7/site-packages/setools/infoflow.py
index ea3ec32..5812828 100644
--- a/lib/python2.7/site-packages/setools/infoflow.py
+++ b/lib/python2.7/site-packages/setools/infoflow.py
@@ -18,7 +18,6 @@
 #
 import itertools
 import logging
-from collections import namedtuple
 
 import networkx as nx
 from networkx.exception import NetworkXError, NetworkXNoPath
@@ -27,12 +26,6 @@
 
 __all__ = ['InfoFlowAnalysis']
 
-# Return values for the analysis
-# are in the following tuple format:
-step_output = namedtuple("step", ["source",
-                                  "target",
-                                  "rules"])
-
 
 class InfoFlowAnalysis(object):
 
@@ -233,7 +226,7 @@
         if self.rebuildsubgraph:
             self._build_subgraph()
 
-        self.log.info("Generating all infoflows out of {0}...".format(s))
+        self.log.info("Generating all infoflows {0} {1}".format("out of" if out else "into", s))
 
         if out:
             flows = self.subG.out_edges_iter(s)
@@ -242,8 +235,7 @@
 
         try:
             for source, target in flows:
-                edge = Edge(self.subG, source, target)
-                yield step_output(source, target, edge.rules)
+                yield Edge(self.subG, source, target)
         except NetworkXError:
             # NetworkXError: the type is valid but not in graph, e.g.
             # excluded or disconnected due to min weight
@@ -253,13 +245,12 @@
         """
         Get the information flow graph statistics.
 
-        Return: tuple(nodes, edges)
-
-        nodes    The number of nodes (types) in the graph.
-        edges    The number of edges (information flows between types)
-                 in the graph.
+        Return: str
         """
-        return (self.G.number_of_nodes(), self.G.number_of_edges())
+        if self.rebuildgraph:
+            self._build_graph()
+
+        return nx.info(self.G)
 
     #
     # Internal functions follow
@@ -280,8 +271,7 @@
         rules   The list of rules creating this information flow step.
         """
         for s in range(1, len(path)):
-            edge = Edge(self.subG, path[s - 1], path[s])
-            yield step_output(edge.source, edge.target, edge.rules)
+            yield Edge(self.subG, path[s - 1], path[s])
 
     #
     #
@@ -300,6 +290,7 @@
 
     def _build_graph(self):
         self.G.clear()
+        self.G.name = "Information flow graph for {0}.".format(self.policy)
 
         self.perm_map.map_policy(self.policy)
 
diff --git a/lib/python2.7/site-packages/setools/mixins.py b/lib/python2.7/site-packages/setools/mixins.py
index a31d420..99dc9ff 100644
--- a/lib/python2.7/site-packages/setools/mixins.py
+++ b/lib/python2.7/site-packages/setools/mixins.py
@@ -75,6 +75,7 @@
     perms = CriteriaSetDescriptor("perms_regex")
     perms_equal = False
     perms_regex = False
+    perms_subset = False
 
     def _match_perms(self, obj):
         """
@@ -88,4 +89,8 @@
             # if there is no criteria, everything matches.
             return True
 
-        return self._match_regex_or_set(obj.perms, self.perms, self.perms_equal, self.perms_regex)
+        if self.perms_subset:
+            return obj.perms >= self.perms
+        else:
+            return self._match_regex_or_set(obj.perms, self.perms, self.perms_equal,
+                                            self.perms_regex)
diff --git a/lib/python2.7/site-packages/setools/policyrep/__init__.py b/lib/python2.7/site-packages/setools/policyrep/__init__.py
index b03e524..3a4b9a1 100644
--- a/lib/python2.7/site-packages/setools/policyrep/__init__.py
+++ b/lib/python2.7/site-packages/setools/policyrep/__init__.py
@@ -124,16 +124,15 @@
     @staticmethod
     def _potential_policies():
         """Generate a list of potential policies to use."""
-        # Start with binary policies in the standard location
+        # try libselinux for current policy
+        if selinux.selinuxfs_exists():
+            yield selinux.selinux_current_policy_path()
+
+        # otherwise look through the supported policy versions
         base_policy_path = selinux.selinux_binary_policy_path()
         for version in range(qpol.QPOL_POLICY_MAX_VERSION, qpol.QPOL_POLICY_MIN_VERSION-1, -1):
             yield "{0}.{1}".format(base_policy_path, version)
 
-        # Last chance, try selinuxfs. This is not first, to avoid
-        # holding kernel memory for a long time
-        if selinux.selinuxfs_exists():
-            yield selinux.selinux_current_policy_path()
-
     def _load_running_policy(self):
         """Try to load the current running policy."""
         self.log.info("Attempting to locate current running policy.")
@@ -509,6 +508,11 @@
         constraint.validate_ruletype(types)
 
     @staticmethod
+    def validate_fs_use_ruletype(types):
+        """Validate fs_use_* rule types."""
+        fscontext.validate_ruletype(types)
+
+    @staticmethod
     def validate_mls_ruletype(types):
         """Validate MLS rule types."""
         mlsrule.validate_ruletype(types)
diff --git a/lib/python2.7/site-packages/setools/policyrep/_qpol.so b/lib/python2.7/site-packages/setools/policyrep/_qpol.so
index aaccf28..aad9de3 100755
--- a/lib/python2.7/site-packages/setools/policyrep/_qpol.so
+++ b/lib/python2.7/site-packages/setools/policyrep/_qpol.so
Binary files differ
diff --git a/lib/python2.7/site-packages/setools/policyrep/exception.py b/lib/python2.7/site-packages/setools/policyrep/exception.py
index ce367c0..6935873 100644
--- a/lib/python2.7/site-packages/setools/policyrep/exception.py
+++ b/lib/python2.7/site-packages/setools/policyrep/exception.py
@@ -157,6 +157,12 @@
     pass
 
 
+class InvalidFSUseType(InvalidSymbol):
+
+    """Exception for invalid fs_use_* types."""
+    pass
+
+
 class InvalidMLSRuleType(InvalidRuleType):
 
     """Exception for invalid MLS rule types."""
diff --git a/lib/python2.7/site-packages/setools/policyrep/fscontext.py b/lib/python2.7/site-packages/setools/policyrep/fscontext.py
index a17b0bc..215dcd7 100644
--- a/lib/python2.7/site-packages/setools/policyrep/fscontext.py
+++ b/lib/python2.7/site-packages/setools/policyrep/fscontext.py
@@ -18,11 +18,19 @@
 #
 import stat
 
+from . import exception
 from . import qpol
 from . import symbol
 from . import context
 
 
+def validate_ruletype(types):
+    """Validate fs_use_* rule types."""
+    for t in types:
+        if t not in ["fs_use_xattr", "fs_use_trans", "fs_use_task"]:
+            raise exception.InvalidConstraintType("{0} is not a valid fs_use_* type.".format(t))
+
+
 def fs_use_factory(policy, name):
     """Factory function for creating fs_use_* objects."""
 
diff --git a/lib/python2.7/site-packages/setools/policyrep/mls.py b/lib/python2.7/site-packages/setools/policyrep/mls.py
index 2541704..cc24026 100644
--- a/lib/python2.7/site-packages/setools/policyrep/mls.py
+++ b/lib/python2.7/site-packages/setools/policyrep/mls.py
@@ -244,6 +244,10 @@
         stmt += ";"
         return stmt
 
+    def __lt__(self, other):
+        """Comparison based on their index instead of their names."""
+        return self._value < other._value
+
 
 class Sensitivity(BaseMLSComponent):
 
diff --git a/lib/python2.7/site-packages/setools/terulequery.py b/lib/python2.7/site-packages/setools/terulequery.py
index 7f3eccf..3694160 100644
--- a/lib/python2.7/site-packages/setools/terulequery.py
+++ b/lib/python2.7/site-packages/setools/terulequery.py
@@ -62,6 +62,10 @@
                       Default is false.
     perms_regex       If true, regular expression matching will be used
                       on the permission names instead of set logic.
+                      Default is false.
+    perms_subset      If true, the rule matches if the permissions criteria
+                      is a subset of the rule's permission set.
+                      Default is false.
     default           The name of the default type to match.
     default_regex     If true, regular expression matching will be
                       used on the default type.
diff --git a/lib/python2.7/site-packages/setoolsgui/apol/excludetypes.py b/lib/python2.7/site-packages/setoolsgui/apol/excludetypes.py
new file mode 100644
index 0000000..c0b821c
--- /dev/null
+++ b/lib/python2.7/site-packages/setoolsgui/apol/excludetypes.py
@@ -0,0 +1,76 @@
+# Copyright 2015, Tresys Technology, LLC
+#
+# This file is part of SETools.
+#
+# SETools is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as
+# published by the Free Software Foundation, either version 2.1 of
+# the License, or (at your option) any later version.
+#
+# SETools is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with SETools.  If not, see
+# <http://www.gnu.org/licenses/>.
+#
+
+import logging
+
+from PyQt5.QtWidgets import QDialog
+
+from ..widget import SEToolsWidget
+
+
+class ExcludeTypes(SEToolsWidget, QDialog):
+
+    """Dialog for choosing excluded types."""
+
+    def __init__(self, parent, policy):
+        super(ExcludeTypes, self).__init__(parent)
+        self.log = logging.getLogger(self.__class__.__name__)
+        self.parent = parent
+        self.policy = policy
+        self.excluded_list = [str(e) for e in self.parent.query.exclude]
+        self.setupUi()
+
+    def setupUi(self):
+        self.load_ui("exclude_types.ui")
+        self.exclude_a_type.clicked.connect(self.exclude_clicked)
+        self.include_a_type.clicked.connect(self.include_clicked)
+        self.buttonBox.accepted.connect(self.ok_clicked)
+
+        # populate the lists:
+        self.included_types.clear()
+        for item in self.policy.types():
+            if item not in self.excluded_list:
+                self.included_types.addItem(str(item))
+
+        self.excluded_types.clear()
+        for item in self.excluded_list:
+            self.excluded_types.addItem(item)
+
+    def include_clicked(self):
+        for item in self.excluded_types.selectedItems():
+            self.included_types.addItem(item.text())
+            self.excluded_types.takeItem(self.excluded_types.row(item))
+
+    def exclude_clicked(self):
+        for item in self.included_types.selectedItems():
+            self.excluded_types.addItem(item.text())
+            self.included_types.takeItem(self.included_types.row(item))
+
+    def ok_clicked(self):
+        exclude = []
+
+        item = self.excluded_types.takeItem(0)
+        while item:
+            exclude.append(item.text())
+            item = self.excluded_types.takeItem(0)
+
+        self.log.debug("Chosen for exclusion: {0!r}".format(exclude))
+
+        self.parent.query.exclude = exclude
+        self.accept()
diff --git a/lib/python2.7/site-packages/setoolsgui/apol/infoflow.py b/lib/python2.7/site-packages/setoolsgui/apol/infoflow.py
new file mode 100644
index 0000000..6e3c547
--- /dev/null
+++ b/lib/python2.7/site-packages/setoolsgui/apol/infoflow.py
@@ -0,0 +1,265 @@
+# Copyright 2015, Tresys Technology, LLC
+#
+# This file is part of SETools.
+#
+# SETools is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as
+# published by the Free Software Foundation, either version 2.1 of
+# the License, or (at your option) any later version.
+#
+# SETools is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with SETools.  If not, see
+# <http://www.gnu.org/licenses/>.
+#
+
+import logging
+
+from PyQt5.QtCore import pyqtSignal, Qt, QObject, QStringListModel, QThread
+from PyQt5.QtGui import QPalette, QTextCursor
+from PyQt5.QtWidgets import QCompleter, QHeaderView, QMessageBox, QProgressDialog, QScrollArea
+from setools import InfoFlowAnalysis
+
+from .excludetypes import ExcludeTypes
+from ..widget import SEToolsWidget
+
+
+class InfoFlowAnalysisTab(SEToolsWidget, QScrollArea):
+
+    """An information flow analysis tab."""
+
+    def __init__(self, parent, policy, perm_map):
+        super(InfoFlowAnalysisTab, self).__init__(parent)
+        self.log = logging.getLogger(self.__class__.__name__)
+        self.policy = policy
+        self.query = InfoFlowAnalysis(policy, perm_map)
+        self.setupUi()
+
+    def __del__(self):
+        self.thread.quit()
+        self.thread.wait(5000)
+
+    def setupUi(self):
+        self.log.debug("Initializing UI.")
+        self.load_ui("infoflow.ui")
+
+        # set up source/target autocompletion
+        type_completion_list = [str(t) for t in self.policy.types()]
+        type_completer_model = QStringListModel(self)
+        type_completer_model.setStringList(sorted(type_completion_list))
+        self.type_completion = QCompleter()
+        self.type_completion.setModel(type_completer_model)
+        self.source.setCompleter(self.type_completion)
+        self.target.setCompleter(self.type_completion)
+
+        # setup indications of errors on source/target/default
+        self.orig_palette = self.source.palette()
+        self.error_palette = self.source.palette()
+        self.error_palette.setColor(QPalette.Base, Qt.red)
+        self.clear_source_error()
+        self.clear_target_error()
+
+        # set up processing thread
+        self.thread = QThread()
+        self.worker = ResultsUpdater(self.query)
+        self.worker.moveToThread(self.thread)
+        self.worker.raw_line.connect(self.raw_results.appendPlainText)
+        self.worker.finished.connect(self.thread.quit)
+        self.thread.started.connect(self.worker.update)
+        self.thread.finished.connect(self.update_complete)
+
+        # create a "busy, please wait" dialog
+        self.busy = QProgressDialog(self)
+        self.busy.setModal(True)
+        self.busy.setLabelText("Processing analysis...")
+        self.busy.setRange(0, 0)
+        self.busy.setMinimumDuration(0)
+        self.busy.canceled.connect(self.thread.requestInterruption)
+
+        # Ensure settings are consistent with the initial .ui state
+        self.max_path_length.setEnabled(self.all_paths.isChecked())
+        self.source.setEnabled(not self.flows_in.isChecked())
+        self.target.setEnabled(not self.flows_out.isChecked())
+        self.criteria_frame.setHidden(not self.criteria_expander.isChecked())
+        self.results_frame.setHidden(not self.results_expander.isChecked())
+        self.notes.setHidden(not self.notes_expander.isChecked())
+
+        # connect signals
+        self.buttonBox.clicked.connect(self.run)
+        self.source.textEdited.connect(self.clear_source_error)
+        self.source.editingFinished.connect(self.set_source)
+        self.target.textEdited.connect(self.clear_target_error)
+        self.target.editingFinished.connect(self.set_target)
+        self.all_paths.toggled.connect(self.all_paths_toggled)
+        self.flows_in.toggled.connect(self.flows_in_toggled)
+        self.flows_out.toggled.connect(self.flows_out_toggled)
+        self.min_perm_weight.valueChanged.connect(self.set_min_weight)
+        self.exclude_types.clicked.connect(self.choose_excluded_types)
+
+    #
+    # Analysis mode
+    #
+    def all_paths_toggled(self, value):
+        self.max_path_length.setEnabled(value)
+
+    def flows_in_toggled(self, value):
+        self.source.setEnabled(not value)
+
+    def flows_out_toggled(self, value):
+        self.target.setEnabled(not value)
+
+    #
+    # Source criteria
+    #
+
+    def clear_source_error(self):
+        self.source.setToolTip("The target type of the analysis.")
+        self.source.setPalette(self.orig_palette)
+
+    def set_source(self):
+        try:
+            # look up the type here, so invalid types can be caught immediately
+            text = self.source.text()
+            if text:
+                self.query.source = self.policy.lookup_type(text)
+            else:
+                self.query.source = None
+        except Exception as ex:
+            self.source.setToolTip("Error: " + str(ex))
+            self.source.setPalette(self.error_palette)
+
+    #
+    # Target criteria
+    #
+
+    def clear_target_error(self):
+        self.target.setToolTip("The source type of the analysis.")
+        self.target.setPalette(self.orig_palette)
+
+    def set_target(self):
+        try:
+            # look up the type here, so invalid types can be caught immediately
+            text = self.target.text()
+            if text:
+                self.query.target = self.policy.lookup_type(text)
+            else:
+                self.query.target = None
+        except Exception as ex:
+            self.target.setToolTip("Error: " + str(ex))
+            self.target.setPalette(self.error_palette)
+
+    #
+    # Options
+    #
+    def set_min_weight(self, value):
+        self.query.min_weight = value
+
+    def choose_excluded_types(self):
+        chooser = ExcludeTypes(self, self.policy)
+        chooser.show()
+
+    #
+    # Results runner
+    #
+
+    def run(self, button):
+        # right now there is only one button.
+        for mode in [self.all_paths, self.all_shortest_paths, self.flows_in, self.flows_out]:
+            if mode.isChecked():
+                break
+
+        self.query.mode = mode.objectName()
+        self.query.max_path_len = self.max_path_length.value()
+        self.query.limit = self.limit_paths.value()
+
+        # start processing
+        self.busy.show()
+        self.raw_results.clear()
+        self.thread.start()
+
+    def update_complete(self):
+        # update location of result display
+        self.raw_results.moveCursor(QTextCursor.Start)
+
+        self.busy.reset()
+
+
+class ResultsUpdater(QObject):
+
+    """
+    Thread for processing queries and updating result widgets.
+
+    Parameters:
+    query       The query object
+    model       The model for the results
+
+    Qt signals:
+    finished    The update has completed.
+    raw_line    (str) A string to be appended to the raw results.
+    """
+
+    finished = pyqtSignal()
+    raw_line = pyqtSignal(str)
+
+    def __init__(self, query):
+        super(ResultsUpdater, self).__init__()
+        self.query = query
+
+    def update(self):
+        """Run the query and update results."""
+
+        assert self.query.limit, "Code doesn't currently handle unlimited (limit=0) paths."
+        if self.query.mode == "all_paths":
+            self.transitive(self.query.all_paths(self.query.source, self.query.target,
+                                                 self.query.max_path_len))
+        elif self.query.mode == "all_shortest_paths":
+            self.transitive(self.query.all_shortest_paths(self.query.source, self.query.target))
+        elif self.query.mode == "flows_out":
+            self.direct(self.query.infoflows(self.query.source, out=True))
+        else:  # flows_in
+            self.direct(self.query.infoflows(self.query.target, out=False))
+
+        self.finished.emit()
+
+    def transitive(self, paths):
+        pathnum = 0
+        for pathnum, path in enumerate(paths, start=1):
+            self.raw_line.emit("Flow {0}:".format(pathnum))
+            for stepnum, step in enumerate(path, start=1):
+                self.raw_line.emit("  Step {0}: {1} -> {2}".format(stepnum,
+                                                                   step.source,
+                                                                   step.target))
+
+                for rule in sorted(step.rules):
+                    self.raw_line.emit("    {0}".format(rule))
+
+                self.raw_line.emit("")
+
+            if QThread.currentThread().isInterruptionRequested() or (pathnum >= self.query.limit):
+                break
+            else:
+                QThread.yieldCurrentThread()
+
+            self.raw_line.emit("")
+
+        self.raw_line.emit("{0} information flow path(s) found.\n".format(pathnum))
+
+    def direct(self, flows):
+        flownum = 0
+        for flownum, flow in enumerate(flows, start=1):
+            self.raw_line.emit("Flow {0}: {1} -> {2}".format(flownum, flow.source, flow.target))
+            for rule in sorted(flow.rules):
+                self.raw_line.emit("    {0}".format(rule))
+
+            self.raw_line.emit("")
+
+            if QThread.currentThread().isInterruptionRequested() or (flownum >= self.query.limit):
+                break
+            else:
+                QThread.yieldCurrentThread()
+
+        self.raw_line.emit("{0} information flow(s) found.\n".format(flownum))
diff --git a/lib/python2.7/site-packages/setoolsgui/apol/mainwindow.py b/lib/python2.7/site-packages/setoolsgui/apol/mainwindow.py
index 53b9f87..69a76ce 100644
--- a/lib/python2.7/site-packages/setoolsgui/apol/mainwindow.py
+++ b/lib/python2.7/site-packages/setoolsgui/apol/mainwindow.py
@@ -25,6 +25,8 @@
 from setools import PermissionMap, SELinuxPolicy
 
 from ..widget import SEToolsWidget
+# Analysis tabs:
+from .infoflow import InfoFlowAnalysisTab
 from .terulequery import TERuleQueryTab
 
 
@@ -136,7 +138,7 @@
         newtab = QWidget()
         newtab.setObjectName(counted_name)
 
-        newanalysis = tabclass(newtab, self._policy)
+        newanalysis = tabclass(newtab, self._policy, self._permmap)
 
         # create a vertical layout in the tab, place the analysis ui inside.
         tabLayout = QVBoxLayout()
@@ -192,35 +194,40 @@
     The item_mapping attribute will be populated to
     map the tree list items to the analysis tab widgets.
     """
-    _components_map = {"Attributes (Type)": TERuleQueryTab,
-                       "Booleans": TERuleQueryTab,
-                       "Categories": TERuleQueryTab,
-                       "Common Permission Sets": TERuleQueryTab,
-                       "Object Classes": TERuleQueryTab,
-                       "Policy Capabilities": TERuleQueryTab,
-                       "Roles": TERuleQueryTab,
-                       "Types": TERuleQueryTab,
-                       "Users": TERuleQueryTab}
+#    _components_map = {"Attributes (Type)": TERuleQueryTab,
+#                       "Booleans": TERuleQueryTab,
+#                       "Categories": TERuleQueryTab,
+#                       "Common Permission Sets": TERuleQueryTab,
+#                       "Object Classes": TERuleQueryTab,
+#                       "Policy Capabilities": TERuleQueryTab,
+#                       "Roles": TERuleQueryTab,
+#                       "Types": TERuleQueryTab,
+#                       "Users": TERuleQueryTab}
+#
+#    _rule_map = {"TE Rules": TERuleQueryTab,
+#                 "RBAC Rules": TERuleQueryTab,
+#                 "MLS Rules": TERuleQueryTab,
+#                 "Constraints": TERuleQueryTab}
+#
+#    _analysis_map = {"Domain Transition Analysis": TERuleQueryTab,
+#                     "Information Flow Analysis": TERuleQueryTab}
+#
+#    _labeling_map = {"fs_use Statements": TERuleQueryTab,
+#                     "Genfscon Statements": TERuleQueryTab,
+#                     "Initial SID Statements": TERuleQueryTab,
+#                     "Netifcon Statements": TERuleQueryTab,
+#                     "Nodecon Statements": TERuleQueryTab,
+#                     "Portcon Statements": TERuleQueryTab}
+#
+#    _analysis_choices = {"Components": _components_map,
+#                         "Rules": _rule_map,
+#                         "Analysis": _analysis_map,
+#                         "Labeling Statements": _labeling_map}
 
-    _rule_map = {"TE Rules": TERuleQueryTab,
-                 "RBAC Rules": TERuleQueryTab,
-                 "MLS Rules": TERuleQueryTab,
-                 "Constraints": TERuleQueryTab}
-
-    _analysis_map = {"Domain Transition Analysis": TERuleQueryTab,
-                     "Information Flow Analysis": TERuleQueryTab}
-
-    _labeling_map = {"fs_use Statements": TERuleQueryTab,
-                     "Genfscon Statements": TERuleQueryTab,
-                     "Initial SID Statements": TERuleQueryTab,
-                     "Netifcon Statements": TERuleQueryTab,
-                     "Nodecon Statements": TERuleQueryTab,
-                     "Portcon Statements": TERuleQueryTab}
-
-    _analysis_choices = {"Components": _components_map,
-                         "Rules": _rule_map,
-                         "Analysis": _analysis_map,
-                         "Labeling Statements": _labeling_map}
+    _analysis_map = {"Information Flow Analysis": InfoFlowAnalysisTab}
+    _rule_map = {"TE Rules": TERuleQueryTab}
+    _analysis_choices = {"Rules": _rule_map,
+                         "Analyses": _analysis_map}
 
     def __init__(self, parent):
         super(ChooseAnalysis, self).__init__(parent)
diff --git a/lib/python2.7/site-packages/setoolsgui/apol/models.py b/lib/python2.7/site-packages/setoolsgui/apol/models.py
index 2744ad6..f8a5a5d 100644
--- a/lib/python2.7/site-packages/setoolsgui/apol/models.py
+++ b/lib/python2.7/site-packages/setoolsgui/apol/models.py
@@ -17,11 +17,20 @@
 # <http://www.gnu.org/licenses/>.
 #
 
-from PyQt5 import QtCore
-from PyQt5.QtCore import QAbstractListModel, QModelIndex, QStringListModel, Qt
+from PyQt5.QtCore import QAbstractListModel, QItemSelectionModel, QModelIndex, QStringListModel, Qt
 from setools.policyrep.exception import NoCommon
 
 
+def invert_list_selection(selection_model):
+    """Invert the selection of a list-based model."""
+
+    model = selection_model.model()
+    rowcount = model.rowCount()
+    for row in range(rowcount):
+        index = model.createIndex(row, 0)
+        selection_model.select(index, QItemSelectionModel.Toggle)
+
+
 class SEToolsListModel(QAbstractListModel):
 
     """
diff --git a/lib/python2.7/site-packages/setoolsgui/apol/rulemodels.py b/lib/python2.7/site-packages/setoolsgui/apol/rulemodels.py
index 4367cfb..a340040 100644
--- a/lib/python2.7/site-packages/setoolsgui/apol/rulemodels.py
+++ b/lib/python2.7/site-packages/setoolsgui/apol/rulemodels.py
@@ -24,7 +24,7 @@
 class RuleResultModel(QAbstractTableModel):
     def __init__(self, parent):
         super(RuleResultModel, self).__init__(parent)
-        self.resultlist = None
+        self.resultlist = []
 
     def rowCount(self, parent=QModelIndex()):
         if self.resultlist:
@@ -85,11 +85,6 @@
             # get the whole rule for user role
             return self.resultlist[row].statement()
 
-    def set_rules(self, result_list):
-        self.beginResetModel()
-        self.resultlist = result_list
-        self.endResetModel()
-
 
 class TERuleListModel(RuleResultModel):
 
diff --git a/lib/python2.7/site-packages/setoolsgui/apol/terulequery.py b/lib/python2.7/site-packages/setoolsgui/apol/terulequery.py
index 75148fc..70d32d2 100644
--- a/lib/python2.7/site-packages/setoolsgui/apol/terulequery.py
+++ b/lib/python2.7/site-packages/setoolsgui/apol/terulequery.py
@@ -19,24 +19,31 @@
 
 import logging
 
-from PyQt5.QtCore import Qt, QSortFilterProxyModel, QStringListModel
+from PyQt5.QtCore import pyqtSignal, Qt, QObject, QSortFilterProxyModel, QStringListModel, QThread
 from PyQt5.QtGui import QPalette, QTextCursor
-from PyQt5.QtWidgets import QCompleter, QHeaderView, QScrollArea
+from PyQt5.QtWidgets import QCompleter, QHeaderView, QMessageBox, QProgressDialog, QScrollArea
 from setools import TERuleQuery
 
 from ..widget import SEToolsWidget
 from .rulemodels import TERuleListModel
-from .models import PermListModel, SEToolsListModel
+from .models import PermListModel, SEToolsListModel, invert_list_selection
 
 
 class TERuleQueryTab(SEToolsWidget, QScrollArea):
-    def __init__(self, parent, policy):
+
+    """A Type Enforcement rule query."""
+
+    def __init__(self, parent, policy, perm_map):
         super(TERuleQueryTab, self).__init__(parent)
         self.log = logging.getLogger(self.__class__.__name__)
         self.policy = policy
         self.query = TERuleQuery(policy)
         self.setupUi()
 
+    def __del__(self):
+        self.thread.quit()
+        self.thread.wait(5000)
+
     def setupUi(self):
         self.load_ui("terulequery.ui")
 
@@ -86,6 +93,22 @@
         self.sort_proxy.setSourceModel(self.table_results_model)
         self.table_results.setModel(self.sort_proxy)
 
+        # set up processing thread
+        self.thread = QThread()
+        self.worker = ResultsUpdater(self.query, self.table_results_model)
+        self.worker.moveToThread(self.thread)
+        self.worker.raw_line.connect(self.raw_results.appendPlainText)
+        self.worker.finished.connect(self.update_complete)
+        self.worker.finished.connect(self.thread.quit)
+        self.thread.started.connect(self.worker.update)
+
+        # create a "busy, please wait" dialog
+        self.busy = QProgressDialog(self)
+        self.busy.setModal(True)
+        self.busy.setRange(0, 0)
+        self.busy.setMinimumDuration(0)
+        self.busy.canceled.connect(self.thread.requestInterruption)
+
         # Ensure settings are consistent with the initial .ui state
         self.set_source_regex(self.source_regex.isChecked())
         self.set_target_regex(self.target_regex.isChecked())
@@ -105,7 +128,9 @@
         self.target.editingFinished.connect(self.set_target)
         self.target_regex.toggled.connect(self.set_target_regex)
         self.tclass.selectionModel().selectionChanged.connect(self.set_tclass)
+        self.invert_class.clicked.connect(self.invert_tclass_selection)
         self.perms.selectionModel().selectionChanged.connect(self.set_perms)
+        self.invert_perms.clicked.connect(self.invert_perms_selection)
         self.default_type.textEdited.connect(self.clear_default_error)
         self.default_type.editingFinished.connect(self.set_default_type)
         self.default_regex.toggled.connect(self.set_default_regex)
@@ -184,6 +209,9 @@
         self.query.tclass = selected_classes
         self.perms_model.set_classes(selected_classes)
 
+    def invert_tclass_selection(self):
+        invert_list_selection(self.tclass.selectionModel())
+
     #
     # Permissions criteria
     #
@@ -195,6 +223,9 @@
 
         self.query.perms = selected_perms
 
+    def invert_perms_selection(self):
+        invert_list_selection(self.perms.selectionModel())
+
     #
     # Default criteria
     #
@@ -236,21 +267,29 @@
     def run(self, button):
         # right now there is only one button.
         rule_types = []
+        max_results = 0
 
         if self.allow.isChecked():
             rule_types.append("allow")
+            max_results += self.policy.allow_count
         if self.auditallow.isChecked():
             rule_types.append("auditallow")
+            max_results += self.policy.auditallow_count
         if self.neverallow.isChecked():
             rule_types.append("neverallow")
+            max_results += self.policy.neverallow_count
         if self.dontaudit.isChecked():
             rule_types.append("dontaudit")
+            max_results += self.policy.dontaudit_count
         if self.type_transition.isChecked():
             rule_types.append("type_transition")
+            max_results += self.policy.type_transition_count
         if self.type_member.isChecked():
             rule_types.append("type_member")
+            max_results += self.policy.type_member_count
         if self.type_change.isChecked():
             rule_types.append("type_change")
+            max_results += self.policy.type_change_count
 
         self.query.ruletype = rule_types
         self.query.source_indirect = self.source_indirect.isChecked()
@@ -258,14 +297,89 @@
         self.query.perms_equal = self.perms_equal.isChecked()
         self.query.boolean_equal = self.bools_equal.isChecked()
 
-        # update results table
-        results = list(self.query.results())
-        self.table_results_model.set_rules(results)
-        self.table_results.resizeColumnsToContents()
+        # if query is broad, show warning.
+        if not self.query.source and not self.query.target and not self.query.tclass and \
+                not self.query.perms and not self.query.default and not self.query.boolean:
+            reply = QMessageBox.question(
+                self, "Continue?",
+                "This is a broad query, estimated to return {0} results.  Continue?".
+                format(max_results), QMessageBox.Yes | QMessageBox.No)
 
-        # update raw results
+            if reply == QMessageBox.No:
+                return
+
+        # start processing
+        self.busy.setLabelText("Processing query...")
+        self.busy.show()
         self.raw_results.clear()
-        for line in results:
-            self.raw_results.appendPlainText(str(line))
+        self.thread.start()
 
-        self.raw_results.moveCursor(QTextCursor.Start)
+    def update_complete(self):
+        # update sizes/location of result displays
+        if not self.busy.wasCanceled():
+            self.busy.setLabelText("Resizing the result table's columns; GUI may be unresponsive")
+            self.busy.repaint()
+            self.table_results.resizeColumnsToContents()
+            # If the permissions column width is too long, pull back
+            # to a reasonable size
+            header = self.table_results.horizontalHeader()
+            if header.sectionSize(4) > 400:
+                header.resizeSection(4, 400)
+
+        if not self.busy.wasCanceled():
+            self.busy.setLabelText("Resizing the result table's rows; GUI may be unresponsive")
+            self.busy.repaint()
+            self.table_results.resizeRowsToContents()
+
+        if not self.busy.wasCanceled():
+            self.busy.setLabelText("Moving the raw result to top; GUI may be unresponsive")
+            self.busy.repaint()
+            self.raw_results.moveCursor(QTextCursor.Start)
+
+        self.busy.reset()
+
+
+class ResultsUpdater(QObject):
+
+    """
+    Thread for processing queries and updating result widgets.
+
+    Parameters:
+    query       The query object
+    model       The model for the results
+
+    Qt signals:
+    finished    The update has completed.
+    raw_line    (str) A string to be appended to the raw results.
+    """
+
+    finished = pyqtSignal()
+    raw_line = pyqtSignal(str)
+
+    def __init__(self, query, model):
+        super(ResultsUpdater, self).__init__()
+        self.query = query
+        self.table_results_model = model
+
+    def update(self):
+        """Run the query and update results."""
+        self.table_results_model.beginResetModel()
+
+        results = []
+        counter = 0
+
+        for counter, item in enumerate(self.query.results(), start=1):
+            results.append(item)
+
+            self.raw_line.emit(str(item))
+
+            if QThread.currentThread().isInterruptionRequested():
+                break
+            elif not counter % 10:
+                # yield execution every 10 rules
+                QThread.yieldCurrentThread()
+
+        self.table_results_model.resultlist = results
+        self.table_results_model.endResetModel()
+
+        self.finished.emit()
diff --git a/lib/python2.7/site-packages/setoolsgui/libselinux.so.1 b/lib/python2.7/site-packages/setoolsgui/libselinux.so.1
deleted file mode 100755
index dc9280d..0000000
--- a/lib/python2.7/site-packages/setoolsgui/libselinux.so.1
+++ /dev/null
Binary files differ
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/__init__.py b/lib/python2.7/site-packages/setoolsgui/networkx/__init__.py
deleted file mode 100644
index 7090794..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/__init__.py
+++ /dev/null
@@ -1,85 +0,0 @@
-"""
-NetworkX
-========
-
-    NetworkX (NX) is a Python package for the creation, manipulation, and
-    study of the structure, dynamics, and functions of complex networks.
-
-    https://networkx.lanl.gov/
-
-Using
------
-
-    Just write in Python
-
-    >>> import networkx as nx
-    >>> G=nx.Graph()
-    >>> G.add_edge(1,2)
-    >>> G.add_node(42)
-    >>> print(sorted(G.nodes()))
-    [1, 2, 42]
-    >>> print(sorted(G.edges()))
-    [(1, 2)]
-"""
-#    Copyright (C) 2004-2010 by
-#    Aric Hagberg <hagberg@lanl.gov>
-#    Dan Schult <dschult@colgate.edu>
-#    Pieter Swart <swart@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-#
-# Add platform dependent shared library path to sys.path
-#
-
-from __future__ import absolute_import
-
-import sys
-if sys.version_info[:2] < (2, 6):
-    m = "Python version 2.6 or later is required for NetworkX (%d.%d detected)."
-    raise ImportError(m % sys.version_info[:2])
-del sys
-
-# Release data
-from networkx import release
-
-__author__   = '%s <%s>\n%s <%s>\n%s <%s>' % \
-              ( release.authors['Hagberg'] + release.authors['Schult'] + \
-                release.authors['Swart'] )
-__license__  = release.license
-
-__date__ = release.date
-__version__ = release.version
-
-#These are import orderwise
-from networkx.exception import  *
-import networkx.external
-import networkx.utils
-# these packages work with Python >= 2.6
-
-import networkx.classes
-from networkx.classes import *
-
-
-import networkx.convert
-from networkx.convert import *
-
-import networkx.relabel
-from networkx.relabel import *
-
-import networkx.generators
-from networkx.generators import *
-
-import networkx.readwrite
-from networkx.readwrite import *
-
-#Need to test with SciPy, when available
-import networkx.algorithms
-from networkx.algorithms import *
-import networkx.linalg
-
-from networkx.linalg import *
-from networkx.tests.test import run as test
-
-import networkx.drawing
-from networkx.drawing import *
-
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/__init__.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/__init__.py
deleted file mode 100644
index 6230da3..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/__init__.py
+++ /dev/null
@@ -1,51 +0,0 @@
-from networkx.algorithms.assortativity import *
-from networkx.algorithms.block import *
-from networkx.algorithms.boundary import *
-from networkx.algorithms.centrality import *
-from networkx.algorithms.cluster import *
-from networkx.algorithms.clique import *
-from networkx.algorithms.community import *
-from networkx.algorithms.components import *
-from networkx.algorithms.connectivity import *
-from networkx.algorithms.core import *
-from networkx.algorithms.cycles import *
-from networkx.algorithms.dag import *
-from networkx.algorithms.distance_measures import *
-from networkx.algorithms.flow import *
-from networkx.algorithms.hierarchy import *
-from networkx.algorithms.matching import *
-from networkx.algorithms.mis import *
-from networkx.algorithms.mst import *
-from networkx.algorithms.link_analysis import *
-from networkx.algorithms.operators import *
-from networkx.algorithms.shortest_paths import *
-from networkx.algorithms.smetric import *
-from networkx.algorithms.traversal import *
-from networkx.algorithms.isolate import *
-from networkx.algorithms.euler import *
-from networkx.algorithms.vitality import *
-from networkx.algorithms.chordal import *
-from networkx.algorithms.richclub import *
-from networkx.algorithms.distance_regular import *
-from networkx.algorithms.swap import *
-from networkx.algorithms.graphical import *
-from networkx.algorithms.simple_paths import *
-
-import networkx.algorithms.assortativity
-import networkx.algorithms.bipartite
-import networkx.algorithms.centrality
-import networkx.algorithms.cluster
-import networkx.algorithms.clique
-import networkx.algorithms.components
-import networkx.algorithms.connectivity
-import networkx.algorithms.flow
-import networkx.algorithms.isomorphism
-import networkx.algorithms.link_analysis
-import networkx.algorithms.shortest_paths
-import networkx.algorithms.traversal
-import networkx.algorithms.chordal
-import networkx.algorithms.operators
-
-from networkx.algorithms.bipartite import projected_graph,project,is_bipartite
-from networkx.algorithms.isomorphism import is_isomorphic,could_be_isomorphic,\
-    fast_could_be_isomorphic,faster_could_be_isomorphic
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/approximation/__init__.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/approximation/__init__.py
deleted file mode 100644
index eb797c2..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/approximation/__init__.py
+++ /dev/null
@@ -1,6 +0,0 @@
-from networkx.algorithms.approximation.clique import *
-from networkx.algorithms.approximation.dominating_set import *
-from networkx.algorithms.approximation.independent_set import *
-from networkx.algorithms.approximation.matching import *
-from networkx.algorithms.approximation.ramsey import *
-from networkx.algorithms.approximation.vertex_cover import *
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/approximation/clique.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/approximation/clique.py
deleted file mode 100644
index be363f6..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/approximation/clique.py
+++ /dev/null
@@ -1,97 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-Cliques.
-"""
-#   Copyright (C) 2011-2012 by
-#   Nicholas Mancuso <nick.mancuso@gmail.com>
-#   All rights reserved.
-#   BSD license.
-import networkx as nx
-from networkx.algorithms.approximation import ramsey
-__author__ = """Nicholas Mancuso (nick.mancuso@gmail.com)"""
-__all__ = ["clique_removal","max_clique"]
-
-def max_clique(G):
-    r"""Find the Maximum Clique
-
-    Finds the `O(|V|/(log|V|)^2)` apx of maximum clique/independent set
-    in the worst case.
-
-    Parameters
-    ----------
-    G : NetworkX graph
-        Undirected graph
-
-    Returns
-    -------
-    clique : set
-        The apx-maximum clique of the graph
-
-    Notes
-    ------
-    A clique in an undirected graph G = (V, E) is a subset of the vertex set
-    `C \subseteq V`, such that for every two vertices in C, there exists an edge
-    connecting the two. This is equivalent to saying that the subgraph
-    induced by C is complete (in some cases, the term clique may also refer
-    to the subgraph).
-
-    A maximum clique is a clique of the largest possible size in a given graph.
-    The clique number `\omega(G)` of a graph G is the number of
-    vertices in a maximum clique in G. The intersection number of
-    G is the smallest number of cliques that together cover all edges of G.
-
-    http://en.wikipedia.org/wiki/Maximum_clique
-
-    References
-    ----------
-    .. [1] Boppana, R., & Halldórsson, M. M. (1992).
-        Approximating maximum independent sets by excluding subgraphs.
-        BIT Numerical Mathematics, 32(2), 180–196. Springer.
-        doi:10.1007/BF01994876
-    """
-    if G is None:
-        raise ValueError("Expected NetworkX graph!")
-
-    # finding the maximum clique in a graph is equivalent to finding
-    # the independent set in the complementary graph
-    cgraph = nx.complement(G)
-    iset, _ = clique_removal(cgraph)
-    return iset
-
-def clique_removal(G):
-    """ Repeatedly remove cliques from the graph.
-
-    Results in a `O(|V|/(\log |V|)^2)` approximation of maximum clique
-    & independent set. Returns the largest independent set found, along
-    with found maximal cliques.
-
-    Parameters
-    ----------
-    G : NetworkX graph
-        Undirected graph
-
-    Returns
-    -------
-    max_ind_cliques : (set, list) tuple
-        Maximal independent set and list of maximal cliques (sets) in the graph.
-
-    References
-    ----------
-    .. [1] Boppana, R., & Halldórsson, M. M. (1992).
-        Approximating maximum independent sets by excluding subgraphs.
-        BIT Numerical Mathematics, 32(2), 180–196. Springer.
-    """
-    graph = G.copy()
-    c_i, i_i = ramsey.ramsey_R2(graph)
-    cliques = [c_i]
-    isets = [i_i]
-    while graph:
-        graph.remove_nodes_from(c_i)
-        c_i, i_i = ramsey.ramsey_R2(graph)
-        if c_i:
-            cliques.append(c_i)
-        if i_i:
-            isets.append(i_i)
-
-    maxiset = max(isets)
-    return maxiset, cliques
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/approximation/dominating_set.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/approximation/dominating_set.py
deleted file mode 100644
index 6a167e2..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/approximation/dominating_set.py
+++ /dev/null
@@ -1,114 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-**************************************
-Minimum Vertex and Edge Dominating Set
-**************************************
-
-
-A dominating set for a graph G = (V, E) is a subset D of V such that every
-vertex not in D is joined to at least one member of D by some edge. The
-domination number gamma(G) is the number of vertices in a smallest dominating
-set for G. Given a graph G = (V, E) find a minimum weight dominating set V'.
-
-http://en.wikipedia.org/wiki/Dominating_set
-
-An edge dominating set for a graph G = (V, E) is a subset D of E such that
-every edge not in D is adjacent to at least one edge in D.
-
-http://en.wikipedia.org/wiki/Edge_dominating_set
-"""
-#   Copyright (C) 2011-2012 by
-#   Nicholas Mancuso <nick.mancuso@gmail.com>
-#   All rights reserved.
-#   BSD license.
-import networkx as nx
-__all__ = ["min_weighted_dominating_set",
-           "min_edge_dominating_set"]
-__author__ = """Nicholas Mancuso (nick.mancuso@gmail.com)"""
-
-
-def min_weighted_dominating_set(G, weight=None):
-    r"""Return minimum weight vertex dominating set.
-
-    Parameters
-    ----------
-    G : NetworkX graph
-      Undirected graph
-
-    weight : None or string, optional (default = None)
-        If None, every edge has weight/distance/weight 1. If a string, use this
-        edge attribute as the edge weight. Any edge attribute not present
-        defaults to 1.
-
-    Returns
-    -------
-    min_weight_dominating_set : set
-      Returns a set of vertices whose weight sum is no more than log w(V) * OPT
-
-    Notes
-    -----
-    This algorithm computes an approximate minimum weighted dominating set
-    for the graph G. The upper-bound on the size of the solution is
-    log w(V) * OPT.  Runtime of the algorithm is `O(|E|)`.
-
-    References
-    ----------
-    .. [1] Vazirani, Vijay Approximation Algorithms (2001)
-    """
-    if not G:
-        raise ValueError("Expected non-empty NetworkX graph!")
-
-    # min cover = min dominating set
-    dom_set = set([])
-    cost_func = dict((node, nd.get(weight, 1)) \
-                     for node, nd in G.nodes_iter(data=True))
-
-    vertices = set(G)
-    sets = dict((node, set([node]) | set(G[node])) for node in G)
-
-    def _cost(subset):
-        """ Our cost effectiveness function for sets given its weight
-        """
-        cost = sum(cost_func[node] for node in subset)
-        return cost / float(len(subset - dom_set))
-
-    while vertices:
-        # find the most cost effective set, and the vertex that for that set
-        dom_node, min_set = min(sets.items(),
-                                key=lambda x: (x[0], _cost(x[1])))
-        alpha = _cost(min_set)
-
-        # reduce the cost for the rest
-        for node in min_set - dom_set:
-            cost_func[node] = alpha
-
-        # add the node to the dominating set and reduce what we must cover
-        dom_set.add(dom_node)
-        del sets[dom_node]
-        vertices = vertices - min_set
-
-    return dom_set
-
-
-def min_edge_dominating_set(G):
-    r"""Return minimum cardinality edge dominating set.
-
-    Parameters
-    ----------
-    G : NetworkX graph
-      Undirected graph
-
-    Returns
-    -------
-    min_edge_dominating_set : set
-      Returns a set of dominating edges whose size is no more than 2 * OPT.
-
-    Notes
-    -----
-    The algorithm computes an approximate solution to the edge dominating set
-    problem. The result is no more than 2 * OPT in terms of size of the set.
-    Runtime of the algorithm is `O(|E|)`.
-    """
-    if not G:
-        raise ValueError("Expected non-empty NetworkX graph!")
-    return nx.maximal_matching(G)
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/approximation/independent_set.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/approximation/independent_set.py
deleted file mode 100644
index 3b18ade..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/approximation/independent_set.py
+++ /dev/null
@@ -1,63 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-Independent Set
-
-Independent set or stable set is a set of vertices in a graph, no two of
-which are adjacent. That is, it is a set I of vertices such that for every
-two vertices in I, there is no edge connecting the two. Equivalently, each
-edge in the graph has at most one endpoint in I. The size of an independent
-set is the number of vertices it contains.
-
-A maximum independent set is a largest independent set for a given graph G
-and its size is denoted α(G). The problem of finding such a set is called
-the maximum independent set problem and is an NP-hard optimization problem.
-As such, it is unlikely that there exists an efficient algorithm for finding
-a maximum independent set of a graph.
-
-http://en.wikipedia.org/wiki/Independent_set_(graph_theory)
-
-Independent set algorithm is based on the following paper:
-
-`O(|V|/(log|V|)^2)` apx of maximum clique/independent set.
-
-Boppana, R., & Halldórsson, M. M. (1992).
-Approximating maximum independent sets by excluding subgraphs.
-BIT Numerical Mathematics, 32(2), 180–196. Springer.
-doi:10.1007/BF01994876
-
-"""
-#   Copyright (C) 2011-2012 by
-#   Nicholas Mancuso <nick.mancuso@gmail.com>
-#   All rights reserved.
-#   BSD license.
-from networkx.algorithms.approximation import clique_removal
-__all__ = ["maximum_independent_set"]
-__author__ = """Nicholas Mancuso (nick.mancuso@gmail.com)"""
-
-
-def maximum_independent_set(G):
-    """Return an approximate maximum independent set.
-
-    Parameters
-    ----------
-    G : NetworkX graph
-        Undirected graph
-
-    Returns
-    -------
-    iset : Set
-        The apx-maximum independent set
-
-    Notes
-    -----
-    Finds the `O(|V|/(log|V|)^2)` apx of independent set in the worst case.
-
-
-    References
-    ----------
-    .. [1] Boppana, R., & Halldórsson, M. M. (1992).
-       Approximating maximum independent sets by excluding subgraphs.
-       BIT Numerical Mathematics, 32(2), 180–196. Springer.
-    """
-    iset, _ = clique_removal(G)
-    return iset
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/approximation/matching.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/approximation/matching.py
deleted file mode 100644
index 231d501..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/approximation/matching.py
+++ /dev/null
@@ -1,46 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-**************
-Graph Matching
-**************
-
-Given a graph G = (V,E), a matching M in G is a set of pairwise non-adjacent
-edges; that is, no two edges share a common vertex.
-
-http://en.wikipedia.org/wiki/Matching_(graph_theory)
-"""
-#   Copyright (C) 2011-2012 by
-#   Nicholas Mancuso <nick.mancuso@gmail.com>
-#   All rights reserved.
-#   BSD license.
-import networkx as nx
-__all__ = ["min_maximal_matching"]
-__author__ = """Nicholas Mancuso (nick.mancuso@gmail.com)"""
-
-def min_maximal_matching(G):
-    r"""Returns the minimum maximal matching of G. That is, out of all maximal
-    matchings of the graph G, the smallest is returned.
-
-    Parameters
-    ----------
-    G : NetworkX graph
-      Undirected graph
-
-    Returns
-    -------
-    min_maximal_matching : set
-      Returns a set of edges such that no two edges share a common endpoint
-      and every edge not in the set shares some common endpoint in the set.
-      Cardinality will be 2*OPT in the worst case.
-
-    Notes
-    -----
-    The algorithm computes an approximate solution fo the minimum maximal
-    cardinality matching problem. The solution is no more than 2 * OPT in size.
-    Runtime is `O(|E|)`.
-
-    References
-    ----------
-    .. [1] Vazirani, Vijay Approximation Algorithms (2001)
-    """
-    return nx.maximal_matching(G)
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/approximation/ramsey.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/approximation/ramsey.py
deleted file mode 100644
index 03535ce..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/approximation/ramsey.py
+++ /dev/null
@@ -1,37 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-Ramsey numbers.
-"""
-#   Copyright (C) 2011 by
-#   Nicholas Mancuso <nick.mancuso@gmail.com>
-#   All rights reserved.
-#   BSD license.
-import networkx as nx
-__all__ = ["ramsey_R2"]
-__author__ = """Nicholas Mancuso (nick.mancuso@gmail.com)"""
-
-def ramsey_R2(G):
-    r"""Approximately computes the Ramsey number `R(2;s,t)` for graph.
-
-    Parameters
-    ----------
-    G : NetworkX graph
-        Undirected graph
-
-    Returns
-    -------
-    max_pair : (set, set) tuple
-        Maximum clique, Maximum independent set.
-    """
-    if not G:
-        return (set([]), set([]))
-
-    node = next(G.nodes_iter())
-    nbrs = nx.all_neighbors(G, node)
-    nnbrs = nx.non_neighbors(G, node)
-    c_1, i_1 = ramsey_R2(G.subgraph(nbrs))
-    c_2, i_2 = ramsey_R2(G.subgraph(nnbrs))
-
-    c_1.add(node)
-    i_2.add(node)
-    return (max([c_1, c_2]), max([i_1, i_2]))
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/approximation/tests/test_clique.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/approximation/tests/test_clique.py
deleted file mode 100644
index 0f384a5..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/approximation/tests/test_clique.py
+++ /dev/null
@@ -1,41 +0,0 @@
-from nose.tools import *
-import networkx as nx
-import networkx.algorithms.approximation as apxa
-
-def test_clique_removal():
-    graph = nx.complete_graph(10)
-    i, cs = apxa.clique_removal(graph)
-    idens = nx.density(graph.subgraph(i))
-    eq_(idens, 0.0, "i-set not found by clique_removal!")
-    for clique in cs:
-        cdens = nx.density(graph.subgraph(clique))
-        eq_(cdens, 1.0, "clique not found by clique_removal!")
-
-    graph = nx.trivial_graph(nx.Graph())
-    i, cs = apxa.clique_removal(graph)
-    idens = nx.density(graph.subgraph(i))
-    eq_(idens, 0.0, "i-set not found by ramsey!")
-    # we should only have 1-cliques. Just singleton nodes.
-    for clique in cs:
-        cdens = nx.density(graph.subgraph(clique))
-        eq_(cdens, 0.0, "clique not found by clique_removal!")
-
-    graph = nx.barbell_graph(10, 5, nx.Graph())
-    i, cs = apxa.clique_removal(graph)
-    idens = nx.density(graph.subgraph(i))
-    eq_(idens, 0.0, "i-set not found by ramsey!")
-    for clique in cs:
-        cdens = nx.density(graph.subgraph(clique))
-        eq_(cdens, 1.0, "clique not found by clique_removal!")
-
-def test_max_clique_smoke():
-    # smoke test
-    G = nx.Graph()
-    assert_equal(len(apxa.max_clique(G)),0)
-
-def test_max_clique():
-    # create a complete graph
-    graph = nx.complete_graph(30)
-    # this should return the entire graph
-    mc = apxa.max_clique(graph)
-    assert_equals(30, len(mc))
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/approximation/tests/test_dominating_set.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/approximation/tests/test_dominating_set.py
deleted file mode 100644
index 0dbc79f..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/approximation/tests/test_dominating_set.py
+++ /dev/null
@@ -1,53 +0,0 @@
-#!/usr/bin/env python
-from nose.tools import *
-import networkx as nx
-import networkx.algorithms.approximation as apxa
-
-
-class TestMinWeightDominatingSet:
-
-    def test_min_weighted_dominating_set(self):
-        graph = nx.Graph()
-        graph.add_edge(1, 2)
-        graph.add_edge(1, 5)
-        graph.add_edge(2, 3)
-        graph.add_edge(2, 5)
-        graph.add_edge(3, 4)
-        graph.add_edge(3, 6)
-        graph.add_edge(5, 6)
-
-        vertices = set([1, 2, 3, 4, 5, 6])
-        # due to ties, this might be hard to test tight bounds
-        dom_set = apxa.min_weighted_dominating_set(graph)
-        for vertex in vertices - dom_set:
-            neighbors = set(graph.neighbors(vertex))
-            ok_(len(neighbors & dom_set) > 0, "Non dominating set found!")
-
-    def test_min_edge_dominating_set(self):
-        graph = nx.path_graph(5)
-        dom_set = apxa.min_edge_dominating_set(graph)
-
-        # this is a crappy way to test, but good enough for now.
-        for edge in graph.edges_iter():
-            if edge in dom_set:
-                continue
-            else:
-                u, v = edge
-                found = False
-                for dom_edge in dom_set:
-                    found |= u == dom_edge[0] or u == dom_edge[1]
-                ok_(found, "Non adjacent edge found!")
-
-        graph = nx.complete_graph(10)
-        dom_set = apxa.min_edge_dominating_set(graph)
-
-        # this is a crappy way to test, but good enough for now.
-        for edge in graph.edges_iter():
-            if edge in dom_set:
-                continue
-            else:
-                u, v = edge
-                found = False
-                for dom_edge in dom_set:
-                    found |= u == dom_edge[0] or u == dom_edge[1]
-                ok_(found, "Non adjacent edge found!")
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/approximation/tests/test_independent_set.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/approximation/tests/test_independent_set.py
deleted file mode 100644
index 8825ec8..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/approximation/tests/test_independent_set.py
+++ /dev/null
@@ -1,8 +0,0 @@
-from nose.tools import *
-import networkx as nx
-import networkx.algorithms.approximation as a
-
-def test_independent_set():
-    # smoke test
-    G = nx.Graph()
-    assert_equal(len(a.maximum_independent_set(G)),0)
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/approximation/tests/test_matching.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/approximation/tests/test_matching.py
deleted file mode 100644
index b768c39..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/approximation/tests/test_matching.py
+++ /dev/null
@@ -1,8 +0,0 @@
-from nose.tools import *
-import networkx as nx
-import networkx.algorithms.approximation as a
-
-def test_min_maximal_matching():
-    # smoke test
-    G = nx.Graph()
-    assert_equal(len(a.min_maximal_matching(G)),0)
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/approximation/tests/test_ramsey.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/approximation/tests/test_ramsey.py
deleted file mode 100644
index 7ab8dac..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/approximation/tests/test_ramsey.py
+++ /dev/null
@@ -1,27 +0,0 @@
-from nose.tools import *
-import networkx as nx
-import networkx.algorithms.approximation as apxa
-
-def test_ramsey():
-    # this should only find the complete graph
-    graph = nx.complete_graph(10)
-    c, i = apxa.ramsey_R2(graph)
-    cdens = nx.density(graph.subgraph(c))
-    eq_(cdens, 1.0, "clique not found by ramsey!")
-    idens = nx.density(graph.subgraph(i))
-    eq_(idens, 0.0, "i-set not found by ramsey!")
-
-    # this trival graph has no cliques. should just find i-sets
-    graph = nx.trivial_graph(nx.Graph())
-    c, i = apxa.ramsey_R2(graph)
-    cdens = nx.density(graph.subgraph(c))
-    eq_(cdens, 0.0, "clique not found by ramsey!")
-    idens = nx.density(graph.subgraph(i))
-    eq_(idens, 0.0, "i-set not found by ramsey!")
-
-    graph = nx.barbell_graph(10, 5, nx.Graph())
-    c, i = apxa.ramsey_R2(graph)
-    cdens = nx.density(graph.subgraph(c))
-    eq_(cdens, 1.0, "clique not found by ramsey!")
-    idens = nx.density(graph.subgraph(i))
-    eq_(idens, 0.0, "i-set not found by ramsey!")
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/approximation/tests/test_vertex_cover.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/approximation/tests/test_vertex_cover.py
deleted file mode 100644
index 74b3f51..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/approximation/tests/test_vertex_cover.py
+++ /dev/null
@@ -1,39 +0,0 @@
-#!/usr/bin/env python
-from nose.tools import *
-import networkx as nx
-from  networkx.algorithms import approximation as a
-
-class TestMWVC:
-
-    def test_min_vertex_cover(self):
-        # create a simple star graph
-        size = 50
-        sg = nx.star_graph(size)
-        cover = a.min_weighted_vertex_cover(sg)
-        assert_equals(2, len(cover))
-        for u, v in sg.edges_iter():
-            ok_((u in cover or v in cover), "Node node covered!")
-
-        wg = nx.Graph()
-        wg.add_node(0, weight=10)
-        wg.add_node(1, weight=1)
-        wg.add_node(2, weight=1)
-        wg.add_node(3, weight=1)
-        wg.add_node(4, weight=1)
-
-        wg.add_edge(0, 1)
-        wg.add_edge(0, 2)
-        wg.add_edge(0, 3)
-        wg.add_edge(0, 4)
-
-        wg.add_edge(1,2)
-        wg.add_edge(2,3)
-        wg.add_edge(3,4)
-        wg.add_edge(4,1)
-
-        cover = a.min_weighted_vertex_cover(wg, weight="weight")
-        csum = sum(wg.node[node]["weight"] for node in cover)
-        assert_equals(4, csum)
-
-        for u, v in wg.edges_iter():
-            ok_((u in cover or v in cover), "Node node covered!")
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/approximation/vertex_cover.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/approximation/vertex_cover.py
deleted file mode 100644
index c588e18..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/approximation/vertex_cover.py
+++ /dev/null
@@ -1,65 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-************
-Vertex Cover
-************
-
-Given an undirected graph `G = (V, E)` and a function w assigning nonnegative
-weights to its vertices, find a minimum weight subset of V such that each edge
-in E is incident to at least one vertex in the subset.
-
-http://en.wikipedia.org/wiki/Vertex_cover
-"""
-#   Copyright (C) 2011-2012 by
-#   Nicholas Mancuso <nick.mancuso@gmail.com>
-#   All rights reserved.
-#   BSD license.
-from networkx.utils import *
-__all__ = ["min_weighted_vertex_cover"]
-__author__ = """Nicholas Mancuso (nick.mancuso@gmail.com)"""
-
-@not_implemented_for('directed')
-def min_weighted_vertex_cover(G, weight=None):
-    r"""2-OPT Local Ratio for Minimum Weighted Vertex Cover
-
-    Find an approximate minimum weighted vertex cover of a graph.
-
-    Parameters
-    ----------
-    G : NetworkX graph
-      Undirected graph
-
-    weight : None or string, optional (default = None)
-        If None, every edge has weight/distance/cost 1. If a string, use this
-        edge attribute as the edge weight. Any edge attribute not present
-        defaults to 1.
-
-    Returns
-    -------
-    min_weighted_cover : set
-      Returns a set of vertices whose weight sum is no more than 2 * OPT.
-
-    Notes
-    -----
-    Local-Ratio algorithm for computing an approximate vertex cover.
-    Algorithm greedily reduces the costs over edges and iteratively
-    builds a cover. Worst-case runtime is `O(|E|)`.
-
-    References
-    ----------
-    .. [1] Bar-Yehuda, R., & Even, S. (1985). A local-ratio theorem for
-       approximating the weighted vertex cover problem.
-       Annals of Discrete Mathematics, 25, 27–46
-       http://www.cs.technion.ac.il/~reuven/PDF/vc_lr.pdf
-    """
-    weight_func = lambda nd: nd.get(weight, 1)
-    cost = dict((n, weight_func(nd)) for n, nd in G.nodes(data=True))
-
-    # while there are edges uncovered, continue
-    for u,v in G.edges_iter():
-        # select some uncovered edge
-        min_cost = min([cost[u], cost[v]])
-        cost[u] -= min_cost
-        cost[v] -= min_cost
-
-    return set(u for u in cost if cost[u] == 0)
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/assortativity/__init__.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/assortativity/__init__.py
deleted file mode 100644
index 4d98886..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/assortativity/__init__.py
+++ /dev/null
@@ -1,5 +0,0 @@
-from networkx.algorithms.assortativity.connectivity import *
-from networkx.algorithms.assortativity.correlation import *
-from networkx.algorithms.assortativity.mixing import *
-from networkx.algorithms.assortativity.neighbor_degree import *
-from networkx.algorithms.assortativity.pairs import *
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/assortativity/connectivity.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/assortativity/connectivity.py
deleted file mode 100644
index 17b0265..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/assortativity/connectivity.py
+++ /dev/null
@@ -1,123 +0,0 @@
-#-*- coding: utf-8 -*-
-#    Copyright (C) 2011 by 
-#    Jordi Torrents <jtorrents@milnou.net>
-#    Aric Hagberg <hagberg@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-from collections import defaultdict
-import networkx as nx
-__author__ = """\n""".join(['Jordi Torrents <jtorrents@milnou.net>',
-                            'Aric Hagberg (hagberg@lanl.gov)'])
-__all__ = ['average_degree_connectivity',
-           'k_nearest_neighbors']
-
-def _avg_deg_conn(G, neighbors, source_degree, target_degree, 
-                  nodes=None, weight=None):
-    # "k nearest neighbors, or neighbor_connectivity
-    dsum = defaultdict(float)
-    dnorm = defaultdict(float)
-    for n,k in source_degree(nodes).items():
-        nbrdeg = target_degree(neighbors(n))
-        if weight is None:
-            s = float(sum(nbrdeg.values()))
-        else: # weight nbr degree by weight of (n,nbr) edge
-            if neighbors == G.neighbors:
-                s = float(sum((G[n][nbr].get(weight,1)*d 
-                               for nbr,d in nbrdeg.items())))
-            elif neighbors == G.successors:
-                s = float(sum((G[n][nbr].get(weight,1)*d 
-                               for nbr,d in nbrdeg.items())))
-            elif neighbors == G.predecessors:
-                s = float(sum((G[nbr][n].get(weight,1)*d 
-                               for nbr,d in nbrdeg.items())))
-        dnorm[k] += source_degree(n, weight=weight)
-        dsum[k] += s
-        
-    # normalize
-    dc = {}
-    for k,avg in dsum.items():
-        dc[k]=avg
-        norm = dnorm[k]
-        if avg > 0 and norm > 0:
-            dc[k]/=norm
-    return dc
-
-def average_degree_connectivity(G, source="in+out", target="in+out",
-                                nodes=None, weight=None):
-    r"""Compute the average degree connectivity of graph.
-
-    The average degree connectivity is the average nearest neighbor degree of
-    nodes with degree k. For weighted graphs, an analogous measure can 
-    be computed using the weighted average neighbors degree defined in 
-    [1]_, for a node `i`, as:
-
-    .. math::
-
-        k_{nn,i}^{w} = \frac{1}{s_i} \sum_{j \in N(i)} w_{ij} k_j
-
-    where `s_i` is the weighted degree of node `i`, 
-    `w_{ij}` is the weight of the edge that links `i` and `j`,
-    and `N(i)` are the neighbors of node `i`.
-
-    Parameters
-    ----------
-    G : NetworkX graph
-
-    source :  "in"|"out"|"in+out" (default:"in+out")
-       Directed graphs only. Use "in"- or "out"-degree for source node.
-
-    target : "in"|"out"|"in+out" (default:"in+out"
-       Directed graphs only. Use "in"- or "out"-degree for target node.
-
-    nodes: list or iterable (optional)
-        Compute neighbor connectivity for these nodes. The default is all nodes.
-
-    weight : string or None, optional (default=None)
-       The edge attribute that holds the numerical value used as a weight.
-       If None, then each edge has weight 1.
-
-    Returns
-    -------
-    d: dict
-       A dictionary keyed by degree k with the value of average connectivity.
-    
-    Examples
-    --------
-    >>> G=nx.path_graph(4)
-    >>> G.edge[1][2]['weight'] = 3
-    >>> nx.k_nearest_neighbors(G)
-    {1: 2.0, 2: 1.5}
-    >>> nx.k_nearest_neighbors(G, weight='weight')
-    {1: 2.0, 2: 1.75}
-
-    See also
-    --------
-    neighbors_average_degree
-
-    Notes
-    -----
-    This algorithm is sometimes called "k nearest neighbors'.
-
-    References
-    ----------    
-    .. [1] A. Barrat, M. Barthélemy, R. Pastor-Satorras, and A. Vespignani, 
-       "The architecture of complex weighted networks". 
-       PNAS 101 (11): 3747–3752 (2004).
-    """
-    source_degree = G.degree
-    target_degree = G.degree
-    neighbors = G.neighbors
-    if G.is_directed():
-        direction = {'out':G.out_degree,
-                     'in':G.in_degree,
-                     'in+out': G.degree}
-        source_degree = direction[source]
-        target_degree = direction[target]
-        if source == 'in':
-            neighbors=G.predecessors
-        elif source == 'out':
-            neighbors=G.successors
-    return _avg_deg_conn(G, neighbors, source_degree, target_degree,
-                         nodes=nodes, weight=weight)
-
-k_nearest_neighbors=average_degree_connectivity
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/assortativity/correlation.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/assortativity/correlation.py
deleted file mode 100644
index 6d471c9..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/assortativity/correlation.py
+++ /dev/null
@@ -1,298 +0,0 @@
-#-*- coding: utf-8 -*-
-"""Node assortativity coefficients and correlation measures.
-"""
-import networkx as nx
-from networkx.algorithms.assortativity.mixing import degree_mixing_matrix, \
-    attribute_mixing_matrix, numeric_mixing_matrix
-from networkx.algorithms.assortativity.pairs import node_degree_xy, \
-    node_attribute_xy
-__author__ = ' '.join(['Aric Hagberg <aric.hagberg@gmail.com>',
-                       'Oleguer Sagarra <oleguer.sagarra@gmail.com>'])
-__all__ = ['degree_pearson_correlation_coefficient',
-           'degree_assortativity_coefficient',
-           'attribute_assortativity_coefficient',
-           'numeric_assortativity_coefficient']
-
-def degree_assortativity_coefficient(G, x='out', y='in', weight=None, 
-                                     nodes=None):
-    """Compute degree assortativity of graph.
-
-    Assortativity measures the similarity of connections
-    in the graph with respect to the node degree.
-
-    Parameters
-    ----------
-    G : NetworkX graph
-
-    x: string ('in','out')
-       The degree type for source node (directed graphs only).
-    
-    y: string ('in','out')
-       The degree type for target node (directed graphs only).
-
-    weight: string or None, optional (default=None)
-       The edge attribute that holds the numerical value used 
-       as a weight.  If None, then each edge has weight 1.
-       The degree is the sum of the edge weights adjacent to the node.
-
-    nodes: list or iterable (optional)
-        Compute degree assortativity only for nodes in container. 
-        The default is all nodes.
-
-    Returns
-    -------
-    r : float
-       Assortativity of graph by degree.
-    
-    Examples
-    --------
-    >>> G=nx.path_graph(4)
-    >>> r=nx.degree_assortativity_coefficient(G)
-    >>> print("%3.1f"%r)
-    -0.5
-
-    See Also
-    --------
-    attribute_assortativity_coefficient
-    numeric_assortativity_coefficient
-    neighbor_connectivity
-    degree_mixing_dict
-    degree_mixing_matrix
-
-    Notes
-    -----
-    This computes Eq. (21) in Ref. [1]_ , where e is the joint
-    probability distribution (mixing matrix) of the degrees.  If G is
-    directed than the matrix e is the joint probability of the 
-    user-specified degree type for the source and target.
-
-    References
-    ----------
-    .. [1] M. E. J. Newman, Mixing patterns in networks,
-       Physical Review E, 67 026126, 2003
-    .. [2] Foster, J.G., Foster, D.V., Grassberger, P. & Paczuski, M. 
-       Edge direction and the structure of networks, PNAS 107, 10815-20 (2010).
-    """
-    M = degree_mixing_matrix(G, x=x, y=y, nodes=nodes, weight=weight)
-    return numeric_ac(M)
-
-
-def degree_pearson_correlation_coefficient(G, x='out', y='in', 
-                                           weight=None, nodes=None):
-    """Compute degree assortativity of graph. 
-
-    Assortativity measures the similarity of connections
-    in the graph with respect to the node degree.
-
-    This is the same as degree_assortativity_coefficient but uses the 
-    potentially faster scipy.stats.pearsonr function.
-
-    Parameters
-    ----------
-    G : NetworkX graph
-
-    x: string ('in','out')
-       The degree type for source node (directed graphs only).
-
-    y: string ('in','out')
-       The degree type for target node (directed graphs only).
-
-    weight: string or None, optional (default=None)
-       The edge attribute that holds the numerical value used 
-       as a weight.  If None, then each edge has weight 1.
-       The degree is the sum of the edge weights adjacent to the node.
-
-    nodes: list or iterable (optional)
-        Compute pearson correlation of degrees only for specified nodes.
-        The default is all nodes.
-
-    Returns
-    -------
-    r : float
-       Assortativity of graph by degree.
-    
-    Examples
-    --------
-    >>> G=nx.path_graph(4)
-    >>> r=nx.degree_pearson_correlation_coefficient(G) 
-    >>> r 
-    -0.5
-
-    Notes
-    -----
-    This calls scipy.stats.pearsonr.
-
-    References
-    ----------
-    .. [1] M. E. J. Newman, Mixing patterns in networks
-           Physical Review E, 67 026126, 2003
-    .. [2] Foster, J.G., Foster, D.V., Grassberger, P. & Paczuski, M. 
-       Edge direction and the structure of networks, PNAS 107, 10815-20 (2010).
-    """
-    try:
-        import scipy.stats as stats
-    except ImportError:
-        raise ImportError(
-          "Assortativity requires SciPy: http://scipy.org/ ")
-    xy=node_degree_xy(G, x=x, y=y, nodes=nodes, weight=weight)
-    x,y=zip(*xy)
-    return stats.pearsonr(x,y)[0]
-
-
-def attribute_assortativity_coefficient(G,attribute,nodes=None):
-    """Compute assortativity for node attributes.
-
-    Assortativity measures the similarity of connections
-    in the graph with respect to the given attribute.
-    
-    Parameters
-    ----------
-    G : NetworkX graph
-
-    attribute : string 
-        Node attribute key
-
-    nodes: list or iterable (optional)
-        Compute attribute assortativity for nodes in container. 
-        The default is all nodes. 
-
-    Returns
-    -------
-    r: float
-       Assortativity of graph for given attribute
-    
-    Examples
-    --------
-    >>> G=nx.Graph()
-    >>> G.add_nodes_from([0,1],color='red')
-    >>> G.add_nodes_from([2,3],color='blue')
-    >>> G.add_edges_from([(0,1),(2,3)])
-    >>> print(nx.attribute_assortativity_coefficient(G,'color'))
-    1.0
-
-    Notes
-    -----
-    This computes Eq. (2) in Ref. [1]_ , trace(M)-sum(M))/(1-sum(M),
-    where M is the joint probability distribution (mixing matrix)
-    of the specified attribute.
-
-    References
-    ----------
-    .. [1] M. E. J. Newman, Mixing patterns in networks,
-       Physical Review E, 67 026126, 2003
-    """
-    M = attribute_mixing_matrix(G,attribute,nodes)
-    return attribute_ac(M)
-
-
-def numeric_assortativity_coefficient(G, attribute, nodes=None):
-    """Compute assortativity for numerical node attributes.
-
-    Assortativity measures the similarity of connections
-    in the graph with respect to the given numeric attribute.
-    
-    Parameters
-    ----------
-    G : NetworkX graph
-
-    attribute : string 
-        Node attribute key
-
-    nodes: list or iterable (optional)
-        Compute numeric assortativity only for attributes of nodes in 
-        container. The default is all nodes.
-
-    Returns
-    -------
-    r: float
-       Assortativity of graph for given attribute
-    
-    Examples
-    --------
-    >>> G=nx.Graph()
-    >>> G.add_nodes_from([0,1],size=2)
-    >>> G.add_nodes_from([2,3],size=3)
-    >>> G.add_edges_from([(0,1),(2,3)])
-    >>> print(nx.numeric_assortativity_coefficient(G,'size'))
-    1.0
-
-    Notes
-    -----
-    This computes Eq. (21) in Ref. [1]_ , for the mixing matrix of 
-    of the specified attribute.
-
-    References
-    ----------
-    .. [1] M. E. J. Newman, Mixing patterns in networks
-           Physical Review E, 67 026126, 2003
-    """
-    a = numeric_mixing_matrix(G,attribute,nodes)
-    return numeric_ac(a)
-
-
-def attribute_ac(M):
-    """Compute assortativity for attribute matrix M.
-
-    Parameters
-    ----------
-    M : numpy array or matrix
-        Attribute mixing matrix.
-
-    Notes
-    -----
-    This computes Eq. (2) in Ref. [1]_ , (trace(e)-sum(e))/(1-sum(e)),
-    where e is the joint probability distribution (mixing matrix)
-    of the specified attribute.
-
-    References
-    ----------
-    .. [1] M. E. J. Newman, Mixing patterns in networks,
-       Physical Review E, 67 026126, 2003
-    """
-    try:
-        import numpy
-    except ImportError:
-        raise ImportError(
-          "attribute_assortativity requires NumPy: http://scipy.org/ ")
-    if M.sum() != 1.0:
-        M=M/float(M.sum())
-    M=numpy.asmatrix(M)
-    s=(M*M).sum()
-    t=M.trace()
-    r=(t-s)/(1-s)
-    return float(r)
-
-
-def numeric_ac(M):
-    # M is a numpy matrix or array
-    # numeric assortativity coefficient, pearsonr
-    try:
-        import numpy
-    except ImportError:
-        raise ImportError('numeric_assortativity requires ',
-                          'NumPy: http://scipy.org/')
-    if M.sum() != 1.0:
-        M=M/float(M.sum())
-    nx,ny=M.shape # nx=ny
-    x=numpy.arange(nx)
-    y=numpy.arange(ny)
-    a=M.sum(axis=0)
-    b=M.sum(axis=1)
-    vara=(a*x**2).sum()-((a*x).sum())**2
-    varb=(b*x**2).sum()-((b*x).sum())**2
-    xy=numpy.outer(x,y)
-    ab=numpy.outer(a,b)
-    return (xy*(M-ab)).sum()/numpy.sqrt(vara*varb)
-
-
-# fixture for nose tests
-def setup_module(module):
-    from nose import SkipTest
-    try:
-        import numpy
-    except:
-        raise SkipTest("NumPy not available")
-    try:
-        import scipy
-    except:
-        raise SkipTest("SciPy not available")
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/assortativity/mixing.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/assortativity/mixing.py
deleted file mode 100644
index 2c0e4f0..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/assortativity/mixing.py
+++ /dev/null
@@ -1,248 +0,0 @@
-#-*- coding: utf-8 -*-
-"""
-Mixing matrices for node attributes and degree.
-"""
-import networkx as nx
-from networkx.utils import dict_to_numpy_array
-from networkx.algorithms.assortativity.pairs import node_degree_xy, \
-    node_attribute_xy
-__author__ = ' '.join(['Aric Hagberg <aric.hagberg@gmail.com>'])
-__all__ = ['attribute_mixing_matrix',
-           'attribute_mixing_dict',
-           'degree_mixing_matrix',
-           'degree_mixing_dict',
-           'numeric_mixing_matrix',
-           'mixing_dict']
-
-def attribute_mixing_dict(G,attribute,nodes=None,normalized=False):
-    """Return dictionary representation of mixing matrix for attribute.
-
-    Parameters
-    ----------
-    G : graph 
-       NetworkX graph object.
-
-    attribute : string 
-       Node attribute key.
-
-    nodes: list or iterable (optional)
-        Unse nodes in container to build the dict. The default is all nodes.
-
-    normalized : bool (default=False)
-       Return counts if False or probabilities if True.
-
-    Examples
-    --------
-    >>> G=nx.Graph()
-    >>> G.add_nodes_from([0,1],color='red')
-    >>> G.add_nodes_from([2,3],color='blue')
-    >>> G.add_edge(1,3)
-    >>> d=nx.attribute_mixing_dict(G,'color')
-    >>> print(d['red']['blue'])
-    1
-    >>> print(d['blue']['red']) # d symmetric for undirected graphs
-    1
-
-    Returns
-    -------
-    d : dictionary
-       Counts or joint probability of occurrence of attribute pairs.
-    """
-    xy_iter=node_attribute_xy(G,attribute,nodes)
-    return mixing_dict(xy_iter,normalized=normalized)
-
-
-def attribute_mixing_matrix(G,attribute,nodes=None,mapping=None,
-                            normalized=True):
-    """Return mixing matrix for attribute.
-
-    Parameters
-    ----------
-    G : graph 
-       NetworkX graph object.
-
-    attribute : string 
-       Node attribute key.
-
-    nodes: list or iterable (optional)
-        Use only nodes in container to build the matrix. The default is 
-        all nodes.
-
-    mapping : dictionary, optional        
-       Mapping from node attribute to integer index in matrix.  
-       If not specified, an arbitrary ordering will be used. 
-    
-    normalized : bool (default=False)
-       Return counts if False or probabilities if True.
-
-    Returns
-    -------
-    m: numpy array
-       Counts or joint probability of occurrence of attribute pairs.
-    """
-    d=attribute_mixing_dict(G,attribute,nodes)
-    a=dict_to_numpy_array(d,mapping=mapping)
-    if normalized:
-        a=a/a.sum()
-    return a
-
-
-def degree_mixing_dict(G, x='out', y='in', weight=None, 
-                       nodes=None, normalized=False):
-    """Return dictionary representation of mixing matrix for degree.
-
-    Parameters
-    ----------
-    G : graph 
-        NetworkX graph object.
-
-    x: string ('in','out')
-       The degree type for source node (directed graphs only).
-
-    y: string ('in','out')
-       The degree type for target node (directed graphs only).
-
-    weight: string or None, optional (default=None)
-       The edge attribute that holds the numerical value used 
-       as a weight.  If None, then each edge has weight 1.
-       The degree is the sum of the edge weights adjacent to the node.
-
-    normalized : bool (default=False)
-        Return counts if False or probabilities if True.
-
-    Returns
-    -------
-    d: dictionary
-       Counts or joint probability of occurrence of degree pairs.
-    """
-    xy_iter=node_degree_xy(G, x=x, y=y, nodes=nodes, weight=weight)
-    return mixing_dict(xy_iter,normalized=normalized)
-
-
-
-def degree_mixing_matrix(G, x='out', y='in', weight=None, 
-                         nodes=None, normalized=True):
-    """Return mixing matrix for attribute.
-
-    Parameters
-    ----------
-    G : graph 
-       NetworkX graph object.
-
-    x: string ('in','out')
-       The degree type for source node (directed graphs only).
-
-    y: string ('in','out')
-       The degree type for target node (directed graphs only).
-
-    nodes: list or iterable (optional)
-        Build the matrix using only nodes in container. 
-        The default is all nodes.
-
-    weight: string or None, optional (default=None)
-       The edge attribute that holds the numerical value used 
-       as a weight.  If None, then each edge has weight 1.
-       The degree is the sum of the edge weights adjacent to the node.
-
-    normalized : bool (default=False)
-       Return counts if False or probabilities if True.
-
-    Returns
-    -------
-    m: numpy array
-       Counts, or joint probability, of occurrence of node degree.
-    """
-    d=degree_mixing_dict(G, x=x, y=y, nodes=nodes, weight=weight)
-    s=set(d.keys())
-    for k,v in d.items():
-        s.update(v.keys())
-    m=max(s)            
-    mapping=dict(zip(range(m+1),range(m+1)))
-    a=dict_to_numpy_array(d,mapping=mapping)
-    if normalized:
-        a=a/a.sum()
-    return a
-
-def numeric_mixing_matrix(G,attribute,nodes=None,normalized=True):
-    """Return numeric mixing matrix for attribute.
-
-    Parameters
-    ----------
-    G : graph 
-       NetworkX graph object.
-
-    attribute : string 
-       Node attribute key.
-
-    nodes: list or iterable (optional)
-        Build the matrix only with nodes in container. The default is all nodes.
-    
-    normalized : bool (default=False)
-       Return counts if False or probabilities if True.
-
-    Returns
-    -------
-    m: numpy array
-       Counts, or joint, probability of occurrence of node attribute pairs.
-    """
-    d=attribute_mixing_dict(G,attribute,nodes)
-    s=set(d.keys())
-    for k,v in d.items():
-        s.update(v.keys())
-    m=max(s)            
-    mapping=dict(zip(range(m+1),range(m+1)))
-    a=dict_to_numpy_array(d,mapping=mapping)
-    if normalized:
-        a=a/a.sum()
-    return a
-
-def mixing_dict(xy,normalized=False):
-    """Return a dictionary representation of mixing matrix.
-
-    Parameters
-    ----------
-    xy : list or container of two-tuples
-       Pairs of (x,y) items. 
-
-    attribute : string 
-       Node attribute key 
-
-    normalized : bool (default=False)
-       Return counts if False or probabilities if True.
-
-    Returns
-    -------
-    d: dictionary
-       Counts or Joint probability of occurrence of values in xy.
-    """
-    d={}
-    psum=0.0
-    for x,y in xy:
-        if x not in d:
-            d[x]={}
-        if y not in d:
-            d[y]={}
-        v = d[x].get(y,0)
-        d[x][y] = v+1
-        psum+=1
-
-
-    if normalized:
-        for k,jdict in d.items():
-            for j in jdict:
-                jdict[j]/=psum
-    return d
-
-
-
-# fixture for nose tests
-def setup_module(module):
-    from nose import SkipTest
-    try:
-        import numpy
-    except:
-        raise SkipTest("NumPy not available")
-    try:
-        import scipy
-    except:
-        raise SkipTest("SciPy not available")
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/assortativity/neighbor_degree.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/assortativity/neighbor_degree.py
deleted file mode 100644
index 9257954..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/assortativity/neighbor_degree.py
+++ /dev/null
@@ -1,133 +0,0 @@
-#-*- coding: utf-8 -*-
-#    Copyright (C) 2011 by 
-#    Jordi Torrents <jtorrents@milnou.net>
-#    Aric Hagberg <hagberg@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-import networkx as nx
-__author__ = """\n""".join(['Jordi Torrents <jtorrents@milnou.net>',
-                            'Aric Hagberg (hagberg@lanl.gov)'])
-__all__ = ["average_neighbor_degree"]
-
-
-def _average_nbr_deg(G, source_degree, target_degree, nodes=None, weight=None):
-    # average degree of neighbors
-    avg = {}
-    for n,deg in source_degree(nodes,weight=weight).items():
-        # normalize but not by zero degree
-        if deg == 0:
-            deg = 1
-        nbrdeg = target_degree(G[n])
-        if weight is None:
-            avg[n] = sum(nbrdeg.values())/float(deg)
-        else:
-            avg[n] = sum((G[n][nbr].get(weight,1)*d 
-                          for nbr,d in nbrdeg.items()))/float(deg)
-    return avg
-
-def average_neighbor_degree(G, source='out', target='out',
-                            nodes=None, weight=None):
-    r"""Returns the average degree of the neighborhood of each node.
-
-    The average degree of a node `i` is
-
-    .. math::
-
-        k_{nn,i} = \frac{1}{|N(i)|} \sum_{j \in N(i)} k_j
-
-    where `N(i)` are the neighbors of node `i` and `k_j` is
-    the degree of node `j` which belongs to `N(i)`. For weighted 
-    graphs, an analogous measure can be defined [1]_,
-
-    .. math::
-
-        k_{nn,i}^{w} = \frac{1}{s_i} \sum_{j \in N(i)} w_{ij} k_j
-
-    where `s_i` is the weighted degree of node `i`, `w_{ij}`
-    is the weight of the edge that links `i` and `j` and
-    `N(i)` are the neighbors of node `i`.
-
-
-    Parameters
-    ----------
-    G : NetworkX graph
-
-    source : string ("in"|"out")
-       Directed graphs only.
-       Use "in"- or "out"-degree for source node.  
-
-    target : string ("in"|"out")
-       Directed graphs only.
-       Use "in"- or "out"-degree for target node.
-
-    nodes : list or iterable, optional 
-        Compute neighbor degree for specified nodes.  The default is
-        all nodes in the graph.
-
-
-    weight : string or None, optional (default=None)
-       The edge attribute that holds the numerical value used as a weight.
-       If None, then each edge has weight 1.
-
-    Returns
-    -------
-    d: dict
-       A dictionary keyed by node with average neighbors degree value.
-
-    Examples
-    --------
-    >>> G=nx.path_graph(4)
-    >>> G.edge[0][1]['weight'] = 5
-    >>> G.edge[2][3]['weight'] = 3
-
-    >>> nx.average_neighbor_degree(G)
-    {0: 2.0, 1: 1.5, 2: 1.5, 3: 2.0}
-    >>> nx.average_neighbor_degree(G, weight='weight')
-    {0: 2.0, 1: 1.1666666666666667, 2: 1.25, 3: 2.0}
-
-    >>> G=nx.DiGraph()
-    >>> G.add_path([0,1,2,3])
-    >>> nx.average_neighbor_degree(G, source='in', target='in')
-    {0: 1.0, 1: 1.0, 2: 1.0, 3: 0.0}
-
-    >>> nx.average_neighbor_degree(G, source='out', target='out')
-    {0: 1.0, 1: 1.0, 2: 0.0, 3: 0.0}
- 
-    Notes
-    -----
-    For directed graphs you can also specify in-degree or out-degree 
-    by passing keyword arguments.
-
-    See Also
-    --------
-    average_degree_connectivity 
-    
-    References
-    ----------    
-    .. [1] A. Barrat, M. Barthélemy, R. Pastor-Satorras, and A. Vespignani, 
-       "The architecture of complex weighted networks". 
-       PNAS 101 (11): 3747–3752 (2004).
-    """
-    source_degree = G.degree
-    target_degree = G.degree
-    if G.is_directed():
-        direction = {'out':G.out_degree,
-                     'in':G.in_degree}
-        source_degree = direction[source]
-        target_degree = direction[target]
-    return _average_nbr_deg(G, source_degree, target_degree, 
-                            nodes=nodes, weight=weight)
-
-# obsolete
-# def average_neighbor_in_degree(G, nodes=None, weight=None):
-#     if not G.is_directed():
-#         raise nx.NetworkXError("Not defined for undirected graphs.")
-#     return _average_nbr_deg(G, G.in_degree, G.in_degree, nodes, weight)
-# average_neighbor_in_degree.__doc__=average_neighbor_degree.__doc__
-
-# def average_neighbor_out_degree(G, nodes=None, weight=None):
-#     if not G.is_directed():
-#         raise nx.NetworkXError("Not defined for undirected graphs.")
-#     return _average_nbr_deg(G, G.out_degree, G.out_degree, nodes, weight)
-# average_neighbor_out_degree.__doc__=average_neighbor_degree.__doc__
-
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/assortativity/pairs.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/assortativity/pairs.py
deleted file mode 100644
index 0ed0fa9..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/assortativity/pairs.py
+++ /dev/null
@@ -1,134 +0,0 @@
-#-*- coding: utf-8 -*-
-"""Generators of  x-y pairs of node data."""
-import networkx as nx
-from networkx.utils import dict_to_numpy_array
-__author__ = ' '.join(['Aric Hagberg <aric.hagberg@gmail.com>'])
-__all__ = ['node_attribute_xy',
-           'node_degree_xy']
-
-def node_attribute_xy(G, attribute, nodes=None):
-    """Return iterator of node-attribute pairs for all edges in G.
-
-    Parameters
-    ----------
-    G: NetworkX graph
-
-    attribute: key
-       The node attribute key.
-
-    nodes: list or iterable (optional)
-        Use only edges that are adjacency to specified nodes.
-        The default is all nodes.
-
-    Returns
-    -------
-    (x,y): 2-tuple
-        Generates 2-tuple of (attribute,attribute) values.
-
-    Examples
-    --------
-    >>> G = nx.DiGraph()
-    >>> G.add_node(1,color='red')
-    >>> G.add_node(2,color='blue')
-    >>> G.add_edge(1,2)
-    >>> list(nx.node_attribute_xy(G,'color'))
-    [('red', 'blue')]
-
-    Notes
-    -----
-    For undirected graphs each edge is produced twice, once for each edge 
-    representation (u,v) and (v,u), with the exception of self-loop edges 
-    which only appear once.
-    """
-    if nodes is None:
-        nodes = set(G)
-    else:
-        nodes = set(nodes)
-    node = G.node 
-    for u,nbrsdict in G.adjacency_iter():
-        if u not in nodes:
-            continue
-        uattr = node[u].get(attribute,None)
-        if G.is_multigraph():
-            for v,keys in nbrsdict.items():
-                vattr = node[v].get(attribute,None)                
-                for k,d in keys.items():
-                    yield (uattr,vattr)
-        else:
-            for v,eattr in nbrsdict.items():
-                vattr = node[v].get(attribute,None)
-                yield (uattr,vattr)
-
-
-def node_degree_xy(G, x='out', y='in', weight=None, nodes=None):
-    """Generate node degree-degree pairs for edges in G.
-
-    Parameters
-    ----------
-    G: NetworkX graph
-
-    x: string ('in','out')
-       The degree type for source node (directed graphs only).
-
-    y: string ('in','out')
-       The degree type for target node (directed graphs only).
-
-    weight: string or None, optional (default=None)
-       The edge attribute that holds the numerical value used 
-       as a weight.  If None, then each edge has weight 1.
-       The degree is the sum of the edge weights adjacent to the node.
-
-    nodes: list or iterable (optional)
-        Use only edges that are adjacency to specified nodes.
-        The default is all nodes.
-
-    Returns
-    -------
-    (x,y): 2-tuple
-        Generates 2-tuple of (degree,degree) values.
-
-
-    Examples
-    --------
-    >>> G = nx.DiGraph()
-    >>> G.add_edge(1,2)
-    >>> list(nx.node_degree_xy(G,x='out',y='in'))
-    [(1, 1)]
-    >>> list(nx.node_degree_xy(G,x='in',y='out'))
-    [(0, 0)]
-
-    Notes
-    -----
-    For undirected graphs each edge is produced twice, once for each edge 
-    representation (u,v) and (v,u), with the exception of self-loop edges 
-    which only appear once.
-    """
-    if nodes is None:
-        nodes = set(G)
-    else:
-        nodes = set(nodes)
-    xdeg = G.degree_iter
-    ydeg = G.degree_iter
-    if G.is_directed():
-        direction = {'out':G.out_degree_iter,
-                     'in':G.in_degree_iter}
-        xdeg = direction[x]
-        ydeg = direction[y]
-
-    for u,degu in xdeg(nodes, weight=weight):
-        neighbors = (nbr for _,nbr in G.edges_iter(u) if nbr in nodes)
-        for v,degv in ydeg(neighbors, weight=weight):
-            yield degu,degv
- 
-
-# fixture for nose tests
-def setup_module(module):
-    from nose import SkipTest
-    try:
-        import numpy
-    except:
-        raise SkipTest("NumPy not available")
-    try:
-        import scipy
-    except:
-        raise SkipTest("SciPy not available")
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/assortativity/tests/base_test.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/assortativity/tests/base_test.py
deleted file mode 100644
index 2e16544..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/assortativity/tests/base_test.py
+++ /dev/null
@@ -1,50 +0,0 @@
-import networkx as nx
-
-class BaseTestAttributeMixing(object):
-    
-    def setUp(self):
-        G=nx.Graph() 
-        G.add_nodes_from([0,1],fish='one')
-        G.add_nodes_from([2,3],fish='two')
-        G.add_nodes_from([4],fish='red')
-        G.add_nodes_from([5],fish='blue')
-        G.add_edges_from([(0,1),(2,3),(0,4),(2,5)])
-        self.G=G
-
-        D=nx.DiGraph() 
-        D.add_nodes_from([0,1],fish='one')
-        D.add_nodes_from([2,3],fish='two')
-        D.add_nodes_from([4],fish='red')
-        D.add_nodes_from([5],fish='blue')
-        D.add_edges_from([(0,1),(2,3),(0,4),(2,5)])
-        self.D=D
-
-        M=nx.MultiGraph() 
-        M.add_nodes_from([0,1],fish='one')
-        M.add_nodes_from([2,3],fish='two')
-        M.add_nodes_from([4],fish='red')
-        M.add_nodes_from([5],fish='blue')
-        M.add_edges_from([(0,1),(0,1),(2,3)])
-        self.M=M
-
-        S=nx.Graph()
-        S.add_nodes_from([0,1],fish='one')
-        S.add_nodes_from([2,3],fish='two')
-        S.add_nodes_from([4],fish='red')
-        S.add_nodes_from([5],fish='blue')
-        S.add_edge(0,0)
-        S.add_edge(2,2)
-        self.S=S
-
-class BaseTestDegreeMixing(object):
-    
-    def setUp(self):
-        self.P4=nx.path_graph(4)
-        self.D=nx.DiGraph() 
-        self.D.add_edges_from([(0, 2), (0, 3), (1, 3), (2, 3)])
-        self.M=nx.MultiGraph() 
-        self.M.add_path(list(range(4)))
-        self.M.add_edge(0,1)
-        self.S=nx.Graph()
-        self.S.add_edges_from([(0,0),(1,1)])
-
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/assortativity/tests/test_connectivity.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/assortativity/tests/test_connectivity.py
deleted file mode 100644
index 5091161..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/assortativity/tests/test_connectivity.py
+++ /dev/null
@@ -1,121 +0,0 @@
-#!/usr/bin/env python
-from nose.tools import *
-import networkx as nx
-
-class TestNeighborConnectivity(object):
-
-    def test_degree_p4(self):
-        G=nx.path_graph(4)
-        answer={1:2.0,2:1.5}
-        nd = nx.average_degree_connectivity(G)
-        assert_equal(nd,answer)
-        
-        D=G.to_directed()
-        answer={2:2.0,4:1.5}
-        nd = nx.average_degree_connectivity(D)
-        assert_equal(nd,answer)
-
-        answer={1:2.0,2:1.5}
-        D=G.to_directed()
-        nd = nx.average_degree_connectivity(D, source='in', target='in')
-        assert_equal(nd,answer)
-
-        D=G.to_directed()
-        nd = nx.average_degree_connectivity(D, source='in', target='in')
-        assert_equal(nd,answer)
-
-    def test_degree_p4_weighted(self):
-        G=nx.path_graph(4)
-        G[1][2]['weight']=4
-        answer={1:2.0,2:1.8}
-        nd = nx.average_degree_connectivity(G,weight='weight')
-        assert_equal(nd,answer)
-        answer={1:2.0,2:1.5}
-        nd = nx.average_degree_connectivity(G)
-        assert_equal(nd,answer)
-        
-        D=G.to_directed()
-        answer={2:2.0,4:1.8}
-        nd = nx.average_degree_connectivity(D,weight='weight')
-        assert_equal(nd,answer)
-
-        answer={1:2.0,2:1.8}
-        D=G.to_directed()
-        nd = nx.average_degree_connectivity(D,weight='weight', source='in',
-                                            target='in')
-        assert_equal(nd,answer)
-
-        D=G.to_directed()
-        nd = nx.average_degree_connectivity(D,source='in',target='out',
-                                            weight='weight')
-        assert_equal(nd,answer)
-
-    def test_weight_keyword(self):
-        G=nx.path_graph(4)
-        G[1][2]['other']=4
-        answer={1:2.0,2:1.8}
-        nd = nx.average_degree_connectivity(G,weight='other')
-        assert_equal(nd,answer)
-        answer={1:2.0,2:1.5}
-        nd = nx.average_degree_connectivity(G,weight=None)
-        assert_equal(nd,answer)
-        
-        D=G.to_directed()
-        answer={2:2.0,4:1.8}
-        nd = nx.average_degree_connectivity(D,weight='other')
-        assert_equal(nd,answer)
-
-        answer={1:2.0,2:1.8}
-        D=G.to_directed()
-        nd = nx.average_degree_connectivity(D,weight='other', source='in',
-                                            target='in')
-        assert_equal(nd,answer)
-
-        D=G.to_directed()
-        nd = nx.average_degree_connectivity(D,weight='other',source='in',
-                                            target='in')
-        assert_equal(nd,answer)
-
-    def test_degree_barrat(self):
-        G=nx.star_graph(5)
-        G.add_edges_from([(5,6),(5,7),(5,8),(5,9)])
-        G[0][5]['weight']=5
-        nd = nx.average_degree_connectivity(G)[5]
-        assert_equal(nd,1.8)
-        nd = nx.average_degree_connectivity(G,weight='weight')[5]
-        assert_almost_equal(nd,3.222222,places=5)
-        nd = nx.k_nearest_neighbors(G,weight='weight')[5]
-        assert_almost_equal(nd,3.222222,places=5)
-
-    def test_zero_deg(self):
-        G=nx.DiGraph()
-        G.add_edge(1,2)
-        G.add_edge(1,3)
-        G.add_edge(1,4)
-        c = nx.average_degree_connectivity(G)
-        assert_equal(c,{1:0,3:1})
-        c = nx.average_degree_connectivity(G, source='in', target='in')
-        assert_equal(c,{0:0,1:0})
-        c = nx.average_degree_connectivity(G, source='in', target='out')
-        assert_equal(c,{0:0,1:3})
-        c = nx.average_degree_connectivity(G, source='in', target='in+out')
-        assert_equal(c,{0:0,1:3})
-        c = nx.average_degree_connectivity(G, source='out', target='out')
-        assert_equal(c,{0:0,3:0})
-        c = nx.average_degree_connectivity(G, source='out', target='in')
-        assert_equal(c,{0:0,3:1})
-        c = nx.average_degree_connectivity(G, source='out', target='in+out')
-        assert_equal(c,{0:0,3:1})
-
-
-    def test_in_out_weight(self):
-        from itertools import permutations
-        G=nx.DiGraph()
-        G.add_edge(1,2,weight=1)
-        G.add_edge(1,3,weight=1)
-        G.add_edge(3,1,weight=1)
-        for s,t in permutations(['in','out','in+out'],2):
-            c = nx.average_degree_connectivity(G, source=s, target=t)
-            cw = nx.average_degree_connectivity(G,source=s, target=t, 
-                                                weight='weight')
-            assert_equal(c,cw)
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/assortativity/tests/test_correlation.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/assortativity/tests/test_correlation.py
deleted file mode 100644
index fbb2d51..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/assortativity/tests/test_correlation.py
+++ /dev/null
@@ -1,101 +0,0 @@
-#!/usr/bin/env python
-from nose.tools import *
-from nose import SkipTest
-import networkx as nx
-from base_test import BaseTestAttributeMixing,BaseTestDegreeMixing
-from networkx.algorithms.assortativity.correlation import attribute_ac
-
-
-class TestDegreeMixingCorrelation(BaseTestDegreeMixing):
-    @classmethod
-    def setupClass(cls):
-        global np
-        global npt
-        try:
-            import numpy as np
-            import numpy.testing as npt
-        except ImportError:
-             raise SkipTest('NumPy not available.')
-        try:
-            import scipy
-            import scipy.stats
-        except ImportError:
-             raise SkipTest('SciPy not available.')
-
-
-
-    def test_degree_assortativity_undirected(self):
-        r=nx.degree_assortativity_coefficient(self.P4)
-        npt.assert_almost_equal(r,-1.0/2,decimal=4)
-
-    def test_degree_assortativity_directed(self):
-        r=nx.degree_assortativity_coefficient(self.D)
-        npt.assert_almost_equal(r,-0.57735,decimal=4)
-
-    def test_degree_assortativity_multigraph(self):
-        r=nx.degree_assortativity_coefficient(self.M)
-        npt.assert_almost_equal(r,-1.0/7.0,decimal=4)
-
-
-    def test_degree_assortativity_undirected(self):
-        r=nx.degree_pearson_correlation_coefficient(self.P4)
-        npt.assert_almost_equal(r,-1.0/2,decimal=4)
-
-    def test_degree_assortativity_directed(self):
-        r=nx.degree_pearson_correlation_coefficient(self.D)
-        npt.assert_almost_equal(r,-0.57735,decimal=4)
-
-    def test_degree_assortativity_multigraph(self):
-        r=nx.degree_pearson_correlation_coefficient(self.M)
-        npt.assert_almost_equal(r,-1.0/7.0,decimal=4)
-
-
-
-class TestAttributeMixingCorrelation(BaseTestAttributeMixing):
-    @classmethod
-    def setupClass(cls):
-        global np
-        global npt
-        try:
-            import numpy as np
-            import numpy.testing as npt
-
-        except ImportError:
-             raise SkipTest('NumPy not available.')
-
-
-    def test_attribute_assortativity_undirected(self):
-        r=nx.attribute_assortativity_coefficient(self.G,'fish')
-        assert_equal(r,6.0/22.0)
-
-    def test_attribute_assortativity_directed(self):
-        r=nx.attribute_assortativity_coefficient(self.D,'fish')
-        assert_equal(r,1.0/3.0)
-
-    def test_attribute_assortativity_multigraph(self):
-        r=nx.attribute_assortativity_coefficient(self.M,'fish')
-        assert_equal(r,1.0)
-
-    def test_attribute_assortativity_coefficient(self):
-        # from "Mixing patterns in networks"
-        a=np.array([[0.258,0.016,0.035,0.013],
-                    [0.012,0.157,0.058,0.019],
-                    [0.013,0.023,0.306,0.035],
-                    [0.005,0.007,0.024,0.016]])
-        r=attribute_ac(a)
-        npt.assert_almost_equal(r,0.623,decimal=3)
-
-    def test_attribute_assortativity_coefficient2(self):
-        a=np.array([[0.18,0.02,0.01,0.03],
-                    [0.02,0.20,0.03,0.02],
-                    [0.01,0.03,0.16,0.01],
-                    [0.03,0.02,0.01,0.22]])
-
-        r=attribute_ac(a)
-        npt.assert_almost_equal(r,0.68,decimal=2)
-
-    def test_attribute_assortativity(self):
-        a=np.array([[50,50,0],[50,50,0],[0,0,2]])
-        r=attribute_ac(a)
-        npt.assert_almost_equal(r,0.029,decimal=3)
-
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/assortativity/tests/test_mixing.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/assortativity/tests/test_mixing.py
deleted file mode 100644
index ce60a94..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/assortativity/tests/test_mixing.py
+++ /dev/null
@@ -1,186 +0,0 @@
-#!/usr/bin/env python
-from nose.tools import *
-from nose import SkipTest
-import networkx as nx
-from base_test import BaseTestAttributeMixing,BaseTestDegreeMixing
-
-
-class TestDegreeMixingDict(BaseTestDegreeMixing):
-
-
-    def test_degree_mixing_dict_undirected(self):
-        d=nx.degree_mixing_dict(self.P4)
-        d_result={1:{2:2},
-                  2:{1:2,2:2},
-                  }
-        assert_equal(d,d_result)
-
-    def test_degree_mixing_dict_undirected_normalized(self):
-        d=nx.degree_mixing_dict(self.P4, normalized=True)
-        d_result={1:{2:1.0/3},
-                  2:{1:1.0/3,2:1.0/3},
-                  }
-        assert_equal(d,d_result)
-
-    def test_degree_mixing_dict_directed(self):
-        d=nx.degree_mixing_dict(self.D)
-        print(d)
-        d_result={1:{3:2},
-                  2:{1:1,3:1},
-                  3:{}
-                  }
-        assert_equal(d,d_result)
-
-    def test_degree_mixing_dict_multigraph(self):
-        d=nx.degree_mixing_dict(self.M)
-        d_result={1:{2:1},
-                  2:{1:1,3:3},
-                  3:{2:3}
-                  }
-        assert_equal(d,d_result)
-
-
-class TestDegreeMixingMatrix(BaseTestDegreeMixing):
-
-    @classmethod
-    def setupClass(cls):
-        global np
-        global npt
-        try:
-            import numpy as np
-            import numpy.testing as npt
-
-        except ImportError:
-             raise SkipTest('NumPy not available.')
-
-    def test_degree_mixing_matrix_undirected(self):
-        a_result=np.array([[0,0,0],
-                           [0,0,2],
-                           [0,2,2]]
-                          )
-        a=nx.degree_mixing_matrix(self.P4,normalized=False)
-        npt.assert_equal(a,a_result)
-        a=nx.degree_mixing_matrix(self.P4)
-        npt.assert_equal(a,a_result/float(a_result.sum()))
-
-    def test_degree_mixing_matrix_directed(self):
-        a_result=np.array([[0,0,0,0],
-                           [0,0,0,2],
-                           [0,1,0,1],
-                           [0,0,0,0]]
-                          )
-        a=nx.degree_mixing_matrix(self.D,normalized=False)
-        npt.assert_equal(a,a_result)
-        a=nx.degree_mixing_matrix(self.D)
-        npt.assert_equal(a,a_result/float(a_result.sum()))
-
-    def test_degree_mixing_matrix_multigraph(self):
-        a_result=np.array([[0,0,0,0],
-                           [0,0,1,0],
-                           [0,1,0,3],
-                           [0,0,3,0]]
-                          )
-        a=nx.degree_mixing_matrix(self.M,normalized=False)
-        npt.assert_equal(a,a_result)
-        a=nx.degree_mixing_matrix(self.M)
-        npt.assert_equal(a,a_result/float(a_result.sum()))
-
-
-    def test_degree_mixing_matrix_selfloop(self):
-        a_result=np.array([[0,0,0],
-                           [0,0,0],
-                           [0,0,2]]
-                          )
-        a=nx.degree_mixing_matrix(self.S,normalized=False)
-        npt.assert_equal(a,a_result)
-        a=nx.degree_mixing_matrix(self.S)
-        npt.assert_equal(a,a_result/float(a_result.sum()))
-
-
-class TestAttributeMixingDict(BaseTestAttributeMixing):
-
-    def test_attribute_mixing_dict_undirected(self):
-        d=nx.attribute_mixing_dict(self.G,'fish')
-        d_result={'one':{'one':2,'red':1},
-                  'two':{'two':2,'blue':1},
-                  'red':{'one':1},
-                  'blue':{'two':1}
-                  }
-        assert_equal(d,d_result)
-
-    def test_attribute_mixing_dict_directed(self):
-        d=nx.attribute_mixing_dict(self.D,'fish')
-        d_result={'one':{'one':1,'red':1},
-                  'two':{'two':1,'blue':1},
-                  'red':{},
-                  'blue':{}
-                  }
-        assert_equal(d,d_result)
-
-
-    def test_attribute_mixing_dict_multigraph(self):
-        d=nx.attribute_mixing_dict(self.M,'fish')
-        d_result={'one':{'one':4},
-                  'two':{'two':2},
-                  }
-        assert_equal(d,d_result)
-
-
-
-class TestAttributeMixingMatrix(BaseTestAttributeMixing):
-    @classmethod
-    def setupClass(cls):
-        global np
-        global npt
-        try:
-            import numpy as np
-            import numpy.testing as npt
-
-        except ImportError:
-             raise SkipTest('NumPy not available.')
-
-    def test_attribute_mixing_matrix_undirected(self):
-        mapping={'one':0,'two':1,'red':2,'blue':3}
-        a_result=np.array([[2,0,1,0],
-                           [0,2,0,1],
-                           [1,0,0,0],
-                           [0,1,0,0]]
-                          )
-        a=nx.attribute_mixing_matrix(self.G,'fish',
-                                         mapping=mapping,
-                                         normalized=False)
-        npt.assert_equal(a,a_result)
-        a=nx.attribute_mixing_matrix(self.G,'fish',
-                                         mapping=mapping)
-        npt.assert_equal(a,a_result/float(a_result.sum()))
-
-    def test_attribute_mixing_matrix_directed(self):
-        mapping={'one':0,'two':1,'red':2,'blue':3}
-        a_result=np.array([[1,0,1,0],
-                           [0,1,0,1],
-                           [0,0,0,0],
-                           [0,0,0,0]]
-                          )
-        a=nx.attribute_mixing_matrix(self.D,'fish',
-                                         mapping=mapping,
-                                         normalized=False)
-        npt.assert_equal(a,a_result)
-        a=nx.attribute_mixing_matrix(self.D,'fish',
-                                         mapping=mapping)
-        npt.assert_equal(a,a_result/float(a_result.sum()))
-
-    def test_attribute_mixing_matrix_multigraph(self):
-        mapping={'one':0,'two':1,'red':2,'blue':3}
-        a_result=np.array([[4,0,0,0],
-                           [0,2,0,0],
-                           [0,0,0,0],
-                           [0,0,0,0]]
-                          )
-        a=nx.attribute_mixing_matrix(self.M,'fish',
-                                         mapping=mapping,
-                                         normalized=False)
-        npt.assert_equal(a,a_result)
-        a=nx.attribute_mixing_matrix(self.M,'fish',
-                                         mapping=mapping)
-        npt.assert_equal(a,a_result/float(a_result.sum()))
-
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/assortativity/tests/test_neighbor_degree.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/assortativity/tests/test_neighbor_degree.py
deleted file mode 100644
index 7ab99fb..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/assortativity/tests/test_neighbor_degree.py
+++ /dev/null
@@ -1,82 +0,0 @@
-#!/usr/bin/env python
-from nose.tools import *
-import networkx as nx
-
-class TestAverageNeighbor(object):
-
-    def test_degree_p4(self):
-        G=nx.path_graph(4)
-        answer={0:2,1:1.5,2:1.5,3:2}
-        nd = nx.average_neighbor_degree(G)
-        assert_equal(nd,answer)
-        
-        D=G.to_directed()
-        nd = nx.average_neighbor_degree(D)
-        assert_equal(nd,answer)
-
-        D=G.to_directed()
-        nd = nx.average_neighbor_degree(D)
-        assert_equal(nd,answer)
-
-        D=G.to_directed()
-        nd = nx.average_neighbor_degree(D, source='in', target='in')
-        assert_equal(nd,answer)
-
-    def test_degree_p4_weighted(self):
-        G=nx.path_graph(4)
-        G[1][2]['weight']=4
-        answer={0:2,1:1.8,2:1.8,3:2}
-        nd = nx.average_neighbor_degree(G,weight='weight')
-        assert_equal(nd,answer)
-        
-        D=G.to_directed()
-        nd = nx.average_neighbor_degree(D,weight='weight')
-        assert_equal(nd,answer)
-
-        D=G.to_directed()
-        nd = nx.average_neighbor_degree(D,weight='weight')
-        assert_equal(nd,answer)
-        nd = nx.average_neighbor_degree(D,source='out',target='out',
-                                        weight='weight')
-        assert_equal(nd,answer)
-
-        D=G.to_directed()
-        nd = nx.average_neighbor_degree(D,source='in',target='in',
-                                           weight='weight')
-        assert_equal(nd,answer)
-
-
-    def test_degree_k4(self):
-        G=nx.complete_graph(4)
-        answer={0:3,1:3,2:3,3:3}
-        nd = nx.average_neighbor_degree(G)
-        assert_equal(nd,answer)
-        
-        D=G.to_directed()
-        nd = nx.average_neighbor_degree(D)
-        assert_equal(nd,answer)
-
-        D=G.to_directed()
-        nd = nx.average_neighbor_degree(D)
-        assert_equal(nd,answer)
-
-        D=G.to_directed()
-        nd = nx.average_neighbor_degree(D,source='in',target='in')
-        assert_equal(nd,answer)
-
-    def test_degree_k4_nodes(self):
-        G=nx.complete_graph(4)
-        answer={1:3.0,2:3.0}
-        nd = nx.average_neighbor_degree(G,nodes=[1,2])
-        assert_equal(nd,answer)
-
-    def test_degree_barrat(self):
-        G=nx.star_graph(5)
-        G.add_edges_from([(5,6),(5,7),(5,8),(5,9)])
-        G[0][5]['weight']=5
-        nd = nx.average_neighbor_degree(G)[5]
-        assert_equal(nd,1.8)
-        nd = nx.average_neighbor_degree(G,weight='weight')[5]
-        assert_almost_equal(nd,3.222222,places=5)
-
-    
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/assortativity/tests/test_pairs.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/assortativity/tests/test_pairs.py
deleted file mode 100644
index fa67a45..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/assortativity/tests/test_pairs.py
+++ /dev/null
@@ -1,113 +0,0 @@
-#!/usr/bin/env python
-from nose.tools import *
-import networkx as nx
-from base_test import BaseTestAttributeMixing,BaseTestDegreeMixing
-
-class TestAttributeMixingXY(BaseTestAttributeMixing):
-
-    def test_node_attribute_xy_undirected(self):
-        attrxy=sorted(nx.node_attribute_xy(self.G,'fish'))
-        attrxy_result=sorted([('one','one'),
-                              ('one','one'),
-                              ('two','two'),
-                              ('two','two'),
-                              ('one','red'),
-                              ('red','one'),
-                              ('blue','two'),
-                              ('two','blue')
-                              ])
-        assert_equal(attrxy,attrxy_result)
-
-    def test_node_attribute_xy_undirected_nodes(self):
-        attrxy=sorted(nx.node_attribute_xy(self.G,'fish',
-                                           nodes=['one','yellow']))
-        attrxy_result=sorted( [
-                              ])
-        assert_equal(attrxy,attrxy_result)
-
-
-    def test_node_attribute_xy_directed(self):
-        attrxy=sorted(nx.node_attribute_xy(self.D,'fish'))
-        attrxy_result=sorted([('one','one'),
-                              ('two','two'),
-                              ('one','red'),
-                              ('two','blue')
-                              ])
-        assert_equal(attrxy,attrxy_result)
-
-    def test_node_attribute_xy_multigraph(self):
-        attrxy=sorted(nx.node_attribute_xy(self.M,'fish'))
-        attrxy_result=[('one','one'),
-                       ('one','one'),
-                       ('one','one'),
-                       ('one','one'),
-                       ('two','two'),
-                       ('two','two')
-                       ]
-        assert_equal(attrxy,attrxy_result)
-
-    def test_node_attribute_xy_selfloop(self):
-        attrxy=sorted(nx.node_attribute_xy(self.S,'fish'))
-        attrxy_result=[('one','one'),
-                       ('two','two')
-                       ]
-        assert_equal(attrxy,attrxy_result)
-
-
-class TestDegreeMixingXY(BaseTestDegreeMixing):
-
-    def test_node_degree_xy_undirected(self):
-        xy=sorted(nx.node_degree_xy(self.P4))
-        xy_result=sorted([(1,2),
-                          (2,1),
-                          (2,2),
-                          (2,2),
-                          (1,2),
-                          (2,1)])
-        assert_equal(xy,xy_result)
-
-    def test_node_degree_xy_undirected_nodes(self):
-        xy=sorted(nx.node_degree_xy(self.P4,nodes=[0,1,-1]))
-        xy_result=sorted([(1,2),
-                          (2,1),])
-        assert_equal(xy,xy_result)
-
-
-    def test_node_degree_xy_directed(self):
-        xy=sorted(nx.node_degree_xy(self.D))
-        xy_result=sorted([(2,1),
-                          (2,3),
-                          (1,3),
-                          (1,3)])
-        assert_equal(xy,xy_result)
-
-    def test_node_degree_xy_multigraph(self):
-        xy=sorted(nx.node_degree_xy(self.M))
-        xy_result=sorted([(2,3),
-                          (2,3),
-                          (3,2),
-                          (3,2),
-                          (2,3),
-                          (3,2),
-                          (1,2),
-                          (2,1)])
-        assert_equal(xy,xy_result)
-
-
-    def test_node_degree_xy_selfloop(self):
-        xy=sorted(nx.node_degree_xy(self.S))
-        xy_result=sorted([(2,2),
-                          (2,2)])
-        assert_equal(xy,xy_result)
-
-    def test_node_degree_xy_weighted(self):
-        G = nx.Graph()
-        G.add_edge(1,2,weight=7)
-        G.add_edge(2,3,weight=10)
-        xy=sorted(nx.node_degree_xy(G,weight='weight'))
-        xy_result=sorted([(7,17),
-                          (17,10),
-                          (17,7),
-                          (10,17)])
-        assert_equal(xy,xy_result)
-
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/bipartite/__init__.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/bipartite/__init__.py
deleted file mode 100644
index 53ba9d3..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/bipartite/__init__.py
+++ /dev/null
@@ -1,93 +0,0 @@
-r""" This module provides functions and operations for bipartite
-graphs.  Bipartite graphs `B = (U, V, E)` have two node sets `U,V` and edges in
-`E` that only connect nodes from opposite sets. It is common in the literature
-to use an spatial analogy referring to the two node sets as top and bottom nodes.
-
-The bipartite algorithms are not imported into the networkx namespace
-at the top level so the easiest way to use them is with:
-
->>> import networkx as nx
->>> from networkx.algorithms import bipartite
-
-NetworkX does not have a custom bipartite graph class but the Graph()
-or DiGraph() classes can be used to represent bipartite graphs. However,
-you have to keep track of which set each node belongs to, and make
-sure that there is no edge between nodes of the same set. The convention used
-in NetworkX is to use a node attribute named "bipartite" with values 0 or 1 to
-identify the sets each node belongs to.
- 
-For example:
-
->>> B = nx.Graph()
->>> B.add_nodes_from([1,2,3,4], bipartite=0) # Add the node attribute "bipartite"
->>> B.add_nodes_from(['a','b','c'], bipartite=1)
->>> B.add_edges_from([(1,'a'), (1,'b'), (2,'b'), (2,'c'), (3,'c'), (4,'a')])
-
-Many algorithms of the bipartite module of NetworkX require, as an argument, a
-container with all the nodes that belong to one set, in addition to the bipartite
-graph `B`. If `B` is connected, you can find the node sets using a two-coloring 
-algorithm: 
-
->>> nx.is_connected(B)
-True
->>> bottom_nodes, top_nodes = bipartite.sets(B)
-
-list(top_nodes)
-[1, 2, 3, 4]
-list(bottom_nodes)
-['a', 'c', 'b']
-
-However, if the input graph is not connected, there are more than one possible
-colorations. Thus, the following result is correct:
-
->>> B.remove_edge(2,'c')
->>> nx.is_connected(B)
-False
->>> bottom_nodes, top_nodes = bipartite.sets(B)
-
-list(top_nodes)
-[1, 2, 4, 'c']
-list(bottom_nodes)
-['a', 3, 'b']
-
-Using the "bipartite" node attribute, you can easily get the two node sets:
-
->>> top_nodes = set(n for n,d in B.nodes(data=True) if d['bipartite']==0)
->>> bottom_nodes = set(B) - top_nodes
-
-list(top_nodes)
-[1, 2, 3, 4]
-list(bottom_nodes)
-['a', 'c', 'b']
-
-So you can easily use the bipartite algorithms that require, as an argument, a
-container with all nodes that belong to one node set:
-
->>> print(round(bipartite.density(B, bottom_nodes),2))
-0.42
->>> G = bipartite.projected_graph(B, top_nodes)
->>> G.edges()
-[(1, 2), (1, 4)]
-
-All bipartite graph generators in NetworkX build bipartite graphs with the 
-"bipartite" node attribute. Thus, you can use the same approach:
-
->>> RB = nx.bipartite_random_graph(5, 7, 0.2)
->>> RB_top = set(n for n,d in RB.nodes(data=True) if d['bipartite']==0)
->>> RB_bottom = set(RB) - RB_top
->>> list(RB_top)
-[0, 1, 2, 3, 4]
->>> list(RB_bottom)
-[5, 6, 7, 8, 9, 10, 11]
-
-For other bipartite graph generators see the bipartite section of
-:doc:`generators`.
-
-"""
-
-from networkx.algorithms.bipartite.basic import *
-from networkx.algorithms.bipartite.centrality import *
-from networkx.algorithms.bipartite.cluster import *
-from networkx.algorithms.bipartite.projection import *
-from networkx.algorithms.bipartite.redundancy import *
-from networkx.algorithms.bipartite.spectral import *
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/bipartite/basic.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/bipartite/basic.py
deleted file mode 100644
index e902889..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/bipartite/basic.py
+++ /dev/null
@@ -1,335 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-==========================
-Bipartite Graph Algorithms
-==========================
-"""
-#    Copyright (C) 2012 by
-#    Aric Hagberg <hagberg@lanl.gov>
-#    Dan Schult <dschult@colgate.edu>
-#    Pieter Swart <swart@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-import networkx as nx
-from itertools import count
-__author__ = """\n""".join(['Jordi Torrents <jtorrents@milnou.net>',
-                            'Aric Hagberg <aric.hagberg@gmail.com>'])
-__all__ = [ 'is_bipartite',
-            'is_bipartite_node_set',
-            'color',
-            'sets',
-            'density',
-            'degrees',
-            'biadjacency_matrix']
-
-def biadjacency_matrix(G, row_order, column_order=None,
-                            weight='weight', dtype=None):
-    r"""Return the biadjacency matrix of the bipartite graph G.
-
-    Let `G = (U, V, E)` be a bipartite graph with node sets
-    `U = u_{1},...,u_{r}` and `V = v_{1},...,v_{s}`. The biadjacency
-    matrix [1] is the `r` x `s` matrix `B` in which `b_{i,j} = 1`
-    if, and only if, `(u_i, v_j) \in E`. If the parameter `weight` is
-    not `None` and matches the name of an edge attribute, its value is
-    used instead of 1.
-
-    Parameters
-    ----------
-    G : graph
-       A NetworkX graph
-
-    row_order : list of nodes
-       The rows of the matrix are ordered according to the list of nodes.
-
-    column_order : list, optional
-       The columns of the matrix are ordered according to the list of nodes.
-       If column_order is None, then the ordering of columns is arbitrary.
-
-    weight : string or None, optional (default='weight')
-       The edge data key used to provide each value in the matrix.
-       If None, then each edge has weight 1.
-
-    dtype : NumPy data type, optional
-        A valid single NumPy data type used to initialize the array.
-        This must be a simple type such as int or numpy.float64 and
-        not a compound data type (see to_numpy_recarray)
-        If None, then the NumPy default is used.
-
-    Returns
-    -------
-    B : numpy matrix
-      Biadjacency matrix representation of the bipartite graph G.
-
-    Notes
-    -----
-    No attempt is made to check that the input graph is bipartite.
-
-    For directed bipartite graphs only successors are considered as neighbors.
-    To obtain an adjacency matrix with ones (or weight values) for both
-    predecessors and successors you have to generate two biadjacency matrices
-    where the rows of one of them are the columns of the other, and then add
-    one to the transpose of the other.
-
-    See Also
-    --------
-    to_numpy_matrix
-    adjacency_matrix
-
-    References
-    ----------
-    [1] http://en.wikipedia.org/wiki/Adjacency_matrix#Adjacency_matrix_of_a_bipartite_graph
-    """
-    try:
-        import numpy as np
-    except ImportError:
-        raise ImportError('adjacency_matrix() requires numpy ',
-                          'http://scipy.org/')
-    if column_order is None:
-        column_order = list(set(G) - set(row_order))
-    row = dict(zip(row_order,count()))
-    col = dict(zip(column_order,count()))
-    M = np.zeros((len(row),len(col)), dtype=dtype)
-    for u in row_order:
-        for v, d in G[u].items():
-            M[row[u],col[v]] = d.get(weight, 1)
-    return np.asmatrix(M)
-
-def color(G):
-    """Returns a two-coloring of the graph.
-
-    Raises an exception if the graph is not bipartite.
-
-    Parameters
-    ----------
-    G : NetworkX graph
-
-    Returns
-    -------
-    color : dictionary
-       A dictionary keyed by node with a 1 or 0 as data for each node color.
-
-    Raises
-    ------
-    NetworkXError if the graph is not two-colorable.
-
-    Examples
-    --------
-    >>> from networkx.algorithms import bipartite
-    >>> G = nx.path_graph(4)
-    >>> c = bipartite.color(G)
-    >>> print(c)
-    {0: 1, 1: 0, 2: 1, 3: 0}
-
-    You can use this to set a node attribute indicating the biparite set:
-
-    >>> nx.set_node_attributes(G, 'bipartite', c)
-    >>> print(G.node[0]['bipartite'])
-    1
-    >>> print(G.node[1]['bipartite'])
-    0
-    """
-    if G.is_directed():
-        import itertools
-        def neighbors(v):
-            return itertools.chain.from_iterable([G.predecessors_iter(v),
-                                                  G.successors_iter(v)])
-    else:
-        neighbors=G.neighbors_iter
-
-    color = {}
-    for n in G: # handle disconnected graphs
-        if n in color or len(G[n])==0: # skip isolates
-            continue
-        queue = [n]
-        color[n] = 1 # nodes seen with color (1 or 0)
-        while queue:
-            v = queue.pop()
-            c = 1 - color[v] # opposite color of node v
-            for w in neighbors(v):
-                if w in color:
-                    if color[w] == color[v]:
-                        raise nx.NetworkXError("Graph is not bipartite.")
-                else:
-                    color[w] = c
-                    queue.append(w)
-    # color isolates with 0
-    color.update(dict.fromkeys(nx.isolates(G),0))
-    return color
-
-def is_bipartite(G):
-    """ Returns True if graph G is bipartite, False if not.
-
-    Parameters
-    ----------
-    G : NetworkX graph
-
-    Examples
-    --------
-    >>> from networkx.algorithms import bipartite
-    >>> G = nx.path_graph(4)
-    >>> print(bipartite.is_bipartite(G))
-    True
-
-    See Also
-    --------
-    color, is_bipartite_node_set
-    """
-    try:
-        color(G)
-        return True
-    except nx.NetworkXError:
-        return False
-
-def is_bipartite_node_set(G,nodes):
-    """Returns True if nodes and G/nodes are a bipartition of G.
-
-    Parameters
-    ----------
-    G : NetworkX graph
-
-    nodes: list or container
-      Check if nodes are a one of a bipartite set.
-
-    Examples
-    --------
-    >>> from networkx.algorithms import bipartite
-    >>> G = nx.path_graph(4)
-    >>> X = set([1,3])
-    >>> bipartite.is_bipartite_node_set(G,X)
-    True
-
-    Notes
-    -----
-    For connected graphs the bipartite sets are unique.  This function handles
-    disconnected graphs.
-    """
-    S=set(nodes)
-    for CC in nx.connected_component_subgraphs(G):
-        X,Y=sets(CC)
-        if not ( (X.issubset(S) and Y.isdisjoint(S)) or
-                 (Y.issubset(S) and X.isdisjoint(S)) ):
-            return False
-    return True
-
-
-def sets(G):
-    """Returns bipartite node sets of graph G.
-
-    Raises an exception if the graph is not bipartite.
-
-    Parameters
-    ----------
-    G : NetworkX graph
-
-    Returns
-    -------
-    (X,Y) : two-tuple of sets
-       One set of nodes for each part of the bipartite graph.
-
-    Examples
-    --------
-    >>> from networkx.algorithms import bipartite
-    >>> G = nx.path_graph(4)
-    >>> X, Y = bipartite.sets(G)
-    >>> list(X)
-    [0, 2]
-    >>> list(Y)
-    [1, 3]
-
-    See Also
-    --------
-    color
-    """
-    c = color(G)
-    X = set(n for n in c if c[n]) # c[n] == 1
-    Y = set(n for n in c if not c[n]) # c[n] == 0
-    return (X, Y)
-
-def density(B, nodes):
-    """Return density of bipartite graph B.
-
-    Parameters
-    ----------
-    G : NetworkX graph
-
-    nodes: list or container
-      Nodes in one set of the bipartite graph.
-
-    Returns
-    -------
-    d : float
-       The bipartite density
-
-    Examples
-    --------
-    >>> from networkx.algorithms import bipartite
-    >>> G = nx.complete_bipartite_graph(3,2)
-    >>> X=set([0,1,2])
-    >>> bipartite.density(G,X)
-    1.0
-    >>> Y=set([3,4])
-    >>> bipartite.density(G,Y)
-    1.0
-
-    See Also
-    --------
-    color
-    """
-    n=len(B)
-    m=nx.number_of_edges(B)
-    nb=len(nodes)
-    nt=n-nb
-    if m==0: # includes cases n==0 and n==1
-        d=0.0
-    else:
-        if B.is_directed():
-            d=m/(2.0*float(nb*nt))
-        else:
-            d= m/float(nb*nt)
-    return d
-
-def degrees(B, nodes, weight=None):
-    """Return the degrees of the two node sets in the bipartite graph B.
-
-    Parameters
-    ----------
-    G : NetworkX graph
-
-    nodes: list or container
-      Nodes in one set of the bipartite graph.
-
-    weight : string or None, optional (default=None)
-       The edge attribute that holds the numerical value used as a weight.
-       If None, then each edge has weight 1.
-       The degree is the sum of the edge weights adjacent to the node.
-
-    Returns
-    -------
-    (degX,degY) : tuple of dictionaries
-       The degrees of the two bipartite sets as dictionaries keyed by node.
-
-    Examples
-    --------
-    >>> from networkx.algorithms import bipartite
-    >>> G = nx.complete_bipartite_graph(3,2)
-    >>> Y=set([3,4])
-    >>> degX,degY=bipartite.degrees(G,Y)
-    >>> degX
-    {0: 2, 1: 2, 2: 2}
-
-    See Also
-    --------
-    color, density
-    """
-    bottom=set(nodes)
-    top=set(B)-bottom
-    return (B.degree(top,weight),B.degree(bottom,weight))
-
-
-# fixture for nose tests
-def setup_module(module):
-    from nose import SkipTest
-    try:
-        import numpy
-    except:
-        raise SkipTest("NumPy not available")
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/bipartite/centrality.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/bipartite/centrality.py
deleted file mode 100644
index 0b885a7..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/bipartite/centrality.py
+++ /dev/null
@@ -1,266 +0,0 @@
-#-*- coding: utf-8 -*-
-#    Copyright (C) 2011 by 
-#    Jordi Torrents <jtorrents@milnou.net>
-#    Aric Hagberg <hagberg@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-import networkx as nx
-__author__ = """\n""".join(['Jordi Torrents <jtorrents@milnou.net>',
-                            'Aric Hagberg (hagberg@lanl.gov)'])
-__all__=['degree_centrality',
-         'betweenness_centrality',
-         'closeness_centrality']
-
-def degree_centrality(G, nodes):
-    r"""Compute the degree centrality for nodes in a bipartite network.
-
-    The degree centrality for a node `v` is the fraction of nodes 
-    connected to it.
-
-    Parameters
-    ----------
-    G : graph
-       A bipartite network
-
-    nodes : list or container
-      Container with all nodes in one bipartite node set.
-
-    Returns
-    -------
-    centrality : dictionary
-       Dictionary keyed by node with bipartite degree centrality as the value.
-
-    See Also
-    --------
-    betweenness_centrality,
-    closeness_centrality,
-    sets,
-    is_bipartite
-
-    Notes
-    -----
-    The nodes input parameter must conatin all nodes in one bipartite node set,
-    but the dictionary returned contains all nodes from both bipartite node
-    sets.
-
-    For unipartite networks, the degree centrality values are 
-    normalized by dividing by the maximum possible degree (which is 
-    `n-1` where `n` is the number of nodes in G). 
-
-    In the bipartite case, the maximum possible degree of a node in a
-    bipartite node set is the number of nodes in the opposite node set
-    [1]_.  The degree centrality for a node `v` in the bipartite
-    sets `U` with `n` nodes and `V` with `m` nodes is
-
-    .. math::
-
-        d_{v} = \frac{deg(v)}{m}, \mbox{for} v \in U ,
-
-        d_{v} = \frac{deg(v)}{n}, \mbox{for} v \in V ,
-
-
-    where `deg(v)` is the degree of node `v`.        
-
-    References
-    ----------
-    .. [1] Borgatti, S.P. and Halgin, D. In press. "Analyzing Affiliation 
-        Networks". In Carrington, P. and Scott, J. (eds) The Sage Handbook 
-        of Social Network Analysis. Sage Publications.
-        http://www.steveborgatti.com/papers/bhaffiliations.pdf
-    """
-    top = set(nodes)
-    bottom = set(G) - top
-    s = 1.0/len(bottom)
-    centrality = dict((n,d*s) for n,d in G.degree_iter(top))
-    s = 1.0/len(top)
-    centrality.update(dict((n,d*s) for n,d in G.degree_iter(bottom)))
-    return centrality
-
-
-def betweenness_centrality(G, nodes):
-    r"""Compute betweenness centrality for nodes in a bipartite network.
-
-    Betweenness centrality of a node `v` is the sum of the
-    fraction of all-pairs shortest paths that pass through `v`. 
-
-    Values of betweenness are normalized by the maximum possible
-    value which for bipartite graphs is limited by the relative size 
-    of the two node sets [1]_.
-
-    Let `n` be the number of nodes in the node set `U` and
-    `m` be the number of nodes in the node set `V`, then
-    nodes in `U` are normalized by dividing by 
-
-    .. math::
-
-       \frac{1}{2} [m^2 (s + 1)^2 + m (s + 1)(2t - s - 1) - t (2s - t + 3)] ,
-
-    where
-    
-    .. math::
-        
-        s = (n - 1) \div m , t = (n - 1) \mod m ,
-    
-    and nodes in `V` are normalized by dividing by
-
-    .. math::    
-
-        \frac{1}{2} [n^2 (p + 1)^2 + n (p + 1)(2r - p - 1) - r (2p - r + 3)] ,
-
-    where,
-    
-    .. math::
-
-        p = (m - 1) \div n , r = (m - 1) \mod n .
-
-    Parameters
-    ----------
-    G : graph
-        A bipartite graph
-
-    nodes : list or container
-        Container with all nodes in one bipartite node set.
-
-    Returns
-    -------
-    betweenness : dictionary
-        Dictionary keyed by node with bipartite betweenness centrality 
-        as the value.
-
-    See Also
-    --------
-    degree_centrality,
-    closeness_centrality,
-    sets,
-    is_bipartite
-
-    Notes
-    -----
-    The nodes input parameter must contain all nodes in one bipartite node set,
-    but the dictionary returned contains all nodes from both node sets.
-
-    References
-    ----------
-    .. [1] Borgatti, S.P. and Halgin, D. In press. "Analyzing Affiliation 
-        Networks". In Carrington, P. and Scott, J. (eds) The Sage Handbook 
-        of Social Network Analysis. Sage Publications.
-        http://www.steveborgatti.com/papers/bhaffiliations.pdf
-    """
-    top = set(nodes)
-    bottom = set(G) - top
-    n = float(len(top))
-    m = float(len(bottom))
-    s = (n-1) // m
-    t = (n-1) % m
-    bet_max_top = (((m**2)*((s+1)**2))+
-                   (m*(s+1)*(2*t-s-1))-
-                   (t*((2*s)-t+3)))/2.0
-    p = (m-1) // n
-    r = (m-1) % n
-    bet_max_bot = (((n**2)*((p+1)**2))+
-                   (n*(p+1)*(2*r-p-1))-
-                   (r*((2*p)-r+3)))/2.0
-    betweenness = nx.betweenness_centrality(G, normalized=False, 
-                                            weight=None)
-    for node in top:
-        betweenness[node]/=bet_max_top
-    for node in bottom:
-        betweenness[node]/=bet_max_bot
-    return betweenness
-
-def closeness_centrality(G, nodes, normalized=True):
-    r"""Compute the closeness centrality for nodes in a bipartite network.
-
-    The closeness of a node is the distance to all other nodes in the 
-    graph or in the case that the graph is not connected to all other nodes
-    in the connected component containing that node.
-
-    Parameters
-    ----------
-    G : graph
-        A bipartite network
-
-    nodes : list or container
-        Container with all nodes in one bipartite node set.
-
-    normalized : bool, optional      
-      If True (default) normalize by connected component size.
-
-    Returns
-    -------
-    closeness : dictionary
-        Dictionary keyed by node with bipartite closeness centrality 
-        as the value.
-
-    See Also
-    --------
-    betweenness_centrality,
-    degree_centrality
-    sets,
-    is_bipartite
-
-    Notes
-    -----
-    The nodes input parameter must conatin all nodes in one bipartite node set,
-    but the dictionary returned contains all nodes from both node sets.
-
-    Closeness centrality is normalized by the minimum distance possible. 
-    In the bipartite case the minimum distance for a node in one bipartite 
-    node set is 1 from all nodes in the other node set and 2 from all 
-    other nodes in its own set [1]_. Thus the closeness centrality
-    for node `v`  in the two bipartite sets `U` with 
-    `n` nodes and `V` with `m` nodes is 
- 
-    .. math::
-
-        c_{v} = \frac{m + 2(n - 1)}{d}, \mbox{for} v \in U,
-
-        c_{v} = \frac{n + 2(m - 1)}{d}, \mbox{for} v \in V,
-
-    where `d` is the sum of the distances from `v` to all
-    other nodes.
-
-    Higher values of closeness  indicate higher centrality.
-
-    As in the unipartite case, setting normalized=True causes the
-    values to normalized further to n-1 / size(G)-1 where n is the
-    number of nodes in the connected part of graph containing the
-    node.  If the graph is not completely connected, this algorithm
-    computes the closeness centrality for each connected part
-    separately.
-
-    References
-    ----------
-    .. [1] Borgatti, S.P. and Halgin, D. In press. "Analyzing Affiliation 
-        Networks". In Carrington, P. and Scott, J. (eds) The Sage Handbook 
-        of Social Network Analysis. Sage Publications.
-        http://www.steveborgatti.com/papers/bhaffiliations.pdf
-    """
-    closeness={}
-    path_length=nx.single_source_shortest_path_length
-    top = set(nodes)
-    bottom = set(G) - top
-    n = float(len(top))
-    m = float(len(bottom))
-    for node in top:
-        sp=path_length(G,node)
-        totsp=sum(sp.values())
-        if totsp > 0.0 and len(G) > 1:
-            closeness[node]= (m + 2*(n-1)) / totsp
-            if normalized:
-                s=(len(sp)-1.0) / ( len(G) - 1 )
-                closeness[node] *= s
-        else:
-            closeness[n]=0.0
-    for node in bottom:
-        sp=path_length(G,node)
-        totsp=sum(sp.values())
-        if totsp > 0.0 and len(G) > 1:
-            closeness[node]= (n + 2*(m-1)) / totsp
-            if normalized:
-                s=(len(sp)-1.0) / ( len(G) - 1 )
-                closeness[node] *= s
-        else:
-            closeness[n]=0.0
-    return closeness
-
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/bipartite/cluster.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/bipartite/cluster.py
deleted file mode 100644
index 8adf92d..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/bipartite/cluster.py
+++ /dev/null
@@ -1,266 +0,0 @@
-#-*- coding: utf-8 -*-
-#    Copyright (C) 2011 by 
-#    Jordi Torrents <jtorrents@milnou.net>
-#    Aric Hagberg <hagberg@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-import itertools
-import networkx as nx
-__author__ = """\n""".join(['Jordi Torrents <jtorrents@milnou.net>',
-                            'Aric Hagberg (hagberg@lanl.gov)'])
-__all__ = [ 'clustering',
-            'average_clustering',
-            'latapy_clustering',
-            'robins_alexander_clustering']
-
-# functions for computing clustering of pairs
-def cc_dot(nu,nv):
-    return float(len(nu & nv))/len(nu | nv)
-
-def cc_max(nu,nv):
-    return float(len(nu & nv))/max(len(nu),len(nv))
-
-def cc_min(nu,nv):
-    return float(len(nu & nv))/min(len(nu),len(nv))
-    
-modes={'dot':cc_dot,
-       'min':cc_min,
-       'max':cc_max}
-
-def latapy_clustering(G, nodes=None, mode='dot'):
-    r"""Compute a bipartite clustering coefficient for nodes.
-
-    The bipartie clustering coefficient is a measure of local density
-    of connections defined as [1]_:
-    
-    .. math::
-
-       c_u = \frac{\sum_{v \in N(N(v))} c_{uv} }{|N(N(u))|}
-
-    where `N(N(u))` are the second order neighbors of `u` in `G` excluding `u`, 
-    and `c_{uv}` is the pairwise clustering coefficient between nodes 
-    `u` and `v`.
-
-    The mode selects the function for `c_{uv}` which can be:
-
-    `dot`: 
-
-    .. math::
-
-       c_{uv}=\frac{|N(u)\cap N(v)|}{|N(u) \cup N(v)|}
-
-    `min`: 
-
-    .. math::
-
-       c_{uv}=\frac{|N(u)\cap N(v)|}{min(|N(u)|,|N(v)|)}
-
-    `max`: 
-
-    .. math::
-
-       c_{uv}=\frac{|N(u)\cap N(v)|}{max(|N(u)|,|N(v)|)}
-
-
-    Parameters
-    ----------
-    G : graph
-        A bipartite graph
-
-    nodes : list or iterable (optional)
-        Compute bipartite clustering for these nodes. The default 
-        is all nodes in G.
-
-    mode : string
-        The pariwise bipartite clustering method to be used in the computation.
-        It must be "dot", "max", or "min". 
-    
-    Returns
-    -------
-    clustering : dictionary
-        A dictionary keyed by node with the clustering coefficient value.
-
-
-    Examples
-    --------
-    >>> from networkx.algorithms import bipartite
-    >>> G = nx.path_graph(4) # path graphs are bipartite
-    >>> c = bipartite.clustering(G) 
-    >>> c[0]
-    0.5
-    >>> c = bipartite.clustering(G,mode='min') 
-    >>> c[0]
-    1.0
-
-    See Also
-    --------
-    robins_alexander_clustering
-    square_clustering
-    average_clustering
-    
-    References
-    ----------
-    .. [1] Latapy, Matthieu, Clémence Magnien, and Nathalie Del Vecchio (2008).
-       Basic notions for the analysis of large two-mode networks. 
-       Social Networks 30(1), 31--48.
-    """
-    if not nx.algorithms.bipartite.is_bipartite(G):
-        raise nx.NetworkXError("Graph is not bipartite")
-    
-    try:
-        cc_func = modes[mode]
-    except KeyError:
-        raise nx.NetworkXError(\
-                "Mode for bipartite clustering must be: dot, min or max")
-
-    if nodes is None:
-        nodes = G
-    ccs = {}
-    for v in nodes:
-        cc = 0.0
-        nbrs2=set([u for nbr in G[v] for u in G[nbr]])-set([v])
-        for u in nbrs2:
-            cc += cc_func(set(G[u]),set(G[v]))
-        if cc > 0.0: # len(nbrs2)>0
-            cc /= len(nbrs2)
-        ccs[v] = cc
-    return ccs
-
-clustering = latapy_clustering
-
-def average_clustering(G, nodes=None, mode='dot'):
-    r"""Compute the average bipartite clustering coefficient.
-
-    A clustering coefficient for the whole graph is the average, 
-
-    .. math::
-
-       C = \frac{1}{n}\sum_{v \in G} c_v,
-       
-    where `n` is the number of nodes in `G`.
-
-    Similar measures for the two bipartite sets can be defined [1]_
-    
-    .. math::
-
-       C_X = \frac{1}{|X|}\sum_{v \in X} c_v,
-       
-    where `X` is a bipartite set of `G`.
-
-    Parameters
-    ----------
-    G : graph
-        a bipartite graph
-
-    nodes : list or iterable, optional
-        A container of nodes to use in computing the average.  
-        The nodes should be either the entire graph (the default) or one of the 
-        bipartite sets.
-
-    mode : string
-        The pariwise bipartite clustering method. 
-        It must be "dot", "max", or "min" 
-    
-    Returns
-    -------
-    clustering : float
-       The average bipartite clustering for the given set of nodes or the 
-       entire graph if no nodes are specified.
-
-    Examples
-    --------
-    >>> from networkx.algorithms import bipartite
-    >>> G=nx.star_graph(3) # star graphs are bipartite
-    >>> bipartite.average_clustering(G) 
-    0.75
-    >>> X,Y=bipartite.sets(G)
-    >>> bipartite.average_clustering(G,X) 
-    0.0
-    >>> bipartite.average_clustering(G,Y) 
-    1.0
-
-    See Also
-    --------
-    clustering
-   
-    Notes    
-    -----
-    The container of nodes passed to this function must contain all of the nodes
-    in one of the bipartite sets ("top" or "bottom") in order to compute 
-    the correct average bipartite clustering coefficients.
-
-    References
-    ----------
-    .. [1] Latapy, Matthieu, Clémence Magnien, and Nathalie Del Vecchio (2008).
-        Basic notions for the analysis of large two-mode networks. 
-        Social Networks 30(1), 31--48.
-    """
-    if nodes is None:
-        nodes=G
-    ccs=latapy_clustering(G, nodes=nodes, mode=mode)
-    return float(sum(ccs[v] for v in nodes))/len(nodes)
-
-def robins_alexander_clustering(G):
-    r"""Compute the bipartite clustering of G.
-
-    Robins and Alexander [1]_ defined bipartite clustering coefficient as
-    four times the number of four cycles `C_4` divided by the number of
-    three paths `L_3` in a bipartite graph:
-
-    .. math::
-
-       CC_4 = \frac{4 * C_4}{L_3}
-       
-    Parameters
-    ----------
-    G : graph
-        a bipartite graph
-
-    Returns
-    -------
-    clustering : float
-       The Robins and Alexander bipartite clustering for the input graph.
-
-    Examples
-    --------
-    >>> from networkx.algorithms import bipartite
-    >>> G = nx.davis_southern_women_graph()
-    >>> print(round(bipartite.robins_alexander_clustering(G), 3))
-    0.468
-
-    See Also
-    --------
-    latapy_clustering
-    square_clustering
-   
-    References
-    ----------
-    .. [1] Robins, G. and M. Alexander (2004). Small worlds among interlocking 
-           directors: Network structure and distance in bipartite graphs. 
-           Computational & Mathematical Organization Theory 10(1), 69–94.
-
-    """
-    if G.order() < 4 or G.size() < 3:
-        return 0
-    L_3 = _threepaths(G)
-    if L_3 == 0:
-        return 0
-    C_4 = _four_cycles(G)
-    return (4. * C_4) / L_3
-
-def _four_cycles(G):
-    cycles = 0
-    for v in G:
-        for u, w in itertools.combinations(G[v], 2):
-            cycles += len((set(G[u]) & set(G[w])) - set([v]))
-    return cycles / 4
-
-def _threepaths(G):
-    paths = 0
-    for v in G:
-        for u in G[v]:
-            for w in set(G[u]) - set([v]):
-                paths += len(set(G[w]) - set([v, u]))
-    # Divide by two because we count each three path twice
-    # one for each possible starting point
-    return paths / 2
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/bipartite/projection.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/bipartite/projection.py
deleted file mode 100644
index 7f08244..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/bipartite/projection.py
+++ /dev/null
@@ -1,497 +0,0 @@
-# -*- coding: utf-8 -*-
-"""One-mode (unipartite) projections of bipartite graphs.
-"""
-import networkx as nx
-#    Copyright (C) 2011 by 
-#    Aric Hagberg <hagberg@lanl.gov>
-#    Dan Schult <dschult@colgate.edu>
-#    Pieter Swart <swart@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-__author__ = """\n""".join(['Aric Hagberg <aric.hagberg@gmail.com>',
-                            'Jordi Torrents <jtorrents@milnou.net>'])
-__all__ = ['project',
-           'projected_graph',
-           'weighted_projected_graph',
-           'collaboration_weighted_projected_graph',
-           'overlap_weighted_projected_graph',
-           'generic_weighted_projected_graph']
-
-def projected_graph(B, nodes, multigraph=False):
-    r"""Returns the projection of B onto one of its node sets.
-
-    Returns the graph G that is the projection of the bipartite graph B 
-    onto the specified nodes. They retain their attributes and are connected
-    in G if they have a common neighbor in B.
-
-    Parameters
-    ----------
-    B : NetworkX graph 
-      The input graph should be bipartite. 
-
-    nodes : list or iterable
-      Nodes to project onto (the "bottom" nodes).
-
-    multigraph: bool (default=False)
-       If True return a multigraph where the multiple edges represent multiple
-       shared neighbors.  They edge key in the multigraph is assigned to the
-       label of the neighbor.
-
-    Returns
-    -------
-    Graph : NetworkX graph or multigraph
-       A graph that is the projection onto the given nodes.
-
-    Examples
-    --------
-    >>> from networkx.algorithms import bipartite
-    >>> B = nx.path_graph(4)
-    >>> G = bipartite.projected_graph(B, [1,3]) 
-    >>> print(G.nodes())
-    [1, 3]
-    >>> print(G.edges())
-    [(1, 3)]
-    
-    If nodes `a`, and `b` are connected through both nodes 1 and 2 then
-    building a multigraph results in two edges in the projection onto 
-    [`a`,`b`]:
-
-    >>> B = nx.Graph()
-    >>> B.add_edges_from([('a', 1), ('b', 1), ('a', 2), ('b', 2)])
-    >>> G = bipartite.projected_graph(B, ['a', 'b'], multigraph=True)
-    >>> print([sorted((u,v)) for u,v in G.edges()])
-    [['a', 'b'], ['a', 'b']]
-
-    Notes
-    ------
-    No attempt is made to verify that the input graph B is bipartite.
-    Returns a simple graph that is the projection of the bipartite graph B
-    onto the set of nodes given in list nodes.  If multigraph=True then
-    a multigraph is returned with an edge for every shared neighbor.
-
-    Directed graphs are allowed as input.  The output will also then
-    be a directed graph with edges if there is a directed path between
-    the nodes.
-
-    The graph and node properties are (shallow) copied to the projected graph.
-
-    See Also
-    --------
-    is_bipartite, 
-    is_bipartite_node_set, 
-    sets, 
-    weighted_projected_graph,
-    collaboration_weighted_projected_graph,
-    overlap_weighted_projected_graph,
-    generic_weighted_projected_graph
-    """
-    if B.is_multigraph():
-        raise nx.NetworkXError("not defined for multigraphs")
-    if B.is_directed():
-        directed=True
-        if multigraph:
-            G=nx.MultiDiGraph()
-        else:
-            G=nx.DiGraph()
-    else:
-        directed=False
-        if multigraph:
-            G=nx.MultiGraph()
-        else:
-            G=nx.Graph()
-    G.graph.update(B.graph)
-    G.add_nodes_from((n,B.node[n]) for n in nodes)
-    for u in nodes:
-        nbrs2=set((v for nbr in B[u] for v in B[nbr])) -set([u])
-        if multigraph:
-            for n in nbrs2:
-                if directed:
-                    links=set(B[u]) & set(B.pred[n])
-                else:
-                    links=set(B[u]) & set(B[n])
-                for l in links:
-                    if not G.has_edge(u,n,l):
-                        G.add_edge(u,n,key=l)
-        else:
-            G.add_edges_from((u,n) for n in nbrs2)
-    return G
-
-def weighted_projected_graph(B, nodes, ratio=False):
-    r"""Returns a weighted projection of B onto one of its node sets.
-
-    The weighted projected graph is the projection of the bipartite
-    network B onto the specified nodes with weights representing the
-    number of shared neighbors or the ratio between actual shared
-    neighbors and possible shared neighbors if ratio=True [1]_. The
-    nodes retain their attributes and are connected in the resulting graph
-    if they have an edge to a common node in the original graph.
-
-    Parameters
-    ----------
-    B : NetworkX graph 
-        The input graph should be bipartite. 
-
-    nodes : list or iterable
-        Nodes to project onto (the "bottom" nodes).
-
-    ratio: Bool (default=False)
-        If True, edge weight is the ratio between actual shared neighbors 
-        and possible shared neighbors. If False, edges weight is the number 
-        of shared neighbors.
-
-    Returns
-    -------
-    Graph : NetworkX graph 
-       A graph that is the projection onto the given nodes.
-
-    Examples
-    --------
-    >>> from networkx.algorithms import bipartite
-    >>> B = nx.path_graph(4)
-    >>> G = bipartite.weighted_projected_graph(B, [1,3])
-    >>> print(G.nodes())
-    [1, 3]
-    >>> print(G.edges(data=True))
-    [(1, 3, {'weight': 1})]
-    >>> G = bipartite.weighted_projected_graph(B, [1,3], ratio=True)
-    >>> print(G.edges(data=True))
-    [(1, 3, {'weight': 0.5})]
-    
-    Notes
-    ------
-    No attempt is made to verify that the input graph B is bipartite.
-    The graph and node properties are (shallow) copied to the projected graph.
-
-    See Also
-    --------
-    is_bipartite, 
-    is_bipartite_node_set, 
-    sets, 
-    collaboration_weighted_projected_graph,
-    overlap_weighted_projected_graph,
-    generic_weighted_projected_graph
-    projected_graph 
-
-    References
-    ----------
-    .. [1] Borgatti, S.P. and Halgin, D. In press. "Analyzing Affiliation 
-        Networks". In Carrington, P. and Scott, J. (eds) The Sage Handbook 
-        of Social Network Analysis. Sage Publications.
-    """
-    if B.is_multigraph():
-        raise nx.NetworkXError("not defined for multigraphs")
-    if B.is_directed():
-        pred=B.pred
-        G=nx.DiGraph()
-    else:
-        pred=B.adj
-        G=nx.Graph()
-    G.graph.update(B.graph)
-    G.add_nodes_from((n,B.node[n]) for n in nodes)
-    n_top = float(len(B) - len(nodes))
-    for u in nodes:
-        unbrs = set(B[u])
-        nbrs2 = set((n for nbr in unbrs for n in B[nbr])) - set([u])
-        for v in nbrs2:
-            vnbrs = set(pred[v])
-            common = unbrs & vnbrs
-            if not ratio:
-                weight = len(common)
-            else:
-                weight = len(common) / n_top
-            G.add_edge(u,v,weight=weight)
-    return G
-
-def collaboration_weighted_projected_graph(B, nodes):
-    r"""Newman's weighted projection of B onto one of its node sets.
-
-    The collaboration weighted projection is the projection of the
-    bipartite network B onto the specified nodes with weights assigned
-    using Newman's collaboration model [1]_:
-
-    .. math::
-        
-        w_{v,u} = \sum_k \frac{\delta_{v}^{w} \delta_{w}^{k}}{k_w - 1}
-
-    where `v` and `u` are nodes from the same bipartite node set,
-    and `w` is a node of the opposite node set. 
-    The value `k_w` is the degree of node `w` in the bipartite
-    network and `\delta_{v}^{w}` is 1 if node `v` is
-    linked to node `w` in the original bipartite graph or 0 otherwise.
- 
-    The nodes retain their attributes and are connected in the resulting
-    graph if have an edge to a common node in the original bipartite
-    graph.
-
-    Parameters
-    ----------
-    B : NetworkX graph 
-      The input graph should be bipartite. 
-
-    nodes : list or iterable
-      Nodes to project onto (the "bottom" nodes).
-
-    Returns
-    -------
-    Graph : NetworkX graph 
-       A graph that is the projection onto the given nodes.
-
-    Examples
-    --------
-    >>> from networkx.algorithms import bipartite
-    >>> B = nx.path_graph(5)
-    >>> B.add_edge(1,5)
-    >>> G = bipartite.collaboration_weighted_projected_graph(B, [0, 2, 4, 5])
-    >>> print(G.nodes())
-    [0, 2, 4, 5]
-    >>> for edge in G.edges(data=True): print(edge)
-    ... 
-    (0, 2, {'weight': 0.5})
-    (0, 5, {'weight': 0.5})
-    (2, 4, {'weight': 1.0})
-    (2, 5, {'weight': 0.5})
-    
-    Notes
-    ------
-    No attempt is made to verify that the input graph B is bipartite.
-    The graph and node properties are (shallow) copied to the projected graph.
-
-    See Also
-    --------
-    is_bipartite, 
-    is_bipartite_node_set, 
-    sets, 
-    weighted_projected_graph,
-    overlap_weighted_projected_graph,
-    generic_weighted_projected_graph,
-    projected_graph 
-
-    References
-    ----------
-    .. [1] Scientific collaboration networks: II. 
-        Shortest paths, weighted networks, and centrality, 
-        M. E. J. Newman, Phys. Rev. E 64, 016132 (2001).
-    """
-    if B.is_multigraph():
-        raise nx.NetworkXError("not defined for multigraphs")
-    if B.is_directed():
-        pred=B.pred
-        G=nx.DiGraph()
-    else:
-        pred=B.adj
-        G=nx.Graph()
-    G.graph.update(B.graph)
-    G.add_nodes_from((n,B.node[n]) for n in nodes)
-    for u in nodes:
-        unbrs = set(B[u])
-        nbrs2 = set((n for nbr in unbrs for n in B[nbr])) - set([u])
-        for v in nbrs2:
-            vnbrs = set(pred[v])
-            common = unbrs & vnbrs
-            weight = sum([1.0/(len(B[n]) - 1) for n in common if len(B[n])>1])
-            G.add_edge(u,v,weight=weight)
-    return G
-
-def overlap_weighted_projected_graph(B, nodes, jaccard=True):
-    r"""Overlap weighted projection of B onto one of its node sets.
-
-    The overlap weighted projection is the projection of the bipartite 
-    network B onto the specified nodes with weights representing 
-    the Jaccard index between the neighborhoods of the two nodes in the
-    original bipartite network [1]_: 
-
-    .. math::
-        
-        w_{v,u} = \frac{|N(u) \cap N(v)|}{|N(u) \cup N(v)|}
-
-    or if the parameter 'jaccard' is False, the fraction of common 
-    neighbors by minimum of both nodes degree in the original 
-    bipartite graph [1]_:
-    
-    .. math::
-
-        w_{v,u} = \frac{|N(u) \cap N(v)|}{min(|N(u)|,|N(v)|)}
-    
-    The nodes retain their attributes and are connected in the resulting
-    graph if have an edge to a common node in the original bipartite graph.
-
-    Parameters
-    ----------
-    B : NetworkX graph 
-        The input graph should be bipartite. 
-
-    nodes : list or iterable
-        Nodes to project onto (the "bottom" nodes).
-
-    jaccard: Bool (default=True)
-
-    Returns
-    -------
-    Graph : NetworkX graph 
-       A graph that is the projection onto the given nodes.
-
-    Examples
-    --------
-    >>> from networkx.algorithms import bipartite
-    >>> B = nx.path_graph(5)
-    >>> G = bipartite.overlap_weighted_projected_graph(B, [0, 2, 4])
-    >>> print(G.nodes())
-    [0, 2, 4]
-    >>> print(G.edges(data=True))
-    [(0, 2, {'weight': 0.5}), (2, 4, {'weight': 0.5})]
-    >>> G = bipartite.overlap_weighted_projected_graph(B, [0, 2, 4], jaccard=False)
-    >>> print(G.edges(data=True))
-    [(0, 2, {'weight': 1.0}), (2, 4, {'weight': 1.0})]
-    
-    Notes
-    ------
-    No attempt is made to verify that the input graph B is bipartite.
-    The graph and node properties are (shallow) copied to the projected graph.
-
-    See Also
-    --------
-    is_bipartite, 
-    is_bipartite_node_set, 
-    sets, 
-    weighted_projected_graph,
-    collaboration_weighted_projected_graph,
-    generic_weighted_projected_graph,
-    projected_graph 
-
-    References
-    ----------
-    .. [1] Borgatti, S.P. and Halgin, D. In press. Analyzing Affiliation 
-        Networks. In Carrington, P. and Scott, J. (eds) The Sage Handbook 
-        of Social Network Analysis. Sage Publications.
-    
-    """
-    if B.is_multigraph():
-        raise nx.NetworkXError("not defined for multigraphs")
-    if B.is_directed():
-        pred=B.pred
-        G=nx.DiGraph()
-    else:
-        pred=B.adj
-        G=nx.Graph()
-    G.graph.update(B.graph)
-    G.add_nodes_from((n,B.node[n]) for n in nodes)
-    for u in nodes:
-        unbrs = set(B[u])
-        nbrs2 = set((n for nbr in unbrs for n in B[nbr])) - set([u])
-        for v in nbrs2:
-            vnbrs = set(pred[v])
-            if jaccard:
-                weight = float(len(unbrs & vnbrs)) / len(unbrs | vnbrs)
-            else:
-                weight = float(len(unbrs & vnbrs)) / min(len(unbrs),len(vnbrs))
-            G.add_edge(u,v,weight=weight)
-    return G
-
-def generic_weighted_projected_graph(B, nodes, weight_function=None):
-    r"""Weighted projection of B with a user-specified weight function.
-
-    The bipartite network B is projected on to the specified nodes
-    with weights computed by a user-specified function.  This function
-    must accept as a parameter the neighborhood sets of two nodes and
-    return an integer or a float.
-
-    The nodes retain their attributes and are connected in the resulting graph 
-    if they have an edge to a common node in the original graph.
-
-    Parameters
-    ----------
-    B : NetworkX graph 
-        The input graph should be bipartite. 
-
-    nodes : list or iterable
-        Nodes to project onto (the "bottom" nodes).
-
-    weight_function: function
-        This function must accept as parameters the same input graph 
-        that this function, and two nodes; and return an integer or a float.
-        The default function computes the number of shared neighbors.
-
-    Returns
-    -------
-    Graph : NetworkX graph 
-       A graph that is the projection onto the given nodes.
-
-    Examples
-    --------
-    >>> from networkx.algorithms import bipartite
-    >>> # Define some custom weight functions
-    >>> def jaccard(G, u, v):
-    ...     unbrs = set(G[u])
-    ...     vnbrs = set(G[v])
-    ...     return float(len(unbrs & vnbrs)) / len(unbrs | vnbrs)
-    ... 
-    >>> def my_weight(G, u, v, weight='weight'):
-    ...     w = 0
-    ...     for nbr in set(G[u]) & set(G[v]):
-    ...         w += G.edge[u][nbr].get(weight, 1) + G.edge[v][nbr].get(weight, 1)
-    ...     return w
-    ... 
-    >>> # A complete bipartite graph with 4 nodes and 4 edges
-    >>> B = nx.complete_bipartite_graph(2,2)
-    >>> # Add some arbitrary weight to the edges
-    >>> for i,(u,v) in enumerate(B.edges()):
-    ...     B.edge[u][v]['weight'] = i + 1
-    ... 
-    >>> for edge in B.edges(data=True):
-    ...     print(edge)
-    ... 
-    (0, 2, {'weight': 1})
-    (0, 3, {'weight': 2})
-    (1, 2, {'weight': 3})
-    (1, 3, {'weight': 4})
-    >>> # Without specifying a function, the weight is equal to # shared partners
-    >>> G = bipartite.generic_weighted_projected_graph(B, [0, 1])
-    >>> print(G.edges(data=True))
-    [(0, 1, {'weight': 2})]
-    >>> # To specify a custom weight function use the weight_function parameter
-    >>> G = bipartite.generic_weighted_projected_graph(B, [0, 1], weight_function=jaccard)
-    >>> print(G.edges(data=True))
-    [(0, 1, {'weight': 1.0})]
-    >>> G = bipartite.generic_weighted_projected_graph(B, [0, 1], weight_function=my_weight)
-    >>> print(G.edges(data=True))
-    [(0, 1, {'weight': 10})]
-    
-    Notes
-    ------
-    No attempt is made to verify that the input graph B is bipartite.
-    The graph and node properties are (shallow) copied to the projected graph.
-
-    See Also
-    --------
-    is_bipartite, 
-    is_bipartite_node_set, 
-    sets, 
-    weighted_projected_graph,
-    collaboration_weighted_projected_graph,
-    overlap_weighted_projected_graph,
-    projected_graph 
-
-    """
-    if B.is_multigraph():
-        raise nx.NetworkXError("not defined for multigraphs")
-    if B.is_directed():
-        pred=B.pred
-        G=nx.DiGraph()
-    else:
-        pred=B.adj
-        G=nx.Graph()
-    if weight_function is None:
-        def weight_function(G, u, v):
-            # Notice that we use set(pred[v]) for handling the directed case.
-            return len(set(G[u]) & set(pred[v]))
-    G.graph.update(B.graph)
-    G.add_nodes_from((n,B.node[n]) for n in nodes)
-    for u in nodes:
-        nbrs2 = set((n for nbr in set(B[u]) for n in B[nbr])) - set([u])
-        for v in nbrs2:
-            weight = weight_function(B, u, v)
-            G.add_edge(u,v,weight=weight)
-    return G
-
-def project(B, nodes, create_using=None):
-    return projected_graph(B, nodes)
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/bipartite/redundancy.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/bipartite/redundancy.py
deleted file mode 100644
index 055fdcb..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/bipartite/redundancy.py
+++ /dev/null
@@ -1,84 +0,0 @@
-#-*- coding: utf-8 -*-
-"""Node redundancy for bipartite graphs."""
-#    Copyright (C) 2011 by 
-#    Jordi Torrents <jtorrents@milnou.net>
-#    Aric Hagberg <hagberg@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-from itertools import combinations
-import networkx as nx
-
-__author__ = """\n""".join(['Jordi Torrents <jtorrents@milnou.net>',
-                            'Aric Hagberg (hagberg@lanl.gov)'])
-__all__ = ['node_redundancy']
-
-def node_redundancy(G, nodes=None):
-    r"""Compute bipartite node redundancy coefficient.
-
-    The redundancy coefficient of a node `v` is the fraction of pairs of 
-    neighbors of `v` that are both linked to other nodes. In a one-mode
-    projection these nodes would be linked together even if `v`  were 
-    not there.
-    
-    .. math::
-
-        rc(v) = \frac{|\{\{u,w\} \subseteq N(v),
-        \: \exists v' \neq  v,\: (v',u) \in E\: 
-        \mathrm{and}\: (v',w) \in E\}|}{ \frac{|N(v)|(|N(v)|-1)}{2}}
-
-    where `N(v)` are the neighbors of `v` in `G`.
-
-    Parameters
-    ----------
-    G : graph
-        A bipartite graph
-
-    nodes : list or iterable (optional)
-        Compute redundancy for these nodes. The default is all nodes in G.
-
-    Returns
-    -------
-    redundancy : dictionary
-        A dictionary keyed by node with the node redundancy value.
-
-    Examples
-    --------
-    >>> from networkx.algorithms import bipartite
-    >>> G = nx.cycle_graph(4)
-    >>> rc = bipartite.node_redundancy(G)
-    >>> rc[0]
-    1.0
-
-    Compute the average redundancy for the graph:
-
-    >>> sum(rc.values())/len(G)
-    1.0
-
-    Compute the average redundancy for a set of nodes:
-
-    >>> nodes = [0, 2]
-    >>> sum(rc[n] for n in nodes)/len(nodes)
-    1.0
-
-    References
-    ----------
-    .. [1] Latapy, Matthieu, Clémence Magnien, and Nathalie Del Vecchio (2008).
-       Basic notions for the analysis of large two-mode networks. 
-       Social Networks 30(1), 31--48.
-    """
-    if nodes is None:
-        nodes = G
-    rc = {}
-    for v in nodes:
-        overlap = 0.0
-        for u, w in combinations(G[v], 2):
-            if len((set(G[u]) & set(G[w])) - set([v])) > 0:
-                overlap += 1
-        if overlap > 0:
-            n = len(G[v])
-            norm = 2.0/(n*(n-1))
-        else:
-            norm = 1.0
-        rc[v] = overlap*norm
-    return rc
-
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/bipartite/spectral.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/bipartite/spectral.py
deleted file mode 100644
index d0ebdd4..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/bipartite/spectral.py
+++ /dev/null
@@ -1,88 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-Spectral bipartivity measure.
-"""
-import networkx as nx
-__author__ = """Aric Hagberg (hagberg@lanl.gov)"""
-#    Copyright (C) 2011 by 
-#    Aric Hagberg <hagberg@lanl.gov>
-#    Dan Schult <dschult@colgate.edu>
-#    Pieter Swart <swart@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-__all__ = ['spectral_bipartivity']
-
-def spectral_bipartivity(G, nodes=None, weight='weight'):
-    """Returns the spectral bipartivity.
-
-    Parameters
-    ----------
-    G : NetworkX graph 
-
-    nodes : list or container  optional(default is all nodes)
-      Nodes to return value of spectral bipartivity contribution.
-
-    weight : string or None  optional (default = 'weight')
-      Edge data key to use for edge weights. If None, weights set to 1.
-
-    Returns
-    -------
-    sb : float or dict
-       A single number if the keyword nodes is not specified, or
-       a dictionary keyed by node with the spectral bipartivity contribution
-       of that node as the value.
-       
-    Examples
-    --------
-    >>> from networkx.algorithms import bipartite
-    >>> G = nx.path_graph(4)
-    >>> bipartite.spectral_bipartivity(G)
-    1.0
-
-    Notes
-    -----
-    This implementation uses Numpy (dense) matrices which are not efficient
-    for storing large sparse graphs.  
-
-    See Also
-    --------
-    color
-
-    References
-    ----------
-    .. [1] E. Estrada and J. A. Rodríguez-Velázquez, "Spectral measures of
-       bipartivity in complex networks", PhysRev E 72, 046105 (2005)
-    """
-    try:
-        import scipy.linalg
-    except ImportError:
-        raise ImportError('spectral_bipartivity() requires SciPy: ',
-                          'http://scipy.org/')
-    nodelist = G.nodes() # ordering of nodes in matrix
-    A = nx.to_numpy_matrix(G, nodelist, weight=weight)
-    expA = scipy.linalg.expm(A)
-    expmA = scipy.linalg.expm(-A)
-    coshA = 0.5 * (expA + expmA)
-    if nodes is None:
-        # return single number for entire graph
-        return coshA.diagonal().sum() / expA.diagonal().sum()
-    else:
-        # contribution for individual nodes
-        index = dict(zip(nodelist, range(len(nodelist))))
-        sb = {}
-        for n in nodes:
-            i = index[n]
-            sb[n] = coshA[i, i] / expA[i, i]
-        return sb
-
-def setup_module(module):
-    """Fixture for nose tests."""
-    from nose import SkipTest
-    try:
-        import numpy
-    except:
-        raise SkipTest("NumPy not available")
-    try:
-        import scipy
-    except:
-        raise SkipTest("SciPy not available")
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/bipartite/tests/test_basic.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/bipartite/tests/test_basic.py
deleted file mode 100644
index 5b22e9a..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/bipartite/tests/test_basic.py
+++ /dev/null
@@ -1,117 +0,0 @@
-#!/usr/bin/env python
-from nose.tools import *
-from nose import SkipTest
-from nose.plugins.attrib import attr
-import networkx as nx
-from networkx.algorithms import bipartite
-class TestBipartiteBasic:
-
-    def test_is_bipartite(self):
-        assert_true(bipartite.is_bipartite(nx.path_graph(4)))
-        assert_true(bipartite.is_bipartite(nx.DiGraph([(1,0)])))
-        assert_false(bipartite.is_bipartite(nx.complete_graph(3)))
-
-
-    def test_bipartite_color(self):
-        G=nx.path_graph(4)
-        c=bipartite.color(G)
-        assert_equal(c,{0: 1, 1: 0, 2: 1, 3: 0})
-
-    @raises(nx.NetworkXError)
-    def test_not_bipartite_color(self):
-        c=bipartite.color(nx.complete_graph(4))
-
-
-    def test_bipartite_directed(self):
-        G = nx.bipartite_random_graph(10, 10, 0.1, directed=True)
-        assert_true(bipartite.is_bipartite(G))
-
-    def test_bipartite_sets(self):
-        G=nx.path_graph(4)
-        X,Y=bipartite.sets(G)
-        assert_equal(X,set([0,2]))
-        assert_equal(Y,set([1,3]))
-
-    def test_is_bipartite_node_set(self):
-        G=nx.path_graph(4)
-        assert_true(bipartite.is_bipartite_node_set(G,[0,2]))
-        assert_true(bipartite.is_bipartite_node_set(G,[1,3]))
-        assert_false(bipartite.is_bipartite_node_set(G,[1,2]))
-        G.add_path([10,20])
-        assert_true(bipartite.is_bipartite_node_set(G,[0,2,10]))
-        assert_true(bipartite.is_bipartite_node_set(G,[0,2,20]))
-        assert_true(bipartite.is_bipartite_node_set(G,[1,3,10]))
-        assert_true(bipartite.is_bipartite_node_set(G,[1,3,20]))
-
-    def test_bipartite_density(self):
-        G=nx.path_graph(5)
-        X,Y=bipartite.sets(G)
-        density=float(len(G.edges()))/(len(X)*len(Y))
-        assert_equal(bipartite.density(G,X),density)
-        D = nx.DiGraph(G.edges())
-        assert_equal(bipartite.density(D,X),density/2.0)
-        assert_equal(bipartite.density(nx.Graph(),{}),0.0)
-
-    def test_bipartite_degrees(self):
-        G=nx.path_graph(5)
-        X=set([1,3])
-        Y=set([0,2,4])
-        u,d=bipartite.degrees(G,Y)
-        assert_equal(u,{1:2,3:2})
-        assert_equal(d,{0:1,2:2,4:1})
-
-    def test_bipartite_weighted_degrees(self):
-        G=nx.path_graph(5)
-        G.add_edge(0,1,weight=0.1,other=0.2)
-        X=set([1,3])
-        Y=set([0,2,4])
-        u,d=bipartite.degrees(G,Y,weight='weight')
-        assert_equal(u,{1:1.1,3:2})
-        assert_equal(d,{0:0.1,2:2,4:1})
-        u,d=bipartite.degrees(G,Y,weight='other')
-        assert_equal(u,{1:1.2,3:2})
-        assert_equal(d,{0:0.2,2:2,4:1})
-
-
-    @attr('numpy')
-    def test_biadjacency_matrix_weight(self):
-        try:
-            import numpy
-        except ImportError:
-            raise SkipTest('numpy not available.')
-        G=nx.path_graph(5)
-        G.add_edge(0,1,weight=2,other=4)
-        X=[1,3]
-        Y=[0,2,4]
-        M = bipartite.biadjacency_matrix(G,X,weight='weight')
-        assert_equal(M[0,0], 2)
-        M = bipartite.biadjacency_matrix(G, X, weight='other')
-        assert_equal(M[0,0], 4)
-
-    @attr('numpy')
-    def test_biadjacency_matrix(self):
-        try:
-            import numpy
-        except ImportError:
-            raise SkipTest('numpy not available.')
-        tops = [2,5,10]
-        bots = [5,10,15]
-        for i in range(len(tops)):
-            G = nx.bipartite_random_graph(tops[i], bots[i], 0.2)
-            top = [n for n,d in G.nodes(data=True) if d['bipartite']==0]
-            M = bipartite.biadjacency_matrix(G, top)
-            assert_equal(M.shape[0],tops[i])
-            assert_equal(M.shape[1],bots[i])
-
-    @attr('numpy')
-    def test_biadjacency_matrix_order(self):
-        try:
-            import numpy
-        except ImportError:
-            raise SkipTest('numpy not available.')
-        G=nx.path_graph(5)
-        G.add_edge(0,1,weight=2)
-        X=[3,1]
-        Y=[4,2,0]
-        M = bipartite.biadjacency_matrix(G,X,Y,weight='weight')
-        assert_equal(M[1,2], 2)
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/bipartite/tests/test_centrality.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/bipartite/tests/test_centrality.py
deleted file mode 100644
index 992d643..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/bipartite/tests/test_centrality.py
+++ /dev/null
@@ -1,169 +0,0 @@
-from nose.tools import *
-import networkx as nx
-from networkx.algorithms import bipartite
-
-class TestBipartiteCentrality(object):
-
-    def setUp(self):
-        self.P4 = nx.path_graph(4)
-        self.K3 = nx.complete_bipartite_graph(3,3)
-        self.C4 = nx.cycle_graph(4)
-        self.davis = nx.davis_southern_women_graph()
-        self.top_nodes = [n for n,d in self.davis.nodes(data=True) 
-                          if d['bipartite']==0]
-
-    def test_degree_centrality(self):
-        d = bipartite.degree_centrality(self.P4, [1,3])
-        answer = {0: 0.5, 1: 1.0,  2: 1.0, 3:  0.5}
-        assert_equal(d, answer)
-        d = bipartite.degree_centrality(self.K3, [0,1,2])
-        answer = {0: 1.0, 1: 1.0, 2: 1.0, 3: 1.0, 4: 1.0, 5: 1.0}
-        assert_equal(d, answer)
-        d = bipartite.degree_centrality(self.C4, [0,2])
-        answer = {0: 1.0, 1: 1.0, 2: 1.0, 3: 1.0}
-        assert_equal(d,answer)
-
-    def test_betweenness_centrality(self):
-        c = bipartite.betweenness_centrality(self.P4, [1,3])
-        answer = {0: 0.0, 1: 1.0, 2: 1.0, 3: 0.0}
-        assert_equal(c, answer)
-        c = bipartite.betweenness_centrality(self.K3, [0,1,2])
-        answer = {0: 0.125, 1: 0.125, 2: 0.125, 3: 0.125, 4: 0.125, 5: 0.125}
-        assert_equal(c, answer)
-        c = bipartite.betweenness_centrality(self.C4, [0,2])
-        answer = {0: 0.25, 1: 0.25, 2: 0.25, 3: 0.25}
-        assert_equal(c, answer)
-
-    def test_closeness_centrality(self):
-        c = bipartite.closeness_centrality(self.P4, [1,3])
-        answer = {0: 2.0/3, 1: 1.0, 2: 1.0, 3:2.0/3}
-        assert_equal(c, answer)
-        c = bipartite.closeness_centrality(self.K3, [0,1,2])
-        answer = {0: 1.0, 1: 1.0, 2: 1.0, 3: 1.0, 4: 1.0, 5: 1.0}
-        assert_equal(c, answer)
-        c = bipartite.closeness_centrality(self.C4, [0,2])
-        answer = {0: 1.0, 1: 1.0, 2: 1.0, 3: 1.0}
-        assert_equal(c, answer)
-        G = nx.Graph()
-        G.add_node(0)
-        G.add_node(1)
-        c = bipartite.closeness_centrality(G, [0])
-        assert_equal(c, {1: 0.0})
-        c = bipartite.closeness_centrality(G, [1])
-        assert_equal(c, {1: 0.0})
-
-    def test_davis_degree_centrality(self):
-        G = self.davis
-        deg = bipartite.degree_centrality(G, self.top_nodes)
-        answer = {'E8':0.78,
-                'E9':0.67,
-                'E7':0.56,
-                'Nora Fayette':0.57,
-                'Evelyn Jefferson':0.57,
-                'Theresa Anderson':0.57,
-                'E6':0.44,
-                'Sylvia Avondale':0.50,
-                'Laura Mandeville':0.50,
-                'Brenda Rogers':0.50,
-                'Katherina Rogers':0.43,
-                'E5':0.44,
-                'Helen Lloyd':0.36,
-                'E3':0.33,
-                'Ruth DeSand':0.29,
-                'Verne Sanderson':0.29,
-                'E12':0.33,
-                'Myra Liddel':0.29,
-                'E11':0.22,
-                'Eleanor Nye':0.29,
-                'Frances Anderson':0.29,
-                'Pearl Oglethorpe':0.21,
-                'E4':0.22,
-                'Charlotte McDowd':0.29,
-                'E10':0.28,
-                'Olivia Carleton':0.14,
-                'Flora Price':0.14,
-                'E2':0.17,
-                'E1':0.17,
-                'Dorothy Murchison':0.14,
-                'E13':0.17,
-                'E14':0.17}
-        for node, value in answer.items():
-            assert_almost_equal(value, deg[node], places=2)
-
-    def test_davis_betweenness_centrality(self):
-        G = self.davis
-        bet = bipartite.betweenness_centrality(G, self.top_nodes)
-        answer = {'E8':0.24,
-                'E9':0.23,
-                'E7':0.13,
-                'Nora Fayette':0.11,
-                'Evelyn Jefferson':0.10,
-                'Theresa Anderson':0.09,
-                'E6':0.07,
-                'Sylvia Avondale':0.07,
-                'Laura Mandeville':0.05,
-                'Brenda Rogers':0.05,
-                'Katherina Rogers':0.05,
-                'E5':0.04,
-                'Helen Lloyd':0.04,
-                'E3':0.02,
-                'Ruth DeSand':0.02,
-                'Verne Sanderson':0.02,
-                'E12':0.02,
-                'Myra Liddel':0.02,
-                'E11':0.02,
-                'Eleanor Nye':0.01,
-                'Frances Anderson':0.01,
-                'Pearl Oglethorpe':0.01,
-                'E4':0.01,
-                'Charlotte McDowd':0.01,
-                'E10':0.01,
-                'Olivia Carleton':0.01,
-                'Flora Price':0.01,
-                'E2':0.00,
-                'E1':0.00,
-                'Dorothy Murchison':0.00,
-                'E13':0.00,
-                'E14':0.00}
-        for node, value in answer.items():
-            assert_almost_equal(value, bet[node], places=2)
-
-    def test_davis_closeness_centrality(self):
-        G = self.davis
-        clos = bipartite.closeness_centrality(G, self.top_nodes)
-        answer = {'E8':0.85,
-                'E9':0.79,
-                'E7':0.73,
-                'Nora Fayette':0.80,
-                'Evelyn Jefferson':0.80,
-                'Theresa Anderson':0.80,
-                'E6':0.69,
-                'Sylvia Avondale':0.77,
-                'Laura Mandeville':0.73,
-                'Brenda Rogers':0.73,
-                'Katherina Rogers':0.73,
-                'E5':0.59,
-                'Helen Lloyd':0.73,
-                'E3':0.56,
-                'Ruth DeSand':0.71,
-                'Verne Sanderson':0.71,
-                'E12':0.56,
-                'Myra Liddel':0.69,
-                'E11':0.54,
-                'Eleanor Nye':0.67,
-                'Frances Anderson':0.67,
-                'Pearl Oglethorpe':0.67,
-                'E4':0.54,
-                'Charlotte McDowd':0.60,
-                'E10':0.55,
-                'Olivia Carleton':0.59,
-                'Flora Price':0.59,
-                'E2':0.52,
-                'E1':0.52,
-                'Dorothy Murchison':0.65,
-                'E13':0.52,
-                'E14':0.52}
-        for node, value in answer.items():
-            assert_almost_equal(value, clos[node], places=2)
-
-
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/bipartite/tests/test_cluster.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/bipartite/tests/test_cluster.py
deleted file mode 100644
index aa158f9..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/bipartite/tests/test_cluster.py
+++ /dev/null
@@ -1,70 +0,0 @@
-import networkx as nx
-from nose.tools import *
-from networkx.algorithms.bipartite.cluster import cc_dot,cc_min,cc_max
-import networkx.algorithms.bipartite as bipartite
-
-def test_pairwise_bipartite_cc_functions():
-    # Test functions for different kinds of bipartite clustering coefficients
-    # between pairs of nodes using 3 example graphs from figure 5 p. 40 
-    # Latapy et al (2008)
-    G1 = nx.Graph([(0,2),(0,3),(0,4),(0,5),(0,6),(1,5),(1,6),(1,7)])
-    G2 = nx.Graph([(0,2),(0,3),(0,4),(1,3),(1,4),(1,5)])
-    G3 = nx.Graph([(0,2),(0,3),(0,4),(0,5),(0,6),(1,5),(1,6),(1,7),(1,8),(1,9)])
-    result = {0:[1/3.0, 2/3.0, 2/5.0], 
-              1:[1/2.0, 2/3.0, 2/3.0], 
-              2:[2/8.0, 2/5.0, 2/5.0]}
-    for i, G in enumerate([G1, G2, G3]):
-        assert(bipartite.is_bipartite(G))
-        assert(cc_dot(set(G[0]), set(G[1])) == result[i][0])
-        assert(cc_min(set(G[0]), set(G[1])) == result[i][1])
-        assert(cc_max(set(G[0]), set(G[1])) == result[i][2])
-
-def test_star_graph():
-    G=nx.star_graph(3)
-    # all modes are the same
-    answer={0:0,1:1,2:1,3:1}
-    assert_equal(bipartite.clustering(G,mode='dot'),answer)
-    assert_equal(bipartite.clustering(G,mode='min'),answer)
-    assert_equal(bipartite.clustering(G,mode='max'),answer)
-
-@raises(nx.NetworkXError)
-def test_not_bipartite():
-    bipartite.clustering(nx.complete_graph(4))
-
-@raises(nx.NetworkXError)
-def test_bad_mode():
-    bipartite.clustering(nx.path_graph(4),mode='foo')
-
-def test_path_graph():
-    G=nx.path_graph(4)
-    answer={0:0.5,1:0.5,2:0.5,3:0.5}
-    assert_equal(bipartite.clustering(G,mode='dot'),answer)
-    assert_equal(bipartite.clustering(G,mode='max'),answer)
-    answer={0:1,1:1,2:1,3:1}
-    assert_equal(bipartite.clustering(G,mode='min'),answer)
-
-def test_average_path_graph():
-    G=nx.path_graph(4)
-    assert_equal(bipartite.average_clustering(G,mode='dot'),0.5)
-    assert_equal(bipartite.average_clustering(G,mode='max'),0.5)
-    assert_equal(bipartite.average_clustering(G,mode='min'),1)
-
-def test_ra_clustering_davis():
-    G = nx.davis_southern_women_graph()
-    cc4 = round(bipartite.robins_alexander_clustering(G), 3)
-    assert_equal(cc4, 0.468)
-
-def test_ra_clustering_square():
-    G = nx.path_graph(4)
-    G.add_edge(0, 3)
-    assert_equal(bipartite.robins_alexander_clustering(G), 1.0)
-
-def test_ra_clustering_zero():
-    G = nx.Graph()
-    assert_equal(bipartite.robins_alexander_clustering(G), 0)
-    G.add_nodes_from(range(4))
-    assert_equal(bipartite.robins_alexander_clustering(G), 0)
-    G.add_edges_from([(0,1),(2,3),(3,4)])
-    assert_equal(bipartite.robins_alexander_clustering(G), 0)
-    G.add_edge(1,2)
-    assert_equal(bipartite.robins_alexander_clustering(G), 0)
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/bipartite/tests/test_project.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/bipartite/tests/test_project.py
deleted file mode 100644
index 52a93b2..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/bipartite/tests/test_project.py
+++ /dev/null
@@ -1,363 +0,0 @@
-#!/usr/bin/env python
-from nose.tools import *
-import networkx as nx
-from networkx.algorithms import bipartite
-from networkx.testing import *
-
-class TestBipartiteProject:
-
-    def test_path_projected_graph(self):
-        G=nx.path_graph(4)
-        P=bipartite.projected_graph(G,[1,3]) 
-        assert_equal(sorted(P.nodes()),[1,3])
-        assert_equal(sorted(P.edges()),[(1,3)])
-        P=bipartite.projected_graph(G,[0,2]) 
-        assert_equal(sorted(P.nodes()),[0,2])
-        assert_equal(sorted(P.edges()),[(0,2)])
-
-    def test_path_projected_properties_graph(self):
-        G=nx.path_graph(4)
-        G.add_node(1,name='one')
-        G.add_node(2,name='two')
-        P=bipartite.projected_graph(G,[1,3]) 
-        assert_equal(sorted(P.nodes()),[1,3])
-        assert_equal(sorted(P.edges()),[(1,3)])
-        assert_equal(P.node[1]['name'],G.node[1]['name'])
-        P=bipartite.projected_graph(G,[0,2]) 
-        assert_equal(sorted(P.nodes()),[0,2])
-        assert_equal(sorted(P.edges()),[(0,2)])
-        assert_equal(P.node[2]['name'],G.node[2]['name'])
-
-    def test_path_collaboration_projected_graph(self):
-        G=nx.path_graph(4)
-        P=bipartite.collaboration_weighted_projected_graph(G,[1,3]) 
-        assert_equal(sorted(P.nodes()),[1,3])
-        assert_equal(sorted(P.edges()),[(1,3)])
-        P[1][3]['weight']=1
-        P=bipartite.collaboration_weighted_projected_graph(G,[0,2]) 
-        assert_equal(sorted(P.nodes()),[0,2])
-        assert_equal(sorted(P.edges()),[(0,2)])
-        P[0][2]['weight']=1
-
-    def test_directed_path_collaboration_projected_graph(self):
-        G=nx.DiGraph()
-        G.add_path(list(range(4)))
-        P=bipartite.collaboration_weighted_projected_graph(G,[1,3]) 
-        assert_equal(sorted(P.nodes()),[1,3])
-        assert_equal(sorted(P.edges()),[(1,3)])
-        P[1][3]['weight']=1
-        P=bipartite.collaboration_weighted_projected_graph(G,[0,2]) 
-        assert_equal(sorted(P.nodes()),[0,2])
-        assert_equal(sorted(P.edges()),[(0,2)])
-        P[0][2]['weight']=1
-
-    def test_path_weighted_projected_graph(self):
-        G=nx.path_graph(4)
-        P=bipartite.weighted_projected_graph(G,[1,3]) 
-        assert_equal(sorted(P.nodes()),[1,3])
-        assert_equal(sorted(P.edges()),[(1,3)])
-        P[1][3]['weight']=1
-        P=bipartite.weighted_projected_graph(G,[0,2]) 
-        assert_equal(sorted(P.nodes()),[0,2])
-        assert_equal(sorted(P.edges()),[(0,2)])
-        P[0][2]['weight']=1
-
-    def test_path_weighted_projected_directed_graph(self):
-        G=nx.DiGraph()
-        G.add_path(list(range(4)))
-        P=bipartite.weighted_projected_graph(G,[1,3]) 
-        assert_equal(sorted(P.nodes()),[1,3])
-        assert_equal(sorted(P.edges()),[(1,3)])
-        P[1][3]['weight']=1
-        P=bipartite.weighted_projected_graph(G,[0,2]) 
-        assert_equal(sorted(P.nodes()),[0,2])
-        assert_equal(sorted(P.edges()),[(0,2)])
-        P[0][2]['weight']=1
-
-
-    def test_star_projected_graph(self):
-        G=nx.star_graph(3)
-        P=bipartite.projected_graph(G,[1,2,3])
-        assert_equal(sorted(P.nodes()),[1,2,3])
-        assert_equal(sorted(P.edges()),[(1,2),(1,3),(2,3)])
-        P=bipartite.weighted_projected_graph(G,[1,2,3])
-        assert_equal(sorted(P.nodes()),[1,2,3])
-        assert_equal(sorted(P.edges()),[(1,2),(1,3),(2,3)])
-
-        P=bipartite.projected_graph(G,[0])
-        assert_equal(sorted(P.nodes()),[0])
-        assert_equal(sorted(P.edges()),[])
-
-    def test_project_multigraph(self):
-        G=nx.Graph()
-        G.add_edge('a',1)
-        G.add_edge('b',1)
-        G.add_edge('a',2)
-        G.add_edge('b',2)
-        P=bipartite.projected_graph(G,'ab')
-        assert_edges_equal(P.edges(),[('a','b')])
-        P=bipartite.weighted_projected_graph(G,'ab')
-        assert_edges_equal(P.edges(),[('a','b')])
-        P=bipartite.projected_graph(G,'ab',multigraph=True)
-        assert_edges_equal(P.edges(),[('a','b'),('a','b')])
-        
-    def test_project_collaboration(self):
-        G=nx.Graph()
-        G.add_edge('a',1)
-        G.add_edge('b',1)
-        G.add_edge('b',2)
-        G.add_edge('c',2)
-        G.add_edge('c',3)
-        G.add_edge('c',4)
-        G.add_edge('b',4)
-        P=bipartite.collaboration_weighted_projected_graph(G,'abc')
-        assert_equal(P['a']['b']['weight'],1)
-        assert_equal(P['b']['c']['weight'],2)
-
-    def test_directed_projection(self):
-        G=nx.DiGraph()
-        G.add_edge('A',1)
-        G.add_edge(1,'B')
-        G.add_edge('A',2)
-        G.add_edge('B',2)
-        P=bipartite.projected_graph(G,'AB')
-        assert_equal(sorted(P.edges()),[('A','B')])
-        P=bipartite.weighted_projected_graph(G,'AB')
-        assert_equal(sorted(P.edges()),[('A','B')])
-        assert_equal(P['A']['B']['weight'],1)
-
-        P=bipartite.projected_graph(G,'AB',multigraph=True)
-        assert_equal(sorted(P.edges()),[('A','B')])
-
-        G=nx.DiGraph()
-        G.add_edge('A',1)
-        G.add_edge(1,'B')
-        G.add_edge('A',2)
-        G.add_edge(2,'B')
-        P=bipartite.projected_graph(G,'AB')
-        assert_equal(sorted(P.edges()),[('A','B')])
-        P=bipartite.weighted_projected_graph(G,'AB')
-        assert_equal(sorted(P.edges()),[('A','B')])
-        assert_equal(P['A']['B']['weight'],2)
-
-        P=bipartite.projected_graph(G,'AB',multigraph=True)
-        assert_equal(sorted(P.edges()),[('A','B'),('A','B')])
-
-         
-class TestBipartiteWeightedProjection:
-
-    def setUp(self):
-        # Tore Opsahl's example
-        # http://toreopsahl.com/2009/05/01/projecting-two-mode-networks-onto-weighted-one-mode-networks/
-        self.G=nx.Graph()
-        self.G.add_edge('A',1)
-        self.G.add_edge('A',2)
-        self.G.add_edge('B',1)
-        self.G.add_edge('B',2)
-        self.G.add_edge('B',3)
-        self.G.add_edge('B',4)
-        self.G.add_edge('B',5)
-        self.G.add_edge('C',1)
-        self.G.add_edge('D',3)
-        self.G.add_edge('E',4)
-        self.G.add_edge('E',5)
-        self.G.add_edge('E',6)
-        self.G.add_edge('F',6)
-        # Graph based on figure 6 from Newman (2001)
-        self.N=nx.Graph()
-        self.N.add_edge('A',1)
-        self.N.add_edge('A',2)
-        self.N.add_edge('A',3)
-        self.N.add_edge('B',1)
-        self.N.add_edge('B',2)
-        self.N.add_edge('B',3)
-        self.N.add_edge('C',1)
-        self.N.add_edge('D',1)
-        self.N.add_edge('E',3)
-        
-    def test_project_weighted_shared(self):
-        edges=[('A','B',2),
-               ('A','C',1),
-               ('B','C',1),
-               ('B','D',1),
-               ('B','E',2),
-               ('E','F',1)]
-        Panswer=nx.Graph()
-        Panswer.add_weighted_edges_from(edges)
-        P=bipartite.weighted_projected_graph(self.G,'ABCDEF')
-        assert_equal(P.edges(),Panswer.edges())
-        for u,v in P.edges():
-            assert_equal(P[u][v]['weight'],Panswer[u][v]['weight'])
-
-        edges=[('A','B',3),
-               ('A','E',1),
-               ('A','C',1),
-               ('A','D',1),
-               ('B','E',1),
-               ('B','C',1),
-               ('B','D',1),
-               ('C','D',1)]
-        Panswer=nx.Graph()
-        Panswer.add_weighted_edges_from(edges)
-        P=bipartite.weighted_projected_graph(self.N,'ABCDE')
-        assert_equal(P.edges(),Panswer.edges())
-        for u,v in P.edges():
-            assert_equal(P[u][v]['weight'],Panswer[u][v]['weight'])
-
-    def test_project_weighted_newman(self):
-        edges=[('A','B',1.5),
-               ('A','C',0.5),
-               ('B','C',0.5),
-               ('B','D',1),
-               ('B','E',2),
-               ('E','F',1)]
-        Panswer=nx.Graph()
-        Panswer.add_weighted_edges_from(edges)
-        P=bipartite.collaboration_weighted_projected_graph(self.G,'ABCDEF')
-        assert_equal(P.edges(),Panswer.edges())
-        for u,v in P.edges():
-            assert_equal(P[u][v]['weight'],Panswer[u][v]['weight'])
-
-        edges=[('A','B',11/6.0),
-               ('A','E',1/2.0),
-               ('A','C',1/3.0),
-               ('A','D',1/3.0),
-               ('B','E',1/2.0),
-               ('B','C',1/3.0),
-               ('B','D',1/3.0),
-               ('C','D',1/3.0)]
-        Panswer=nx.Graph()
-        Panswer.add_weighted_edges_from(edges)
-        P=bipartite.collaboration_weighted_projected_graph(self.N,'ABCDE')
-        assert_equal(P.edges(),Panswer.edges())
-        for u,v in P.edges():
-            assert_equal(P[u][v]['weight'],Panswer[u][v]['weight'])
-
-    def test_project_weighted_ratio(self):
-        edges=[('A','B',2/6.0),
-               ('A','C',1/6.0),
-               ('B','C',1/6.0),
-               ('B','D',1/6.0),
-               ('B','E',2/6.0),
-               ('E','F',1/6.0)]
-        Panswer=nx.Graph()
-        Panswer.add_weighted_edges_from(edges)
-        P=bipartite.weighted_projected_graph(self.G, 'ABCDEF', ratio=True)
-        assert_equal(P.edges(),Panswer.edges())
-        for u,v in P.edges():
-            assert_equal(P[u][v]['weight'],Panswer[u][v]['weight'])
-
-        edges=[('A','B',3/3.0),
-               ('A','E',1/3.0),
-               ('A','C',1/3.0),
-               ('A','D',1/3.0),
-               ('B','E',1/3.0),
-               ('B','C',1/3.0),
-               ('B','D',1/3.0),
-               ('C','D',1/3.0)]
-        Panswer=nx.Graph()
-        Panswer.add_weighted_edges_from(edges)
-        P=bipartite.weighted_projected_graph(self.N, 'ABCDE', ratio=True)
-        assert_equal(P.edges(),Panswer.edges())
-        for u,v in P.edges():
-            assert_equal(P[u][v]['weight'],Panswer[u][v]['weight'])
-
-    def test_project_weighted_overlap(self):
-        edges=[('A','B',2/2.0),
-               ('A','C',1/1.0),
-               ('B','C',1/1.0),
-               ('B','D',1/1.0),
-               ('B','E',2/3.0),
-               ('E','F',1/1.0)]
-        Panswer=nx.Graph()
-        Panswer.add_weighted_edges_from(edges)
-        P=bipartite.overlap_weighted_projected_graph(self.G,'ABCDEF', jaccard=False)
-        assert_equal(P.edges(),Panswer.edges())
-        for u,v in P.edges():
-            assert_equal(P[u][v]['weight'],Panswer[u][v]['weight'])
-
-        edges=[('A','B',3/3.0),
-               ('A','E',1/1.0),
-               ('A','C',1/1.0),
-               ('A','D',1/1.0),
-               ('B','E',1/1.0),
-               ('B','C',1/1.0),
-               ('B','D',1/1.0),
-               ('C','D',1/1.0)]
-        Panswer=nx.Graph()
-        Panswer.add_weighted_edges_from(edges)
-        P=bipartite.overlap_weighted_projected_graph(self.N,'ABCDE', jaccard=False)
-        assert_equal(P.edges(),Panswer.edges())
-        for u,v in P.edges():
-            assert_equal(P[u][v]['weight'],Panswer[u][v]['weight'])
-
-    def test_project_weighted_jaccard(self):
-        edges=[('A','B',2/5.0),
-               ('A','C',1/2.0),
-               ('B','C',1/5.0),
-               ('B','D',1/5.0),
-               ('B','E',2/6.0),
-               ('E','F',1/3.0)]
-        Panswer=nx.Graph()
-        Panswer.add_weighted_edges_from(edges)
-        P=bipartite.overlap_weighted_projected_graph(self.G,'ABCDEF')
-        assert_equal(P.edges(),Panswer.edges())
-        for u,v in P.edges():
-            assert_equal(P[u][v]['weight'],Panswer[u][v]['weight'])
-
-        edges=[('A','B',3/3.0),
-               ('A','E',1/3.0),
-               ('A','C',1/3.0),
-               ('A','D',1/3.0),
-               ('B','E',1/3.0),
-               ('B','C',1/3.0),
-               ('B','D',1/3.0),
-               ('C','D',1/1.0)]
-        Panswer=nx.Graph()
-        Panswer.add_weighted_edges_from(edges)
-        P=bipartite.overlap_weighted_projected_graph(self.N,'ABCDE')
-        assert_equal(P.edges(),Panswer.edges())
-        for u,v in P.edges():
-            assert_equal(P[u][v]['weight'],Panswer[u][v]['weight'])
-
-    def test_generic_weighted_projected_graph_simple(self):
-        def shared(G, u, v):
-            return len(set(G[u]) & set(G[v]))
-        B = nx.path_graph(5) 
-        G = bipartite.generic_weighted_projected_graph(B, [0, 2, 4], weight_function=shared) 
-        assert_equal(sorted(G.nodes()), [0, 2, 4]) 
-        assert_equal(G.edges(data=True), 
-                     [(0, 2, {'weight': 1}), (2, 4, {'weight': 1})] )
-
-        G = bipartite.generic_weighted_projected_graph(B, [0, 2, 4]) 
-        assert_equal(sorted(G.nodes()), [0, 2, 4]) 
-        assert_equal(G.edges(data=True), 
-                     [(0, 2, {'weight': 1}), (2, 4, {'weight': 1})] )
-        B = nx.DiGraph()
-        B.add_path(list(range(5)))
-        G = bipartite.generic_weighted_projected_graph(B, [0, 2, 4]) 
-        assert_equal(sorted(G.nodes()), [0, 2, 4]) 
-        assert_equal(G.edges(data=True), 
-                     [(0, 2, {'weight': 1}), (2, 4, {'weight': 1})] )
-
-    def test_generic_weighted_projected_graph_custom(self):
-        def jaccard(G, u, v):
-            unbrs = set(G[u])
-            vnbrs = set(G[v])
-            return float(len(unbrs & vnbrs)) / len(unbrs | vnbrs)
-        def my_weight(G, u, v, weight='weight'):
-            w = 0
-            for nbr in set(G[u]) & set(G[v]):
-                w += G.edge[u][nbr].get(weight, 1) + G.edge[v][nbr].get(weight, 1)
-            return w
-        B = nx.complete_bipartite_graph(2,2)
-        for i,(u,v) in enumerate(B.edges()):
-            B.edge[u][v]['weight'] = i + 1
-        G = bipartite.generic_weighted_projected_graph(B, [0, 1],                   
-                                                        weight_function=jaccard)
-        assert_equal(G.edges(data=True), [(0, 1, {'weight': 1.0})])
-        G = bipartite.generic_weighted_projected_graph(B, [0, 1],                   
-                                                        weight_function=my_weight)
-        assert_equal(G.edges(data=True), [(0, 1, {'weight': 10})])
-        G = bipartite.generic_weighted_projected_graph(B, [0, 1])
-        assert_equal(G.edges(data=True), [(0, 1, {'weight': 2})])
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/bipartite/tests/test_spectral_bipartivity.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/bipartite/tests/test_spectral_bipartivity.py
deleted file mode 100644
index e244a42..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/bipartite/tests/test_spectral_bipartivity.py
+++ /dev/null
@@ -1,93 +0,0 @@
-# -*- coding: utf-8 -*-
-from nose import SkipTest
-from nose.tools import *
-import networkx as nx
-from networkx.algorithms.bipartite import spectral_bipartivity as sb
-
-# Examples from Figure 1
-# E. Estrada and J. A. Rodríguez-Velázquez, "Spectral measures of
-# bipartivity in complex networks", PhysRev E 72, 046105 (2005)
-
-class TestSpectralBipartivity(object):
-    @classmethod
-    def setupClass(cls):
-        global scipy
-        global assert_equal
-        global assert_almost_equal
-        try:
-            import scipy.linalg
-        except ImportError:
-             raise SkipTest('SciPy not available.')
-
-
-    def test_star_like(self):
-        # star-like
-
-        G=nx.star_graph(2)
-        G.add_edge(1,2)
-        assert_almost_equal(sb(G),0.843,places=3)
-
-        G=nx.star_graph(3)
-        G.add_edge(1,2)
-        assert_almost_equal(sb(G),0.871,places=3)
-
-        G=nx.star_graph(4)
-        G.add_edge(1,2)
-        assert_almost_equal(sb(G),0.890,places=3)
-
-
-    def k23_like(self):
-        # K2,3-like
-        G=nx.complete_bipartite_graph(2,3)
-        G.add_edge(0,1)
-        assert_almost_equal(sb(G),0.769,places=3)
-
-        G=nx.complete_bipartite_graph(2,3)
-        G.add_edge(2,4)
-        assert_almost_equal(sb(G),0.829,places=3)
-
-        G=nx.complete_bipartite_graph(2,3)
-        G.add_edge(2,4)
-        G.add_edge(3,4)
-        assert_almost_equal(sb(G),0.731,places=3)
-
-
-        G=nx.complete_bipartite_graph(2,3)
-        G.add_edge(0,1)
-        G.add_edge(2,4)
-        assert_almost_equal(sb(G),0.692,places=3)
-
-        G=nx.complete_bipartite_graph(2,3)
-        G.add_edge(2,4)
-        G.add_edge(3,4)
-        G.add_edge(0,1)
-        assert_almost_equal(sb(G),0.645,places=3)
-
-        G=nx.complete_bipartite_graph(2,3)
-        G.add_edge(2,4)
-        G.add_edge(3,4)
-        G.add_edge(2,3)
-        assert_almost_equal(sb(G),0.645,places=3)
-
-        G=nx.complete_bipartite_graph(2,3)
-        G.add_edge(2,4)
-        G.add_edge(3,4)
-        G.add_edge(2,3)
-        G.add_edge(0,1)
-        assert_almost_equal(sb(G),0.597,places=3)
-
-    def test_single_nodes(self):
-
-        # single nodes
-        G=nx.complete_bipartite_graph(2,3)
-        G.add_edge(2,4)
-        sbn=sb(G,nodes=[1,2])
-        assert_almost_equal(sbn[1],0.85,places=2)
-        assert_almost_equal(sbn[2],0.77,places=2)
-
-        G=nx.complete_bipartite_graph(2,3)
-        G.add_edge(0,1)
-        sbn=sb(G,nodes=[1,2])
-        assert_almost_equal(sbn[1],0.73,places=2)
-        assert_almost_equal(sbn[2],0.82,places=2)
-
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/block.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/block.py
deleted file mode 100644
index cc2ff1d..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/block.py
+++ /dev/null
@@ -1,115 +0,0 @@
-# encoding: utf-8
-"""
-Functions for creating network blockmodels from node partitions.
-
-Created by Drew Conway <drew.conway@nyu.edu> 
-Copyright (c) 2010. All rights reserved.
-"""
-__author__ = """\n""".join(['Drew Conway <drew.conway@nyu.edu>',
-                            'Aric Hagberg <hagberg@lanl.gov>'])
-__all__=['blockmodel']
-
-import networkx as nx
-
-def blockmodel(G,partitions,multigraph=False):
-    """Returns a reduced graph constructed using the generalized block modeling
-    technique.
-
-    The blockmodel technique collapses nodes into blocks based on a
-    given partitioning of the node set.  Each partition of nodes
-    (block) is represented as a single node in the reduced graph.
-
-    Edges between nodes in the block graph are added according to the
-    edges in the original graph.  If the parameter multigraph is False
-    (the default) a single edge is added with a weight equal to the
-    sum of the edge weights between nodes in the original graph
-    The default is a weight of 1 if weights are not specified.  If the
-    parameter multigraph is True then multiple edges are added each
-    with the edge data from the original graph.
-
-    Parameters
-    ----------
-    G : graph
-        A networkx Graph or DiGraph
-    partitions : list of lists, or list of sets 
-        The partition of the nodes.  Must be non-overlapping.
-    multigraph : bool, optional
-        If True return a MultiGraph with the edge data of the original
-        graph applied to each corresponding edge in the new graph.
-        If False return a Graph with the sum of the edge weights, or a
-        count of the edges if the original graph is unweighted.
-
-    Returns
-    -------
-    blockmodel : a Networkx graph object
-    
-    Examples
-    --------
-    >>> G=nx.path_graph(6)
-    >>> partition=[[0,1],[2,3],[4,5]]
-    >>> M=nx.blockmodel(G,partition)
-
-    References
-    ----------
-    .. [1] Patrick Doreian, Vladimir Batagelj, and Anuska Ferligoj
-    	"Generalized Blockmodeling",Cambridge University Press, 2004.
-    """
-    # Create sets of node partitions
-    part=list(map(set,partitions)) 
-
-    # Check for overlapping node partitions
-    u=set()
-    for p1,p2 in zip(part[:-1],part[1:]):
-        u.update(p1)
-        #if not u.isdisjoint(p2):  # Python 2.6 required
-        if len (u.intersection(p2))>0:
-            raise nx.NetworkXException("Overlapping node partitions.")
-
-    # Initialize blockmodel graph
-    if multigraph:
-        if G.is_directed():
-            M=nx.MultiDiGraph() 
-        else:
-            M=nx.MultiGraph() 
-    else:
-        if G.is_directed():
-            M=nx.DiGraph() 
-        else:
-            M=nx.Graph() 
-        
-    # Add nodes and properties to blockmodel            
-    # The blockmodel nodes are node-induced subgraphs of G
-    # Label them with integers starting at 0
-    for i,p in zip(range(len(part)),part):
-        M.add_node(i)
-        # The node-induced subgraph is stored as the node 'graph' attribute 
-        SG=G.subgraph(p)
-        M.node[i]['graph']=SG        
-        M.node[i]['nnodes']=SG.number_of_nodes()
-        M.node[i]['nedges']=SG.number_of_edges()
-        M.node[i]['density']=nx.density(SG)
-        
-    # Create mapping between original node labels and new blockmodel node labels
-    block_mapping={}
-    for n in M:
-        nodes_in_block=M.node[n]['graph'].nodes()
-        block_mapping.update(dict.fromkeys(nodes_in_block,n))
-
-    # Add edges to block graph 
-    for u,v,d in G.edges(data=True):
-        bmu=block_mapping[u]
-        bmv=block_mapping[v]
-        if bmu==bmv: # no self loops
-            continue
-        if multigraph: 
-            # For multigraphs add an edge for each edge in original graph
-            M.add_edge(bmu,bmv,attr_dict=d)
-        else:
-            # For graphs and digraphs add single weighted edge
-            weight=d.get('weight',1.0) # default to 1 if no weight specified
-            if M.has_edge(bmu,bmv):
-                M[bmu][bmv]['weight']+=weight
-            else:
-                M.add_edge(bmu,bmv,weight=weight)
-    return M
-
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/boundary.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/boundary.py
deleted file mode 100644
index ec7b11c..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/boundary.py
+++ /dev/null
@@ -1,102 +0,0 @@
-"""
-Routines to find the boundary of a set of nodes.
-
-Edge boundaries are edges that have only one end
-in the set of nodes.  
-
-Node boundaries are nodes outside the set of nodes
-that have an edge to a node in the set.
-
-"""
-__author__ = """Aric Hagberg (hagberg@lanl.gov)\nPieter Swart (swart@lanl.gov)\nDan Schult (dschult@colgate.edu)"""
-#    Copyright (C) 2004-2008 by 
-#    Aric Hagberg <hagberg@lanl.gov>
-#    Dan Schult <dschult@colgate.edu>
-#    Pieter Swart <swart@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-
-__all__=['edge_boundary','node_boundary']
-
-def edge_boundary(G, nbunch1, nbunch2=None):
-    """Return the edge boundary. 
-
-    Edge boundaries are edges that have only one end
-    in the given set of nodes.  
-
-    Parameters
-    -----------
-    G : graph
-      A networkx graph 
-
-    nbunch1 : list, container
-       Interior node set 
-
-    nbunch2 : list, container
-       Exterior node set.  If None then it is set to all of the
-       nodes in G not in nbunch1.
-
-    Returns
-    -------
-    elist : list
-       List of edges
-
-    Notes
-    ------
-    Nodes in nbunch1 and nbunch2 that are not in G are ignored.
-
-    nbunch1 and nbunch2 are usually meant to be disjoint, 
-    but in the interest of speed and generality, that is 
-    not required here.
-
-    """
-    if nbunch2 is None:     # Then nbunch2 is complement of nbunch1
-        nset1=set((n for n in nbunch1 if n in G))
-        return [(n1,n2) for n1 in nset1 for n2 in G[n1] \
-                if n2 not in nset1]
-
-    nset2=set(nbunch2)
-    return [(n1,n2) for n1 in nbunch1 if n1 in G for n2 in G[n1] \
-            if n2 in nset2]
-
-def node_boundary(G, nbunch1, nbunch2=None):
-    """Return the node boundary. 
-
-    The node boundary is all nodes in the edge boundary of a given
-    set of nodes that are in the set.
-
-    Parameters
-    -----------
-    G : graph
-      A networkx graph 
-
-    nbunch1 : list, container
-       Interior node set 
-
-    nbunch2 : list, container
-       Exterior node set.  If None then it is set to all of the
-       nodes in G not in nbunch1.
-
-    Returns
-    -------
-    nlist : list
-       List of nodes.
-
-    Notes
-    ------
-    Nodes in nbunch1 and nbunch2 that are not in G are ignored.
-
-    nbunch1 and nbunch2 are usually meant to be disjoint, 
-    but in the interest of speed and generality, that is 
-    not required here.
-
-    """
-    nset1=set(n for n in nbunch1 if n in G)
-    bdy=set()
-    for n1 in nset1:
-        bdy.update(G[n1])
-    bdy -= nset1
-    if nbunch2 is not None: # else nbunch2 is complement of nbunch1
-        bdy &= set(nbunch2)
-    return list(bdy)
-
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/centrality/__init__.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/centrality/__init__.py
deleted file mode 100644
index d60154b..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/centrality/__init__.py
+++ /dev/null
@@ -1,20 +0,0 @@
-from networkx.algorithms.centrality.betweenness import *
-from networkx.algorithms.centrality.betweenness_subset import *
-from networkx.algorithms.centrality.closeness import *
-from networkx.algorithms.centrality.current_flow_closeness import *
-from networkx.algorithms.centrality.current_flow_betweenness import *
-from networkx.algorithms.centrality.current_flow_betweenness_subset import *
-from networkx.algorithms.centrality.degree_alg import *
-from networkx.algorithms.centrality.eigenvector import *
-from networkx.algorithms.centrality.katz import *
-from networkx.algorithms.centrality.load import *
-from networkx.algorithms.centrality.communicability_alg import *
-import networkx.algorithms.centrality.betweenness
-import networkx.algorithms.centrality.closeness
-import networkx.algorithms.centrality.current_flow_betweenness
-import networkx.algorithms.centrality.current_flow_closeness
-import networkx.algorithms.centrality.degree_alg
-import networkx.algorithms.centrality.eigenvector
-import networkx.algorithms.centrality.load
-import networkx.algorithms.centrality.communicability_alg
-import networkx.algorithms.centrality.katz
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/centrality/betweenness.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/centrality/betweenness.py
deleted file mode 100644
index af2cf6a..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/centrality/betweenness.py
+++ /dev/null
@@ -1,334 +0,0 @@
-"""
-Betweenness centrality measures.
-"""
-#    Copyright (C) 2004-2011 by 
-#    Aric Hagberg <hagberg@lanl.gov>
-#    Dan Schult <dschult@colgate.edu>
-#    Pieter Swart <swart@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-import heapq
-import networkx as nx
-import random
-__author__ = """Aric Hagberg (hagberg@lanl.gov)"""
-
-__all__ = ['betweenness_centrality',
-           'edge_betweenness_centrality',
-           'edge_betweenness']
-
-def betweenness_centrality(G, k=None, normalized=True, weight=None, 
-                           endpoints=False, 
-                           seed=None):
-    r"""Compute the shortest-path betweenness centrality for nodes.
-
-    Betweenness centrality of a node `v` is the sum of the
-    fraction of all-pairs shortest paths that pass through `v`:
-
-    .. math::
-
-       c_B(v) =\sum_{s,t \in V} \frac{\sigma(s, t|v)}{\sigma(s, t)}
-
-    where `V` is the set of nodes, `\sigma(s, t)` is the number of 
-    shortest `(s, t)`-paths,  and `\sigma(s, t|v)` is the number of those 
-    paths  passing through some  node `v` other than `s, t`. 
-    If `s = t`, `\sigma(s, t) = 1`, and if `v \in {s, t}`,  
-    `\sigma(s, t|v) = 0` [2]_.
-
-    Parameters
-    ----------
-    G : graph
-      A NetworkX graph 
-
-    k : int, optional (default=None)
-      If k is not None use k node samples to estimate betweenness.
-      The value of k <= n where n is the number of nodes in the graph.
-      Higher values give better approximation. 
-
-    normalized : bool, optional  
-      If True the betweenness values are normalized by `2/((n-1)(n-2))` 
-      for graphs, and `1/((n-1)(n-2))` for directed graphs where `n` 
-      is the number of nodes in G.
-
-    weight : None or string, optional  
-      If None, all edge weights are considered equal.
-      Otherwise holds the name of the edge attribute used as weight.
-
-    endpoints : bool, optional  
-      If True include the endpoints in the shortest path counts.
-
-    Returns
-    -------
-    nodes : dictionary
-       Dictionary of nodes with betweenness centrality as the value.
-
-    See Also
-    --------
-    edge_betweenness_centrality
-    load_centrality
-
-    Notes
-    -----
-    The algorithm is from Ulrik Brandes [1]_.
-    See [2]_ for details on algorithms for variations and related metrics.
-
-    For approximate betweenness calculations set k=#samples to use 
-    k nodes ("pivots") to estimate the betweenness values. For an estimate
-    of the number of pivots needed see [3]_.
-
-    For weighted graphs the edge weights must be greater than zero.
-    Zero edge weights can produce an infinite number of equal length 
-    paths between pairs of nodes.
-
-    References
-    ----------
-    .. [1]  A Faster Algorithm for Betweenness Centrality.
-       Ulrik Brandes, 
-       Journal of Mathematical Sociology 25(2):163-177, 2001.
-       http://www.inf.uni-konstanz.de/algo/publications/b-fabc-01.pdf
-    .. [2] Ulrik Brandes: On Variants of Shortest-Path Betweenness 
-       Centrality and their Generic Computation. 
-       Social Networks 30(2):136-145, 2008.
-       http://www.inf.uni-konstanz.de/algo/publications/b-vspbc-08.pdf
-    .. [3] Ulrik Brandes and Christian Pich: 
-       Centrality Estimation in Large Networks. 
-       International Journal of Bifurcation and Chaos 17(7):2303-2318, 2007.
-       http://www.inf.uni-konstanz.de/algo/publications/bp-celn-06.pdf
-    """
-    betweenness=dict.fromkeys(G,0.0) # b[v]=0 for v in G
-    if k is None:
-        nodes = G
-    else:
-        random.seed(seed)
-        nodes = random.sample(G.nodes(), k)
-    for s in nodes:
-        # single source shortest paths
-        if weight is None:  # use BFS
-            S,P,sigma=_single_source_shortest_path_basic(G,s)
-        else:  # use Dijkstra's algorithm
-            S,P,sigma=_single_source_dijkstra_path_basic(G,s,weight)
-        # accumulation
-        if endpoints:
-            betweenness=_accumulate_endpoints(betweenness,S,P,sigma,s)
-        else:
-            betweenness=_accumulate_basic(betweenness,S,P,sigma,s)
-    # rescaling
-    betweenness=_rescale(betweenness, len(G),
-                         normalized=normalized,
-                         directed=G.is_directed(),
-                         k=k)
-    return betweenness
-
-
-def edge_betweenness_centrality(G,normalized=True,weight=None):
-    r"""Compute betweenness centrality for edges.
-
-    Betweenness centrality of an edge `e` is the sum of the
-    fraction of all-pairs shortest paths that pass through `e`:
-
-    .. math::
-
-       c_B(v) =\sum_{s,t \in V} \frac{\sigma(s, t|e)}{\sigma(s, t)}
-
-    where `V` is the set of nodes,`\sigma(s, t)` is the number of 
-    shortest `(s, t)`-paths, and `\sigma(s, t|e)` is the number of 
-    those paths passing through edge `e` [2]_.
-
-    Parameters
-    ----------
-    G : graph
-      A NetworkX graph 
-
-    normalized : bool, optional
-      If True the betweenness values are normalized by `2/(n(n-1))` 
-      for graphs, and `1/(n(n-1))` for directed graphs where `n` 
-      is the number of nodes in G.
-       
-    weight : None or string, optional  
-      If None, all edge weights are considered equal.
-      Otherwise holds the name of the edge attribute used as weight.
-
-    Returns
-    -------
-    edges : dictionary
-       Dictionary of edges with betweenness centrality as the value.
-        
-    See Also
-    --------
-    betweenness_centrality
-    edge_load
-
-    Notes
-    -----
-    The algorithm is from Ulrik Brandes [1]_.
-
-    For weighted graphs the edge weights must be greater than zero.
-    Zero edge weights can produce an infinite number of equal length 
-    paths between pairs of nodes.
-
-    References
-    ----------
-    .. [1]  A Faster Algorithm for Betweenness Centrality. Ulrik Brandes, 
-       Journal of Mathematical Sociology 25(2):163-177, 2001.
-       http://www.inf.uni-konstanz.de/algo/publications/b-fabc-01.pdf
-    .. [2] Ulrik Brandes: On Variants of Shortest-Path Betweenness 
-       Centrality and their Generic Computation. 
-       Social Networks 30(2):136-145, 2008.
-       http://www.inf.uni-konstanz.de/algo/publications/b-vspbc-08.pdf
-    """
-    betweenness=dict.fromkeys(G,0.0) # b[v]=0 for v in G
-    # b[e]=0 for e in G.edges()
-    betweenness.update(dict.fromkeys(G.edges(),0.0))
-    for s in G:
-        # single source shortest paths
-        if weight is None:  # use BFS
-            S,P,sigma=_single_source_shortest_path_basic(G,s)
-        else:  # use Dijkstra's algorithm
-            S,P,sigma=_single_source_dijkstra_path_basic(G,s,weight)
-        # accumulation
-        betweenness=_accumulate_edges(betweenness,S,P,sigma,s)
-    # rescaling
-    for n in G: # remove nodes to only return edges 
-        del betweenness[n]
-    betweenness=_rescale_e(betweenness, len(G),
-                           normalized=normalized,
-                           directed=G.is_directed())
-    return betweenness
-
-# obsolete name
-def edge_betweenness(G,normalized=True,weight=None):
-    return edge_betweenness_centrality(G,normalized,weight)
-
-
-# helpers for betweenness centrality
-
-def _single_source_shortest_path_basic(G,s):
-    S=[]
-    P={}
-    for v in G:
-        P[v]=[]
-    sigma=dict.fromkeys(G,0.0)    # sigma[v]=0 for v in G
-    D={}
-    sigma[s]=1.0
-    D[s]=0
-    Q=[s]
-    while Q:   # use BFS to find shortest paths
-        v=Q.pop(0)
-        S.append(v)
-        Dv=D[v]
-        sigmav=sigma[v]
-        for w in G[v]:
-            if w not in D:
-                Q.append(w)
-                D[w]=Dv+1
-            if D[w]==Dv+1:   # this is a shortest path, count paths
-                sigma[w] += sigmav
-                P[w].append(v) # predecessors 
-    return S,P,sigma
-
-
-
-def _single_source_dijkstra_path_basic(G,s,weight='weight'):
-    # modified from Eppstein
-    S=[]
-    P={}
-    for v in G:
-        P[v]=[]
-    sigma=dict.fromkeys(G,0.0)    # sigma[v]=0 for v in G
-    D={}
-    sigma[s]=1.0
-    push=heapq.heappush
-    pop=heapq.heappop
-    seen = {s:0}
-    Q=[]   # use Q as heap with (distance,node id) tuples
-    push(Q,(0,s,s))
-    while Q:
-        (dist,pred,v)=pop(Q)
-        if v in D:
-            continue # already searched this node.
-        sigma[v] += sigma[pred] # count paths
-        S.append(v)
-        D[v] = dist
-        for w,edgedata in G[v].items():
-            vw_dist = dist + edgedata.get(weight,1)
-            if w not in D and (w not in seen or vw_dist < seen[w]):
-                seen[w] = vw_dist
-                push(Q,(vw_dist,v,w))
-                sigma[w]=0.0
-                P[w]=[v]
-            elif vw_dist==seen[w]:  # handle equal paths
-                sigma[w] += sigma[v]
-                P[w].append(v)
-    return S,P,sigma
-
-def _accumulate_basic(betweenness,S,P,sigma,s):
-    delta=dict.fromkeys(S,0)
-    while S:
-        w=S.pop()
-        coeff=(1.0+delta[w])/sigma[w]
-        for v in P[w]:
-            delta[v] += sigma[v]*coeff
-        if w != s:
-            betweenness[w]+=delta[w]
-    return betweenness
-
-def _accumulate_endpoints(betweenness,S,P,sigma,s):
-    betweenness[s]+=len(S)-1
-    delta=dict.fromkeys(S,0)
-    while S:
-        w=S.pop()
-        coeff=(1.0+delta[w])/sigma[w]
-        for v in P[w]:
-            delta[v] += sigma[v]*coeff
-        if w != s:
-            betweenness[w] += delta[w]+1
-    return betweenness
-
-def _accumulate_edges(betweenness,S,P,sigma,s):
-    delta=dict.fromkeys(S,0)
-    while S:
-        w=S.pop()
-        coeff=(1.0+delta[w])/sigma[w]
-        for v in P[w]:
-            c=sigma[v]*coeff
-            if (v,w) not in betweenness:
-                betweenness[(w,v)]+=c
-            else:
-                betweenness[(v,w)]+=c
-            delta[v]+=c
-        if w != s:
-            betweenness[w]+=delta[w]
-    return betweenness
-
-def _rescale(betweenness,n,normalized,directed=False,k=None):
-    if normalized is True:
-        if n <=2:
-            scale=None  # no normalization b=0 for all nodes
-        else:
-            scale=1.0/((n-1)*(n-2))
-    else: # rescale by 2 for undirected graphs
-        if not directed:
-            scale=1.0/2.0
-        else:
-            scale=None
-    if scale is not None:
-        if k is not None:
-            scale=scale*n/k
-        for v in betweenness:
-            betweenness[v] *= scale
-    return betweenness
-
-def _rescale_e(betweenness,n,normalized,directed=False):
-    if normalized is True:
-        if n <=1:
-            scale=None  # no normalization b=0 for all nodes
-        else:
-            scale=1.0/(n*(n-1))
-    else: # rescale by 2 for undirected graphs
-        if not directed:
-            scale=1.0/2.0
-        else:
-            scale=None
-    if scale is not None:
-        for v in betweenness:
-            betweenness[v] *= scale
-    return betweenness
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/centrality/betweenness_subset.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/centrality/betweenness_subset.py
deleted file mode 100644
index cd4f8a2..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/centrality/betweenness_subset.py
+++ /dev/null
@@ -1,263 +0,0 @@
-"""
-Betweenness centrality measures for subsets of nodes.
-"""
-#    Copyright (C) 2004-2011 by 
-#    Aric Hagberg <hagberg@lanl.gov>
-#    Dan Schult <dschult@colgate.edu>
-#    Pieter Swart <swart@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-__author__ = """Aric Hagberg (hagberg@lanl.gov)"""
-
-__all__ = ['betweenness_centrality_subset',
-           'edge_betweenness_centrality_subset',
-           'betweenness_centrality_source']
-
-import networkx as nx
-
-from networkx.algorithms.centrality.betweenness import\
-    _single_source_dijkstra_path_basic as dijkstra
-from networkx.algorithms.centrality.betweenness import\
-    _single_source_shortest_path_basic as shortest_path
-
-
-def betweenness_centrality_subset(G,sources,targets,
-                                  normalized=False,
-                                  weight=None):
-    """Compute betweenness centrality for a subset of nodes.
-
-    .. math::
-
-       c_B(v) =\sum_{s\in S, t \in T} \frac{\sigma(s, t|v)}{\sigma(s, t)}
-
-    where `S` is the set of sources, `T` is the set of targets,
-    `\sigma(s, t)` is the number of shortest `(s, t)`-paths, 
-    and `\sigma(s, t|v)` is the number of those paths
-    passing through some  node `v` other than `s, t`. 
-    If `s = t`, `\sigma(s, t) = 1`,
-    and if `v \in {s, t}`,  `\sigma(s, t|v) = 0` [2]_.
-
-
-    Parameters
-    ----------
-    G : graph
-
-    sources: list of nodes
-      Nodes to use as sources for shortest paths in betweenness
-
-    targets: list of nodes
-      Nodes to use as targets for shortest paths in betweenness
-
-    normalized : bool, optional
-      If True the betweenness values are normalized by `2/((n-1)(n-2))` 
-      for graphs, and `1/((n-1)(n-2))` for directed graphs where `n` 
-      is the number of nodes in G.
-       
-    weight : None or string, optional  
-      If None, all edge weights are considered equal.
-      Otherwise holds the name of the edge attribute used as weight.
-
-    Returns
-    -------
-    nodes : dictionary
-       Dictionary of nodes with betweenness centrality as the value.
-
-    See Also
-    --------
-    edge_betweenness_centrality
-    load_centrality
-
-    Notes
-    -----
-    The basic algorithm is from [1]_.
-
-    For weighted graphs the edge weights must be greater than zero.
-    Zero edge weights can produce an infinite number of equal length 
-    paths between pairs of nodes.
-
-    The normalization might seem a little strange but it is the same
-    as in betweenness_centrality() and is designed to make
-    betweenness_centrality(G) be the same as
-    betweenness_centrality_subset(G,sources=G.nodes(),targets=G.nodes()).
-
-    
-    References
-    ----------
-    .. [1] Ulrik Brandes, A Faster Algorithm for Betweenness Centrality.
-       Journal of Mathematical Sociology 25(2):163-177, 2001.
-       http://www.inf.uni-konstanz.de/algo/publications/b-fabc-01.pdf
-    .. [2] Ulrik Brandes: On Variants of Shortest-Path Betweenness 
-       Centrality and their Generic Computation. 
-       Social Networks 30(2):136-145, 2008.
-       http://www.inf.uni-konstanz.de/algo/publications/b-vspbc-08.pdf
-    """
-    b=dict.fromkeys(G,0.0) # b[v]=0 for v in G
-    for s in sources:
-        # single source shortest paths
-        if weight is None:  # use BFS
-            S,P,sigma=shortest_path(G,s)
-        else:  # use Dijkstra's algorithm
-            S,P,sigma=dijkstra(G,s,weight)
-        b=_accumulate_subset(b,S,P,sigma,s,targets)
-    b=_rescale(b,len(G),normalized=normalized,directed=G.is_directed())
-    return b
-
-
-def edge_betweenness_centrality_subset(G,sources,targets,
-                                       normalized=False,
-                                       weight=None):
-    """Compute betweenness centrality for edges for a subset of nodes.
-
-    .. math::
-
-       c_B(v) =\sum_{s\in S,t \in T} \frac{\sigma(s, t|e)}{\sigma(s, t)}
-
-    where `S` is the set of sources, `T` is the set of targets,
-    `\sigma(s, t)` is the number of shortest `(s, t)`-paths, 
-    and `\sigma(s, t|e)` is the number of those paths
-    passing through edge `e` [2]_.
-
-    Parameters
-    ----------
-    G : graph
-      A networkx graph 
-
-    sources: list of nodes
-      Nodes to use as sources for shortest paths in betweenness
-
-    targets: list of nodes
-      Nodes to use as targets for shortest paths in betweenness
-
-    normalized : bool, optional
-      If True the betweenness values are normalized by `2/(n(n-1))` 
-      for graphs, and `1/(n(n-1))` for directed graphs where `n` 
-      is the number of nodes in G.
-       
-    weight : None or string, optional  
-      If None, all edge weights are considered equal.
-      Otherwise holds the name of the edge attribute used as weight.
-
-    Returns
-    -------
-    edges : dictionary
-       Dictionary of edges with Betweenness centrality as the value.
-        
-    See Also
-    --------
-    betweenness_centrality
-    edge_load
-
-    Notes
-    -----
-    The basic algorithm is from [1]_.
-
-    For weighted graphs the edge weights must be greater than zero.
-    Zero edge weights can produce an infinite number of equal length 
-    paths between pairs of nodes.
-
-    The normalization might seem a little strange but it is the same
-    as in edge_betweenness_centrality() and is designed to make
-    edge_betweenness_centrality(G) be the same as
-    edge_betweenness_centrality_subset(G,sources=G.nodes(),targets=G.nodes()).
-
-    References
-    ----------
-    .. [1] Ulrik Brandes, A Faster Algorithm for Betweenness Centrality.
-       Journal of Mathematical Sociology 25(2):163-177, 2001.
-       http://www.inf.uni-konstanz.de/algo/publications/b-fabc-01.pdf
-    .. [2] Ulrik Brandes: On Variants of Shortest-Path Betweenness 
-       Centrality and their Generic Computation. 
-       Social Networks 30(2):136-145, 2008.
-       http://www.inf.uni-konstanz.de/algo/publications/b-vspbc-08.pdf
-
-    """
-
-    b=dict.fromkeys(G,0.0) # b[v]=0 for v in G
-    b.update(dict.fromkeys(G.edges(),0.0)) # b[e] for e in G.edges()
-    for s in sources:
-        # single source shortest paths
-        if weight is None:  # use BFS
-            S,P,sigma=shortest_path(G,s)
-        else:  # use Dijkstra's algorithm
-            S,P,sigma=dijkstra(G,s,weight)
-        b=_accumulate_edges_subset(b,S,P,sigma,s,targets)
-    for n in G: # remove nodes to only return edges 
-        del b[n]
-    b=_rescale_e(b,len(G),normalized=normalized,directed=G.is_directed())
-    return b
-
-# obsolete name
-def betweenness_centrality_source(G,normalized=True,weight=None,sources=None):
-    if sources is None:
-        sources=G.nodes()
-    targets=G.nodes()
-    return betweenness_centrality_subset(G,sources,targets,normalized,weight)
-
-
-def _accumulate_subset(betweenness,S,P,sigma,s,targets):
-    delta=dict.fromkeys(S,0)
-    target_set=set(targets)
-    while S:
-        w=S.pop()
-        for v in P[w]:
-            if w in target_set:
-                delta[v]+=(sigma[v]/sigma[w])*(1.0+delta[w])
-            else:
-                delta[v]+=delta[w]/len(P[w])
-        if w != s:
-            betweenness[w]+=delta[w]
-    return betweenness
-
-def _accumulate_edges_subset(betweenness,S,P,sigma,s,targets):
-    delta=dict.fromkeys(S,0)
-    target_set=set(targets)
-    while S:
-        w=S.pop()
-        for v in P[w]:
-            if w in target_set:
-                c=(sigma[v]/sigma[w])*(1.0+delta[w])
-            else:
-                c=delta[w]/len(P[w])
-            if (v,w) not in betweenness:
-                betweenness[(w,v)]+=c
-            else:
-                betweenness[(v,w)]+=c
-            delta[v]+=c
-        if w != s:
-            betweenness[w]+=delta[w]
-    return betweenness
-
-
-
-
-def _rescale(betweenness,n,normalized,directed=False):
-    if normalized is True:
-        if n <=2:
-            scale=None  # no normalization b=0 for all nodes
-        else:
-            scale=1.0/((n-1)*(n-2))
-    else: # rescale by 2 for undirected graphs
-        if not directed:
-            scale=1.0/2.0
-        else:
-            scale=None
-    if scale is not None:
-        for v in betweenness:
-            betweenness[v] *= scale
-    return betweenness
-
-def _rescale_e(betweenness,n,normalized,directed=False):
-    if normalized is True:
-        if n <=1:
-            scale=None  # no normalization b=0 for all nodes
-        else:
-            scale=1.0/(n*(n-1))
-    else: # rescale by 2 for undirected graphs
-        if not directed:
-            scale=1.0/2.0
-        else:
-            scale=None
-    if scale is not None:
-        for v in betweenness:
-            betweenness[v] *= scale
-    return betweenness
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/centrality/closeness.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/centrality/closeness.py
deleted file mode 100644
index 67d8089..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/centrality/closeness.py
+++ /dev/null
@@ -1,103 +0,0 @@
-"""
-Closeness centrality measures.
-"""
-#    Copyright (C) 2004-2013 by
-#    Aric Hagberg <hagberg@lanl.gov>
-#    Dan Schult <dschult@colgate.edu>
-#    Pieter Swart <swart@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-import functools
-import networkx as nx
-__author__ = "\n".join(['Aric Hagberg <aric.hagberg@gmail.com>',
-                        'Pieter Swart (swart@lanl.gov)',
-                        'Sasha Gutfraind (ag362@cornell.edu)'])
-__all__ = ['closeness_centrality']
-
-
-def closeness_centrality(G, u=None, distance=None, normalized=True):
-    r"""Compute closeness centrality for nodes.
-
-    Closeness centrality [1]_ of a node `u` is the reciprocal of the
-    sum of the shortest path distances from `u` to all `n-1` other nodes.
-    Since the sum of distances depends on the number of nodes in the
-    graph, closeness is normalized by the sum of minimum possible
-    distances `n-1`.
-
-    .. math::
-
-        C(u) = \frac{n - 1}{\sum_{v=1}^{n} d(v, u)},
-
-    where `d(v, u)` is the shortest-path distance between `v` and `u`,
-    and `n` is the number of nodes in the graph.
-
-    Notice that higher values of closeness indicate higher centrality.
-
-    Parameters
-    ----------
-    G : graph
-      A NetworkX graph
-    u : node, optional
-      Return only the value for node u
-    distance : edge attribute key, optional (default=None)
-      Use the specified edge attribute as the edge distance in shortest 
-      path calculations
-    normalized : bool, optional
-      If True (default) normalize by the number of nodes in the connected
-      part of the graph.
-
-    Returns
-    -------
-    nodes : dictionary
-      Dictionary of nodes with closeness centrality as the value.
-
-    See Also
-    --------
-    betweenness_centrality, load_centrality, eigenvector_centrality,
-    degree_centrality
-
-    Notes
-    -----
-    The closeness centrality is normalized to `(n-1)/(|G|-1)` where
-    `n` is the number of nodes in the connected part of graph
-    containing the node.  If the graph is not completely connected,
-    this algorithm computes the closeness centrality for each
-    connected part separately.
-
-    If the 'distance' keyword is set to an edge attribute key then the
-    shortest-path length will be computed using Dijkstra's algorithm with
-    that edge attribute as the edge weight.
-
-    References
-    ----------
-    .. [1] Freeman, L.C., 1979. Centrality in networks: I.
-       Conceptual clarification.  Social Networks 1, 215--239.
-       http://www.soc.ucsb.edu/faculty/friedkin/Syllabi/Soc146/Freeman78.PDF
-    """
-    if distance is not None:
-        # use Dijkstra's algorithm with specified attribute as edge weight 
-        path_length = functools.partial(nx.single_source_dijkstra_path_length,
-                                        weight=distance)
-    else:
-        path_length = nx.single_source_shortest_path_length
-
-    if u is None:
-        nodes = G.nodes()
-    else:
-        nodes = [u]
-    closeness_centrality = {}
-    for n in nodes:
-        sp = path_length(G,n)
-        totsp = sum(sp.values())
-        if totsp > 0.0 and len(G) > 1:
-            closeness_centrality[n] = (len(sp)-1.0) / totsp
-            # normalize to number of nodes-1 in connected part
-            if normalized:
-                s = (len(sp)-1.0) / ( len(G) - 1 )
-                closeness_centrality[n] *= s
-        else:
-            closeness_centrality[n] = 0.0
-    if u is not None:
-        return closeness_centrality[u]
-    else:
-        return closeness_centrality
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/centrality/communicability_alg.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/centrality/communicability_alg.py
deleted file mode 100644
index 3c8fc6b..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/centrality/communicability_alg.py
+++ /dev/null
@@ -1,495 +0,0 @@
-"""
-Communicability and centrality measures.
-"""
-#    Copyright (C) 2011 by
-#    Aric Hagberg <hagberg@lanl.gov>
-#    Dan Schult <dschult@colgate.edu>
-#    Pieter Swart <swart@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-import networkx as nx
-from networkx.utils import *
-__author__ = "\n".join(['Aric Hagberg (hagberg@lanl.gov)',
-                        'Franck Kalala (franckkalala@yahoo.fr'])
-__all__ = ['communicability_centrality_exp',
-           'communicability_centrality',
-           'communicability_betweenness_centrality',
-           'communicability',
-           'communicability_exp',
-           'estrada_index',
-           ]
-
-@require('scipy')
-@not_implemented_for('directed')
-@not_implemented_for('multigraph')
-def communicability_centrality_exp(G):
-    r"""Return the communicability centrality for each node of G
-
-    Communicability centrality, also called subgraph centrality, of a node `n`
-    is the sum of closed walks of all lengths starting and ending at node `n`.
-
-    Parameters
-    ----------
-    G: graph
-
-    Returns
-    -------
-    nodes:dictionary
-        Dictionary of nodes with communicability centrality as the value.
-
-    Raises
-    ------
-    NetworkXError
-        If the graph is not undirected and simple.
-
-    See Also
-    --------
-    communicability:
-        Communicability between all pairs of nodes in G.
-    communicability_centrality:
-        Communicability centrality for each node of G.
-
-    Notes
-    -----
-    This version of the algorithm exponentiates the adjacency matrix.
-    The communicability centrality of a node `u` in G can be found using
-    the matrix exponential of the adjacency matrix of G  [1]_ [2]_,
-
-    .. math::
-
-        SC(u)=(e^A)_{uu} .
-
-    References
-    ----------
-    .. [1] Ernesto Estrada, Juan A. Rodriguez-Velazquez,
-       "Subgraph centrality in complex networks",
-       Physical Review E 71, 056103 (2005).
-       http://arxiv.org/abs/cond-mat/0504730
-
-    .. [2] Ernesto Estrada, Naomichi Hatano,
-       "Communicability in complex networks",
-       Phys. Rev. E 77, 036111 (2008).
-       http://arxiv.org/abs/0707.0756
-
-    Examples
-    --------
-    >>> G = nx.Graph([(0,1),(1,2),(1,5),(5,4),(2,4),(2,3),(4,3),(3,6)])
-    >>> sc = nx.communicability_centrality_exp(G)
-    """
-    # alternative implementation that calculates the matrix exponential
-    import scipy.linalg
-    nodelist = G.nodes() # ordering of nodes in matrix
-    A = nx.to_numpy_matrix(G,nodelist)
-    # convert to 0-1 matrix
-    A[A!=0.0] = 1
-    expA = scipy.linalg.expm(A)
-    # convert diagonal to dictionary keyed by node
-    sc = dict(zip(nodelist,map(float,expA.diagonal())))
-    return sc
-
-@require('numpy')
-@not_implemented_for('directed')
-@not_implemented_for('multigraph')
-def communicability_centrality(G):
-    r"""Return communicability centrality for each node in G.
-
-    Communicability centrality, also called subgraph centrality, of a node `n`
-    is the sum of closed walks of all lengths starting and ending at node `n`.
-
-    Parameters
-    ----------
-    G: graph
-
-    Returns
-    -------
-    nodes: dictionary
-       Dictionary of nodes with communicability centrality as the value.
-
-    Raises
-    ------
-    NetworkXError
-       If the graph is not undirected and simple.
-
-    See Also
-    --------
-    communicability:
-        Communicability between all pairs of nodes in G.
-    communicability_centrality:
-        Communicability centrality for each node of G.
-
-    Notes
-    -----
-    This version of the algorithm computes eigenvalues and eigenvectors
-    of the adjacency matrix.
-
-    Communicability centrality of a node `u` in G can be found using
-    a spectral decomposition of the adjacency matrix [1]_ [2]_,
-
-    .. math::
-
-       SC(u)=\sum_{j=1}^{N}(v_{j}^{u})^2 e^{\lambda_{j}},
-
-    where `v_j` is an eigenvector of the adjacency matrix `A` of G
-    corresponding corresponding to the eigenvalue `\lambda_j`.
-
-    Examples
-    --------
-    >>> G = nx.Graph([(0,1),(1,2),(1,5),(5,4),(2,4),(2,3),(4,3),(3,6)])
-    >>> sc = nx.communicability_centrality(G)
-
-    References
-    ----------
-    .. [1] Ernesto Estrada, Juan A. Rodriguez-Velazquez,
-       "Subgraph centrality in complex networks",
-       Physical Review E 71, 056103 (2005).
-       http://arxiv.org/abs/cond-mat/0504730
-    .. [2] Ernesto Estrada, Naomichi Hatano,
-       "Communicability in complex networks",
-       Phys. Rev. E 77, 036111 (2008).
-       http://arxiv.org/abs/0707.0756
-    """
-    import numpy
-    import numpy.linalg
-    nodelist = G.nodes() # ordering of nodes in matrix
-    A = nx.to_numpy_matrix(G,nodelist)
-    # convert to 0-1 matrix
-    A[A!=0.0] = 1
-    w,v = numpy.linalg.eigh(A)
-    vsquare = numpy.array(v)**2
-    expw = numpy.exp(w)
-    xg = numpy.dot(vsquare,expw)
-    # convert vector dictionary keyed by node
-    sc = dict(zip(nodelist,map(float,xg)))
-    return sc
-
-@require('scipy')
-@not_implemented_for('directed')
-@not_implemented_for('multigraph')
-def communicability_betweenness_centrality(G, normalized=True):
-    r"""Return communicability betweenness for all pairs of nodes in G.
-
-    Communicability betweenness measure makes use of the number of walks
-    connecting every pair of nodes as the basis of a betweenness centrality
-    measure.
-
-    Parameters
-    ----------
-    G: graph
-
-    Returns
-    -------
-    nodes:dictionary
-        Dictionary of nodes with communicability betweenness as the value.
-
-    Raises
-    ------
-    NetworkXError
-        If the graph is not undirected and simple.
-
-    See Also
-    --------
-    communicability:
-       Communicability between all pairs of nodes in G.
-    communicability_centrality:
-       Communicability centrality for each node of G using matrix exponential.
-    communicability_centrality_exp:
-       Communicability centrality for each node in G using
-       spectral decomposition.
-
-    Notes
-    -----
-    Let `G=(V,E)` be a simple undirected graph with `n` nodes and `m` edges,
-    and `A` denote the adjacency matrix of `G`.
-
-    Let `G(r)=(V,E(r))` be the graph resulting from
-    removing all edges connected to node `r` but not the node itself.
-
-    The adjacency matrix for `G(r)` is `A+E(r)`,  where `E(r)` has nonzeros
-    only in row and column `r`.
-
-    The communicability betweenness of a node `r`  is [1]_
-
-    .. math::
-         \omega_{r} = \frac{1}{C}\sum_{p}\sum_{q}\frac{G_{prq}}{G_{pq}},
-         p\neq q, q\neq r,
-
-    where
-    `G_{prq}=(e^{A}_{pq} - (e^{A+E(r)})_{pq}`  is the number of walks
-    involving node r,
-    `G_{pq}=(e^{A})_{pq}` is the number of closed walks starting
-    at node `p` and ending at node `q`,
-    and `C=(n-1)^{2}-(n-1)` is a normalization factor equal to the
-    number of terms in the sum.
-
-    The resulting `\omega_{r}` takes values between zero and one.
-    The lower bound cannot be attained for a connected
-    graph, and the upper bound is attained in the star graph.
-
-    References
-    ----------
-    .. [1] Ernesto Estrada, Desmond J. Higham, Naomichi Hatano,
-       "Communicability Betweenness in Complex Networks"
-       Physica A 388 (2009) 764-774.
-       http://arxiv.org/abs/0905.4102
-
-    Examples
-    --------
-    >>> G = nx.Graph([(0,1),(1,2),(1,5),(5,4),(2,4),(2,3),(4,3),(3,6)])
-    >>> cbc = nx.communicability_betweenness_centrality(G)
-    """
-    import scipy
-    import scipy.linalg
-    nodelist = G.nodes() # ordering of nodes in matrix
-    n = len(nodelist)
-    A = nx.to_numpy_matrix(G,nodelist)
-    # convert to 0-1 matrix
-    A[A!=0.0] = 1
-    expA = scipy.linalg.expm(A)
-    mapping = dict(zip(nodelist,range(n)))
-    sc = {}
-    for v in G:
-        # remove row and col of node v
-        i = mapping[v]
-        row = A[i,:].copy()
-        col = A[:,i].copy()
-        A[i,:] = 0
-        A[:,i] = 0
-        B = (expA - scipy.linalg.expm(A)) / expA
-        # sum with row/col of node v and diag set to zero
-        B[i,:] = 0
-        B[:,i] = 0
-        B -= scipy.diag(scipy.diag(B))
-        sc[v] = float(B.sum())
-        # put row and col back
-        A[i,:] = row
-        A[:,i] = col
-    # rescaling
-    sc = _rescale(sc,normalized=normalized)
-    return sc
-
-def _rescale(sc,normalized):
-    # helper to rescale betweenness centrality
-    if normalized is True:
-        order=len(sc)
-        if order <=2:
-            scale=None
-        else:
-            scale=1.0/((order-1.0)**2-(order-1.0))
-    if scale is not None:
-        for v in sc:
-            sc[v] *= scale
-    return sc
-
-
-@require('numpy','scipy')
-@not_implemented_for('directed')
-@not_implemented_for('multigraph')
-def communicability(G):
-    r"""Return communicability between all pairs of nodes in G.
-
-    The communicability between pairs of nodes in G is the sum of
-    closed walks of different lengths starting at node u and ending at node v.
-
-    Parameters
-    ----------
-    G: graph
-
-    Returns
-    -------
-    comm: dictionary of dictionaries
-        Dictionary of dictionaries keyed by nodes with communicability
-        as the value.
-
-    Raises
-    ------
-    NetworkXError
-       If the graph is not undirected and simple.
-
-    See Also
-    --------
-    communicability_centrality_exp:
-       Communicability centrality for each node of G using matrix exponential.
-    communicability_centrality:
-       Communicability centrality for each node in G using spectral
-       decomposition.
-    communicability:
-       Communicability between pairs of nodes in G.
-
-    Notes
-    -----
-    This algorithm uses a spectral decomposition of the adjacency matrix.
-    Let G=(V,E) be a simple undirected graph.  Using the connection between
-    the powers  of the adjacency matrix and the number of walks in the graph,
-    the communicability  between nodes `u` and `v` based on the graph spectrum
-    is [1]_
-
-    .. math::
-        C(u,v)=\sum_{j=1}^{n}\phi_{j}(u)\phi_{j}(v)e^{\lambda_{j}},
-
-    where `\phi_{j}(u)` is the `u\rm{th}` element of the `j\rm{th}` orthonormal
-    eigenvector of the adjacency matrix associated with the eigenvalue
-    `\lambda_{j}`.
-
-    References
-    ----------
-    .. [1] Ernesto Estrada, Naomichi Hatano,
-       "Communicability in complex networks",
-       Phys. Rev. E 77, 036111 (2008).
-       http://arxiv.org/abs/0707.0756
-
-    Examples
-    --------
-    >>> G = nx.Graph([(0,1),(1,2),(1,5),(5,4),(2,4),(2,3),(4,3),(3,6)])
-    >>> c = nx.communicability(G)
-    """
-    import numpy
-    import scipy.linalg
-    nodelist = G.nodes() # ordering of nodes in matrix
-    A = nx.to_numpy_matrix(G,nodelist)
-    # convert to 0-1 matrix
-    A[A!=0.0] = 1
-    w,vec = numpy.linalg.eigh(A)
-    expw = numpy.exp(w)
-    mapping = dict(zip(nodelist,range(len(nodelist))))
-    sc={}
-    # computing communicabilities
-    for u in G:
-        sc[u]={}
-        for v in G:
-            s = 0
-            p = mapping[u]
-            q = mapping[v]
-            for j in range(len(nodelist)):
-                s += vec[:,j][p,0]*vec[:,j][q,0]*expw[j]
-            sc[u][v] = float(s)
-    return sc
-
-@require('scipy')
-@not_implemented_for('directed')
-@not_implemented_for('multigraph')
-def communicability_exp(G):
-    r"""Return communicability between all pairs of nodes in G.
-
-    Communicability between pair of node (u,v) of node in G is the sum of
-    closed walks of different lengths starting at node u and ending at node v.
-
-    Parameters
-    ----------
-    G: graph
-
-    Returns
-    -------
-    comm: dictionary of dictionaries
-        Dictionary of dictionaries keyed by nodes with communicability
-        as the value.
-
-    Raises
-    ------
-    NetworkXError
-        If the graph is not undirected and simple.
-
-    See Also
-    --------
-    communicability_centrality_exp:
-       Communicability centrality for each node of G using matrix exponential.
-    communicability_centrality:
-       Communicability centrality for each node in G using spectral
-       decomposition.
-    communicability_exp:
-       Communicability between all pairs of nodes in G  using spectral
-       decomposition.
-
-    Notes
-    -----
-    This algorithm uses matrix exponentiation of the adjacency matrix.
-
-    Let G=(V,E) be a simple undirected graph.  Using the connection between
-    the powers  of the adjacency matrix and the number of walks in the graph,
-    the communicability between nodes u and v is [1]_,
-
-    .. math::
-        C(u,v) = (e^A)_{uv},
-
-    where `A` is the adjacency matrix of G.
-
-    References
-    ----------
-    .. [1] Ernesto Estrada, Naomichi Hatano,
-       "Communicability in complex networks",
-       Phys. Rev. E 77, 036111 (2008).
-       http://arxiv.org/abs/0707.0756
-
-    Examples
-    --------
-    >>> G = nx.Graph([(0,1),(1,2),(1,5),(5,4),(2,4),(2,3),(4,3),(3,6)])
-    >>> c = nx.communicability_exp(G)
-    """
-    import scipy.linalg
-    nodelist = G.nodes() # ordering of nodes in matrix
-    A = nx.to_numpy_matrix(G,nodelist)
-    # convert to 0-1 matrix
-    A[A!=0.0] = 1
-    # communicability matrix
-    expA = scipy.linalg.expm(A)
-    mapping = dict(zip(nodelist,range(len(nodelist))))
-    sc = {}
-    for u in G:
-        sc[u]={}
-        for v in G:
-            sc[u][v] = float(expA[mapping[u],mapping[v]])
-    return sc
-
-@require('numpy')
-def estrada_index(G):
-    r"""Return the Estrada index of a the graph G.
-
-    Parameters
-    ----------
-    G: graph
-
-    Returns
-    -------
-    estrada index: float
-
-    Raises
-    ------
-    NetworkXError
-        If the graph is not undirected and simple.
-
-    See also
-    --------
-    estrada_index_exp
-
-    Notes
-    -----
-    Let `G=(V,E)` be a simple undirected graph with `n` nodes  and let
-    `\lambda_{1}\leq\lambda_{2}\leq\cdots\lambda_{n}`
-    be a non-increasing ordering of the eigenvalues of its adjacency
-    matrix `A`.  The Estrada index is
-
-    .. math::
-        EE(G)=\sum_{j=1}^n e^{\lambda _j}.
-
-    References
-    ----------
-    .. [1] E. Estrada,  Characterization of 3D molecular structure,
-       Chem. Phys. Lett. 319, 713 (2000).
-
-    Examples
-    --------
-    >>> G=nx.Graph([(0,1),(1,2),(1,5),(5,4),(2,4),(2,3),(4,3),(3,6)])
-    >>> ei=nx.estrada_index(G)
-    """
-    return sum(communicability_centrality(G).values())
-
-# fixture for nose tests
-def setup_module(module):
-    from nose import SkipTest
-    try:
-        import numpy
-    except:
-        raise SkipTest("NumPy not available")
-    try:
-        import scipy
-    except:
-        raise SkipTest("SciPy not available")
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/centrality/current_flow_betweenness.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/centrality/current_flow_betweenness.py
deleted file mode 100644
index 23cb5bf..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/centrality/current_flow_betweenness.py
+++ /dev/null
@@ -1,361 +0,0 @@
-"""
-Current-flow betweenness centrality measures.
-"""
-#    Copyright (C) 2010-2012 by
-#    Aric Hagberg <hagberg@lanl.gov>
-#    Dan Schult <dschult@colgate.edu>
-#    Pieter Swart <swart@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-import random
-import networkx as nx
-from networkx.algorithms.centrality.flow_matrix import *
-__author__ = """Aric Hagberg (hagberg@lanl.gov)"""
-
-__all__ = ['current_flow_betweenness_centrality',
-           'approximate_current_flow_betweenness_centrality',
-           'edge_current_flow_betweenness_centrality']
-
-
-def approximate_current_flow_betweenness_centrality(G, normalized=True,
-                                                    weight='weight',
-                                                    dtype=float, solver='full',
-                                                    epsilon=0.5, kmax=10000):
-    r"""Compute the approximate current-flow betweenness centrality for nodes.
-
-    Approximates the current-flow betweenness centrality within absolute
-    error of epsilon with high probability [1]_.
-
-
-    Parameters
-    ----------
-    G : graph
-      A NetworkX graph
-
-    normalized : bool, optional (default=True)
-      If True the betweenness values are normalized by 2/[(n-1)(n-2)] where
-      n is the number of nodes in G.
-
-    weight : string or None, optional (default='weight')
-      Key for edge data used as the edge weight.
-      If None, then use 1 as each edge weight.
-
-    dtype: data type (float)
-      Default data type for internal matrices.
-      Set to np.float32 for lower memory consumption.
-
-    solver: string (default='lu')
-       Type of linear solver to use for computing the flow matrix.
-       Options are "full" (uses most memory), "lu" (recommended), and
-       "cg" (uses least memory).
-
-    epsilon: float
-        Absolute error tolerance.
-
-    kmax: int
-       Maximum number of sample node pairs to use for approximation.
-
-    Returns
-    -------
-    nodes : dictionary
-       Dictionary of nodes with betweenness centrality as the value.
-
-    See Also
-    --------
-    current_flow_betweenness_centrality
-
-    Notes
-    -----
-    The running time is `O((1/\epsilon^2)m{\sqrt k} \log n)`
-    and the space required is `O(m)` for n nodes and m edges.
-
-    If the edges have a 'weight' attribute they will be used as
-    weights in this algorithm.  Unspecified weights are set to 1.
-
-    References
-    ----------
-    .. [1] Centrality Measures Based on Current Flow.
-       Ulrik Brandes and Daniel Fleischer,
-       Proc. 22nd Symp. Theoretical Aspects of Computer Science (STACS '05).
-       LNCS 3404, pp. 533-544. Springer-Verlag, 2005.
-       http://www.inf.uni-konstanz.de/algo/publications/bf-cmbcf-05.pdf
-    """
-    from networkx.utils import reverse_cuthill_mckee_ordering
-    try:
-        import numpy as np
-    except ImportError:
-        raise ImportError('current_flow_betweenness_centrality requires NumPy ',
-                          'http://scipy.org/')
-    try:
-        from scipy import sparse
-        from scipy.sparse import linalg
-    except ImportError:
-        raise ImportError('current_flow_betweenness_centrality requires SciPy ',
-                          'http://scipy.org/')
-    if G.is_directed():
-        raise nx.NetworkXError('current_flow_betweenness_centrality() ',
-                               'not defined for digraphs.')
-    if not nx.is_connected(G):
-        raise nx.NetworkXError("Graph not connected.")
-    solvername={"full" :FullInverseLaplacian,
-                "lu": SuperLUInverseLaplacian,
-                "cg": CGInverseLaplacian}
-    n = G.number_of_nodes()
-    ordering = list(reverse_cuthill_mckee_ordering(G))
-    # make a copy with integer labels according to rcm ordering
-    # this could be done without a copy if we really wanted to
-    H = nx.relabel_nodes(G,dict(zip(ordering,range(n))))
-    L = laplacian_sparse_matrix(H, nodelist=range(n), weight=weight,
-                                dtype=dtype, format='csc')
-    C = solvername[solver](L, dtype=dtype) # initialize solver
-    betweenness = dict.fromkeys(H,0.0)
-    nb = (n-1.0)*(n-2.0) # normalization factor
-    cstar = n*(n-1)/nb
-    l = 1 # parameter in approximation, adjustable
-    k = l*int(np.ceil((cstar/epsilon)**2*np.log(n)))
-    if k > kmax:
-        raise nx.NetworkXError('Number random pairs k>kmax (%d>%d) '%(k,kmax),
-                               'Increase kmax or epsilon')
-    cstar2k = cstar/(2*k)
-    for i in range(k):
-        s,t = random.sample(range(n),2)
-        b = np.zeros(n, dtype=dtype)
-        b[s] = 1
-        b[t] = -1
-        p = C.solve(b)
-        for v in H:
-            if v==s or v==t:
-                continue
-            for nbr in H[v]:
-                w = H[v][nbr].get(weight,1.0)
-                betweenness[v] += w*np.abs(p[v]-p[nbr])*cstar2k
-    if normalized:
-        factor = 1.0
-    else:
-        factor = nb/2.0
-    # remap to original node names and "unnormalize" if required
-    return dict((ordering[k],float(v*factor)) for k,v in betweenness.items())
-
-
-def current_flow_betweenness_centrality(G, normalized=True, weight='weight',
-                                        dtype=float, solver='full'):
-    r"""Compute current-flow betweenness centrality for nodes.
-
-    Current-flow betweenness centrality uses an electrical current
-    model for information spreading in contrast to betweenness
-    centrality which uses shortest paths.
-
-    Current-flow betweenness centrality is also known as
-    random-walk betweenness centrality [2]_.
-
-    Parameters
-    ----------
-    G : graph
-      A NetworkX graph
-
-    normalized : bool, optional (default=True)
-      If True the betweenness values are normalized by 2/[(n-1)(n-2)] where
-      n is the number of nodes in G.
-
-    weight : string or None, optional (default='weight')
-      Key for edge data used as the edge weight.
-      If None, then use 1 as each edge weight.
-
-    dtype: data type (float)
-      Default data type for internal matrices.
-      Set to np.float32 for lower memory consumption.
-
-    solver: string (default='lu')
-       Type of linear solver to use for computing the flow matrix.
-       Options are "full" (uses most memory), "lu" (recommended), and
-       "cg" (uses least memory).
-
-    Returns
-    -------
-    nodes : dictionary
-       Dictionary of nodes with betweenness centrality as the value.
-
-    See Also
-    --------
-    approximate_current_flow_betweenness_centrality
-    betweenness_centrality
-    edge_betweenness_centrality
-    edge_current_flow_betweenness_centrality
-
-    Notes
-    -----
-    Current-flow betweenness can be computed in `O(I(n-1)+mn \log n)`
-    time [1]_, where `I(n-1)` is the time needed to compute the
-    inverse Laplacian.  For a full matrix this is `O(n^3)` but using
-    sparse methods you can achieve `O(nm{\sqrt k})` where `k` is the
-    Laplacian matrix condition number.
-
-    The space required is `O(nw) where `w` is the width of the sparse
-    Laplacian matrix.  Worse case is `w=n` for `O(n^2)`.
-
-    If the edges have a 'weight' attribute they will be used as
-    weights in this algorithm.  Unspecified weights are set to 1.
-
-    References
-    ----------
-    .. [1] Centrality Measures Based on Current Flow.
-       Ulrik Brandes and Daniel Fleischer,
-       Proc. 22nd Symp. Theoretical Aspects of Computer Science (STACS '05).
-       LNCS 3404, pp. 533-544. Springer-Verlag, 2005.
-       http://www.inf.uni-konstanz.de/algo/publications/bf-cmbcf-05.pdf
-
-    .. [2] A measure of betweenness centrality based on random walks,
-       M. E. J. Newman, Social Networks 27, 39-54 (2005).
-    """
-    from networkx.utils import reverse_cuthill_mckee_ordering
-    try:
-        import numpy as np
-    except ImportError:
-        raise ImportError('current_flow_betweenness_centrality requires NumPy ',
-                          'http://scipy.org/')
-    try:
-        import scipy
-    except ImportError:
-        raise ImportError('current_flow_betweenness_centrality requires SciPy ',
-                          'http://scipy.org/')
-    if G.is_directed():
-        raise nx.NetworkXError('current_flow_betweenness_centrality() ',
-                               'not defined for digraphs.')
-    if not nx.is_connected(G):
-        raise nx.NetworkXError("Graph not connected.")
-    n = G.number_of_nodes()
-    ordering = list(reverse_cuthill_mckee_ordering(G))
-    # make a copy with integer labels according to rcm ordering
-    # this could be done without a copy if we really wanted to
-    H = nx.relabel_nodes(G,dict(zip(ordering,range(n))))
-    betweenness = dict.fromkeys(H,0.0) # b[v]=0 for v in H
-    for row,(s,t) in flow_matrix_row(H, weight=weight, dtype=dtype,
-                                     solver=solver):
-        pos = dict(zip(row.argsort()[::-1],range(n)))
-        for i in range(n):
-            betweenness[s] += (i-pos[i])*row[i]
-            betweenness[t] += (n-i-1-pos[i])*row[i]
-    if normalized:
-        nb = (n-1.0)*(n-2.0) # normalization factor
-    else:
-        nb = 2.0
-    for i,v in enumerate(H): # map integers to nodes
-        betweenness[v] = float((betweenness[v]-i)*2.0/nb)
-    return dict((ordering[k],v) for k,v in betweenness.items())
-
-
-def edge_current_flow_betweenness_centrality(G, normalized=True,
-                                             weight='weight',
-                                             dtype=float, solver='full'):
-    """Compute current-flow betweenness centrality for edges.
-
-    Current-flow betweenness centrality uses an electrical current
-    model for information spreading in contrast to betweenness
-    centrality which uses shortest paths.
-
-    Current-flow betweenness centrality is also known as
-    random-walk betweenness centrality [2]_.
-
-    Parameters
-    ----------
-    G : graph
-      A NetworkX graph
-
-    normalized : bool, optional (default=True)
-      If True the betweenness values are normalized by 2/[(n-1)(n-2)] where
-      n is the number of nodes in G.
-
-    weight : string or None, optional (default='weight')
-      Key for edge data used as the edge weight.
-      If None, then use 1 as each edge weight.
-
-    dtype: data type (float)
-      Default data type for internal matrices.
-      Set to np.float32 for lower memory consumption.
-
-    solver: string (default='lu')
-       Type of linear solver to use for computing the flow matrix.
-       Options are "full" (uses most memory), "lu" (recommended), and
-       "cg" (uses least memory).
-
-    Returns
-    -------
-    nodes : dictionary
-       Dictionary of edge tuples with betweenness centrality as the value.
-
-    See Also
-    --------
-    betweenness_centrality
-    edge_betweenness_centrality
-    current_flow_betweenness_centrality
-
-    Notes
-    -----
-    Current-flow betweenness can be computed in `O(I(n-1)+mn \log n)`
-    time [1]_, where `I(n-1)` is the time needed to compute the
-    inverse Laplacian.  For a full matrix this is `O(n^3)` but using
-    sparse methods you can achieve `O(nm{\sqrt k})` where `k` is the
-    Laplacian matrix condition number.
-
-    The space required is `O(nw) where `w` is the width of the sparse
-    Laplacian matrix.  Worse case is `w=n` for `O(n^2)`.
-
-    If the edges have a 'weight' attribute they will be used as
-    weights in this algorithm.  Unspecified weights are set to 1.
-
-    References
-    ----------
-    .. [1] Centrality Measures Based on Current Flow.
-       Ulrik Brandes and Daniel Fleischer,
-       Proc. 22nd Symp. Theoretical Aspects of Computer Science (STACS '05).
-       LNCS 3404, pp. 533-544. Springer-Verlag, 2005.
-       http://www.inf.uni-konstanz.de/algo/publications/bf-cmbcf-05.pdf
-
-    .. [2] A measure of betweenness centrality based on random walks,
-       M. E. J. Newman, Social Networks 27, 39-54 (2005).
-    """
-    from networkx.utils import reverse_cuthill_mckee_ordering
-    try:
-        import numpy as np
-    except ImportError:
-        raise ImportError('current_flow_betweenness_centrality requires NumPy ',
-                          'http://scipy.org/')
-    try:
-        import scipy
-    except ImportError:
-        raise ImportError('current_flow_betweenness_centrality requires SciPy ',
-                          'http://scipy.org/')
-    if G.is_directed():
-        raise nx.NetworkXError('edge_current_flow_betweenness_centrality ',
-                               'not defined for digraphs.')
-    if not nx.is_connected(G):
-        raise nx.NetworkXError("Graph not connected.")
-    n = G.number_of_nodes()
-    ordering = list(reverse_cuthill_mckee_ordering(G))
-    # make a copy with integer labels according to rcm ordering
-    # this could be done without a copy if we really wanted to
-    H = nx.relabel_nodes(G,dict(zip(ordering,range(n))))
-    betweenness=(dict.fromkeys(H.edges(),0.0))
-    if normalized:
-        nb=(n-1.0)*(n-2.0) # normalization factor
-    else:
-        nb=2.0
-    for row,(e) in flow_matrix_row(H, weight=weight, dtype=dtype,
-                                   solver=solver):
-        pos=dict(zip(row.argsort()[::-1],range(1,n+1)))
-        for i in range(n):
-            betweenness[e]+=(i+1-pos[i])*row[i]
-            betweenness[e]+=(n-i-pos[i])*row[i]
-        betweenness[e]/=nb
-    return dict(((ordering[s],ordering[t]),float(v))
-                for (s,t),v in betweenness.items())
-
-
-# fixture for nose tests
-def setup_module(module):
-    from nose import SkipTest
-    try:
-        import numpy
-        import scipy
-    except:
-        raise SkipTest("NumPy not available")
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/centrality/current_flow_betweenness_subset.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/centrality/current_flow_betweenness_subset.py
deleted file mode 100644
index 7902f30..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/centrality/current_flow_betweenness_subset.py
+++ /dev/null
@@ -1,263 +0,0 @@
-"""
-Current-flow betweenness centrality measures for subsets of nodes.
-"""
-#    Copyright (C) 2010-2011 by 
-#    Aric Hagberg <hagberg@lanl.gov>
-#    Dan Schult <dschult@colgate.edu>
-#    Pieter Swart <swart@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-__author__ = """Aric Hagberg (hagberg@lanl.gov)"""
-
-__all__ = ['current_flow_betweenness_centrality_subset',
-           'edge_current_flow_betweenness_centrality_subset']
-
-import itertools
-import networkx as nx
-from networkx.algorithms.centrality.flow_matrix import *
-
-
-def current_flow_betweenness_centrality_subset(G,sources,targets,
-                                               normalized=True,
-                                               weight='weight',
-                                               dtype=float, solver='lu'):
-    r"""Compute current-flow betweenness centrality for subsets of nodes.
-
-    Current-flow betweenness centrality uses an electrical current
-    model for information spreading in contrast to betweenness
-    centrality which uses shortest paths.
-
-    Current-flow betweenness centrality is also known as
-    random-walk betweenness centrality [2]_.
-
-    Parameters
-    ----------
-    G : graph
-      A NetworkX graph 
-
-    sources: list of nodes
-      Nodes to use as sources for current
-
-    targets: list of nodes
-      Nodes to use as sinks for current
-
-    normalized : bool, optional (default=True)
-      If True the betweenness values are normalized by b=b/(n-1)(n-2) where
-      n is the number of nodes in G.
-
-    weight : string or None, optional (default='weight')
-      Key for edge data used as the edge weight.
-      If None, then use 1 as each edge weight.
-
-    dtype: data type (float)
-      Default data type for internal matrices.
-      Set to np.float32 for lower memory consumption.
-
-    solver: string (default='lu')
-       Type of linear solver to use for computing the flow matrix.
-       Options are "full" (uses most memory), "lu" (recommended), and 
-       "cg" (uses least memory).
-
-    Returns
-    -------
-    nodes : dictionary
-       Dictionary of nodes with betweenness centrality as the value.
-        
-    See Also
-    --------
-    approximate_current_flow_betweenness_centrality
-    betweenness_centrality
-    edge_betweenness_centrality
-    edge_current_flow_betweenness_centrality
-
-    Notes
-    -----
-    Current-flow betweenness can be computed in `O(I(n-1)+mn \log n)`
-    time [1]_, where `I(n-1)` is the time needed to compute the 
-    inverse Laplacian.  For a full matrix this is `O(n^3)` but using
-    sparse methods you can achieve `O(nm{\sqrt k})` where `k` is the
-    Laplacian matrix condition number.  
-
-    The space required is `O(nw) where `w` is the width of the sparse
-    Laplacian matrix.  Worse case is `w=n` for `O(n^2)`.
-
-    If the edges have a 'weight' attribute they will be used as 
-    weights in this algorithm.  Unspecified weights are set to 1.
-
-    References
-    ----------
-    .. [1] Centrality Measures Based on Current Flow. 
-       Ulrik Brandes and Daniel Fleischer,
-       Proc. 22nd Symp. Theoretical Aspects of Computer Science (STACS '05). 
-       LNCS 3404, pp. 533-544. Springer-Verlag, 2005. 
-       http://www.inf.uni-konstanz.de/algo/publications/bf-cmbcf-05.pdf
-
-    .. [2] A measure of betweenness centrality based on random walks,
-       M. E. J. Newman, Social Networks 27, 39-54 (2005).
-    """
-    from networkx.utils import reverse_cuthill_mckee_ordering 
-    try:
-        import numpy as np
-    except ImportError:
-        raise ImportError('current_flow_betweenness_centrality requires NumPy ',
-                          'http://scipy.org/')
-    try:
-        import scipy 
-    except ImportError:
-        raise ImportError('current_flow_betweenness_centrality requires SciPy ',
-                          'http://scipy.org/')
-    if G.is_directed():
-        raise nx.NetworkXError('current_flow_betweenness_centrality() ',
-                               'not defined for digraphs.')
-    if not nx.is_connected(G):
-        raise nx.NetworkXError("Graph not connected.")
-    n = G.number_of_nodes()
-    ordering = list(reverse_cuthill_mckee_ordering(G))
-    # make a copy with integer labels according to rcm ordering
-    # this could be done without a copy if we really wanted to
-    mapping=dict(zip(ordering,range(n)))
-    H = nx.relabel_nodes(G,mapping)
-    betweenness = dict.fromkeys(H,0.0) # b[v]=0 for v in H
-    for row,(s,t) in flow_matrix_row(H, weight=weight, dtype=dtype, 
-                                     solver=solver):
-        for ss in sources:
-            i=mapping[ss]
-            for tt in targets:
-                j=mapping[tt]
-                betweenness[s]+=0.5*np.abs(row[i]-row[j]) 
-                betweenness[t]+=0.5*np.abs(row[i]-row[j]) 
-    if normalized:
-        nb=(n-1.0)*(n-2.0) # normalization factor
-    else:
-        nb=2.0
-    for v in H:
-        betweenness[v]=betweenness[v]/nb+1.0/(2-n)
-    return dict((ordering[k],v) for k,v in betweenness.items())
-
-
-def edge_current_flow_betweenness_centrality_subset(G, sources, targets,
-                                                    normalized=True, 
-                                                    weight='weight',
-                                                    dtype=float, solver='lu'):
-    """Compute current-flow betweenness centrality for edges using subsets 
-    of nodes.
-
-    Current-flow betweenness centrality uses an electrical current
-    model for information spreading in contrast to betweenness
-    centrality which uses shortest paths.
-
-    Current-flow betweenness centrality is also known as
-    random-walk betweenness centrality [2]_.
-
-    Parameters
-    ----------
-    G : graph
-      A NetworkX graph 
-
-    sources: list of nodes
-      Nodes to use as sources for current
-
-    targets: list of nodes
-      Nodes to use as sinks for current
-
-    normalized : bool, optional (default=True)
-      If True the betweenness values are normalized by b=b/(n-1)(n-2) where
-      n is the number of nodes in G.
-
-    weight : string or None, optional (default='weight')
-      Key for edge data used as the edge weight.
-      If None, then use 1 as each edge weight.
-
-    dtype: data type (float)
-      Default data type for internal matrices.
-      Set to np.float32 for lower memory consumption.
-
-    solver: string (default='lu')
-       Type of linear solver to use for computing the flow matrix.
-       Options are "full" (uses most memory), "lu" (recommended), and 
-       "cg" (uses least memory).
-
-    Returns
-    -------
-    nodes : dictionary
-       Dictionary of edge tuples with betweenness centrality as the value.
-        
-    See Also
-    --------
-    betweenness_centrality
-    edge_betweenness_centrality
-    current_flow_betweenness_centrality
-
-    Notes
-    -----
-    Current-flow betweenness can be computed in `O(I(n-1)+mn \log n)`
-    time [1]_, where `I(n-1)` is the time needed to compute the 
-    inverse Laplacian.  For a full matrix this is `O(n^3)` but using
-    sparse methods you can achieve `O(nm{\sqrt k})` where `k` is the
-    Laplacian matrix condition number.  
-
-    The space required is `O(nw) where `w` is the width of the sparse
-    Laplacian matrix.  Worse case is `w=n` for `O(n^2)`.
-
-    If the edges have a 'weight' attribute they will be used as 
-    weights in this algorithm.  Unspecified weights are set to 1.
-
-    References
-    ----------
-    .. [1] Centrality Measures Based on Current Flow. 
-       Ulrik Brandes and Daniel Fleischer,
-       Proc. 22nd Symp. Theoretical Aspects of Computer Science (STACS '05). 
-       LNCS 3404, pp. 533-544. Springer-Verlag, 2005. 
-       http://www.inf.uni-konstanz.de/algo/publications/bf-cmbcf-05.pdf
-
-    .. [2] A measure of betweenness centrality based on random walks, 
-       M. E. J. Newman, Social Networks 27, 39-54 (2005).
-    """
-    from networkx.utils import reverse_cuthill_mckee_ordering 
-    try:
-        import numpy as np
-    except ImportError:
-        raise ImportError('current_flow_betweenness_centrality requires NumPy ',
-                          'http://scipy.org/')
-    try:
-        import scipy 
-    except ImportError:
-        raise ImportError('current_flow_betweenness_centrality requires SciPy ',
-                          'http://scipy.org/')
-    if G.is_directed():
-        raise nx.NetworkXError('edge_current_flow_betweenness_centrality ',
-                               'not defined for digraphs.')
-    if not nx.is_connected(G):
-        raise nx.NetworkXError("Graph not connected.")
-    n = G.number_of_nodes()
-    ordering = list(reverse_cuthill_mckee_ordering(G))
-    # make a copy with integer labels according to rcm ordering
-    # this could be done without a copy if we really wanted to
-    mapping=dict(zip(ordering,range(n)))
-    H = nx.relabel_nodes(G,mapping)
-    betweenness=(dict.fromkeys(H.edges(),0.0))
-    if normalized:
-        nb=(n-1.0)*(n-2.0) # normalization factor
-    else:
-        nb=2.0
-    for row,(e) in flow_matrix_row(H, weight=weight, dtype=dtype, 
-                                   solver=solver):
-        for ss in sources:
-            i=mapping[ss]
-            for tt in targets:
-                j=mapping[tt]
-                betweenness[e]+=0.5*np.abs(row[i]-row[j]) 
-        betweenness[e]/=nb
-    return dict(((ordering[s],ordering[t]),v) 
-                for (s,t),v in betweenness.items())
-
-
-# fixture for nose tests
-def setup_module(module):
-    from nose import SkipTest
-    try:
-        import numpy
-        import scipy
-    except:
-        raise SkipTest("NumPy not available")
-
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/centrality/current_flow_closeness.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/centrality/current_flow_closeness.py
deleted file mode 100644
index 1a484b2..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/centrality/current_flow_closeness.py
+++ /dev/null
@@ -1,127 +0,0 @@
-"""
-Current-flow closeness centrality measures.
-
-"""
-#    Copyright (C) 2010 by 
-#    Aric Hagberg <hagberg@lanl.gov>
-#    Dan Schult <dschult@colgate.edu>
-#    Pieter Swart <swart@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-__author__ = """Aric Hagberg <aric.hagberg@gmail.com>"""
-
-__all__ = ['current_flow_closeness_centrality','information_centrality']
-
-import networkx as nx
-from networkx.algorithms.centrality.flow_matrix import *
-    
-
-def current_flow_closeness_centrality(G, normalized=True, weight='weight', 
-                                      dtype=float, solver='lu'):
-    """Compute current-flow closeness centrality for nodes.
-
-    A variant of closeness centrality based on effective
-    resistance between nodes in a network.  This metric
-    is also known as information centrality.
-
-    Parameters
-    ----------
-    G : graph
-      A NetworkX graph 
-
-    normalized : bool, optional
-      If True the values are normalized by 1/(n-1) where n is the 
-      number of nodes in G.
-
-    dtype: data type (float)
-      Default data type for internal matrices.
-      Set to np.float32 for lower memory consumption.
-
-    solver: string (default='lu')
-       Type of linear solver to use for computing the flow matrix.
-       Options are "full" (uses most memory), "lu" (recommended), and 
-       "cg" (uses least memory).
-
-    Returns
-    -------
-    nodes : dictionary
-       Dictionary of nodes with current flow closeness centrality as the value.
-        
-    See Also
-    --------
-    closeness_centrality
-
-    Notes
-    -----
-    The algorithm is from Brandes [1]_.
-
-    See also [2]_ for the original definition of information centrality.
-
-    References
-    ----------
-    .. [1] Ulrik Brandes and Daniel Fleischer,
-       Centrality Measures Based on Current Flow. 
-       Proc. 22nd Symp. Theoretical Aspects of Computer Science (STACS '05). 
-       LNCS 3404, pp. 533-544. Springer-Verlag, 2005. 
-       http://www.inf.uni-konstanz.de/algo/publications/bf-cmbcf-05.pdf
-
-    .. [2] Stephenson, K. and Zelen, M.
-       Rethinking centrality: Methods and examples.
-       Social Networks. Volume 11, Issue 1, March 1989, pp. 1-37
-       http://dx.doi.org/10.1016/0378-8733(89)90016-6
-    """
-    from networkx.utils import reverse_cuthill_mckee_ordering 
-    try:
-        import numpy as np
-    except ImportError:
-        raise ImportError('current_flow_closeness_centrality requires NumPy ',
-                          'http://scipy.org/')
-    try:
-        import scipy 
-    except ImportError:
-        raise ImportError('current_flow_closeness_centrality requires SciPy ',
-                          'http://scipy.org/')
-    if G.is_directed():
-        raise nx.NetworkXError('current_flow_closeness_centrality ',
-                               'not defined for digraphs.')
-    if G.is_directed():
-        raise nx.NetworkXError(\
-            "current_flow_closeness_centrality() not defined for digraphs.")
-    if not nx.is_connected(G):
-        raise nx.NetworkXError("Graph not connected.")
-    solvername={"full" :FullInverseLaplacian,
-                "lu": SuperLUInverseLaplacian,
-                "cg": CGInverseLaplacian}
-    n = G.number_of_nodes()
-    ordering = list(reverse_cuthill_mckee_ordering(G))
-    # make a copy with integer labels according to rcm ordering
-    # this could be done without a copy if we really wanted to
-    H = nx.relabel_nodes(G,dict(zip(ordering,range(n))))
-    betweenness = dict.fromkeys(H,0.0) # b[v]=0 for v in H
-    n = G.number_of_nodes()
-    L = laplacian_sparse_matrix(H, nodelist=range(n), weight=weight, 
-                                dtype=dtype, format='csc')
-    C2 = solvername[solver](L, width=1, dtype=dtype) # initialize solver
-    for v in H:
-        col=C2.get_row(v)
-        for w in H:
-            betweenness[v]+=col[v]-2*col[w]
-            betweenness[w]+=col[v]
-
-    if normalized:
-        nb=len(betweenness)-1.0
-    else:
-        nb=1.0
-    for v in H:
-        betweenness[v]=nb/(betweenness[v])
-    return dict((ordering[k],float(v)) for k,v in betweenness.items())
-
-information_centrality=current_flow_closeness_centrality
-
-# fixture for nose tests
-def setup_module(module):
-    from nose import SkipTest
-    try:
-        import numpy
-    except:
-        raise SkipTest("NumPy not available")
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/centrality/degree_alg.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/centrality/degree_alg.py
deleted file mode 100644
index c65d967..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/centrality/degree_alg.py
+++ /dev/null
@@ -1,131 +0,0 @@
-"""
-Degree centrality measures.
-
-"""
-#    Copyright (C) 2004-2010 by 
-#    Aric Hagberg <hagberg@lanl.gov>
-#    Dan Schult <dschult@colgate.edu>
-#    Pieter Swart <swart@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-__author__ = "\n".join(['Aric Hagberg (hagberg@lanl.gov)',
-                        'Pieter Swart (swart@lanl.gov)',
-                        'Sasha Gutfraind (ag362@cornell.edu)'])
-
-__all__ = ['degree_centrality',
-           'in_degree_centrality',
-           'out_degree_centrality']
-
-import networkx as nx
-
-def degree_centrality(G):
-    """Compute the degree centrality for nodes.
-
-    The degree centrality for a node v is the fraction of nodes it
-    is connected to.
-
-    Parameters
-    ----------
-    G : graph
-      A networkx graph 
-
-    Returns
-    -------
-    nodes : dictionary
-       Dictionary of nodes with degree centrality as the value.
-
-    See Also
-    --------
-    betweenness_centrality, load_centrality, eigenvector_centrality
-
-    Notes
-    -----
-    The degree centrality values are normalized by dividing by the maximum 
-    possible degree in a simple graph n-1 where n is the number of nodes in G.
-
-    For multigraphs or graphs with self loops the maximum degree might
-    be higher than n-1 and values of degree centrality greater than 1
-    are possible.
-    """
-    centrality={}
-    s=1.0/(len(G)-1.0)
-    centrality=dict((n,d*s) for n,d in G.degree_iter())
-    return centrality
-
-def in_degree_centrality(G):
-    """Compute the in-degree centrality for nodes.
-
-    The in-degree centrality for a node v is the fraction of nodes its 
-    incoming edges are connected to.
-
-    Parameters
-    ----------
-    G : graph
-        A NetworkX graph
-
-    Returns
-    -------
-    nodes : dictionary
-        Dictionary of nodes with in-degree centrality as values.
-
-    See Also
-    --------
-    degree_centrality, out_degree_centrality
-
-    Notes
-    -----
-    The degree centrality values are normalized by dividing by the maximum 
-    possible degree in a simple graph n-1 where n is the number of nodes in G.
-
-    For multigraphs or graphs with self loops the maximum degree might
-    be higher than n-1 and values of degree centrality greater than 1
-    are possible.
-    """
-    if not G.is_directed():
-        raise nx.NetworkXError(\
-            "in_degree_centrality() not defined for undirected graphs.")
-    centrality={}
-    s=1.0/(len(G)-1.0)
-    centrality=dict((n,d*s) for n,d in G.in_degree_iter())
-    return centrality
-
-
-def out_degree_centrality(G):
-    """Compute the out-degree centrality for nodes.
-
-    The out-degree centrality for a node v is the fraction of nodes its 
-    outgoing edges are connected to.
-
-    Parameters
-    ----------
-    G : graph
-        A NetworkX graph
-
-    Returns
-    -------
-    nodes : dictionary
-        Dictionary of nodes with out-degree centrality as values.
-
-    See Also
-    --------
-    degree_centrality, in_degree_centrality
-
-    Notes
-    -----
-    The degree centrality values are normalized by dividing by the maximum 
-    possible degree in a simple graph n-1 where n is the number of nodes in G.
-
-    For multigraphs or graphs with self loops the maximum degree might
-    be higher than n-1 and values of degree centrality greater than 1
-    are possible.
-    """
-    if not G.is_directed():
-        raise nx.NetworkXError(\
-            "out_degree_centrality() not defined for undirected graphs.")
-    centrality={}
-    s=1.0/(len(G)-1.0)
-    centrality=dict((n,d*s) for n,d in G.out_degree_iter())
-    return centrality
-
-
-
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/centrality/eigenvector.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/centrality/eigenvector.py
deleted file mode 100644
index 28e0013..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/centrality/eigenvector.py
+++ /dev/null
@@ -1,169 +0,0 @@
-"""
-Eigenvector centrality.
-"""
-#    Copyright (C) 2004-2011 by 
-#    Aric Hagberg <hagberg@lanl.gov>
-#    Dan Schult <dschult@colgate.edu>
-#    Pieter Swart <swart@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-import networkx as nx
-__author__ = "\n".join(['Aric Hagberg (hagberg@lanl.gov)',
-                        'Pieter Swart (swart@lanl.gov)',
-                        'Sasha Gutfraind (ag362@cornell.edu)'])
-__all__ = ['eigenvector_centrality',
-           'eigenvector_centrality_numpy']
-
-def eigenvector_centrality(G,max_iter=100,tol=1.0e-6,nstart=None):
-    """Compute the eigenvector centrality for the graph G.
-
-    Uses the power method to find the eigenvector for the 
-    largest eigenvalue of the adjacency matrix of G.
-
-    Parameters
-    ----------
-    G : graph
-      A networkx graph 
-
-    max_iter : interger, optional
-      Maximum number of iterations in power method.
-
-    tol : float, optional
-      Error tolerance used to check convergence in power method iteration.
-
-    nstart : dictionary, optional
-      Starting value of eigenvector iteration for each node. 
-
-    Returns
-    -------
-    nodes : dictionary
-       Dictionary of nodes with eigenvector centrality as the value.
-
-    Examples
-    --------
-    >>> G=nx.path_graph(4)
-    >>> centrality=nx.eigenvector_centrality(G)
-    >>> print(['%s %0.2f'%(node,centrality[node]) for node in centrality])
-    ['0 0.37', '1 0.60', '2 0.60', '3 0.37']
-
-    Notes
-    ------
-    The eigenvector calculation is done by the power iteration method
-    and has no guarantee of convergence.  The iteration will stop
-    after max_iter iterations or an error tolerance of
-    number_of_nodes(G)*tol has been reached.
-
-    For directed graphs this is "right" eigevector centrality.  For
-    "left" eigenvector centrality, first reverse the graph with
-    G.reverse().
-
-    See Also
-    --------
-    eigenvector_centrality_numpy
-    pagerank
-    hits
-    """
-    from math import sqrt
-    if type(G) == nx.MultiGraph or type(G) == nx.MultiDiGraph:
-        raise nx.NetworkXException("Not defined for multigraphs.")
-
-    if len(G)==0:
-        raise nx.NetworkXException("Empty graph.")
-
-    if nstart is None:
-        # choose starting vector with entries of 1/len(G) 
-        x=dict([(n,1.0/len(G)) for n in G])
-    else:
-        x=nstart
-    # normalize starting vector
-    s=1.0/sum(x.values())
-    for k in x: x[k]*=s
-    nnodes=G.number_of_nodes()
-    # make up to max_iter iterations        
-    for i in range(max_iter):
-        xlast=x
-        x=dict.fromkeys(xlast, 0)
-        # do the multiplication y=Ax
-        for n in x:
-            for nbr in G[n]:
-                x[n]+=xlast[nbr]*G[n][nbr].get('weight',1)
-        # normalize vector
-        try:
-            s=1.0/sqrt(sum(v**2 for v in x.values()))
-        # this should never be zero?
-        except ZeroDivisionError:
-            s=1.0
-        for n in x: x[n]*=s
-        # check convergence            
-        err=sum([abs(x[n]-xlast[n]) for n in x])
-        if err < nnodes*tol:
-            return x
-
-    raise nx.NetworkXError("""eigenvector_centrality(): 
-power iteration failed to converge in %d iterations."%(i+1))""")
-
-
-def eigenvector_centrality_numpy(G):
-    """Compute the eigenvector centrality for the graph G.
-
-    Parameters
-    ----------
-    G : graph
-      A networkx graph 
-
-    Returns
-    -------
-    nodes : dictionary
-       Dictionary of nodes with eigenvector centrality as the value.
-
-    Examples
-    --------
-    >>> G=nx.path_graph(4)
-    >>> centrality=nx.eigenvector_centrality_numpy(G)
-    >>> print(['%s %0.2f'%(node,centrality[node]) for node in centrality])
-    ['0 0.37', '1 0.60', '2 0.60', '3 0.37']
-
-    Notes
-    ------
-    This algorithm uses the NumPy eigenvalue solver.
-
-    For directed graphs this is "right" eigevector centrality.  For
-    "left" eigenvector centrality, first reverse the graph with
-    G.reverse().
-
-    See Also
-    --------
-    eigenvector_centrality
-    pagerank
-    hits
-    """
-    try:
-        import numpy as np
-    except ImportError:
-        raise ImportError('Requires NumPy: http://scipy.org/')
-
-    if type(G) == nx.MultiGraph or type(G) == nx.MultiDiGraph:
-        raise nx.NetworkXException('Not defined for multigraphs.')
-
-    if len(G)==0:
-        raise nx.NetworkXException('Empty graph.')
-
-    A=nx.adj_matrix(G,nodelist=G.nodes())
-    eigenvalues,eigenvectors=np.linalg.eig(A)
-    # eigenvalue indices in reverse sorted order
-    ind=eigenvalues.argsort()[::-1]
-    # eigenvector of largest eigenvalue at ind[0], normalized
-    largest=np.array(eigenvectors[:,ind[0]]).flatten().real
-    norm=np.sign(largest.sum())*np.linalg.norm(largest)
-    centrality=dict(zip(G,map(float,largest/norm)))
-    return centrality
-
-
-# fixture for nose tests
-def setup_module(module):
-    from nose import SkipTest
-    try:
-        import numpy
-        import numpy.linalg
-    except:
-        raise SkipTest("numpy not available")
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/centrality/flow_matrix.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/centrality/flow_matrix.py
deleted file mode 100644
index d886182..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/centrality/flow_matrix.py
+++ /dev/null
@@ -1,139 +0,0 @@
-# Helpers for current-flow betweenness and current-flow closness
-# Lazy computations for inverse Laplacian and flow-matrix rows.
-import networkx as nx
-
-def flow_matrix_row(G, weight='weight', dtype=float, solver='lu'):
-    # Generate a row of the current-flow matrix
-    import numpy as np
-    from scipy import sparse
-    from scipy.sparse import linalg
-    solvername={"full" :FullInverseLaplacian,
-                "lu": SuperLUInverseLaplacian,
-                "cg": CGInverseLaplacian}
-    n = G.number_of_nodes()
-    L = laplacian_sparse_matrix(G, nodelist=range(n), weight=weight, 
-                                dtype=dtype, format='csc')
-    C = solvername[solver](L, dtype=dtype) # initialize solver
-    w = C.w # w is the Laplacian matrix width
-    # row-by-row flow matrix
-    for u,v,d in G.edges_iter(data=True):
-        B = np.zeros(w, dtype=dtype)
-        c = d.get(weight,1.0)
-        B[u%w] = c
-        B[v%w] = -c
-        # get only the rows needed in the inverse laplacian 
-        # and multiply to get the flow matrix row
-        row = np.dot(B, C.get_rows(u,v))  
-        yield row,(u,v) 
-
-
-# Class to compute the inverse laplacian only for specified rows
-# Allows computation of the current-flow matrix without storing entire
-# inverse laplacian matrix
-class InverseLaplacian(object):
-    def __init__(self, L, width=None, dtype=None):
-        global np
-        import numpy as np
-        (n,n) = L.shape
-        self.dtype = dtype
-        self.n = n
-        if width is None:
-            self.w = self.width(L)
-        else:
-            self.w = width
-        self.C = np.zeros((self.w,n), dtype=dtype)
-        self.L1 = L[1:,1:]
-        self.init_solver(L)
-
-    def init_solver(self,L):
-        pass
-
-    def solve(self,r):
-        raise("Implement solver")
-
-    def solve_inverse(self,r):
-        raise("Implement solver")
-
-
-    def get_rows(self, r1, r2):
-        for r in range(r1, r2+1):
-            self.C[r%self.w, 1:] = self.solve_inverse(r)
-        return self.C
-
-    def get_row(self, r):
-        self.C[r%self.w, 1:] = self.solve_inverse(r)
-        return self.C[r%self.w]
-
-
-    def width(self,L):
-        m=0
-        for i,row in enumerate(L):
-            w=0
-            x,y = np.nonzero(row)
-            if len(y) > 0:
-                v = y-i
-                w=v.max()-v.min()+1
-                m = max(w,m)
-        return m
-
-class FullInverseLaplacian(InverseLaplacian):
-    def init_solver(self,L):
-        self.IL = np.zeros(L.shape, dtype=self.dtype)
-        self.IL[1:,1:] = np.linalg.inv(self.L1.todense())
-
-    def solve(self,rhs):
-        s = np.zeros(rhs.shape, dtype=self.dtype)
-        s = np.dot(self.IL,rhs)
-        return s
-
-    def solve_inverse(self,r):
-        return self.IL[r,1:]
-
-
-class SuperLUInverseLaplacian(InverseLaplacian):
-    def init_solver(self,L):
-        from scipy.sparse import linalg
-        self.lusolve = linalg.factorized(self.L1.tocsc())
-
-    def solve_inverse(self,r):
-        rhs = np.zeros(self.n, dtype=self.dtype)
-        rhs[r]=1
-        return self.lusolve(rhs[1:])
-
-    def solve(self,rhs):
-        s = np.zeros(rhs.shape, dtype=self.dtype)
-        s[1:]=self.lusolve(rhs[1:])
-        return s
-
-
-
-class CGInverseLaplacian(InverseLaplacian):
-    def init_solver(self,L):
-        global linalg
-        from scipy.sparse import linalg
-        ilu= linalg.spilu(self.L1.tocsc())
-        n=self.n-1
-        self.M = linalg.LinearOperator(shape=(n,n), matvec=ilu.solve)
-
-    def solve(self,rhs):
-        s = np.zeros(rhs.shape, dtype=self.dtype)
-        s[1:]=linalg.cg(self.L1, rhs[1:], M=self.M)[0]
-        return s
-
-    def solve_inverse(self,r):
-        rhs = np.zeros(self.n, self.dtype)
-        rhs[r] = 1
-        return linalg.cg(self.L1, rhs[1:], M=self.M)[0]
-
-
-# graph laplacian, sparse version, will move to linalg/laplacianmatrix.py
-def laplacian_sparse_matrix(G, nodelist=None, weight='weight', dtype=None,
-                            format='csr'):
-    import numpy as np
-    import scipy.sparse
-    A = nx.to_scipy_sparse_matrix(G, nodelist=nodelist, weight=weight, 
-                                  dtype=dtype, format=format)
-    (n,n) = A.shape
-    data = np.asarray(A.sum(axis=1).T)
-    D = scipy.sparse.spdiags(data,0,n,n, format=format)
-    return  D - A
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/centrality/katz.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/centrality/katz.py
deleted file mode 100644
index 4babe25..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/centrality/katz.py
+++ /dev/null
@@ -1,296 +0,0 @@
-"""
-Katz centrality.
-"""
-#    Copyright (C) 2004-2013 by
-#    Aric Hagberg <hagberg@lanl.gov>
-#    Dan Schult <dschult@colgate.edu>
-#    Pieter Swart <swart@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-import networkx as nx
-from networkx.utils import *
-__author__ = "\n".join(['Aric Hagberg (hagberg@lanl.gov)',
-                        'Pieter Swart (swart@lanl.gov)',
-                        'Sasha Gutfraind (ag362@cornell.edu)',
-                        'Vincent Gauthier (vgauthier@luxbulb.org)'])
-
-__all__ = ['katz_centrality',
-           'katz_centrality_numpy']
-
-@not_implemented_for('multigraph')
-def katz_centrality(G, alpha=0.1, beta=1.0,
-                    max_iter=1000, tol=1.0e-6, nstart=None, normalized=True):
-    r"""Compute the Katz centrality for the nodes of the graph G.
-
-
-    Katz centrality is related to eigenvalue centrality and PageRank.
-    The Katz centrality for node `i` is
-
-    .. math::
-
-        x_i = \alpha \sum_{j} A_{ij} x_j + \beta,
-
-    where `A` is the adjacency matrix of the graph G with eigenvalues `\lambda`.
-
-    The parameter `\beta` controls the initial centrality and
-
-    .. math::
-
-        \alpha < \frac{1}{\lambda_{max}}.
-
-
-    Katz centrality computes the relative influence of a node within a
-    network by measuring the number of the immediate neighbors (first
-    degree nodes) and also all other nodes in the network that connect
-    to the node under consideration through these immediate neighbors.
-
-    Extra weight can be provided to immediate neighbors through the
-    parameter :math:`\beta`.  Connections made with distant neighbors
-    are, however, penalized by an attenuation factor `\alpha` which
-    should be strictly less than the inverse largest eigenvalue of the
-    adjacency matrix in order for the Katz centrality to be computed
-    correctly. More information is provided in [1]_ .
-
-
-    Parameters
-    ----------
-    G : graph
-      A NetworkX graph
-
-    alpha : float
-      Attenuation factor
-
-    beta : scalar or dictionary, optional (default=1.0)
-      Weight attributed to the immediate neighborhood. If not a scalar the
-      dictionary must have an value for every node.
-
-    max_iter : integer, optional (default=1000)
-      Maximum number of iterations in power method.
-
-    tol : float, optional (default=1.0e-6)
-      Error tolerance used to check convergence in power method iteration.
-
-    nstart : dictionary, optional
-      Starting value of Katz iteration for each node.
-
-    normalized : bool, optional (default=True)
-      If True normalize the resulting values.
-
-    Returns
-    -------
-    nodes : dictionary
-       Dictionary of nodes with Katz centrality as the value.
-
-    Examples
-    --------
-    >>> import math
-    >>> G = nx.path_graph(4)
-    >>> phi = (1+math.sqrt(5))/2.0 # largest eigenvalue of adj matrix
-    >>> centrality = nx.katz_centrality(G,1/phi-0.01)
-    >>> for n,c in sorted(centrality.items()):
-    ...    print("%d %0.2f"%(n,c))
-    0 0.37
-    1 0.60
-    2 0.60
-    3 0.37
-
-    Notes
-    -----
-    This algorithm it uses the power method to find the eigenvector
-    corresponding to the largest eigenvalue of the adjacency matrix of G.
-    The constant alpha should be strictly less than the inverse of largest
-    eigenvalue of the adjacency matrix for the algorithm to converge.
-    The iteration will stop after max_iter iterations or an error tolerance of
-    number_of_nodes(G)*tol has been reached.
-
-    When `\alpha = 1/\lambda_{max}` and `\beta=1` Katz centrality is the same as
-    eigenvector centrality.
-
-    References
-    ----------
-    .. [1] M. Newman, Networks: An Introduction. Oxford University Press,
-       USA, 2010, p. 720.
-
-    See Also
-    --------
-    katz_centrality_numpy
-    eigenvector_centrality
-    eigenvector_centrality_numpy
-    pagerank
-    hits
-    """
-    from math import sqrt
-
-    if len(G)==0:
-        return {}
-
-    nnodes=G.number_of_nodes()
-
-    if nstart is None:
-        # choose starting vector with entries of 0
-        x=dict([(n,0) for n in G])
-    else:
-        x=nstart
-
-    try:
-        b = dict.fromkeys(G,float(beta))
-    except (TypeError,ValueError):
-        b = beta
-        if set(beta) != set(G):
-            raise nx.NetworkXError('beta dictionary '
-                                   'must have a value for every node')
-
-    # make up to max_iter iterations
-    for i in range(max_iter):
-        xlast=x
-        x=dict.fromkeys(xlast, 0)
-        # do the multiplication y = Alpha * Ax - Beta
-        for n in x:
-            for nbr in G[n]:
-                x[n] += xlast[nbr] * G[n][nbr].get('weight',1)
-            x[n] = alpha*x[n] + b[n]
-
-        # check convergence
-        err=sum([abs(x[n]-xlast[n]) for n in x])
-        if err < nnodes*tol:
-            if normalized:
-                # normalize vector
-                try:
-                    s=1.0/sqrt(sum(v**2 for v in x.values()))
-                # this should never be zero?
-                except ZeroDivisionError:
-                    s=1.0
-            else:
-                s = 1
-            for n in x:
-                x[n]*=s
-            return x
-
-    raise nx.NetworkXError('Power iteration failed to converge in ',
-                           '%d iterations."%(i+1))')
-
-@not_implemented_for('multigraph')
-def katz_centrality_numpy(G, alpha=0.1, beta=1.0, normalized=True):
-    r"""Compute the Katz centrality for the graph G.
-
-
-    Katz centrality is related to eigenvalue centrality and PageRank.
-    The Katz centrality for node `i` is
-
-    .. math::
-
-        x_i = \alpha \sum_{j} A_{ij} x_j + \beta,
-
-    where `A` is the adjacency matrix of the graph G with eigenvalues `\lambda`.
-
-    The parameter `\beta` controls the initial centrality and
-
-    .. math::
-
-        \alpha < \frac{1}{\lambda_{max}}.
-
-
-    Katz centrality computes the relative influence of a node within a
-    network by measuring the number of the immediate neighbors (first
-    degree nodes) and also all other nodes in the network that connect
-    to the node under consideration through these immediate neighbors.
-
-    Extra weight can be provided to immediate neighbors through the
-    parameter :math:`\beta`.  Connections made with distant neighbors
-    are, however, penalized by an attenuation factor `\alpha` which
-    should be strictly less than the inverse largest eigenvalue of the
-    adjacency matrix in order for the Katz centrality to be computed
-    correctly. More information is provided in [1]_ .
-
-    Parameters
-    ----------
-    G : graph
-      A NetworkX graph
-
-    alpha : float
-      Attenuation factor
-
-    beta : scalar or dictionary, optional (default=1.0)
-      Weight attributed to the immediate neighborhood. If not a scalar the
-      dictionary must have an value for every node.
-
-    normalized : bool
-      If True normalize the resulting values.
-
-    Returns
-    -------
-    nodes : dictionary
-       Dictionary of nodes with Katz centrality as the value.
-
-    Examples
-    --------
-    >>> import math
-    >>> G = nx.path_graph(4)
-    >>> phi = (1+math.sqrt(5))/2.0 # largest eigenvalue of adj matrix
-    >>> centrality = nx.katz_centrality_numpy(G,1/phi)
-    >>> for n,c in sorted(centrality.items()):
-    ...    print("%d %0.2f"%(n,c))
-    0 0.37
-    1 0.60
-    2 0.60
-    3 0.37
-
-    Notes
-    ------
-    This algorithm uses a direct linear solver to solve the above equation.
-    The constant alpha should be strictly less than the inverse of largest
-    eigenvalue of the adjacency matrix for there to be a solution.  When
-    `\alpha = 1/\lambda_{max}` and `\beta=1` Katz centrality is the same as
-    eigenvector centrality.
-
-    References
-    ----------
-    .. [1] M. Newman, Networks: An Introduction. Oxford University Press,
-       USA, 2010, p. 720.
-
-    See Also
-    --------
-    katz_centrality
-    eigenvector_centrality_numpy
-    eigenvector_centrality
-    pagerank
-    hits
-    """
-    try:
-        import numpy as np
-    except ImportError:
-        raise ImportError('Requires NumPy: http://scipy.org/')
-    if len(G)==0:
-        return {}
-    try:
-        nodelist = beta.keys()
-        if set(nodelist) != set(G):
-            raise nx.NetworkXError('beta dictionary '
-                                   'must have a value for every node')
-        b = np.array(list(beta.values()),dtype=float)
-    except AttributeError:
-        nodelist = G.nodes()
-        try:
-            b = np.ones((len(nodelist),1))*float(beta)
-        except (TypeError,ValueError):
-            raise nx.NetworkXError('beta must be a number')
-
-    A=nx.adj_matrix(G, nodelist=nodelist)
-    n = np.array(A).shape[0]
-    centrality = np.linalg.solve( np.eye(n,n) - (alpha * A) , b)
-    if normalized:
-        norm = np.sign(sum(centrality)) * np.linalg.norm(centrality)
-    else:
-        norm = 1.0
-    centrality=dict(zip(nodelist, map(float,centrality/norm)))
-    return centrality
-
-
-# fixture for nose tests
-def setup_module(module):
-    from nose import SkipTest
-    try:
-        import numpy
-        import numpy.linalg
-    except:
-        raise SkipTest("numpy not available")
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/centrality/load.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/centrality/load.py
deleted file mode 100644
index 2d279e8..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/centrality/load.py
+++ /dev/null
@@ -1,190 +0,0 @@
-"""
-Load centrality. 
-
-"""
-#    Copyright (C) 2004-2010 by 
-#    Aric Hagberg <hagberg@lanl.gov>
-#    Dan Schult <dschult@colgate.edu>
-#    Pieter Swart <swart@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-__author__ = "\n".join(['Aric Hagberg (hagberg@lanl.gov)',
-                        'Pieter Swart (swart@lanl.gov)',
-                        'Sasha Gutfraind (ag362@cornell.edu)'])
-
-__all__ = ['load_centrality',
-           'edge_load']
-
-import networkx as nx
-
-def newman_betweenness_centrality(G,v=None,cutoff=None,
-                           normalized=True,
-                           weight=None):
-    """Compute load centrality for nodes.
-
-    The load centrality of a node is the fraction of all shortest 
-    paths that pass through that node.
-
-    Parameters
-    ----------
-    G : graph
-      A networkx graph 
-
-    normalized : bool, optional
-      If True the betweenness values are normalized by b=b/(n-1)(n-2) where
-      n is the number of nodes in G.
-       
-    weight : None or string, optional  
-      If None, edge weights are ignored.
-      Otherwise holds the name of the edge attribute used as weight.
-
-    cutoff : bool, optional
-      If specified, only consider paths of length <= cutoff.
-
-    Returns
-    -------
-    nodes : dictionary
-       Dictionary of nodes with centrality as the value.
-
-        
-    See Also
-    --------
-    betweenness_centrality() 
-
-    Notes
-    -----
-    Load centrality is slightly different than betweenness.
-    For this load algorithm see the reference
-    Scientific collaboration networks: II.
-    Shortest paths, weighted networks, and centrality,
-    M. E. J. Newman, Phys. Rev. E 64, 016132 (2001).
-
-    """
-    if v is not None:   # only one node
-        betweenness=0.0
-        for source in G:
-            ubetween = _node_betweenness(G, source, cutoff, False, weight)
-            betweenness += ubetween[v] if v in ubetween else 0
-        if normalized:
-            order = G.order()
-            if order <= 2:
-                return betweenness # no normalization b=0 for all nodes
-            betweenness *= 1.0 / ((order-1) * (order-2))
-        return betweenness
-    else:
-        betweenness = {}.fromkeys(G,0.0)
-        for source in betweenness:
-            ubetween = _node_betweenness(G, source, cutoff, False, weight)
-            for vk in ubetween:
-                betweenness[vk] += ubetween[vk]
-        if normalized:
-            order = G.order()
-            if order <= 2:
-                return betweenness # no normalization b=0 for all nodes
-            scale = 1.0 / ((order-1) * (order-2))
-            for v in betweenness:
-                betweenness[v] *= scale
-        return betweenness  # all nodes
-
-def _node_betweenness(G,source,cutoff=False,normalized=True,weight=None):
-    """Node betweenness helper:
-    see betweenness_centrality for what you probably want.
-
-    This actually computes "load" and not betweenness.
-    See https://networkx.lanl.gov/ticket/103
-
-    This calculates the load of each node for paths from a single source.
-    (The fraction of number of shortests paths from source that go
-    through each node.)
-
-    To get the load for a node you need to do all-pairs shortest paths.
-
-    If weight is not None then use Dijkstra for finding shortest paths.
-    In this case a cutoff is not implemented and so is ignored.
-
-    """
-
-    # get the predecessor and path length data
-    if weight is None:
-        (pred,length)=nx.predecessor(G,source,cutoff=cutoff,return_seen=True)
-    else:
-        (pred,length)=nx.dijkstra_predecessor_and_distance(G,source,weight=weight)
-
-    # order the nodes by path length
-    onodes = [ (l,vert) for (vert,l) in length.items() ]
-    onodes.sort()
-    onodes[:] = [vert for (l,vert) in onodes if l>0]
-    
-    # intialize betweenness
-    between={}.fromkeys(length,1.0)
-
-    while onodes:
-        v=onodes.pop()
-        if v in pred:
-            num_paths=len(pred[v])   # Discount betweenness if more than 
-            for x in pred[v]:        # one shortest path.
-                if x==source:   # stop if hit source because all remaining v  
-                    break       #  also have pred[v]==[source]
-                between[x]+=between[v]/float(num_paths)
-    #  remove source
-    for v in between:
-        between[v]-=1
-    # rescale to be between 0 and 1                
-    if normalized:
-        l=len(between)
-        if l > 2:
-            scale=1.0/float((l-1)*(l-2)) # 1/the number of possible paths
-            for v in between:
-                between[v] *= scale
-    return between
-
-
-load_centrality=newman_betweenness_centrality
-
-
-def edge_load(G,nodes=None,cutoff=False):
-    """Compute edge load.
-
-    WARNING:
-
-    This module is for demonstration and testing purposes.
-
-    """
-    betweenness={}
-    if not nodes:         # find betweenness for every node  in graph
-        nodes=G.nodes()   # that probably is what you want...
-    for source in nodes:
-        ubetween=_edge_betweenness(G,source,nodes,cutoff=cutoff)
-        for v in ubetween.keys():
-            b=betweenness.setdefault(v,0)  # get or set default
-            betweenness[v]=ubetween[v]+b    # cumulative total
-    return betweenness
-
-def _edge_betweenness(G,source,nodes,cutoff=False):
-    """
-    Edge betweenness helper.
-    """
-    between={}
-    # get the predecessor data
-    #(pred,length)=_fast_predecessor(G,source,cutoff=cutoff) 
-    (pred,length)=nx.predecessor(G,source,cutoff=cutoff,return_seen=True)
-    # order the nodes by path length
-    onodes = [ nn for dd,nn in sorted( (dist,n) for n,dist in length.items() )]
-    # intialize betweenness, doesn't account for any edge weights
-    for u,v in G.edges(nodes):
-        between[(u,v)]=1.0
-        between[(v,u)]=1.0
-
-    while onodes:           # work through all paths
-        v=onodes.pop()
-        if v in pred:
-            num_paths=len(pred[v])   # Discount betweenness if more than 
-            for w in pred[v]:        # one shortest path.
-                if w in pred:
-                    num_paths=len(pred[w])  # Discount betweenness, mult path  
-                    for x in pred[w]:
-                        between[(w,x)]+=between[(v,w)]/num_paths
-                        between[(x,w)]+=between[(w,v)]/num_paths
-    return between
-
-
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/centrality/tests/test_betweenness_centrality.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/centrality/tests/test_betweenness_centrality.py
deleted file mode 100644
index b0169a9..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/centrality/tests/test_betweenness_centrality.py
+++ /dev/null
@@ -1,462 +0,0 @@
-#!/usr/bin/env python
-from nose.tools import *
-import networkx as nx
-
-def weighted_G():
-    G=nx.Graph();
-    G.add_edge(0,1,weight=3)
-    G.add_edge(0,2,weight=2)
-    G.add_edge(0,3,weight=6)
-    G.add_edge(0,4,weight=4)
-    G.add_edge(1,3,weight=5)
-    G.add_edge(1,5,weight=5)
-    G.add_edge(2,4,weight=1)
-    G.add_edge(3,4,weight=2)
-    G.add_edge(3,5,weight=1)
-    G.add_edge(4,5,weight=4)
-
-    return G
-
-
-class TestBetweennessCentrality(object):
-        
-    def test_K5(self):
-        """Betweenness centrality: K5"""
-        G=nx.complete_graph(5)
-        b=nx.betweenness_centrality(G,
-                                             weight=None,
-                                             normalized=False)
-        b_answer={0: 0.0, 1: 0.0, 2: 0.0, 3: 0.0, 4: 0.0}
-        for n in sorted(G):
-            assert_almost_equal(b[n],b_answer[n])
-
-    def test_K5_endpoints(self):
-        """Betweenness centrality: K5 endpoints"""
-        G=nx.complete_graph(5)
-        b=nx.betweenness_centrality(G,
-                                          weight=None,
-                                          normalized=False,
-                                          endpoints=True)
-        b_answer={0: 4.0, 1: 4.0, 2: 4.0, 3: 4.0, 4: 4.0}
-        for n in sorted(G):
-            assert_almost_equal(b[n],b_answer[n])
-
-
-    def test_P3_normalized(self):
-        """Betweenness centrality: P3 normalized"""
-        G=nx.path_graph(3)
-        b=nx.betweenness_centrality(G,
-                                          weight=None,
-                                          normalized=True)
-        b_answer={0: 0.0, 1: 1.0, 2: 0.0}
-        for n in sorted(G):
-            assert_almost_equal(b[n],b_answer[n])
-
-
-    def test_P3(self):
-        """Betweenness centrality: P3"""
-        G=nx.path_graph(3)
-        b_answer={0: 0.0, 1: 1.0, 2: 0.0}
-        b=nx.betweenness_centrality(G,
-                                          weight=None,
-                                          normalized=False)
-        for n in sorted(G):
-            assert_almost_equal(b[n],b_answer[n])
-
-    def test_P3_endpoints(self):
-        """Betweenness centrality: P3 endpoints"""
-        G=nx.path_graph(3)
-        b_answer={0: 2.0, 1: 3.0, 2: 2.0}
-        b=nx.betweenness_centrality(G,
-                                          weight=None,
-                                          normalized=False,
-                                          endpoints=True)
-        for n in sorted(G):
-            assert_almost_equal(b[n],b_answer[n])
-
-
-    def test_krackhardt_kite_graph(self):
-        """Betweenness centrality: Krackhardt kite graph"""
-        G=nx.krackhardt_kite_graph()
-        b_answer={0: 1.667,1: 1.667,2: 0.000,3: 7.333,4: 0.000,
-                  5: 16.667,6: 16.667,7: 28.000,8: 16.000,9: 0.000}
-        for b in b_answer:
-            b_answer[b]/=2.0
-        b=nx.betweenness_centrality(G,
-                                          weight=None,
-                                          normalized=False)
-
-        for n in sorted(G):
-            assert_almost_equal(b[n],b_answer[n],places=3)
-
-
-    def test_krackhardt_kite_graph_normalized(self):
-        """Betweenness centrality: Krackhardt kite graph normalized"""
-        G=nx.krackhardt_kite_graph()
-        b_answer={0:0.023,1:0.023,2:0.000,3:0.102,4:0.000,
-                  5:0.231,6:0.231,7:0.389,8:0.222,9:0.000}
-        b=nx.betweenness_centrality(G,
-                                          weight=None,
-                                          normalized=True)
-
-        for n in sorted(G):
-            assert_almost_equal(b[n],b_answer[n],places=3)
-
-
-    def test_florentine_families_graph(self):
-        """Betweenness centrality: Florentine families graph"""
-        G=nx.florentine_families_graph()
-        b_answer=\
-             {'Acciaiuoli':    0.000,
-              'Albizzi':       0.212,
-              'Barbadori':     0.093,
-              'Bischeri':      0.104,
-              'Castellani':    0.055,
-              'Ginori':        0.000,
-              'Guadagni':      0.255,
-              'Lamberteschi':  0.000,
-              'Medici':        0.522,
-              'Pazzi':         0.000,
-              'Peruzzi':       0.022,
-              'Ridolfi':       0.114,
-              'Salviati':      0.143,
-              'Strozzi':       0.103,
-              'Tornabuoni':    0.092}
-
-        b=nx.betweenness_centrality(G,
-                                             weight=None,
-                                             normalized=True)
-        for n in sorted(G):
-            assert_almost_equal(b[n],b_answer[n],places=3)
-
-
-    def test_ladder_graph(self):
-        """Betweenness centrality: Ladder graph"""
-        G = nx.Graph() # ladder_graph(3)
-        G.add_edges_from([(0,1), (0,2), (1,3), (2,3), 
-                          (2,4), (4,5), (3,5)])
-        b_answer={0:1.667,1: 1.667,2: 6.667,
-                  3: 6.667,4: 1.667,5: 1.667}
-        for b in b_answer:
-            b_answer[b]/=2.0
-        b=nx.betweenness_centrality(G,
-                                          weight=None,
-                                          normalized=False)
-        for n in sorted(G):
-            assert_almost_equal(b[n],b_answer[n],places=3)
-
-    def test_disconnected_path(self):
-        """Betweenness centrality: disconnected path"""
-        G=nx.Graph()
-        G.add_path([0,1,2])
-        G.add_path([3,4,5,6])
-        b_answer={0:0,1:1,2:0,3:0,4:2,5:2,6:0}
-        b=nx.betweenness_centrality(G,
-                                          weight=None,
-                                          normalized=False)
-        for n in sorted(G):
-            assert_almost_equal(b[n],b_answer[n])
-
-    def test_disconnected_path_endpoints(self):
-        """Betweenness centrality: disconnected path endpoints"""
-        G=nx.Graph()
-        G.add_path([0,1,2])
-        G.add_path([3,4,5,6])
-        b_answer={0:2,1:3,2:2,3:3,4:5,5:5,6:3}
-        b=nx.betweenness_centrality(G,
-                                          weight=None,
-                                          normalized=False,
-                                          endpoints=True)
-        for n in sorted(G):
-            assert_almost_equal(b[n],b_answer[n])
-
-
-    def test_directed_path(self):
-        """Betweenness centrality: directed path"""
-        G=nx.DiGraph()
-        G.add_path([0,1,2])
-        b=nx.betweenness_centrality(G,
-                                          weight=None,
-                                          normalized=False)
-        b_answer={0: 0.0, 1: 1.0, 2: 0.0}
-        for n in sorted(G):
-            assert_almost_equal(b[n],b_answer[n])
-
-    def test_directed_path_normalized(self):
-        """Betweenness centrality: directed path normalized"""
-        G=nx.DiGraph()
-        G.add_path([0,1,2])
-        b=nx.betweenness_centrality(G,
-                                          weight=None,
-                                          normalized=True)
-        b_answer={0: 0.0, 1: 0.5, 2: 0.0}
-        for n in sorted(G):
-            assert_almost_equal(b[n],b_answer[n])
-
-
-
-class TestWeightedBetweennessCentrality(object):
-        
-    def test_K5(self):
-        """Weighted betweenness centrality: K5"""
-        G=nx.complete_graph(5)
-        b=nx.betweenness_centrality(G,
-                                          weight='weight',
-                                          normalized=False)
-        b_answer={0: 0.0, 1: 0.0, 2: 0.0, 3: 0.0, 4: 0.0}
-        for n in sorted(G):
-            assert_almost_equal(b[n],b_answer[n])
-
-    def test_P3_normalized(self):
-        """Weighted betweenness centrality: P3 normalized"""
-        G=nx.path_graph(3)
-        b=nx.betweenness_centrality(G,
-                                          weight='weight',
-                                          normalized=True)
-        b_answer={0: 0.0, 1: 1.0, 2: 0.0}
-        for n in sorted(G):
-            assert_almost_equal(b[n],b_answer[n])
-
-
-    def test_P3(self):
-        """Weighted betweenness centrality: P3"""
-        G=nx.path_graph(3)
-        b_answer={0: 0.0, 1: 1.0, 2: 0.0}
-        b=nx.betweenness_centrality(G,
-                                          weight='weight',
-                                          normalized=False)
-        for n in sorted(G):
-            assert_almost_equal(b[n],b_answer[n])
-
-    def test_krackhardt_kite_graph(self):
-        """Weighted betweenness centrality: Krackhardt kite graph"""
-        G=nx.krackhardt_kite_graph()
-        b_answer={0: 1.667,1: 1.667,2: 0.000,3: 7.333,4: 0.000,
-                  5: 16.667,6: 16.667,7: 28.000,8: 16.000,9: 0.000}
-        for b in b_answer:
-            b_answer[b]/=2.0
-
-        b=nx.betweenness_centrality(G,
-                                          weight='weight',
-                                          normalized=False)
-
-        for n in sorted(G):
-            assert_almost_equal(b[n],b_answer[n],places=3)
-
-
-    def test_krackhardt_kite_graph_normalized(self):
-        """Weighted betweenness centrality: 
-        Krackhardt kite graph normalized
-        """
-        G=nx.krackhardt_kite_graph()
-        b_answer={0:0.023,1:0.023,2:0.000,3:0.102,4:0.000,
-                  5:0.231,6:0.231,7:0.389,8:0.222,9:0.000}
-        b=nx.betweenness_centrality(G,
-                                          weight='weight',
-                                          normalized=True)
-
-        for n in sorted(G):
-            assert_almost_equal(b[n],b_answer[n],places=3)
-
-
-    def test_florentine_families_graph(self):
-        """Weighted betweenness centrality: 
-        Florentine families graph"""
-        G=nx.florentine_families_graph()
-        b_answer=\
-             {'Acciaiuoli':    0.000,
-              'Albizzi':       0.212,
-              'Barbadori':     0.093,
-              'Bischeri':      0.104,
-              'Castellani':    0.055,
-              'Ginori':        0.000,
-              'Guadagni':      0.255,
-              'Lamberteschi':  0.000,
-              'Medici':        0.522,
-              'Pazzi':         0.000,
-              'Peruzzi':       0.022,
-              'Ridolfi':       0.114,
-              'Salviati':      0.143,
-              'Strozzi':       0.103,
-              'Tornabuoni':    0.092}
-
-        b=nx.betweenness_centrality(G,
-                                          weight='weight',
-                                          normalized=True)
-        for n in sorted(G):
-            assert_almost_equal(b[n],b_answer[n],places=3)
-
-
-    def test_ladder_graph(self):
-        """Weighted betweenness centrality: Ladder graph"""
-        G = nx.Graph() # ladder_graph(3)
-        G.add_edges_from([(0,1), (0,2), (1,3), (2,3), 
-                          (2,4), (4,5), (3,5)])
-        b_answer={0:1.667,1: 1.667,2: 6.667,
-                  3: 6.667,4: 1.667,5: 1.667}
-        for b in b_answer:
-            b_answer[b]/=2.0
-        b=nx.betweenness_centrality(G,
-                                          weight='weight',
-                                          normalized=False)
-        for n in sorted(G):
-            assert_almost_equal(b[n],b_answer[n],places=3)
-
-    def test_G(self):
-        """Weighted betweenness centrality: G"""                   
-        G = weighted_G()               
-        b_answer={0: 2.0, 1: 0.0, 2: 4.0, 3: 3.0, 4: 4.0, 5: 0.0}
-        b=nx.betweenness_centrality(G,
-                                          weight='weight',
-                                          normalized=False)
-        for n in sorted(G):
-            assert_almost_equal(b[n],b_answer[n])
-
-    def test_G2(self):
-        """Weighted betweenness centrality: G2"""                   
-        G=nx.DiGraph()
-        G.add_weighted_edges_from([('s','u',10) ,('s','x',5) ,
-                                   ('u','v',1) ,('u','x',2) ,
-                                   ('v','y',1) ,('x','u',3) ,
-                                   ('x','v',5) ,('x','y',2) ,
-                                   ('y','s',7) ,('y','v',6)])
-
-        b_answer={'y':5.0,'x':5.0,'s':4.0,'u':2.0,'v':2.0}
-
-        b=nx.betweenness_centrality(G,
-                                             weight='weight',
-                                             normalized=False)
-        for n in sorted(G):
-            assert_almost_equal(b[n],b_answer[n])
-
-
-class TestEdgeBetweennessCentrality(object):
-        
-    def test_K5(self):
-        """Edge betweenness centrality: K5"""
-        G=nx.complete_graph(5)
-        b=nx.edge_betweenness_centrality(G, weight=None, normalized=False)
-        b_answer=dict.fromkeys(G.edges(),1)
-        for n in sorted(G.edges()):
-            assert_almost_equal(b[n],b_answer[n])
-
-    def test_normalized_K5(self):
-        """Edge betweenness centrality: K5"""
-        G=nx.complete_graph(5)
-        b=nx.edge_betweenness_centrality(G, weight=None, normalized=True)
-        b_answer=dict.fromkeys(G.edges(),1/10.0)
-        for n in sorted(G.edges()):
-            assert_almost_equal(b[n],b_answer[n])
-
-
-    def test_C4(self):
-        """Edge betweenness centrality: C4"""
-        G=nx.cycle_graph(4)
-        b=nx.edge_betweenness_centrality(G, weight=None, normalized=True)
-        b_answer={(0, 1):2,(0, 3):2, (1, 2):2, (2, 3): 2}
-        for n in sorted(G.edges()):
-            assert_almost_equal(b[n],b_answer[n]/6.0)
-
-    def test_P4(self):
-        """Edge betweenness centrality: P4"""
-        G=nx.path_graph(4)
-        b=nx.edge_betweenness_centrality(G, weight=None, normalized=False)
-        b_answer={(0, 1):3,(1, 2):4, (2, 3):3}
-        for n in sorted(G.edges()):
-            assert_almost_equal(b[n],b_answer[n])
-
-    def test_normalized_P4(self):
-        """Edge betweenness centrality: P4"""
-        G=nx.path_graph(4)
-        b=nx.edge_betweenness_centrality(G, weight=None, normalized=True)
-        b_answer={(0, 1):3,(1, 2):4, (2, 3):3}
-        for n in sorted(G.edges()):
-            assert_almost_equal(b[n],b_answer[n]/6.0)
-
-
-    def test_balanced_tree(self):
-        """Edge betweenness centrality: balanced tree"""
-        G=nx.balanced_tree(r=2,h=2)
-        b=nx.edge_betweenness_centrality(G, weight=None, normalized=False)
-        b_answer={(0, 1):12,(0, 2):12,
-                  (1, 3):6,(1, 4):6,(2, 5):6,(2,6):6}
-        for n in sorted(G.edges()):
-            assert_almost_equal(b[n],b_answer[n])
-
-class TestWeightedEdgeBetweennessCentrality(object):
-        
-    def test_K5(self):
-        """Edge betweenness centrality: K5"""
-        G=nx.complete_graph(5)
-        b=nx.edge_betweenness_centrality(G, weight='weight', normalized=False)
-        b_answer=dict.fromkeys(G.edges(),1)
-        for n in sorted(G.edges()):
-            assert_almost_equal(b[n],b_answer[n])
-
-    def test_C4(self):
-        """Edge betweenness centrality: C4"""
-        G=nx.cycle_graph(4)
-        b=nx.edge_betweenness_centrality(G, weight='weight', normalized=False)
-        b_answer={(0, 1):2,(0, 3):2, (1, 2):2, (2, 3): 2}
-        for n in sorted(G.edges()):
-            assert_almost_equal(b[n],b_answer[n])
-
-    def test_P4(self):
-        """Edge betweenness centrality: P4"""
-        G=nx.path_graph(4)
-        b=nx.edge_betweenness_centrality(G, weight='weight', normalized=False)
-        b_answer={(0, 1):3,(1, 2):4, (2, 3):3}
-        for n in sorted(G.edges()):
-            assert_almost_equal(b[n],b_answer[n])
-
-
-    def test_balanced_tree(self):
-        """Edge betweenness centrality: balanced tree"""
-        G=nx.balanced_tree(r=2,h=2)
-        b=nx.edge_betweenness_centrality(G, weight='weight', normalized=False)
-        b_answer={(0, 1):12,(0, 2):12,
-                  (1, 3):6,(1, 4):6,(2, 5):6,(2,6):6}
-        for n in sorted(G.edges()):
-            assert_almost_equal(b[n],b_answer[n])
-
-    def test_weighted_graph(self):
-        eList = [(0, 1, 5), (0, 2, 4), (0, 3, 3), 
-                 (0, 4, 2), (1, 2, 4), (1, 3, 1), 
-                 (1, 4, 3), (2, 4, 5), (3, 4, 4)]
-        G = nx.Graph()
-        G.add_weighted_edges_from(eList)
-        b = nx.edge_betweenness_centrality(G, weight='weight', normalized=False)
-        b_answer={(0, 1):0.0,
-                  (0, 2):1.0,
-                  (0, 3):2.0,
-                  (0, 4):1.0,
-                  (1, 2):2.0,
-                  (1, 3):3.5,
-                  (1, 4):1.5,
-                  (2, 4):1.0,
-                  (3, 4):0.5}
-
-        for n in sorted(G.edges()):
-            assert_almost_equal(b[n],b_answer[n])
-
-    def test_normalized_weighted_graph(self):
-        eList = [(0, 1, 5), (0, 2, 4), (0, 3, 3), 
-                 (0, 4, 2), (1, 2, 4), (1, 3, 1), 
-                 (1, 4, 3), (2, 4, 5), (3, 4, 4)]
-        G = nx.Graph()
-        G.add_weighted_edges_from(eList)
-        b = nx.edge_betweenness_centrality(G, weight='weight', normalized=True)
-        b_answer={(0, 1):0.0,
-                  (0, 2):1.0,
-                  (0, 3):2.0,
-                  (0, 4):1.0,
-                  (1, 2):2.0,
-                  (1, 3):3.5,
-                  (1, 4):1.5,
-                  (2, 4):1.0,
-                  (3, 4):0.5}
-
-        norm = len(G)*(len(G)-1)/2.0
-        for n in sorted(G.edges()):
-            assert_almost_equal(b[n],b_answer[n]/norm)
-
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/centrality/tests/test_betweenness_centrality_subset.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/centrality/tests/test_betweenness_centrality_subset.py
deleted file mode 100644
index 762b873..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/centrality/tests/test_betweenness_centrality_subset.py
+++ /dev/null
@@ -1,258 +0,0 @@
-#!/usr/bin/env python
-from nose.tools import *
-import networkx
-from networkx import betweenness_centrality_subset,\
-     edge_betweenness_centrality_subset
-
-class TestSubsetBetweennessCentrality:
-        
-    def test_K5(self):
-        """Betweenness centrality: K5"""
-        G=networkx.complete_graph(5)
-        b=betweenness_centrality_subset(G,
-                                        sources=[0],
-                                        targets=[1,3],
-                                        weight=None)
-        b_answer={0: 0.0, 1: 0.0, 2: 0.0, 3: 0.0, 4: 0.0}
-        for n in sorted(G):
-            assert_almost_equal(b[n],b_answer[n])
-
-    def test_P5_directed(self):
-        """Betweenness centrality: P5 directed"""
-        G=networkx.DiGraph()
-        G.add_path(list(range(5)))
-        b_answer={0:0,1:1,2:1,3:0,4:0,5:0}
-        b=betweenness_centrality_subset(G,
-                                        sources=[0],
-                                        targets=[3],
-                                        weight=None)
-        for n in sorted(G):
-            assert_almost_equal(b[n],b_answer[n])
-
-    def test_P5(self):
-        """Betweenness centrality: P5"""
-        G=networkx.Graph()
-        G.add_path(list(range(5)))
-        b_answer={0:0,1:0.5,2:0.5,3:0,4:0,5:0}
-        b=betweenness_centrality_subset(G,
-                                        sources=[0],
-                                        targets=[3],
-                                        weight=None)
-        for n in sorted(G):
-            assert_almost_equal(b[n],b_answer[n])
-
-    def test_P5_multiple_target(self):
-        """Betweenness centrality: P5 multiple target"""
-        G=networkx.Graph()
-        G.add_path(list(range(5)))
-        b_answer={0:0,1:1,2:1,3:0.5,4:0,5:0}
-        b=betweenness_centrality_subset(G,
-                                        sources=[0],
-                                        targets=[3,4],
-                                        weight=None)
-        for n in sorted(G):
-            assert_almost_equal(b[n],b_answer[n])
-
-    def test_box(self):
-        """Betweenness centrality: box"""
-        G=networkx.Graph()
-        G.add_edge(0,1)
-        G.add_edge(0,2)
-        G.add_edge(1,3)
-        G.add_edge(2,3)
-        b_answer={0:0,1:0.25,2:0.25,3:0}
-        b=betweenness_centrality_subset(G,
-                                        sources=[0],
-                                        targets=[3],
-                                        weight=None)
-        for n in sorted(G):
-            assert_almost_equal(b[n],b_answer[n])
-
-    def test_box_and_path(self):
-        """Betweenness centrality: box and path"""
-        G=networkx.Graph()
-        G.add_edge(0,1)
-        G.add_edge(0,2)
-        G.add_edge(1,3)
-        G.add_edge(2,3)
-        G.add_edge(3,4)
-        G.add_edge(4,5)
-        b_answer={0:0,1:0.5,2:0.5,3:0.5,4:0,5:0}
-        b=betweenness_centrality_subset(G,
-                                        sources=[0],
-                                        targets=[3,4],
-                                        weight=None)
-        for n in sorted(G):
-            assert_almost_equal(b[n],b_answer[n])
-
-
-    def test_box_and_path2(self):
-        """Betweenness centrality: box and path multiple target"""
-        G=networkx.Graph()
-        G.add_edge(0,1)
-        G.add_edge(1,2)
-        G.add_edge(2,3)
-        G.add_edge(1,20)
-        G.add_edge(20,3)
-        G.add_edge(3,4)
-        b_answer={0:0,1:1.0,2:0.5,20:0.5,3:0.5,4:0}
-        b=betweenness_centrality_subset(G,
-                                        sources=[0],
-                                        targets=[3,4])
-        for n in sorted(G):
-            assert_almost_equal(b[n],b_answer[n])
-
-
-class TestBetweennessCentralitySources:
-    def test_K5(self):
-        """Betweenness centrality: K5"""
-        G=networkx.complete_graph(5)
-        b=networkx.betweenness_centrality_source(G,
-                                                 weight=None,
-                                                 normalized=False)
-        b_answer={0: 0.0, 1: 0.0, 2: 0.0, 3: 0.0, 4: 0.0}
-        for n in sorted(G):
-            assert_almost_equal(b[n],b_answer[n])
-
-    def test_P3(self):
-        """Betweenness centrality: P3"""
-        G=networkx.path_graph(3)
-        b_answer={0: 0.0, 1: 1.0, 2: 0.0}
-        b=networkx.betweenness_centrality_source(G,
-                                                 weight=None,
-                                                 normalized=True)
-        for n in sorted(G):
-            assert_almost_equal(b[n],b_answer[n])
-
-    
-
-
-class TestEdgeSubsetBetweennessCentrality:
-    
-    def test_K5(self):
-        """Edge betweenness centrality: K5"""
-        G=networkx.complete_graph(5)
-        b=edge_betweenness_centrality_subset(G,
-                                             sources=[0],
-                                             targets=[1,3],
-                                             weight=None)
-        b_answer=dict.fromkeys(G.edges(),0)
-        b_answer[(0,3)]=0.5
-        b_answer[(0,1)]=0.5
-        for n in sorted(G.edges()):
-            print(n,b[n])
-            assert_almost_equal(b[n],b_answer[n])
-
-    def test_P5_directed(self):
-        """Edge betweenness centrality: P5 directed"""
-        G=networkx.DiGraph()
-        G.add_path(list(range(5)))
-        b_answer=dict.fromkeys(G.edges(),0)
-        b_answer[(0,1)]=1
-        b_answer[(1,2)]=1
-        b_answer[(2,3)]=1
-        b=edge_betweenness_centrality_subset(G,
-                                             sources=[0],
-                                             targets=[3],
-                                             weight=None)
-        for n in sorted(G.edges()):
-            assert_almost_equal(b[n],b_answer[n])
-
-    def test_P5(self):
-        """Edge betweenness centrality: P5"""
-        G=networkx.Graph()
-        G.add_path(list(range(5)))
-        b_answer=dict.fromkeys(G.edges(),0)
-        b_answer[(0,1)]=0.5
-        b_answer[(1,2)]=0.5
-        b_answer[(2,3)]=0.5
-        b=edge_betweenness_centrality_subset(G,
-                                             sources=[0],
-                                             targets=[3],
-                                             weight=None)
-        for n in sorted(G.edges()):
-            assert_almost_equal(b[n],b_answer[n])
-
-    def test_P5_multiple_target(self):
-        """Edge betweenness centrality: P5 multiple target"""
-        G=networkx.Graph()
-        G.add_path(list(range(5)))
-        b_answer=dict.fromkeys(G.edges(),0)
-        b_answer[(0,1)]=1
-        b_answer[(1,2)]=1
-        b_answer[(2,3)]=1
-        b_answer[(3,4)]=0.5
-        b=edge_betweenness_centrality_subset(G,
-                                             sources=[0],
-                                             targets=[3,4],
-                                             weight=None)
-        for n in sorted(G.edges()):
-            assert_almost_equal(b[n],b_answer[n])
-
-    def test_box(self):
-        """Edge etweenness centrality: box"""
-        G=networkx.Graph()
-        G.add_edge(0,1)
-        G.add_edge(0,2)
-        G.add_edge(1,3)
-        G.add_edge(2,3)
-        b_answer=dict.fromkeys(G.edges(),0)
-
-        b_answer[(0,1)]=0.25
-        b_answer[(0,2)]=0.25
-        b_answer[(1,3)]=0.25
-        b_answer[(2,3)]=0.25
-        b=edge_betweenness_centrality_subset(G,
-                                             sources=[0],
-                                             targets=[3],
-                                             weight=None)
-        for n in sorted(G.edges()):
-            assert_almost_equal(b[n],b_answer[n])
-
-    def test_box_and_path(self):
-        """Edge etweenness centrality: box and path"""
-        G=networkx.Graph()
-        G.add_edge(0,1)
-        G.add_edge(0,2)
-        G.add_edge(1,3)
-        G.add_edge(2,3)
-        G.add_edge(3,4)
-        G.add_edge(4,5)
-        b_answer=dict.fromkeys(G.edges(),0)
-        b_answer[(0,1)]=1.0/2
-        b_answer[(0,2)]=1.0/2
-        b_answer[(1,3)]=1.0/2
-        b_answer[(2,3)]=1.0/2
-        b_answer[(3,4)]=1.0/2
-        b=edge_betweenness_centrality_subset(G,
-                                             sources=[0],
-                                             targets=[3,4],
-                                             weight=None)
-        for n in sorted(G.edges()):
-            assert_almost_equal(b[n],b_answer[n])
-
-
-    def test_box_and_path2(self):
-        """Edge betweenness centrality: box and path multiple target"""
-        G=networkx.Graph()
-        G.add_edge(0,1)
-        G.add_edge(1,2)
-        G.add_edge(2,3)
-        G.add_edge(1,20)
-        G.add_edge(20,3)
-        G.add_edge(3,4)
-        b_answer=dict.fromkeys(G.edges(),0)
-        b_answer[(0,1)]=1.0
-        b_answer[(1,20)]=1.0/2
-        b_answer[(3,20)]=1.0/2
-        b_answer[(1,2)]=1.0/2
-        b_answer[(2,3)]=1.0/2
-        b_answer[(3,4)]=1.0/2
-        b=edge_betweenness_centrality_subset(G,
-                                             sources=[0],
-                                             targets=[3,4],
-                                             weight=None)
-        for n in sorted(G.edges()):
-            assert_almost_equal(b[n],b_answer[n])
-
-
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/centrality/tests/test_closeness_centrality.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/centrality/tests/test_closeness_centrality.py
deleted file mode 100644
index 71b0009..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/centrality/tests/test_closeness_centrality.py
+++ /dev/null
@@ -1,93 +0,0 @@
-"""
-Tests for degree centrality.
-"""
-from nose.tools import *
-import networkx as nx
-
-class TestClosenessCentrality:
-    def setUp(self):
-
-        self.K = nx.krackhardt_kite_graph()
-        self.P3 = nx.path_graph(3)
-        self.P4 = nx.path_graph(4)
-        self.K5 = nx.complete_graph(5)
-
-        self.C4=nx.cycle_graph(4)
-        self.T=nx.balanced_tree(r=2, h=2)
-        self.Gb = nx.Graph()
-        self.Gb.add_edges_from([(0,1), (0,2), (1,3), (2,3), 
-                                (2,4), (4,5), (3,5)])
-
-
-        F = nx.florentine_families_graph()
-        self.F = F
-
-
-    def test_k5_closeness(self):
-        c=nx.closeness_centrality(self.K5)
-        d={0: 1.000,
-           1: 1.000,
-           2: 1.000,
-           3: 1.000,
-           4: 1.000}
-        for n in sorted(self.K5):
-            assert_almost_equal(c[n],d[n],places=3)
-
-    def test_p3_closeness(self):
-        c=nx.closeness_centrality(self.P3)
-        d={0: 0.667,
-           1: 1.000,
-           2: 0.667}
-        for n in sorted(self.P3):
-            assert_almost_equal(c[n],d[n],places=3)
-
-    def test_krackhardt_closeness(self):
-        c=nx.closeness_centrality(self.K)
-        d={0: 0.529,
-           1: 0.529,
-           2: 0.500,
-           3: 0.600,
-           4: 0.500,
-           5: 0.643,
-           6: 0.643,
-           7: 0.600,
-           8: 0.429,
-           9: 0.310}
-        for n in sorted(self.K):
-            assert_almost_equal(c[n],d[n],places=3)
-
-    def test_florentine_families_closeness(self):
-        c=nx.closeness_centrality(self.F)
-        d={'Acciaiuoli':    0.368,
-           'Albizzi':       0.483,
-           'Barbadori':     0.4375,
-           'Bischeri':      0.400,
-           'Castellani':    0.389,
-           'Ginori':        0.333,
-           'Guadagni':      0.467,
-           'Lamberteschi':  0.326,
-           'Medici':        0.560,
-           'Pazzi':         0.286,
-           'Peruzzi':       0.368,
-           'Ridolfi':       0.500,
-           'Salviati':      0.389,
-           'Strozzi':       0.4375,
-           'Tornabuoni':    0.483}
-        for n in sorted(self.F):
-            assert_almost_equal(c[n],d[n],places=3)
-
-    def test_weighted_closeness(self):
-        XG=nx.Graph()
-        XG.add_weighted_edges_from([('s','u',10), ('s','x',5), ('u','v',1),
-                                    ('u','x',2), ('v','y',1), ('x','u',3),
-                                    ('x','v',5), ('x','y',2), ('y','s',7),
-                                    ('y','v',6)])
-        c=nx.closeness_centrality(XG,distance='weight')
-        d={'y': 0.200,
-           'x': 0.286,
-           's': 0.138,
-           'u': 0.235,
-           'v': 0.200}
-        for n in sorted(XG):
-            assert_almost_equal(c[n],d[n],places=3)
-
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/centrality/tests/test_communicability.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/centrality/tests/test_communicability.py
deleted file mode 100644
index d03be65..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/centrality/tests/test_communicability.py
+++ /dev/null
@@ -1,134 +0,0 @@
-from collections import defaultdict
-from nose.tools import *
-from nose import SkipTest
-import networkx as nx
-from networkx.algorithms.centrality.communicability_alg import *
-
-class TestCommunicability:
-    @classmethod
-    def setupClass(cls):
-        global numpy
-        global scipy
-        try:
-            import numpy
-        except ImportError:
-             raise SkipTest('NumPy not available.')
-        try:
-            import scipy
-        except ImportError:
-             raise SkipTest('SciPy not available.')
-
-
-    def test_communicability_centrality(self):
-        answer={0: 1.5430806348152433, 1: 1.5430806348152433}
-        result=communicability_centrality(nx.path_graph(2))
-        for k,v in result.items():
-            assert_almost_equal(answer[k],result[k],places=7)
-
-        answer1={'1': 1.6445956054135658,
-                 'Albert': 2.4368257358712189,
-                 'Aric': 2.4368257358712193,
-                 'Dan':3.1306328496328168,
-                 'Franck': 2.3876142275231915}
-        G1=nx.Graph([('Franck','Aric'),('Aric','Dan'),('Dan','Albert'),
-                     ('Albert','Franck'),('Dan','1'),('Franck','Albert')])
-        result1=communicability_centrality(G1)
-        for k,v in result1.items():
-            assert_almost_equal(answer1[k],result1[k],places=7)
-        result1=communicability_centrality_exp(G1)
-        for k,v in result1.items():
-            assert_almost_equal(answer1[k],result1[k],places=7)
-
-    def test_communicability_betweenness_centrality(self):
-        answer={0: 0.07017447951484615, 1: 0.71565598701107991,
-                2: 0.71565598701107991, 3: 0.07017447951484615}
-        result=communicability_betweenness_centrality(nx.path_graph(4))
-        for k,v in result.items():
-            assert_almost_equal(answer[k],result[k],places=7)
-
-        answer1={'1': 0.060039074193949521,
-                 'Albert': 0.315470761661372,
-                 'Aric': 0.31547076166137211,
-                 'Dan': 0.68297778678316201,
-                 'Franck': 0.21977926617449497}
-        G1=nx.Graph([('Franck','Aric'),
-                     ('Aric','Dan'),('Dan','Albert'),('Albert','Franck'),
-                     ('Dan','1'),('Franck','Albert')])
-        result1=communicability_betweenness_centrality(G1)
-        for k,v in result1.items():
-            assert_almost_equal(answer1[k],result1[k],places=7)
-
-    def test_communicability_betweenness_centrality_small(self):
-        G = nx.Graph([(1,2)])
-        result=communicability_betweenness_centrality(G)
-        assert_equal(result, {1:0,2:0})
-
-
-    def test_communicability(self):
-        answer={0 :{0: 1.5430806348152435,
-                    1: 1.1752011936438012
-                    },
-                1 :{0: 1.1752011936438012,
-                    1: 1.5430806348152435
-                    }
-                }
-#        answer={(0, 0): 1.5430806348152435,
-#                (0, 1): 1.1752011936438012,
-#                (1, 0): 1.1752011936438012,
-#                (1, 1): 1.5430806348152435}
-
-        result=communicability(nx.path_graph(2))
-        for k1,val in result.items():
-            for k2 in val:
-                assert_almost_equal(answer[k1][k2],result[k1][k2],places=7)
-
-    def test_communicability2(self):
-
-        answer_orig ={('1', '1'): 1.6445956054135658,
-                 ('1', 'Albert'): 0.7430186221096251,
-                 ('1', 'Aric'): 0.7430186221096251,
-                 ('1', 'Dan'): 1.6208126320442937,
-                 ('1', 'Franck'): 0.42639707170035257,
-                 ('Albert', '1'): 0.7430186221096251,
-                 ('Albert', 'Albert'): 2.4368257358712189,
-                 ('Albert', 'Aric'): 1.4368257358712191,
-                 ('Albert', 'Dan'): 2.0472097037446453,
-                 ('Albert', 'Franck'): 1.8340111678944691,
-                 ('Aric', '1'): 0.7430186221096251,
-                 ('Aric', 'Albert'): 1.4368257358712191,
-                 ('Aric', 'Aric'): 2.4368257358712193,
-                 ('Aric', 'Dan'): 2.0472097037446457,
-                 ('Aric', 'Franck'): 1.8340111678944691,
-                 ('Dan', '1'): 1.6208126320442937,
-                 ('Dan', 'Albert'): 2.0472097037446453,
-                 ('Dan', 'Aric'): 2.0472097037446457,
-                 ('Dan', 'Dan'): 3.1306328496328168,
-                 ('Dan', 'Franck'): 1.4860372442192515,
-                 ('Franck', '1'): 0.42639707170035257,
-                 ('Franck', 'Albert'): 1.8340111678944691,
-                 ('Franck', 'Aric'): 1.8340111678944691,
-                 ('Franck', 'Dan'): 1.4860372442192515,
-                 ('Franck', 'Franck'): 2.3876142275231915}
-
-        answer=defaultdict(dict)
-        for (k1,k2),v in answer_orig.items():
-            answer[k1][k2]=v
-
-        G1=nx.Graph([('Franck','Aric'),('Aric','Dan'),('Dan','Albert'),
-                     ('Albert','Franck'),('Dan','1'),('Franck','Albert')])
-
-        result=communicability(G1)
-        for k1,val in result.items():
-            for k2 in val:
-                assert_almost_equal(answer[k1][k2],result[k1][k2],places=7)
-
-        result=communicability_exp(G1)
-        for k1,val in result.items():
-            for k2 in val:
-                assert_almost_equal(answer[k1][k2],result[k1][k2],places=7)
-
-
-    def test_estrada_index(self):
-        answer=1041.2470334195475
-        result=estrada_index(nx.karate_club_graph())
-        assert_almost_equal(answer,result,places=7)
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/centrality/tests/test_current_flow_betweenness_centrality.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/centrality/tests/test_current_flow_betweenness_centrality.py
deleted file mode 100644
index 46e8a2d..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/centrality/tests/test_current_flow_betweenness_centrality.py
+++ /dev/null
@@ -1,211 +0,0 @@
-#!/usr/bin/env python
-from nose.tools import *
-from nose import SkipTest
-import networkx
-from nose.plugins.attrib import attr
-
-from networkx import edge_current_flow_betweenness_centrality \
-    as edge_current_flow
-
-from networkx import approximate_current_flow_betweenness_centrality \
-    as approximate_cfbc
-
-class TestFlowBetweennessCentrality(object):
-    numpy=1 # nosetests attribute, use nosetests -a 'not numpy' to skip test
-    @classmethod
-    def setupClass(cls):
-        global np
-        try:
-            import numpy as np
-            import scipy
-        except ImportError:
-            raise SkipTest('NumPy not available.')
-        
-    def test_K4_normalized(self):
-        """Betweenness centrality: K4"""
-        G=networkx.complete_graph(4)
-        b=networkx.current_flow_betweenness_centrality(G,normalized=True)
-        b_answer={0: 0.25, 1: 0.25, 2: 0.25, 3: 0.25}
-        for n in sorted(G):
-            assert_almost_equal(b[n],b_answer[n])
-        G.add_edge(0,1,{'weight':0.5,'other':0.3})
-        b=networkx.current_flow_betweenness_centrality(G,normalized=True,weight=None)
-        for n in sorted(G):
-            assert_almost_equal(b[n],b_answer[n])
-        wb_answer={0: 0.2222222, 1: 0.2222222, 2: 0.30555555, 3: 0.30555555}
-        b=networkx.current_flow_betweenness_centrality(G,normalized=True)
-        for n in sorted(G):
-            assert_almost_equal(b[n],wb_answer[n])
-        wb_answer={0: 0.2051282, 1: 0.2051282, 2: 0.33974358, 3: 0.33974358}
-        b=networkx.current_flow_betweenness_centrality(G,normalized=True,weight='other')
-        for n in sorted(G):
-            assert_almost_equal(b[n],wb_answer[n])
-
-    def test_K4(self):
-        """Betweenness centrality: K4"""
-        G=networkx.complete_graph(4)
-        for solver in ['full','lu','cg']:
-            b=networkx.current_flow_betweenness_centrality(G, normalized=False, 
-                                                           solver=solver)
-            b_answer={0: 0.75, 1: 0.75, 2: 0.75, 3: 0.75}
-            for n in sorted(G):
-                assert_almost_equal(b[n],b_answer[n])
-
-
-    def test_P4_normalized(self):
-        """Betweenness centrality: P4 normalized"""
-        G=networkx.path_graph(4)
-        b=networkx.current_flow_betweenness_centrality(G,normalized=True)
-        b_answer={0: 0, 1: 2./3, 2: 2./3, 3:0}
-        for n in sorted(G):
-            assert_almost_equal(b[n],b_answer[n])
-
-
-    def test_P4(self):
-        """Betweenness centrality: P4"""
-        G=networkx.path_graph(4)
-        b=networkx.current_flow_betweenness_centrality(G,normalized=False)
-        b_answer={0: 0, 1: 2, 2: 2, 3: 0}
-        for n in sorted(G):
-            assert_almost_equal(b[n],b_answer[n])
-
-    def test_star(self):
-        """Betweenness centrality: star """
-        G=networkx.Graph()
-        G.add_star(['a','b','c','d'])
-        b=networkx.current_flow_betweenness_centrality(G,normalized=True)
-        b_answer={'a': 1.0, 'b': 0.0, 'c': 0.0, 'd':0.0}
-        for n in sorted(G):
-            assert_almost_equal(b[n],b_answer[n])
-
-
-
-    def test_solers(self):
-        """Betweenness centrality: alternate solvers"""
-        G=networkx.complete_graph(4)
-        for solver in ['full','lu','cg']:
-            b=networkx.current_flow_betweenness_centrality(G,normalized=False, 
-                                                           solver=solver)
-            b_answer={0: 0.75, 1: 0.75, 2: 0.75, 3: 0.75}
-            for n in sorted(G):
-                assert_almost_equal(b[n],b_answer[n])
-
-
-
-class TestApproximateFlowBetweennessCentrality(object):
-    numpy=1 # nosetests attribute, use nosetests -a 'not numpy' to skip test
-    @classmethod
-    def setupClass(cls):
-        global np
-        global assert_allclose
-        try:
-            import numpy as np
-            import scipy
-            from numpy.testing import  assert_allclose
-        except ImportError:
-            raise SkipTest('NumPy not available.')
-        
-    def test_K4_normalized(self):
-        "Approximate current-flow betweenness centrality: K4 normalized"
-        G=networkx.complete_graph(4)
-        b=networkx.current_flow_betweenness_centrality(G,normalized=True)
-        epsilon=0.1
-        ba = approximate_cfbc(G,normalized=True, epsilon=0.5*epsilon)
-        for n in sorted(G):
-            assert_allclose(b[n],ba[n],atol=epsilon)
-
-    def test_K4(self):
-        "Approximate current-flow betweenness centrality: K4"
-        G=networkx.complete_graph(4)
-        b=networkx.current_flow_betweenness_centrality(G,normalized=False)
-        epsilon=0.1
-        ba = approximate_cfbc(G,normalized=False, epsilon=0.5*epsilon)
-        for n in sorted(G):
-            assert_allclose(b[n],ba[n],atol=epsilon*len(G)**2)
-
-    def test_star(self):
-        "Approximate current-flow betweenness centrality: star"
-        G=networkx.Graph()
-        G.add_star(['a','b','c','d'])
-        b=networkx.current_flow_betweenness_centrality(G,normalized=True)
-        epsilon=0.1
-        ba = approximate_cfbc(G,normalized=True, epsilon=0.5*epsilon)
-        for n in sorted(G):
-            assert_allclose(b[n],ba[n],atol=epsilon)
-
-    def test_grid(self):
-        "Approximate current-flow betweenness centrality: 2d grid"
-        G=networkx.grid_2d_graph(4,4)
-        b=networkx.current_flow_betweenness_centrality(G,normalized=True)
-        epsilon=0.1
-        ba = approximate_cfbc(G,normalized=True, epsilon=0.5*epsilon)
-        for n in sorted(G):
-            assert_allclose(b[n],ba[n],atol=epsilon)
-
-    def test_solvers(self):
-        "Approximate current-flow betweenness centrality: solvers"
-        G=networkx.complete_graph(4)
-        epsilon=0.1
-        for solver in ['full','lu','cg']:
-            b=approximate_cfbc(G,normalized=False,solver=solver,
-                               epsilon=0.5*epsilon)
-            b_answer={0: 0.75, 1: 0.75, 2: 0.75, 3: 0.75}
-            for n in sorted(G):
-                assert_allclose(b[n],b_answer[n],atol=epsilon)
-
-
-
-
-
-class TestWeightedFlowBetweennessCentrality(object):
-    pass
-
-
-class TestEdgeFlowBetweennessCentrality(object):
-    numpy=1 # nosetests attribute, use nosetests -a 'not numpy' to skip test
-    @classmethod
-    def setupClass(cls):
-        global np
-        try:
-            import numpy as np
-            import scipy
-        except ImportError:
-            raise SkipTest('NumPy not available.')
-
-    def test_K4(self):
-        """Edge flow betweenness centrality: K4"""
-        G=networkx.complete_graph(4)
-        b=edge_current_flow(G,normalized=True)
-        b_answer=dict.fromkeys(G.edges(),0.25)
-        for (s,t),v1 in b_answer.items():
-            v2=b.get((s,t),b.get((t,s)))
-            assert_almost_equal(v1,v2)
-
-    def test_K4_normalized(self):
-        """Edge flow betweenness centrality: K4"""
-        G=networkx.complete_graph(4)
-        b=edge_current_flow(G,normalized=False)
-        b_answer=dict.fromkeys(G.edges(),0.75)
-        for (s,t),v1 in b_answer.items():
-            v2=b.get((s,t),b.get((t,s)))
-            assert_almost_equal(v1,v2)
-
-    def test_C4(self):
-        """Edge flow betweenness centrality: C4"""
-        G=networkx.cycle_graph(4)
-        b=edge_current_flow(G,normalized=False)
-        b_answer={(0, 1):1.25,(0, 3):1.25, (1, 2):1.25, (2, 3): 1.25}
-        for (s,t),v1 in b_answer.items():
-            v2=b.get((s,t),b.get((t,s)))
-            assert_almost_equal(v1,v2)
-
-
-    def test_P4(self):
-        """Edge betweenness centrality: P4"""
-        G=networkx.path_graph(4)
-        b=edge_current_flow(G,normalized=False)
-        b_answer={(0, 1):1.5,(1, 2):2.0, (2, 3):1.5}
-        for (s,t),v1 in b_answer.items():
-            v2=b.get((s,t),b.get((t,s)))
-            assert_almost_equal(v1,v2)
-
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/centrality/tests/test_current_flow_betweenness_centrality_subset.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/centrality/tests/test_current_flow_betweenness_centrality_subset.py
deleted file mode 100644
index 4c7acd6..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/centrality/tests/test_current_flow_betweenness_centrality_subset.py
+++ /dev/null
@@ -1,181 +0,0 @@
-#!/usr/bin/env python
-from nose.tools import *
-from nose import SkipTest
-import networkx
-from nose.plugins.attrib import attr
-
-from networkx import edge_current_flow_betweenness_centrality \
-    as edge_current_flow
-
-from networkx import edge_current_flow_betweenness_centrality_subset \
-    as edge_current_flow_subset
-
-class TestFlowBetweennessCentrality(object):
-    numpy=1 # nosetests attribute, use nosetests -a 'not numpy' to skip test
-    @classmethod
-    def setupClass(cls):
-        global np
-        try:
-            import numpy as np
-            import scipy
-        except ImportError:
-            raise SkipTest('NumPy not available.')
-
-        
-    def test_K4_normalized(self):
-        """Betweenness centrality: K4"""
-        G=networkx.complete_graph(4)
-        b=networkx.current_flow_betweenness_centrality_subset(G,
-                                                              G.nodes(),
-                                                              G.nodes(),
-                                                              normalized=True)
-        b_answer=networkx.current_flow_betweenness_centrality(G,normalized=True)
-        for n in sorted(G):
-            assert_almost_equal(b[n],b_answer[n])
-
-
-    def test_K4(self):
-        """Betweenness centrality: K4"""
-        G=networkx.complete_graph(4)
-        b=networkx.current_flow_betweenness_centrality_subset(G,
-                                                              G.nodes(),
-                                                              G.nodes(),
-                                                              normalized=True)
-        b_answer=networkx.current_flow_betweenness_centrality(G,normalized=True)
-        for n in sorted(G):
-            assert_almost_equal(b[n],b_answer[n])
-        # test weighted network
-        G.add_edge(0,1,{'weight':0.5,'other':0.3})
-        b=networkx.current_flow_betweenness_centrality_subset(G,
-                                                              G.nodes(),
-                                                              G.nodes(),
-                                                              normalized=True,
-                                                              weight=None)
-        for n in sorted(G):
-            assert_almost_equal(b[n],b_answer[n])
-        b=networkx.current_flow_betweenness_centrality_subset(G,
-                                                              G.nodes(),
-                                                              G.nodes(),
-                                                              normalized=True)
-        b_answer=networkx.current_flow_betweenness_centrality(G,normalized=True)
-        for n in sorted(G):
-            assert_almost_equal(b[n],b_answer[n])
-        b=networkx.current_flow_betweenness_centrality_subset(G,
-                                                              G.nodes(),
-                                                              G.nodes(),
-                                                              normalized=True,
-                                                              weight='other')
-        b_answer=networkx.current_flow_betweenness_centrality(G,normalized=True,weight='other')
-        for n in sorted(G):
-            assert_almost_equal(b[n],b_answer[n])
-
-
-    def test_P4_normalized(self):
-        """Betweenness centrality: P4 normalized"""
-        G=networkx.path_graph(4)
-        b=networkx.current_flow_betweenness_centrality_subset(G,
-                                                              G.nodes(),
-                                                              G.nodes(),
-                                                              normalized=True)
-        b_answer=networkx.current_flow_betweenness_centrality(G,normalized=True)
-        for n in sorted(G):
-            assert_almost_equal(b[n],b_answer[n])
-
-
-    def test_P4(self):
-        """Betweenness centrality: P4"""
-        G=networkx.path_graph(4)
-        b=networkx.current_flow_betweenness_centrality_subset(G,
-                                                              G.nodes(),
-                                                              G.nodes(),
-                                                              normalized=True)
-        b_answer=networkx.current_flow_betweenness_centrality(G,normalized=True)
-        for n in sorted(G):
-            assert_almost_equal(b[n],b_answer[n])
-
-    def test_star(self):
-        """Betweenness centrality: star """
-        G=networkx.Graph()
-        G.add_star(['a','b','c','d'])
-        b=networkx.current_flow_betweenness_centrality_subset(G,
-                                                              G.nodes(),
-                                                              G.nodes(),
-                                                              normalized=True)
-        b_answer=networkx.current_flow_betweenness_centrality(G,normalized=True)
-        for n in sorted(G):
-            assert_almost_equal(b[n],b_answer[n])
-
-
-
-# class TestWeightedFlowBetweennessCentrality():
-#     pass
-
-
-class TestEdgeFlowBetweennessCentrality(object):
-    numpy=1 # nosetests attribute, use nosetests -a 'not numpy' to skip test
-    @classmethod
-    def setupClass(cls):
-        global np
-        try:
-            import numpy as np
-            import scipy
-        except ImportError:
-            raise SkipTest('NumPy not available.')
-      
-    def test_K4_normalized(self):
-        """Betweenness centrality: K4"""
-        G=networkx.complete_graph(4)
-        b=edge_current_flow_subset(G,G.nodes(),G.nodes(),normalized=True)
-        b_answer=edge_current_flow(G,normalized=True)
-        for (s,t),v1 in b_answer.items():
-            v2=b.get((s,t),b.get((t,s)))
-            assert_almost_equal(v1,v2)
-
-    def test_K4(self):
-        """Betweenness centrality: K4"""
-        G=networkx.complete_graph(4)
-        b=edge_current_flow_subset(G,G.nodes(),G.nodes(),normalized=False)
-        b_answer=edge_current_flow(G,normalized=False)
-        for (s,t),v1 in b_answer.items():
-            v2=b.get((s,t),b.get((t,s)))
-            assert_almost_equal(v1,v2)
-        # test weighted network
-        G.add_edge(0,1,{'weight':0.5,'other':0.3})
-        b=edge_current_flow_subset(G,G.nodes(),G.nodes(),normalized=False,weight=None)
-        # weight is None => same as unweighted network
-        for (s,t),v1 in b_answer.items():
-            v2=b.get((s,t),b.get((t,s)))
-            assert_almost_equal(v1,v2)
-
-        b=edge_current_flow_subset(G,G.nodes(),G.nodes(),normalized=False)
-        b_answer=edge_current_flow(G,normalized=False)
-        for (s,t),v1 in b_answer.items():
-            v2=b.get((s,t),b.get((t,s)))
-            assert_almost_equal(v1,v2)
-
-        b=edge_current_flow_subset(G,G.nodes(),G.nodes(),normalized=False,weight='other')
-        b_answer=edge_current_flow(G,normalized=False,weight='other')
-        for (s,t),v1 in b_answer.items():
-            v2=b.get((s,t),b.get((t,s)))
-            assert_almost_equal(v1,v2)
-
-
-    def test_C4(self):
-        """Edge betweenness centrality: C4"""
-        G=networkx.cycle_graph(4)
-        b=edge_current_flow_subset(G,G.nodes(),G.nodes(),normalized=True)
-        b_answer=edge_current_flow(G,normalized=True)
-        for (s,t),v1 in b_answer.items():
-            v2=b.get((s,t),b.get((t,s)))
-            assert_almost_equal(v1,v2)
-
-
-    def test_P4(self):
-        """Edge betweenness centrality: P4"""
-        G=networkx.path_graph(4)
-        b=edge_current_flow_subset(G,G.nodes(),G.nodes(),normalized=True)
-        b_answer=edge_current_flow(G,normalized=True)
-        for (s,t),v1 in b_answer.items():
-            v2=b.get((s,t),b.get((t,s)))
-            assert_almost_equal(v1,v2)
-
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/centrality/tests/test_current_flow_closeness.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/centrality/tests/test_current_flow_closeness.py
deleted file mode 100644
index 28598d4..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/centrality/tests/test_current_flow_closeness.py
+++ /dev/null
@@ -1,56 +0,0 @@
-#!/usr/bin/env python
-from nose.tools import *
-from nose import SkipTest
-import networkx
-
-class TestFlowClosenessCentrality(object):
-    numpy=1 # nosetests attribute, use nosetests -a 'not numpy' to skip test
-    @classmethod
-    def setupClass(cls):
-        global np
-        try:
-            import numpy as np
-            import scipy
-        except ImportError:
-            raise SkipTest('NumPy not available.')
-        
-        
-    def test_K4(self):
-        """Closeness centrality: K4"""
-        G=networkx.complete_graph(4)
-        b=networkx.current_flow_closeness_centrality(G,normalized=True)
-        b_answer={0: 2.0, 1: 2.0, 2: 2.0, 3: 2.0}
-        for n in sorted(G):
-            assert_almost_equal(b[n],b_answer[n])
-
-
-    def test_P4_normalized(self):
-        """Closeness centrality: P4 normalized"""
-        G=networkx.path_graph(4)
-        b=networkx.current_flow_closeness_centrality(G,normalized=True)
-        b_answer={0: 1./2, 1: 3./4, 2: 3./4, 3:1./2}
-        for n in sorted(G):
-            assert_almost_equal(b[n],b_answer[n])
-
-
-    def test_P4(self):
-        """Closeness centrality: P4"""
-        G=networkx.path_graph(4)
-        b=networkx.current_flow_closeness_centrality(G,normalized=False)
-        b_answer={0: 1.0/6, 1: 1.0/4, 2: 1.0/4, 3:1.0/6}
-        for n in sorted(G):
-            assert_almost_equal(b[n],b_answer[n])
-
-    def test_star(self):
-        """Closeness centrality: star """
-        G=networkx.Graph()
-        G.add_star(['a','b','c','d'])
-        b=networkx.current_flow_closeness_centrality(G,normalized=True)
-        b_answer={'a': 1.0, 'b': 0.6, 'c': 0.6, 'd':0.6}
-        for n in sorted(G):
-            assert_almost_equal(b[n],b_answer[n])
-
-
-
-class TestWeightedFlowClosenessCentrality(object):
-    pass
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/centrality/tests/test_degree_centrality.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/centrality/tests/test_degree_centrality.py
deleted file mode 100644
index 9109ddc..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/centrality/tests/test_degree_centrality.py
+++ /dev/null
@@ -1,92 +0,0 @@
-"""
-    Unit tests for degree centrality.
-"""
-
-from nose.tools import *
-
-import networkx as nx
-
-
-class TestDegreeCentrality:
-    def __init__(self):
-
-        self.K = nx.krackhardt_kite_graph()
-        self.P3 = nx.path_graph(3)
-        self.K5 = nx.complete_graph(5)
-
-        F = nx.Graph() # Florentine families
-        F.add_edge('Acciaiuoli','Medici')
-        F.add_edge('Castellani','Peruzzi')
-        F.add_edge('Castellani','Strozzi')
-        F.add_edge('Castellani','Barbadori')
-        F.add_edge('Medici','Barbadori')
-        F.add_edge('Medici','Ridolfi')
-        F.add_edge('Medici','Tornabuoni')
-        F.add_edge('Medici','Albizzi')
-        F.add_edge('Medici','Salviati')
-        F.add_edge('Salviati','Pazzi')
-        F.add_edge('Peruzzi','Strozzi')
-        F.add_edge('Peruzzi','Bischeri')
-        F.add_edge('Strozzi','Ridolfi')
-        F.add_edge('Strozzi','Bischeri')
-        F.add_edge('Ridolfi','Tornabuoni')
-        F.add_edge('Tornabuoni','Guadagni')
-        F.add_edge('Albizzi','Ginori')
-        F.add_edge('Albizzi','Guadagni')
-        F.add_edge('Bischeri','Guadagni')
-        F.add_edge('Guadagni','Lamberteschi')    
-        self.F = F
-
-        G = nx.DiGraph()
-        G.add_edge(0,5)
-        G.add_edge(1,5)
-        G.add_edge(2,5)
-        G.add_edge(3,5)
-        G.add_edge(4,5)
-        G.add_edge(5,6)
-        G.add_edge(5,7)
-        G.add_edge(5,8)
-        self.G = G
-
-    def test_degree_centrality_1(self):
-        d = nx.degree_centrality(self.K5)
-        exact = dict(zip(range(5), [1]*5))
-        for n,dc in d.items():
-            assert_almost_equal(exact[n], dc)
-
-    def test_degree_centrality_2(self):
-        d = nx.degree_centrality(self.P3)
-        exact = {0:0.5, 1:1, 2:0.5}
-        for n,dc in d.items():
-            assert_almost_equal(exact[n], dc)
-
-    def test_degree_centrality_3(self):
-        d = nx.degree_centrality(self.K)
-        exact = {0:.444, 1:.444, 2:.333, 3:.667, 4:.333,
-                 5:.556, 6:.556, 7:.333, 8:.222, 9:.111}
-        for n,dc in d.items():
-            assert_almost_equal(exact[n], float("%5.3f" % dc))
-
-    def test_degree_centrality_4(self):
-        d = nx.degree_centrality(self.F)
-        names = sorted(self.F.nodes())
-        dcs = [0.071, 0.214, 0.143, 0.214, 0.214, 0.071, 0.286, 
-               0.071, 0.429, 0.071, 0.214, 0.214, 0.143, 0.286, 0.214]
-        exact = dict(zip(names, dcs))
-        for n,dc in d.items():
-            assert_almost_equal(exact[n], float("%5.3f" % dc))
-
-    def test_indegree_centrality(self):
-        d = nx.in_degree_centrality(self.G)
-        exact = {0: 0.0, 1: 0.0, 2: 0.0, 3: 0.0, 4: 0.0, 
-                 5: 0.625, 6: 0.125, 7: 0.125, 8: 0.125}
-        for n,dc in d.items():
-            assert_almost_equal(exact[n], dc)
-
-    def test_outdegree_centrality(self):
-        d = nx.out_degree_centrality(self.G)
-        exact = {0: 0.125, 1: 0.125, 2: 0.125, 3: 0.125,    
-                 4: 0.125, 5: 0.375, 6: 0.0, 7: 0.0, 8: 0.0}
-        for n,dc in d.items():
-            assert_almost_equal(exact[n], dc)
-
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/centrality/tests/test_eigenvector_centrality.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/centrality/tests/test_eigenvector_centrality.py
deleted file mode 100644
index 22b859c..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/centrality/tests/test_eigenvector_centrality.py
+++ /dev/null
@@ -1,123 +0,0 @@
-#!/usr/bin/env python
-import math
-from nose import SkipTest
-from nose.tools import *
-import networkx
-
-class TestEigenvectorCentrality(object):
-    numpy=1 # nosetests attribute, use nosetests -a 'not numpy' to skip test
-    @classmethod
-    def setupClass(cls):
-        global np
-        try:
-            import numpy as np
-        except ImportError:
-            raise SkipTest('NumPy not available.')
-        
-    def test_K5(self):
-        """Eigenvector centrality: K5"""
-        G=networkx.complete_graph(5)
-        b=networkx.eigenvector_centrality(G)
-        v=math.sqrt(1/5.0)
-        b_answer=dict.fromkeys(G,v)
-        for n in sorted(G):
-            assert_almost_equal(b[n],b_answer[n])
-        nstart = dict([(n,1) for n in G]) 
-        b=networkx.eigenvector_centrality(G,nstart=nstart)
-        for n in sorted(G):
-            assert_almost_equal(b[n],b_answer[n])
-
-
-        b=networkx.eigenvector_centrality_numpy(G)
-        for n in sorted(G):
-            assert_almost_equal(b[n],b_answer[n],places=3)
-
-
-    def test_P3(self):
-        """Eigenvector centrality: P3"""
-        G=networkx.path_graph(3)
-        b_answer={0: 0.5, 1: 0.7071, 2: 0.5}
-        b=networkx.eigenvector_centrality_numpy(G)
-        for n in sorted(G):
-            assert_almost_equal(b[n],b_answer[n],places=4)
-
-
-    @raises(networkx.NetworkXError)
-    def test_maxiter(self):
-        G=networkx.path_graph(3)
-        b=networkx.eigenvector_centrality(G,max_iter=0)
-
-class TestEigenvectorCentralityDirected(object):
-    numpy=1 # nosetests attribute, use nosetests -a 'not numpy' to skip test
-    @classmethod
-    def setupClass(cls):
-        global np
-        try:
-            import numpy as np
-        except ImportError:
-            raise SkipTest('NumPy not available.')
-
-    def setUp(self):
-    
-        G=networkx.DiGraph()
-
-        edges=[(1,2),(1,3),(2,4),(3,2),(3,5),(4,2),(4,5),(4,6),\
-               (5,6),(5,7),(5,8),(6,8),(7,1),(7,5),\
-               (7,8),(8,6),(8,7)]
-
-        G.add_edges_from(edges,weight=2.0)
-        self.G=G
-        self.G.evc=[0.25368793,  0.19576478,  0.32817092,  0.40430835,  
-                    0.48199885, 0.15724483,  0.51346196,  0.32475403]
-
-        H=networkx.DiGraph()
-
-        edges=[(1,2),(1,3),(2,4),(3,2),(3,5),(4,2),(4,5),(4,6),\
-               (5,6),(5,7),(5,8),(6,8),(7,1),(7,5),\
-               (7,8),(8,6),(8,7)]
-
-        G.add_edges_from(edges)
-        self.H=G
-        self.H.evc=[0.25368793,  0.19576478,  0.32817092,  0.40430835,  
-                    0.48199885, 0.15724483,  0.51346196,  0.32475403]
-
-
-    def test_eigenvector_centrality_weighted(self):
-        G=self.G
-        p=networkx.eigenvector_centrality_numpy(G)
-        for (a,b) in zip(list(p.values()),self.G.evc):
-            assert_almost_equal(a,b)
-
-    def test_eigenvector_centrality_unweighted(self):
-        G=self.H
-        p=networkx.eigenvector_centrality_numpy(G)
-        for (a,b) in zip(list(p.values()),self.G.evc):
-            assert_almost_equal(a,b)
-
-
-class TestEigenvectorCentralityExceptions(object):
-    numpy=1 # nosetests attribute, use nosetests -a 'not numpy' to skip test
-    @classmethod
-    def setupClass(cls):
-        global np
-        try:
-            import numpy as np
-        except ImportError:
-            raise SkipTest('NumPy not available.')
-    numpy=1 # nosetests attribute, use nosetests -a 'not numpy' to skip test
-    @raises(networkx.NetworkXException)
-    def test_multigraph(self):
-        e = networkx.eigenvector_centrality(networkx.MultiGraph())
-
-    @raises(networkx.NetworkXException)
-    def test_multigraph_numpy(self):
-        e = networkx.eigenvector_centrality_numpy(networkx.MultiGraph())
-
-
-    @raises(networkx.NetworkXException)
-    def test_empty(self):
-        e = networkx.eigenvector_centrality(networkx.Graph())
-
-    @raises(networkx.NetworkXException)
-    def test_empty_numpy(self):
-        e = networkx.eigenvector_centrality_numpy(networkx.Graph())
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/centrality/tests/test_katz_centrality.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/centrality/tests/test_katz_centrality.py
deleted file mode 100644
index 9e8e6d2..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/centrality/tests/test_katz_centrality.py
+++ /dev/null
@@ -1,289 +0,0 @@
-# -*- coding: utf-8 -*-
-import math
-from nose import SkipTest
-from nose.tools import *
-import networkx
-
-class TestKatzCentrality(object):
-
-    def test_K5(self):
-        """Katz centrality: K5"""
-        G = networkx.complete_graph(5)
-        alpha = 0.1
-        b = networkx.katz_centrality(G, alpha)
-        v = math.sqrt(1 / 5.0)
-        b_answer = dict.fromkeys(G, v)
-        for n in sorted(G):
-            assert_almost_equal(b[n], b_answer[n])
-        nstart = dict([(n, 1) for n in G])
-        b = networkx.katz_centrality(G, alpha, nstart=nstart)
-        for n in sorted(G):
-            assert_almost_equal(b[n], b_answer[n])
-
-    def test_P3(self):
-        """Katz centrality: P3"""
-        alpha = 0.1
-        G = networkx.path_graph(3)
-        b_answer = {0: 0.5598852584152165, 1: 0.6107839182711449,
-                    2: 0.5598852584152162}
-        b = networkx.katz_centrality(G, alpha)
-        for n in sorted(G):
-            assert_almost_equal(b[n], b_answer[n], places=4)
-
-    @raises(networkx.NetworkXError)
-    def test_maxiter(self):
-        alpha = 0.1
-        G = networkx.path_graph(3)
-        b = networkx.katz_centrality(G, alpha, max_iter=0)
-
-    def test_beta_as_scalar(self):
-        alpha = 0.1
-        beta = 0.1
-        b_answer = {0: 0.5598852584152165, 1: 0.6107839182711449,
-                    2: 0.5598852584152162}
-        G = networkx.path_graph(3)
-        b = networkx.katz_centrality(G, alpha, beta)
-        for n in sorted(G):
-            assert_almost_equal(b[n], b_answer[n], places=4)
-
-    def test_beta_as_dict(self):
-        alpha = 0.1
-        beta = {0: 1.0, 1: 1.0, 2: 1.0}
-        b_answer = {0: 0.5598852584152165, 1: 0.6107839182711449,
-                    2: 0.5598852584152162}
-        G = networkx.path_graph(3)
-        b = networkx.katz_centrality(G, alpha, beta)
-        for n in sorted(G):
-            assert_almost_equal(b[n], b_answer[n], places=4)
-
-
-    def test_multiple_alpha(self):
-        alpha_list = [0.1, 0.2, 0.3, 0.4, 0.5, 0.6]
-        for alpha in alpha_list:
-            b_answer = {0.1: {0: 0.5598852584152165, 1: 0.6107839182711449,
-                              2: 0.5598852584152162},
-                        0.2: {0: 0.5454545454545454, 1: 0.6363636363636365,
-                              2: 0.5454545454545454},
-                        0.3: {0: 0.5333964609104419, 1: 0.6564879518897746,
-                              2: 0.5333964609104419},
-                        0.4: {0: 0.5232045649263551, 1: 0.6726915834767423,
-                              2: 0.5232045649263551},
-                        0.5: {0: 0.5144957746691622, 1: 0.6859943117075809,
-                              2: 0.5144957746691622},
-                        0.6: {0: 0.5069794004195823, 1: 0.6970966755769258,
-                              2: 0.5069794004195823}}
-            G = networkx.path_graph(3)
-            b = networkx.katz_centrality(G, alpha)
-            for n in sorted(G):
-                assert_almost_equal(b[n], b_answer[alpha][n], places=4)
-
-    @raises(networkx.NetworkXException)
-    def test_multigraph(self):
-        e = networkx.katz_centrality(networkx.MultiGraph(), 0.1)
-
-    def test_empty(self):
-        e = networkx.katz_centrality(networkx.Graph(), 0.1)
-        assert_equal(e, {})
-
-    @raises(networkx.NetworkXException)
-    def test_bad_beta(self):
-        G = networkx.Graph([(0,1)])
-        beta = {0:77}
-        e = networkx.katz_centrality(G, 0.1,beta=beta)
-
-    @raises(networkx.NetworkXException)
-    def test_bad_beta_numbe(self):
-        G = networkx.Graph([(0,1)])
-        e = networkx.katz_centrality(G, 0.1,beta='foo')
-
-
-class TestKatzCentralityNumpy(object):
-    numpy = 1  # nosetests attribute, use nosetests -a 'not numpy' to skip test
-    @classmethod
-    def setupClass(cls):
-        global np
-        try:
-            import numpy as np
-        except ImportError:
-            raise SkipTest('NumPy not available.')
-
-    def test_K5(self):
-        """Katz centrality: K5"""
-        G = networkx.complete_graph(5)
-        alpha = 0.1
-        b = networkx.katz_centrality(G, alpha)
-        v = math.sqrt(1 / 5.0)
-        b_answer = dict.fromkeys(G, v)
-        for n in sorted(G):
-            assert_almost_equal(b[n], b_answer[n])
-        nstart = dict([(n, 1) for n in G])
-        b = networkx.eigenvector_centrality_numpy(G)
-        for n in sorted(G):
-            assert_almost_equal(b[n], b_answer[n], places=3)
-
-    def test_P3(self):
-        """Katz centrality: P3"""
-        alpha = 0.1
-        G = networkx.path_graph(3)
-        b_answer = {0: 0.5598852584152165, 1: 0.6107839182711449,
-                    2: 0.5598852584152162}
-        b = networkx.katz_centrality_numpy(G, alpha)
-        for n in sorted(G):
-            assert_almost_equal(b[n], b_answer[n], places=4)
-
-
-    def test_beta_as_scalar(self):
-        alpha = 0.1
-        beta = 0.1
-        b_answer = {0: 0.5598852584152165, 1: 0.6107839182711449,
-                    2: 0.5598852584152162}
-        G = networkx.path_graph(3)
-        b = networkx.katz_centrality_numpy(G, alpha, beta)
-        for n in sorted(G):
-            assert_almost_equal(b[n], b_answer[n], places=4)
-
-
-    def test_beta_as_dict(self):
-        alpha = 0.1
-        beta = {0: 1.0, 1: 1.0, 2: 1.0}
-        b_answer = {0: 0.5598852584152165, 1: 0.6107839182711449,
-                    2: 0.5598852584152162}
-        G = networkx.path_graph(3)
-        b = networkx.katz_centrality_numpy(G, alpha, beta)
-        for n in sorted(G):
-            assert_almost_equal(b[n], b_answer[n], places=4)
-
-
-    def test_multiple_alpha(self):
-        alpha_list = [0.1, 0.2, 0.3, 0.4, 0.5, 0.6]
-        for alpha in alpha_list:
-            b_answer = {0.1: {0: 0.5598852584152165, 1: 0.6107839182711449,
-                              2: 0.5598852584152162},
-                        0.2: {0: 0.5454545454545454, 1: 0.6363636363636365,
-                              2: 0.5454545454545454},
-                        0.3: {0: 0.5333964609104419, 1: 0.6564879518897746,
-                              2: 0.5333964609104419},
-                        0.4: {0: 0.5232045649263551, 1: 0.6726915834767423,
-                              2: 0.5232045649263551},
-                        0.5: {0: 0.5144957746691622, 1: 0.6859943117075809,
-                              2: 0.5144957746691622},
-                        0.6: {0: 0.5069794004195823, 1: 0.6970966755769258,
-                              2: 0.5069794004195823}}
-            G = networkx.path_graph(3)
-            b = networkx.katz_centrality_numpy(G, alpha)
-            for n in sorted(G):
-                assert_almost_equal(b[n], b_answer[alpha][n], places=4)
-
-    @raises(networkx.NetworkXException)
-    def test_multigraph(self):
-        e = networkx.katz_centrality(networkx.MultiGraph(), 0.1)
-
-    def test_empty(self):
-        e = networkx.katz_centrality(networkx.Graph(), 0.1)
-        assert_equal(e, {})
-
-    @raises(networkx.NetworkXException)
-    def test_bad_beta(self):
-        G = networkx.Graph([(0,1)])
-        beta = {0:77}
-        e = networkx.katz_centrality_numpy(G, 0.1,beta=beta)
-
-    @raises(networkx.NetworkXException)
-    def test_bad_beta_numbe(self):
-        G = networkx.Graph([(0,1)])
-        e = networkx.katz_centrality_numpy(G, 0.1,beta='foo')
-
-
-class TestKatzCentralityDirected(object):
-    def setUp(self):
-        G = networkx.DiGraph()
-        edges = [(1, 2),(1, 3),(2, 4),(3, 2),(3, 5),(4, 2),(4, 5),(4, 6),(5, 6),
-                 (5, 7),(5, 8),(6, 8),(7, 1),(7, 5),(7, 8),(8, 6),(8, 7)]
-        G.add_edges_from(edges, weight=2.0)
-        self.G = G
-        self.G.alpha = 0.1
-        self.G.evc = [
-            0.3289589783189635,
-            0.2832077296243516,
-            0.3425906003685471,
-            0.3970420865198392,
-            0.41074871061646284,
-            0.272257430756461,
-            0.4201989685435462,
-            0.34229059218038554,
-            ]
-
-        H = networkx.DiGraph(edges)
-        self.H = G
-        self.H.alpha = 0.1
-        self.H.evc = [
-            0.3289589783189635,
-            0.2832077296243516,
-            0.3425906003685471,
-            0.3970420865198392,
-            0.41074871061646284,
-            0.272257430756461,
-            0.4201989685435462,
-            0.34229059218038554,
-            ]
-
-    def test_eigenvector_centrality_weighted(self):
-        G = self.G
-        alpha = self.G.alpha
-        p = networkx.katz_centrality(G, alpha)
-        for (a, b) in zip(list(p.values()), self.G.evc):
-            assert_almost_equal(a, b)
-
-    def test_eigenvector_centrality_unweighted(self):
-        G = self.H
-        alpha = self.H.alpha
-        p = networkx.katz_centrality(G, alpha)
-        for (a, b) in zip(list(p.values()), self.G.evc):
-            assert_almost_equal(a, b)
-
-
-class TestKatzCentralityDirectedNumpy(TestKatzCentralityDirected):
-    numpy = 1  # nosetests attribute, use nosetests -a 'not numpy' to skip test
-
-    @classmethod
-    def setupClass(cls):
-        global np
-        try:
-            import numpy as np
-        except ImportError:
-            raise SkipTest('NumPy not available.')
-
-    def test_eigenvector_centrality_weighted(self):
-        G = self.G
-        alpha = self.G.alpha
-        p = networkx.katz_centrality_numpy(G, alpha)
-        for (a, b) in zip(list(p.values()), self.G.evc):
-            assert_almost_equal(a, b)
-
-    def test_eigenvector_centrality_unweighted(self):
-        G = self.H
-        alpha = self.H.alpha
-        p = networkx.katz_centrality_numpy(G, alpha)
-        for (a, b) in zip(list(p.values()), self.G.evc):
-            assert_almost_equal(a, b)
-
-class TestKatzEigenvectorVKatz(object):
-    numpy = 1  # nosetests attribute, use nosetests -a 'not numpy' to skip test
-
-    @classmethod
-    def setupClass(cls):
-        global np
-        global eigvals
-        try:
-            import numpy as np
-            from numpy.linalg import eigvals
-        except ImportError:
-            raise SkipTest('NumPy not available.')
-
-    def test_eigenvector_v_katz_random(self):
-        G = networkx.gnp_random_graph(10,0.5)
-        l = float(max(eigvals(networkx.adjacency_matrix(G))))
-        e = networkx.eigenvector_centrality_numpy(G)
-        k = networkx.katz_centrality_numpy(G, 1.0/l)
-        for n in G:
-            assert_almost_equal(e[n], k[n])
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/centrality/tests/test_load_centrality.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/centrality/tests/test_load_centrality.py
deleted file mode 100644
index 8939d26..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/centrality/tests/test_load_centrality.py
+++ /dev/null
@@ -1,273 +0,0 @@
-#!/usr/bin/env python
-from nose.tools import *
-import networkx as nx
-
-
-class TestLoadCentrality:
-
-    def setUp(self):
-
-        G=nx.Graph();
-        G.add_edge(0,1,weight=3)
-        G.add_edge(0,2,weight=2)
-        G.add_edge(0,3,weight=6)
-        G.add_edge(0,4,weight=4)
-        G.add_edge(1,3,weight=5)
-        G.add_edge(1,5,weight=5)
-        G.add_edge(2,4,weight=1)
-        G.add_edge(3,4,weight=2)
-        G.add_edge(3,5,weight=1)
-        G.add_edge(4,5,weight=4)
-        self.G=G
-        self.exact_weighted={0: 4.0, 1: 0.0, 2: 8.0, 3: 6.0, 4: 8.0, 5: 0.0}
-        self.K = nx.krackhardt_kite_graph()
-        self.P3 = nx.path_graph(3)
-        self.P4 = nx.path_graph(4)
-        self.K5 = nx.complete_graph(5)
-
-        self.C4=nx.cycle_graph(4)
-        self.T=nx.balanced_tree(r=2, h=2)
-        self.Gb = nx.Graph()
-        self.Gb.add_edges_from([(0, 1), (0, 2), (1, 3), (2, 3), 
-                                (2, 4), (4, 5), (3, 5)])
-        self.F = nx.florentine_families_graph()
-        self.D = nx.cycle_graph(3, create_using=nx.DiGraph())
-        self.D.add_edges_from([(3, 0), (4, 3)])
-
-    def test_not_strongly_connected(self):
-        b = nx.load_centrality(self.D)
-        result = {0: 5./12,
-                  1: 1./4,
-                  2: 1./12,
-                  3: 1./4,
-                  4: 0.000}
-        for n in sorted(self.D):
-            assert_almost_equal(result[n], b[n], places=3)
-            assert_almost_equal(result[n], nx.load_centrality(self.D, n), places=3)
-
-    def test_weighted_load(self):
-        b=nx.load_centrality(self.G,weight='weight',normalized=False)
-        for n in sorted(self.G):
-            assert_equal(b[n],self.exact_weighted[n])
-
-    def test_k5_load(self):
-        G=self.K5
-        c=nx.load_centrality(G)
-        d={0: 0.000,
-           1: 0.000,
-           2: 0.000,
-           3: 0.000,
-           4: 0.000}
-        for n in sorted(G):
-            assert_almost_equal(c[n],d[n],places=3)
-
-    def test_p3_load(self):
-        G=self.P3
-        c=nx.load_centrality(G)
-        d={0: 0.000,
-           1: 1.000,
-           2: 0.000}
-        for n in sorted(G):
-            assert_almost_equal(c[n],d[n],places=3)
-        c=nx.load_centrality(G,v=1)
-        assert_almost_equal(c,1.0)
-        c=nx.load_centrality(G,v=1,normalized=True)
-        assert_almost_equal(c,1.0)
-
-
-    def test_p2_load(self):
-        G=nx.path_graph(2)
-        c=nx.load_centrality(G)
-        d={0: 0.000,
-           1: 0.000}
-        for n in sorted(G):
-            assert_almost_equal(c[n],d[n],places=3)
-
-
-    def test_krackhardt_load(self):
-        G=self.K
-        c=nx.load_centrality(G)
-        d={0: 0.023,
-           1: 0.023,
-           2: 0.000,
-           3: 0.102,
-           4: 0.000,
-           5: 0.231,
-           6: 0.231,
-           7: 0.389,
-           8: 0.222,
-           9: 0.000}
-        for n in sorted(G):
-            assert_almost_equal(c[n],d[n],places=3)
-
-    def test_florentine_families_load(self):
-        G=self.F
-        c=nx.load_centrality(G)
-        d={'Acciaiuoli':    0.000,
-           'Albizzi':       0.211,
-           'Barbadori':     0.093,
-           'Bischeri':      0.104,
-           'Castellani':    0.055,
-           'Ginori':        0.000,
-           'Guadagni':      0.251,
-           'Lamberteschi':  0.000,
-           'Medici':        0.522,
-           'Pazzi':         0.000,
-           'Peruzzi':       0.022,
-           'Ridolfi':       0.117,
-           'Salviati':      0.143,
-           'Strozzi':       0.106,
-           'Tornabuoni':    0.090}
-        for n in sorted(G):
-            assert_almost_equal(c[n],d[n],places=3)
-
-
-    def test_unnormalized_k5_load(self):
-        G=self.K5
-        c=nx.load_centrality(G,normalized=False)
-        d={0: 0.000,
-           1: 0.000,
-           2: 0.000,
-           3: 0.000,
-           4: 0.000}
-        for n in sorted(G):
-            assert_almost_equal(c[n],d[n],places=3)
-
-    def test_unnormalized_p3_load(self):
-        G=self.P3
-        c=nx.load_centrality(G,normalized=False)
-        d={0: 0.000,
-           1: 2.000,
-           2: 0.000}
-        for n in sorted(G):
-            assert_almost_equal(c[n],d[n],places=3)
-
-
-    def test_unnormalized_krackhardt_load(self):
-        G=self.K
-        c=nx.load_centrality(G,normalized=False)
-        d={0: 1.667,
-           1: 1.667,
-           2: 0.000,
-           3: 7.333,
-           4: 0.000,
-           5: 16.667,
-           6: 16.667,
-           7: 28.000,
-           8: 16.000,
-           9: 0.000}
-
-        for n in sorted(G):
-            assert_almost_equal(c[n],d[n],places=3)
-
-    def test_unnormalized_florentine_families_load(self):
-        G=self.F
-        c=nx.load_centrality(G,normalized=False)
-
-        d={'Acciaiuoli':  0.000,
-           'Albizzi':    38.333, 
-           'Barbadori':  17.000,
-           'Bischeri':   19.000,
-           'Castellani': 10.000,
-           'Ginori':     0.000,
-           'Guadagni':   45.667,
-           'Lamberteschi': 0.000,
-           'Medici':     95.000,
-           'Pazzi':      0.000,
-           'Peruzzi':    4.000,
-           'Ridolfi':    21.333,
-           'Salviati':   26.000,
-           'Strozzi':    19.333,
-           'Tornabuoni': 16.333}
-        for n in sorted(G):
-            assert_almost_equal(c[n],d[n],places=3)
-
-
-    def test_load_betweenness_difference(self):
-        # Difference Between Load and Betweenness
-        # --------------------------------------- The smallest graph
-        # that shows the difference between load and betweenness is
-        # G=ladder_graph(3) (Graph B below)
-
-        # Graph A and B are from Tao Zhou, Jian-Guo Liu, Bing-Hong
-        # Wang: Comment on ``Scientific collaboration
-        # networks. II. Shortest paths, weighted networks, and
-        # centrality". http://arxiv.org/pdf/physics/0511084
-
-        # Notice that unlike here, their calculation adds to 1 to the
-        # betweennes of every node i for every path from i to every
-        # other node.  This is exactly what it should be, based on
-        # Eqn. (1) in their paper: the eqn is B(v) = \sum_{s\neq t,
-        # s\neq v}{\frac{\sigma_{st}(v)}{\sigma_{st}}}, therefore,
-        # they allow v to be the target node.
-
-        # We follow Brandes 2001, who follows Freeman 1977 that make
-        # the sum for betweenness of v exclude paths where v is either
-        # the source or target node.  To agree with their numbers, we
-        # must additionally, remove edge (4,8) from the graph, see AC
-        # example following (there is a mistake in the figure in their
-        # paper - personal communication).
-
-        # A = nx.Graph()
-        # A.add_edges_from([(0,1), (1,2), (1,3), (2,4), 
-        #                  (3,5), (4,6), (4,7), (4,8), 
-        #                  (5,8), (6,9), (7,9), (8,9)])
-        B = nx.Graph() # ladder_graph(3)
-        B.add_edges_from([(0,1), (0,2), (1,3), (2,3), (2,4), (4,5), (3,5)])
-        c = nx.load_centrality(B,normalized=False)
-        d={0: 1.750,
-           1: 1.750,
-           2: 6.500,
-           3: 6.500,
-           4: 1.750,
-           5: 1.750}
-        for n in sorted(B):
-            assert_almost_equal(c[n],d[n],places=3)
-
-
-    def test_c4_edge_load(self):
-        G=self.C4
-        c = nx.edge_load(G)
-        d={(0, 1): 6.000,
-           (0, 3): 6.000,
-           (1, 2): 6.000,
-           (2, 3): 6.000}
-        for n in G.edges():
-            assert_almost_equal(c[n],d[n],places=3)
-
-    def test_p4_edge_load(self):
-        G=self.P4
-        c = nx.edge_load(G)
-        d={(0, 1): 6.000,
-           (1, 2): 8.000,
-           (2, 3): 6.000}
-        for n in G.edges():
-            assert_almost_equal(c[n],d[n],places=3)
-
-    def test_k5_edge_load(self):
-        G=self.K5
-        c = nx.edge_load(G)
-        d={(0, 1): 5.000,
-           (0, 2): 5.000,
-           (0, 3): 5.000,
-           (0, 4): 5.000,
-           (1, 2): 5.000,
-           (1, 3): 5.000,
-           (1, 4): 5.000,
-           (2, 3): 5.000,
-           (2, 4): 5.000,
-           (3, 4): 5.000}
-        for n in G.edges():
-            assert_almost_equal(c[n],d[n],places=3)
-
-    def test_tree_edge_load(self):
-        G=self.T
-        c = nx.edge_load(G)
-        d={(0, 1): 24.000,
-           (0, 2): 24.000,
-           (1, 3): 12.000,
-           (1, 4): 12.000,
-           (2, 5): 12.000,
-           (2, 6): 12.000}
-        for n in G.edges():
-            assert_almost_equal(c[n],d[n],places=3)
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/chordal/__init__.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/chordal/__init__.py
deleted file mode 100644
index cf8e951..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/chordal/__init__.py
+++ /dev/null
@@ -1,3 +0,0 @@
-from networkx.algorithms.chordal.chordal_alg import *
-
-
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/chordal/chordal_alg.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/chordal/chordal_alg.py
deleted file mode 100644
index 8eb6404..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/chordal/chordal_alg.py
+++ /dev/null
@@ -1,347 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-Algorithms for chordal graphs.
-
-A graph is chordal if every cycle of length at least 4 has a chord
-(an edge joining two nodes not adjacent in the cycle).
-http://en.wikipedia.org/wiki/Chordal_graph
-"""
-import networkx as nx
-import random
-import sys
-
-__authors__ = "\n".join(['Jesus Cerquides <cerquide@iiia.csic.es>'])
-#    Copyright (C) 2010 by 
-#    Jesus Cerquides <cerquide@iiia.csic.es>
-#    All rights reserved.
-#    BSD license.
-
-__all__ = ['is_chordal',
-           'find_induced_nodes', 
-           'chordal_graph_cliques',
-           'chordal_graph_treewidth',
-           'NetworkXTreewidthBoundExceeded']
-
-class NetworkXTreewidthBoundExceeded(nx.NetworkXException):
-    """Exception raised when a treewidth bound has been provided and it has 
-    been exceeded"""
-    
-
-def is_chordal(G):
-    """Checks whether G is a chordal graph.
-
-    A graph is chordal if every cycle of length at least 4 has a chord
-    (an edge joining two nodes not adjacent in the cycle).
-
-    Parameters
-    ----------
-    G : graph  
-      A NetworkX graph.  
-
-    Returns
-    -------
-    chordal : bool
-      True if G is a chordal graph and False otherwise.
-    
-    Raises
-    ------
-    NetworkXError
-        The algorithm does not support DiGraph, MultiGraph and MultiDiGraph. 
-        If the input graph is an instance of one of these classes, a
-        NetworkXError is raised.
-        
-    Examples
-    --------
-    >>> import networkx as nx
-    >>> e=[(1,2),(1,3),(2,3),(2,4),(3,4),(3,5),(3,6),(4,5),(4,6),(5,6)]
-    >>> G=nx.Graph(e)
-    >>> nx.is_chordal(G)
-    True
-   
-    Notes
-    -----
-    The routine tries to go through every node following maximum cardinality 
-    search. It returns False when it finds that the separator for any node 
-    is not a clique.  Based on the algorithms in [1]_.
-
-    References
-    ----------
-    .. [1] R. E. Tarjan and M. Yannakakis, Simple linear-time algorithms 
-       to test chordality of graphs, test acyclicity of hypergraphs, and 
-       selectively reduce acyclic hypergraphs, SIAM J. Comput., 13 (1984), 
-       pp. 566–579.
-    """
-    if G.is_directed():
-        raise nx.NetworkXError('Directed graphs not supported')
-    if G.is_multigraph():
-        raise nx.NetworkXError('Multiply connected graphs not supported.')
-    if len(_find_chordality_breaker(G))==0:
-        return True
-    else:
-        return False
-
-def find_induced_nodes(G,s,t,treewidth_bound=sys.maxsize):
-    """Returns the set of induced nodes in the path from s to t. 
-
-    Parameters
-    ----------
-    G : graph
-      A chordal NetworkX graph 
-    s : node
-	Source node to look for induced nodes
-    t : node
-	Destination node to look for induced nodes
-    treewith_bound: float
-        Maximum treewidth acceptable for the graph H. The search 
-        for induced nodes will end as soon as the treewidth_bound is exceeded.
-   
-    Returns
-    -------
-    I : Set of nodes
-	The set of induced nodes in the path from s to t in G
-    
-    Raises
-    ------
-    NetworkXError
-        The algorithm does not support DiGraph, MultiGraph and MultiDiGraph. 
-        If the input graph is an instance of one of these classes, a
-        NetworkXError is raised.
-        The algorithm can only be applied to chordal graphs. If
-        the input graph is found to be non-chordal, a NetworkXError is raised.
-        
-    Examples
-    --------
-    >>> import networkx as nx
-    >>> G=nx.Graph()  
-    >>> G = nx.generators.classic.path_graph(10)
-    >>> I = nx.find_induced_nodes(G,1,9,2)
-    >>> list(I)
-    [1, 2, 3, 4, 5, 6, 7, 8, 9]
-
-    Notes
-    -----
-    G must be a chordal graph and (s,t) an edge that is not in G. 
-
-    If a treewidth_bound is provided, the search for induced nodes will end 
-    as soon as the treewidth_bound is exceeded.
-    
-    The algorithm is inspired by Algorithm 4 in [1]_.
-    A formal definition of induced node can also be found on that reference.
-    
-    References
-    ----------
-    .. [1] Learning Bounded Treewidth Bayesian Networks. 
-       Gal Elidan, Stephen Gould; JMLR, 9(Dec):2699--2731, 2008. 
-       http://jmlr.csail.mit.edu/papers/volume9/elidan08a/elidan08a.pdf
-    """
-    if not is_chordal(G):
-        raise nx.NetworkXError("Input graph is not chordal.")
- 
-    H = nx.Graph(G)
-    H.add_edge(s,t)
-    I = set()
-    triplet =  _find_chordality_breaker(H,s,treewidth_bound)
-    while triplet:
-        (u,v,w) = triplet
-        I.update(triplet)
-        for n in triplet:
-            if n!=s:
-                H.add_edge(s,n)
-        triplet =  _find_chordality_breaker(H,s,treewidth_bound)
-    if I:
-        # Add t and the second node in the induced path from s to t.
-        I.add(t)
-        for u in G[s]: 
-            if len(I & set(G[u]))==2:
-                I.add(u)
-                break
-    return I
-
-def chordal_graph_cliques(G):
-    """Returns the set of maximal cliques of a chordal graph.
-    
-    The algorithm breaks the graph in connected components and performs a 
-    maximum cardinality search in each component to get the cliques.
-    
-    Parameters
-    ----------
-    G : graph
-      A NetworkX graph 
-    
-    Returns
-    -------
-    cliques : A set containing the maximal cliques in G.
-    
-    Raises
-    ------
-    NetworkXError
-        The algorithm does not support DiGraph, MultiGraph and MultiDiGraph. 
-        If the input graph is an instance of one of these classes, a
-        NetworkXError is raised.
-        The algorithm can only be applied to chordal graphs. If the
-        input graph is found to be non-chordal, a NetworkXError is raised.
-        
-    Examples
-    --------
-    >>> import networkx as nx
-    >>> e= [(1,2),(1,3),(2,3),(2,4),(3,4),(3,5),(3,6),(4,5),(4,6),(5,6),(7,8)]
-    >>> G = nx.Graph(e)
-    >>> G.add_node(9)    
-    >>> setlist = nx.chordal_graph_cliques(G)
-    """
-    if not is_chordal(G):
-        raise nx.NetworkXError("Input graph is not chordal.")
-    
-    cliques = set()
-    for C in nx.connected.connected_component_subgraphs(G):
-        cliques |= _connected_chordal_graph_cliques(C)
-        
-    return cliques
-
-
-def chordal_graph_treewidth(G):
-    """Returns the treewidth of the chordal graph G.
- 
-    Parameters
-    ----------
-    G : graph
-      A NetworkX graph 
-    
-    Returns
-    -------
-    treewidth : int
-	The size of the largest clique in the graph minus one.
-    
-    Raises
-    ------
-    NetworkXError
-        The algorithm does not support DiGraph, MultiGraph and MultiDiGraph. 
-        If the input graph is an instance of one of these classes, a
-        NetworkXError is raised.
-        The algorithm can only be applied to chordal graphs. If
-        the input graph is found to be non-chordal, a NetworkXError is raised.
-        
-    Examples
-    --------
-    >>> import networkx as nx
-    >>> e = [(1,2),(1,3),(2,3),(2,4),(3,4),(3,5),(3,6),(4,5),(4,6),(5,6),(7,8)]
-    >>> G = nx.Graph(e)
-    >>> G.add_node(9)    
-    >>> nx.chordal_graph_treewidth(G)
-    3
-
-    References
-    ----------
-    .. [1] http://en.wikipedia.org/wiki/Tree_decomposition#Treewidth
-    """
-    if not is_chordal(G):
-        raise nx.NetworkXError("Input graph is not chordal.")
-    
-    max_clique = -1
-    for clique in nx.chordal_graph_cliques(G):
-        max_clique = max(max_clique,len(clique))
-    return max_clique - 1
-
-def _is_complete_graph(G):
-    """Returns True if G is a complete graph."""
-    if G.number_of_selfloops()>0:
-        raise nx.NetworkXError("Self loop found in _is_complete_graph()")
-    n = G.number_of_nodes()
-    if n < 2:
-        return True
-    e = G.number_of_edges()
-    max_edges = ((n * (n-1))/2)
-    return e == max_edges
-
-
-def _find_missing_edge(G):
-    """ Given a non-complete graph G, returns a missing edge."""
-    nodes=set(G)
-    for u in G:
-        missing=nodes-set(list(G[u].keys())+[u])
-        if missing:
-            return (u,missing.pop())
-
-
-def _max_cardinality_node(G,choices,wanna_connect):
-    """Returns a the node in choices that has more connections in G 
-    to nodes in wanna_connect.
-    """
-#    max_number = None 
-    max_number = -1
-    for x in choices:
-        number=len([y for y in G[x] if y in wanna_connect])
-        if number > max_number:
-            max_number = number
-            max_cardinality_node = x 
-    return max_cardinality_node
-
-
-def _find_chordality_breaker(G,s=None,treewidth_bound=sys.maxsize):
-    """ Given a graph G, starts a max cardinality search 
-    (starting from s if s is given and from a random node otherwise)
-    trying to find a non-chordal cycle. 
-
-    If it does find one, it returns (u,v,w) where u,v,w are the three
-    nodes that together with s are involved in the cycle.
-    """
-   
-    unnumbered = set(G)
-    if s is None:
-        s = random.choice(list(unnumbered))
-    unnumbered.remove(s)
-    numbered = set([s])
-#    current_treewidth = None
-    current_treewidth = -1
-    while unnumbered:# and current_treewidth <= treewidth_bound:
-        v = _max_cardinality_node(G,unnumbered,numbered)
-        unnumbered.remove(v)
-        numbered.add(v)
-        clique_wanna_be = set(G[v]) & numbered
-        sg = G.subgraph(clique_wanna_be)
-        if _is_complete_graph(sg):
-            # The graph seems to be chordal by now. We update the treewidth
-            current_treewidth = max(current_treewidth,len(clique_wanna_be))
-            if current_treewidth > treewidth_bound:
-                raise nx.NetworkXTreewidthBoundExceeded(\
-                    "treewidth_bound exceeded: %s"%current_treewidth)
-        else:
-            # sg is not a clique,
-            # look for an edge that is not included in sg
-            (u,w) = _find_missing_edge(sg)
-            return (u,v,w)
-    return ()
-    
-
-  
-def _connected_chordal_graph_cliques(G):
-    """Return the set of maximal cliques of a connected chordal graph."""
-    if G.number_of_nodes() == 1:
-        x = frozenset(G.nodes())
-        return set([x])
-    else:
-        cliques = set()
-        unnumbered = set(G.nodes())
-        v = random.choice(list(unnumbered))
-        unnumbered.remove(v)
-        numbered = set([v])
-        clique_wanna_be = set([v])
-        while unnumbered:
-            v = _max_cardinality_node(G,unnumbered,numbered)
-            unnumbered.remove(v)
-            numbered.add(v)
-            new_clique_wanna_be = set(G.neighbors(v)) & numbered
-            sg = G.subgraph(clique_wanna_be)
-            if _is_complete_graph(sg):
-                new_clique_wanna_be.add(v)
-                if not new_clique_wanna_be >= clique_wanna_be:
-                    cliques.add(frozenset(clique_wanna_be))
-                clique_wanna_be = new_clique_wanna_be
-            else:
-                raise nx.NetworkXError("Input graph is not chordal.")
-        cliques.add(frozenset(clique_wanna_be))
-        return cliques
-
-
-
-
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/chordal/tests/test_chordal.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/chordal/tests/test_chordal.py
deleted file mode 100644
index 4ec0b5b..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/chordal/tests/test_chordal.py
+++ /dev/null
@@ -1,59 +0,0 @@
-#!/usr/bin/env python
-from nose.tools import *
-import networkx as nx
-
-class TestMCS:
-
-    def setUp(self):
-        # simple graph
-        connected_chordal_G=nx.Graph()
-        connected_chordal_G.add_edges_from([(1,2),(1,3),(2,3),(2,4),(3,4),
-                                            (3,5),(3,6),(4,5),(4,6),(5,6)])
-        self.connected_chordal_G=connected_chordal_G
-
-        chordal_G = nx.Graph()
-        chordal_G.add_edges_from([(1,2),(1,3),(2,3),(2,4),(3,4),
-                                  (3,5),(3,6),(4,5),(4,6),(5,6),(7,8)])
-        chordal_G.add_node(9)
-        self.chordal_G=chordal_G
-
-        non_chordal_G = nx.Graph()
-        non_chordal_G.add_edges_from([(1,2),(1,3),(2,4),(2,5),(3,4),(3,5)])
-        self.non_chordal_G = non_chordal_G
-
-    def test_is_chordal(self):
-        assert_false(nx.is_chordal(self.non_chordal_G))
-        assert_true(nx.is_chordal(self.chordal_G))
-        assert_true(nx.is_chordal(self.connected_chordal_G))
-        assert_true(nx.is_chordal(nx.complete_graph(3)))
-        assert_true(nx.is_chordal(nx.cycle_graph(3)))
-        assert_false(nx.is_chordal(nx.cycle_graph(5)))
-    
-    def test_induced_nodes(self):
-        G = nx.generators.classic.path_graph(10)
-        I = nx.find_induced_nodes(G,1,9,2)
-        assert_equal(I,set([1,2,3,4,5,6,7,8,9]))
-        assert_raises(nx.NetworkXTreewidthBoundExceeded,
-                      nx.find_induced_nodes,G,1,9,1)
-        I = nx.find_induced_nodes(self.chordal_G,1,6)
-        assert_equal(I,set([1,2,4,6]))
-        assert_raises(nx.NetworkXError,
-		      nx.find_induced_nodes,self.non_chordal_G,1,5)
-        
-    def test_chordal_find_cliques(self):
-        cliques = set([frozenset([9]),frozenset([7,8]),frozenset([1,2,3]),
-                       frozenset([2,3,4]),frozenset([3,4,5,6])])
-        assert_equal(nx.chordal_graph_cliques(self.chordal_G),cliques)
-
-    def test_chordal_find_cliques_path(self):
-        G = nx.path_graph(10)
-        cliqueset = nx.chordal_graph_cliques(G)
-        for (u,v) in G.edges_iter():
-            assert_true(frozenset([u,v]) in cliqueset 
-                        or frozenset([v,u]) in cliqueset)
-    
-    def test_chordal_find_cliquesCC(self):
-        cliques = set([frozenset([1,2,3]),frozenset([2,3,4]),
-                       frozenset([3,4,5,6])])
-        assert_equal(nx.chordal_graph_cliques(self.connected_chordal_G),cliques)
-
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/clique.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/clique.py
deleted file mode 100644
index 08d9ade..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/clique.py
+++ /dev/null
@@ -1,516 +0,0 @@
-"""
-=======
-Cliques
-=======
-
-Find and manipulate cliques of graphs.
-
-Note that finding the largest clique of a graph has been
-shown to be an NP-complete problem; the algorithms here
-could take a long time to run.
-
-http://en.wikipedia.org/wiki/Clique_problem
-"""
-#    Copyright (C) 2004-2008 by
-#    Aric Hagberg <hagberg@lanl.gov>
-#    Dan Schult <dschult@colgate.edu>
-#    Pieter Swart <swart@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-import networkx
-from networkx.utils.decorators import *
-__author__ = """Dan Schult (dschult@colgate.edu)"""
-__all__ = ['find_cliques', 'find_cliques_recursive', 'make_max_clique_graph',
-           'make_clique_bipartite' ,'graph_clique_number',
-           'graph_number_of_cliques', 'node_clique_number',
-           'number_of_cliques', 'cliques_containing_node',
-           'project_down', 'project_up']
-
-
-@not_implemented_for('directed')
-def find_cliques(G):
-    """Search for all maximal cliques in a graph.
-
-    Maximal cliques are the largest complete subgraph containing
-    a given node.  The largest maximal clique is sometimes called
-    the maximum clique.
-
-    Returns
-    -------
-    generator of lists: genetor of member list for each maximal clique
-
-    See Also
-    --------
-    find_cliques_recursive :
-    A recursive version of the same algorithm
-
-    Notes
-    -----
-    To obtain a list of cliques, use list(find_cliques(G)).
-
-    Based on the algorithm published by Bron & Kerbosch (1973) [1]_
-    as adapated by Tomita, Tanaka and Takahashi (2006) [2]_
-    and discussed in Cazals and Karande (2008) [3]_.
-    The method essentially unrolls the recursion used in
-    the references to avoid issues of recursion stack depth.
-
-    This algorithm is not suitable for directed graphs.
-
-    This algorithm ignores self-loops and parallel edges as
-    clique is not conventionally defined with such edges.
-
-    There are often many cliques in graphs.  This algorithm can
-    run out of memory for large graphs.
-
-    References
-    ----------
-    .. [1] Bron, C. and Kerbosch, J. 1973.
-       Algorithm 457: finding all cliques of an undirected graph.
-       Commun. ACM 16, 9 (Sep. 1973), 575-577.
-       http://portal.acm.org/citation.cfm?doid=362342.362367
-
-    .. [2] Etsuji Tomita, Akira Tanaka, Haruhisa Takahashi,
-       The worst-case time complexity for generating all maximal
-       cliques and computational experiments,
-       Theoretical Computer Science, Volume 363, Issue 1,
-       Computing and Combinatorics,
-       10th Annual International Conference on
-       Computing and Combinatorics (COCOON 2004), 25 October 2006, Pages 28-42
-       http://dx.doi.org/10.1016/j.tcs.2006.06.015
-
-    .. [3] F. Cazals, C. Karande,
-       A note on the problem of reporting maximal cliques,
-       Theoretical Computer Science,
-       Volume 407, Issues 1-3, 6 November 2008, Pages 564-568,
-       http://dx.doi.org/10.1016/j.tcs.2008.05.010
-    """
-    # Cache nbrs and find first pivot (highest degree)
-    maxconn=-1
-    nnbrs={}
-    pivotnbrs=set() # handle empty graph
-    for n,nbrs in G.adjacency_iter():
-        nbrs=set(nbrs)
-        nbrs.discard(n)
-        conn = len(nbrs)
-        if conn > maxconn:
-            nnbrs[n] = pivotnbrs = nbrs
-            maxconn = conn
-        else:
-            nnbrs[n] = nbrs
-    # Initial setup
-    cand=set(nnbrs)
-    smallcand = set(cand - pivotnbrs)
-    done=set()
-    stack=[]
-    clique_so_far=[]
-    # Start main loop
-    while smallcand or stack:
-        try:
-            # Any nodes left to check?
-            n=smallcand.pop()
-        except KeyError:
-            # back out clique_so_far
-            cand,done,smallcand = stack.pop()
-            clique_so_far.pop()
-            continue
-        # Add next node to clique
-        clique_so_far.append(n)
-        cand.remove(n)
-        done.add(n)
-        nn=nnbrs[n]
-        new_cand = cand & nn
-        new_done = done & nn
-        # check if we have more to search
-        if not new_cand:
-            if not new_done:
-                # Found a clique!
-                yield clique_so_far[:]
-            clique_so_far.pop()
-            continue
-        # Shortcut--only one node left!
-        if not new_done and len(new_cand)==1:
-            yield clique_so_far + list(new_cand)
-            clique_so_far.pop()
-            continue
-        # find pivot node (max connected in cand)
-        # look in done nodes first
-        numb_cand=len(new_cand)
-        maxconndone=-1
-        for n in new_done:
-            cn = new_cand & nnbrs[n]
-            conn=len(cn)
-            if conn > maxconndone:
-                pivotdonenbrs=cn
-                maxconndone=conn
-                if maxconndone==numb_cand:
-                    break
-        # Shortcut--this part of tree already searched
-        if maxconndone == numb_cand:
-            clique_so_far.pop()
-            continue
-        # still finding pivot node
-        # look in cand nodes second
-        maxconn=-1
-        for n in new_cand:
-            cn = new_cand & nnbrs[n]
-            conn=len(cn)
-            if conn > maxconn:
-                pivotnbrs=cn
-                maxconn=conn
-                if maxconn == numb_cand-1:
-                    break
-        # pivot node is max connected in cand from done or cand
-        if maxconndone > maxconn:
-            pivotnbrs = pivotdonenbrs
-        # save search status for later backout
-        stack.append( (cand, done, smallcand) )
-        cand=new_cand
-        done=new_done
-        smallcand = cand - pivotnbrs
-
-
-def find_cliques_recursive(G):
-    """Recursive search for all maximal cliques in a graph.
-
-    Maximal cliques are the largest complete subgraph containing
-    a given point.  The largest maximal clique is sometimes called
-    the maximum clique.
-
-    Returns
-    -------
-    list of lists: list of members in each maximal clique
-
-    See Also
-    --------
-    find_cliques : An nonrecursive version of the same algorithm
-
-    Notes
-    -----
-    Based on the algorithm published by Bron & Kerbosch (1973) [1]_
-    as adapated by Tomita, Tanaka and Takahashi (2006) [2]_
-    and discussed in Cazals and Karande (2008) [3]_.
-
-    This implementation returns a list of lists each of
-    which contains the members of a maximal clique.
-
-    This algorithm ignores self-loops and parallel edges as
-    clique is not conventionally defined with such edges.
-
-    References
-    ----------
-    .. [1] Bron, C. and Kerbosch, J. 1973.
-       Algorithm 457: finding all cliques of an undirected graph.
-       Commun. ACM 16, 9 (Sep. 1973), 575-577.
-       http://portal.acm.org/citation.cfm?doid=362342.362367
-
-    .. [2] Etsuji Tomita, Akira Tanaka, Haruhisa Takahashi,
-       The worst-case time complexity for generating all maximal
-       cliques and computational experiments,
-       Theoretical Computer Science, Volume 363, Issue 1,
-       Computing and Combinatorics,
-       10th Annual International Conference on
-       Computing and Combinatorics (COCOON 2004), 25 October 2006, Pages 28-42
-       http://dx.doi.org/10.1016/j.tcs.2006.06.015
-
-    .. [3] F. Cazals, C. Karande,
-       A note on the problem of reporting maximal cliques,
-       Theoretical Computer Science,
-       Volume 407, Issues 1-3, 6 November 2008, Pages 564-568,
-       http://dx.doi.org/10.1016/j.tcs.2008.05.010
-    """
-    nnbrs={}
-    for n,nbrs in G.adjacency_iter():
-        nbrs=set(nbrs)
-        nbrs.discard(n)
-        nnbrs[n]=nbrs
-    if not nnbrs: return [] # empty graph
-    cand=set(nnbrs)
-    done=set()
-    clique_so_far=[]
-    cliques=[]
-    _extend(nnbrs,cand,done,clique_so_far,cliques)
-    return cliques
-
-def _extend(nnbrs,cand,done,so_far,cliques):
-    # find pivot node (max connections in cand)
-    maxconn=-1
-    numb_cand=len(cand)
-    for n in done:
-        cn = cand & nnbrs[n]
-        conn=len(cn)
-        if conn > maxconn:
-            pivotnbrs=cn
-            maxconn=conn
-            if conn==numb_cand:
-                # All possible cliques already found
-                return
-    for n in cand:
-        cn = cand & nnbrs[n]
-        conn=len(cn)
-        if conn > maxconn:
-            pivotnbrs=cn
-            maxconn=conn
-    # Use pivot to reduce number of nodes to examine
-    smallercand = set(cand - pivotnbrs)
-    for n in smallercand:
-        cand.remove(n)
-        so_far.append(n)
-        nn=nnbrs[n]
-        new_cand=cand & nn
-        new_done=done & nn
-        if not new_cand and not new_done:
-            # Found the clique
-            cliques.append(so_far[:])
-        elif not new_done and len(new_cand) is 1:
-            # shortcut if only one node left
-            cliques.append(so_far+list(new_cand))
-        else:
-            _extend(nnbrs, new_cand, new_done, so_far, cliques)
-        done.add(so_far.pop())
-
-
-def make_max_clique_graph(G,create_using=None,name=None):
-    """ Create the maximal clique graph of a graph.
-
-    Finds the maximal cliques and treats these as nodes.
-    The nodes are connected if they have common members in
-    the original graph.  Theory has done a lot with clique
-    graphs, but I haven't seen much on maximal clique graphs.
-
-    Notes
-    -----
-    This should be the same as make_clique_bipartite followed
-    by project_up, but it saves all the intermediate steps.
-    """
-    cliq=list(map(set,find_cliques(G)))
-    if create_using:
-        B=create_using
-        B.clear()
-    else:
-        B=networkx.Graph()
-    if name is not None:
-        B.name=name
-
-    for i,cl in enumerate(cliq):
-        B.add_node(i+1)
-        for j,other_cl in enumerate(cliq[:i]):
-            # if not cl.isdisjoint(other_cl): #Requires 2.6
-            intersect=cl & other_cl
-            if intersect:     # Not empty
-                B.add_edge(i+1,j+1)
-    return B
-
-def make_clique_bipartite(G,fpos=None,create_using=None,name=None):
-    """Create a bipartite clique graph from a graph G.
-
-    Nodes of G are retained as the "bottom nodes" of B and
-    cliques of G become "top nodes" of B.
-    Edges are present if a bottom node belongs to the clique
-    represented by the top node.
-
-    Returns a Graph with additional attribute dict B.node_type
-    which is keyed by nodes to "Bottom" or "Top" appropriately.
-
-    if fpos is not None, a second additional attribute dict B.pos
-    is created to hold the position tuple of each node for viewing
-    the bipartite graph.
-    """
-    cliq=list(find_cliques(G))
-    if create_using:
-        B=create_using
-        B.clear()
-    else:
-        B=networkx.Graph()
-    if name is not None:
-        B.name=name
-
-    B.add_nodes_from(G)
-    B.node_type={}   # New Attribute for B
-    for n in B:
-        B.node_type[n]="Bottom"
-
-    if fpos:
-       B.pos={}     # New Attribute for B
-       delta_cpos=1./len(cliq)
-       delta_ppos=1./G.order()
-       cpos=0.
-       ppos=0.
-    for i,cl in enumerate(cliq):
-       name= -i-1   # Top nodes get negative names
-       B.add_node(name)
-       B.node_type[name]="Top"
-       if fpos:
-          if name not in B.pos:
-             B.pos[name]=(0.2,cpos)
-             cpos +=delta_cpos
-       for v in cl:
-          B.add_edge(name,v)
-          if fpos is not None:
-             if v not in B.pos:
-                B.pos[v]=(0.8,ppos)
-                ppos +=delta_ppos
-    return B
-
-def project_down(B,create_using=None,name=None):
-    """Project a bipartite graph B down onto its "bottom nodes".
-
-    The nodes retain their names and are connected if they
-    share a common top node in the bipartite graph.
-
-    Returns a Graph.
-    """
-    if create_using:
-        G=create_using
-        G.clear()
-    else:
-        G=networkx.Graph()
-    if name is not None:
-        G.name=name
-
-    for v,Bvnbrs in B.adjacency_iter():
-       if B.node_type[v]=="Bottom":
-          G.add_node(v)
-          for cv in Bvnbrs:
-             G.add_edges_from([(v,u) for u in B[cv] if u!=v])
-    return G
-
-def project_up(B,create_using=None,name=None):
-    """Project a bipartite graph B down onto its "bottom nodes".
-
-    The nodes retain their names and are connected if they
-    share a common Bottom Node in the Bipartite Graph.
-
-    Returns a Graph.
-    """
-    if create_using:
-        G=create_using
-        G.clear()
-    else:
-        G=networkx.Graph()
-    if name is not None:
-        G.name=name
-
-    for v,Bvnbrs in B.adjacency_iter():
-       if B.node_type[v]=="Top":
-          vname= -v   #Change sign of name for Top Nodes
-          G.add_node(vname)
-          for cv in Bvnbrs:
-             # Note: -u changes the name (not Top node anymore)
-             G.add_edges_from([(vname,-u) for u in B[cv] if u!=v])
-    return G
-
-def graph_clique_number(G,cliques=None):
-    """Return the clique number (size of the largest clique) for G.
-
-    An optional list of cliques can be input if already computed.
-    """
-    if cliques is None:
-        cliques=find_cliques(G)
-    return   max( [len(c) for c in cliques] )
-
-
-def graph_number_of_cliques(G,cliques=None):
-    """Returns the number of maximal cliques in G.
-
-    An optional list of cliques can be input if already computed.
-    """
-    if cliques is None:
-        cliques=list(find_cliques(G))
-    return   len(cliques)
-
-
-def node_clique_number(G,nodes=None,cliques=None):
-    """ Returns the size of the largest maximal clique containing
-    each given node.
-
-    Returns a single or list depending on input nodes.
-    Optional list of cliques can be input if already computed.
-    """
-    if cliques is None:
-        if nodes is not None:
-            # Use ego_graph to decrease size of graph
-            if isinstance(nodes,list):
-                d={}
-                for n in nodes:
-                    H=networkx.ego_graph(G,n)
-                    d[n]=max( (len(c) for c in find_cliques(H)) )
-            else:
-                H=networkx.ego_graph(G,nodes)
-                d=max( (len(c) for c in find_cliques(H)) )
-            return d
-        # nodes is None--find all cliques
-        cliques=list(find_cliques(G))
-
-    if nodes is None:
-        nodes=G.nodes()   # none, get entire graph
-
-    if not isinstance(nodes, list):   # check for a list
-        v=nodes
-        # assume it is a single value
-        d=max([len(c) for c in cliques if v in c])
-    else:
-        d={}
-        for v in nodes:
-            d[v]=max([len(c) for c in cliques if v in c])
-    return d
-
-    # if nodes is None:                 # none, use entire graph
-    #     nodes=G.nodes()
-    # elif  not isinstance(nodes, list):    # check for a list
-    #     nodes=[nodes]             # assume it is a single value
-
-    # if cliques is None:
-    #     cliques=list(find_cliques(G))
-    # d={}
-    # for v in nodes:
-    #     d[v]=max([len(c) for c in cliques if v in c])
-
-    # if nodes in G:
-    #     return d[v] #return single value
-    # return d
-
-
-def number_of_cliques(G,nodes=None,cliques=None):
-    """Returns the number of maximal cliques for each node.
-
-    Returns a single or list depending on input nodes.
-    Optional list of cliques can be input if already computed.
-    """
-    if cliques is None:
-        cliques=list(find_cliques(G))
-
-    if nodes is None:
-        nodes=G.nodes()   # none, get entire graph
-
-    if not isinstance(nodes, list):   # check for a list
-        v=nodes
-        # assume it is a single value
-        numcliq=len([1 for c in cliques if v in c])
-    else:
-        numcliq={}
-        for v in nodes:
-            numcliq[v]=len([1 for c in cliques if v in c])
-    return numcliq
-
-
-def cliques_containing_node(G,nodes=None,cliques=None):
-    """Returns a list of cliques containing the given node.
-
-    Returns a single list or list of lists depending on input nodes.
-    Optional list of cliques can be input if already computed.
-    """
-    if cliques is None:
-        cliques=list(find_cliques(G))
-
-    if nodes is None:
-        nodes=G.nodes()   # none, get entire graph
-
-    if not isinstance(nodes, list):   # check for a list
-        v=nodes
-        # assume it is a single value
-        vcliques=[c for c in cliques if v in c]
-    else:
-        vcliques={}
-        for v in nodes:
-            vcliques[v]=[c for c in cliques if v in c]
-    return vcliques
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/cluster.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/cluster.py
deleted file mode 100644
index a442431..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/cluster.py
+++ /dev/null
@@ -1,363 +0,0 @@
-# -*- coding: utf-8 -*-
-"""Algorithms to characterize the number of triangles in a graph."""
-from itertools import combinations
-import networkx as nx
-from networkx import NetworkXError
-__author__ = """\n""".join(['Aric Hagberg <aric.hagberg@gmail.com>',
-                            'Dan Schult (dschult@colgate.edu)',
-                            'Pieter Swart (swart@lanl.gov)',
-                            'Jordi Torrents <jtorrents@milnou.net>'])
-#    Copyright (C) 2004-2011 by 
-#    Aric Hagberg <hagberg@lanl.gov>
-#    Dan Schult <dschult@colgate.edu>
-#    Pieter Swart <swart@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-__all__= ['triangles', 'average_clustering', 'clustering', 'transitivity',
-          'square_clustering']
-
-def triangles(G, nodes=None):
-    """Compute the number of triangles.
-
-    Finds the number of triangles that include a node as one vertex.
-
-    Parameters
-    ----------
-    G : graph
-       A networkx graph
-    nodes : container of nodes, optional (default= all nodes in G)
-       Compute triangles for nodes in this container. 
-
-    Returns
-    -------
-    out : dictionary
-       Number of triangles keyed by node label.
-    
-    Examples
-    --------
-    >>> G=nx.complete_graph(5)
-    >>> print(nx.triangles(G,0))
-    6
-    >>> print(nx.triangles(G))
-    {0: 6, 1: 6, 2: 6, 3: 6, 4: 6}
-    >>> print(list(nx.triangles(G,(0,1)).values()))
-    [6, 6]
-
-    Notes
-    -----
-    When computing triangles for the entire graph each triangle is counted 
-    three times, once at each node.  Self loops are ignored.
-
-    """
-    if G.is_directed():
-        raise NetworkXError("triangles() is not defined for directed graphs.")
-    if nodes in G: 
-        # return single value
-        return next(_triangles_and_degree_iter(G,nodes))[2] // 2
-    return dict( (v,t // 2) for v,d,t in _triangles_and_degree_iter(G,nodes))
-
-def _triangles_and_degree_iter(G,nodes=None):
-    """ Return an iterator of (node, degree, triangles).  
-
-    This double counts triangles so you may want to divide by 2.
-    See degree() and triangles() for definitions and details.
-
-    """
-    if G.is_multigraph():
-        raise NetworkXError("Not defined for multigraphs.")
-
-    if nodes is None:
-        nodes_nbrs = G.adj.items()
-    else:
-        nodes_nbrs= ( (n,G[n]) for n in G.nbunch_iter(nodes) )
-
-    for v,v_nbrs in nodes_nbrs:
-        vs=set(v_nbrs)-set([v])
-        ntriangles=0
-        for w in vs:
-            ws=set(G[w])-set([w])
-            ntriangles+=len(vs.intersection(ws))
-        yield (v,len(vs),ntriangles)
-
-
-def _weighted_triangles_and_degree_iter(G, nodes=None, weight='weight'):
-    """ Return an iterator of (node, degree, weighted_triangles).  
-    
-    Used for weighted clustering.
-
-    """
-    if G.is_multigraph():
-        raise NetworkXError("Not defined for multigraphs.")
-
-    if weight is None or G.edges()==[]:
-        max_weight=1.0
-    else:
-        max_weight=float(max(d.get(weight,1.0) 
-                             for u,v,d in G.edges(data=True)))
-    if nodes is None:
-        nodes_nbrs = G.adj.items()
-    else:
-        nodes_nbrs= ( (n,G[n]) for n in G.nbunch_iter(nodes) )
-
-    for i,nbrs in nodes_nbrs:
-        inbrs=set(nbrs)-set([i])
-        weighted_triangles=0.0
-        seen=set()
-        for j in inbrs:
-            wij=G[i][j].get(weight,1.0)/max_weight
-            seen.add(j)
-            jnbrs=set(G[j])-seen # this keeps from double counting
-            for k in inbrs&jnbrs:
-                wjk=G[j][k].get(weight,1.0)/max_weight
-                wki=G[i][k].get(weight,1.0)/max_weight
-                weighted_triangles+=(wij*wjk*wki)**(1.0/3.0)
-        yield (i,len(inbrs),weighted_triangles*2)
-
-
-def average_clustering(G, nodes=None, weight=None, count_zeros=True):
-    r"""Compute the average clustering coefficient for the graph G.
-
-    The clustering coefficient for the graph is the average, 
-
-    .. math::
-
-       C = \frac{1}{n}\sum_{v \in G} c_v,
-       
-    where `n` is the number of nodes in `G`.
-
-    Parameters
-    ----------
-    G : graph
-
-    nodes : container of nodes, optional (default=all nodes in G)
-       Compute average clustering for nodes in this container. 
-
-    weight : string or None, optional (default=None)
-       The edge attribute that holds the numerical value used as a weight.
-       If None, then each edge has weight 1.
-
-    count_zeros : bool (default=False)       
-       If False include only the nodes with nonzero clustering in the average.
-
-    Returns
-    -------
-    avg : float
-       Average clustering
-    
-    Examples
-    --------
-    >>> G=nx.complete_graph(5)
-    >>> print(nx.average_clustering(G))
-    1.0
-
-    Notes
-    -----
-    This is a space saving routine; it might be faster
-    to use the clustering function to get a list and then take the average.
-
-    Self loops are ignored.
-
-    References
-    ----------
-    .. [1] Generalizations of the clustering coefficient to weighted 
-       complex networks by J. Saramäki, M. Kivelä, J.-P. Onnela, 
-       K. Kaski, and J. Kertész, Physical Review E, 75 027105 (2007).  
-       http://jponnela.com/web_documents/a9.pdf
-    .. [2] Marcus Kaiser,  Mean clustering coefficients: the role of isolated 
-       nodes and leafs on clustering measures for small-world networks.
-       http://arxiv.org/abs/0802.2512
-    """
-    c=clustering(G,nodes,weight=weight).values()
-    if not count_zeros:
-        c = [v for v in c if v > 0]
-    return sum(c)/float(len(c))
-
-def clustering(G, nodes=None, weight=None):
-    r"""Compute the clustering coefficient for nodes.
-
-    For unweighted graphs, the clustering of a node `u`
-    is the fraction of possible triangles through that node that exist,
-
-    .. math::
-
-      c_u = \frac{2 T(u)}{deg(u)(deg(u)-1)},
-
-    where `T(u)` is the number of triangles through node `u` and
-    `deg(u)` is the degree of `u`.
-
-    For weighted graphs, the clustering is defined
-    as the geometric average of the subgraph edge weights [1]_,
-
-    .. math::
-
-       c_u = \frac{1}{deg(u)(deg(u)-1))}
-            \sum_{uv} (\hat{w}_{uv} \hat{w}_{uw} \hat{w}_{vw})^{1/3}.
-      
-    The edge weights `\hat{w}_{uv}` are normalized by the maximum weight in the
-    network `\hat{w}_{uv} = w_{uv}/\max(w)`.
-
-    The value of `c_u` is assigned to 0 if `deg(u) < 2`.
-
-    Parameters
-    ----------
-    G : graph
-
-    nodes : container of nodes, optional (default=all nodes in G)
-       Compute clustering for nodes in this container. 
-
-    weight : string or None, optional (default=None)
-       The edge attribute that holds the numerical value used as a weight.
-       If None, then each edge has weight 1.
-
-    Returns
-    -------
-    out : float, or dictionary
-       Clustering coefficient at specified nodes
-
-    Examples
-    --------
-    >>> G=nx.complete_graph(5)
-    >>> print(nx.clustering(G,0))
-    1.0
-    >>> print(nx.clustering(G))
-    {0: 1.0, 1: 1.0, 2: 1.0, 3: 1.0, 4: 1.0}
-
-    Notes
-    -----
-    Self loops are ignored.
-
-    References
-    ----------
-    .. [1] Generalizations of the clustering coefficient to weighted 
-       complex networks by J. Saramäki, M. Kivelä, J.-P. Onnela, 
-       K. Kaski, and J. Kertész, Physical Review E, 75 027105 (2007).  
-       http://jponnela.com/web_documents/a9.pdf
-    """
-    if G.is_directed():
-        raise NetworkXError('Clustering algorithms are not defined ',
-                            'for directed graphs.')
-    if weight is not None:
-        td_iter=_weighted_triangles_and_degree_iter(G,nodes,weight)
-    else:
-        td_iter=_triangles_and_degree_iter(G,nodes)
-
-    clusterc={}
-
-    for v,d,t in td_iter:
-        if t==0:
-            clusterc[v]=0.0
-        else:
-            clusterc[v]=t/float(d*(d-1))
-
-    if nodes in G: 
-        return list(clusterc.values())[0] # return single value
-    return clusterc
-
-def transitivity(G):
-    r"""Compute graph transitivity, the fraction of all possible triangles 
-    present in G.
-
-    Possible triangles are identified by the number of "triads" 
-    (two edges with a shared vertex).
-
-    The transitivity is
-
-    .. math::
-
-        T = 3\frac{\#triangles}{\#triads}.
-
-    Parameters
-    ----------
-    G : graph
-
-    Returns
-    -------
-    out : float
-       Transitivity
-
-    Examples
-    --------
-    >>> G = nx.complete_graph(5)
-    >>> print(nx.transitivity(G))
-    1.0
-    """
-    triangles=0 # 6 times number of triangles
-    contri=0  # 2 times number of connected triples
-    for v,d,t in _triangles_and_degree_iter(G):
-        contri += d*(d-1)
-        triangles += t
-    if triangles==0: # we had no triangles or possible triangles
-        return 0.0
-    else:
-        return triangles/float(contri)
-
-def square_clustering(G, nodes=None):
-    r""" Compute the squares clustering coefficient for nodes.
-
-    For each node return the fraction of possible squares that exist at
-    the node [1]_
-
-    .. math::
-       C_4(v) = \frac{ \sum_{u=1}^{k_v} 
-       \sum_{w=u+1}^{k_v} q_v(u,w) }{ \sum_{u=1}^{k_v} 
-       \sum_{w=u+1}^{k_v} [a_v(u,w) + q_v(u,w)]},
-    
-    where `q_v(u,w)` are the number of common neighbors of `u` and `w` 
-    other than `v` (ie squares), and 
-    `a_v(u,w) = (k_u - (1+q_v(u,w)+\theta_{uv}))(k_w - (1+q_v(u,w)+\theta_{uw}))`,
-    where `\theta_{uw} = 1` if `u` and `w` are connected and 0 otherwise.
-
-    Parameters
-    ----------
-    G : graph
-
-    nodes : container of nodes, optional (default=all nodes in G)
-       Compute clustering for nodes in this container. 
-        
-    Returns
-    -------
-    c4 : dictionary
-       A dictionary keyed by node with the square clustering coefficient value. 
-
-    Examples
-    --------
-    >>> G=nx.complete_graph(5)
-    >>> print(nx.square_clustering(G,0))
-    1.0
-    >>> print(nx.square_clustering(G))
-    {0: 1.0, 1: 1.0, 2: 1.0, 3: 1.0, 4: 1.0}
-
-    Notes
-    -----
-    While `C_3(v)` (triangle clustering) gives the probability that
-    two neighbors of node v are connected with each other, `C_4(v)` is
-    the probability that two neighbors of node v share a common
-    neighbor different from v. This algorithm can be applied to both
-    bipartite and unipartite networks.
- 
-    References
-    ----------
-    .. [1] Pedro G. Lind, Marta C. González, and Hans J. Herrmann. 2005
-        Cycles and clustering in bipartite networks.
-        Physical Review E (72) 056127.
-    """
-    if nodes is None:
-        node_iter = G
-    else:
-        node_iter =  G.nbunch_iter(nodes) 
-    clustering = {}
-    for v in node_iter:
-        clustering[v] = 0.0
-        potential=0
-        for u,w in combinations(G[v], 2):
-            squares = len((set(G[u]) & set(G[w])) - set([v]))
-            clustering[v] += squares
-            degm = squares + 1.0
-            if w in G[u]:
-                degm += 1
-            potential += (len(G[u]) - degm) * (len(G[w]) - degm) + squares
-        if potential > 0:
-            clustering[v] /= potential
-    if nodes in G: 
-        return list(clustering.values())[0] # return single value
-    return clustering
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/community/__init__.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/community/__init__.py
deleted file mode 100644
index c3c2285..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/community/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-from networkx.algorithms.community.kclique import *
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/community/kclique.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/community/kclique.py
deleted file mode 100644
index dc95b58..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/community/kclique.py
+++ /dev/null
@@ -1,82 +0,0 @@
-#-*- coding: utf-8 -*-
-#    Copyright (C) 2011 by 
-#    Conrad Lee <conradlee@gmail.com>
-#    Aric Hagberg <hagberg@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-from collections import defaultdict
-import networkx as nx
-__author__ = """\n""".join(['Conrad Lee <conradlee@gmail.com>',
-                            'Aric Hagberg <aric.hagberg@gmail.com>'])
-__all__ = ['k_clique_communities']
-
-def k_clique_communities(G, k, cliques=None):
-    """Find k-clique communities in graph using the percolation method.
-
-    A k-clique community is the union of all cliques of size k that
-    can be reached through adjacent (sharing k-1 nodes) k-cliques.
-
-    Parameters
-    ----------
-    G : NetworkX graph
-
-    k : int
-       Size of smallest clique
-
-    cliques: list or generator       
-       Precomputed cliques (use networkx.find_cliques(G))
-
-    Returns
-    -------
-    Yields sets of nodes, one for each k-clique community.
-
-    Examples
-    --------
-    >>> G = nx.complete_graph(5)
-    >>> K5 = nx.convert_node_labels_to_integers(G,first_label=2)
-    >>> G.add_edges_from(K5.edges())
-    >>> c = list(nx.k_clique_communities(G, 4))
-    >>> list(c[0])
-    [0, 1, 2, 3, 4, 5, 6]
-    >>> list(nx.k_clique_communities(G, 6))
-    []
-
-    References
-    ----------
-    .. [1] Gergely Palla, Imre Derényi, Illés Farkas1, and Tamás Vicsek,
-       Uncovering the overlapping community structure of complex networks 
-       in nature and society Nature 435, 814-818, 2005,
-       doi:10.1038/nature03607
-    """
-    if k < 2:
-        raise nx.NetworkXError("k=%d, k must be greater than 1."%k)
-    if cliques is None:
-        cliques = nx.find_cliques(G)
-    cliques = [frozenset(c) for c in cliques if len(c) >= k]
-
-    # First index which nodes are in which cliques
-    membership_dict = defaultdict(list)
-    for clique in cliques:
-        for node in clique:
-            membership_dict[node].append(clique)
-
-    # For each clique, see which adjacent cliques percolate
-    perc_graph = nx.Graph()
-    perc_graph.add_nodes_from(cliques)
-    for clique in cliques:
-        for adj_clique in _get_adjacent_cliques(clique, membership_dict):
-            if len(clique.intersection(adj_clique)) >= (k - 1):
-                perc_graph.add_edge(clique, adj_clique)
-
-    # Connected components of clique graph with perc edges
-    # are the percolated cliques
-    for component in nx.connected_components(perc_graph):
-        yield(frozenset.union(*component))
-
-def _get_adjacent_cliques(clique, membership_dict):
-    adjacent_cliques = set()
-    for n in clique:
-        for adj_clique in membership_dict[n]:
-            if clique != adj_clique:
-                adjacent_cliques.add(adj_clique)
-    return adjacent_cliques
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/community/tests/test_kclique.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/community/tests/test_kclique.py
deleted file mode 100644
index 8debca6..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/community/tests/test_kclique.py
+++ /dev/null
@@ -1,46 +0,0 @@
-#!/usr/bin/env python
-from nose.tools import *
-import networkx as nx
-from itertools import combinations
-from networkx import k_clique_communities
-
-def test_overlaping_K5():
-    G = nx.Graph()
-    G.add_edges_from(combinations(range(5), 2)) # Add a five clique
-    G.add_edges_from(combinations(range(2,7), 2)) # Add another five clique
-    c = list(nx.k_clique_communities(G, 4))
-    assert_equal(c,[frozenset([0, 1, 2, 3, 4, 5, 6])])
-    c= list(nx.k_clique_communities(G, 5))
-    assert_equal(set(c),set([frozenset([0,1,2,3,4]),frozenset([2,3,4,5,6])]))
-
-def test_isolated_K5():
-    G = nx.Graph()
-    G.add_edges_from(combinations(range(0,5), 2)) # Add a five clique
-    G.add_edges_from(combinations(range(5,10), 2)) # Add another five clique
-    c= list(nx.k_clique_communities(G, 5))
-    assert_equal(set(c),set([frozenset([0,1,2,3,4]),frozenset([5,6,7,8,9])]))
-
-def test_zachary():
-    z = nx.karate_club_graph()
-    # clique percolation with k=2 is just connected components
-    zachary_k2_ground_truth = set([frozenset(z.nodes())])
-    zachary_k3_ground_truth = set([frozenset([0, 1, 2, 3, 7, 8, 12, 13, 14, 
-                                              15, 17, 18, 19, 20, 21, 22, 23, 
-                                              26, 27, 28, 29, 30, 31, 32, 33]),
-                                   frozenset([0, 4, 5, 6, 10, 16]),
-                                   frozenset([24, 25, 31])])
-    zachary_k4_ground_truth = set([frozenset([0, 1, 2, 3, 7, 13]),
-                                   frozenset([8, 32, 30, 33]),
-                                   frozenset([32, 33, 29, 23])])
-    zachary_k5_ground_truth = set([frozenset([0, 1, 2, 3, 7, 13])])
-    zachary_k6_ground_truth = set([])
-
-    assert set(k_clique_communities(z, 2)) == zachary_k2_ground_truth
-    assert set(k_clique_communities(z, 3)) == zachary_k3_ground_truth
-    assert set(k_clique_communities(z, 4)) == zachary_k4_ground_truth
-    assert set(k_clique_communities(z, 5)) == zachary_k5_ground_truth
-    assert set(k_clique_communities(z, 6)) == zachary_k6_ground_truth
-
-@raises(nx.NetworkXError)
-def test_bad_k():
-    c = list(k_clique_communities(nx.Graph(),1))
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/components/__init__.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/components/__init__.py
deleted file mode 100644
index 36c9391..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/components/__init__.py
+++ /dev/null
@@ -1,5 +0,0 @@
-from networkx.algorithms.components.connected import *
-from networkx.algorithms.components.strongly_connected import *
-from networkx.algorithms.components.weakly_connected import *
-from networkx.algorithms.components.attracting import *
-from networkx.algorithms.components.biconnected import *
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/components/attracting.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/components/attracting.py
deleted file mode 100644
index d0e75c2..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/components/attracting.py
+++ /dev/null
@@ -1,133 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-Attracting components.
-"""
-#    Copyright (C) 2004-2011 by 
-#    Aric Hagberg <hagberg@lanl.gov>
-#    Dan Schult <dschult@colgate.edu>
-#    Pieter Swart <swart@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-import networkx as nx
-__authors__ = "\n".join(['Christopher Ellison'])
-__all__ = ['number_attracting_components', 
-           'attracting_components',
-           'is_attracting_component', 
-           'attracting_component_subgraphs',
-           ]
-
-def attracting_components(G):
-    """Returns a list of attracting components in `G`.
-
-    An attracting component in a directed graph `G` is a strongly connected
-    component with the property that a random walker on the graph will never
-    leave the component, once it enters the component.
-
-    The nodes in attracting components can also be thought of as recurrent
-    nodes.  If a random walker enters the attractor containing the node, then
-    the node will be visited infinitely often.
-
-    Parameters
-    ----------
-    G : DiGraph, MultiDiGraph
-        The graph to be analyzed.
-
-    Returns
-    -------
-    attractors : list
-        The list of attracting components, sorted from largest attracting
-        component to smallest attracting component.
-
-    See Also
-    --------
-    number_attracting_components
-    is_attracting_component 
-    attracting_component_subgraphs
-
-    """
-    scc = nx.strongly_connected_components(G)
-    cG = nx.condensation(G, scc)
-    attractors = [scc[n] for n in cG if cG.out_degree(n) == 0]
-    attractors.sort(key=len,reverse=True)
-    return attractors
-
-
-def number_attracting_components(G):
-    """Returns the number of attracting components in `G`.
-
-    Parameters
-    ----------
-    G : DiGraph, MultiDiGraph
-        The graph to be analyzed.
-
-    Returns
-    -------
-    n : int
-        The number of attracting components in G.
-
-    See Also
-    --------
-    attracting_components
-    is_attracting_component
-    attracting_component_subgraphs
-
-    """
-    n = len(attracting_components(G))
-    return n
-
-
-def is_attracting_component(G):
-    """Returns True if `G` consists of a single attracting component.
-
-    Parameters
-    ----------
-    G : DiGraph, MultiDiGraph
-        The graph to be analyzed.
-
-    Returns
-    -------
-    attracting : bool
-        True if `G` has a single attracting component. Otherwise, False.
-
-    See Also
-    --------
-    attracting_components
-    number_attracting_components
-    attracting_component_subgraphs
-
-    """
-    ac = attracting_components(G)
-    if len(ac[0]) == len(G):
-        attracting = True
-    else:
-        attracting = False
-    return attracting
-
-
-def attracting_component_subgraphs(G):
-    """Returns a list of attracting component subgraphs from `G`.
-
-    Parameters
-    ----------
-    G : DiGraph, MultiDiGraph
-        The graph to be analyzed.
-
-    Returns
-    -------
-    subgraphs : list
-        A list of node-induced subgraphs of the attracting components of `G`.
-    
-    Notes
-    -----
-    Graph, node, and edge attributes are copied to the subgraphs.
-
-    See Also
-    --------
-    attracting_components
-    number_attracting_components
-    is_attracting_component
-
-    """
-    subgraphs = [G.subgraph(ac).copy() for ac in attracting_components(G)]
-    return subgraphs
-
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/components/biconnected.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/components/biconnected.py
deleted file mode 100644
index 0185c2c..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/components/biconnected.py
+++ /dev/null
@@ -1,417 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-Biconnected components and articulation points.
-"""
-#    Copyright (C) 2011 by 
-#    Aric Hagberg <hagberg@lanl.gov>
-#    Dan Schult <dschult@colgate.edu>
-#    Pieter Swart <swart@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-from itertools import chain
-import networkx as nx
-__author__ = '\n'.join(['Jordi Torrents <jtorrents@milnou.net>',
-                        'Dan Schult <dschult@colgate.edu>',
-                        'Aric Hagberg <aric.hagberg@gmail.com>'])
-__all__ = ['biconnected_components',
-           'biconnected_component_edges',
-           'biconnected_component_subgraphs',
-           'is_biconnected',
-           'articulation_points',
-           ]
-
-def is_biconnected(G):
-    """Return True if the graph is biconnected, False otherwise.
-
-    A graph is biconnected if, and only if, it cannot be disconnected by
-    removing only one node (and all edges incident on that node). If
-    removing a node increases the number of disconnected components
-    in the graph, that node is called an articulation point, or cut
-    vertex.  A biconnected graph has no articulation points.
-
-    Parameters
-    ----------
-    G : NetworkX Graph
-        An undirected graph.
-
-    Returns
-    -------
-    biconnected : bool
-        True if the graph is biconnected, False otherwise.
-
-    Raises
-    ------
-    NetworkXError :
-        If the input graph is not undirected.
-
-    Examples
-    --------
-    >>> G=nx.path_graph(4)
-    >>> print(nx.is_biconnected(G))
-    False
-    >>> G.add_edge(0,3)
-    >>> print(nx.is_biconnected(G))
-    True
-
-    See Also
-    --------
-    biconnected_components,
-    articulation_points,
-    biconnected_component_edges,
-    biconnected_component_subgraphs
-
-    Notes
-    -----
-    The algorithm to find articulation points and biconnected
-    components is implemented using a non-recursive depth-first-search
-    (DFS) that keeps track of the highest level that back edges reach
-    in the DFS tree. A node `n` is an articulation point if, and only
-    if, there exists a subtree rooted at `n` such that there is no
-    back edge from any successor of `n` that links to a predecessor of
-    `n` in the DFS tree. By keeping track of all the edges traversed
-    by the DFS we can obtain the biconnected components because all
-    edges of a bicomponent will be traversed consecutively between
-    articulation points.
-
-    References
-    ----------
-    .. [1] Hopcroft, J.; Tarjan, R. (1973). 
-       "Efficient algorithms for graph manipulation". 
-       Communications of the ACM 16: 372–378. doi:10.1145/362248.362272
-    """
-    bcc = list(biconnected_components(G))
-    if not bcc: # No bicomponents (it could be an empty graph)
-        return False
-    return len(bcc[0]) == len(G)
-
-def biconnected_component_edges(G):
-    """Return a generator of lists of edges, one list for each biconnected
-    component of the input graph.
-
-    Biconnected components are maximal subgraphs such that the removal of a
-    node (and all edges incident on that node) will not disconnect the
-    subgraph. Note that nodes may be part of more than one biconnected
-    component. Those nodes are articulation points, or cut vertices. However, 
-    each edge belongs to one, and only one, biconnected component.
-
-    Notice that by convention a dyad is considered a biconnected component.
-
-    Parameters
-    ----------
-    G : NetworkX Graph
-        An undirected graph.
-
-    Returns
-    -------
-    edges : generator
-        Generator of lists of edges, one list for each bicomponent.
-
-    Raises
-    ------
-    NetworkXError :
-        If the input graph is not undirected.
-
-    Examples
-    --------
-    >>> G = nx.barbell_graph(4,2)
-    >>> print(nx.is_biconnected(G))
-    False
-    >>> components = nx.biconnected_component_edges(G)
-    >>> G.add_edge(2,8)
-    >>> print(nx.is_biconnected(G))
-    True
-    >>> components = nx.biconnected_component_edges(G)
-
-    See Also
-    --------
-    is_biconnected,
-    biconnected_components,
-    articulation_points,
-    biconnected_component_subgraphs
-
-    Notes
-    -----
-    The algorithm to find articulation points and biconnected
-    components is implemented using a non-recursive depth-first-search
-    (DFS) that keeps track of the highest level that back edges reach
-    in the DFS tree. A node `n` is an articulation point if, and only
-    if, there exists a subtree rooted at `n` such that there is no
-    back edge from any successor of `n` that links to a predecessor of
-    `n` in the DFS tree. By keeping track of all the edges traversed
-    by the DFS we can obtain the biconnected components because all
-    edges of a bicomponent will be traversed consecutively between
-    articulation points.
- 
-    References
-    ----------
-    .. [1] Hopcroft, J.; Tarjan, R. (1973). 
-       "Efficient algorithms for graph manipulation". 
-       Communications of the ACM 16: 372–378. doi:10.1145/362248.362272
-    """
-    return sorted(_biconnected_dfs(G,components=True), key=len, reverse=True)
-
-def biconnected_components(G):
-    """Return a generator of sets of nodes, one set for each biconnected
-    component of the graph
-
-    Biconnected components are maximal subgraphs such that the removal of a
-    node (and all edges incident on that node) will not disconnect the
-    subgraph. Note that nodes may be part of more than one biconnected
-    component. Those nodes are articulation points, or cut vertices. The 
-    removal of articulation points will increase the number of connected 
-    components of the graph.
-
-    Notice that by convention a dyad is considered a biconnected component.
-
-    Parameters
-    ----------
-    G : NetworkX Graph
-        An undirected graph.
-
-    Returns
-    -------
-    nodes : generator
-        Generator of sets of nodes, one set for each biconnected component.
-
-    Raises
-    ------
-    NetworkXError :
-        If the input graph is not undirected.
-
-    Examples
-    --------
-    >>> G = nx.barbell_graph(4,2)
-    >>> print(nx.is_biconnected(G))
-    False
-    >>> components = nx.biconnected_components(G)
-    >>> G.add_edge(2,8)
-    >>> print(nx.is_biconnected(G))
-    True
-    >>> components = nx.biconnected_components(G)
-
-    See Also
-    --------
-    is_biconnected,
-    articulation_points,
-    biconnected_component_edges,
-    biconnected_component_subgraphs
-
-    Notes
-    -----
-    The algorithm to find articulation points and biconnected
-    components is implemented using a non-recursive depth-first-search
-    (DFS) that keeps track of the highest level that back edges reach
-    in the DFS tree. A node `n` is an articulation point if, and only
-    if, there exists a subtree rooted at `n` such that there is no
-    back edge from any successor of `n` that links to a predecessor of
-    `n` in the DFS tree. By keeping track of all the edges traversed
-    by the DFS we can obtain the biconnected components because all
-    edges of a bicomponent will be traversed consecutively between
-    articulation points.
-
-    References
-    ----------
-    .. [1] Hopcroft, J.; Tarjan, R. (1973). 
-       "Efficient algorithms for graph manipulation". 
-       Communications of the ACM 16: 372–378. doi:10.1145/362248.362272
-    """
-    bicomponents = (set(chain.from_iterable(comp))
-                        for comp in _biconnected_dfs(G,components=True))
-    return sorted(bicomponents, key=len, reverse=True)
-
-def biconnected_component_subgraphs(G):
-    """Return a generator of graphs, one graph for each biconnected component
-    of the input graph.
-
-    Biconnected components are maximal subgraphs such that the removal of a
-    node (and all edges incident on that node) will not disconnect the
-    subgraph. Note that nodes may be part of more than one biconnected
-    component. Those nodes are articulation points, or cut vertices. The 
-    removal of articulation points will increase the number of connected 
-    components of the graph.
-
-    Notice that by convention a dyad is considered a biconnected component.
-
-    Parameters
-    ----------
-    G : NetworkX Graph
-        An undirected graph.
-
-    Returns
-    -------
-    graphs : generator
-        Generator of graphs, one graph for each biconnected component.
-
-    Raises
-    ------
-    NetworkXError :
-        If the input graph is not undirected.
-
-    Examples
-    --------
-    >>> G = nx.barbell_graph(4,2)
-    >>> print(nx.is_biconnected(G))
-    False
-    >>> subgraphs = nx.biconnected_component_subgraphs(G)
-
-    See Also
-    --------
-    is_biconnected,
-    articulation_points,
-    biconnected_component_edges,
-    biconnected_components
-
-    Notes
-    -----
-    The algorithm to find articulation points and biconnected
-    components is implemented using a non-recursive depth-first-search
-    (DFS) that keeps track of the highest level that back edges reach
-    in the DFS tree. A node `n` is an articulation point if, and only
-    if, there exists a subtree rooted at `n` such that there is no
-    back edge from any successor of `n` that links to a predecessor of
-    `n` in the DFS tree. By keeping track of all the edges traversed
-    by the DFS we can obtain the biconnected components because all
-    edges of a bicomponent will be traversed consecutively between
-    articulation points.
-
-    Graph, node, and edge attributes are copied to the subgraphs.
-
-    References
-    ----------
-    .. [1] Hopcroft, J.; Tarjan, R. (1973). 
-       "Efficient algorithms for graph manipulation". 
-       Communications of the ACM 16: 372–378. doi:10.1145/362248.362272
-    """
-    def edge_subgraph(G,edges):
-        # create new graph and copy subgraph into it
-        H = G.__class__()
-        for u,v in edges:
-            H.add_edge(u,v,attr_dict=G[u][v])
-        for n in H:
-            H.node[n]=G.node[n].copy()
-        H.graph=G.graph.copy()
-        return H
-    return (edge_subgraph(G,edges) for edges in 
-            sorted(_biconnected_dfs(G,components=True), key=len, reverse=True))
-
-def articulation_points(G):
-    """Return a generator of articulation points, or cut vertices, of a graph.
-
-    An articulation point or cut vertex is any node whose removal (along with
-    all its incident edges) increases the number of connected components of 
-    a graph. An undirected connected graph without articulation points is
-    biconnected. Articulation points belong to more than one biconnected
-    component of a graph.
-
-    Notice that by convention a dyad is considered a biconnected component.
-
-    Parameters
-    ----------
-    G : NetworkX Graph
-        An undirected graph.
-
-    Returns
-    -------
-    articulation points : generator
-        generator of nodes
-
-    Raises
-    ------
-    NetworkXError :
-        If the input graph is not undirected.
-
-    Examples
-    --------
-    >>> G = nx.barbell_graph(4,2)
-    >>> print(nx.is_biconnected(G))
-    False
-    >>> list(nx.articulation_points(G))
-    [6, 5, 4, 3]
-    >>> G.add_edge(2,8)
-    >>> print(nx.is_biconnected(G))
-    True
-    >>> list(nx.articulation_points(G))
-    []
-
-    See Also
-    --------
-    is_biconnected,
-    biconnected_components,
-    biconnected_component_edges,
-    biconnected_component_subgraphs
-
-    Notes
-    -----
-    The algorithm to find articulation points and biconnected
-    components is implemented using a non-recursive depth-first-search
-    (DFS) that keeps track of the highest level that back edges reach
-    in the DFS tree. A node `n` is an articulation point if, and only
-    if, there exists a subtree rooted at `n` such that there is no
-    back edge from any successor of `n` that links to a predecessor of
-    `n` in the DFS tree. By keeping track of all the edges traversed
-    by the DFS we can obtain the biconnected components because all
-    edges of a bicomponent will be traversed consecutively between
-    articulation points.
-
-    References
-    ----------
-    .. [1] Hopcroft, J.; Tarjan, R. (1973). 
-       "Efficient algorithms for graph manipulation". 
-       Communications of the ACM 16: 372–378. doi:10.1145/362248.362272
-    """
-    return _biconnected_dfs(G,components=False)
-
-def _biconnected_dfs(G, components=True):
-    # depth-first search algorithm to generate articulation points 
-    # and biconnected components
-    if G.is_directed():
-        raise nx.NetworkXError('Not allowed for directed graph G. '
-                               'Use UG=G.to_undirected() to create an '
-                               'undirected graph.')
-    visited = set()
-    for start in G:
-        if start in visited:
-            continue
-        discovery = {start:0} # "time" of first discovery of node during search
-        low = {start:0}
-        root_children = 0
-        visited.add(start)
-        edge_stack = []
-        stack = [(start, start, iter(G[start]))]
-        while stack:
-            grandparent, parent, children = stack[-1]
-            try:
-                child = next(children)
-                if grandparent == child:
-                    continue
-                if child in visited:
-                    if discovery[child] <= discovery[parent]: # back edge
-                        low[parent] = min(low[parent],discovery[child])
-                        if components:
-                            edge_stack.append((parent,child))
-                else:
-                    low[child] = discovery[child] = len(discovery)
-                    visited.add(child)
-                    stack.append((parent, child, iter(G[child])))
-                    if components:
-                        edge_stack.append((parent,child))
-            except StopIteration:
-                stack.pop()
-                if len(stack) > 1:
-                    if low[parent] >= discovery[grandparent]:
-                        if components:
-                            ind = edge_stack.index((grandparent,parent))
-                            yield edge_stack[ind:]
-                            edge_stack=edge_stack[:ind]
-                        else:
-                            yield grandparent
-                    low[grandparent] = min(low[parent], low[grandparent])
-                elif stack: # length 1 so grandparent is root
-                    root_children += 1
-                    if components:
-                        ind = edge_stack.index((grandparent,parent))
-                        yield edge_stack[ind:]
-        if not components:
-            # root node is articulation point if it has more than 1 child
-            if root_children > 1:
-                yield start
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/components/connected.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/components/connected.py
deleted file mode 100644
index 088a99e..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/components/connected.py
+++ /dev/null
@@ -1,192 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-Connected components.
-"""
-__authors__ = "\n".join(['Eben Kenah',
-                         'Aric Hagberg (hagberg@lanl.gov)'
-                         'Christopher Ellison'])
-#    Copyright (C) 2004-2010 by 
-#    Aric Hagberg <hagberg@lanl.gov>
-#    Dan Schult <dschult@colgate.edu>
-#    Pieter Swart <swart@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-
-__all__ = ['number_connected_components', 
-           'connected_components',
-           'connected_component_subgraphs',
-           'is_connected',
-           'node_connected_component',
-           ]
-
-import networkx as nx
-
-def connected_components(G):
-    """Return nodes in connected components of graph.
-
-    Parameters
-    ----------
-    G : NetworkX Graph
-       An undirected graph.
-
-    Returns
-    -------
-    comp : list of lists
-       A list of nodes for each component of G.
-
-    See Also       
-    --------
-    strongly_connected_components
-
-    Notes
-    -----
-    The list is ordered from largest connected component to smallest.
-    For undirected graphs only. 
-    """
-    if G.is_directed():
-        raise nx.NetworkXError("""Not allowed for directed graph G.
-              Use UG=G.to_undirected() to create an undirected graph.""")
-    seen={}
-    components=[]
-    for v in G:      
-        if v not in seen:
-            c=nx.single_source_shortest_path_length(G,v)
-            components.append(list(c.keys()))
-            seen.update(c)
-    components.sort(key=len,reverse=True)            
-    return components            
-
-
-def number_connected_components(G):
-    """Return number of connected components in graph.
-
-    Parameters
-    ----------
-    G : NetworkX Graph
-       An undirected graph.
-
-    Returns
-    -------
-    n : integer
-       Number of connected components
-
-    See Also       
-    --------
-    connected_components
-
-    Notes
-    -----
-    For undirected graphs only. 
-    """
-    return len(connected_components(G))
-
-
-def is_connected(G):
-    """Test graph connectivity.
-
-    Parameters
-    ----------
-    G : NetworkX Graph
-       An undirected graph.
-
-    Returns
-    -------
-    connected : bool
-      True if the graph is connected, false otherwise.
-
-    Examples
-    --------
-    >>> G=nx.path_graph(4)
-    >>> print(nx.is_connected(G))
-    True
-
-    See Also
-    --------
-    connected_components
-
-    Notes
-    -----
-    For undirected graphs only. 
-    """
-    if G.is_directed():
-        raise nx.NetworkXError(\
-            """Not allowed for directed graph G.
-Use UG=G.to_undirected() to create an undirected graph.""")
-
-    if len(G)==0:
-        raise nx.NetworkXPointlessConcept(
-            """Connectivity is undefined for the null graph.""")
-
-    return len(nx.single_source_shortest_path_length(G,
-                                              next(G.nodes_iter())))==len(G)
-
-
-def connected_component_subgraphs(G):
-    """Return connected components as subgraphs.
-
-    Parameters
-    ----------
-    G : NetworkX Graph
-       An undirected graph.
-
-    Returns
-    -------
-    glist : list
-      A list of graphs, one for each connected component of G.
-
-    Examples
-    --------
-    Get largest connected component as subgraph
-
-    >>> G=nx.path_graph(4)
-    >>> G.add_edge(5,6)
-    >>> H=nx.connected_component_subgraphs(G)[0]
-
-    See Also
-    --------
-    connected_components
-
-    Notes
-    -----
-    The list is ordered from largest connected component to smallest.
-    For undirected graphs only. 
-
-    Graph, node, and edge attributes are copied to the subgraphs.
-    """
-    cc=connected_components(G)
-    graph_list=[]
-    for c in cc:
-        graph_list.append(G.subgraph(c).copy())
-    return graph_list
-
-
-def node_connected_component(G,n):
-    """Return nodes in connected components of graph containing node n.
-
-    Parameters
-    ----------
-    G : NetworkX Graph
-       An undirected graph.
-
-    n : node label       
-       A node in G
-
-    Returns
-    -------
-    comp : lists
-       A list of nodes in component of G containing node n.
-
-    See Also       
-    --------
-    connected_components
-
-    Notes
-    -----
-    For undirected graphs only. 
-    """
-    if G.is_directed():
-        raise nx.NetworkXError("""Not allowed for directed graph G.
-              Use UG=G.to_undirected() to create an undirected graph.""")
-    return list(nx.single_source_shortest_path_length(G,n).keys())
-
-        
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/components/strongly_connected.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/components/strongly_connected.py
deleted file mode 100644
index fbdec13..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/components/strongly_connected.py
+++ /dev/null
@@ -1,359 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-Strongly connected components.
-"""
-#    Copyright (C) 2004-2011 by
-#    Aric Hagberg <hagberg@lanl.gov>
-#    Dan Schult <dschult@colgate.edu>
-#    Pieter Swart <swart@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-import networkx as nx
-__authors__ = "\n".join(['Eben Kenah',
-                         'Aric Hagberg (hagberg@lanl.gov)'
-                         'Christopher Ellison',
-                         'Ben Edwards (bedwards@cs.unm.edu)'])
-
-__all__ = ['number_strongly_connected_components',
-           'strongly_connected_components',
-           'strongly_connected_component_subgraphs',
-           'is_strongly_connected',
-           'strongly_connected_components_recursive',
-           'kosaraju_strongly_connected_components',
-           'condensation']
-
-def strongly_connected_components(G):
-    """Return nodes in strongly connected components of graph.
-
-    Parameters
-    ----------
-    G : NetworkX Graph
-       An directed graph.
-
-    Returns
-    -------
-    comp : list of lists
-       A list of nodes for each component of G.
-       The list is ordered from largest connected component to smallest.
-
-    Raises
-    ------
-    NetworkXError: If G is undirected.
-
-    See Also
-    --------
-    connected_components, weakly_connected_components
-
-    Notes
-    -----
-    Uses Tarjan's algorithm with Nuutila's modifications.
-    Nonrecursive version of algorithm.
-
-    References
-    ----------
-    .. [1] Depth-first search and linear graph algorithms, R. Tarjan
-       SIAM Journal of Computing 1(2):146-160, (1972).
-
-    .. [2] On finding the strongly connected components in a directed graph.
-       E. Nuutila and E. Soisalon-Soinen
-       Information Processing Letters 49(1): 9-14, (1994)..
-    """
-    if not G.is_directed():
-        raise nx.NetworkXError("""Not allowed for undirected graph G. 
-              Use connected_components() """)
-    preorder={}
-    lowlink={}
-    scc_found={}
-    scc_queue = []
-    scc_list=[]
-    i=0     # Preorder counter
-    for source in G:
-        if source not in scc_found:
-            queue=[source]
-            while queue:
-                v=queue[-1]
-                if v not in preorder:
-                    i=i+1
-                    preorder[v]=i
-                done=1
-                v_nbrs=G[v]
-                for w in v_nbrs:
-                    if w not in preorder:
-                        queue.append(w)
-                        done=0
-                        break
-                if done==1:
-                    lowlink[v]=preorder[v]
-                    for w in v_nbrs:
-                        if w not in scc_found:
-                            if preorder[w]>preorder[v]:
-                                lowlink[v]=min([lowlink[v],lowlink[w]])
-                            else:
-                                lowlink[v]=min([lowlink[v],preorder[w]])
-                    queue.pop()
-                    if lowlink[v]==preorder[v]:
-                        scc_found[v]=True
-                        scc=[v]
-                        while scc_queue and preorder[scc_queue[-1]]>preorder[v]:
-                            k=scc_queue.pop()
-                            scc_found[k]=True
-                            scc.append(k)
-                        scc_list.append(scc)
-                    else:
-                        scc_queue.append(v)
-    scc_list.sort(key=len,reverse=True)
-    return scc_list
-
-
-def kosaraju_strongly_connected_components(G,source=None):
-    """Return nodes in strongly connected components of graph.
-
-    Parameters
-    ----------
-    G : NetworkX Graph
-       An directed graph.
-
-    Returns
-    -------
-    comp : list of lists
-       A list of nodes for each component of G.
-       The list is ordered from largest connected component to smallest.
-
-    Raises
-    ------
-    NetworkXError: If G is undirected
-
-    See Also
-    --------
-    connected_components
-
-    Notes
-    -----
-    Uses Kosaraju's algorithm.
-    """
-    if not G.is_directed():
-        raise nx.NetworkXError("""Not allowed for undirected graph G. 
-              Use connected_components() """)
-    components=[]
-    G=G.reverse(copy=False)
-    post=list(nx.dfs_postorder_nodes(G,source=source))
-    G=G.reverse(copy=False)
-    seen={}
-    while post:
-        r=post.pop()
-        if r in seen:
-            continue
-        c=nx.dfs_preorder_nodes(G,r)
-        new=[v for v in c if v not in seen]
-        seen.update([(u,True) for u in new])
-        components.append(new)
-    components.sort(key=len,reverse=True)
-    return components
-
-
-def strongly_connected_components_recursive(G):
-    """Return nodes in strongly connected components of graph.
-
-    Recursive version of algorithm.
-
-    Parameters
-    ----------
-    G : NetworkX Graph
-       An directed graph.
-
-    Returns
-    -------
-    comp : list of lists
-       A list of nodes for each component of G.
-       The list is ordered from largest connected component to smallest.
-
-    Raises
-    ------
-    NetworkXError : If G is undirected
-
-    See Also
-    --------
-    connected_components
-
-    Notes
-    -----
-    Uses Tarjan's algorithm with Nuutila's modifications.
-
-    References
-    ----------
-    .. [1] Depth-first search and linear graph algorithms, R. Tarjan
-       SIAM Journal of Computing 1(2):146-160, (1972).
-
-    .. [2] On finding the strongly connected components in a directed graph.
-       E. Nuutila and E. Soisalon-Soinen
-       Information Processing Letters 49(1): 9-14, (1994)..
-    """
-    def visit(v,cnt):
-        root[v]=cnt
-        visited[v]=cnt
-        cnt+=1
-        stack.append(v)
-        for w in G[v]:
-            if w not in visited: visit(w,cnt)
-            if w not in component:
-                root[v]=min(root[v],root[w])
-        if root[v]==visited[v]:
-            component[v]=root[v]
-            tmpc=[v] # hold nodes in this component
-            while stack[-1]!=v:
-                w=stack.pop()
-                component[w]=root[v]
-                tmpc.append(w)
-            stack.remove(v)
-            scc.append(tmpc) # add to scc list
-    
-    if not G.is_directed():
-        raise nx.NetworkXError("""Not allowed for undirected graph G. 
-              Use connected_components() """)
-    
-    scc=[]
-    visited={}
-    component={}
-    root={}
-    cnt=0
-    stack=[]
-    for source in G:
-        if source not in visited:
-            visit(source,cnt)
-
-    scc.sort(key=len,reverse=True)
-    return scc
-
-
-def strongly_connected_component_subgraphs(G):
-    """Return strongly connected components as subgraphs.
-
-    Parameters
-    ----------
-    G : NetworkX Graph
-       A graph.
-
-    Returns
-    -------
-    glist : list
-      A list of graphs, one for each strongly connected component of G.
-
-    See Also
-    --------
-    connected_component_subgraphs
-
-    Notes
-    -----
-    The list is ordered from largest strongly connected component to smallest.
-
-    Graph, node, and edge attributes are copied to the subgraphs.
-    """
-    cc=strongly_connected_components(G)
-    graph_list=[]
-    for c in cc:
-        graph_list.append(G.subgraph(c).copy())
-    return graph_list
-
-
-def number_strongly_connected_components(G):
-    """Return number of strongly connected components in graph.
-
-    Parameters
-    ----------
-    G : NetworkX graph
-       A directed graph.
-
-    Returns
-    -------
-    n : integer
-       Number of strongly connected components
-
-    See Also
-    --------
-    connected_components
-
-    Notes
-    -----
-    For directed graphs only.
-    """
-    return len(strongly_connected_components(G))
-
-
-def is_strongly_connected(G):
-    """Test directed graph for strong connectivity.
-
-    Parameters
-    ----------
-    G : NetworkX Graph
-       A directed graph.
-
-    Returns
-    -------
-    connected : bool
-      True if the graph is strongly connected, False otherwise.
-
-    See Also
-    --------
-    strongly_connected_components
-
-    Notes
-    -----
-    For directed graphs only.
-    """
-    if not G.is_directed():
-        raise nx.NetworkXError("""Not allowed for undirected graph G.
-              See is_connected() for connectivity test.""")
-
-    if len(G)==0:
-        raise nx.NetworkXPointlessConcept(
-            """Connectivity is undefined for the null graph.""")
-
-    return len(strongly_connected_components(G)[0])==len(G)
-
-def condensation(G, scc=None):
-    """Returns the condensation of G.
-
-    The condensation of G is the graph with each of the strongly connected
-    components contracted into a single node.
-
-    Parameters
-    ----------
-    G : NetworkX DiGraph
-       A directed graph.
-
-    scc:  list (optional, default=None)
-       A list of strongly connected components.  If provided, the elements in
-       `scc` must partition the nodes in `G`. If not provided, it will be
-       calculated as scc=nx.strongly_connected_components(G).
-
-    Returns
-    -------
-    C : NetworkX DiGraph
-       The condensation of G. The node labels are integers corresponding
-       to the index of the component in the list of strongly connected
-       components.
-
-    Raises
-    ------
-    NetworkXError: If G is not directed
-
-    Notes
-    -----
-    After contracting all strongly connected components to a single node,
-    the resulting graph is a directed acyclic graph.
-    """
-    if not G.is_directed():
-        raise nx.NetworkXError("""Not allowed for undirected graph G.
-              See is_connected() for connectivity test.""")
-    if scc is None:
-        scc = nx.strongly_connected_components(G)
-    mapping = {}
-    C = nx.DiGraph()
-    for i,component in enumerate(scc):
-        for n in component:
-            mapping[n] = i
-    C.add_nodes_from(range(len(scc)))
-    for u,v in G.edges():
-        if mapping[u] != mapping[v]:
-            C.add_edge(mapping[u],mapping[v])
-    return C
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/components/tests/test_attracting.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/components/tests/test_attracting.py
deleted file mode 100644
index c2108dd..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/components/tests/test_attracting.py
+++ /dev/null
@@ -1,64 +0,0 @@
-#!/usr/bin/env python
-from nose.tools import *
-import networkx as nx
-
-
-class TestAttractingComponents(object):
-    def setUp(self):
-        self.G1 = nx.DiGraph()
-        self.G1.add_edges_from([(5,11),(11,2),(11,9),(11,10),
-                                (7,11),(7,8),(8,9),(3,8),(3,10)])
-        self.G2 = nx.DiGraph()
-        self.G2.add_edges_from([(0,1),(0,2),(1,1),(1,2),(2,1)])
-
-        self.G3 = nx.DiGraph()
-        self.G3.add_edges_from([(0,1),(1,2),(2,1),(0,3),(3,4),(4,3)])
-
-    def test_attracting_components(self):
-        ac = nx.attracting_components(self.G1)
-        assert_true([2] in ac)
-        assert_true([9] in ac)
-        assert_true([10] in ac)
-
-        ac = nx.attracting_components(self.G2)
-        ac = [tuple(sorted(x)) for x in ac]
-        assert_true(ac == [(1,2)])
-
-        ac = nx.attracting_components(self.G3)
-        ac = [tuple(sorted(x)) for x in ac]
-        assert_true((1,2) in ac)
-        assert_true((3,4) in ac)
-        assert_equal(len(ac), 2)
-        
-    def test_number_attacting_components(self):
-        assert_equal(len(nx.attracting_components(self.G1)), 3)
-        assert_equal(len(nx.attracting_components(self.G2)), 1)
-        assert_equal(len(nx.attracting_components(self.G3)), 2)
-
-    def test_is_attracting_component(self):
-        assert_false(nx.is_attracting_component(self.G1))
-        assert_false(nx.is_attracting_component(self.G2))
-        assert_false(nx.is_attracting_component(self.G3))
-        g2 = self.G3.subgraph([1,2])
-        assert_true(nx.is_attracting_component(g2))
-
-    def test_attracting_component_subgraphs(self):
-        subgraphs = nx.attracting_component_subgraphs(self.G1)
-        for subgraph in subgraphs:
-            assert_equal(len(subgraph), 1)
-
-        self.G2.add_edge(1,2,eattr='red')  # test attrs copied to subgraphs
-        self.G2.node[2]['nattr']='blue'
-        self.G2.graph['gattr']='green'
-        subgraphs = nx.attracting_component_subgraphs(self.G2)
-        assert_equal(len(subgraphs), 1)
-        SG2=subgraphs[0]
-        assert_true(1 in SG2)
-        assert_true(2 in SG2)
-        assert_equal(SG2[1][2]['eattr'],'red')
-        assert_equal(SG2.node[2]['nattr'],'blue')
-        assert_equal(SG2.graph['gattr'],'green')
-        SG2.add_edge(1,2,eattr='blue')
-        assert_equal(SG2[1][2]['eattr'],'blue')
-        assert_equal(self.G2[1][2]['eattr'],'red')
-        
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/components/tests/test_biconnected.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/components/tests/test_biconnected.py
deleted file mode 100644
index 85f967a..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/components/tests/test_biconnected.py
+++ /dev/null
@@ -1,191 +0,0 @@
-#!/usr/bin/env python
-from nose.tools import *
-import networkx as nx
-from networkx.algorithms.components import biconnected
-
-def assert_components_equal(x,y):
-    sx = set((frozenset([frozenset(e) for e in c]) for c in x))
-    sy = set((frozenset([frozenset(e) for e in c]) for c in y))
-    assert_equal(sx,sy)
-
-def test_barbell():
-    G=nx.barbell_graph(8,4)
-    G.add_path([7,20,21,22])
-    G.add_cycle([22,23,24,25])
-    pts=set(biconnected.articulation_points(G))
-    assert_equal(pts,set([7,8,9,10,11,12,20,21,22]))
-
-    answer = [set([12, 13, 14, 15, 16, 17, 18, 19]),
-                set([0, 1, 2, 3, 4, 5, 6, 7]),
-                set([22, 23, 24, 25]),
-                set([11, 12]),
-                set([10, 11]),
-                set([9, 10]),
-                set([8, 9]),
-                set([7, 8]),
-                set([21, 22]),
-                set([20, 21]),
-                set([7, 20])]  
-    bcc=list(biconnected.biconnected_components(G))
-    bcc.sort(key=len, reverse=True)
-    assert_equal(bcc,answer)
-
-    G.add_edge(2,17)
-    pts=set(biconnected.articulation_points(G))
-    assert_equal(pts,set([7,20,21,22]))
-
-def test_articulation_points_cycle():
-    G=nx.cycle_graph(3)
-    G.add_cycle([1,3,4])
-    pts=set(biconnected.articulation_points(G))
-    assert_equal(pts,set([1]))
-
-def test_is_biconnected():
-    G=nx.cycle_graph(3)
-    assert_true(biconnected.is_biconnected(G))
-    G.add_cycle([1,3,4])
-    assert_false(biconnected.is_biconnected(G))
-
-def test_empty_is_biconnected():
-    G=nx.empty_graph(5)
-    assert_false(biconnected.is_biconnected(G))
-    G.add_edge(0,1)
-    assert_false(biconnected.is_biconnected(G))
-
-def test_biconnected_components_cycle():
-    G=nx.cycle_graph(3)
-    G.add_cycle([1,3,4])
-    pts = set(map(frozenset,biconnected.biconnected_components(G)))
-    assert_equal(pts,set([frozenset([0,1,2]),frozenset([1,3,4])]))
-
-def test_biconnected_component_subgraphs_cycle():
-    G=nx.cycle_graph(3)
-    G.add_cycle([1,3,4,5])
-    G.add_edge(1,3,eattr='red')  # test copying of edge data
-    G.node[1]['nattr']='blue'
-    G.graph['gattr']='green'
-    Gc = set(biconnected.biconnected_component_subgraphs(G))
-    assert_equal(len(Gc),2)
-    g1,g2=Gc
-    if 0 in g1:
-        assert_true(nx.is_isomorphic(g1,nx.Graph([(0,1),(0,2),(1,2)])))
-        assert_true(nx.is_isomorphic(g2,nx.Graph([(1,3),(1,5),(3,4),(4,5)])))
-        assert_equal(g2[1][3]['eattr'],'red')
-        assert_equal(g2.node[1]['nattr'],'blue')
-        assert_equal(g2.graph['gattr'],'green')
-        g2[1][3]['eattr']='blue'
-        assert_equal(g2[1][3]['eattr'],'blue')
-        assert_equal(G[1][3]['eattr'],'red')
-    else:
-        assert_true(nx.is_isomorphic(g1,nx.Graph([(1,3),(1,5),(3,4),(4,5)])))
-        assert_true(nx.is_isomorphic(g2,nx.Graph([(0,1),(0,2),(1,2)])))
-        assert_equal(g1[1][3]['eattr'],'red')
-        assert_equal(g1.node[1]['nattr'],'blue')
-        assert_equal(g1.graph['gattr'],'green')
-        g1[1][3]['eattr']='blue'
-        assert_equal(g1[1][3]['eattr'],'blue')
-        assert_equal(G[1][3]['eattr'],'red')
-
-
-def test_biconnected_components1():
-    # graph example from
-    # http://www.ibluemojo.com/school/articul_algorithm.html 
-    edges=[(0,1),
-           (0,5),
-           (0,6),
-           (0,14),
-           (1,5),
-           (1,6),
-           (1,14),
-           (2,4),
-           (2,10),
-           (3,4),
-           (3,15),
-           (4,6),
-           (4,7),
-           (4,10),
-           (5,14),
-           (6,14),
-           (7,9),
-           (8,9),
-           (8,12),
-           (8,13),
-           (10,15),
-           (11,12),
-           (11,13),
-           (12,13)]   
-    G=nx.Graph(edges)
-    pts = set(biconnected.articulation_points(G))
-    assert_equal(pts,set([4,6,7,8,9]))
-    comps = list(biconnected.biconnected_component_edges(G))
-    answer = [
-        [(3,4),(15,3),(10,15),(10,4),(2,10),(4,2)],
-        [(13,12),(13,8),(11,13),(12,11),(8,12)],
-        [(9,8)],
-        [(7,9)],
-        [(4,7)],
-        [(6,4)],
-        [(14,0),(5,1),(5,0),(14,5),(14,1),(6,14),(6,0),(1,6),(0,1)],
-        ]
-    assert_components_equal(comps,answer)
-
-def test_biconnected_components2():
-    G=nx.Graph()
-    G.add_cycle('ABC')
-    G.add_cycle('CDE')
-    G.add_cycle('FIJHG')
-    G.add_cycle('GIJ')
-    G.add_edge('E','G')
-    comps = list(biconnected.biconnected_component_edges(G))
-    answer = [
-        [tuple('GF'),tuple('FI'),tuple('IG'),tuple('IJ'),tuple('JG'),tuple('JH'),tuple('HG')],
-        [tuple('EG')],
-        [tuple('CD'),tuple('DE'),tuple('CE')],
-        [tuple('AB'),tuple('BC'),tuple('AC')]
-        ]
-    assert_components_equal(comps,answer)
-
-def test_biconnected_davis():
-    D = nx.davis_southern_women_graph()
-    bcc = list(biconnected.biconnected_components(D))[0]
-    assert_true(set(D) == bcc) # All nodes in a giant bicomponent
-    # So no articulation points
-    assert_equal(list(biconnected.articulation_points(D)),[])
-
-def test_biconnected_karate():
-    K = nx.karate_club_graph()
-    answer = [set([0, 1, 2, 3, 7, 8, 9, 12, 13, 14, 15, 17, 18, 19,
-                20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33]),
-                set([0, 4, 5, 6, 10, 16]),
-                set([0, 11])]
-    bcc = list(biconnected.biconnected_components(K))
-    bcc.sort(key=len, reverse=True)
-    assert_true(list(biconnected.biconnected_components(K)) == answer)
-    assert_equal(list(biconnected.articulation_points(K)),[0])
-
-def test_biconnected_eppstein():
-    # tests from http://www.ics.uci.edu/~eppstein/PADS/Biconnectivity.py
-    G1 = nx.Graph({
-        0: [1,2,5],
-        1: [0,5],
-        2: [0,3,4],
-        3: [2,4,5,6],
-        4: [2,3,5,6],
-        5: [0,1,3,4],
-        6: [3,4]})
-    G2 = nx.Graph({
-        0: [2,5],
-        1: [3,8],
-        2: [0,3,5],
-        3: [1,2,6,8],
-        4: [7],
-        5: [0,2],
-        6: [3,8],
-        7: [4],
-        8: [1,3,6]})
-    assert_true(biconnected.is_biconnected(G1))
-    assert_false(biconnected.is_biconnected(G2))
-    answer_G2 = [set([1, 3, 6, 8]), set([0, 2, 5]), set([2, 3]), set([4, 7])]
-    bcc = list(biconnected.biconnected_components(G2))
-    bcc.sort(key=len, reverse=True)
-    assert_equal(bcc, answer_G2)
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/components/tests/test_connected.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/components/tests/test_connected.py
deleted file mode 100644
index ae0247b..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/components/tests/test_connected.py
+++ /dev/null
@@ -1,72 +0,0 @@
-#!/usr/bin/env python
-from nose.tools import *
-import networkx as nx
-from networkx import convert_node_labels_to_integers as cnlti
-from networkx import NetworkXError
-
-class TestConnected:
-
-    def setUp(self):
-        G1=cnlti(nx.grid_2d_graph(2,2),first_label=0,ordering="sorted")
-        G2=cnlti(nx.lollipop_graph(3,3),first_label=4,ordering="sorted")
-        G3=cnlti(nx.house_graph(),first_label=10,ordering="sorted")
-        self.G=nx.union(G1,G2)
-        self.G=nx.union(self.G,G3)
-        self.DG=nx.DiGraph([(1,2),(1,3),(2,3)])
-        self.grid=cnlti(nx.grid_2d_graph(4,4),first_label=1)
-
-    def test_connected_components(self):
-        cc=nx.connected_components
-        G=self.G
-        C=[[0, 1, 2, 3], [4, 5, 6, 7, 8, 9], [10, 11, 12, 13, 14]]
-        assert_equal(sorted([sorted(g) for g in cc(G)]),sorted(C))
-
-    def test_number_connected_components(self):
-        ncc=nx.number_connected_components
-        assert_equal(ncc(self.G),3)
-
-    def test_number_connected_components2(self):
-        ncc=nx.number_connected_components
-        assert_equal(ncc(self.grid),1)
-
-    def test_connected_components2(self):
-        cc=nx.connected_components
-        G=self.grid
-        C=[[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]]
-        assert_equal(sorted([sorted(g) for g in cc(G)]),sorted(C))
-
-    def test_node_connected_components(self):
-        ncc=nx.node_connected_component
-        G=self.grid
-        C=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]
-        assert_equal(sorted(ncc(G,1)),sorted(C))
-
-    def test_connected_component_subgraphs(self):
-        G=self.grid
-        G.add_edge(1,2,eattr='red') # test attributes copied to subgraphs
-        G.node[1]['nattr']='blue'
-        G.graph['gattr']='green'
-        ccs=nx.connected_component_subgraphs(G)
-        assert_equal(len(ccs),1)
-        sg=ccs[0]
-        assert_equal(sorted(sg.nodes()),list(range(1,17)))
-        assert_equal(sg[1][2]['eattr'],'red')
-        assert_equal(sg.node[1]['nattr'],'blue')
-        assert_equal(sg.graph['gattr'],'green')
-        sg[1][2]['eattr']='blue'
-        assert_equal(G[1][2]['eattr'],'red')
-        assert_equal(sg[1][2]['eattr'],'blue')
-
-
-    def test_is_connected(self):
-        assert_true(nx.is_connected(self.grid))
-        G=nx.Graph()
-        G.add_nodes_from([1,2])
-        assert_false(nx.is_connected(G))
-
-    def test_connected_raise(self):
-        assert_raises(NetworkXError,nx.connected_components,self.DG)
-        assert_raises(NetworkXError,nx.number_connected_components,self.DG)
-        assert_raises(NetworkXError,nx.connected_component_subgraphs,self.DG)
-        assert_raises(NetworkXError,nx.node_connected_component,self.DG,1)
-        assert_raises(NetworkXError,nx.is_connected,self.DG)
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/components/tests/test_strongly_connected.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/components/tests/test_strongly_connected.py
deleted file mode 100644
index d2569a9..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/components/tests/test_strongly_connected.py
+++ /dev/null
@@ -1,138 +0,0 @@
-#!/usr/bin/env python
-from nose.tools import *
-import networkx as nx
-from networkx import NetworkXError 
-
-class TestStronglyConnected:
-
-    def setUp(self):
-        self.gc=[]
-        G=nx.DiGraph()
-        G.add_edges_from([(1,2),(2,3),(2,8),(3,4),(3,7),
-                          (4,5),(5,3),(5,6),(7,4),(7,6),(8,1),(8,7)])
-        C=[[3, 4, 5, 7], [1, 2, 8],  [6]]
-        self.gc.append((G,C))
-
-        G= nx.DiGraph()
-        G.add_edges_from([(1,2),(1,3),(1,4),(4,2),(3,4),(2,3)])
-        C = [[2, 3, 4],[1]]
-        self.gc.append((G,C))
-
-        G = nx.DiGraph()
-        G.add_edges_from([(1,2),(2,3),(3,2),(2,1)])
-        C = [[1, 2, 3]]
-        self.gc.append((G,C))
-
-        # Eppstein's tests
-        G = nx.DiGraph({ 0:[1],1:[2,3],2:[4,5],3:[4,5],4:[6],5:[],6:[]})
-        C = [[0],[1],[2],[3],[4],[5],[6]]
-        self.gc.append((G,C))
-    
-        G = nx.DiGraph({0:[1],1:[2,3,4],2:[0,3],3:[4],4:[3]})
-        C = [[0,1,2],[3,4]]
-        self.gc.append((G,C))
-
-
-    def test_tarjan(self):
-        scc=nx.strongly_connected_components
-        for G,C in self.gc:
-            assert_equal(sorted([sorted(g) for g in scc(G)]),sorted(C))
-
-
-    def test_tarjan_recursive(self):
-        scc=nx.strongly_connected_components_recursive
-        for G,C in self.gc:
-            assert_equal(sorted([sorted(g) for g in scc(G)]),sorted(C))
-
-
-    def test_kosaraju(self):
-        scc=nx.kosaraju_strongly_connected_components
-        for G,C in self.gc:
-            assert_equal(sorted([sorted(g) for g in scc(G)]),sorted(C))
-
-    def test_number_strongly_connected_components(self):
-        ncc=nx.number_strongly_connected_components
-        for G,C in self.gc:
-            assert_equal(ncc(G),len(C))
-
-    def test_is_strongly_connected(self):            
-        for G,C in self.gc:
-            if len(C)==1:
-                assert_true(nx.is_strongly_connected(G))
-            else:
-                assert_false(nx.is_strongly_connected(G))
-
-
-    def test_strongly_connected_component_subgraphs(self):
-        scc=nx.strongly_connected_component_subgraphs
-        for G,C in self.gc:
-            assert_equal(sorted([sorted(g.nodes()) for g in scc(G)]),sorted(C))
-        G,C=self.gc[0]
-        G.add_edge(1,2,eattr='red')
-        G.node[1]['nattr']='blue'
-        G.graph['gattr']='green'
-        sgs=scc(G)[1]
-        assert_equal(sgs[1][2]['eattr'],'red')
-        assert_equal(sgs.node[1]['nattr'],'blue')
-        assert_equal(sgs.graph['gattr'],'green')
-        sgs[1][2]['eattr']='blue'
-        assert_equal(G[1][2]['eattr'],'red')
-        assert_equal(sgs[1][2]['eattr'],'blue')
-
-    def test_contract_scc1(self):
-        G = nx.DiGraph()
-        G.add_edges_from([(1,2),(2,3),(2,11),(2,12),(3,4),(4,3),(4,5),
-                          (5,6),(6,5),(6,7),(7,8),(7,9),(7,10),(8,9),
-                          (9,7),(10,6),(11,2),(11,4),(11,6),(12,6),(12,11)])
-        scc = nx.strongly_connected_components(G)
-        cG = nx.condensation(G, scc)
-        # DAG
-        assert_true(nx.is_directed_acyclic_graph(cG))
-        # # nodes
-        assert_equal(sorted(cG.nodes()),[0,1,2,3])
-        # # edges
-        mapping={}
-        for i,component in enumerate(scc):
-            for n in component:
-                mapping[n] = i
-        edge=(mapping[2],mapping[3])
-        assert_true(cG.has_edge(*edge))
-        edge=(mapping[2],mapping[5])
-        assert_true(cG.has_edge(*edge))
-        edge=(mapping[3],mapping[5])
-        assert_true(cG.has_edge(*edge))
-
-    def test_contract_scc_isolate(self):
-        # Bug found and fixed in [1687].
-        G = nx.DiGraph()
-        G.add_edge(1,2)
-        G.add_edge(2,1)
-        scc = nx.strongly_connected_components(G)        
-        cG = nx.condensation(G, scc)
-        assert_equal(cG.nodes(),[0])
-        assert_equal(cG.edges(),[])
-
-    def test_contract_scc_edge(self):
-        G = nx.DiGraph()
-        G.add_edge(1,2)
-        G.add_edge(2,1)
-        G.add_edge(2,3)
-        G.add_edge(3,4)
-        G.add_edge(4,3)
-        scc = nx.strongly_connected_components(G)        
-        cG = nx.condensation(G, scc)
-        assert_equal(cG.nodes(),[0,1])
-        if 1 in scc[0]:
-            edge = (0,1)
-        else:
-            edge = (1,0)
-        assert_equal(cG.edges(),[edge])
-    
-    def test_connected_raise(self):
-        G=nx.Graph()
-        assert_raises(NetworkXError,nx.strongly_connected_components,G)
-        assert_raises(NetworkXError,nx.kosaraju_strongly_connected_components,G)
-        assert_raises(NetworkXError,nx.strongly_connected_components_recursive,G)
-        assert_raises(NetworkXError,nx.strongly_connected_component_subgraphs,G)
-        assert_raises(NetworkXError,nx.is_strongly_connected,G)
-        assert_raises(NetworkXError,nx.condensation,G)
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/components/tests/test_weakly_connected.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/components/tests/test_weakly_connected.py
deleted file mode 100644
index d05e8ed..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/components/tests/test_weakly_connected.py
+++ /dev/null
@@ -1,88 +0,0 @@
-#!/usr/bin/env python
-from nose.tools import *
-import networkx as nx
-from networkx import NetworkXError
-
-class TestWeaklyConnected:
-
-    def setUp(self):
-        self.gc=[]
-        G=nx.DiGraph()
-        G.add_edges_from([(1,2),(2,3),(2,8),(3,4),(3,7),
-                          (4,5),(5,3),(5,6),(7,4),(7,6),(8,1),(8,7)])
-        C=[[3, 4, 5, 7], [1, 2, 8],  [6]]
-        self.gc.append((G,C))
-
-        G= nx.DiGraph()
-        G.add_edges_from([(1,2),(1,3),(1,4),(4,2),(3,4),(2,3)])
-        C = [[2, 3, 4],[1]]
-        self.gc.append((G,C))
-
-        G = nx.DiGraph()
-        G.add_edges_from([(1,2),(2,3),(3,2),(2,1)])
-        C = [[1, 2, 3]]
-        self.gc.append((G,C))
-
-        # Eppstein's tests
-        G = nx.DiGraph({ 0:[1],1:[2,3],2:[4,5],3:[4,5],4:[6],5:[],6:[]})
-        C = [[0],[1],[2],[3],[4],[5],[6]]
-        self.gc.append((G,C))
-    
-        G = nx.DiGraph({0:[1],1:[2,3,4],2:[0,3],3:[4],4:[3]})
-        C = [[0,1,2],[3,4]]
-        self.gc.append((G,C))
-
-
-    def test_weakly_connected_components(self):
-        wcc=nx.weakly_connected_components
-        cc=nx.connected_components
-        for G,C in self.gc:
-            U=G.to_undirected()
-            w=sorted([sorted(g) for g in wcc(G)])
-            c=sorted([sorted(g) for g in cc(U)])
-            assert_equal(w,c)
-
-    def test_number_weakly_connected_components(self):
-        wcc=nx.number_weakly_connected_components
-        cc=nx.number_connected_components
-        for G,C in self.gc:
-            U=G.to_undirected()
-            w=wcc(G)
-            c=cc(U)
-            assert_equal(w,c)
-
-    def test_weakly_connected_component_subgraphs(self):
-        wcc=nx.weakly_connected_component_subgraphs
-        cc=nx.connected_component_subgraphs
-        for G,C in self.gc:
-            U=G.to_undirected()
-            w=sorted([sorted(g.nodes()) for g in wcc(G)])
-            c=sorted([sorted(g.nodes()) for g in cc(U)])
-            assert_equal(w,c)
-        G,C=self.gc[0]
-        G.add_edge(1,2,eattr='red')
-        G.node[1]['nattr']='blue'
-        G.graph['gattr']='green'
-        sgs=wcc(G)[0]
-        assert_equal(sgs[1][2]['eattr'],'red')
-        assert_equal(sgs.node[1]['nattr'],'blue')
-        assert_equal(sgs.graph['gattr'],'green')
-        sgs[1][2]['eattr']='blue'
-        assert_equal(G[1][2]['eattr'],'red')
-        assert_equal(sgs[1][2]['eattr'],'blue')
-
-    def test_is_weakly_connected(self):
-        wcc=nx.is_weakly_connected
-        cc=nx.is_connected
-        for G,C in self.gc:
-            U=G.to_undirected()
-            assert_equal(wcc(G),cc(U))
-
-
-    def test_connected_raise(self):
-        G=nx.Graph()
-        assert_raises(NetworkXError,nx.weakly_connected_components,G)
-        assert_raises(NetworkXError,nx.number_weakly_connected_components,G)
-        assert_raises(NetworkXError,nx.weakly_connected_component_subgraphs,G)
-        assert_raises(NetworkXError,nx.is_weakly_connected,G)
-
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/components/weakly_connected.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/components/weakly_connected.py
deleted file mode 100644
index 410a6c2..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/components/weakly_connected.py
+++ /dev/null
@@ -1,126 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-Weakly connected components.
-"""
-__authors__ = "\n".join(['Aric Hagberg (hagberg@lanl.gov)'
-                         'Christopher Ellison'])
-#    Copyright (C) 2004-2010 by 
-#    Aric Hagberg <hagberg@lanl.gov>
-#    Dan Schult <dschult@colgate.edu>
-#    Pieter Swart <swart@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-
-__all__ = ['number_weakly_connected_components', 
-           'weakly_connected_components',
-           'weakly_connected_component_subgraphs',
-           'is_weakly_connected' 
-           ]
-
-import networkx as nx
-
-def weakly_connected_components(G):
-    """Return weakly connected components of G.
-    """
-    if not G.is_directed():
-        raise nx.NetworkXError("""Not allowed for undirected graph G. 
-              Use connected_components() """)
-    seen={}
-    components=[]
-    for v in G:
-        if v not in seen:
-            c=_single_source_shortest_unipath_length(G,v)
-            components.append(list(c.keys()))
-            seen.update(c)
-    components.sort(key=len,reverse=True)
-    return components
-
-
-def number_weakly_connected_components(G):
-    """Return the number of connected components in G.
-    For directed graphs only. 
-    """
-    return len(weakly_connected_components(G))
-
-def weakly_connected_component_subgraphs(G):
-    """Return weakly connected components as subgraphs.
-
-    Graph, node, and edge attributes are copied to the subgraphs.
-    """
-    wcc=weakly_connected_components(G)
-    graph_list=[]
-    for c in wcc:
-        graph_list.append(G.subgraph(c).copy())
-    return graph_list
-
-def is_weakly_connected(G):
-    """Test directed graph for weak connectivity.
-
-    Parameters
-    ----------
-    G : NetworkX Graph
-       A directed graph.
-
-    Returns
-    -------
-    connected : bool
-      True if the graph is weakly connected, False otherwise.
-
-    See Also
-    --------
-    strongly_connected_components
-
-    Notes
-    -----
-    For directed graphs only. 
-    """
-    if not G.is_directed():
-        raise nx.NetworkXError("""Not allowed for undirected graph G.
-              See is_connected() for connectivity test.""")
-
-    if len(G)==0:
-        raise nx.NetworkXPointlessConcept(
-            """Connectivity is undefined for the null graph.""")
-
-    return len(weakly_connected_components(G)[0])==len(G)
-
-def _single_source_shortest_unipath_length(G,source,cutoff=None):
-    """Compute the shortest path lengths from source to all reachable nodes.
-
-    The direction of the edge between nodes is ignored.
-    
-    For directed graphs only.
-
-    Parameters
-    ----------
-    G : NetworkX graph
-
-    source : node
-       Starting node for path
-
-    cutoff : integer, optional
-        Depth to stop the search. Only paths of length <= cutoff are returned.
-
-    Returns
-    -------
-    lengths : dictionary
-        Dictionary of shortest path lengths keyed by target.
-    """
-    # namespace speedups
-    Gsucc = G.succ
-    Gpred = G.pred
-
-    seen={}                  # level (number of hops) when seen in BFS
-    level=0                  # the current level
-    nextlevel = set([source]) # set of nodes to check at next level
-    while nextlevel:
-        thislevel=nextlevel  # advance to next level
-        nextlevel = set()         # and start a new list (fringe)
-        for v in thislevel:
-            if v not in seen:
-                seen[v]=level # set the level of vertex v
-                nextlevel.update(Gsucc[v]) # add successors of v
-                nextlevel.update(Gpred[v]) # add predecessors of v
-        if (cutoff is not None and cutoff <= level):  break
-        level=level+1
-    return seen  # return all path lengths as dictionary
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/connectivity/__init__.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/connectivity/__init__.py
deleted file mode 100644
index d14c33e..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/connectivity/__init__.py
+++ /dev/null
@@ -1,4 +0,0 @@
-"""Flow based connectivity and cut algorithms
-"""
-from networkx.algorithms.connectivity.connectivity import *
-from networkx.algorithms.connectivity.cuts import *
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/connectivity/connectivity.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/connectivity/connectivity.py
deleted file mode 100644
index bf6f272..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/connectivity/connectivity.py
+++ /dev/null
@@ -1,607 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-Flow based connectivity algorithms
-"""
-import itertools
-import networkx as nx
-
-__author__ = '\n'.join(['Jordi Torrents <jtorrents@milnou.net>'])
-
-__all__ = [ 'average_node_connectivity',
-            'local_node_connectivity',
-            'node_connectivity',
-            'local_edge_connectivity',
-            'edge_connectivity',
-            'all_pairs_node_connectivity_matrix',
-            'dominating_set',
-            ]
-
-def average_node_connectivity(G):
-    r"""Returns the average connectivity of a graph G.
-
-    The average connectivity `\bar{\kappa}` of a graph G is the average 
-    of local node connectivity over all pairs of nodes of G [1]_ .
-
-    .. math::
-
-        \bar{\kappa}(G) = \frac{\sum_{u,v} \kappa_{G}(u,v)}{{n \choose 2}}
-
-    Parameters
-    ----------
-
-    G : NetworkX graph
-        Undirected graph
-
-    Returns
-    -------
-    K : float
-        Average node connectivity
-
-    See also
-    --------
-    local_node_connectivity
-    node_connectivity
-    local_edge_connectivity
-    edge_connectivity
-    max_flow
-    ford_fulkerson 
-
-    References
-    ----------
-    .. [1]  Beineke, L., O. Oellermann, and R. Pippert (2002). The average 
-            connectivity of a graph. Discrete mathematics 252(1-3), 31-45.
-            http://www.sciencedirect.com/science/article/pii/S0012365X01001807
-
-    """
-    if G.is_directed():
-        iter_func = itertools.permutations
-    else:
-        iter_func = itertools.combinations
-
-    H, mapping = _aux_digraph_node_connectivity(G)
-    num = 0.
-    den = 0.
-    for u,v in iter_func(G, 2):
-        den += 1
-        num += local_node_connectivity(G, u, v, aux_digraph=H, mapping=mapping)
-    
-    if den == 0: # Null Graph
-        return 0
-    return num/den
-
-def _aux_digraph_node_connectivity(G):
-    r""" Creates a directed graph D from an undirected graph G to compute flow
-    based node connectivity.
-
-    For an undirected graph G having `n` nodes and `m` edges we derive a 
-    directed graph D with 2n nodes and 2m+n arcs by replacing each 
-    original node `v` with two nodes `vA`,`vB` linked by an (internal) 
-    arc in D. Then for each edge (u,v) in G we add two arcs (uB,vA) 
-    and (vB,uA) in D. Finally we set the attribute capacity = 1 for each 
-    arc in D [1].
-
-    For a directed graph having `n` nodes and `m` arcs we derive a 
-    directed graph D with 2n nodes and m+n arcs by replacing each 
-    original node `v` with two nodes `vA`,`vB` linked by an (internal) 
-    arc `(vA,vB)` in D. Then for each arc (u,v) in G we add one arc (uB,vA) 
-    in D. Finally we set the attribute capacity = 1 for each arc in D.
-
-    References
-    ----------
-    .. [1] Kammer, Frank and Hanjo Taubig. Graph Connectivity. in Brandes and 
-        Erlebach, 'Network Analysis: Methodological Foundations', Lecture 
-        Notes in Computer Science, Volume 3418, Springer-Verlag, 2005. 
-        http://www.informatik.uni-augsburg.de/thi/personen/kammer/Graph_Connectivity.pdf
- 
-    """
-    directed = G.is_directed()
-
-    mapping = {}
-    D = nx.DiGraph()
-    for i,node in enumerate(G):
-        mapping[node] = i
-        D.add_node('%dA' % i,id=node)
-        D.add_node('%dB' % i,id=node)
-        D.add_edge('%dA' % i, '%dB' % i, capacity=1)
-    
-    edges = []
-    for (source, target) in G.edges():
-        edges.append(('%sB' % mapping[source], '%sA' % mapping[target]))
-        if not directed:
-            edges.append(('%sB' % mapping[target], '%sA' % mapping[source]))
-    
-    D.add_edges_from(edges, capacity=1)
-    return D, mapping
-
-def local_node_connectivity(G, s, t, aux_digraph=None, mapping=None):
-    r"""Computes local node connectivity for nodes s and t.
-
-    Local node connectivity for two non adjacent nodes s and t is the
-    minimum number of nodes that must be removed (along with their incident 
-    edges) to disconnect them.
-
-    This is a flow based implementation of node connectivity. We compute the
-    maximum flow on an auxiliary digraph build from the original input
-    graph (see below for details). This is equal to the local node 
-    connectivity because the value of a maximum s-t-flow is equal to the 
-    capacity of a minimum s-t-cut (Ford and Fulkerson theorem) [1]_ .
-
-    Parameters
-    ----------
-    G : NetworkX graph
-        Undirected graph
-
-    s : node
-        Source node
-
-    t : node
-        Target node
-
-    aux_digraph : NetworkX DiGraph (default=None)
-        Auxiliary digraph to compute flow based node connectivity. If None
-        the auxiliary digraph is build.
-
-    mapping : dict (default=None)
-        Dictionary with a mapping of node names in G and in the auxiliary digraph.
-
-    Returns
-    -------
-    K : integer
-        local node connectivity for nodes s and t
-
-    Examples
-    --------
-    >>> # Platonic icosahedral graph has node connectivity 5 
-    >>> # for each non adjacent node pair
-    >>> G = nx.icosahedral_graph()
-    >>> nx.local_node_connectivity(G,0,6)
-    5
-
-    Notes
-    -----
-    This is a flow based implementation of node connectivity. We compute the
-    maximum flow using the Ford and Fulkerson algorithm on an auxiliary digraph 
-    build from the original input graph:
-
-    For an undirected graph G having `n` nodes and `m` edges we derive a 
-    directed graph D with 2n nodes and 2m+n arcs by replacing each 
-    original node `v` with two nodes `v_A`, `v_B` linked by an (internal) 
-    arc in `D`. Then for each edge (`u`, `v`) in G we add two arcs 
-    (`u_B`, `v_A`) and (`v_B`, `u_A`) in `D`. Finally we set the attribute 
-    capacity = 1 for each arc in `D` [1]_ .
-
-    For a directed graph G having `n` nodes and `m` arcs we derive a 
-    directed graph `D` with `2n` nodes and `m+n` arcs by replacing each 
-    original node `v` with two nodes `v_A`, `v_B` linked by an (internal) 
-    arc `(v_A, v_B)` in D. Then for each arc `(u,v)` in G we add one arc 
-    `(u_B,v_A)` in `D`. Finally we set the attribute capacity = 1 for 
-    each arc in `D`.
-
-    This is equal to the local node connectivity because the value of 
-    a maximum s-t-flow is equal to the capacity of a minimum s-t-cut (Ford 
-    and Fulkerson theorem).
-
-    See also
-    --------
-    node_connectivity
-    all_pairs_node_connectivity_matrix
-    local_edge_connectivity
-    edge_connectivity
-    max_flow
-    ford_fulkerson 
-
-    References
-    ----------
-    .. [1] Kammer, Frank and Hanjo Taubig. Graph Connectivity. in Brandes and 
-        Erlebach, 'Network Analysis: Methodological Foundations', Lecture 
-        Notes in Computer Science, Volume 3418, Springer-Verlag, 2005. 
-        http://www.informatik.uni-augsburg.de/thi/personen/kammer/Graph_Connectivity.pdf
-    
-    """ 
-    if aux_digraph is None or mapping is None:
-        H, mapping = _aux_digraph_node_connectivity(G)
-    else:
-        H = aux_digraph 
-    return nx.max_flow(H,'%sB' % mapping[s], '%sA' % mapping[t])
-
-def node_connectivity(G, s=None, t=None):
-    r"""Returns node connectivity for a graph or digraph G.
-
-    Node connectivity is equal to the minimum number of nodes that 
-    must be removed to disconnect G or render it trivial. If source 
-    and target nodes are provided, this function returns the local node
-    connectivity: the minimum number of nodes that must be removed to break
-    all paths from source to target in G.
-
-    This is a flow based implementation. The algorithm is based in 
-    solving a number of max-flow problems (ie local st-node connectivity, 
-    see local_node_connectivity) to determine the capacity of the
-    minimum cut on an auxiliary directed network that corresponds to the 
-    minimum node cut of G. It handles both directed and undirected graphs.
-   
-    Parameters
-    ----------
-    G : NetworkX graph
-        Undirected graph
-
-    s : node
-        Source node. Optional (default=None)
-
-    t : node
-        Target node. Optional (default=None)
-
-    Returns
-    -------
-    K : integer
-        Node connectivity of G, or local node connectivity if source 
-        and target were provided
-
-    Examples
-    --------
-    >>> # Platonic icosahedral graph is 5-node-connected 
-    >>> G = nx.icosahedral_graph()
-    >>> nx.node_connectivity(G)
-    5
-    >>> nx.node_connectivity(G, 3, 7)
-    5
-    
-    Notes
-    -----
-    This is a flow based implementation of node connectivity. The 
-    algorithm works by solving `O((n-\delta-1+\delta(\delta-1)/2)` max-flow 
-    problems on an auxiliary digraph. Where `\delta` is the minimum degree 
-    of G. For details about the auxiliary digraph and the computation of
-    local node connectivity see local_node_connectivity.
-
-    This implementation is based on algorithm 11 in [1]_. We use the Ford 
-    and Fulkerson algorithm to compute max flow (see ford_fulkerson).
-    
-    See also
-    --------
-    local_node_connectivity
-    all_pairs_node_connectivity_matrix
-    local_edge_connectivity
-    edge_connectivity
-    max_flow
-    ford_fulkerson 
-
-    References
-    ----------
-    .. [1] Abdol-Hossein Esfahanian. Connectivity Algorithms. 
-        http://www.cse.msu.edu/~cse835/Papers/Graph_connectivity_revised.pdf
-
-    """
-    # Local node connectivity
-    if s is not None and t is not None:
-        if s not in G:
-            raise nx.NetworkXError('node %s not in graph' % s)
-        if t not in G:
-            raise nx.NetworkXError('node %s not in graph' % t)
-        return local_node_connectivity(G, s, t)
-    # Global node connectivity
-    if G.is_directed():
-        if not nx.is_weakly_connected(G):
-            return 0
-        iter_func = itertools.permutations
-        # I think that it is necessary to consider both predecessors
-        # and successors for directed graphs
-        def neighbors(v):
-            return itertools.chain.from_iterable([G.predecessors_iter(v),
-                                                  G.successors_iter(v)])
-    else:
-        if not nx.is_connected(G):
-            return 0
-        iter_func = itertools.combinations
-        neighbors = G.neighbors_iter
-    # Initial guess \kappa = n - 1
-    K = G.order()-1
-    deg = G.degree()
-    min_deg = min(deg.values())
-    v = next(n for n,d in deg.items() if d==min_deg)
-    # Reuse the auxiliary digraph
-    H, mapping = _aux_digraph_node_connectivity(G)
-    # compute local node connectivity with all non-neighbors nodes
-    for w in set(G) - set(neighbors(v)) - set([v]):
-        K = min(K, local_node_connectivity(G, v, w, 
-                                            aux_digraph=H, mapping=mapping))
-    # Same for non adjacent pairs of neighbors of v
-    for x,y in iter_func(neighbors(v), 2):
-        if y in G[x]: continue
-        K = min(K, local_node_connectivity(G, x, y, 
-                                            aux_digraph=H, mapping=mapping))
-    return K
-
-def all_pairs_node_connectivity_matrix(G):
-    """Return a numpy 2d ndarray with node connectivity between all pairs
-    of nodes.
-
-    Parameters
-    ----------
-    G : NetworkX graph
-        Undirected graph
-
-    Returns
-    -------
-    K : 2d numpy ndarray
-         node connectivity between all pairs of nodes.
-
-    See also
-    --------
-    local_node_connectivity
-    node_connectivity
-    local_edge_connectivity
-    edge_connectivity
-    max_flow
-    ford_fulkerson 
-
-    """
-    try:
-        import numpy
-    except ImportError:
-        raise ImportError(\
-            "all_pairs_node_connectivity_matrix() requires NumPy")
-
-    n = G.order()
-    M = numpy.zeros((n, n), dtype=int)
-    # Create auxiliary Digraph
-    D, mapping = _aux_digraph_node_connectivity(G)
-
-    if G.is_directed():
-        for u, v in itertools.permutations(G, 2):
-            K = local_node_connectivity(G, u, v, aux_digraph=D, mapping=mapping)
-            M[mapping[u],mapping[v]] = K
-    else:
-        for u, v in itertools.combinations(G, 2):
-            K = local_node_connectivity(G, u, v, aux_digraph=D, mapping=mapping)
-            M[mapping[u],mapping[v]] = M[mapping[v],mapping[u]] = K
-
-    return M
-
-def _aux_digraph_edge_connectivity(G):
-    """Auxiliary digraph for computing flow based edge connectivity
-    
-    If the input graph is undirected, we replace each edge (u,v) with
-    two reciprocal arcs (u,v) and (v,u) and then we set the attribute 
-    'capacity' for each arc to 1. If the input graph is directed we simply
-    add the 'capacity' attribute. Part of algorithm 1 in [1]_ .
-    
-    References
-    ----------
-    .. [1] Abdol-Hossein Esfahanian. Connectivity Algorithms. (this is a 
-        chapter, look for the reference of the book).
-        http://www.cse.msu.edu/~cse835/Papers/Graph_connectivity_revised.pdf
-    """
-    if G.is_directed():
-        if nx.get_edge_attributes(G, 'capacity'):
-            return G
-        D = G.copy()
-        capacity = dict((e,1) for e in D.edges())
-        nx.set_edge_attributes(D, 'capacity', capacity)
-        return D
-    else:
-        D = G.to_directed()
-        capacity = dict((e,1) for e in D.edges())
-        nx.set_edge_attributes(D, 'capacity', capacity)
-        return D
-
-def local_edge_connectivity(G, u, v, aux_digraph=None):
-    r"""Returns local edge connectivity for nodes s and t in G.
-
-    Local edge connectivity for two nodes s and t is the minimum number 
-    of edges that must be removed to disconnect them.     
-
-    This is a flow based implementation of edge connectivity. We compute the
-    maximum flow on an auxiliary digraph build from the original
-    network (see below for details). This is equal to the local edge 
-    connectivity because the value of a maximum s-t-flow is equal to the 
-    capacity of a minimum s-t-cut (Ford and Fulkerson theorem) [1]_ .
-
-    Parameters
-    ----------
-    G : NetworkX graph
-        Undirected or directed graph
-
-    s : node
-        Source node
-
-    t : node
-        Target node
-
-    aux_digraph : NetworkX DiGraph (default=None)
-        Auxiliary digraph to compute flow based edge connectivity. If None
-        the auxiliary digraph is build.
-
-    Returns
-    -------
-    K : integer
-        local edge connectivity for nodes s and t
-
-    Examples
-    --------
-    >>> # Platonic icosahedral graph has edge connectivity 5 
-    >>> # for each non adjacent node pair
-    >>> G = nx.icosahedral_graph()
-    >>> nx.local_edge_connectivity(G,0,6)
-    5
-
-    Notes
-    -----
-    This is a flow based implementation of edge connectivity. We compute the
-    maximum flow using the Ford and Fulkerson algorithm on an auxiliary digraph 
-    build from the original graph:
-
-    If the input graph is undirected, we replace each edge (u,v) with
-    two reciprocal arcs `(u,v)` and `(v,u)` and then we set the attribute 
-    'capacity' for each arc to 1. If the input graph is directed we simply
-    add the 'capacity' attribute. This is an implementation of algorithm 1 
-    in [1]_.
-    
-    The maximum flow in the auxiliary network is equal to the local edge 
-    connectivity because the value of a maximum s-t-flow is equal to the 
-    capacity of a minimum s-t-cut (Ford and Fulkerson theorem).
-
-    See also
-    --------
-    local_node_connectivity
-    node_connectivity
-    edge_connectivity
-    max_flow
-    ford_fulkerson 
-
-    References
-    ----------
-    .. [1] Abdol-Hossein Esfahanian. Connectivity Algorithms.
-        http://www.cse.msu.edu/~cse835/Papers/Graph_connectivity_revised.pdf
- 
-    """
-    if aux_digraph is None: 
-        H = _aux_digraph_edge_connectivity(G)
-    else:
-        H = aux_digraph
-    return nx.max_flow(H, u, v)
-
-def edge_connectivity(G, s=None, t=None):
-    r"""Returns the edge connectivity of the graph or digraph G.
-
-    The edge connectivity is equal to the minimum number of edges that 
-    must be removed to disconnect G or render it trivial. If source 
-    and target nodes are provided, this function returns the local edge
-    connectivity: the minimum number of edges that must be removed to 
-    break all paths from source to target in G.
-    
-    This is a flow based implementation. The algorithm is based in solving 
-    a number of max-flow problems (ie local st-edge connectivity, see 
-    local_edge_connectivity) to determine the capacity of the minimum 
-    cut on an auxiliary directed network that corresponds to the minimum 
-    edge cut of G. It handles both directed and undirected graphs.
- 
-    Parameters
-    ----------
-    G : NetworkX graph
-        Undirected or directed graph
-
-    s : node
-        Source node. Optional (default=None)
-
-    t : node
-        Target node. Optional (default=None)
- 
-    Returns
-    -------
-    K : integer
-        Edge connectivity for G, or local edge connectivity if source 
-        and target were provided
-
-    Examples
-    --------
-    >>> # Platonic icosahedral graph is 5-edge-connected
-    >>> G = nx.icosahedral_graph()
-    >>> nx.edge_connectivity(G)
-    5
-
-    Notes
-    -----
-    This is a flow based implementation of global edge connectivity. For
-    undirected graphs the algorithm works by finding a 'small' dominating 
-    set of nodes of G (see algorithm 7 in [1]_ ) and computing local max flow 
-    (see local_edge_connectivity) between an arbitrary node in the dominating 
-    set and the rest of nodes in it. This is an implementation of 
-    algorithm 6 in [1]_ .
-
-    For directed graphs, the algorithm does n calls to the max flow function.
-    This is an implementation of algorithm 8 in [1]_ . We use the Ford and 
-    Fulkerson algorithm to compute max flow (see ford_fulkerson).
-    
-    See also
-    --------
-    local_node_connectivity
-    node_connectivity
-    local_edge_connectivity
-    max_flow
-    ford_fulkerson 
-
-    References
-    ----------
-    .. [1] Abdol-Hossein Esfahanian. Connectivity Algorithms. 
-        http://www.cse.msu.edu/~cse835/Papers/Graph_connectivity_revised.pdf
-
-    """
-    # Local edge connectivity
-    if s is not None and t is not None:
-        if s not in G:
-            raise nx.NetworkXError('node %s not in graph' % s)
-        if t not in G:
-            raise nx.NetworkXError('node %s not in graph' % t)
-        return local_edge_connectivity(G, s, t)
-    # Global edge connectivity
-    if G.is_directed():
-        # Algorithm 8 in [1]
-        if not nx.is_weakly_connected(G):
-            return 0
-        # initial value for lambda is min degree (\delta(G))
-        L = min(G.degree().values())
-        # reuse auxiliary digraph
-        H = _aux_digraph_edge_connectivity(G)
-        nodes = G.nodes()
-        n = len(nodes)
-        for i in range(n):
-            try:
-                L = min(L, local_edge_connectivity(G, nodes[i], 
-                                                    nodes[i+1], aux_digraph=H))
-            except IndexError: # last node!
-                L = min(L, local_edge_connectivity(G, nodes[i], 
-                                                    nodes[0], aux_digraph=H))
-        return L
-    else: # undirected
-        # Algorithm 6 in [1]
-        if not nx.is_connected(G):
-            return 0
-        # initial value for lambda is min degree (\delta(G))
-        L = min(G.degree().values())
-        # reuse auxiliary digraph
-        H = _aux_digraph_edge_connectivity(G)
-        # A dominating set is \lambda-covering
-        # We need a dominating set with at least two nodes
-        for node in G:
-            D = dominating_set(G, start_with=node)
-            v = D.pop()
-            if D: break
-        else: 
-            # in complete graphs the dominating sets will always be of one node
-            # thus we return min degree
-            return L
-        for w in D:
-            L = min(L, local_edge_connectivity(G, v, w, aux_digraph=H))
-        return L
-
-def dominating_set(G, start_with=None):
-    # Algorithm 7 in [1]
-    all_nodes = set(G)
-    if start_with is None:
-        v = set(G).pop() # pick a node
-    else:
-        if start_with not in G:
-            raise nx.NetworkXError('node %s not in G' % start_with)
-        v = start_with
-    D = set([v])
-    ND = set([nbr for nbr in G[v]])
-    other = all_nodes - ND - D
-    while other:
-        w = other.pop()
-        D.add(w)
-        ND.update([nbr for nbr in G[w] if nbr not in D])
-        other = all_nodes - ND - D
-    return D
-
-def is_dominating_set(G, nbunch):
-    # Proposed by Dan on the mailing list
-    allnodes=set(G)
-    testset=set(n for n in nbunch if n in G)
-    nbrs=set()
-    for n in testset:
-        nbrs.update(G[n])
-    if nbrs - allnodes:  # some nodes left--not dominating
-        return False
-    else:
-        return True
-
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/connectivity/cuts.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/connectivity/cuts.py
deleted file mode 100644
index a55bc0d..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/connectivity/cuts.py
+++ /dev/null
@@ -1,382 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-Flow based cut algorithms
-"""
-# http://www.informatik.uni-augsburg.de/thi/personen/kammer/Graph_Connectivity.pdf
-# http://www.cse.msu.edu/~cse835/Papers/Graph_connectivity_revised.pdf
-import itertools
-from operator import itemgetter
-import networkx as nx
-from networkx.algorithms.connectivity.connectivity import \
-    _aux_digraph_node_connectivity, _aux_digraph_edge_connectivity, \
-    dominating_set, node_connectivity
-
-__author__ = '\n'.join(['Jordi Torrents <jtorrents@milnou.net>'])
-
-__all__ = [ 'minimum_st_node_cut',
-            'minimum_node_cut',
-            'minimum_st_edge_cut',
-            'minimum_edge_cut',
-            ]
-
-def minimum_st_edge_cut(G, s, t, capacity='capacity'):
-    """Returns the edges of the cut-set of a minimum (s, t)-cut.
-
-    We use the max-flow min-cut theorem, i.e., the capacity of a minimum
-    capacity cut is equal to the flow value of a maximum flow.
-
-    Parameters
-    ----------
-    G : NetworkX graph
-        Edges of the graph are expected to have an attribute called
-        'capacity'. If this attribute is not present, the edge is
-        considered to have infinite capacity.
-
-    s : node
-        Source node for the flow.
-
-    t : node
-        Sink node for the flow.
-
-    capacity: string
-        Edges of the graph G are expected to have an attribute capacity
-        that indicates how much flow the edge can support. If this
-        attribute is not present, the edge is considered to have
-        infinite capacity. Default value: 'capacity'.
-
-    Returns
-    -------
-    cutset : set
-        Set of edges that, if removed from the graph, will disconnect it
-    
-    Raises
-    ------
-    NetworkXUnbounded
-        If the graph has a path of infinite capacity, all cuts have
-        infinite capacity and the function raises a NetworkXError.
-    
-    Examples
-    --------
-    >>> G = nx.DiGraph()
-    >>> G.add_edge('x','a', capacity = 3.0)
-    >>> G.add_edge('x','b', capacity = 1.0)
-    >>> G.add_edge('a','c', capacity = 3.0)
-    >>> G.add_edge('b','c', capacity = 5.0)
-    >>> G.add_edge('b','d', capacity = 4.0)
-    >>> G.add_edge('d','e', capacity = 2.0)
-    >>> G.add_edge('c','y', capacity = 2.0)
-    >>> G.add_edge('e','y', capacity = 3.0)
-    >>> sorted(nx.minimum_edge_cut(G, 'x', 'y'))
-    [('c', 'y'), ('x', 'b')]
-    >>> nx.min_cut(G, 'x', 'y')
-    3.0
-    """
-    try:
-        flow, H = nx.ford_fulkerson_flow_and_auxiliary(G, s, t, capacity=capacity)
-        cutset = set()
-        # Compute reachable nodes from source in the residual network
-        reachable = set(nx.single_source_shortest_path(H,s)) 
-        # And unreachable nodes
-        others = set(H) - reachable # - set([s])
-        # Any edge in the original network linking these two partitions
-        # is part of the edge cutset
-        for u, nbrs in ((n, G[n]) for n in reachable):
-            cutset.update((u,v) for v in nbrs if v in others)
-        return cutset
-    except nx.NetworkXUnbounded:
-        # Should we raise any other exception or just let ford_fulkerson 
-        # propagate nx.NetworkXUnbounded ?
-        raise nx.NetworkXUnbounded("Infinite capacity path, no minimum cut.")
-
-def minimum_st_node_cut(G, s, t, aux_digraph=None, mapping=None):
-    r"""Returns a set of nodes of minimum cardinality that disconnect source
-    from target in G.
-
-    This function returns the set of nodes of minimum cardinality that, 
-    if removed, would destroy all paths among source and target in G. 
-    
-    Parameters
-    ----------
-    G : NetworkX graph
-
-    s : node
-        Source node.
-
-    t : node
-        Target node.
-
-    Returns
-    -------
-    cutset : set
-        Set of nodes that, if removed, would destroy all paths between 
-        source and target in G.
-
-    Examples
-    --------
-    >>> # Platonic icosahedral graph has node connectivity 5 
-    >>> G = nx.icosahedral_graph()
-    >>> len(nx.minimum_node_cut(G, 0, 6))
-    5
-
-    Notes
-    -----
-    This is a flow based implementation of minimum node cut. The algorithm 
-    is based in solving a number of max-flow problems (ie local st-node
-    connectivity, see local_node_connectivity) to determine the capacity 
-    of the minimum cut on an auxiliary directed network that corresponds 
-    to the minimum node cut of G. It handles both directed and undirected 
-    graphs.
-
-    This implementation is based on algorithm 11 in [1]_. We use the Ford 
-    and Fulkerson algorithm to compute max flow (see ford_fulkerson).
-
-    See also
-    --------
-    node_connectivity
-    edge_connectivity
-    minimum_edge_cut
-    max_flow
-    ford_fulkerson 
-
-    References
-    ----------
-    .. [1] Abdol-Hossein Esfahanian. Connectivity Algorithms. 
-        http://www.cse.msu.edu/~cse835/Papers/Graph_connectivity_revised.pdf
-
-    """
-    if aux_digraph is None or mapping is None:
-        H, mapping = _aux_digraph_node_connectivity(G)
-    else:
-        H = aux_digraph
-    edge_cut = minimum_st_edge_cut(H, '%sB' % mapping[s], '%sA' % mapping[t])
-    # Each node in the original graph maps to two nodes of the auxiliary graph
-    node_cut = set(H.node[node]['id'] for edge in edge_cut for node in edge)
-    return node_cut - set([s,t])
-
-def minimum_node_cut(G, s=None, t=None):
-    r"""Returns a set of nodes of minimum cardinality that disconnects G.
-
-    If source and target nodes are provided, this function returns the 
-    set of nodes of minimum cardinality that, if removed, would destroy 
-    all paths among source and target in G. If not, it returns a set 
-    of nodes of minimum cardinality that disconnects G.
-    
-    Parameters
-    ----------
-    G : NetworkX graph
-
-    s : node
-        Source node. Optional (default=None)
-
-    t : node
-        Target node. Optional (default=None)
-
-    Returns
-    -------
-    cutset : set
-        Set of nodes that, if removed, would disconnect G. If source 
-        and target nodes are provided, the set contians the nodes that
-        if removed, would destroy all paths between source and target.
-
-    Examples
-    --------
-    >>> # Platonic icosahedral graph has node connectivity 5 
-    >>> G = nx.icosahedral_graph()
-    >>> len(nx.minimum_node_cut(G))
-    5
-    >>> # this is the minimum over any pair of non adjacent nodes
-    >>> from itertools import combinations
-    >>> for u,v in combinations(G, 2):
-    ...     if v not in G[u]:
-    ...         assert(len(nx.minimum_node_cut(G,u,v)) == 5)
-    ... 
-
-    Notes
-    -----
-    This is a flow based implementation of minimum node cut. The algorithm 
-    is based in solving a number of max-flow problems (ie local st-node
-    connectivity, see local_node_connectivity) to determine the capacity 
-    of the minimum cut on an auxiliary directed network that corresponds 
-    to the minimum node cut of G. It handles both directed and undirected 
-    graphs.
-
-    This implementation is based on algorithm 11 in [1]_. We use the Ford 
-    and Fulkerson algorithm to compute max flow (see ford_fulkerson).
-
-    See also
-    --------
-    node_connectivity
-    edge_connectivity
-    minimum_edge_cut
-    max_flow
-    ford_fulkerson 
-
-    References
-    ----------
-    .. [1] Abdol-Hossein Esfahanian. Connectivity Algorithms. 
-        http://www.cse.msu.edu/~cse835/Papers/Graph_connectivity_revised.pdf
-
-    """
-    # Local minimum node cut
-    if s is not None and t is not None:
-        if s not in G:
-            raise nx.NetworkXError('node %s not in graph' % s)
-        if t not in G:
-            raise nx.NetworkXError('node %s not in graph' % t)
-        return minimum_st_node_cut(G, s, t)
-    # Global minimum node cut
-    # Analog to the algoritm 11 for global node connectivity in [1]
-    if G.is_directed():
-        if not nx.is_weakly_connected(G):
-            raise nx.NetworkXError('Input graph is not connected')
-        iter_func = itertools.permutations
-        def neighbors(v):
-            return itertools.chain.from_iterable([G.predecessors_iter(v),
-                                                  G.successors_iter(v)])
-    else:
-        if not nx.is_connected(G):
-            raise nx.NetworkXError('Input graph is not connected')
-        iter_func = itertools.combinations
-        neighbors = G.neighbors_iter
-    # Choose a node with minimum degree
-    deg = G.degree()
-    min_deg = min(deg.values())
-    v = next(n for n,d in deg.items() if d == min_deg)
-    # Initial node cutset is all neighbors of the node with minimum degree
-    min_cut = set(G[v])
-    # Reuse the auxiliary digraph
-    H, mapping = _aux_digraph_node_connectivity(G)
-    # compute st node cuts between v and all its non-neighbors nodes in G
-    # and store the minimum
-    for w in set(G) - set(neighbors(v)) - set([v]):
-        this_cut = minimum_st_node_cut(G, v, w, aux_digraph=H, mapping=mapping)
-        if len(min_cut) >= len(this_cut):
-            min_cut = this_cut
-    # Same for non adjacent pairs of neighbors of v
-    for x,y in iter_func(neighbors(v),2):
-        if y in G[x]: continue
-        this_cut = minimum_st_node_cut(G, x, y, aux_digraph=H, mapping=mapping)
-        if len(min_cut) >= len(this_cut):
-            min_cut = this_cut
-    return min_cut
-
-def minimum_edge_cut(G, s=None, t=None):
-    r"""Returns a set of edges of minimum cardinality that disconnects G.
-
-    If source and target nodes are provided, this function returns the 
-    set of edges of minimum cardinality that, if removed, would break 
-    all paths among source and target in G. If not, it returns a set of 
-    edges of minimum cardinality that disconnects G.
-    
-    Parameters
-    ----------
-    G : NetworkX graph
-
-    s : node
-        Source node. Optional (default=None)
-
-    t : node
-        Target node. Optional (default=None)
-
-    Returns
-    -------
-    cutset : set
-        Set of edges that, if removed, would disconnect G. If source 
-        and target nodes are provided, the set contians the edges that
-        if removed, would destroy all paths between source and target.
-
-    Examples
-    --------
-    >>> # Platonic icosahedral graph has edge connectivity 5
-    >>> G = nx.icosahedral_graph()
-    >>> len(nx.minimum_edge_cut(G))
-    5
-    >>> # this is the minimum over any pair of nodes
-    >>> from itertools import combinations
-    >>> for u,v in combinations(G, 2):
-    ...     assert(len(nx.minimum_edge_cut(G,u,v)) == 5)
-    ... 
-
-    Notes
-    -----
-    This is a flow based implementation of minimum edge cut. For
-    undirected graphs the algorithm works by finding a 'small' dominating
-    set of nodes of G (see algorithm 7 in [1]_) and computing the maximum
-    flow between an arbitrary node in the dominating set and the rest of
-    nodes in it. This is an implementation of algorithm 6 in [1]_.
-
-    For directed graphs, the algorithm does n calls to the max flow function.
-    This is an implementation of algorithm 8 in [1]_. We use the Ford and
-    Fulkerson algorithm to compute max flow (see ford_fulkerson).
-
-    See also
-    --------
-    node_connectivity
-    edge_connectivity
-    minimum_node_cut
-    max_flow
-    ford_fulkerson
-
-    References
-    ----------
-    .. [1] Abdol-Hossein Esfahanian. Connectivity Algorithms.
-        http://www.cse.msu.edu/~cse835/Papers/Graph_connectivity_revised.pdf
-
-    """
-    # reuse auxiliary digraph
-    H = _aux_digraph_edge_connectivity(G)
-    # Local minimum edge cut if s and t are not None
-    if s is not None and t is not None:
-        if s not in G:
-            raise nx.NetworkXError('node %s not in graph' % s)
-        if t not in G:
-            raise nx.NetworkXError('node %s not in graph' % t)
-        return minimum_st_edge_cut(H, s, t)
-    # Global minimum edge cut
-    # Analog to the algoritm for global edge connectivity
-    if G.is_directed():
-        # Based on algorithm 8 in [1]
-        if not nx.is_weakly_connected(G):
-            raise nx.NetworkXError('Input graph is not connected')
-        # Initial cutset is all edges of a node with minimum degree
-        deg = G.degree()
-        min_deg = min(deg.values())
-        node = next(n for n,d in deg.items() if d==min_deg)
-        min_cut = G.edges(node)
-        nodes = G.nodes()
-        n = len(nodes)
-        for i in range(n):
-            try:
-                this_cut = minimum_st_edge_cut(H, nodes[i], nodes[i+1])
-                if len(this_cut) <= len(min_cut):
-                    min_cut = this_cut
-            except IndexError: # Last node!
-                this_cut = minimum_st_edge_cut(H, nodes[i], nodes[0])
-                if len(this_cut) <= len(min_cut):
-                    min_cut = this_cut
-        return min_cut
-    else: # undirected
-        # Based on algorithm 6 in [1]
-        if not nx.is_connected(G):
-            raise nx.NetworkXError('Input graph is not connected')
-        # Initial cutset is all edges of a node with minimum degree
-        deg = G.degree()
-        min_deg = min(deg.values())
-        node = next(n for n,d in deg.items() if d==min_deg)
-        min_cut = G.edges(node)
-        # A dominating set is \lambda-covering
-        # We need a dominating set with at least two nodes
-        for node in G:
-            D = dominating_set(G, start_with=node)
-            v = D.pop()
-            if D: break
-        else:
-            # in complete graphs the dominating set will always be of one node
-            # thus we return min_cut, which now contains the edges of a node
-            # with minimum degree
-            return min_cut
-        for w in D:
-            this_cut = minimum_st_edge_cut(H, v, w)
-            if len(this_cut) <= len(min_cut):
-                min_cut = this_cut
-        return min_cut
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/connectivity/tests/test_connectivity.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/connectivity/tests/test_connectivity.py
deleted file mode 100644
index 2745504..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/connectivity/tests/test_connectivity.py
+++ /dev/null
@@ -1,145 +0,0 @@
-from nose.tools import assert_equal, assert_true, assert_false
-import networkx as nx
-
-# helper functions for tests
-def _generate_no_biconnected(max_attempts=50):
-    attempts = 0
-    while True:
-        G = nx.fast_gnp_random_graph(100,0.0575)
-        if nx.is_connected(G) and not nx.is_biconnected(G):
-            attempts = 0
-            yield G
-        else:
-            if attempts >= max_attempts:
-                msg = "Tried %d times: no suitable Graph."
-                raise Exception(msg % max_attempts)
-            else:
-                attempts += 1
-
-def is_dominating_set(G, nbunch):
-    # Proposed by Dan on the mailing list
-    allnodes=set(G)
-    testset=set(n for n in nbunch if n in G)
-    nbrs=set()
-    for n in testset:
-        nbrs.update(G[n])
-    if nbrs - allnodes:  # some nodes left--not dominating
-        return False
-    else:
-        return True
-
-# Tests for node and edge connectivity
-def test_average_connectivity():
-    # figure 1 from:
-    # Beineke, L., O. Oellermann, and R. Pippert (2002). The average 
-    # connectivity of a graph. Discrete mathematics 252(1-3), 31-45
-    # http://www.sciencedirect.com/science/article/pii/S0012365X01001807
-    G1 = nx.path_graph(3)
-    G1.add_edges_from([(1,3),(1,4)])
-    assert_equal(nx.average_node_connectivity(G1),1)
-    G2 = nx.path_graph(3)
-    G2.add_edges_from([(1,3),(1,4),(0,3),(0,4),(3,4)])
-    assert_equal(nx.average_node_connectivity(G2),2.2)
-    G3 = nx.Graph()
-    assert_equal(nx.average_node_connectivity(G3),0)
-
-def test_articulation_points():
-    Ggen = _generate_no_biconnected()
-    for i in range(5):
-        G = next(Ggen)
-        assert_equal(nx.node_connectivity(G), 1)
-
-def test_brandes_erlebach():
-    # Figure 1 chapter 7: Connectivity
-    # http://www.informatik.uni-augsburg.de/thi/personen/kammer/Graph_Connectivity.pdf
-    G = nx.Graph()
-    G.add_edges_from([(1,2),(1,3),(1,4),(1,5),(2,3),(2,6),(3,4),
-                    (3,6),(4,6),(4,7),(5,7),(6,8),(6,9),(7,8),
-                    (7,10),(8,11),(9,10),(9,11),(10,11)])
-    assert_equal(3,nx.local_edge_connectivity(G,1,11))
-    assert_equal(3,nx.edge_connectivity(G,1,11))
-    assert_equal(2,nx.local_node_connectivity(G,1,11))
-    assert_equal(2,nx.node_connectivity(G,1,11))
-    assert_equal(2,nx.edge_connectivity(G)) # node 5 has degree 2
-    assert_equal(2,nx.node_connectivity(G))
-
-def test_white_harary_1():
-    # Figure 1b white and harary (2001)
-    # # http://eclectic.ss.uci.edu/~drwhite/sm-w23.PDF
-    # A graph with high adhesion (edge connectivity) and low cohesion
-    # (vertex connectivity)
-    G = nx.disjoint_union(nx.complete_graph(4), nx.complete_graph(4))
-    G.remove_node(7)
-    for i in range(4,7):
-        G.add_edge(0,i)
-    G = nx.disjoint_union(G, nx.complete_graph(4))
-    G.remove_node(G.order()-1)
-    for i in range(7,10):
-        G.add_edge(0,i)
-    assert_equal(1, nx.node_connectivity(G))
-    assert_equal(3, nx.edge_connectivity(G))
-
-def test_white_harary_2():
-    # Figure 8 white and harary (2001)
-    # # http://eclectic.ss.uci.edu/~drwhite/sm-w23.PDF
-    G = nx.disjoint_union(nx.complete_graph(4), nx.complete_graph(4))
-    G.add_edge(0,4)
-    # kappa <= lambda <= delta
-    assert_equal(3, min(nx.core_number(G).values()))
-    assert_equal(1, nx.node_connectivity(G))
-    assert_equal(1, nx.edge_connectivity(G))
-
-def test_complete_graphs():
-    for n in range(5, 25, 5):
-        G = nx.complete_graph(n)
-        assert_equal(n-1, nx.node_connectivity(G))
-        assert_equal(n-1, nx.node_connectivity(G.to_directed()))
-        assert_equal(n-1, nx.edge_connectivity(G))
-        assert_equal(n-1, nx.edge_connectivity(G.to_directed()))
-
-def test_empty_graphs():
-    for k in range(5, 25, 5):
-        G = nx.empty_graph(k)
-        assert_equal(0, nx.node_connectivity(G))
-        assert_equal(0, nx.edge_connectivity(G))
-
-def test_petersen():
-    G = nx.petersen_graph()
-    assert_equal(3, nx.node_connectivity(G))
-    assert_equal(3, nx.edge_connectivity(G))
-
-def test_tutte():
-    G = nx.tutte_graph()
-    assert_equal(3, nx.node_connectivity(G))
-    assert_equal(3, nx.edge_connectivity(G))
-
-def test_dodecahedral():
-    G = nx.dodecahedral_graph()
-    assert_equal(3, nx.node_connectivity(G))
-    assert_equal(3, nx.edge_connectivity(G))
-
-def test_octahedral():
-    G=nx.octahedral_graph()
-    assert_equal(4, nx.node_connectivity(G))
-    assert_equal(4, nx.edge_connectivity(G))
-
-def test_icosahedral():
-    G=nx.icosahedral_graph()
-    assert_equal(5, nx.node_connectivity(G))
-    assert_equal(5, nx.edge_connectivity(G))
-
-def test_directed_edge_connectivity():
-    G = nx.cycle_graph(10,create_using=nx.DiGraph()) # only one direction
-    D = nx.cycle_graph(10).to_directed() # 2 reciprocal edges
-    assert_equal(1, nx.edge_connectivity(G))
-    assert_equal(1, nx.local_edge_connectivity(G,1,4))
-    assert_equal(1, nx.edge_connectivity(G,1,4))
-    assert_equal(2, nx.edge_connectivity(D))
-    assert_equal(2, nx.local_edge_connectivity(D,1,4))
-    assert_equal(2, nx.edge_connectivity(D,1,4))
-
-def test_dominating_set():
-    for i in range(5):
-        G = nx.gnp_random_graph(100,0.1)
-        D = nx.dominating_set(G)
-        assert_true(is_dominating_set(G,D))
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/connectivity/tests/test_cuts.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/connectivity/tests/test_cuts.py
deleted file mode 100644
index 0570494..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/connectivity/tests/test_cuts.py
+++ /dev/null
@@ -1,157 +0,0 @@
-from nose.tools import assert_equal, assert_true, assert_false, assert_raises
-import networkx as nx
-
-# Tests for node and edge cutsets
-def _generate_no_biconnected(max_attempts=50):
-    attempts = 0
-    while True:
-        G = nx.fast_gnp_random_graph(100,0.0575)
-        if nx.is_connected(G) and not nx.is_biconnected(G):
-            attempts = 0
-            yield G
-        else:
-            if attempts >= max_attempts:
-                msg = "Tried %d times: no suitable Graph."%attempts
-                raise Exception(msg % max_attempts)
-            else:
-                attempts += 1
- 
-def test_articulation_points():
-    Ggen = _generate_no_biconnected()
-    for i in range(5):
-        G = next(Ggen)
-        cut = nx.minimum_node_cut(G)
-        assert_true(len(cut) == 1)
-        assert_true(cut.pop() in set(nx.articulation_points(G)))
-
-def test_brandes_erlebach_book():
-    # Figure 1 chapter 7: Connectivity
-    # http://www.informatik.uni-augsburg.de/thi/personen/kammer/Graph_Connectivity.pdf
-    G = nx.Graph()
-    G.add_edges_from([(1,2),(1,3),(1,4),(1,5),(2,3),(2,6),(3,4),
-                    (3,6),(4,6),(4,7),(5,7),(6,8),(6,9),(7,8),
-                    (7,10),(8,11),(9,10),(9,11),(10,11)])
-    # edge cutsets
-    assert_equal(3, len(nx.minimum_edge_cut(G,1,11)))
-    edge_cut = nx.minimum_edge_cut(G)
-    assert_equal(2, len(edge_cut)) # Node 5 has only two edges
-    H = G.copy()
-    H.remove_edges_from(edge_cut)
-    assert_false(nx.is_connected(H))
-    # node cuts
-    assert_equal(set([6,7]), nx.minimum_st_node_cut(G,1,11))
-    assert_equal(set([6,7]), nx.minimum_node_cut(G,1,11))
-    node_cut = nx.minimum_node_cut(G)
-    assert_equal(2,len(node_cut))
-    H = G.copy()
-    H.remove_nodes_from(node_cut)
-    assert_false(nx.is_connected(H))
-
-def test_white_harary_paper():
-    # Figure 1b white and harary (2001)
-    # http://eclectic.ss.uci.edu/~drwhite/sm-w23.PDF
-    # A graph with high adhesion (edge connectivity) and low cohesion
-    # (node connectivity)
-    G = nx.disjoint_union(nx.complete_graph(4), nx.complete_graph(4))
-    G.remove_node(7)
-    for i in range(4,7):
-        G.add_edge(0,i)
-    G = nx.disjoint_union(G, nx.complete_graph(4))
-    G.remove_node(G.order()-1)
-    for i in range(7,10):
-        G.add_edge(0,i)
-    # edge cuts
-    edge_cut = nx.minimum_edge_cut(G)
-    assert_equal(3, len(edge_cut))
-    H = G.copy()
-    H.remove_edges_from(edge_cut)
-    assert_false(nx.is_connected(H))
-    # node cuts
-    node_cut = nx.minimum_node_cut(G)
-    assert_equal(set([0]), node_cut)
-    H = G.copy()
-    H.remove_nodes_from(node_cut)
-    assert_false(nx.is_connected(H))
-
-def test_petersen_cutset():
-    G = nx.petersen_graph()
-    # edge cuts
-    edge_cut = nx.minimum_edge_cut(G)
-    assert_equal(3, len(edge_cut))
-    H = G.copy()
-    H.remove_edges_from(edge_cut)
-    assert_false(nx.is_connected(H))
-    # node cuts
-    node_cut = nx.minimum_node_cut(G)
-    assert_equal(3,len(node_cut))
-    H = G.copy()
-    H.remove_nodes_from(node_cut)
-    assert_false(nx.is_connected(H))
-
-def test_octahedral_cutset():
-    G=nx.octahedral_graph()
-    # edge cuts
-    edge_cut = nx.minimum_edge_cut(G)
-    assert_equal(4, len(edge_cut))
-    H = G.copy()
-    H.remove_edges_from(edge_cut)
-    assert_false(nx.is_connected(H))
-    # node cuts
-    node_cut = nx.minimum_node_cut(G)
-    assert_equal(4,len(node_cut))
-    H = G.copy()
-    H.remove_nodes_from(node_cut)
-    assert_false(nx.is_connected(H))
-
-def test_icosahedral_cutset():
-    G=nx.icosahedral_graph()
-    # edge cuts
-    edge_cut = nx.minimum_edge_cut(G)
-    assert_equal(5, len(edge_cut))
-    H = G.copy()
-    H.remove_edges_from(edge_cut)
-    assert_false(nx.is_connected(H))
-    # node cuts
-    node_cut = nx.minimum_node_cut(G)
-    assert_equal(5,len(node_cut))
-    H = G.copy()
-    H.remove_nodes_from(node_cut)
-    assert_false(nx.is_connected(H))
-
-def test_node_cutset_exception():
-    G=nx.Graph()
-    G.add_edges_from([(1,2),(3,4)])
-    assert_raises(nx.NetworkXError, nx.minimum_node_cut,G)
-
-def test_node_cutset_random_graphs():
-    for i in range(5):
-        G = nx.fast_gnp_random_graph(50,0.2)
-        if not nx.is_connected(G):
-            ccs = iter(nx.connected_components(G))
-            start = next(ccs)[0]
-            G.add_edges_from( (start,c[0]) for c in ccs )
-        cutset = nx.minimum_node_cut(G)
-        assert_equal(nx.node_connectivity(G), len(cutset))
-        G.remove_nodes_from(cutset)
-        assert_false(nx.is_connected(G))
-
-def test_edge_cutset_random_graphs():
-    for i in range(5):
-        G = nx.fast_gnp_random_graph(50,0.2)
-        if not nx.is_connected(G):
-            ccs = iter(nx.connected_components(G))
-            start = next(ccs)[0]
-            G.add_edges_from( (start,c[0]) for c in ccs )
-        cutset = nx.minimum_edge_cut(G)
-        assert_equal(nx.edge_connectivity(G), len(cutset))
-        G.remove_edges_from(cutset)
-        assert_false(nx.is_connected(G))
-
-# Test empty graphs
-def test_empty_graphs():
-    G = nx.Graph()
-    D = nx.DiGraph()
-    assert_raises(nx.NetworkXPointlessConcept, nx.minimum_node_cut, G)
-    assert_raises(nx.NetworkXPointlessConcept, nx.minimum_node_cut, D)
-    assert_raises(nx.NetworkXPointlessConcept, nx.minimum_edge_cut, G)
-    assert_raises(nx.NetworkXPointlessConcept, nx.minimum_edge_cut, D)
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/core.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/core.py
deleted file mode 100644
index 4daba25..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/core.py
+++ /dev/null
@@ -1,324 +0,0 @@
-"""
-Find the k-cores of a graph.
-
-The k-core is found by recursively pruning nodes with degrees less than k.
-
-See the following reference for details:
-
-An O(m) Algorithm for Cores Decomposition of Networks
-Vladimir Batagelj and Matjaz Zaversnik, 2003.
-http://arxiv.org/abs/cs.DS/0310049
-
-"""
-__author__ = "\n".join(['Dan Schult (dschult@colgate.edu)',
-                        'Jason Grout (jason-sage@creativetrax.com)',
-                        'Aric Hagberg (hagberg@lanl.gov)'])
-
-#    Copyright (C) 2004-2010 by
-#    Aric Hagberg <hagberg@lanl.gov>
-#    Dan Schult <dschult@colgate.edu>
-#    Pieter Swart <swart@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-__all__ = ['core_number','k_core','k_shell','k_crust','k_corona','find_cores']
-
-import networkx as nx
-
-def core_number(G):
-    """Return the core number for each vertex.
-
-    A k-core is a maximal subgraph that contains nodes of degree k or more.
-
-    The core number of a node is the largest value k of a k-core containing
-    that node.
-
-    Parameters
-    ----------
-    G : NetworkX graph
-       A graph or directed graph
-
-    Returns
-    -------
-    core_number : dictionary
-       A dictionary keyed by node to the core number.
-
-    Raises
-    ------
-    NetworkXError
-        The k-core is not defined for graphs with self loops or parallel edges.
-
-    Notes
-    -----
-    Not implemented for graphs with parallel edges or self loops.
-
-    For directed graphs the node degree is defined to be the
-    in-degree + out-degree.
-
-    References
-    ----------
-    .. [1] An O(m) Algorithm for Cores Decomposition of Networks
-       Vladimir Batagelj and Matjaz Zaversnik, 2003.
-       http://arxiv.org/abs/cs.DS/0310049
-    """
-    if G.is_multigraph():
-        raise nx.NetworkXError(
-                'MultiGraph and MultiDiGraph types not supported.')
-
-    if G.number_of_selfloops()>0:
-        raise nx.NetworkXError(
-                'Input graph has self loops; the core number is not defined.',
-                'Consider using G.remove_edges_from(G.selfloop_edges()).')
-
-    if G.is_directed():
-        import itertools
-        def neighbors(v):
-            return itertools.chain.from_iterable([G.predecessors_iter(v),
-                                                  G.successors_iter(v)])
-    else:
-        neighbors=G.neighbors_iter
-    degrees=G.degree()
-    # sort nodes by degree
-    nodes=sorted(degrees,key=degrees.get)
-    bin_boundaries=[0]
-    curr_degree=0
-    for i,v in enumerate(nodes):
-        if degrees[v]>curr_degree:
-            bin_boundaries.extend([i]*(degrees[v]-curr_degree))
-            curr_degree=degrees[v]
-    node_pos = dict((v,pos) for pos,v in enumerate(nodes))
-    # initial guesses for core is degree
-    core=degrees
-    nbrs=dict((v,set(neighbors(v))) for v in G)
-    for v in nodes:
-        for u in nbrs[v]:
-            if core[u] > core[v]:
-                nbrs[u].remove(v)
-                pos=node_pos[u]
-                bin_start=bin_boundaries[core[u]]
-                node_pos[u]=bin_start
-                node_pos[nodes[bin_start]]=pos
-                nodes[bin_start],nodes[pos]=nodes[pos],nodes[bin_start]
-                bin_boundaries[core[u]]+=1
-                core[u]-=1
-    return core
-
-find_cores=core_number
-
-def k_core(G,k=None,core_number=None):
-    """Return the k-core of G.
-
-    A k-core is a maximal subgraph that contains nodes of degree k or more.
-
-    Parameters
-    ----------
-    G : NetworkX graph
-      A graph or directed graph
-    k : int, optional
-      The order of the core.  If not specified return the main core.
-    core_number : dictionary, optional
-      Precomputed core numbers for the graph G.
-
-    Returns
-    -------
-    G : NetworkX graph
-      The k-core subgraph
-
-    Raises
-    ------
-    NetworkXError
-      The k-core is not defined for graphs with self loops or parallel edges.
-
-    Notes
-    -----
-    The main core is the core with the largest degree.
-
-    Not implemented for graphs with parallel edges or self loops.
-
-    For directed graphs the node degree is defined to be the
-    in-degree + out-degree.
-
-    Graph, node, and edge attributes are copied to the subgraph.
-
-    See Also
-    --------
-    core_number
-
-    References
-    ----------
-    .. [1] An O(m) Algorithm for Cores Decomposition of Networks
-       Vladimir Batagelj and Matjaz Zaversnik,  2003.
-       http://arxiv.org/abs/cs.DS/0310049
-    """
-    if core_number is None:
-        core_number=nx.core_number(G)
-    if k is None:
-        k=max(core_number.values()) # max core
-    nodes=(n for n in core_number if core_number[n]>=k)
-    return G.subgraph(nodes).copy()
-
-def k_shell(G,k=None,core_number=None):
-    """Return the k-shell of G.
-
-    The k-shell is the subgraph of nodes in the k-core containing
-    nodes of exactly degree k.
-
-    Parameters
-    ----------
-    G : NetworkX graph
-      A graph or directed graph.
-    k : int, optional
-      The order of the shell.  If not specified return the main shell.
-    core_number : dictionary, optional
-      Precomputed core numbers for the graph G.
-
-
-    Returns
-    -------
-    G : NetworkX graph
-       The k-shell subgraph
-
-    Raises
-    ------
-    NetworkXError
-        The k-shell is not defined for graphs with self loops or parallel edges.
-
-    Notes
-    -----
-    This is similar to k_corona but in that case only neighbors in the
-    k-core are considered.
-
-    Not implemented for graphs with parallel edges or self loops.
-
-    For directed graphs the node degree is defined to be the
-    in-degree + out-degree.
-
-    Graph, node, and edge attributes are copied to the subgraph.
-
-    See Also
-    --------
-    core_number
-    k_corona
-
-
-    ----------
-    .. [1] A model of Internet topology using k-shell decomposition
-       Shai Carmi, Shlomo Havlin, Scott Kirkpatrick, Yuval Shavitt,
-       and Eran Shir, PNAS  July 3, 2007   vol. 104  no. 27  11150-11154
-       http://www.pnas.org/content/104/27/11150.full
-    """
-    if core_number is None:
-        core_number=nx.core_number(G)
-    if k is None:
-        k=max(core_number.values()) # max core
-    nodes=(n for n in core_number if core_number[n]==k)
-    return G.subgraph(nodes).copy()
-
-def k_crust(G,k=None,core_number=None):
-    """Return the k-crust of G.
-
-    The k-crust is the graph G with the k-core removed.
-
-    Parameters
-    ----------
-    G : NetworkX graph
-       A graph or directed graph.
-    k : int, optional
-      The order of the shell.  If not specified return the main crust.
-    core_number : dictionary, optional
-      Precomputed core numbers for the graph G.
-
-    Returns
-    -------
-    G : NetworkX graph
-       The k-crust subgraph
-
-    Raises
-    ------
-    NetworkXError
-        The k-crust is not defined for graphs with self loops or parallel edges.
-
-    Notes
-    -----
-    This definition of k-crust is different than the definition in [1]_.
-    The k-crust in [1]_ is equivalent to the k+1 crust of this algorithm.
-
-    Not implemented for graphs with parallel edges or self loops.
-
-    For directed graphs the node degree is defined to be the
-    in-degree + out-degree.
-
-    Graph, node, and edge attributes are copied to the subgraph.
-
-    See Also
-    --------
-    core_number
-
-    References
-    ----------
-    .. [1] A model of Internet topology using k-shell decomposition
-       Shai Carmi, Shlomo Havlin, Scott Kirkpatrick, Yuval Shavitt,
-       and Eran Shir, PNAS  July 3, 2007   vol. 104  no. 27  11150-11154
-       http://www.pnas.org/content/104/27/11150.full
-    """
-    if core_number is None:
-        core_number=nx.core_number(G)
-    if k is None:
-        k=max(core_number.values())-1
-    nodes=(n for n in core_number if core_number[n]<=k)
-    return G.subgraph(nodes).copy()
-
-
-def k_corona(G, k, core_number=None):
-    """Return the k-crust of G.
-
-    The k-corona is the subset of vertices in the k-core which have
-    exactly k neighbours in the k-core.
-
-    Parameters
-    ----------
-    G : NetworkX graph
-       A graph or directed graph
-    k : int
-       The order of the corona.
-    core_number : dictionary, optional
-       Precomputed core numbers for the graph G.
-
-    Returns
-    -------
-    G : NetworkX graph
-       The k-corona subgraph
-
-    Raises
-    ------
-    NetworkXError
-        The k-cornoa is not defined for graphs with self loops or
-        parallel edges.
-
-    Notes
-    -----
-    Not implemented for graphs with parallel edges or self loops.
-
-    For directed graphs the node degree is defined to be the
-    in-degree + out-degree.
-
-    Graph, node, and edge attributes are copied to the subgraph.
-
-    See Also
-    --------
-    core_number
-
-    References
-    ----------
-    .. [1]  k -core (bootstrap) percolation on complex networks:
-       Critical phenomena and nonlocal effects,
-       A. V. Goltsev, S. N. Dorogovtsev, and J. F. F. Mendes,
-       Phys. Rev. E 73, 056101 (2006)
-       http://link.aps.org/doi/10.1103/PhysRevE.73.056101
-    """
-
-    if core_number is None:
-        core_number = nx.core_number(G)
-    nodes = (n for n in core_number
-             if core_number[n] >= k
-             and len([v for v in G[n] if core_number[v] >= k]) == k)
-    return G.subgraph(nodes).copy()
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/cycles.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/cycles.py
deleted file mode 100644
index 4955538..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/cycles.py
+++ /dev/null
@@ -1,317 +0,0 @@
-"""
-========================
-Cycle finding algorithms
-========================
-"""
-#    Copyright (C) 2010-2012 by
-#    Aric Hagberg <hagberg@lanl.gov>
-#    Dan Schult <dschult@colgate.edu>
-#    Pieter Swart <swart@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-import networkx as nx
-from networkx.utils import *
-from collections import defaultdict
-
-__all__ = ['cycle_basis','simple_cycles','recursive_simple_cycles']
-__author__ = "\n".join(['Jon Olav Vik <jonovik@gmail.com>',
-                        'Dan Schult <dschult@colgate.edu>',
-                        'Aric Hagberg <hagberg@lanl.gov>'])
-
-@not_implemented_for('directed')
-@not_implemented_for('multigraph')
-def cycle_basis(G,root=None):
-    """ Returns a list of cycles which form a basis for cycles of G.
-
-    A basis for cycles of a network is a minimal collection of
-    cycles such that any cycle in the network can be written
-    as a sum of cycles in the basis.  Here summation of cycles
-    is defined as "exclusive or" of the edges. Cycle bases are
-    useful, e.g. when deriving equations for electric circuits
-    using Kirchhoff's Laws.
-
-    Parameters
-    ----------
-    G : NetworkX Graph
-    root : node, optional
-       Specify starting node for basis.
-
-    Returns
-    -------
-    A list of cycle lists.  Each cycle list is a list of nodes
-    which forms a cycle (loop) in G.
-
-    Examples
-    --------
-    >>> G=nx.Graph()
-    >>> G.add_cycle([0,1,2,3])
-    >>> G.add_cycle([0,3,4,5])
-    >>> print(nx.cycle_basis(G,0))
-    [[3, 4, 5, 0], [1, 2, 3, 0]]
-
-    Notes
-    -----
-    This is adapted from algorithm CACM 491 [1]_.
-
-    References
-    ----------
-    .. [1] Paton, K. An algorithm for finding a fundamental set of
-       cycles of a graph. Comm. ACM 12, 9 (Sept 1969), 514-518.
-
-    See Also
-    --------
-    simple_cycles
-    """
-    gnodes=set(G.nodes())
-    cycles=[]
-    while gnodes:  # loop over connected components
-        if root is None:
-            root=gnodes.pop()
-        stack=[root]
-        pred={root:root}
-        used={root:set()}
-        while stack:  # walk the spanning tree finding cycles
-            z=stack.pop()  # use last-in so cycles easier to find
-            zused=used[z]
-            for nbr in G[z]:
-                if nbr not in used:   # new node
-                    pred[nbr]=z
-                    stack.append(nbr)
-                    used[nbr]=set([z])
-                elif nbr == z:        # self loops
-                    cycles.append([z])
-                elif nbr not in zused:# found a cycle
-                    pn=used[nbr]
-                    cycle=[nbr,z]
-                    p=pred[z]
-                    while p not in pn:
-                        cycle.append(p)
-                        p=pred[p]
-                    cycle.append(p)
-                    cycles.append(cycle)
-                    used[nbr].add(z)
-        gnodes-=set(pred)
-        root=None
-    return cycles
-
-
-@not_implemented_for('undirected')
-def simple_cycles(G):
-    """Find simple cycles (elementary circuits) of a directed graph.
-
-    An simple cycle, or elementary circuit, is a closed path where no
-    node appears twice, except that the first and last node are the same.
-    Two elementary circuits are distinct if they are not cyclic permutations
-    of each other.
-
-    This is a nonrecursive, iterator/generator version of Johnson's
-    algorithm [1]_.  There may be better algorithms for some cases [2]_ [3]_.
-
-    Parameters
-    ----------
-    G : NetworkX DiGraph
-       A directed graph
-
-    Returns
-    -------
-    cycle_generator: generator
-       A generator that produces elementary cycles of the graph.  Each cycle is
-       a list of nodes with the first and last nodes being the same.
-
-    Examples
-    --------
-    >>> G = nx.DiGraph([(0, 0), (0, 1), (0, 2), (1, 2), (2, 0), (2, 1), (2, 2)])
-    >>> list(nx.simple_cycles(G))
-    [[2], [2, 1], [2, 0], [2, 0, 1], [0]]
-
-    Notes
-    -----
-    The implementation follows pp. 79-80 in [1]_.
-
-    The time complexity is O((n+e)(c+1)) for n nodes, e edges and c
-    elementary circuits.
-
-    To filter the cycles so that they don't include certain nodes or edges,
-    copy your graph and eliminate those nodes or edges before calling.
-    >>> copyG = G.copy()
-    >>> copyG.remove_nodes_from([1])
-    >>> copyG.remove_edges_from([(0,1)])
-    >>> list(nx.simple_cycles(copyG))
-    [[2], [2, 0], [0]]
-
-    References
-    ----------
-    .. [1] Finding all the elementary circuits of a directed graph.
-       D. B. Johnson, SIAM Journal on Computing 4, no. 1, 77-84, 1975.
-       http://dx.doi.org/10.1137/0204007
-
-    .. [2] Enumerating the cycles of a digraph: a new preprocessing strategy.
-       G. Loizou and P. Thanish, Information Sciences, v. 27, 163-182, 1982.
-
-    .. [3] A search strategy for the elementary cycles of a directed graph.
-       J.L. Szwarcfiter and P.E. Lauer, BIT NUMERICAL MATHEMATICS,
-       v. 16, no. 2, 192-204, 1976.
-
-    See Also
-    --------
-    cycle_basis
-    """
-    def _unblock(thisnode,blocked,B):
-        stack=set([thisnode])
-        while stack:
-            node=stack.pop()
-            if node in blocked:
-                blocked.remove(node)
-                stack.update(B[node])
-                B[node].clear()
-
-    # Johnson's algorithm requires some ordering of the nodes.
-    # We assign the arbitrary ordering given by the strongly connected comps
-    # There is no need to track the ordering as each node removed as processed.
-    subG=G.copy()   # save the actual graph so we can mutate it here
-    sccs = nx.strongly_connected_components(subG)
-    while sccs:
-        scc=sccs.pop()
-        # order of scc determines ordering of nodes
-        startnode = scc.pop()
-        # Processing node runs "circuit" routine from recursive version
-        path=[startnode]
-        blocked = set() # vertex: blocked from search?
-        closed = set() # nodes involved in a cycle
-        blocked.add(startnode)
-        B=defaultdict(set) # graph portions that yield no elementary circuit
-        stack=[ (startnode,list(subG[startnode])) ]  # subG gives component nbrs
-        while stack:
-            thisnode,nbrs = stack[-1]
-            if nbrs:
-                nextnode = nbrs.pop()
-#                    print thisnode,nbrs,":",nextnode,blocked,B,path,stack,startnode
-#                    f=raw_input("pause")
-                if nextnode == startnode:
-                    yield path[:]
-                    closed.update(path)
-#                        print "Found a cycle",path,closed
-                elif nextnode not in blocked:
-                    path.append(nextnode)
-                    stack.append( (nextnode,list(subG[nextnode])) )
-                    blocked.add(nextnode)
-                    continue
-            # done with nextnode... look for more neighbors
-            if not nbrs:  # no more nbrs
-                if thisnode in closed:
-                    _unblock(thisnode,blocked,B)
-                else:
-                    for nbr in G[thisnode]:
-                        if thisnode not in B[nbr]:
-                            B[nbr].add(thisnode)
-                stack.pop()
-#                assert path[-1]==thisnode
-                path.pop()
-        # done processing this node
-        subG.remove_node(startnode)
-        H=subG.subgraph(scc)  # make smaller to avoid work in SCC routine
-        sccs.extend(nx.strongly_connected_components(H))
-
-
-@not_implemented_for('undirected')
-def recursive_simple_cycles(G):
-    """Find simple cycles (elementary circuits) of a directed graph.
-
-    A simple cycle, or elementary circuit, is a closed path where no
-    node appears twice, except that the first and last node are the same.
-    Two elementary circuits are distinct if they are not cyclic permutations
-    of each other.
-
-    This version uses a recursive algorithm to build a list of cycles.
-    You should probably use the iterator version caled simple_cycles().
-    Warning: This recursive version uses lots of RAM!
-
-    Parameters
-    ----------
-    G : NetworkX DiGraph
-       A directed graph
-
-    Returns
-    -------
-    A list of circuits, where each circuit is a list of nodes, with the first
-    and last node being the same.
-
-    Example:
-    >>> G = nx.DiGraph([(0, 0), (0, 1), (0, 2), (1, 2), (2, 0), (2, 1), (2, 2)])
-    >>> nx.recursive_simple_cycles(G)
-    [[0], [0, 1, 2], [0, 2], [1, 2], [2]]
-
-    See Also
-    --------
-    cycle_basis (for undirected graphs)
-
-    Notes
-    -----
-    The implementation follows pp. 79-80 in [1]_.
-
-    The time complexity is O((n+e)(c+1)) for n nodes, e edges and c
-    elementary circuits.
-
-    References
-    ----------
-    .. [1] Finding all the elementary circuits of a directed graph.
-       D. B. Johnson, SIAM Journal on Computing 4, no. 1, 77-84, 1975.
-       http://dx.doi.org/10.1137/0204007
-
-    See Also
-    --------
-    simple_cycles, cycle_basis
-    """
-    # Jon Olav Vik, 2010-08-09
-    def _unblock(thisnode):
-        """Recursively unblock and remove nodes from B[thisnode]."""
-        if blocked[thisnode]:
-            blocked[thisnode] = False
-            while B[thisnode]:
-                _unblock(B[thisnode].pop())
-
-    def circuit(thisnode, startnode, component):
-        closed = False # set to True if elementary path is closed
-        path.append(thisnode)
-        blocked[thisnode] = True
-        for nextnode in component[thisnode]: # direct successors of thisnode
-            if nextnode == startnode:
-                result.append(path[:])
-                closed = True
-            elif not blocked[nextnode]:
-                if circuit(nextnode, startnode, component):
-                    closed = True
-        if closed:
-            _unblock(thisnode)
-        else:
-            for nextnode in component[thisnode]:
-                if thisnode not in B[nextnode]: # TODO: use set for speedup?
-                    B[nextnode].append(thisnode)
-        path.pop() # remove thisnode from path
-        return closed
-
-    path = [] # stack of nodes in current path
-    blocked = defaultdict(bool) # vertex: blocked from search?
-    B = defaultdict(list) # graph portions that yield no elementary circuit
-    result = [] # list to accumulate the circuits found
-    # Johnson's algorithm requires some ordering of the nodes.
-    # They might not be sortable so we assign an arbitrary ordering.
-    ordering=dict(zip(G,range(len(G))))
-    for s in ordering:
-        # Build the subgraph induced by s and following nodes in the ordering
-        subgraph = G.subgraph(node for node in G
-                              if ordering[node] >= ordering[s])
-        # Find the strongly connected component in the subgraph
-        # that contains the least node according to the ordering
-        strongcomp = nx.strongly_connected_components(subgraph)
-        mincomp=min(strongcomp,
-                    key=lambda nodes: min(ordering[n] for n in nodes))
-        component = G.subgraph(mincomp)
-        if component:
-            # smallest node in the component according to the ordering
-            startnode = min(component,key=ordering.__getitem__)
-            for node in component:
-                blocked[node] = False
-                B[node][:] = []
-            dummy=circuit(startnode, startnode, component)
-    return result
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/dag.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/dag.py
deleted file mode 100644
index 4d376e0..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/dag.py
+++ /dev/null
@@ -1,275 +0,0 @@
-# -*- coding: utf-8 -*-
-from fractions import gcd
-import networkx as nx
-"""Algorithms for directed acyclic graphs (DAGs)."""
-#    Copyright (C) 2006-2011 by 
-#    Aric Hagberg <hagberg@lanl.gov>
-#    Dan Schult <dschult@colgate.edu>
-#    Pieter Swart <swart@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-__author__ = """\n""".join(['Aric Hagberg <aric.hagberg@gmail.com>',
-                            'Dan Schult (dschult@colgate.edu)',
-                            'Ben Edwards (bedwards@cs.unm.edu)'])
-__all__ = ['descendants',
-           'ancestors',
-           'topological_sort', 
-           'topological_sort_recursive',
-           'is_directed_acyclic_graph',
-           'is_aperiodic']
-
-def descendants(G, source):
-    """Return all nodes reachable from `source` in G.
-
-    Parameters
-    ----------
-    G : NetworkX DiGraph
-    source : node in G
-
-    Returns
-    -------
-    des : set()
-       The descendants of source in G
-    """
-    if not G.has_node(source):
-        raise nx.NetworkXError("The node %s is not in the graph." % source)
-    des = set(nx.shortest_path_length(G, source=source).keys()) - set([source])
-    return des
-
-def ancestors(G, source):
-    """Return all nodes having a path to `source` in G.
-
-    Parameters
-    ----------
-    G : NetworkX DiGraph
-    source : node in G
-
-    Returns
-    -------
-    ancestors : set()
-       The ancestors of source in G
-    """
-    if not G.has_node(source):
-        raise nx.NetworkXError("The node %s is not in the graph." % source)
-    anc = set(nx.shortest_path_length(G, target=source).keys()) - set([source])
-    return anc
-
-def is_directed_acyclic_graph(G):
-    """Return True if the graph G is a directed acyclic graph (DAG) or 
-    False if not.
-    
-    Parameters
-    ----------
-    G : NetworkX graph
-      A graph
-
-    Returns
-    -------
-    is_dag : bool
-       True if G is a DAG, false otherwise
-    """
-    if not G.is_directed():
-        return False
-    try:
-        topological_sort(G)
-        return True
-    except nx.NetworkXUnfeasible:
-        return False
-
-def topological_sort(G,nbunch=None):
-    """Return a list of nodes in topological sort order.
-
-    A topological sort is a nonunique permutation of the nodes
-    such that an edge from u to v implies that u appears before v in the
-    topological sort order.
-
-    Parameters
-    ----------
-    G : NetworkX digraph
-       A directed graph
-
-    nbunch : container of nodes (optional)
-       Explore graph in specified order given in nbunch
-
-    Raises
-    ------
-    NetworkXError
-       Topological sort is defined for directed graphs only. If the
-       graph G is undirected, a NetworkXError is raised.
-
-    NetworkXUnfeasible
-       If G is not a directed acyclic graph (DAG) no topological sort
-       exists and a NetworkXUnfeasible exception is raised.
-
-    Notes
-    -----
-    This algorithm is based on a description and proof in
-    The Algorithm Design Manual [1]_ .
-
-    See also
-    --------
-    is_directed_acyclic_graph
-
-    References
-    ----------
-    .. [1] Skiena, S. S. The Algorithm Design Manual  (Springer-Verlag, 1998). 
-        http://www.amazon.com/exec/obidos/ASIN/0387948600/ref=ase_thealgorithmrepo/
-    """
-    if not G.is_directed():
-        raise nx.NetworkXError(
-                "Topological sort not defined on undirected graphs.")
-
-    # nonrecursive version
-    seen = set()
-    order = [] 
-    explored = set() 
-                     
-    if nbunch is None:
-        nbunch = G.nodes_iter() 
-    for v in nbunch:     # process all vertices in G
-        if v in explored: 
-            continue
-        fringe = [v]   # nodes yet to look at
-        while fringe:
-            w = fringe[-1]  # depth first search
-            if w in explored: # already looked down this branch
-                fringe.pop()
-                continue
-            seen.add(w)     # mark as seen
-            # Check successors for cycles and for new nodes
-            new_nodes = []
-            for n in G[w]:
-                if n not in explored:
-                    if n in seen: #CYCLE !!
-                        raise nx.NetworkXUnfeasible("Graph contains a cycle.")
-                    new_nodes.append(n)
-            if new_nodes:   # Add new_nodes to fringe
-                fringe.extend(new_nodes)
-            else:           # No new nodes so w is fully explored
-                explored.add(w)
-                order.append(w)
-                fringe.pop()    # done considering this node
-    return list(reversed(order))
-
-def topological_sort_recursive(G,nbunch=None):
-    """Return a list of nodes in topological sort order.
-
-    A topological sort is a nonunique permutation of the nodes such
-    that an edge from u to v implies that u appears before v in the
-    topological sort order.
-
-    Parameters
-    ----------
-    G : NetworkX digraph
-
-    nbunch : container of nodes (optional)
-       Explore graph in specified order given in nbunch
-
-    Raises
-    ------
-    NetworkXError
-       Topological sort is defined for directed graphs only. If the
-       graph G is undirected, a NetworkXError is raised.
-
-    NetworkXUnfeasible
-        If G is not a directed acyclic graph (DAG) no topological sort
-        exists and a NetworkXUnfeasible exception is raised.
-
-    Notes
-    -----
-    This is a recursive version of topological sort.
-
-    See also
-    --------
-    topological_sort
-    is_directed_acyclic_graph
-
-    """
-    if not G.is_directed():
-        raise nx.NetworkXError(
-            "Topological sort not defined on undirected graphs.")
-
-    def _dfs(v):
-        ancestors.add(v)
-
-        for w in G[v]:
-            if w in ancestors:
-                raise nx.NetworkXUnfeasible("Graph contains a cycle.")
-
-            if w not in explored:
-                _dfs(w)
-
-        ancestors.remove(v)
-        explored.add(v)
-        order.append(v)
-
-    ancestors = set()
-    explored = set()
-    order = []
-
-    if nbunch is None:
-        nbunch = G.nodes_iter()
-
-    for v in nbunch:
-        if v not in explored:
-            _dfs(v)
-            
-    return list(reversed(order))
-
-def is_aperiodic(G):
-    """Return True if G is aperiodic.
-
-    A directed graph is aperiodic if there is no integer k > 1 that 
-    divides the length of every cycle in the graph.
-
-    Parameters
-    ----------
-    G : NetworkX DiGraph
-      Graph
-
-    Returns
-    -------
-    aperiodic : boolean
-      True if the graph is aperiodic False otherwise
-
-    Raises
-    ------
-    NetworkXError
-      If G is not directed
-
-    Notes
-    -----
-    This uses the method outlined in [1]_, which runs in O(m) time
-    given m edges in G. Note that a graph is not aperiodic if it is
-    acyclic as every integer trivial divides length 0 cycles.
-
-    References
-    ----------
-    .. [1] Jarvis, J. P.; Shier, D. R. (1996),
-       Graph-theoretic analysis of finite Markov chains,
-       in Shier, D. R.; Wallenius, K. T., Applied Mathematical Modeling:
-       A Multidisciplinary Approach, CRC Press.
-    """
-    if not G.is_directed():
-        raise nx.NetworkXError("is_aperiodic not defined for undirected graphs")
-
-    s = next(G.nodes_iter())
-    levels = {s:0}
-    this_level = [s]
-    g = 0
-    l = 1
-    while this_level:
-        next_level = []
-        for u in this_level:
-            for v in G[u]:
-                if v in levels: # Non-Tree Edge
-                    g = gcd(g, levels[u]-levels[v] + 1)
-                else: # Tree Edge
-                    next_level.append(v)
-                    levels[v] = l
-        this_level = next_level
-        l += 1
-    if len(levels)==len(G): #All nodes in tree
-        return g==1
-    else:
-        return g==1 and nx.is_aperiodic(G.subgraph(set(G)-set(levels)))
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/distance_measures.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/distance_measures.py
deleted file mode 100644
index 33df686..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/distance_measures.py
+++ /dev/null
@@ -1,170 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-Graph diameter, radius, eccentricity and other properties.
-"""
-__author__ = "\n".join(['Aric Hagberg (hagberg@lanl.gov)',
-                        'Dan Schult(dschult@colgate.edu)'])
-#    Copyright (C) 2004-2010 by 
-#    Aric Hagberg <hagberg@lanl.gov>
-#    Dan Schult <dschult@colgate.edu>
-#    Pieter Swart <swart@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-
-__all__ = ['eccentricity', 'diameter', 'radius', 'periphery', 'center']
-
-import networkx
-
-def eccentricity(G, v=None, sp=None):
-    """Return the eccentricity of nodes in G.
-
-    The eccentricity of a node v is the maximum distance from v to
-    all other nodes in G.
-
-    Parameters
-    ----------
-    G : NetworkX graph
-       A graph
-
-    v : node, optional
-       Return value of specified node       
-
-    sp : dict of dicts, optional       
-       All pairs shortest path lengths as a dictionary of dictionaries
-
-    Returns
-    -------
-    ecc : dictionary
-       A dictionary of eccentricity values keyed by node.
-    """
-#    nodes=
-#    nodes=[]
-#    if v is None:                # none, use entire graph 
-#        nodes=G.nodes()
-#    elif v in G:               # is v a single node
-#        nodes=[v]
-#    else:                      # assume v is a container of nodes
-#        nodes=v
-    order=G.order()
-
-    e={}
-    for n in G.nbunch_iter(v):
-        if sp is None:
-            length=networkx.single_source_shortest_path_length(G,n)
-            L = len(length)
-        else:
-            try:
-                length=sp[n]
-                L = len(length)
-            except TypeError:
-                raise networkx.NetworkXError('Format of "sp" is invalid.')
-        if L != order:
-            msg = "Graph not connected: infinite path length"
-            raise networkx.NetworkXError(msg)
-            
-        e[n]=max(length.values())
-
-    if v in G:
-        return e[v]  # return single value
-    else:
-        return e
-
-
-def diameter(G, e=None):
-    """Return the diameter of the graph G.
-
-    The diameter is the maximum eccentricity.
-
-    Parameters
-    ----------
-    G : NetworkX graph
-       A graph
-
-    e : eccentricity dictionary, optional
-      A precomputed dictionary of eccentricities.
-
-    Returns
-    -------
-    d : integer
-       Diameter of graph
-
-    See Also
-    --------
-    eccentricity
-    """
-    if e is None:
-        e=eccentricity(G)
-    return max(e.values())
-
-def periphery(G, e=None):
-    """Return the periphery of the graph G. 
-
-    The periphery is the set of nodes with eccentricity equal to the diameter. 
-
-    Parameters
-    ----------
-    G : NetworkX graph
-       A graph
-
-    e : eccentricity dictionary, optional
-      A precomputed dictionary of eccentricities.
-
-    Returns
-    -------
-    p : list
-       List of nodes in periphery
-    """
-    if e is None:
-        e=eccentricity(G)
-    diameter=max(e.values())
-    p=[v for v in e if e[v]==diameter]
-    return p
-
-
-def radius(G, e=None):
-    """Return the radius of the graph G.
-
-    The radius is the minimum eccentricity.
-
-    Parameters
-    ----------
-    G : NetworkX graph
-       A graph
-
-    e : eccentricity dictionary, optional
-      A precomputed dictionary of eccentricities.
-
-    Returns
-    -------
-    r : integer
-       Radius of graph
-    """
-    if e is None:
-        e=eccentricity(G)
-    return min(e.values())
-
-def center(G, e=None):
-    """Return the center of the graph G. 
-
-    The center is the set of nodes with eccentricity equal to radius. 
-
-    Parameters
-    ----------
-    G : NetworkX graph
-       A graph
-
-    e : eccentricity dictionary, optional
-      A precomputed dictionary of eccentricities.
-
-    Returns
-    -------
-    c : list
-       List of nodes in center
-    """
-    if e is None:
-        e=eccentricity(G)
-    # order the nodes by path length
-    radius=min(e.values())
-    p=[v for v in e if e[v]==radius]
-    return p
-
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/distance_regular.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/distance_regular.py
deleted file mode 100644
index 3fbcdbc..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/distance_regular.py
+++ /dev/null
@@ -1,179 +0,0 @@
-"""
-=======================
-Distance-regular graphs
-=======================
-"""
-#    Copyright (C) 2011 by 
-#    Dheeraj M R <dheerajrav@gmail.com>
-#    Aric Hagberg <aric.hagberg@gmail.com>
-#    All rights reserved.
-#    BSD license.
-import networkx as nx
-__author__ = """\n""".join(['Dheeraj M R <dheerajrav@gmail.com>',
-                            'Aric Hagberg <aric.hagberg@gmail.com>'])
-
-__all__ = ['is_distance_regular','intersection_array','global_parameters']
-
-def is_distance_regular(G):
-    """Returns True if the graph is distance regular, False otherwise.
-
-    A connected graph G is distance-regular if for any nodes x,y
-    and any integers i,j=0,1,...,d (where d is the graph
-    diameter), the number of vertices at distance i from x and
-    distance j from y depends only on i,j and the graph distance
-    between x and y, independently of the choice of x and y.
-
-    Parameters
-    ----------
-    G: Networkx graph (undirected)
-
-    Returns
-    -------
-    bool
-      True if the graph is Distance Regular, False otherwise
-
-    Examples
-    --------
-    >>> G=nx.hypercube_graph(6)
-    >>> nx.is_distance_regular(G)
-    True
-    
-    See Also
-    --------
-    intersection_array, global_parameters
-
-    Notes
-    -----
-    For undirected and simple graphs only
-
-    References
-    ----------
-    .. [1] Brouwer, A. E.; Cohen, A. M.; and Neumaier, A. 
-        Distance-Regular Graphs. New York: Springer-Verlag, 1989.
-    .. [2] Weisstein, Eric W. "Distance-Regular Graph." 
-        http://mathworld.wolfram.com/Distance-RegularGraph.html
-
-    """
-    try:
-        a=intersection_array(G)
-        return True
-    except nx.NetworkXError:
-        return False
-
-def global_parameters(b,c):
-    """Return global parameters for a given intersection array.
-
-    Given a distance-regular graph G with integers b_i, c_i,i = 0,....,d
-    such that for any 2 vertices x,y in G at a distance i=d(x,y), there
-    are exactly c_i neighbors of y at a distance of i-1 from x and b_i
-    neighbors of y at a distance of i+1 from x.
-    
-    Thus, a distance regular graph has the global parameters,
-    [[c_0,a_0,b_0],[c_1,a_1,b_1],......,[c_d,a_d,b_d]] for the
-    intersection array  [b_0,b_1,.....b_{d-1};c_1,c_2,.....c_d]
-    where a_i+b_i+c_i=k , k= degree of every vertex.
-
-    Parameters
-    ----------
-    b,c: tuple of lists 
-
-    Returns
-    -------
-    p : list of three-tuples
-
-    Examples
-    --------
-    >>> G=nx.dodecahedral_graph()
-    >>> b,c=nx.intersection_array(G)
-    >>> list(nx.global_parameters(b,c))
-    [(0, 0, 3), (1, 0, 2), (1, 1, 1), (1, 1, 1), (2, 0, 1), (3, 0, 0)]
-
-    References
-    ----------
-    .. [1] Weisstein, Eric W. "Global Parameters." 
-       From MathWorld--A Wolfram Web Resource. 
-       http://mathworld.wolfram.com/GlobalParameters.html 
-
-    See Also
-    --------
-    intersection_array 
-    """
-    d=len(b)
-    ba=b[:]
-    ca=c[:]
-    ba.append(0)
-    ca.insert(0,0)
-    k = ba[0]
-    aa = [k-x-y for x,y in zip(ba,ca)]
-    return zip(*[ca,aa,ba])
-
-
-def intersection_array(G):
-    """Returns the intersection array of a distance-regular graph.
-
-    Given a distance-regular graph G with integers b_i, c_i,i = 0,....,d
-    such that for any 2 vertices x,y in G at a distance i=d(x,y), there
-    are exactly c_i neighbors of y at a distance of i-1 from x and b_i
-    neighbors of y at a distance of i+1 from x.
-
-    A distance regular graph'sintersection array is given by, 
-    [b_0,b_1,.....b_{d-1};c_1,c_2,.....c_d]
-
-    Parameters
-    ----------
-    G: Networkx graph (undirected)
-
-    Returns
-    -------
-    b,c: tuple of lists 
-
-    Examples
-    --------
-    >>> G=nx.icosahedral_graph()
-    >>> nx.intersection_array(G)
-    ([5, 2, 1], [1, 2, 5])
-
-    References
-    ----------
-    .. [1] Weisstein, Eric W. "Intersection Array." 
-       From MathWorld--A Wolfram Web Resource. 
-       http://mathworld.wolfram.com/IntersectionArray.html
-    
-
-    See Also
-    --------
-    global_parameters
-    """
-    if G.is_multigraph() or G.is_directed():
-        raise nx.NetworkxException('Not implemented for directed ',
-                                   'or multiedge graphs.')
-    # test for regular graph (all degrees must be equal)
-    degree = G.degree_iter()
-    (_,k) = next(degree)
-    for _,knext in degree:
-        if knext != k:
-            raise nx.NetworkXError('Graph is not distance regular.')
-        k = knext
-    path_length = nx.all_pairs_shortest_path_length(G)  
-    diameter = max([max(path_length[n].values()) for n in path_length])
-    bint = {} # 'b' intersection array
-    cint = {} # 'c' intersection array
-    for u in G:
-        for v in G:
-            try:
-                i = path_length[u][v]
-            except KeyError:  # graph must be connected
-                raise nx.NetworkXError('Graph is not distance regular.')
-            # number of neighbors of v at a distance of i-1 from u
-            c = len([n for n in G[v] if path_length[n][u]==i-1])
-            # number of neighbors of v at a distance of i+1 from u
-            b = len([n for n in G[v] if path_length[n][u]==i+1])
-            # b,c are independent of u and v
-            if cint.get(i,c) != c or bint.get(i,b) != b:
-                raise nx.NetworkXError('Graph is not distance regular')
-            bint[i] = b 
-            cint[i] = c 
-    return ([bint.get(i,0) for i in range(diameter)],
-            [cint.get(i+1,0) for i in range(diameter)])
-
-
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/euler.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/euler.py
deleted file mode 100644
index 4e834c7..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/euler.py
+++ /dev/null
@@ -1,135 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-Eulerian circuits and graphs.
-"""
-import networkx as nx
-
-__author__ = """\n""".join(['Nima Mohammadi (nima.irt[AT]gmail.com)',
-                            'Aric Hagberg <hagberg@lanl.gov>'])
-#    Copyright (C) 2010 by 
-#    Aric Hagberg <hagberg@lanl.gov>
-#    Dan Schult <dschult@colgate.edu>
-#    Pieter Swart <swart@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-
-__all__ = ['is_eulerian', 'eulerian_circuit']
-
-def is_eulerian(G):
-    """Return True if G is an Eulerian graph, False otherwise.
-
-    An Eulerian graph is a graph with an Eulerian circuit.
-
-    Parameters
-    ----------
-    G : graph
-       A NetworkX Graph
-
-    Examples
-    --------
-    >>> nx.is_eulerian(nx.DiGraph({0:[3], 1:[2], 2:[3], 3:[0, 1]}))
-    True
-    >>> nx.is_eulerian(nx.complete_graph(5))
-    True
-    >>> nx.is_eulerian(nx.petersen_graph())
-    False
-
-    Notes
-    -----
-    This implementation requires the graph to be connected
-    (or strongly connected for directed graphs).
-    """
-    if G.is_directed():
-        # Every node must have equal in degree and out degree
-        for n in G.nodes_iter():
-            if G.in_degree(n) != G.out_degree(n):
-               return False
-        # Must be strongly connected
-        if not nx.is_strongly_connected(G):
-            return False
-    else:
-        # An undirected Eulerian graph has no vertices of odd degrees
-        for v,d in G.degree_iter():
-            if d % 2 != 0:
-                return False
-        # Must be connected
-        if not nx.is_connected(G):
-            return False
-    return True
-	  
-
-def eulerian_circuit(G, source=None):
-    """Return the edges of an Eulerian circuit in G.
-
-    An Eulerian circuit is a path that crosses every edge in G exactly once
-    and finishes at the starting node.
-
-    Parameters
-    ----------
-    G : graph
-       A NetworkX Graph
-    source : node, optional
-       Starting node for circuit.
-
-    Returns
-    -------
-    edges : generator
-       A generator that produces edges in the Eulerian circuit.
-
-    Raises
-    ------
-    NetworkXError
-       If the graph is not Eulerian.
-
-    See Also
-    --------
-    is_eulerian
-
-    Notes
-    -----
-    Uses Fleury's algorithm [1]_,[2]_  
-
-    References
-    ----------
-    .. [1] Fleury, "Deux problemes de geometrie de situation", 
-       Journal de mathematiques elementaires (1883), 257-261.
-    .. [2] http://en.wikipedia.org/wiki/Eulerian_path
-
-    Examples
-    --------
-    >>> G=nx.complete_graph(3)
-    >>> list(nx.eulerian_circuit(G))
-    [(0, 1), (1, 2), (2, 0)]
-    >>> list(nx.eulerian_circuit(G,source=1)) 
-    [(1, 0), (0, 2), (2, 1)]
-    >>> [u for u,v in nx.eulerian_circuit(G)]  # nodes in circuit
-    [0, 1, 2]
-    """
-    if not is_eulerian(G):
-        raise nx.NetworkXError("G is not Eulerian.")
-
-    g = G.__class__(G) # copy graph structure (not attributes)
-
-    # set starting node
-    if source is None:
-        v = next(g.nodes_iter())
-    else:
-        v = source
-
-    while g.size() > 0:
-        n = v   
-        # sort nbrs here to provide stable ordering of alternate cycles
-        nbrs = sorted([v for u,v in g.edges(n)])
-        for v in nbrs:
-            g.remove_edge(n,v)
-            bridge = not nx.is_connected(g.to_undirected())
-            if bridge:
-                g.add_edge(n,v)  # add this edge back and try another
-            else:
-                break  # this edge is good, break the for loop 
-        if bridge:
-            g.remove_edge(n,v)            
-            g.remove_node(n)
-        yield (n,v)
-
-
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/flow/__init__.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/flow/__init__.py
deleted file mode 100644
index 438ab5f..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/flow/__init__.py
+++ /dev/null
@@ -1,3 +0,0 @@
-from networkx.algorithms.flow.maxflow import *
-from networkx.algorithms.flow.mincost import *
-
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/flow/maxflow.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/flow/maxflow.py
deleted file mode 100644
index ee71528..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/flow/maxflow.py
+++ /dev/null
@@ -1,477 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-Maximum flow (and minimum cut) algorithms on capacitated graphs.
-"""
-
-__author__ = """Loïc Séguin-C. <loicseguin@gmail.com>"""
-# Copyright (C) 2010 Loïc Séguin-C. <loicseguin@gmail.com>
-# All rights reserved.
-# BSD license.
-
-import networkx as nx
-
-__all__ = ['ford_fulkerson',
-           'ford_fulkerson_flow',
-           'ford_fulkerson_flow_and_auxiliary',
-           'max_flow',
-           'min_cut']
-
-def ford_fulkerson_flow_and_auxiliary(G, s, t, capacity='capacity'):
-    """Find a maximum single-commodity flow using the Ford-Fulkerson
-    algorithm.
-    
-    This function returns both the value of the maximum flow and the 
-    auxiliary network resulting after finding the maximum flow, which
-    is also named residual network in the literature. The 
-    auxiliary network has edges with capacity equal to the capacity 
-    of the edge in the original network minus the flow that went 
-    throught that edge. Notice that it can happen that a flow 
-    from v to u is allowed in the auxiliary network, though disallowed 
-    in the original network. A dictionary with infinite capacity edges 
-    can be found as an attribute of the auxiliary network.
-
-    Parameters
-    ----------
-    G : NetworkX graph
-        Edges of the graph are expected to have an attribute called
-        'capacity'. If this attribute is not present, the edge is
-        considered to have infinite capacity.
-
-    s : node
-        Source node for the flow.
-
-    t : node
-        Sink node for the flow.
-
-    capacity: string
-        Edges of the graph G are expected to have an attribute capacity
-        that indicates how much flow the edge can support. If this
-        attribute is not present, the edge is considered to have
-        infinite capacity. Default value: 'capacity'.
-
-    Returns
-    -------
-    flow_value : integer, float
-        Value of the maximum flow, i.e., net outflow from the source.
-
-    auxiliary : DiGraph
-        Residual/auxiliary network after finding the maximum flow. 
-        A dictionary with infinite capacity edges can be found as 
-        an attribute of this network: auxiliary.graph['inf_capacity_flows']
-
-    Raises
-    ------
-    NetworkXError
-        The algorithm does not support MultiGraph and MultiDiGraph. If
-        the input graph is an instance of one of these two classes, a
-        NetworkXError is raised.
-
-    NetworkXUnbounded
-        If the graph has a path of infinite capacity, the value of a 
-        feasible flow on the graph is unbounded above and the function
-        raises a NetworkXUnbounded.
-
-    Notes
-    -----
-    This algorithm uses Edmonds-Karp-Dinitz path selection rule which
-    guarantees a running time of `O(nm^2)` for `n` nodes and `m` edges.
-
-    Examples
-    --------
-    >>> import networkx as nx
-    >>> G = nx.DiGraph()
-    >>> G.add_edge('x','a', capacity=3.0)
-    >>> G.add_edge('x','b', capacity=1.0)
-    >>> G.add_edge('a','c', capacity=3.0)
-    >>> G.add_edge('b','c', capacity=5.0)
-    >>> G.add_edge('b','d', capacity=4.0)
-    >>> G.add_edge('d','e', capacity=2.0)
-    >>> G.add_edge('c','y', capacity=2.0)
-    >>> G.add_edge('e','y', capacity=3.0)
-    >>> flow, auxiliary = nx.ford_fulkerson_flow_and_auxiliary(G, 'x', 'y')
-    >>> flow
-    3.0
-    >>> # A dictionary with infinite capacity flows can be found as an
-    >>> # attribute of the auxiliary network
-    >>> inf_capacity_flows = auxiliary.graph['inf_capacity_flows']
-
-    """
-    if G.is_multigraph():
-        raise nx.NetworkXError(
-                'MultiGraph and MultiDiGraph not supported (yet).')
-
-    if s not in G:
-        raise nx.NetworkXError('node %s not in graph' % str(s))
-    if t not in G:
-        raise nx.NetworkXError('node %s not in graph' % str(t))
-
-    auxiliary = _create_auxiliary_digraph(G, capacity=capacity)
-    inf_capacity_flows = auxiliary.graph['inf_capacity_flows']
-
-    flow_value = 0   # Initial feasible flow.
-
-    # As long as there is an (s, t)-path in the auxiliary digraph, find
-    # the shortest (with respect to the number of arcs) such path and
-    # augment the flow on this path.
-    while True:
-        try:
-            path_nodes = nx.bidirectional_shortest_path(auxiliary, s, t)
-        except nx.NetworkXNoPath:
-            break
-
-        # Get the list of edges in the shortest path.
-        path_edges = list(zip(path_nodes[:-1], path_nodes[1:]))
-
-        # Find the minimum capacity of an edge in the path.
-        try:
-            path_capacity = min([auxiliary[u][v][capacity]
-                                for u, v in path_edges
-                                if capacity in auxiliary[u][v]])
-        except ValueError: 
-            # path of infinite capacity implies no max flow
-            raise nx.NetworkXUnbounded(
-                    "Infinite capacity path, flow unbounded above.")
-        
-        flow_value += path_capacity
-
-        # Augment the flow along the path.
-        for u, v in path_edges:
-            edge_attr = auxiliary[u][v]
-            if capacity in edge_attr:
-                edge_attr[capacity] -= path_capacity
-                if edge_attr[capacity] == 0:
-                    auxiliary.remove_edge(u, v)
-            else:
-                inf_capacity_flows[(u, v)] += path_capacity
-
-            if auxiliary.has_edge(v, u):
-                if capacity in auxiliary[v][u]:
-                    auxiliary[v][u][capacity] += path_capacity
-            else:
-                auxiliary.add_edge(v, u, {capacity: path_capacity})
-    
-    auxiliary.graph['inf_capacity_flows'] = inf_capacity_flows
-    return flow_value, auxiliary
-
-def _create_auxiliary_digraph(G, capacity='capacity'):
-    """Initialize an auxiliary digraph and dict of infinite capacity
-    edges for a given graph G.
-    Ignore edges with capacity <= 0.
-    """
-    auxiliary = nx.DiGraph()
-    auxiliary.add_nodes_from(G)
-    inf_capacity_flows = {}
-    if nx.is_directed(G):
-        for edge in G.edges(data = True):
-            if capacity in edge[2]:
-                if edge[2][capacity] > 0:
-                    auxiliary.add_edge(*edge)
-            else:
-                auxiliary.add_edge(*edge)
-                inf_capacity_flows[(edge[0], edge[1])] = 0
-    else:
-        for edge in G.edges(data = True):
-            if capacity in edge[2]:
-                if edge[2][capacity] > 0:
-                    auxiliary.add_edge(*edge)
-                    auxiliary.add_edge(edge[1], edge[0], edge[2])
-            else:
-                auxiliary.add_edge(*edge)
-                auxiliary.add_edge(edge[1], edge[0], edge[2])
-                inf_capacity_flows[(edge[0], edge[1])] = 0
-                inf_capacity_flows[(edge[1], edge[0])] = 0
-
-    auxiliary.graph['inf_capacity_flows'] = inf_capacity_flows
-    return auxiliary
-
-
-def _create_flow_dict(G, H, capacity='capacity'):
-    """Creates the flow dict of dicts on G corresponding to the
-    auxiliary digraph H and infinite capacity edges flows
-    inf_capacity_flows.
-    """
-    inf_capacity_flows = H.graph['inf_capacity_flows']
-    flow = dict([(u, {}) for u in G])
-
-    if G.is_directed():
-        for u, v in G.edges_iter():
-            if H.has_edge(u, v):
-                if capacity in G[u][v]:
-                    flow[u][v] = max(0, G[u][v][capacity] - H[u][v][capacity])
-                elif G.has_edge(v, u) and not capacity in G[v][u]:
-                    flow[u][v] = max(0, inf_capacity_flows[(u, v)] -
-                                     inf_capacity_flows[(v, u)])
-                else:
-                    flow[u][v] = max(0, H[v].get(u, {}).get(capacity, 0) -
-                                     G[v].get(u, {}).get(capacity, 0))
-            else:
-                flow[u][v] = G[u][v][capacity]
-
-    else: # undirected
-        for u, v in G.edges_iter():
-            if H.has_edge(u, v):
-                if capacity in G[u][v]:
-                    flow[u][v] = abs(G[u][v][capacity] - H[u][v][capacity])
-                else:
-                    flow[u][v] = abs(inf_capacity_flows[(u, v)] -
-                                     inf_capacity_flows[(v, u)])
-            else:
-                flow[u][v] = G[u][v][capacity]
-            flow[v][u] = flow[u][v]
-
-    return flow
-
-def ford_fulkerson(G, s, t, capacity='capacity'):
-    """Find a maximum single-commodity flow using the Ford-Fulkerson
-    algorithm.
-    
-    This algorithm uses Edmonds-Karp-Dinitz path selection rule which
-    guarantees a running time of `O(nm^2)` for `n` nodes and `m` edges.
-
-
-    Parameters
-    ----------
-    G : NetworkX graph
-        Edges of the graph are expected to have an attribute called
-        'capacity'. If this attribute is not present, the edge is
-        considered to have infinite capacity.
-
-    s : node
-        Source node for the flow.
-
-    t : node
-        Sink node for the flow.
-
-    capacity: string
-        Edges of the graph G are expected to have an attribute capacity
-        that indicates how much flow the edge can support. If this
-        attribute is not present, the edge is considered to have
-        infinite capacity. Default value: 'capacity'.
-
-    Returns
-    -------
-    flow_value : integer, float
-        Value of the maximum flow, i.e., net outflow from the source.
-
-    flow_dict : dictionary
-        Dictionary of dictionaries keyed by nodes such that
-        flow_dict[u][v] is the flow edge (u, v).
-
-    Raises
-    ------
-    NetworkXError
-        The algorithm does not support MultiGraph and MultiDiGraph. If
-        the input graph is an instance of one of these two classes, a
-        NetworkXError is raised.
-
-    NetworkXUnbounded
-        If the graph has a path of infinite capacity, the value of a 
-        feasible flow on the graph is unbounded above and the function
-        raises a NetworkXUnbounded.
-
-    Examples
-    --------
-    >>> import networkx as nx
-    >>> G = nx.DiGraph()
-    >>> G.add_edge('x','a', capacity=3.0)
-    >>> G.add_edge('x','b', capacity=1.0)
-    >>> G.add_edge('a','c', capacity=3.0)
-    >>> G.add_edge('b','c', capacity=5.0)
-    >>> G.add_edge('b','d', capacity=4.0)
-    >>> G.add_edge('d','e', capacity=2.0)
-    >>> G.add_edge('c','y', capacity=2.0)
-    >>> G.add_edge('e','y', capacity=3.0)
-    >>> flow, F = nx.ford_fulkerson(G, 'x', 'y')
-    >>> flow
-    3.0
-    """
-    flow_value, auxiliary = ford_fulkerson_flow_and_auxiliary(G, 
-                                s, t, capacity=capacity)
-    flow_dict = _create_flow_dict(G, auxiliary, capacity=capacity)
-    return flow_value, flow_dict
-
-def ford_fulkerson_flow(G, s, t, capacity='capacity'):
-    """Return a maximum flow for a single-commodity flow problem.
-
-    Parameters
-    ----------
-    G : NetworkX graph
-        Edges of the graph are expected to have an attribute called
-        'capacity'. If this attribute is not present, the edge is
-        considered to have infinite capacity.
-
-    s : node
-        Source node for the flow.
-
-    t : node
-        Sink node for the flow.
-
-    capacity: string
-        Edges of the graph G are expected to have an attribute capacity
-        that indicates how much flow the edge can support. If this
-        attribute is not present, the edge is considered to have
-        infinite capacity. Default value: 'capacity'.
-
-    Returns
-    -------
-    flow_dict : dictionary
-        Dictionary of dictionaries keyed by nodes such that
-        flow_dict[u][v] is the flow edge (u, v).
-
-    Raises
-    ------
-    NetworkXError
-        The algorithm does not support MultiGraph and MultiDiGraph. If
-        the input graph is an instance of one of these two classes, a
-        NetworkXError is raised.
-
-    NetworkXUnbounded
-        If the graph has a path of infinite capacity, the value of a 
-        feasible flow on the graph is unbounded above and the function
-        raises a NetworkXUnbounded.
-
-    Examples
-    --------
-    >>> import networkx as nx
-    >>> G = nx.DiGraph()
-    >>> G.add_edge('x','a', capacity=3.0)
-    >>> G.add_edge('x','b', capacity=1.0)
-    >>> G.add_edge('a','c', capacity=3.0)
-    >>> G.add_edge('b','c', capacity=5.0)
-    >>> G.add_edge('b','d', capacity=4.0)
-    >>> G.add_edge('d','e', capacity=2.0)
-    >>> G.add_edge('c','y', capacity=2.0)
-    >>> G.add_edge('e','y', capacity=3.0)
-    >>> F = nx.ford_fulkerson_flow(G, 'x', 'y')
-    >>> for u, v in sorted(G.edges_iter()):
-    ...     print('(%s, %s) %.2f' % (u, v, F[u][v]))
-    ... 
-    (a, c) 2.00
-    (b, c) 0.00
-    (b, d) 1.00
-    (c, y) 2.00
-    (d, e) 1.00
-    (e, y) 1.00
-    (x, a) 2.00
-    (x, b) 1.00
-    """
-    flow_value, auxiliary = ford_fulkerson_flow_and_auxiliary(G,
-                                s, t, capacity=capacity)
-    return _create_flow_dict(G, auxiliary, capacity=capacity)
-
-def max_flow(G, s, t, capacity='capacity'):
-    """Find the value of a maximum single-commodity flow.
-    
-    Parameters
-    ----------
-    G : NetworkX graph
-        Edges of the graph are expected to have an attribute called
-        'capacity'. If this attribute is not present, the edge is
-        considered to have infinite capacity.
-
-    s : node
-        Source node for the flow.
-
-    t : node
-        Sink node for the flow.
-
-    capacity: string
-        Edges of the graph G are expected to have an attribute capacity
-        that indicates how much flow the edge can support. If this
-        attribute is not present, the edge is considered to have
-        infinite capacity. Default value: 'capacity'.
-
-    Returns
-    -------
-    flow_value : integer, float
-        Value of the maximum flow, i.e., net outflow from the source.
-
-    Raises
-    ------
-    NetworkXError
-        The algorithm does not support MultiGraph and MultiDiGraph. If
-        the input graph is an instance of one of these two classes, a
-        NetworkXError is raised.
-
-    NetworkXUnbounded
-        If the graph has a path of infinite capacity, the value of a 
-        feasible flow on the graph is unbounded above and the function
-        raises a NetworkXUnbounded.
-
-    Examples
-    --------
-    >>> import networkx as nx
-    >>> G = nx.DiGraph()
-    >>> G.add_edge('x','a', capacity=3.0)
-    >>> G.add_edge('x','b', capacity=1.0)
-    >>> G.add_edge('a','c', capacity=3.0)
-    >>> G.add_edge('b','c', capacity=5.0)
-    >>> G.add_edge('b','d', capacity=4.0)
-    >>> G.add_edge('d','e', capacity=2.0)
-    >>> G.add_edge('c','y', capacity=2.0)
-    >>> G.add_edge('e','y', capacity=3.0)
-    >>> flow = nx.max_flow(G, 'x', 'y')
-    >>> flow
-    3.0
-    """
-    return ford_fulkerson_flow_and_auxiliary(G, s, t, capacity=capacity)[0]
-
-
-def min_cut(G, s, t, capacity='capacity'):
-    """Compute the value of a minimum (s, t)-cut.
-
-    Use the max-flow min-cut theorem, i.e., the capacity of a minimum
-    capacity cut is equal to the flow value of a maximum flow.
-
-    Parameters
-    ----------
-    G : NetworkX graph
-        Edges of the graph are expected to have an attribute called
-        'capacity'. If this attribute is not present, the edge is
-        considered to have infinite capacity.
-
-    s : node
-        Source node for the flow.
-
-    t : node
-        Sink node for the flow.
-
-    capacity: string
-        Edges of the graph G are expected to have an attribute capacity
-        that indicates how much flow the edge can support. If this
-        attribute is not present, the edge is considered to have
-        infinite capacity. Default value: 'capacity'.
-
-    Returns
-    -------
-    cutValue : integer, float
-        Value of the minimum cut.
-    
-    Raises
-    ------
-    NetworkXUnbounded
-        If the graph has a path of infinite capacity, all cuts have
-        infinite capacity and the function raises a NetworkXError.
-    
-    Examples
-    --------
-    >>> import networkx as nx
-    >>> G = nx.DiGraph()
-    >>> G.add_edge('x','a', capacity = 3.0)
-    >>> G.add_edge('x','b', capacity = 1.0)
-    >>> G.add_edge('a','c', capacity = 3.0)
-    >>> G.add_edge('b','c', capacity = 5.0)
-    >>> G.add_edge('b','d', capacity = 4.0)
-    >>> G.add_edge('d','e', capacity = 2.0)
-    >>> G.add_edge('c','y', capacity = 2.0)
-    >>> G.add_edge('e','y', capacity = 3.0)
-    >>> nx.min_cut(G, 'x', 'y')
-    3.0
-    """
-
-    try:
-        return ford_fulkerson_flow_and_auxiliary(G, s, t, capacity=capacity)[0]
-    except nx.NetworkXUnbounded:
-        raise nx.NetworkXUnbounded(
-                "Infinite capacity path, no minimum cut.")
-
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/flow/mincost.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/flow/mincost.py
deleted file mode 100644
index 9e5f574..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/flow/mincost.py
+++ /dev/null
@@ -1,802 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-Minimum cost flow algorithms on directed connected graphs.
-"""
-
-__author__ = """Loïc Séguin-C. <loicseguin@gmail.com>"""
-# Copyright (C) 2010 Loïc Séguin-C. <loicseguin@gmail.com>
-# All rights reserved.
-# BSD license.
-
-
-__all__ = ['network_simplex',
-           'min_cost_flow_cost',
-           'min_cost_flow',
-           'cost_of_flow',
-           'max_flow_min_cost']
-
-import networkx as nx
-from networkx.utils import generate_unique_node
-
-def _initial_tree_solution(G, demand = 'demand', capacity = 'capacity',
-                           weight = 'weight'):
-    """Find a initial tree solution rooted at r.
-
-    The initial tree solution is obtained by considering edges (r, v)
-    for all nodes v with non-negative demand and (v, r) for all nodes
-    with negative demand. If these edges do not exist, we add them to
-    the graph and call them artificial edges.
-    """
-    H = nx.DiGraph((edge for edge in G.edges(data=True) if
-                    edge[2].get(capacity, 1) > 0))
-    demand_nodes = (node for node in G.nodes_iter(data=True) if
-                    node[1].get(demand, 0) != 0)
-    H.add_nodes_from(demand_nodes)
-    r = H.nodes()[0]
-
-    T = nx.DiGraph()
-    y = {r: 0}
-    artificialEdges = []
-    flowCost = 0
-
-    n = H.number_of_nodes()
-    try:
-        maxWeight = max(abs(d[weight]) for u, v, d in H.edges(data = True)
-                        if weight in d)
-    except ValueError:
-        maxWeight = 0
-    hugeWeight = 1 + n * maxWeight
-
-    for v, d in H.nodes(data = True)[1:]:
-        vDemand = d.get(demand, 0)
-        if vDemand >= 0:
-            if not (r, v) in H.edges():
-                H.add_edge(r, v, {weight: hugeWeight, 'flow': vDemand})
-                artificialEdges.append((r, v))
-                y[v] = H[r][v].get(weight, 0)
-                T.add_edge(r, v)
-                flowCost += vDemand * H[r][v].get(weight, 0)
-
-            else: # (r, v) in H.edges()
-                if (not capacity in H[r][v]
-                    or vDemand <= H[r][v][capacity]):
-                    H[r][v]['flow'] = vDemand
-                    y[v] = H[r][v].get(weight, 0)
-                    T.add_edge(r, v)
-                    flowCost += vDemand * H[r][v].get(weight, 0)
-
-                else: # existing edge does not have enough capacity
-                    newLabel = generate_unique_node()
-                    H.add_edge(r, newLabel, {weight: hugeWeight, 'flow': vDemand})
-                    H.add_edge(newLabel, v, {weight: hugeWeight, 'flow': vDemand})
-                    artificialEdges.append((r, newLabel))
-                    artificialEdges.append((newLabel, v))
-                    y[v] = 2 * hugeWeight
-                    y[newLabel] = hugeWeight
-                    T.add_edge(r, newLabel)
-                    T.add_edge(newLabel, v)
-                    flowCost += 2 * vDemand * hugeWeight
-
-        else: # vDemand < 0
-            if not (v, r) in H.edges():
-                H.add_edge(v, r, {weight: hugeWeight, 'flow': -vDemand})
-                artificialEdges.append((v, r))
-                y[v] = -H[v][r].get(weight, 0)
-                T.add_edge(v, r)
-                flowCost += -vDemand * H[v][r].get(weight, 0)
-
-            else:
-                if (not capacity in H[v][r]
-                    or -vDemand <= H[v][r][capacity]):
-                    H[v][r]['flow'] = -vDemand
-                    y[v] = -H[v][r].get(weight, 0)
-                    T.add_edge(v, r)
-                    flowCost += -vDemand * H[v][r].get(weight, 0)
-                else: # existing edge does not have enough capacity
-                    newLabel = generate_unique_node()
-                    H.add_edge(v, newLabel,
-                               {weight: hugeWeight, 'flow': -vDemand})
-                    H.add_edge(newLabel, r,
-                               {weight: hugeWeight, 'flow': -vDemand})
-                    artificialEdges.append((v, newLabel))
-                    artificialEdges.append((newLabel, r))
-                    y[v] = -2 * hugeWeight
-                    y[newLabel] = -hugeWeight
-                    T.add_edge(v, newLabel)
-                    T.add_edge(newLabel, r)
-                    flowCost += 2 * -vDemand * hugeWeight
-            
-    return H, T, y, artificialEdges, flowCost, r
-
-
-def _find_entering_edge(H, c, capacity = 'capacity'):
-    """Find an edge which creates a negative cost cycle in the actual
-    tree solution.
-
-    The reduced cost of every edge gives the value of the cycle
-    obtained by adding that edge to the tree solution. If that value is
-    negative, we will augment the flow in the direction indicated by
-    the edge. Otherwise, we will augment the flow in the reverse
-    direction.
-
-    If no edge is found, return and empty tuple. This will cause the
-    main loop of the algorithm to terminate.
-    """
-    newEdge = ()
-    for u, v, d in H.edges_iter(data = True):
-        if d.get('flow', 0) == 0:
-            if c[(u, v)] < 0:
-                newEdge = (u, v)
-                break
-        else:
-            if capacity in d:
-                if (d.get('flow', 0) == d[capacity]
-                    and c[(u, v)] > 0):
-                    newEdge = (u, v)
-                    break
-    return newEdge
-
-
-def _find_leaving_edge(H, T, cycle, newEdge, capacity = 'capacity',
-                       reverse=False):
-    """Find an edge that will leave the basis and the value by which we
-    can increase or decrease the flow on that edge.
-
-    The leaving arc rule is used to prevent cycling.
-    
-    If cycle has no reverse edge and no forward edge of finite
-    capacity, it means that cycle is a negative cost infinite capacity
-    cycle. This implies that the cost of a flow satisfying all demands
-    is unbounded below. An exception is raised in this case.
-    """
-    eps = False
-    leavingEdge = ()
-
-    # If cycle is a digon.
-    if len(cycle) == 3:
-        u, v = newEdge
-        if capacity not in H[u][v] and capacity not in H[v][u]:
-            raise nx.NetworkXUnbounded(
-                    "Negative cost cycle of infinite capacity found. "
-                    + "Min cost flow unbounded below.")
-            
-        if reverse:
-            if H[u][v].get('flow', 0) > H[v][u].get('flow', 0):
-                return (v, u), H[v][u].get('flow', 0)
-            else:
-                return (u, v), H[u][v].get('flow', 0)
-        else:
-            uv_residual = H[u][v].get(capacity, 0) - H[u][v].get('flow', 0)
-            vu_residual = H[v][u].get(capacity, 0) - H[v][u].get('flow', 0)
-            if (uv_residual > vu_residual):
-                return (v, u), vu_residual
-            else:
-                return (u, v), uv_residual
-
-    # Find the forward edge with the minimum value for capacity - 'flow'
-    # and the reverse edge with the minimum value for 'flow'.
-    for index, u in enumerate(cycle[:-1]):
-        edgeCapacity = False
-        edge = ()
-        v = cycle[index + 1]
-        if (u, v) in T.edges() + [newEdge]: #forward edge
-            if capacity in H[u][v]: # edge (u, v) has finite capacity
-                edgeCapacity = H[u][v][capacity] - H[u][v].get('flow', 0)
-                edge = (u, v)
-        else: #reverse edge
-            edgeCapacity = H[v][u].get('flow', 0)
-            edge = (v, u)
-
-        # Determine if edge might be the leaving edge.
-        if edge:
-            if leavingEdge:
-                if edgeCapacity < eps:
-                    eps = edgeCapacity
-                    leavingEdge = edge
-            else:
-                eps = edgeCapacity
-                leavingEdge = edge
-
-    if not leavingEdge:
-        raise nx.NetworkXUnbounded(
-                "Negative cost cycle of infinite capacity found. "
-                + "Min cost flow unbounded below.")
-
-    return leavingEdge, eps
-
-
-def _create_flow_dict(G, H):
-    """Creates the flow dict of dicts of graph G with auxiliary graph H."""
-    flowDict = dict([(u, {}) for u in G])
-
-    for u in G.nodes_iter():
-        for v in G.neighbors(u):
-            if H.has_edge(u, v):
-                flowDict[u][v] = H[u][v].get('flow', 0)
-            else:
-                flowDict[u][v] = 0
-    return flowDict
-
-
-def network_simplex(G, demand = 'demand', capacity = 'capacity',
-                    weight = 'weight'):
-    """Find a minimum cost flow satisfying all demands in digraph G.
-    
-    This is a primal network simplex algorithm that uses the leaving
-    arc rule to prevent cycling.
-
-    G is a digraph with edge costs and capacities and in which nodes
-    have demand, i.e., they want to send or receive some amount of
-    flow. A negative demand means that the node wants to send flow, a
-    positive demand means that the node want to receive flow. A flow on
-    the digraph G satisfies all demand if the net flow into each node
-    is equal to the demand of that node.
-
-    Parameters
-    ----------
-    G : NetworkX graph
-        DiGraph on which a minimum cost flow satisfying all demands is
-        to be found.
-
-    demand: string
-        Nodes of the graph G are expected to have an attribute demand
-        that indicates how much flow a node wants to send (negative
-        demand) or receive (positive demand). Note that the sum of the
-        demands should be 0 otherwise the problem in not feasible. If
-        this attribute is not present, a node is considered to have 0
-        demand. Default value: 'demand'.
-
-    capacity: string
-        Edges of the graph G are expected to have an attribute capacity
-        that indicates how much flow the edge can support. If this
-        attribute is not present, the edge is considered to have
-        infinite capacity. Default value: 'capacity'.
-
-    weight: string
-        Edges of the graph G are expected to have an attribute weight
-        that indicates the cost incurred by sending one unit of flow on
-        that edge. If not present, the weight is considered to be 0.
-        Default value: 'weight'.
-
-    Returns
-    -------
-    flowCost: integer, float
-        Cost of a minimum cost flow satisfying all demands.
-
-    flowDict: dictionary
-        Dictionary of dictionaries keyed by nodes such that
-        flowDict[u][v] is the flow edge (u, v).
-
-    Raises
-    ------
-    NetworkXError
-        This exception is raised if the input graph is not directed,
-        not connected or is a multigraph.
-
-    NetworkXUnfeasible
-        This exception is raised in the following situations:
-            * The sum of the demands is not zero. Then, there is no
-              flow satisfying all demands.
-            * There is no flow satisfying all demand.
-
-    NetworkXUnbounded
-        This exception is raised if the digraph G has a cycle of
-        negative cost and infinite capacity. Then, the cost of a flow
-        satisfying all demands is unbounded below.
-
-    Notes
-    -----
-    This algorithm is not guaranteed to work if edge weights
-    are floating point numbers (overflows and roundoff errors can 
-    cause problems). 
-        
-    See also
-    --------
-    cost_of_flow, max_flow_min_cost, min_cost_flow, min_cost_flow_cost
-               
-    Examples
-    --------
-    A simple example of a min cost flow problem.
-
-    >>> import networkx as nx
-    >>> G = nx.DiGraph()
-    >>> G.add_node('a', demand = -5)
-    >>> G.add_node('d', demand = 5)
-    >>> G.add_edge('a', 'b', weight = 3, capacity = 4)
-    >>> G.add_edge('a', 'c', weight = 6, capacity = 10)
-    >>> G.add_edge('b', 'd', weight = 1, capacity = 9)
-    >>> G.add_edge('c', 'd', weight = 2, capacity = 5)
-    >>> flowCost, flowDict = nx.network_simplex(G)
-    >>> flowCost
-    24
-    >>> flowDict # doctest: +SKIP
-    {'a': {'c': 1, 'b': 4}, 'c': {'d': 1}, 'b': {'d': 4}, 'd': {}}
-
-    The mincost flow algorithm can also be used to solve shortest path
-    problems. To find the shortest path between two nodes u and v,
-    give all edges an infinite capacity, give node u a demand of -1 and
-    node v a demand a 1. Then run the network simplex. The value of a
-    min cost flow will be the distance between u and v and edges
-    carrying positive flow will indicate the path.
-
-    >>> G=nx.DiGraph()
-    >>> G.add_weighted_edges_from([('s','u',10), ('s','x',5), 
-    ...                            ('u','v',1), ('u','x',2), 
-    ...                            ('v','y',1), ('x','u',3), 
-    ...                            ('x','v',5), ('x','y',2), 
-    ...                            ('y','s',7), ('y','v',6)])
-    >>> G.add_node('s', demand = -1)
-    >>> G.add_node('v', demand = 1)
-    >>> flowCost, flowDict = nx.network_simplex(G)
-    >>> flowCost == nx.shortest_path_length(G, 's', 'v', weight = 'weight')
-    True
-    >>> sorted([(u, v) for u in flowDict for v in flowDict[u] if flowDict[u][v] > 0])
-    [('s', 'x'), ('u', 'v'), ('x', 'u')]
-    >>> nx.shortest_path(G, 's', 'v', weight = 'weight')
-    ['s', 'x', 'u', 'v']
-
-    It is possible to change the name of the attributes used for the
-    algorithm.
-
-    >>> G = nx.DiGraph()
-    >>> G.add_node('p', spam = -4)
-    >>> G.add_node('q', spam = 2)
-    >>> G.add_node('a', spam = -2)
-    >>> G.add_node('d', spam = -1)
-    >>> G.add_node('t', spam = 2)
-    >>> G.add_node('w', spam = 3)
-    >>> G.add_edge('p', 'q', cost = 7, vacancies = 5)
-    >>> G.add_edge('p', 'a', cost = 1, vacancies = 4)
-    >>> G.add_edge('q', 'd', cost = 2, vacancies = 3)
-    >>> G.add_edge('t', 'q', cost = 1, vacancies = 2)
-    >>> G.add_edge('a', 't', cost = 2, vacancies = 4)
-    >>> G.add_edge('d', 'w', cost = 3, vacancies = 4)
-    >>> G.add_edge('t', 'w', cost = 4, vacancies = 1)
-    >>> flowCost, flowDict = nx.network_simplex(G, demand = 'spam',
-    ...                                         capacity = 'vacancies',
-    ...                                         weight = 'cost')
-    >>> flowCost
-    37
-    >>> flowDict  # doctest: +SKIP
-    {'a': {'t': 4}, 'd': {'w': 2}, 'q': {'d': 1}, 'p': {'q': 2, 'a': 2}, 't': {'q': 1, 'w': 1}, 'w': {}}
-
-    References
-    ----------
-    W. J. Cook, W. H. Cunningham, W. R. Pulleyblank and A. Schrijver.
-    Combinatorial Optimization. Wiley-Interscience, 1998.
-
-    """
-
-    if not G.is_directed():
-        raise nx.NetworkXError("Undirected graph not supported.")
-    if not nx.is_connected(G.to_undirected()):
-        raise nx.NetworkXError("Not connected graph not supported.")
-    if G.is_multigraph():
-        raise nx.NetworkXError("MultiDiGraph not supported.")
-    if sum(d[demand] for v, d in G.nodes(data = True) 
-           if demand in d) != 0:
-        raise nx.NetworkXUnfeasible("Sum of the demands should be 0.")
-
-    # Fix an arbitrarily chosen root node and find an initial tree solution.
-    H, T, y, artificialEdges, flowCost, r = \
-            _initial_tree_solution(G, demand = demand, capacity = capacity,
-                                   weight = weight)
-
-    # Initialize the reduced costs.
-    c = {}
-    for u, v, d in H.edges_iter(data = True):
-        c[(u, v)] = d.get(weight, 0) + y[u] - y[v]
-
-    # Print stuff for debugging.
-    # print('-' * 78)
-    # nbIter = 0
-    # print('Iteration %d' % nbIter)
-    # nbIter += 1
-    # print('Tree solution: %s' % T.edges())
-    # print(' Edge %11s%10s' % ('Flow', 'Red Cost'))
-    # for u, v, d in H.edges(data = True):
-    #     flag = ''
-    #     if (u, v) in artificialEdges:
-    #         flag = '*'
-    #     print('(%s, %s)%1s%10d%10d' % (u, v, flag, d.get('flow', 0),
-    #                                    c[(u, v)]))
-    # print('Distances: %s' % y)
-
-    # Main loop.
-    while True:
-        newEdge = _find_entering_edge(H, c, capacity = capacity)
-        if not newEdge:
-            break # Optimal basis found. Main loop is over.
-        cycleCost = abs(c[newEdge])
-
-        # Find the cycle created by adding newEdge to T.
-        path1 = nx.shortest_path(T.to_undirected(), r, newEdge[0])
-        path2 = nx.shortest_path(T.to_undirected(), r, newEdge[1])
-        join = r
-        for index, node in enumerate(path1[1:]):
-            if index + 1 < len(path2) and node == path2[index + 1]:
-                join = node
-            else:
-                break
-        path1 = path1[path1.index(join):]
-        path2 = path2[path2.index(join):]
-        cycle = []
-        if H[newEdge[0]][newEdge[1]].get('flow', 0) == 0:
-            reverse = False
-            path2.reverse()
-            cycle = path1 + path2
-        else: # newEdge is at capacity
-            reverse = True
-            path1.reverse()
-            cycle = path2 + path1
-
-        # Find the leaving edge. Will stop here if cycle is an infinite
-        # capacity negative cost cycle.
-        leavingEdge, eps = _find_leaving_edge(H, T, cycle, newEdge,
-                                              capacity=capacity,
-                                              reverse=reverse)
-
-        # Actual augmentation happens here. If eps = 0, don't bother.
-        if eps:
-            flowCost -= cycleCost * eps
-            if len(cycle) == 3:
-                if reverse:
-                    eps = -eps
-                u, v = newEdge
-                H[u][v]['flow'] = H[u][v].get('flow', 0) + eps
-                H[v][u]['flow'] = H[v][u].get('flow', 0) + eps
-            else:
-                for index, u in enumerate(cycle[:-1]):
-                    v = cycle[index + 1]
-                    if (u, v) in T.edges() + [newEdge]:
-                        H[u][v]['flow'] = H[u][v].get('flow', 0) + eps
-                    else: # (v, u) in T.edges():
-                        H[v][u]['flow'] -= eps
-
-        # Update tree solution.
-        T.add_edge(*newEdge)
-        T.remove_edge(*leavingEdge)
-
-        # Update distances and reduced costs.
-        if newEdge != leavingEdge:
-            forest = nx.DiGraph(T)
-            forest.remove_edge(*newEdge)
-            R, notR = nx.connected_component_subgraphs(forest.to_undirected())
-            if r in notR.nodes(): # make sure r is in R
-                R, notR = notR, R
-            if newEdge[0] in R.nodes():
-                for v in notR.nodes():
-                    y[v] += c[newEdge]
-            else:
-                for v in notR.nodes():
-                    y[v] -= c[newEdge]
-            for u, v in H.edges():
-                if u in notR.nodes() or v in notR.nodes():
-                    c[(u, v)] = H[u][v].get(weight, 0) + y[u] - y[v]
-
-        # Print stuff for debugging.
-        # print('-' * 78)
-        # print('Iteration %d' % nbIter)
-        # nbIter += 1
-        # print('Tree solution: %s' % T.edges())
-        # print('New edge:      (%s, %s)' % (newEdge[0], newEdge[1]))
-        # print('Leaving edge:  (%s, %s)' % (leavingEdge[0], leavingEdge[1]))
-        # print('Cycle:         %s' % cycle)
-        # print('eps:           %d' % eps)
-        # print(' Edge %11s%10s' % ('Flow', 'Red Cost'))
-        # for u, v, d in H.edges(data = True):
-        #     flag = ''
-        #     if (u, v) in artificialEdges:
-        #         flag = '*'
-        #     print('(%s, %s)%1s%10d%10d' % (u, v, flag, d.get('flow', 0),
-        #                                    c[(u, v)]))
-        # print('Distances: %s' % y)
-
-
-    # If an artificial edge has positive flow, the initial problem was
-    # not feasible.
-    for u, v in artificialEdges:
-        if H[u][v]['flow'] != 0:
-            raise nx.NetworkXUnfeasible("No flow satisfying all demands.")
-        H.remove_edge(u, v)
-
-    for u in H.nodes():
-        if not u in G:
-            H.remove_node(u)
-
-    flowDict = _create_flow_dict(G, H)
-
-    return flowCost, flowDict
-
-
-def min_cost_flow_cost(G, demand = 'demand', capacity = 'capacity',
-                        weight = 'weight'):
-    """Find the cost of a minimum cost flow satisfying all demands in digraph G.
-    
-    G is a digraph with edge costs and capacities and in which nodes
-    have demand, i.e., they want to send or receive some amount of
-    flow. A negative demand means that the node wants to send flow, a
-    positive demand means that the node want to receive flow. A flow on
-    the digraph G satisfies all demand if the net flow into each node
-    is equal to the demand of that node.
-
-    Parameters
-    ----------
-    G : NetworkX graph
-        DiGraph on which a minimum cost flow satisfying all demands is
-        to be found.
-
-    demand: string
-        Nodes of the graph G are expected to have an attribute demand
-        that indicates how much flow a node wants to send (negative
-        demand) or receive (positive demand). Note that the sum of the
-        demands should be 0 otherwise the problem in not feasible. If
-        this attribute is not present, a node is considered to have 0
-        demand. Default value: 'demand'.
-
-    capacity: string
-        Edges of the graph G are expected to have an attribute capacity
-        that indicates how much flow the edge can support. If this
-        attribute is not present, the edge is considered to have
-        infinite capacity. Default value: 'capacity'.
-
-    weight: string
-        Edges of the graph G are expected to have an attribute weight
-        that indicates the cost incurred by sending one unit of flow on
-        that edge. If not present, the weight is considered to be 0.
-        Default value: 'weight'.
-
-    Returns
-    -------
-    flowCost: integer, float
-        Cost of a minimum cost flow satisfying all demands.
-
-    Raises
-    ------
-    NetworkXError
-        This exception is raised if the input graph is not directed or
-        not connected.
-
-    NetworkXUnfeasible
-        This exception is raised in the following situations:
-            * The sum of the demands is not zero. Then, there is no
-              flow satisfying all demands.
-            * There is no flow satisfying all demand.
-
-    NetworkXUnbounded
-        This exception is raised if the digraph G has a cycle of
-        negative cost and infinite capacity. Then, the cost of a flow
-        satisfying all demands is unbounded below.
-        
-    See also
-    --------
-    cost_of_flow, max_flow_min_cost, min_cost_flow, network_simplex
-
-    Examples
-    --------
-    A simple example of a min cost flow problem.
-
-    >>> import networkx as nx
-    >>> G = nx.DiGraph()
-    >>> G.add_node('a', demand = -5)
-    >>> G.add_node('d', demand = 5)
-    >>> G.add_edge('a', 'b', weight = 3, capacity = 4)
-    >>> G.add_edge('a', 'c', weight = 6, capacity = 10)
-    >>> G.add_edge('b', 'd', weight = 1, capacity = 9)
-    >>> G.add_edge('c', 'd', weight = 2, capacity = 5)
-    >>> flowCost = nx.min_cost_flow_cost(G)
-    >>> flowCost
-    24
-    """
-    return network_simplex(G, demand = demand, capacity = capacity,
-                           weight = weight)[0]
-
-
-def min_cost_flow(G, demand = 'demand', capacity = 'capacity',
-                  weight = 'weight'):
-    """Return a minimum cost flow satisfying all demands in digraph G.
-    
-    G is a digraph with edge costs and capacities and in which nodes
-    have demand, i.e., they want to send or receive some amount of
-    flow. A negative demand means that the node wants to send flow, a
-    positive demand means that the node want to receive flow. A flow on
-    the digraph G satisfies all demand if the net flow into each node
-    is equal to the demand of that node.
-
-    Parameters
-    ----------
-    G : NetworkX graph
-        DiGraph on which a minimum cost flow satisfying all demands is
-        to be found.
-
-    demand: string
-        Nodes of the graph G are expected to have an attribute demand
-        that indicates how much flow a node wants to send (negative
-        demand) or receive (positive demand). Note that the sum of the
-        demands should be 0 otherwise the problem in not feasible. If
-        this attribute is not present, a node is considered to have 0
-        demand. Default value: 'demand'.
-
-    capacity: string
-        Edges of the graph G are expected to have an attribute capacity
-        that indicates how much flow the edge can support. If this
-        attribute is not present, the edge is considered to have
-        infinite capacity. Default value: 'capacity'.
-
-    weight: string
-        Edges of the graph G are expected to have an attribute weight
-        that indicates the cost incurred by sending one unit of flow on
-        that edge. If not present, the weight is considered to be 0.
-        Default value: 'weight'.
-
-    Returns
-    -------
-    flowDict: dictionary
-        Dictionary of dictionaries keyed by nodes such that
-        flowDict[u][v] is the flow edge (u, v).
-
-    Raises
-    ------
-    NetworkXError
-        This exception is raised if the input graph is not directed or
-        not connected.
-
-    NetworkXUnfeasible
-        This exception is raised in the following situations:
-            * The sum of the demands is not zero. Then, there is no
-              flow satisfying all demands.
-            * There is no flow satisfying all demand.
-
-    NetworkXUnbounded
-        This exception is raised if the digraph G has a cycle of
-        negative cost and infinite capacity. Then, the cost of a flow
-        satisfying all demands is unbounded below.
-        
-    See also
-    --------
-    cost_of_flow, max_flow_min_cost, min_cost_flow_cost, network_simplex
-
-    Examples
-    --------
-    A simple example of a min cost flow problem.
-
-    >>> import networkx as nx
-    >>> G = nx.DiGraph()
-    >>> G.add_node('a', demand = -5)
-    >>> G.add_node('d', demand = 5)
-    >>> G.add_edge('a', 'b', weight = 3, capacity = 4)
-    >>> G.add_edge('a', 'c', weight = 6, capacity = 10)
-    >>> G.add_edge('b', 'd', weight = 1, capacity = 9)
-    >>> G.add_edge('c', 'd', weight = 2, capacity = 5)
-    >>> flowDict = nx.min_cost_flow(G)
-    """
-    return network_simplex(G, demand = demand, capacity = capacity,
-                           weight = weight)[1]
-
-
-def cost_of_flow(G, flowDict, weight = 'weight'):
-    """Compute the cost of the flow given by flowDict on graph G.
-
-    Note that this function does not check for the validity of the
-    flow flowDict. This function will fail if the graph G and the
-    flow don't have the same edge set.
-
-    Parameters
-    ----------
-    G : NetworkX graph
-        DiGraph on which a minimum cost flow satisfying all demands is
-        to be found.
-
-    weight: string
-        Edges of the graph G are expected to have an attribute weight
-        that indicates the cost incurred by sending one unit of flow on
-        that edge. If not present, the weight is considered to be 0.
-        Default value: 'weight'.
-
-    flowDict: dictionary
-        Dictionary of dictionaries keyed by nodes such that
-        flowDict[u][v] is the flow edge (u, v).
-
-    Returns
-    -------
-    cost: Integer, float
-        The total cost of the flow. This is given by the sum over all
-        edges of the product of the edge's flow and the edge's weight.
-
-    See also
-    --------
-    max_flow_min_cost, min_cost_flow, min_cost_flow_cost, network_simplex
-    """
-    return sum((flowDict[u][v] * d.get(weight, 0)
-                for u, v, d in G.edges_iter(data = True)))
-
-
-def max_flow_min_cost(G, s, t, capacity = 'capacity', weight = 'weight'):
-    """Return a maximum (s, t)-flow of minimum cost.
-    
-    G is a digraph with edge costs and capacities. There is a source
-    node s and a sink node t. This function finds a maximum flow from
-    s to t whose total cost is minimized.
-
-    Parameters
-    ----------
-    G : NetworkX graph
-        DiGraph on which a minimum cost flow satisfying all demands is
-        to be found.
-
-    s: node label
-        Source of the flow.
-
-    t: node label
-        Destination of the flow.
-
-    capacity: string
-        Edges of the graph G are expected to have an attribute capacity
-        that indicates how much flow the edge can support. If this
-        attribute is not present, the edge is considered to have
-        infinite capacity. Default value: 'capacity'.
-
-    weight: string
-        Edges of the graph G are expected to have an attribute weight
-        that indicates the cost incurred by sending one unit of flow on
-        that edge. If not present, the weight is considered to be 0.
-        Default value: 'weight'.
-
-    Returns
-    -------
-    flowDict: dictionary
-        Dictionary of dictionaries keyed by nodes such that
-        flowDict[u][v] is the flow edge (u, v).
-
-    Raises
-    ------
-    NetworkXError
-        This exception is raised if the input graph is not directed or
-        not connected.
-
-    NetworkXUnbounded
-        This exception is raised if there is an infinite capacity path
-        from s to t in G. In this case there is no maximum flow. This
-        exception is also raised if the digraph G has a cycle of
-        negative cost and infinite capacity. Then, the cost of a flow
-        is unbounded below.
-
-    See also
-    --------
-    cost_of_flow, ford_fulkerson, min_cost_flow, min_cost_flow_cost,
-    network_simplex
-
-    Examples
-    --------
-    >>> G = nx.DiGraph()
-    >>> G.add_edges_from([(1, 2, {'capacity': 12, 'weight': 4}),
-    ...                   (1, 3, {'capacity': 20, 'weight': 6}),
-    ...                   (2, 3, {'capacity': 6, 'weight': -3}),
-    ...                   (2, 6, {'capacity': 14, 'weight': 1}),
-    ...                   (3, 4, {'weight': 9}),
-    ...                   (3, 5, {'capacity': 10, 'weight': 5}),
-    ...                   (4, 2, {'capacity': 19, 'weight': 13}),
-    ...                   (4, 5, {'capacity': 4, 'weight': 0}),
-    ...                   (5, 7, {'capacity': 28, 'weight': 2}),
-    ...                   (6, 5, {'capacity': 11, 'weight': 1}),
-    ...                   (6, 7, {'weight': 8}),
-    ...                   (7, 4, {'capacity': 6, 'weight': 6})])
-    >>> mincostFlow = nx.max_flow_min_cost(G, 1, 7)
-    >>> nx.cost_of_flow(G, mincostFlow)
-    373
-    >>> maxFlow = nx.ford_fulkerson_flow(G, 1, 7)
-    >>> nx.cost_of_flow(G, maxFlow)
-    428
-    >>> mincostFlowValue = (sum((mincostFlow[u][7] for u in G.predecessors(7)))
-    ...                     - sum((mincostFlow[7][v] for v in G.successors(7))))
-    >>> mincostFlowValue == nx.max_flow(G, 1, 7)
-    True
-    
-    
-    """
-    maxFlow = nx.max_flow(G, s, t, capacity = capacity)
-    H = nx.DiGraph(G)
-    H.add_node(s, demand = -maxFlow)
-    H.add_node(t, demand = maxFlow)
-    return min_cost_flow(H, capacity = capacity, weight = weight)
-
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/flow/tests/test_maxflow.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/flow/tests/test_maxflow.py
deleted file mode 100644
index 41393c2..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/flow/tests/test_maxflow.py
+++ /dev/null
@@ -1,273 +0,0 @@
-# -*- coding: utf-8 -*-
-"""Max flow algorithm test suite.
-
-Run with nose: nosetests -v test_max_flow.py
-"""
-
-__author__ = """Loïc Séguin-C. <loicseguin@gmail.com>"""
-# Copyright (C) 2010 Loïc Séguin-C. <loicseguin@gmail.com>
-# All rights reserved.
-# BSD license.
-
-
-import networkx as nx
-from nose.tools import *
-
-def compare_flows(G, s, t, solnFlows, solnValue):
-    flowValue, flowDict = nx.ford_fulkerson(G, s, t)
-    assert_equal(flowValue, solnValue)
-    assert_equal(flowDict, solnFlows)
-    assert_equal(nx.min_cut(G, s, t), solnValue)
-    assert_equal(nx.max_flow(G, s, t), solnValue)
-    assert_equal(nx.ford_fulkerson_flow(G, s, t), solnFlows)
-
-
-class TestMaxflow:
-    def test_graph1(self):
-        # Trivial undirected graph
-        G = nx.Graph()
-        G.add_edge(1,2, capacity = 1.0)
-
-        solnFlows = {1: {2: 1.0},
-                     2: {1: 1.0}}
-
-        compare_flows(G, 1, 2, solnFlows, 1.0)
-
-    def test_graph2(self):
-        # A more complex undirected graph
-        # adapted from www.topcoder.com/tc?module=Statc&d1=tutorials&d2=maxFlow
-        G = nx.Graph()
-        G.add_edge('x','a', capacity = 3.0)
-        G.add_edge('x','b', capacity = 1.0)
-        G.add_edge('a','c', capacity = 3.0)
-        G.add_edge('b','c', capacity = 5.0)
-        G.add_edge('b','d', capacity = 4.0)
-        G.add_edge('d','e', capacity = 2.0)
-        G.add_edge('c','y', capacity = 2.0)
-        G.add_edge('e','y', capacity = 3.0)
-
-        H = {'x': {'a': 3, 'b': 1},
-             'a': {'c': 3, 'x': 3},
-             'b': {'c': 1, 'd': 2, 'x': 1},
-             'c': {'a': 3, 'b': 1, 'y': 2},
-             'd': {'b': 2, 'e': 2},
-             'e': {'d': 2, 'y': 2},
-             'y': {'c': 2, 'e': 2}}
-
-        compare_flows(G, 'x', 'y', H, 4.0)
-
-    def test_digraph1(self):
-        # The classic directed graph example
-        G = nx.DiGraph()
-        G.add_edge('a','b', capacity = 1000.0)
-        G.add_edge('a','c', capacity = 1000.0)
-        G.add_edge('b','c', capacity = 1.0)
-        G.add_edge('b','d', capacity = 1000.0)
-        G.add_edge('c','d', capacity = 1000.0)
-
-        H = {'a': {'b': 1000.0, 'c': 1000.0},
-             'b': {'c': 0, 'd': 1000.0},
-             'c': {'d': 1000.0},
-             'd': {}}
-
-        compare_flows(G, 'a', 'd', H, 2000.0)
-
-        # An example in which some edges end up with zero flow.
-        G = nx.DiGraph()
-        G.add_edge('s', 'b', capacity = 2)
-        G.add_edge('s', 'c', capacity = 1)
-        G.add_edge('c', 'd', capacity = 1)
-        G.add_edge('d', 'a', capacity = 1)
-        G.add_edge('b', 'a', capacity = 2)
-        G.add_edge('a', 't', capacity = 2)
-
-        H = {'s': {'b': 2, 'c': 0},
-             'c': {'d': 0},
-             'd': {'a': 0},
-             'b': {'a': 2},
-             'a': {'t': 2},
-             't': {}}
-
-        compare_flows(G, 's', 't', H, 2)
-
-    def test_digraph2(self):
-        # A directed graph example from Cormen et al.
-        G = nx.DiGraph()
-        G.add_edge('s','v1', capacity = 16.0)
-        G.add_edge('s','v2', capacity = 13.0)
-        G.add_edge('v1','v2', capacity = 10.0)
-        G.add_edge('v2','v1', capacity = 4.0)
-        G.add_edge('v1','v3', capacity = 12.0)
-        G.add_edge('v3','v2', capacity = 9.0)
-        G.add_edge('v2','v4', capacity = 14.0)
-        G.add_edge('v4','v3', capacity = 7.0)
-        G.add_edge('v3','t', capacity = 20.0)
-        G.add_edge('v4','t', capacity = 4.0)
-
-        H = {'s': {'v1': 12.0, 'v2': 11.0},
-             'v2': {'v1': 0, 'v4': 11.0},
-             'v1': {'v2': 0, 'v3': 12.0},
-             'v3': {'v2': 0, 't': 19.0},
-             'v4': {'v3': 7.0, 't': 4.0},
-             't': {}}
-
-        compare_flows(G, 's', 't', H, 23.0)
-
-    def test_digraph3(self):
-        # A more complex directed graph
-        # from www.topcoder.com/tc?module=Statc&d1=tutorials&d2=maxFlow
-        G = nx.DiGraph()
-        G.add_edge('x','a', capacity = 3.0)
-        G.add_edge('x','b', capacity = 1.0)
-        G.add_edge('a','c', capacity = 3.0)
-        G.add_edge('b','c', capacity = 5.0)
-        G.add_edge('b','d', capacity = 4.0)
-        G.add_edge('d','e', capacity = 2.0)
-        G.add_edge('c','y', capacity = 2.0)
-        G.add_edge('e','y', capacity = 3.0)
-
-        H = {'x': {'a': 2.0, 'b': 1.0},
-             'a': {'c': 2.0},
-             'b': {'c': 0, 'd': 1.0},
-             'c': {'y': 2.0},
-             'd': {'e': 1.0},
-             'e': {'y': 1.0},
-             'y': {}}
-
-        compare_flows(G, 'x', 'y', H, 3.0)
-
-    def test_optional_capacity(self):
-        # Test optional capacity parameter.
-        G = nx.DiGraph()
-        G.add_edge('x','a', spam = 3.0)
-        G.add_edge('x','b', spam = 1.0)
-        G.add_edge('a','c', spam = 3.0)
-        G.add_edge('b','c', spam = 5.0)
-        G.add_edge('b','d', spam = 4.0)
-        G.add_edge('d','e', spam = 2.0)
-        G.add_edge('c','y', spam = 2.0)
-        G.add_edge('e','y', spam = 3.0)
-
-        solnFlows = {'x': {'a': 2.0, 'b': 1.0},
-                     'a': {'c': 2.0},
-                     'b': {'c': 0, 'd': 1.0},
-                     'c': {'y': 2.0},
-                     'd': {'e': 1.0},
-                     'e': {'y': 1.0},
-                     'y': {}}
-        solnValue = 3.0
-        s = 'x'
-        t = 'y'
-        
-        flowValue, flowDict = nx.ford_fulkerson(G, s, t, capacity = 'spam')
-        assert_equal(flowValue, solnValue)
-        assert_equal(flowDict, solnFlows)
-        assert_equal(nx.min_cut(G, s, t, capacity = 'spam'), solnValue)
-        assert_equal(nx.max_flow(G, s, t, capacity = 'spam'), solnValue)
-        assert_equal(nx.ford_fulkerson_flow(G, s, t, capacity = 'spam'),
-                     solnFlows)
-
-    def test_digraph_infcap_edges(self):
-        # DiGraph with infinite capacity edges
-        G = nx.DiGraph()
-        G.add_edge('s', 'a')
-        G.add_edge('s', 'b', capacity = 30)
-        G.add_edge('a', 'c', capacity = 25)
-        G.add_edge('b', 'c', capacity = 12)
-        G.add_edge('a', 't', capacity = 60)
-        G.add_edge('c', 't')
-
-        H = {'s': {'a': 85, 'b': 12},
-             'a': {'c': 25, 't': 60},
-             'b': {'c': 12},
-             'c': {'t': 37},
-             't': {}}
-
-        compare_flows(G, 's', 't', H, 97)
-
-        # DiGraph with infinite capacity digon
-        G = nx.DiGraph()
-        G.add_edge('s', 'a', capacity = 85)
-        G.add_edge('s', 'b', capacity = 30)
-        G.add_edge('a', 'c')
-        G.add_edge('c', 'a')
-        G.add_edge('b', 'c', capacity = 12)
-        G.add_edge('a', 't', capacity = 60)
-        G.add_edge('c', 't', capacity = 37)
-
-        H = {'s': {'a': 85, 'b': 12},
-             'a': {'c': 25, 't': 60},
-             'c': {'a': 0, 't': 37},
-             'b': {'c': 12},
-             't': {}}
-
-        compare_flows(G, 's', 't', H, 97)
-        
-
-    def test_digraph_infcap_path(self):
-        # Graph with infinite capacity (s, t)-path
-        G = nx.DiGraph()
-        G.add_edge('s', 'a')
-        G.add_edge('s', 'b', capacity = 30)
-        G.add_edge('a', 'c')
-        G.add_edge('b', 'c', capacity = 12)
-        G.add_edge('a', 't', capacity = 60)
-        G.add_edge('c', 't')
-
-        assert_raises(nx.NetworkXUnbounded,
-                      nx.ford_fulkerson, G, 's', 't')
-        assert_raises(nx.NetworkXUnbounded,
-                      nx.max_flow, G, 's', 't')
-        assert_raises(nx.NetworkXUnbounded,
-                      nx.ford_fulkerson_flow, G, 's', 't')
-        assert_raises(nx.NetworkXUnbounded,
-                      nx.min_cut, G, 's', 't')
-
-    def test_graph_infcap_edges(self):
-        # Undirected graph with infinite capacity edges
-        G = nx.Graph()
-        G.add_edge('s', 'a')
-        G.add_edge('s', 'b', capacity = 30)
-        G.add_edge('a', 'c', capacity = 25)
-        G.add_edge('b', 'c', capacity = 12)
-        G.add_edge('a', 't', capacity = 60)
-        G.add_edge('c', 't')
-
-        H = {'s': {'a': 85, 'b': 12},
-             'a': {'c': 25, 's': 85, 't': 60},
-             'b': {'c': 12, 's': 12},
-             'c': {'a': 25, 'b': 12, 't': 37},
-             't': {'a': 60, 'c': 37}}
-
-        compare_flows(G, 's', 't', H, 97)
-
-    def test_digraph4(self):
-        # From ticket #429 by mfrasca.
-        G = nx.DiGraph()
-        G.add_edge('s', 'a', capacity = 2)
-        G.add_edge('s', 'b', capacity = 2)
-        G.add_edge('a', 'b', capacity = 5)
-        G.add_edge('a', 't', capacity = 1)
-        G.add_edge('b', 'a', capacity = 1)
-        G.add_edge('b', 't', capacity = 3)
-        flowSoln = {'a': {'b': 1, 't': 1},
-                    'b': {'a': 0, 't': 3},
-                    's': {'a': 2, 'b': 2},
-                    't': {}}
-        compare_flows(G, 's', 't', flowSoln, 4)
-
-
-    def test_disconnected(self):
-        G = nx.Graph()
-        G.add_weighted_edges_from([(0,1,1),(1,2,1),(2,3,1)],weight='capacity')
-        G.remove_node(1)
-        assert_equal(nx.max_flow(G,0,3),0)
-
-    def test_source_target_not_in_graph(self):
-        G = nx.Graph()
-        G.add_weighted_edges_from([(0,1,1),(1,2,1),(2,3,1)],weight='capacity')
-        G.remove_node(0)
-        assert_raises(nx.NetworkXError,nx.max_flow,G,0,3)
-        G.add_weighted_edges_from([(0,1,1),(1,2,1),(2,3,1)],weight='capacity')
-        G.remove_node(3)
-        assert_raises(nx.NetworkXError,nx.max_flow,G,0,3)
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/flow/tests/test_maxflow_large_graph.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/flow/tests/test_maxflow_large_graph.py
deleted file mode 100644
index 578e2df..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/flow/tests/test_maxflow_large_graph.py
+++ /dev/null
@@ -1,51 +0,0 @@
-# -*- coding: utf-8 -*-
-"""Max flow algorithm test suite on large graphs.
-
-Run with nose: nosetests -v test_max_flow.py
-"""
-
-__author__ = """Loïc Séguin-C. <loicseguin@gmail.com>"""
-# Copyright (C) 2010 Loïc Séguin-C. <loicseguin@gmail.com>
-# All rights reserved.
-# BSD license.
-
-
-import networkx as nx
-from nose.tools import *
-
-def gen_pyramid(N):
-        # This graph admits a flow of value 1 for which every arc is at
-        # capacity (except the arcs incident to the sink which have
-        # infinite capacity).
-        G = nx.DiGraph()
-
-        for i in range(N - 1):
-            cap = 1. / (i + 2)
-            for j in range(i + 1):
-                G.add_edge((i, j), (i + 1, j),
-                           capacity = cap)
-                cap = 1. / (i + 1) - cap
-                G.add_edge((i, j), (i + 1, j + 1),
-                        capacity = cap)
-                cap = 1. / (i + 2) - cap
-
-        for j in range(N):
-            G.add_edge((N - 1, j), 't')
-
-        return G
-
-
-class TestMaxflowLargeGraph:
-    def test_complete_graph(self):
-        N = 50
-        G = nx.complete_graph(N)
-        for (u, v) in G.edges():
-            G[u][v]['capacity'] = 5
-        assert_equal(nx.ford_fulkerson(G, 1, 2)[0], 5 * (N - 1))
-
-    def test_pyramid(self):
-        N = 10 
-#        N = 100 # this gives a graph with 5051 nodes
-        G = gen_pyramid(N)
-        assert_almost_equal(nx.ford_fulkerson(G, (0, 0), 't')[0], 1.)
-
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/flow/tests/test_mincost.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/flow/tests/test_mincost.py
deleted file mode 100644
index 72df2f0..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/flow/tests/test_mincost.py
+++ /dev/null
@@ -1,284 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import networkx as nx
-from nose.tools import assert_equal, assert_raises
-
-class TestNetworkSimplex:
-    def test_simple_digraph(self):
-        G = nx.DiGraph()
-        G.add_node('a', demand = -5)
-        G.add_node('d', demand = 5)
-        G.add_edge('a', 'b', weight = 3, capacity = 4)
-        G.add_edge('a', 'c', weight = 6, capacity = 10)
-        G.add_edge('b', 'd', weight = 1, capacity = 9)
-        G.add_edge('c', 'd', weight = 2, capacity = 5)
-        flowCost, H = nx.network_simplex(G)
-        soln = {'a': {'b': 4, 'c': 1},
-                'b': {'d': 4},
-                'c': {'d': 1},
-                'd': {}}
-        assert_equal(flowCost, 24)
-        assert_equal(nx.min_cost_flow_cost(G), 24)
-        assert_equal(H, soln)
-        assert_equal(nx.min_cost_flow(G), soln)
-        assert_equal(nx.cost_of_flow(G, H), 24)
-
-    def test_negcycle_infcap(self):
-        G = nx.DiGraph()
-        G.add_node('s', demand = -5)
-        G.add_node('t', demand = 5)
-        G.add_edge('s', 'a', weight = 1, capacity = 3)
-        G.add_edge('a', 'b', weight = 3)
-        G.add_edge('c', 'a', weight = -6)
-        G.add_edge('b', 'd', weight = 1)
-        G.add_edge('d', 'c', weight = -2)
-        G.add_edge('d', 't', weight = 1, capacity = 3)
-        assert_raises(nx.NetworkXUnbounded, nx.network_simplex, G)
-
-    def test_sum_demands_not_zero(self):
-        G = nx.DiGraph()
-        G.add_node('s', demand = -5)
-        G.add_node('t', demand = 4)
-        G.add_edge('s', 'a', weight = 1, capacity = 3)
-        G.add_edge('a', 'b', weight = 3)
-        G.add_edge('a', 'c', weight = -6)
-        G.add_edge('b', 'd', weight = 1)
-        G.add_edge('c', 'd', weight = -2)
-        G.add_edge('d', 't', weight = 1, capacity = 3)
-        assert_raises(nx.NetworkXUnfeasible, nx.network_simplex, G)
-
-    def test_no_flow_satisfying_demands(self):
-        G = nx.DiGraph()
-        G.add_node('s', demand = -5)
-        G.add_node('t', demand = 5)
-        G.add_edge('s', 'a', weight = 1, capacity = 3)
-        G.add_edge('a', 'b', weight = 3)
-        G.add_edge('a', 'c', weight = -6)
-        G.add_edge('b', 'd', weight = 1)
-        G.add_edge('c', 'd', weight = -2)
-        G.add_edge('d', 't', weight = 1, capacity = 3)
-        assert_raises(nx.NetworkXUnfeasible, nx.network_simplex, G)
-
-    def test_transshipment(self):
-        G = nx.DiGraph()
-        G.add_node('a', demand = 1)
-        G.add_node('b', demand = -2)
-        G.add_node('c', demand = -2)
-        G.add_node('d', demand = 3)
-        G.add_node('e', demand = -4)
-        G.add_node('f', demand = -4)
-        G.add_node('g', demand = 3)
-        G.add_node('h', demand = 2)
-        G.add_node('r', demand = 3)
-        G.add_edge('a', 'c', weight = 3)
-        G.add_edge('r', 'a', weight = 2)
-        G.add_edge('b', 'a', weight = 9)
-        G.add_edge('r', 'c', weight = 0)
-        G.add_edge('b', 'r', weight = -6)
-        G.add_edge('c', 'd', weight = 5)
-        G.add_edge('e', 'r', weight = 4)
-        G.add_edge('e', 'f', weight = 3)
-        G.add_edge('h', 'b', weight = 4)
-        G.add_edge('f', 'd', weight = 7)
-        G.add_edge('f', 'h', weight = 12)
-        G.add_edge('g', 'd', weight = 12)
-        G.add_edge('f', 'g', weight = -1)
-        G.add_edge('h', 'g', weight = -10)
-        flowCost, H = nx.network_simplex(G)
-        soln = {'a': {'c': 0},
-                'b': {'a': 0, 'r': 2},
-                'c': {'d': 3},
-                'd': {},
-                'e': {'r': 3, 'f': 1},
-                'f': {'d': 0, 'g': 3, 'h': 2},
-                'g': {'d': 0},
-                'h': {'b': 0, 'g': 0},
-                'r': {'a': 1, 'c': 1}}
-        assert_equal(flowCost, 41)
-        assert_equal(nx.min_cost_flow_cost(G), 41)
-        assert_equal(H, soln)
-        assert_equal(nx.min_cost_flow(G), soln)
-        assert_equal(nx.cost_of_flow(G, H), 41)
-
-    def test_max_flow_min_cost(self):
-        G = nx.DiGraph()
-        G.add_edge('s', 'a', bandwidth = 6)
-        G.add_edge('s', 'c', bandwidth = 10, cost = 10)
-        G.add_edge('a', 'b', cost = 6)
-        G.add_edge('b', 'd', bandwidth = 8, cost = 7)
-        G.add_edge('c', 'd', cost = 10)
-        G.add_edge('d', 't', bandwidth = 5, cost = 5)
-        soln = {'s': {'a': 5, 'c': 0},
-                'a': {'b': 5},
-                'b': {'d': 5},
-                'c': {'d': 0},
-                'd': {'t': 5},
-                't': {}}
-        flow = nx.max_flow_min_cost(G, 's', 't', capacity = 'bandwidth',
-                                    weight = 'cost')
-        assert_equal(flow, soln)
-        assert_equal(nx.cost_of_flow(G, flow, weight = 'cost'), 90)
-
-    def test_digraph1(self):
-        # From Bradley, S. P., Hax, A. C. and Magnanti, T. L. Applied
-        # Mathematical Programming. Addison-Wesley, 1977.
-        G = nx.DiGraph()
-        G.add_node(1, demand = -20)
-        G.add_node(4, demand = 5)
-        G.add_node(5, demand = 15)
-        G.add_edges_from([(1, 2, {'capacity': 15, 'weight': 4}),
-                          (1, 3, {'capacity': 8, 'weight': 4}),
-                          (2, 3, {'weight': 2}),
-                          (2, 4, {'capacity': 4, 'weight': 2}),
-                          (2, 5, {'capacity': 10, 'weight': 6}),
-                          (3, 4, {'capacity': 15, 'weight': 1}),
-                          (3, 5, {'capacity': 5, 'weight': 3}),
-                          (4, 5, {'weight': 2}),
-                          (5, 3, {'capacity': 4, 'weight': 1})])
-        flowCost, H = nx.network_simplex(G)
-        soln = {1: {2: 12, 3: 8},
-                2: {3: 8, 4: 4, 5: 0},
-                3: {4: 11, 5: 5},
-                4: {5: 10},
-                5: {3: 0}}
-        assert_equal(flowCost, 150)
-        assert_equal(nx.min_cost_flow_cost(G), 150)
-        assert_equal(H, soln)
-        assert_equal(nx.min_cost_flow(G), soln)
-        assert_equal(nx.cost_of_flow(G, H), 150)
-
-    def test_digraph2(self):
-        # Example from ticket #430 from mfrasca. Original source:
-        # http://www.cs.princeton.edu/courses/archive/spr03/cs226/lectures/mincost.4up.pdf, slide 11.
-        G = nx.DiGraph()
-        G.add_edge('s', 1, capacity=12)
-        G.add_edge('s', 2, capacity=6)
-        G.add_edge('s', 3, capacity=14)
-        G.add_edge(1, 2, capacity=11, weight=4)
-        G.add_edge(2, 3, capacity=9, weight=6)
-        G.add_edge(1, 4, capacity=5, weight=5)
-        G.add_edge(1, 5, capacity=2, weight=12)
-        G.add_edge(2, 5, capacity=4, weight=4)
-        G.add_edge(2, 6, capacity=2, weight=6)
-        G.add_edge(3, 6, capacity=31, weight=3)
-        G.add_edge(4, 5, capacity=18, weight=4)
-        G.add_edge(5, 6, capacity=9, weight=5)
-        G.add_edge(4, 't', capacity=3)
-        G.add_edge(5, 't', capacity=7)
-        G.add_edge(6, 't', capacity=22)
-        flow = nx.max_flow_min_cost(G, 's', 't')
-        soln = {1: {2: 6, 4: 5, 5: 1},
-                2: {3: 6, 5: 4, 6: 2},
-                3: {6: 20},
-                4: {5: 2, 't': 3},
-                5: {6: 0, 't': 7},
-                6: {'t': 22},
-                's': {1: 12, 2: 6, 3: 14},
-                't': {}}
-        assert_equal(flow, soln)
-
-    def test_digraph3(self):
-        """Combinatorial Optimization: Algorithms and Complexity,
-        Papadimitriou Steiglitz at page 140 has an example, 7.1, but that
-        admits multiple solutions, so I alter it a bit. From ticket #430
-        by mfrasca."""
-
-        G = nx.DiGraph()
-        G.add_edge('s', 'a', {0: 2, 1: 4})
-        G.add_edge('s', 'b', {0: 2, 1: 1})
-        G.add_edge('a', 'b', {0: 5, 1: 2})
-        G.add_edge('a', 't', {0: 1, 1: 5})
-        G.add_edge('b', 'a', {0: 1, 1: 3})
-        G.add_edge('b', 't', {0: 3, 1: 2})
-
-        "PS.ex.7.1: testing main function"
-        sol = nx.max_flow_min_cost(G, 's', 't', capacity=0, weight=1)
-        flow = sum(v for v in sol['s'].values())
-        assert_equal(4, flow)
-        assert_equal(23, nx.cost_of_flow(G, sol, weight=1))
-        assert_equal(sol['s'], {'a': 2, 'b': 2})
-        assert_equal(sol['a'], {'b': 1, 't': 1})
-        assert_equal(sol['b'], {'a': 0, 't': 3})
-        assert_equal(sol['t'], {})
-
-    def test_zero_capacity_edges(self):
-        """Address issue raised in ticket #617 by arv."""
-        G = nx.DiGraph()
-        G.add_edges_from([(1, 2, {'capacity': 1, 'weight': 1}),
-                          (1, 5, {'capacity': 1, 'weight': 1}),
-                          (2, 3, {'capacity': 0, 'weight': 1}),
-                          (2, 5, {'capacity': 1, 'weight': 1}),
-                          (5, 3, {'capacity': 2, 'weight': 1}),
-                          (5, 4, {'capacity': 0, 'weight': 1}),
-                          (3, 4, {'capacity': 2, 'weight': 1})])
-        G.node[1]['demand'] = -1
-        G.node[2]['demand'] = -1
-        G.node[4]['demand'] = 2
-
-        flowCost, H = nx.network_simplex(G)
-        soln = {1: {2: 0, 5: 1},
-                2: {3: 0, 5: 1},
-                3: {4: 2},
-                4: {},
-                5: {3: 2, 4: 0}}
-        assert_equal(flowCost, 6)
-        assert_equal(nx.min_cost_flow_cost(G), 6)
-        assert_equal(H, soln)
-        assert_equal(nx.min_cost_flow(G), soln)
-        assert_equal(nx.cost_of_flow(G, H), 6)
-
-    def test_digon(self):
-        """Check if digons are handled properly. Taken from ticket
-        #618 by arv."""
-        nodes = [(1, {}),
-                 (2, {'demand': -4}),
-                 (3, {'demand': 4}),
-                 ]
-        edges = [(1, 2, {'capacity': 3, 'weight': 600000}),
-                 (2, 1, {'capacity': 2, 'weight': 0}),
-                 (2, 3, {'capacity': 5, 'weight': 714285}),
-                 (3, 2, {'capacity': 2, 'weight': 0}),
-                 ]
-        G = nx.DiGraph(edges)
-        G.add_nodes_from(nodes)
-        flowCost, H = nx.network_simplex(G)
-        soln = {1: {2: 0},
-                2: {1: 0, 3: 4},
-                3: {2: 0}}
-        assert_equal(flowCost, 2857140)
-        assert_equal(nx.min_cost_flow_cost(G), 2857140)
-        assert_equal(H, soln)
-        assert_equal(nx.min_cost_flow(G), soln)
-        assert_equal(nx.cost_of_flow(G, H), 2857140)
-
-    def test_infinite_capacity_neg_digon(self):
-        """An infinite capacity negative cost digon results in an unbounded
-        instance."""
-        nodes = [(1, {}),
-                 (2, {'demand': -4}),
-                 (3, {'demand': 4}),
-                 ]
-        edges = [(1, 2, {'weight': -600}),
-                 (2, 1, {'weight': 0}),
-                 (2, 3, {'capacity': 5, 'weight': 714285}),
-                 (3, 2, {'capacity': 2, 'weight': 0}),
-                 ]
-        G = nx.DiGraph(edges)
-        G.add_nodes_from(nodes)
-        assert_raises(nx.NetworkXUnbounded, nx.network_simplex, G)
-        
-    def test_finite_capacity_neg_digon(self):
-        """The digon should receive the maximum amount of flow it can handle.
-        Taken from ticket #749 by @chuongdo."""
-        G = nx.DiGraph()
-        G.add_edge('a', 'b', capacity=1, weight=-1)
-        G.add_edge('b', 'a', capacity=1, weight=-1)
-        min_cost = -2
-        assert_equal(nx.min_cost_flow_cost(G), min_cost)
-
-    def test_multidigraph(self):
-        """Raise an exception for multidigraph."""
-        G = nx.MultiDiGraph()
-        G.add_weighted_edges_from([(1, 2, 1), (2, 3, 2)], weight='capacity')
-        assert_raises(nx.NetworkXError, nx.network_simplex, G)
-
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/graphical.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/graphical.py
deleted file mode 100644
index 5c82761..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/graphical.py
+++ /dev/null
@@ -1,405 +0,0 @@
-# -*- coding: utf-8 -*-
-"""Test sequences for graphiness.
-"""
-#    Copyright (C) 2004-2013 by
-#    Aric Hagberg <hagberg@lanl.gov>
-#    Dan Schult <dschult@colgate.edu>
-#    Pieter Swart <swart@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-from collections import defaultdict
-import heapq
-import networkx as nx
-__author__ = "\n".join(['Aric Hagberg (hagberg@lanl.gov)',
-                        'Pieter Swart (swart@lanl.gov)',
-                        'Dan Schult (dschult@colgate.edu)'
-                        'Joel Miller (joel.c.miller.research@gmail.com)'
-                        'Ben Edwards'
-                        'Brian Cloteaux <brian.cloteaux@nist.gov>'])
-
-__all__ = ['is_graphical',
-           'is_multigraphical',
-           'is_pseudographical',
-           'is_digraphical',
-           'is_valid_degree_sequence_erdos_gallai',
-           'is_valid_degree_sequence_havel_hakimi',
-           'is_valid_degree_sequence', # deprecated
-           ]
-
-def is_graphical(sequence, method='eg'):
-    """Returns True if sequence is a valid degree sequence.
-
-    A degree sequence is valid if some graph can realize it.
-
-    Parameters
-    ----------
-    sequence : list or iterable container
-        A sequence of integer node degrees
-
-
-    method : "eg" | "hh"
-        The method used to validate the degree sequence.
-        "eg" corresponds to the Erdős-Gallai algorithm, and
-        "hh" to the Havel-Hakimi algorithm.
-
-    Returns
-    -------
-    valid : bool
-        True if the sequence is a valid degree sequence and False if not.
-
-    Examples
-    --------
-    >>> G = nx.path_graph(4)
-    >>> sequence = G.degree().values()
-    >>> nx.is_valid_degree_sequence(sequence)
-    True
-
-    References
-    ----------
-    Erdős-Gallai
-        [EG1960]_, [choudum1986]_
-
-    Havel-Hakimi
-        [havel1955]_, [hakimi1962]_, [CL1996]_
-    """
-    if method == 'eg':
-        valid = is_valid_degree_sequence_erdos_gallai(list(sequence))
-    elif method == 'hh':
-        valid = is_valid_degree_sequence_havel_hakimi(list(sequence))
-    else:
-        msg = "`method` must be 'eg' or 'hh'"
-        raise nx.NetworkXException(msg)
-    return valid
-
-is_valid_degree_sequence = is_graphical
-
-def _basic_graphical_tests(deg_sequence):
-    # Sort and perform some simple tests on the sequence
-    if not nx.utils.is_list_of_ints(deg_sequence):
-        raise nx.NetworkXUnfeasible
-    p = len(deg_sequence)
-    num_degs = [0]*p
-    dmax, dmin, dsum, n = 0, p, 0, 0
-    for d in deg_sequence:
-        # Reject if degree is negative or larger than the sequence length
-        if d<0 or d>=p:
-            raise nx.NetworkXUnfeasible
-        # Process only the non-zero integers
-        elif d>0:
-            dmax, dmin, dsum, n = max(dmax,d), min(dmin,d), dsum+d, n+1
-            num_degs[d] += 1
-    # Reject sequence if it has odd sum or is oversaturated
-    if dsum%2 or dsum>n*(n-1):
-        raise nx.NetworkXUnfeasible
-    return dmax,dmin,dsum,n,num_degs
-
-def is_valid_degree_sequence_havel_hakimi(deg_sequence):
-    r"""Returns True if deg_sequence can be realized by a simple graph.
-
-    The validation proceeds using the Havel-Hakimi theorem.
-    Worst-case run time is: O(s) where s is the sum of the sequence.
-
-    Parameters
-    ----------
-    deg_sequence : list
-        A list of integers where each element specifies the degree of a node
-        in a graph.
-
-    Returns
-    -------
-    valid : bool
-        True if deg_sequence is graphical and False if not.
-
-    Notes
-    -----
-    The ZZ condition says that for the sequence d if
-    
-    .. math::
-        |d| >= \frac{(\max(d) + \min(d) + 1)^2}{4*\min(d)}
-
-    then d is graphical.  This was shown in Theorem 6 in [1]_.
-
-    References
-    ----------
-    .. [1] I.E. Zverovich and V.E. Zverovich. "Contributions to the theory
-       of graphic sequences", Discrete Mathematics, 105, pp. 292-303 (1992).
-
-    [havel1955]_, [hakimi1962]_, [CL1996]_
-
-    """
-    try:
-        dmax,dmin,dsum,n,num_degs = _basic_graphical_tests(deg_sequence)
-    except nx.NetworkXUnfeasible: 
-        return False
-    # Accept if sequence has no non-zero degrees or passes the ZZ condition
-    if n==0 or 4*dmin*n >= (dmax+dmin+1) * (dmax+dmin+1):
-        return True
-
-    modstubs = [0]*(dmax+1)
-    # Successively reduce degree sequence by removing the maximum degree
-    while n > 0:
-        # Retrieve the maximum degree in the sequence
-        while num_degs[dmax] == 0:
-            dmax -= 1;
-        # If there are not enough stubs to connect to, then the sequence is
-        # not graphical
-        if dmax > n-1:
-            return False
-
-        # Remove largest stub in list
-        num_degs[dmax], n = num_degs[dmax]-1, n-1
-        # Reduce the next dmax largest stubs
-        mslen = 0
-        k = dmax
-        for i in range(dmax):
-            while num_degs[k] == 0:
-                k -= 1
-            num_degs[k], n = num_degs[k]-1, n-1
-            if k > 1:
-                modstubs[mslen] = k-1
-                mslen += 1
-        # Add back to the list any non-zero stubs that were removed
-        for i  in range(mslen):
-            stub = modstubs[i]
-            num_degs[stub], n = num_degs[stub]+1, n+1
-    return True
-
-
-def is_valid_degree_sequence_erdos_gallai(deg_sequence):
-    r"""Returns True if deg_sequence can be realized by a simple graph.
-
-    The validation is done using the Erdős-Gallai theorem [EG1960]_.
-
-    Parameters
-    ----------
-    deg_sequence : list
-        A list of integers
-
-    Returns
-    -------
-    valid : bool
-        True if deg_sequence is graphical and False if not.
-
-    Notes
-    -----
-
-    This implementation uses an equivalent form of the Erdős-Gallai criterion.
-    Worst-case run time is: O(n) where n is the length of the sequence.
-
-    Specifically, a sequence d is graphical if and only if the
-    sum of the sequence is even and for all strong indices k in the sequence,
-
-     .. math::
-
-       \sum_{i=1}^{k} d_i \leq k(k-1) + \sum_{j=k+1}^{n} \min(d_i,k)
-             = k(n-1) - ( k \sum_{j=0}^{k-1} n_j - \sum_{j=0}^{k-1} j n_j )
-
-    A strong index k is any index where `d_k \geq k` and the value `n_j` is the
-    number of occurrences of j in d.  The maximal strong index is called the
-    Durfee index.
-
-    This particular rearrangement comes from the proof of Theorem 3 in [2]_.
-
-    The ZZ condition says that for the sequence d if
-    
-    .. math::
-        |d| >= \frac{(\max(d) + \min(d) + 1)^2}{4*\min(d)}
-
-    then d is graphical.  This was shown in Theorem 6 in [2]_.
-
-    References
-    ----------
-    .. [1] A. Tripathi and S. Vijay. "A note on a theorem of Erdős & Gallai",
-       Discrete Mathematics, 265, pp. 417-420 (2003).
-    .. [2] I.E. Zverovich and V.E. Zverovich. "Contributions to the theory
-       of graphic sequences", Discrete Mathematics, 105, pp. 292-303 (1992).
-
-    [EG1960]_, [choudum1986]_
-    """
-    try:
-        dmax,dmin,dsum,n,num_degs = _basic_graphical_tests(deg_sequence)
-    except nx.NetworkXUnfeasible: 
-        return False
-    # Accept if sequence has no non-zero degrees or passes the ZZ condition
-    if n==0 or 4*dmin*n >= (dmax+dmin+1) * (dmax+dmin+1):
-        return True
-
-    # Perform the EG checks using the reformulation of Zverovich and Zverovich
-    k, sum_deg, sum_nj, sum_jnj = 0, 0, 0, 0
-    for dk in range(dmax, dmin-1, -1):
-        if dk < k+1:            # Check if already past Durfee index
-            return True
-        if num_degs[dk] > 0:
-            run_size = num_degs[dk] # Process a run of identical-valued degrees
-            if dk < k+run_size:     # Check if end of run is past Durfee index
-                run_size = dk-k     # Adjust back to Durfee index
-            sum_deg += run_size * dk
-            for v in range(run_size):
-                sum_nj += num_degs[k+v]
-                sum_jnj += (k+v) * num_degs[k+v]
-            k += run_size
-            if sum_deg > k*(n-1) - k*sum_nj + sum_jnj:
-                return False
-    return True
-
-def is_multigraphical(sequence):
-    """Returns True if some multigraph can realize the sequence.
-
-    Parameters
-    ----------
-    deg_sequence : list
-        A list of integers
-
-    Returns
-    -------
-    valid : bool
-        True if deg_sequence is a multigraphic degree sequence and False if not.
-
-    Notes
-    -----
-    The worst-case run time is O(n) where n is the length of the sequence.
-
-    References
-    ----------
-    .. [1] S. L. Hakimi. "On the realizability of a set of integers as
-       degrees of the vertices of a linear graph", J. SIAM, 10, pp. 496-506
-       (1962).
-    """
-    deg_sequence = list(sequence)
-    if not nx.utils.is_list_of_ints(deg_sequence):
-        return False
-    dsum, dmax = 0, 0
-    for d in deg_sequence:
-        if d<0:
-            return False
-        dsum, dmax = dsum+d, max(dmax,d)
-    if dsum%2 or dsum<2*dmax:
-        return False
-    return True
-
-def is_pseudographical(sequence):
-    """Returns True if some pseudograph can realize the sequence.
-
-    Every nonnegative integer sequence with an even sum is pseudographical
-    (see [1]_).
-
-    Parameters
-    ----------
-    sequence : list or iterable container
-        A sequence of integer node degrees
-
-    Returns
-    -------
-    valid : bool
-      True if the sequence is a pseudographic degree sequence and False if not.
-
-    Notes
-    -----
-    The worst-case run time is O(n) where n is the length of the sequence.
-
-    References
-    ----------
-    .. [1] F. Boesch and F. Harary. "Line removal algorithms for graphs
-       and their degree lists", IEEE Trans. Circuits and Systems, CAS-23(12),
-       pp. 778-782 (1976).
-    """
-    s = list(sequence)
-    if not nx.utils.is_list_of_ints(s):
-        return False
-    return sum(s)%2 == 0 and min(s) >= 0
-
-def is_digraphical(in_sequence, out_sequence):
-    r"""Returns True if some directed graph can realize the in- and out-degree 
-    sequences.
-
-    Parameters
-    ----------
-    in_sequence : list or iterable container
-        A sequence of integer node in-degrees
-
-    out_sequence : list or iterable container
-        A sequence of integer node out-degrees
-
-    Returns
-    -------
-    valid : bool
-      True if in and out-sequences are digraphic False if not.
-
-    Notes
-    -----
-    This algorithm is from Kleitman and Wang [1]_.
-    The worst case runtime is O(s * log n) where s and n are the sum and length
-    of the sequences respectively.
-
-    References
-    ----------
-    .. [1] D.J. Kleitman and D.L. Wang
-       Algorithms for Constructing Graphs and Digraphs with Given Valences
-       and Factors, Discrete Mathematics, 6(1), pp. 79-88 (1973)
-    """
-    in_deg_sequence = list(in_sequence)
-    out_deg_sequence = list(out_sequence)
-    if not nx.utils.is_list_of_ints(in_deg_sequence):
-        return False
-    if not nx.utils.is_list_of_ints(out_deg_sequence):
-        return False
-    # Process the sequences and form two heaps to store degree pairs with
-    # either zero or non-zero out degrees
-    sumin, sumout, nin, nout = 0, 0, len(in_deg_sequence), len(out_deg_sequence)
-    maxn = max(nin, nout)
-    maxin = 0
-    if maxn==0:
-        return True
-    stubheap, zeroheap = [ ], [ ]
-    for n in range(maxn):
-        in_deg, out_deg = 0, 0
-        if n<nout:
-            out_deg = out_deg_sequence[n]
-        if n<nin:
-            in_deg = in_deg_sequence[n]
-        if in_deg<0 or out_deg<0:
-            return False
-        sumin, sumout, maxin = sumin+in_deg, sumout+out_deg, max(maxin, in_deg)
-        if in_deg > 0:
-            stubheap.append((-1*out_deg, -1*in_deg))
-        elif out_deg > 0:
-            zeroheap.append(-1*out_deg)
-    if sumin != sumout:
-        return False
-    heapq.heapify(stubheap)
-    heapq.heapify(zeroheap)
-
-    modstubs = [(0,0)]*(maxin+1)
-    # Successively reduce degree sequence by removing the maximum out degree
-    while stubheap:
-        # Take the first value in the sequence with non-zero in degree
-        (freeout, freein) =  heapq.heappop( stubheap )
-        freein *= -1
-        if freein > len(stubheap)+len(zeroheap):
-            return False
-
-        # Attach out stubs to the nodes with the most in stubs
-        mslen = 0
-        for i in range(freein):
-            if zeroheap and (not stubheap or stubheap[0][0] > zeroheap[0]):
-                stubout = heapq.heappop(zeroheap)
-                stubin = 0
-            else:
-                (stubout, stubin) = heapq.heappop(stubheap)
-            if stubout == 0:
-                return False
-            # Check if target is now totally connected
-            if stubout+1<0 or stubin<0:
-                modstubs[mslen] =  (stubout+1, stubin)
-                mslen += 1
-
-        # Add back the nodes to the heap that still have available stubs
-        for i in range(mslen):
-            stub = modstubs[i]
-            if stub[1] < 0:
-                heapq.heappush(stubheap, stub)
-            else:
-                heapq.heappush(zeroheap, stub[0])
-        if freeout<0:
-            heapq.heappush(zeroheap, freeout)
-    return True
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/hierarchy.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/hierarchy.py
deleted file mode 100644
index c38337b..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/hierarchy.py
+++ /dev/null
@@ -1,53 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-Flow Hierarchy.
-"""
-#    Copyright (C) 2004-2011 by
-#    Aric Hagberg <hagberg@lanl.gov>
-#    Dan Schult <dschult@colgate.edu>
-#    Pieter Swart <swart@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-import networkx as nx
-__authors__ = "\n".join(['Ben Edwards (bedwards@cs.unm.edu)'])
-__all__ = ['flow_hierarchy']
-
-def flow_hierarchy(G, weight=None):
-    """Returns the flow hierarchy of a directed network.
-
-    Flow hierarchy is defined as the fraction of edges not participating
-    in cycles in a directed graph [1]_.
-
-    Parameters
-    ----------
-    G : DiGraph or MultiDiGraph
-       A directed graph
-
-    weight : key,optional (default=None)
-       Attribute to use for node weights. If None the weight defaults to 1.
-
-    Returns
-    -------
-    h : float
-       Flow heirarchy value
-
-    Notes
-    -----
-    The algorithm described in [1]_ computes the flow hierarchy through
-    exponentiation of the adjacency matrix.  This function implements an
-    alternative approach that finds strongly connected components.
-    An edge is in a cycle if and only if it is in a strongly connected
-    component, which can be found in `O(m)` time using Tarjan's algorithm.
-
-    References
-    ----------
-    .. [1] Luo, J.; Magee, C.L. (2011),
-       Detecting evolving patterns of self-organizing networks by flow
-       hierarchy measurement, Complexity, Volume 16 Issue 6 53-61.
-       DOI: 10.1002/cplx.20368
-       http://web.mit.edu/~cmagee/www/documents/28-DetectingEvolvingPatterns_FlowHierarchy.pdf
-    """
-    if not G.is_directed():
-        raise nx.NetworkXError("G must be a digraph in flow_heirarchy")
-    scc = nx.strongly_connected_components(G)
-    return 1.-sum(G.subgraph(c).size(weight) for c in scc)/float(G.size(weight))
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/isolate.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/isolate.py
deleted file mode 100644
index a14178b..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/isolate.py
+++ /dev/null
@@ -1,77 +0,0 @@
-# encoding: utf-8
-"""
-Functions for identifying isolate (degree zero) nodes.
-"""
-#    Copyright (C) 2004-2011 by 
-#    Aric Hagberg <hagberg@lanl.gov>
-#    Dan Schult <dschult@colgate.edu>
-#    Pieter Swart <swart@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-import networkx as nx
-__author__ = """\n""".join(['Drew Conway <drew.conway@nyu.edu>',
-                            'Aric Hagberg <hagberg@lanl.gov>'])
-__all__=['is_isolate','isolates']
-
-def is_isolate(G,n):
-    """Determine of node n is an isolate (degree zero).  
-
-    Parameters
-    ----------
-    G : graph
-        A networkx graph
-    n : node
-        A node in G
-
-    Returns
-    -------
-    isolate : bool
-       True if n has no neighbors, False otherwise.
-    
-    Examples
-    --------
-    >>> G=nx.Graph()
-    >>> G.add_edge(1,2)
-    >>> G.add_node(3)
-    >>> nx.is_isolate(G,2)
-    False
-    >>> nx.is_isolate(G,3)
-    True
-    """
-    return G.degree(n)==0 
-
-def isolates(G):
-    """Return list of isolates in the graph.
-
-    Isolates are nodes with no neighbors (degree zero).
-
-    Parameters
-    ----------
-    G : graph
-        A networkx graph
-
-    Returns
-    -------
-    isolates : list
-       List of isolate nodes.
-    
-    Examples
-    --------
-    >>> G = nx.Graph()
-    >>> G.add_edge(1,2)
-    >>> G.add_node(3)
-    >>> nx.isolates(G)
-    [3]
-
-    To remove all isolates in the graph use
-    >>> G.remove_nodes_from(nx.isolates(G))
-    >>> G.nodes()
-    [1, 2]
-
-    For digraphs isolates have zero in-degree and zero out_degre
-    >>> G = nx.DiGraph([(0,1),(1,2)])
-    >>> G.add_node(3)
-    >>> nx.isolates(G)
-    [3]
-    """
-    return [n for (n,d) in G.degree_iter() if d==0]
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/isomorphism/__init__.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/isomorphism/__init__.py
deleted file mode 100644
index 7821bc2..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/isomorphism/__init__.py
+++ /dev/null
@@ -1,4 +0,0 @@
-from networkx.algorithms.isomorphism.isomorph import *
-from networkx.algorithms.isomorphism.vf2userfunc import *
-from networkx.algorithms.isomorphism.matchhelpers import *
-
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/isomorphism/isomorph.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/isomorphism/isomorph.py
deleted file mode 100644
index 7de3308..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/isomorphism/isomorph.py
+++ /dev/null
@@ -1,227 +0,0 @@
-"""
-Graph isomorphism functions.
-"""
-import networkx as nx
-from networkx.exception import NetworkXError
-__author__ = """\n""".join(['Aric Hagberg (hagberg@lanl.gov)',
-                            'Pieter Swart (swart@lanl.gov)',
-                            'Christopher Ellison cellison@cse.ucdavis.edu)'])
-#    Copyright (C) 2004-2011 by
-#    Aric Hagberg <hagberg@lanl.gov>
-#    Dan Schult <dschult@colgate.edu>
-#    Pieter Swart <swart@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-__all__ = ['could_be_isomorphic',
-           'fast_could_be_isomorphic',
-           'faster_could_be_isomorphic',
-           'is_isomorphic']
-
-def could_be_isomorphic(G1,G2):
-    """Returns False if graphs are definitely not isomorphic.
-    True does NOT guarantee isomorphism.
-
-    Parameters
-    ----------
-    G1, G2 : graphs
-       The two graphs G1 and G2 must be the same type.
-
-    Notes
-    -----
-    Checks for matching degree, triangle, and number of cliques sequences.
-    """
-
-    # Check global properties
-    if G1.order() != G2.order(): return False
-
-    # Check local properties
-    d1=G1.degree()
-    t1=nx.triangles(G1)
-    c1=nx.number_of_cliques(G1)
-    props1=[ [d1[v], t1[v], c1[v]] for v in d1 ]
-    props1.sort()
-
-    d2=G2.degree()
-    t2=nx.triangles(G2)
-    c2=nx.number_of_cliques(G2)
-    props2=[ [d2[v], t2[v], c2[v]] for v in d2 ]
-    props2.sort()
-
-    if props1 != props2:
-        return False
-
-    # OK...
-    return True
-
-graph_could_be_isomorphic=could_be_isomorphic
-
-def fast_could_be_isomorphic(G1,G2):
-    """Returns False if graphs are definitely not isomorphic.
-
-    True does NOT guarantee isomorphism.
-
-    Parameters
-    ----------
-    G1, G2 : graphs
-       The two graphs G1 and G2 must be the same type.
-
-    Notes
-    -----
-    Checks for matching degree and triangle sequences.
-    """
-    # Check global properties
-    if G1.order() != G2.order(): return False
-
-    # Check local properties
-    d1=G1.degree()
-    t1=nx.triangles(G1)
-    props1=[ [d1[v], t1[v]] for v in d1 ]
-    props1.sort()
-
-    d2=G2.degree()
-    t2=nx.triangles(G2)
-    props2=[ [d2[v], t2[v]] for v in d2 ]
-    props2.sort()
-
-    if props1 != props2: return False
-
-    # OK...
-    return True
-
-fast_graph_could_be_isomorphic=fast_could_be_isomorphic
-
-def faster_could_be_isomorphic(G1,G2):
-    """Returns False if graphs are definitely not isomorphic.
-
-    True does NOT guarantee isomorphism.
-
-    Parameters
-    ----------
-    G1, G2 : graphs
-       The two graphs G1 and G2 must be the same type.
-
-    Notes
-    -----
-    Checks for matching degree sequences.
-    """
-    # Check global properties
-    if G1.order() != G2.order(): return False
-
-    # Check local properties
-    d1=list(G1.degree().values())
-    d1.sort()
-    d2=list(G2.degree().values())
-    d2.sort()
-
-    if d1 != d2: return False
-
-    # OK...
-    return True
-
-faster_graph_could_be_isomorphic=faster_could_be_isomorphic
-
-def is_isomorphic(G1, G2, node_match=None, edge_match=None):
-    """Returns True if the graphs G1 and G2 are isomorphic and False otherwise.
-
-    Parameters
-    ----------
-    G1, G2: graphs
-        The two graphs G1 and G2 must be the same type.
-
-    node_match : callable
-        A function that returns True if node n1 in G1 and n2 in G2 should
-        be considered equal during the isomorphism test.
-        If node_match is not specified then node attributes are not considered.
-
-        The function will be called like
-
-           node_match(G1.node[n1], G2.node[n2]).
-
-        That is, the function will receive the node attribute dictionaries
-        for n1 and n2 as inputs.
-
-    edge_match : callable
-        A function that returns True if the edge attribute dictionary
-        for the pair of nodes (u1, v1) in G1 and (u2, v2) in G2 should
-        be considered equal during the isomorphism test.  If edge_match is
-        not specified then edge attributes are not considered.
-
-        The function will be called like
-
-           edge_match(G1[u1][v1], G2[u2][v2]).
-
-        That is, the function will receive the edge attribute dictionaries
-        of the edges under consideration.
-
-    Notes
-    -----
-    Uses the vf2 algorithm [1]_.
-
-    Examples
-    --------
-    >>> import networkx.algorithms.isomorphism as iso
-
-    For digraphs G1 and G2, using 'weight' edge attribute (default: 1)
-
-    >>> G1 = nx.DiGraph()
-    >>> G2 = nx.DiGraph()
-    >>> G1.add_path([1,2,3,4],weight=1)
-    >>> G2.add_path([10,20,30,40],weight=2)
-    >>> em = iso.numerical_edge_match('weight', 1)
-    >>> nx.is_isomorphic(G1, G2)  # no weights considered
-    True
-    >>> nx.is_isomorphic(G1, G2, edge_match=em) # match weights
-    False
-
-    For multidigraphs G1 and G2, using 'fill' node attribute (default: '')
-
-    >>> G1 = nx.MultiDiGraph()
-    >>> G2 = nx.MultiDiGraph()
-    >>> G1.add_nodes_from([1,2,3],fill='red')
-    >>> G2.add_nodes_from([10,20,30,40],fill='red')
-    >>> G1.add_path([1,2,3,4],weight=3, linewidth=2.5)
-    >>> G2.add_path([10,20,30,40],weight=3)
-    >>> nm = iso.categorical_node_match('fill', 'red')
-    >>> nx.is_isomorphic(G1, G2, node_match=nm)
-    True
-
-    For multidigraphs G1 and G2, using 'weight' edge attribute (default: 7)
-
-    >>> G1.add_edge(1,2, weight=7)
-    >>> G2.add_edge(10,20)
-    >>> em = iso.numerical_multiedge_match('weight', 7, rtol=1e-6)
-    >>> nx.is_isomorphic(G1, G2, edge_match=em)
-    True
-
-    For multigraphs G1 and G2, using 'weight' and 'linewidth' edge attributes
-    with default values 7 and 2.5. Also using 'fill' node attribute with
-    default value 'red'.
-
-    >>> em = iso.numerical_multiedge_match(['weight', 'linewidth'], [7, 2.5])
-    >>> nm = iso.categorical_node_match('fill', 'red')
-    >>> nx.is_isomorphic(G1, G2, edge_match=em, node_match=nm)
-    True
-
-    See Also
-    --------
-    numerical_node_match, numerical_edge_match, numerical_multiedge_match
-    categorical_node_match, categorical_edge_match, categorical_multiedge_match
-
-    References
-    ----------
-    .. [1]  L. P. Cordella, P. Foggia, C. Sansone, M. Vento,
-       "An Improved Algorithm for Matching Large Graphs",
-       3rd IAPR-TC15 Workshop  on Graph-based Representations in
-       Pattern Recognition, Cuen, pp. 149-159, 2001.
-       http://amalfi.dis.unina.it/graph/db/papers/vf-algorithm.pdf
-    """
-    if G1.is_directed() and G2.is_directed():
-        GM = nx.algorithms.isomorphism.DiGraphMatcher
-    elif (not G1.is_directed()) and (not G2.is_directed()):
-        GM = nx.algorithms.isomorphism.GraphMatcher
-    else:
-       raise NetworkXError("Graphs G1 and G2 are not of the same type.")
-
-    gm = GM(G1, G2, node_match=node_match, edge_match=edge_match)
-
-    return gm.is_isomorphic()
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/isomorphism/isomorphvf2.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/isomorphism/isomorphvf2.py
deleted file mode 100644
index 1efe74d..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/isomorphism/isomorphvf2.py
+++ /dev/null
@@ -1,965 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-*************
-VF2 Algorithm
-*************
-
-An implementation of VF2 algorithm for graph ismorphism testing.
-
-The simplest interface to use this module is to call networkx.is_isomorphic().
-
-Introduction
-------------
-
-The GraphMatcher and DiGraphMatcher are responsible for matching
-graphs or directed graphs in a predetermined manner.  This
-usually means a check for an isomorphism, though other checks
-are also possible.  For example, a subgraph of one graph
-can be checked for isomorphism to a second graph.
-
-Matching is done via syntactic feasibility. It is also possible
-to check for semantic feasibility. Feasibility, then, is defined
-as the logical AND of the two functions.
-
-To include a semantic check, the (Di)GraphMatcher class should be
-subclassed, and the semantic_feasibility() function should be
-redefined.  By default, the semantic feasibility function always
-returns True.  The effect of this is that semantics are not
-considered in the matching of G1 and G2.
-
-Examples
---------
-
-Suppose G1 and G2 are isomorphic graphs. Verification is as follows:
-
->>> from networkx.algorithms import isomorphism
->>> G1 = nx.path_graph(4)
->>> G2 = nx.path_graph(4)
->>> GM = isomorphism.GraphMatcher(G1,G2)
->>> GM.is_isomorphic()
-True
-
-GM.mapping stores the isomorphism mapping from G1 to G2.
-
->>> GM.mapping
-{0: 0, 1: 1, 2: 2, 3: 3}
-
-
-Suppose G1 and G2 are isomorphic directed graphs
-graphs. Verification is as follows:
-
->>> G1 = nx.path_graph(4, create_using=nx.DiGraph())
->>> G2 = nx.path_graph(4, create_using=nx.DiGraph())
->>> DiGM = isomorphism.DiGraphMatcher(G1,G2)
->>> DiGM.is_isomorphic()
-True
-
-DiGM.mapping stores the isomorphism mapping from G1 to G2.
-
->>> DiGM.mapping
-{0: 0, 1: 1, 2: 2, 3: 3}
-
-
-
-Subgraph Isomorphism
---------------------
-Graph theory literature can be ambiguious about the meaning of the
-above statement, and we seek to clarify it now.
-
-In the VF2 literature, a mapping M is said to be a graph-subgraph
-isomorphism iff M is an isomorphism between G2 and a subgraph of G1.
-Thus, to say that G1 and G2 are graph-subgraph isomorphic is to say
-that a subgraph of G1 is isomorphic to G2.
-
-Other literature uses the phrase 'subgraph isomorphic' as in 'G1 does
-not have a subgraph isomorphic to G2'.  Another use is as an in adverb
-for isomorphic.  Thus, to say that G1 and G2 are subgraph isomorphic
-is to say that a subgraph of G1 is isomorphic to G2.
-
-Finally, the term 'subgraph' can have multiple meanings. In this
-context, 'subgraph' always means a 'node-induced subgraph'. Edge-induced
-subgraph isomorphisms are not directly supported, but one should be
-able to perform the check by making use of nx.line_graph(). For
-subgraphs which are not induced, the term 'monomorphism' is preferred
-over 'isomorphism'. Currently, it is not possible to check for
-monomorphisms.
-
-Let G=(N,E) be a graph with a set of nodes N and set of edges E.
-
-If G'=(N',E') is a subgraph, then:
-    N' is a subset of N
-    E' is a subset of E
-
-If G'=(N',E') is a node-induced subgraph, then:
-    N' is a subset of N
-    E' is the subset of edges in E relating nodes in N'
-
-If G'=(N',E') is an edge-induced subgrpah, then:
-    N' is the subset of nodes in N related by edges in E'
-    E' is a subset of E
-
-References
-----------
-[1]   Luigi P. Cordella, Pasquale Foggia, Carlo Sansone, Mario Vento,
-      "A (Sub)Graph Isomorphism Algorithm for Matching Large Graphs",
-      IEEE Transactions on Pattern Analysis and Machine Intelligence,
-      vol. 26,  no. 10,  pp. 1367-1372,  Oct.,  2004.
-      http://ieeexplore.ieee.org/iel5/34/29305/01323804.pdf
-
-[2]   L. P. Cordella, P. Foggia, C. Sansone, M. Vento, "An Improved
-      Algorithm for Matching Large Graphs", 3rd IAPR-TC15 Workshop
-      on Graph-based Representations in Pattern Recognition, Cuen,
-      pp. 149-159, 2001.
-      http://amalfi.dis.unina.it/graph/db/papers/vf-algorithm.pdf
-
-See Also
---------
-syntactic_feasibliity(), semantic_feasibility()
-
-Notes
------
-Modified to handle undirected graphs.
-Modified to handle multiple edges.
-
-
-In general, this problem is NP-Complete.
-
-
-
-"""
-
-#    Copyright (C) 2007-2009 by the NetworkX maintainers
-#    All rights reserved.
-#    BSD license.
-
-#    This work was originally coded by Christopher Ellison
-#    as part of the Computational Mechanics Python (CMPy) project.
-#    James P. Crutchfield, principal investigator.
-#    Complexity Sciences Center and Physics Department, UC Davis.
-
-import sys
-import networkx as nx
-
-__all__ = ['GraphMatcher',
-           'DiGraphMatcher']
-
-class GraphMatcher(object):
-    """Implementation of VF2 algorithm for matching undirected graphs.
-
-    Suitable for Graph and MultiGraph instances.
-    """
-    def __init__(self, G1, G2):
-        """Initialize GraphMatcher.
-
-        Parameters
-        ----------
-        G1,G2: NetworkX Graph or MultiGraph instances.
-           The two graphs to check for isomorphism.
-
-        Examples
-        --------
-        To create a GraphMatcher which checks for syntactic feasibility:
-
-        >>> from networkx.algorithms import isomorphism
-        >>> G1 = nx.path_graph(4)
-        >>> G2 = nx.path_graph(4)
-        >>> GM = isomorphism.GraphMatcher(G1,G2)
-        """
-        self.G1 = G1
-        self.G2 = G2
-        self.G1_nodes = set(G1.nodes())
-        self.G2_nodes = set(G2.nodes())
-
-        # Set recursion limit.
-        self.old_recursion_limit = sys.getrecursionlimit()
-        expected_max_recursion_level = len(self.G2)
-        if self.old_recursion_limit < 1.5 * expected_max_recursion_level:
-            # Give some breathing room.
-            sys.setrecursionlimit(int(1.5 * expected_max_recursion_level))
-
-        # Declare that we will be searching for a graph-graph isomorphism.
-        self.test = 'graph'
-
-        # Initialize state
-        self.initialize()
-
-    def reset_recursion_limit(self):
-        """Restores the recursion limit."""
-        ### TODO:
-        ###     Currently, we use recursion and set the recursion level higher.
-        ###     It would be nice to restore the level, but because the
-        ###     (Di)GraphMatcher classes make use of cyclic references, garbage
-        ###     collection will never happen when we define __del__() to
-        ###     restore the recursion level. The result is a memory leak.
-        ###     So for now, we do not automatically restore the recursion level,
-        ###     and instead provide a method to do this manually. Eventually,
-        ###     we should turn this into a non-recursive implementation.
-        sys.setrecursionlimit(self.old_recursion_limit)
-
-    def candidate_pairs_iter(self):
-        """Iterator over candidate pairs of nodes in G1 and G2."""
-
-        # All computations are done using the current state!
-
-        G1_nodes = self.G1_nodes
-        G2_nodes = self.G2_nodes
-
-        # First we compute the inout-terminal sets.
-        T1_inout = [node for node in G1_nodes if (node in self.inout_1) and (node not in self.core_1)]
-        T2_inout = [node for node in G2_nodes if (node in self.inout_2) and (node not in self.core_2)]
-
-        # If T1_inout and T2_inout are both nonempty.
-        # P(s) = T1_inout x {min T2_inout}
-        if T1_inout and T2_inout:
-            for node in T1_inout:
-                yield node, min(T2_inout)
-
-        else:
-            # If T1_inout and T2_inout were both empty....
-            # P(s) = (N_1 - M_1) x {min (N_2 - M_2)}
-            ##if not (T1_inout or T2_inout):       # as suggested by  [2], incorrect
-            if 1:                                  # as inferred from [1], correct
-                # First we determine the candidate node for G2
-                other_node = min(G2_nodes - set(self.core_2))
-                for node in self.G1:
-                    if node not in self.core_1:
-                        yield node, other_node
-
-        # For all other cases, we don't have any candidate pairs.
-
-    def initialize(self):
-        """Reinitializes the state of the algorithm.
-
-        This method should be redefined if using something other than GMState.
-        If only subclassing GraphMatcher, a redefinition is not necessary.
-
-        """
-
-        # core_1[n] contains the index of the node paired with n, which is m,
-        #           provided n is in the mapping.
-        # core_2[m] contains the index of the node paired with m, which is n,
-        #           provided m is in the mapping.
-        self.core_1 = {}
-        self.core_2 = {}
-
-        # See the paper for definitions of M_x and T_x^{y}
-
-        # inout_1[n]  is non-zero if n is in M_1 or in T_1^{inout}
-        # inout_2[m]  is non-zero if m is in M_2 or in T_2^{inout}
-        #
-        # The value stored is the depth of the SSR tree when the node became
-        # part of the corresponding set.
-        self.inout_1 = {}
-        self.inout_2 = {}
-        # Practically, these sets simply store the nodes in the subgraph.
-
-        self.state = GMState(self)
-
-        # Provide a convienient way to access the isomorphism mapping.
-        self.mapping = self.core_1.copy()
-
-    def is_isomorphic(self):
-        """Returns True if G1 and G2 are isomorphic graphs."""
-
-        # Let's do two very quick checks!
-        # QUESTION: Should we call faster_graph_could_be_isomorphic(G1,G2)?
-        # For now, I just copy the code.
-
-        # Check global properties
-        if self.G1.order() != self.G2.order(): return False
-
-        # Check local properties
-        d1=sorted(self.G1.degree().values())
-        d2=sorted(self.G2.degree().values())
-        if d1 != d2: return False
-
-        try:
-            x = next(self.isomorphisms_iter())
-            return True
-        except StopIteration:
-            return False
-
-    def isomorphisms_iter(self):
-        """Generator over isomorphisms between G1 and G2."""
-        # Declare that we are looking for a graph-graph isomorphism.
-        self.test = 'graph'
-        self.initialize()
-        for mapping in self.match():
-            yield mapping
-
-    def match(self):
-        """Extends the isomorphism mapping.
-
-        This function is called recursively to determine if a complete
-        isomorphism can be found between G1 and G2.  It cleans up the class
-        variables after each recursive call. If an isomorphism is found,
-        we yield the mapping.
-
-        """
-        if len(self.core_1) == len(self.G2):
-            # Save the final mapping, otherwise garbage collection deletes it.
-            self.mapping = self.core_1.copy()
-            # The mapping is complete.
-            yield self.mapping
-        else:
-            for G1_node, G2_node in self.candidate_pairs_iter():
-                if self.syntactic_feasibility(G1_node, G2_node):
-                    if self.semantic_feasibility(G1_node, G2_node):
-                        # Recursive call, adding the feasible state.
-                        newstate = self.state.__class__(self, G1_node, G2_node)
-                        for mapping in self.match():
-                            yield mapping
-
-                        # restore data structures
-                        newstate.restore()
-
-    def semantic_feasibility(self, G1_node, G2_node):
-        """Returns True if adding (G1_node, G2_node) is symantically feasible.
-
-        The semantic feasibility function should return True if it is
-        acceptable to add the candidate pair (G1_node, G2_node) to the current
-        partial isomorphism mapping.   The logic should focus on semantic
-        information contained in the edge data or a formalized node class.
-
-        By acceptable, we mean that the subsequent mapping can still become a
-        complete isomorphism mapping.  Thus, if adding the candidate pair
-        definitely makes it so that the subsequent mapping cannot become a
-        complete isomorphism mapping, then this function must return False.
-
-        The default semantic feasibility function always returns True. The
-        effect is that semantics are not considered in the matching of G1
-        and G2.
-
-        The semantic checks might differ based on the what type of test is
-        being performed.  A keyword description of the test is stored in
-        self.test.  Here is a quick description of the currently implemented
-        tests::
-
-          test='graph'
-            Indicates that the graph matcher is looking for a graph-graph
-            isomorphism.
-
-          test='subgraph'
-            Indicates that the graph matcher is looking for a subgraph-graph
-            isomorphism such that a subgraph of G1 is isomorphic to G2.
-
-        Any subclass which redefines semantic_feasibility() must maintain
-        the above form to keep the match() method functional. Implementations
-        should consider multigraphs.
-        """
-        return True
-
-    def subgraph_is_isomorphic(self):
-        """Returns True if a subgraph of G1 is isomorphic to G2."""
-        try:
-            x = next(self.subgraph_isomorphisms_iter())
-            return True
-        except StopIteration:
-            return False
-
-#    subgraph_is_isomorphic.__doc__ += "\n" + subgraph.replace('\n','\n'+indent)
-
-    def subgraph_isomorphisms_iter(self):
-        """Generator over isomorphisms between a subgraph of G1 and G2."""
-        # Declare that we are looking for graph-subgraph isomorphism.
-        self.test = 'subgraph'
-        self.initialize()
-        for mapping in self.match():
-            yield mapping
-
-#    subgraph_isomorphisms_iter.__doc__ += "\n" + subgraph.replace('\n','\n'+indent)
-
-    def syntactic_feasibility(self, G1_node, G2_node):
-        """Returns True if adding (G1_node, G2_node) is syntactically feasible.
-
-        This function returns True if it is adding the candidate pair
-        to the current partial isomorphism mapping is allowable.  The addition
-        is allowable if the inclusion of the candidate pair does not make it
-        impossible for an isomorphism to be found.
-        """
-
-        # The VF2 algorithm was designed to work with graphs having, at most,
-        # one edge connecting any two nodes.  This is not the case when
-        # dealing with an MultiGraphs.
-        #
-        # Basically, when we test the look-ahead rules R_neighbor, we will
-        # make sure that the number of edges are checked. We also add
-        # a R_self check to verify that the number of selfloops is acceptable.
-        #
-        # Users might be comparing Graph instances with MultiGraph instances.
-        # So the generic GraphMatcher class must work with MultiGraphs.
-        # Care must be taken since the value in the innermost dictionary is a
-        # singlet for Graph instances.  For MultiGraphs, the value in the
-        # innermost dictionary is a list.
-
-
-        ###
-        ### Test at each step to get a return value as soon as possible.
-        ###
-
-        ### Look ahead 0
-
-        # R_self
-
-        # The number of selfloops for G1_node must equal the number of
-        # self-loops for G2_node. Without this check, we would fail on
-        # R_neighbor at the next recursion level. But it is good to prune the
-        # search tree now.
-        if self.G1.number_of_edges(G1_node,G1_node) != self.G2.number_of_edges(G2_node,G2_node):
-            return False
-
-
-        # R_neighbor
-
-        # For each neighbor n' of n in the partial mapping, the corresponding
-        # node m' is a neighbor of m, and vice versa. Also, the number of
-        # edges must be equal.
-        for neighbor in self.G1[G1_node]:
-            if neighbor in self.core_1:
-                if not (self.core_1[neighbor] in self.G2[G2_node]):
-                    return False
-                elif self.G1.number_of_edges(neighbor, G1_node) != self.G2.number_of_edges(self.core_1[neighbor], G2_node):
-                    return False
-        for neighbor in self.G2[G2_node]:
-            if neighbor in self.core_2:
-                if not (self.core_2[neighbor] in self.G1[G1_node]):
-                    return False
-                elif self.G1.number_of_edges(self.core_2[neighbor], G1_node) != self.G2.number_of_edges(neighbor, G2_node):
-                    return False
-
-        ### Look ahead 1
-
-        # R_terminout
-        # The number of neighbors of n that are in T_1^{inout} is equal to the
-        # number of neighbors of m that are in T_2^{inout}, and vice versa.
-        num1 = 0
-        for neighbor in self.G1[G1_node]:
-            if (neighbor in self.inout_1) and (neighbor not in self.core_1):
-                num1 += 1
-        num2 = 0
-        for neighbor in self.G2[G2_node]:
-            if (neighbor in self.inout_2) and (neighbor not in self.core_2):
-                num2 += 1
-        if self.test == 'graph':
-            if not (num1 == num2):
-                return False
-        else: # self.test == 'subgraph'
-            if not (num1 >= num2):
-                return False
-
-
-        ### Look ahead 2
-
-        # R_new
-
-        # The number of neighbors of n that are neither in the core_1 nor
-        # T_1^{inout} is equal to the number of neighbors of m
-        # that are neither in core_2 nor T_2^{inout}.
-        num1 = 0
-        for neighbor in self.G1[G1_node]:
-            if neighbor not in self.inout_1:
-                num1 += 1
-        num2 = 0
-        for neighbor in self.G2[G2_node]:
-            if neighbor not in self.inout_2:
-                num2 += 1
-        if self.test == 'graph':
-            if not (num1 == num2):
-                return False
-        else: # self.test == 'subgraph'
-            if not (num1 >= num2):
-                return False
-
-        # Otherwise, this node pair is syntactically feasible!
-        return True
-
-
-class DiGraphMatcher(GraphMatcher):
-    """Implementation of VF2 algorithm for matching directed graphs.
-
-    Suitable for DiGraph and MultiDiGraph instances.
-    """
-#    __doc__ += "Notes\n%s-----" % (indent,) + sources.replace('\n','\n'+indent)
-
-    def __init__(self, G1, G2):
-        """Initialize DiGraphMatcher.
-
-        G1 and G2 should be nx.Graph or nx.MultiGraph instances.
-
-        Examples
-        --------
-        To create a GraphMatcher which checks for syntactic feasibility:
-
-        >>> from networkx.algorithms import isomorphism
-        >>> G1 = nx.DiGraph(nx.path_graph(4, create_using=nx.DiGraph()))
-        >>> G2 = nx.DiGraph(nx.path_graph(4, create_using=nx.DiGraph()))
-        >>> DiGM = isomorphism.DiGraphMatcher(G1,G2)
-        """
-        super(DiGraphMatcher, self).__init__(G1, G2)
-
-    def candidate_pairs_iter(self):
-        """Iterator over candidate pairs of nodes in G1 and G2."""
-
-        # All computations are done using the current state!
-
-        G1_nodes = self.G1_nodes
-        G2_nodes = self.G2_nodes
-
-        # First we compute the out-terminal sets.
-        T1_out = [node for node in G1_nodes if (node in self.out_1) and (node not in self.core_1)]
-        T2_out = [node for node in G2_nodes if (node in self.out_2) and (node not in self.core_2)]
-
-        # If T1_out and T2_out are both nonempty.
-        # P(s) = T1_out x {min T2_out}
-        if T1_out and T2_out:
-            node_2 = min(T2_out)
-            for node_1 in T1_out:
-                yield node_1, node_2
-
-        # If T1_out and T2_out were both empty....
-        # We compute the in-terminal sets.
-
-        ##elif not (T1_out or T2_out):   # as suggested by [2], incorrect
-        else:                            # as suggested by [1], correct
-            T1_in = [node for node in G1_nodes if (node in self.in_1) and (node not in self.core_1)]
-            T2_in = [node for node in G2_nodes if (node in self.in_2) and (node not in self.core_2)]
-
-            # If T1_in and T2_in are both nonempty.
-            # P(s) = T1_out x {min T2_out}
-            if T1_in and T2_in:
-                node_2 = min(T2_in)
-                for node_1 in T1_in:
-                    yield node_1, node_2
-
-            # If all terminal sets are empty...
-            # P(s) = (N_1 - M_1) x {min (N_2 - M_2)}
-
-            ##elif not (T1_in or T2_in):   # as suggested by  [2], incorrect
-            else:                          # as inferred from [1], correct
-                node_2 = min(G2_nodes - set(self.core_2))
-                for node_1 in G1_nodes:
-                    if node_1 not in self.core_1:
-                        yield node_1, node_2
-
-        # For all other cases, we don't have any candidate pairs.
-
-    def initialize(self):
-        """Reinitializes the state of the algorithm.
-
-        This method should be redefined if using something other than DiGMState.
-        If only subclassing GraphMatcher, a redefinition is not necessary.
-        """
-
-        # core_1[n] contains the index of the node paired with n, which is m,
-        #           provided n is in the mapping.
-        # core_2[m] contains the index of the node paired with m, which is n,
-        #           provided m is in the mapping.
-        self.core_1 = {}
-        self.core_2 = {}
-
-        # See the paper for definitions of M_x and T_x^{y}
-
-        # in_1[n]  is non-zero if n is in M_1 or in T_1^{in}
-        # out_1[n] is non-zero if n is in M_1 or in T_1^{out}
-        #
-        # in_2[m]  is non-zero if m is in M_2 or in T_2^{in}
-        # out_2[m] is non-zero if m is in M_2 or in T_2^{out}
-        #
-        # The value stored is the depth of the search tree when the node became
-        # part of the corresponding set.
-        self.in_1 = {}
-        self.in_2 = {}
-        self.out_1 = {}
-        self.out_2 = {}
-
-        self.state = DiGMState(self)
-
-        # Provide a convienient way to access the isomorphism mapping.
-        self.mapping = self.core_1.copy()
-
-    def syntactic_feasibility(self, G1_node, G2_node):
-        """Returns True if adding (G1_node, G2_node) is syntactically feasible.
-
-        This function returns True if it is adding the candidate pair
-        to the current partial isomorphism mapping is allowable.  The addition
-        is allowable if the inclusion of the candidate pair does not make it
-        impossible for an isomorphism to be found.
-        """
-
-        # The VF2 algorithm was designed to work with graphs having, at most,
-        # one edge connecting any two nodes.  This is not the case when
-        # dealing with an MultiGraphs.
-        #
-        # Basically, when we test the look-ahead rules R_pred and R_succ, we
-        # will make sure that the number of edges are checked.  We also add
-        # a R_self check to verify that the number of selfloops is acceptable.
-
-        # Users might be comparing DiGraph instances with MultiDiGraph
-        # instances. So the generic DiGraphMatcher class must work with
-        # MultiDiGraphs. Care must be taken since the value in the innermost
-        # dictionary is a singlet for DiGraph instances.  For MultiDiGraphs,
-        # the value in the innermost dictionary is a list.
-
-
-        ###
-        ### Test at each step to get a return value as soon as possible.
-        ###
-
-
-
-        ### Look ahead 0
-
-        # R_self
-
-        # The number of selfloops for G1_node must equal the number of
-        # self-loops for G2_node. Without this check, we would fail on R_pred
-        # at the next recursion level. This should prune the tree even further.
-
-        if self.G1.number_of_edges(G1_node,G1_node) != self.G2.number_of_edges(G2_node,G2_node):
-            return False
-
-
-        # R_pred
-
-        # For each predecessor n' of n in the partial mapping, the
-        # corresponding node m' is a predecessor of m, and vice versa. Also,
-        # the number of edges must be equal
-        for predecessor in self.G1.pred[G1_node]:
-            if predecessor in self.core_1:
-                if not (self.core_1[predecessor] in self.G2.pred[G2_node]):
-                    return False
-                elif self.G1.number_of_edges(predecessor, G1_node) != self.G2.number_of_edges(self.core_1[predecessor], G2_node):
-                    return False
-
-        for predecessor in self.G2.pred[G2_node]:
-            if predecessor in self.core_2:
-                if not (self.core_2[predecessor] in self.G1.pred[G1_node]):
-                    return False
-                elif self.G1.number_of_edges(self.core_2[predecessor], G1_node) != self.G2.number_of_edges(predecessor, G2_node):
-                    return False
-
-
-        # R_succ
-
-        # For each successor n' of n in the partial mapping, the corresponding
-        # node m' is a successor of m, and vice versa. Also, the number of
-        # edges must be equal.
-        for successor in self.G1[G1_node]:
-            if successor in self.core_1:
-                if not (self.core_1[successor] in self.G2[G2_node]):
-                    return False
-                elif self.G1.number_of_edges(G1_node, successor) != self.G2.number_of_edges(G2_node, self.core_1[successor]):
-                    return False
-
-        for successor in self.G2[G2_node]:
-            if successor in self.core_2:
-                if not (self.core_2[successor] in self.G1[G1_node]):
-                    return False
-                elif self.G1.number_of_edges(G1_node, self.core_2[successor]) != self.G2.number_of_edges(G2_node, successor):
-                    return False
-
-
-        ### Look ahead 1
-
-        # R_termin
-        # The number of predecessors of n that are in T_1^{in} is equal to the
-        # number of predecessors of m that are in T_2^{in}.
-        num1 = 0
-        for predecessor in self.G1.pred[G1_node]:
-            if (predecessor in self.in_1) and (predecessor not in self.core_1):
-                num1 += 1
-        num2 = 0
-        for predecessor in self.G2.pred[G2_node]:
-            if (predecessor in self.in_2) and (predecessor not in self.core_2):
-                num2 += 1
-        if self.test == 'graph':
-            if not (num1 == num2):
-                return False
-        else: # self.test == 'subgraph'
-            if not (num1 >= num2):
-                return False
-
-        # The number of successors of n that are in T_1^{in} is equal to the
-        # number of successors of m that are in T_2^{in}.
-        num1 = 0
-        for successor in self.G1[G1_node]:
-            if (successor in self.in_1) and (successor not in self.core_1):
-                num1 += 1
-        num2 = 0
-        for successor in self.G2[G2_node]:
-            if (successor in self.in_2) and (successor not in self.core_2):
-                num2 += 1
-        if self.test == 'graph':
-            if not (num1 == num2):
-                return False
-        else: # self.test == 'subgraph'
-            if not (num1 >= num2):
-                return False
-
-        # R_termout
-
-        # The number of predecessors of n that are in T_1^{out} is equal to the
-        # number of predecessors of m that are in T_2^{out}.
-        num1 = 0
-        for predecessor in self.G1.pred[G1_node]:
-            if (predecessor in self.out_1) and (predecessor not in self.core_1):
-                num1 += 1
-        num2 = 0
-        for predecessor in self.G2.pred[G2_node]:
-            if (predecessor in self.out_2) and (predecessor not in self.core_2):
-                num2 += 1
-        if self.test == 'graph':
-            if not (num1 == num2):
-                return False
-        else: # self.test == 'subgraph'
-            if not (num1 >= num2):
-                return False
-
-        # The number of successors of n that are in T_1^{out} is equal to the
-        # number of successors of m that are in T_2^{out}.
-        num1 = 0
-        for successor in self.G1[G1_node]:
-            if (successor in self.out_1) and (successor not in self.core_1):
-                num1 += 1
-        num2 = 0
-        for successor in self.G2[G2_node]:
-            if (successor in self.out_2) and (successor not in self.core_2):
-                num2 += 1
-        if self.test == 'graph':
-            if not (num1 == num2):
-                return False
-        else: # self.test == 'subgraph'
-            if not (num1 >= num2):
-                return False
-
-        ### Look ahead 2
-
-        # R_new
-
-        # The number of predecessors of n that are neither in the core_1 nor
-        # T_1^{in} nor T_1^{out} is equal to the number of predecessors of m
-        # that are neither in core_2 nor T_2^{in} nor T_2^{out}.
-        num1 = 0
-        for predecessor in self.G1.pred[G1_node]:
-            if (predecessor not in self.in_1) and (predecessor not in self.out_1):
-                num1 += 1
-        num2 = 0
-        for predecessor in self.G2.pred[G2_node]:
-            if (predecessor not in self.in_2) and (predecessor not in self.out_2):
-                num2 += 1
-        if self.test == 'graph':
-            if not (num1 == num2):
-                return False
-        else: # self.test == 'subgraph'
-            if not (num1 >= num2):
-                return False
-
-        # The number of successors of n that are neither in the core_1 nor
-        # T_1^{in} nor T_1^{out} is equal to the number of successors of m
-        # that are neither in core_2 nor T_2^{in} nor T_2^{out}.
-        num1 = 0
-        for successor in self.G1[G1_node]:
-            if (successor not in self.in_1) and (successor not in self.out_1):
-                num1 += 1
-        num2 = 0
-        for successor in self.G2[G2_node]:
-            if (successor not in self.in_2) and (successor not in self.out_2):
-                num2 += 1
-        if self.test == 'graph':
-            if not (num1 == num2):
-                return False
-        else: # self.test == 'subgraph'
-            if not (num1 >= num2):
-                return False
-
-        # Otherwise, this node pair is syntactically feasible!
-        return True
-
-
-class GMState(object):
-    """Internal representation of state for the GraphMatcher class.
-
-    This class is used internally by the GraphMatcher class.  It is used
-    only to store state specific data. There will be at most G2.order() of
-    these objects in memory at a time, due to the depth-first search
-    strategy employed by the VF2 algorithm.
-    """
-    def __init__(self, GM, G1_node=None, G2_node=None):
-        """Initializes GMState object.
-
-        Pass in the GraphMatcher to which this GMState belongs and the
-        new node pair that will be added to the GraphMatcher's current
-        isomorphism mapping.
-        """
-        self.GM = GM
-
-        # Initialize the last stored node pair.
-        self.G1_node = None
-        self.G2_node = None
-        self.depth = len(GM.core_1)
-
-        if G1_node is None or G2_node is None:
-            # Then we reset the class variables
-            GM.core_1 = {}
-            GM.core_2 = {}
-            GM.inout_1 = {}
-            GM.inout_2 = {}
-
-        # Watch out! G1_node == 0 should evaluate to True.
-        if G1_node is not None and G2_node is not None:
-            # Add the node pair to the isomorphism mapping.
-            GM.core_1[G1_node] = G2_node
-            GM.core_2[G2_node] = G1_node
-
-            # Store the node that was added last.
-            self.G1_node = G1_node
-            self.G2_node = G2_node
-
-            # Now we must update the other two vectors.
-            # We will add only if it is not in there already!
-            self.depth = len(GM.core_1)
-
-            # First we add the new nodes...
-            if G1_node not in GM.inout_1:
-                GM.inout_1[G1_node] = self.depth
-            if G2_node not in GM.inout_2:
-                    GM.inout_2[G2_node] = self.depth
-
-            # Now we add every other node...
-
-            # Updates for T_1^{inout}
-            new_nodes = set([])
-            for node in GM.core_1:
-                new_nodes.update([neighbor for neighbor in GM.G1[node] if neighbor not in GM.core_1])
-            for node in new_nodes:
-                if node not in GM.inout_1:
-                    GM.inout_1[node] = self.depth
-
-            # Updates for T_2^{inout}
-            new_nodes = set([])
-            for node in GM.core_2:
-                new_nodes.update([neighbor for neighbor in GM.G2[node] if neighbor not in GM.core_2])
-            for node in new_nodes:
-                if node not in GM.inout_2:
-                    GM.inout_2[node] = self.depth
-
-    def restore(self):
-        """Deletes the GMState object and restores the class variables."""
-        # First we remove the node that was added from the core vectors.
-        # Watch out! G1_node == 0 should evaluate to True.
-        if self.G1_node is not None and self.G2_node is not None:
-            del self.GM.core_1[self.G1_node]
-            del self.GM.core_2[self.G2_node]
-
-        # Now we revert the other two vectors.
-        # Thus, we delete all entries which have this depth level.
-        for vector in (self.GM.inout_1, self.GM.inout_2):
-            for node in list(vector.keys()):
-                if vector[node] == self.depth:
-                    del vector[node]
-
-
-class DiGMState(object):
-    """Internal representation of state for the DiGraphMatcher class.
-
-    This class is used internally by the DiGraphMatcher class.  It is used
-    only to store state specific data. There will be at most G2.order() of
-    these objects in memory at a time, due to the depth-first search
-    strategy employed by the VF2 algorithm.
-
-    """
-    def __init__(self, GM, G1_node=None, G2_node=None):
-        """Initializes DiGMState object.
-
-        Pass in the DiGraphMatcher to which this DiGMState belongs and the
-        new node pair that will be added to the GraphMatcher's current
-        isomorphism mapping.
-        """
-        self.GM = GM
-
-        # Initialize the last stored node pair.
-        self.G1_node = None
-        self.G2_node = None
-        self.depth = len(GM.core_1)
-
-        if G1_node is None or G2_node is None:
-            # Then we reset the class variables
-            GM.core_1 = {}
-            GM.core_2 = {}
-            GM.in_1 = {}
-            GM.in_2 = {}
-            GM.out_1 = {}
-            GM.out_2 = {}
-
-        # Watch out! G1_node == 0 should evaluate to True.
-        if G1_node is not None and G2_node is not None:
-            # Add the node pair to the isomorphism mapping.
-            GM.core_1[G1_node] = G2_node
-            GM.core_2[G2_node] = G1_node
-
-            # Store the node that was added last.
-            self.G1_node = G1_node
-            self.G2_node = G2_node
-
-            # Now we must update the other four vectors.
-            # We will add only if it is not in there already!
-            self.depth = len(GM.core_1)
-
-            # First we add the new nodes...
-            for vector in (GM.in_1, GM.out_1):
-                if G1_node not in vector:
-                    vector[G1_node] = self.depth
-            for vector in (GM.in_2, GM.out_2):
-                if G2_node not in vector:
-                    vector[G2_node] = self.depth
-
-            # Now we add every other node...
-
-            # Updates for T_1^{in}
-            new_nodes = set([])
-            for node in GM.core_1:
-                new_nodes.update([predecessor for predecessor in GM.G1.predecessors(node) if predecessor not in GM.core_1])
-            for node in new_nodes:
-                if node not in GM.in_1:
-                    GM.in_1[node] = self.depth
-
-            # Updates for T_2^{in}
-            new_nodes = set([])
-            for node in GM.core_2:
-                new_nodes.update([predecessor for predecessor in GM.G2.predecessors(node) if predecessor not in GM.core_2])
-            for node in new_nodes:
-                if node not in GM.in_2:
-                    GM.in_2[node] = self.depth
-
-            # Updates for T_1^{out}
-            new_nodes = set([])
-            for node in GM.core_1:
-                new_nodes.update([successor for successor in GM.G1.successors(node) if successor not in GM.core_1])
-            for node in new_nodes:
-                if node not in GM.out_1:
-                    GM.out_1[node] = self.depth
-
-            # Updates for T_2^{out}
-            new_nodes = set([])
-            for node in GM.core_2:
-                new_nodes.update([successor for successor in GM.G2.successors(node) if successor not in GM.core_2])
-            for node in new_nodes:
-                if node not in GM.out_2:
-                    GM.out_2[node] = self.depth
-
-    def restore(self):
-        """Deletes the DiGMState object and restores the class variables."""
-
-        # First we remove the node that was added from the core vectors.
-        # Watch out! G1_node == 0 should evaluate to True.
-        if self.G1_node is not None and self.G2_node is not None:
-            del self.GM.core_1[self.G1_node]
-            del self.GM.core_2[self.G2_node]
-
-        # Now we revert the other four vectors.
-        # Thus, we delete all entries which have this depth level.
-        for vector in (self.GM.in_1, self.GM.in_2, self.GM.out_1, self.GM.out_2):
-            for node in list(vector.keys()):
-                if vector[node] == self.depth:
-                    del vector[node]
-
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/isomorphism/matchhelpers.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/isomorphism/matchhelpers.py
deleted file mode 100644
index f9af38b..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/isomorphism/matchhelpers.py
+++ /dev/null
@@ -1,346 +0,0 @@
-"""Functions which help end users define customize node_match and
-edge_match functions to use during isomorphism checks.
-"""
-from itertools import permutations
-import types
-import networkx as nx
-
-__all__ = ['categorical_node_match',
-           'categorical_edge_match',
-           'categorical_multiedge_match',
-           'numerical_node_match',
-           'numerical_edge_match',
-           'numerical_multiedge_match',
-           'generic_node_match',
-           'generic_edge_match',
-           'generic_multiedge_match',
-          ]
-
-
-def copyfunc(f, name=None):
-    """Returns a deepcopy of a function."""
-    try:
-        return types.FunctionType(f.func_code, f.func_globals, name or f.name,
-                                  f.func_defaults, f.func_closure)
-    except AttributeError:
-        return types.FunctionType(f.__code__, f.__globals__, name or f.name,
-                                  f.__defaults__, f.__closure__)
-
-def allclose(x, y, rtol=1.0000000000000001e-05, atol=1e-08):
-    """Returns True if x and y are sufficiently close, elementwise.
-
-    Parameters
-    ----------
-    rtol : float
-        The relative error tolerance.
-    atol : float
-        The absolute error tolerance.
-
-    """
-    # assume finite weights, see numpy.allclose() for reference
-    for xi, yi in zip(x,y):
-        if not ( abs(xi-yi) <= atol + rtol * abs(yi) ):
-            return False
-    return True
-
-
-def close(x, y, rtol=1.0000000000000001e-05, atol=1e-08):
-    """Returns True if x and y are sufficiently close.
-
-    Parameters
-    ----------
-    rtol : float
-        The relative error tolerance.
-    atol : float
-        The absolute error tolerance.
-
-    """
-    # assume finite weights, see numpy.allclose() for reference
-    return abs(x-y) <= atol + rtol * abs(y)
-
-
-categorical_doc = """
-Returns a comparison function for a categorical node attribute.
-
-The value(s) of the attr(s) must be hashable and comparable via the ==
-operator since they are placed into a set([]) object.  If the sets from
-G1 and G2 are the same, then the constructed function returns True.
-
-Parameters
-----------
-attr : string | list
-    The categorical node attribute to compare, or a list of categorical
-    node attributes to compare.
-default : value | list
-    The default value for the categorical node attribute, or a list of
-    default values for the categorical node attributes.
-
-Returns
--------
-match : function
-    The customized, categorical `node_match` function.
-
-Examples
---------
->>> import networkx.algorithms.isomorphism as iso
->>> nm = iso.categorical_node_match('size', 1)
->>> nm = iso.categorical_node_match(['color', 'size'], ['red', 2])
-
-"""
-
-def categorical_node_match(attr, default):
-    if nx.utils.is_string_like(attr):
-        def match(data1, data2):
-            return data1.get(attr, default) == data2.get(attr, default)
-    else:
-        attrs = list(zip(attr, default)) # Python 3
-        def match(data1, data2):
-            values1 = set([data1.get(attr, d) for attr, d in attrs])
-            values2 = set([data2.get(attr, d) for attr, d in attrs])
-            return values1 == values2
-    return match
-
-categorical_edge_match = copyfunc(categorical_node_match, 'categorical_edge_match')
-
-def categorical_multiedge_match(attr, default):
-    if nx.utils.is_string_like(attr):
-        def match(datasets1, datasets2):
-            values1 = set([data.get(attr, default) for data in datasets1.values()])
-            values2 = set([data.get(attr, default) for data in datasets2.values()])
-            return values1 == values2
-    else:
-        attrs = list(zip(attr, default)) # Python 3
-        def match(datasets1, datasets2):
-            values1 = set([])
-            for data1 in datasets1.values():
-                x = tuple( data1.get(attr, d) for attr, d in attrs )
-                values1.add(x)
-            values2 = set([])
-            for data2 in datasets2.values():
-                x = tuple( data2.get(attr, d) for attr, d in attrs )
-                values2.add(x)
-            return values1 == values2
-    return match
-
-# Docstrings for categorical functions.
-categorical_node_match.__doc__ = categorical_doc
-categorical_edge_match.__doc__ = categorical_doc.replace('node', 'edge')
-tmpdoc = categorical_doc.replace('node', 'edge')
-tmpdoc = tmpdoc.replace('categorical_edge_match', 'categorical_multiedge_match')
-categorical_multiedge_match.__doc__ = tmpdoc
-
-
-numerical_doc = """
-Returns a comparison function for a numerical node attribute.
-
-The value(s) of the attr(s) must be numerical and sortable.  If the
-sorted list of values from G1 and G2 are the same within some
-tolerance, then the constructed function returns True.
-
-Parameters
-----------
-attr : string | list
-    The numerical node attribute to compare, or a list of numerical
-    node attributes to compare.
-default : value | list
-    The default value for the numerical node attribute, or a list of
-    default values for the numerical node attributes.
-rtol : float
-    The relative error tolerance.
-atol : float
-    The absolute error tolerance.
-
-Returns
--------
-match : function
-    The customized, numerical `node_match` function.
-
-Examples
---------
->>> import networkx.algorithms.isomorphism as iso
->>> nm = iso.numerical_node_match('weight', 1.0)
->>> nm = iso.numerical_node_match(['weight', 'linewidth'], [.25, .5])
-
-"""
-
-def numerical_node_match(attr, default, rtol=1.0000000000000001e-05, atol=1e-08):
-    if nx.utils.is_string_like(attr):
-        def match(data1, data2):
-            return close(data1.get(attr, default),
-                         data2.get(attr, default),
-                         rtol=rtol, atol=atol)
-    else:
-        attrs = list(zip(attr, default)) # Python 3
-        def match(data1, data2):
-            values1 = [data1.get(attr, d) for attr, d in attrs]
-            values2 = [data2.get(attr, d) for attr, d in attrs]
-            return allclose(values1, values2, rtol=rtol, atol=atol)
-    return match
-
-numerical_edge_match = copyfunc(numerical_node_match, 'numerical_edge_match')
-
-def numerical_multiedge_match(attr, default, rtol=1.0000000000000001e-05, atol=1e-08):
-    if nx.utils.is_string_like(attr):
-        def match(datasets1, datasets2):
-            values1 = sorted([data.get(attr, default) for data in datasets1.values()])
-            values2 = sorted([data.get(attr, default) for data in datasets2.values()])
-            return allclose(values1, values2, rtol=rtol, atol=atol)
-    else:
-        attrs = list(zip(attr, default))  # Python 3
-        def match(datasets1, datasets2):
-            values1 = []
-            for data1 in datasets1.values():
-                x = tuple( data1.get(attr, d) for attr, d in attrs )
-                values1.append(x)
-            values2 = []
-            for data2 in datasets2.values():
-                x = tuple( data2.get(attr, d) for attr, d in attrs )
-                values2.append(x)
-            values1.sort()
-            values2.sort()
-            for xi, yi in zip(values1, values2):
-                if not allclose(xi, yi, rtol=rtol, atol=atol):
-                    return False
-            else:
-                return True
-    return match
-
-# Docstrings for numerical functions.
-numerical_node_match.__doc__ = numerical_doc
-numerical_edge_match.__doc__ = numerical_doc.replace('node', 'edge')
-tmpdoc = numerical_doc.replace('node', 'edge')
-tmpdoc = tmpdoc.replace('numerical_edge_match', 'numerical_multiedge_match')
-numerical_multiedge_match.__doc__ = tmpdoc
-
-
-generic_doc = """
-Returns a comparison function for a generic attribute.
-
-The value(s) of the attr(s) are compared using the specified
-operators. If all the attributes are equal, then the constructed
-function returns True.
-
-Parameters
-----------
-attr : string | list
-    The node attribute to compare, or a list of node attributes
-    to compare.
-default : value | list
-    The default value for the node attribute, or a list of
-    default values for the node attributes.
-op : callable | list
-    The operator to use when comparing attribute values, or a list
-    of operators to use when comparing values for each attribute.
-
-Returns
--------
-match : function
-    The customized, generic `node_match` function.
-
-Examples
---------
->>> from operator import eq
->>> from networkx.algorithms.isomorphism.matchhelpers import close
->>> from networkx.algorithms.isomorphism import generic_node_match
->>> nm = generic_node_match('weight', 1.0, close)
->>> nm = generic_node_match('color', 'red', eq)
->>> nm = generic_node_match(['weight', 'color'], [1.0, 'red'], [close, eq])
-
-"""
-
-def generic_node_match(attr, default, op):
-    if nx.utils.is_string_like(attr):
-        def match(data1, data2):
-            return op(data1.get(attr, default), data2.get(attr, default))
-    else:
-        attrs = list(zip(attr, default, op)) # Python 3
-        def match(data1, data2):
-            for attr, d, operator in attrs:
-                if not operator(data1.get(attr, d), data2.get(attr, d)):
-                    return False
-            else:
-                return True
-    return match
-
-generic_edge_match = copyfunc(generic_node_match, 'generic_edge_match')
-
-def generic_multiedge_match(attr, default, op):
-    """Returns a comparison function for a generic attribute.
-
-    The value(s) of the attr(s) are compared using the specified
-    operators. If all the attributes are equal, then the constructed
-    function returns True. Potentially, the constructed edge_match
-    function can be slow since it must verify that no isomorphism
-    exists between the multiedges before it returns False.
-
-    Parameters
-    ----------
-    attr : string | list
-        The edge attribute to compare, or a list of node attributes
-        to compare.
-    default : value | list
-        The default value for the edge attribute, or a list of
-        default values for the dgeattributes.
-    op : callable | list
-        The operator to use when comparing attribute values, or a list
-        of operators to use when comparing values for each attribute.
-
-    Returns
-    -------
-    match : function
-        The customized, generic `edge_match` function.
-
-    Examples
-    --------
-    >>> from operator import eq
-    >>> from networkx.algorithms.isomorphism.matchhelpers import close
-    >>> from networkx.algorithms.isomorphism import generic_node_match
-    >>> nm = generic_node_match('weight', 1.0, close)
-    >>> nm = generic_node_match('color', 'red', eq)
-    >>> nm = generic_node_match(['weight', 'color'],
-    ...                         [1.0, 'red'],
-    ...                         [close, eq])
-    ...
-
-    """
-
-    # This is slow, but generic.
-    # We must test every possible isomorphism between the edges.
-    if nx.utils.is_string_like(attr):
-        def match(datasets1, datasets2):
-            values1 = [data.get(attr, default) for data in datasets1.values()]
-            values2 = [data.get(attr, default) for data in datasets2.values()]
-            for vals2 in permutations(values2):
-                for xi, yi in zip(values1, vals2):
-                    if not op(xi, yi):
-                        # This is not an isomorphism, go to next permutation.
-                        break
-                else:
-                    # Then we found an isomorphism.
-                    return True
-            else:
-                # Then there are no isomorphisms between the multiedges.
-                return False
-    else:
-        attrs = list(zip(attr, default)) # Python 3
-        def match(datasets1, datasets2):
-            values1 = []
-            for data1 in datasets1.values():
-                x = tuple( data1.get(attr, d) for attr, d in attrs )
-                values1.append(x)
-            values2 = []
-            for data2 in datasets2.values():
-                x = tuple( data2.get(attr, d) for attr, d in attrs )
-                values2.append(x)
-            for vals2 in permutations(values2):
-                for xi, yi, operator in zip(values1, vals2, op):
-                    if not operator(xi, yi):
-                        return False
-            else:
-                return True
-    return match
-
-# Docstrings for numerical functions.
-generic_node_match.__doc__ = generic_doc
-generic_edge_match.__doc__ = generic_doc.replace('node', 'edge')
-
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/isomorphism/tests/iso_r01_s80.A99 b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/isomorphism/tests/iso_r01_s80.A99
deleted file mode 100644
index dac54f0..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/isomorphism/tests/iso_r01_s80.A99
+++ /dev/null
Binary files differ
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/isomorphism/tests/iso_r01_s80.B99 b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/isomorphism/tests/iso_r01_s80.B99
deleted file mode 100644
index 6c6af68..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/isomorphism/tests/iso_r01_s80.B99
+++ /dev/null
Binary files differ
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/isomorphism/tests/si2_b06_m200.A99 b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/isomorphism/tests/si2_b06_m200.A99
deleted file mode 100644
index 60c3a3c..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/isomorphism/tests/si2_b06_m200.A99
+++ /dev/null
Binary files differ
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/isomorphism/tests/si2_b06_m200.B99 b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/isomorphism/tests/si2_b06_m200.B99
deleted file mode 100644
index 0236872..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/isomorphism/tests/si2_b06_m200.B99
+++ /dev/null
Binary files differ
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/isomorphism/tests/test_isomorphism.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/isomorphism/tests/test_isomorphism.py
deleted file mode 100644
index b9c7e63..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/isomorphism/tests/test_isomorphism.py
+++ /dev/null
@@ -1,32 +0,0 @@
-#!/usr/bin/env python
-from nose.tools import *
-import networkx as nx
-from networkx.algorithms import isomorphism as iso
-
-class TestIsomorph:
-
-    def setUp(self):
-        self.G1=nx.Graph()
-        self.G2=nx.Graph()
-        self.G3=nx.Graph()
-        self.G4=nx.Graph()
-        self.G1.add_edges_from([ [1,2],[1,3],[1,5],[2,3] ])
-        self.G2.add_edges_from([ [10,20],[20,30],[10,30],[10,50] ])
-        self.G3.add_edges_from([ [1,2],[1,3],[1,5],[2,5] ])
-        self.G4.add_edges_from([ [1,2],[1,3],[1,5],[2,4] ])
-
-    def test_could_be_isomorphic(self):
-       assert_true(iso.could_be_isomorphic(self.G1,self.G2))
-       assert_true(iso.could_be_isomorphic(self.G1,self.G3))
-       assert_false(iso.could_be_isomorphic(self.G1,self.G4))
-       assert_true(iso.could_be_isomorphic(self.G3,self.G2))
-
-    def test_fast_could_be_isomorphic(self):
-        assert_true(iso.fast_could_be_isomorphic(self.G3,self.G2))
-
-    def test_faster_could_be_isomorphic(self):
-        assert_true(iso.faster_could_be_isomorphic(self.G3,self.G2))
-
-    def test_is_isomorphic(self):
-        assert_true(iso.is_isomorphic(self.G1,self.G2))
-        assert_false(iso.is_isomorphic(self.G1,self.G4))
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/isomorphism/tests/test_isomorphvf2.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/isomorphism/tests/test_isomorphvf2.py
deleted file mode 100644
index 562d396..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/isomorphism/tests/test_isomorphvf2.py
+++ /dev/null
@@ -1,217 +0,0 @@
-"""
-    Tests for VF2 isomorphism algorithm.
-"""
-
-import os
-import struct
-import random
-
-from nose.tools import assert_true, assert_equal
-import networkx as nx
-from networkx.algorithms import isomorphism as iso
-
-class TestWikipediaExample(object):
-    # Source: http://en.wikipedia.org/wiki/Graph_isomorphism
-
-    # Nodes 'a', 'b', 'c' and 'd' form a column.
-    # Nodes 'g', 'h', 'i' and 'j' form a column.
-    g1edges = [['a','g'], ['a','h'], ['a','i'], 
-               ['b','g'], ['b','h'], ['b','j'], 
-               ['c','g'], ['c','i'], ['c','j'], 
-               ['d','h'], ['d','i'], ['d','j']]
-
-    # Nodes 1,2,3,4 form the clockwise corners of a large square.
-    # Nodes 5,6,7,8 form the clockwise corners of a small square 
-    g2edges = [[1,2], [2,3], [3,4], [4,1], 
-               [5,6], [6,7], [7,8], [8,5], 
-               [1,5], [2,6], [3,7], [4,8]]
-
-    def test_graph(self):
-        g1 = nx.Graph()
-        g2 = nx.Graph()
-        g1.add_edges_from(self.g1edges)
-        g2.add_edges_from(self.g2edges)
-        gm = iso.GraphMatcher(g1,g2)
-        assert_true(gm.is_isomorphic())
-
-        mapping = sorted(gm.mapping.items())
-# this mapping is only one of the possibilies 
-# so this test needs to be reconsidered 
-#        isomap = [('a', 1), ('b', 6), ('c', 3), ('d', 8), 
-#                  ('g', 2), ('h', 5), ('i', 4), ('j', 7)]
-#        assert_equal(mapping, isomap)
-        
-    def test_subgraph(self):
-        g1 = nx.Graph()
-        g2 = nx.Graph()
-        g1.add_edges_from(self.g1edges)
-        g2.add_edges_from(self.g2edges)
-        g3 = g2.subgraph([1,2,3,4])
-        gm = iso.GraphMatcher(g1,g3)
-        assert_true(gm.subgraph_is_isomorphic())
-
-class TestVF2GraphDB(object):
-    # http://amalfi.dis.unina.it/graph/db/
-
-    @staticmethod
-    def create_graph(filename):
-        """Creates a Graph instance from the filename."""
-
-        # The file is assumed to be in the format from the VF2 graph database.
-        # Each file is composed of 16-bit numbers (unsigned short int).
-        # So we will want to read 2 bytes at a time.
-
-        # We can read the number as follows:
-        #   number = struct.unpack('<H', file.read(2))
-        # This says, expect the data in little-endian encoding
-        # as an unsigned short int and unpack 2 bytes from the file.
-
-        fh = open(filename, mode='rb')
-
-        # Grab the number of nodes.
-        # Node numeration is 0-based, so the first node has index 0.
-        nodes = struct.unpack('<H', fh.read(2))[0]
-
-        graph = nx.Graph()
-        for from_node in range(nodes):
-            # Get the number of edges.
-            edges = struct.unpack('<H', fh.read(2))[0]
-            for edge in range(edges):
-                # Get the terminal node.
-                to_node = struct.unpack('<H', fh.read(2))[0]
-                graph.add_edge(from_node, to_node)
-
-        fh.close()
-        return graph
-
-    def test_graph(self):
-        head,tail = os.path.split(__file__)
-        g1 = self.create_graph(os.path.join(head,'iso_r01_s80.A99'))
-        g2 = self.create_graph(os.path.join(head,'iso_r01_s80.B99'))
-        gm = iso.GraphMatcher(g1,g2)
-        assert_true(gm.is_isomorphic())
-
-    def test_subgraph(self):
-        # A is the subgraph
-        # B is the full graph
-        head,tail = os.path.split(__file__)
-        subgraph = self.create_graph(os.path.join(head,'si2_b06_m200.A99'))
-        graph = self.create_graph(os.path.join(head,'si2_b06_m200.B99'))
-        gm = iso.GraphMatcher(graph, subgraph)
-        assert_true(gm.subgraph_is_isomorphic())
-
-def test_graph_atlas():
-    #Atlas = nx.graph_atlas_g()[0:208] # 208, 6 nodes or less
-    Atlas = nx.graph_atlas_g()[0:100]
-    alphabet = list(range(26))
-    for graph in Atlas:
-        nlist = graph.nodes()
-        labels = alphabet[:len(nlist)]
-        for s in range(10):
-            random.shuffle(labels)
-            d = dict(zip(nlist,labels))
-            relabel = nx.relabel_nodes(graph, d)
-            gm = iso.GraphMatcher(graph, relabel)
-            assert_true(gm.is_isomorphic())
-
-def test_multiedge():
-    # Simple test for multigraphs
-    # Need something much more rigorous
-    edges = [(0, 1), (1, 2), (2, 3), (3, 4), (4, 5), 
-             (5, 6), (6, 7), (7, 8), (8, 9), (9, 10), 
-             (10, 11), (10, 11), (11, 12), (11, 12), 
-             (12, 13), (12, 13), (13, 14), (13, 14), 
-             (14, 15), (14, 15), (15, 16), (15, 16), 
-             (16, 17), (16, 17), (17, 18), (17, 18), 
-             (18, 19), (18, 19), (19, 0), (19, 0)]
-    nodes = list(range(20))
-
-    for g1 in [nx.MultiGraph(), nx.MultiDiGraph()]:
-        g1.add_edges_from(edges)
-        for _ in range(10):
-            new_nodes = list(nodes)
-            random.shuffle(new_nodes)
-            d = dict(zip(nodes, new_nodes))
-            g2 = nx.relabel_nodes(g1, d)
-            if not g1.is_directed():
-                gm = iso.GraphMatcher(g1,g2)
-            else:
-                gm = iso.DiGraphMatcher(g1,g2)
-            assert_true(gm.is_isomorphic())
-
-def test_selfloop():
-    # Simple test for graphs with selfloops
-    edges = [(0, 1), (0, 2), (1, 2), (1, 3), (2, 2), 
-             (2, 4), (3, 1), (3, 2), (4, 2), (4, 5), (5, 4)]
-    nodes = list(range(6))
-
-    for g1 in [nx.Graph(), nx.DiGraph()]:
-        g1.add_edges_from(edges)
-        for _ in range(100):
-            new_nodes = list(nodes)
-            random.shuffle(new_nodes)
-            d = dict(zip(nodes, new_nodes))
-            g2 = nx.relabel_nodes(g1, d)
-            if not g1.is_directed():
-                gm = iso.GraphMatcher(g1,g2)
-            else:
-                gm = iso.DiGraphMatcher(g1,g2)
-            assert_true(gm.is_isomorphic())
-
-def test_isomorphism_iter1():
-    # As described in:
-    # http://groups.google.com/group/networkx-discuss/browse_thread/thread/2ff65c67f5e3b99f/d674544ebea359bb?fwc=1
-    g1 = nx.DiGraph()
-    g2 = nx.DiGraph()
-    g3 = nx.DiGraph()
-    g1.add_edge('A','B')
-    g1.add_edge('B','C')
-    g2.add_edge('Y','Z')
-    g3.add_edge('Z','Y')
-    gm12 = iso.DiGraphMatcher(g1,g2)
-    gm13 = iso.DiGraphMatcher(g1,g3)
-    x = list(gm12.subgraph_isomorphisms_iter())
-    y = list(gm13.subgraph_isomorphisms_iter())
-    assert_true({'A':'Y','B':'Z'} in x)
-    assert_true({'B':'Y','C':'Z'} in x)
-    assert_true({'A':'Z','B':'Y'} in y)
-    assert_true({'B':'Z','C':'Y'} in y)
-    assert_equal(len(x),len(y))
-    assert_equal(len(x),2)
-
-def test_isomorphism_iter2():
-    # Path
-    for L in range(2,10):
-        g1 = nx.path_graph(L)
-        gm = iso.GraphMatcher(g1,g1)
-        s = len(list(gm.isomorphisms_iter()))
-        assert_equal(s,2)
-    # Cycle
-    for L in range(3,10):
-        g1 = nx.cycle_graph(L)
-        gm = iso.GraphMatcher(g1,g1)
-        s = len(list(gm.isomorphisms_iter()))
-        assert_equal(s, 2*L)
-
-def test_multiple():
-    # Verify that we can use the graph matcher multiple times
-    edges = [('A','B'),('B','A'),('B','C')]
-    for g1,g2 in [(nx.Graph(),nx.Graph()), (nx.DiGraph(),nx.DiGraph())]:
-        g1.add_edges_from(edges)
-        g2.add_edges_from(edges)
-        g3 = nx.subgraph(g2, ['A','B'])
-        if not g1.is_directed():
-            gmA = iso.GraphMatcher(g1,g2)
-            gmB = iso.GraphMatcher(g1,g3)
-        else:
-            gmA = iso.DiGraphMatcher(g1,g2)
-            gmB = iso.DiGraphMatcher(g1,g3)
-        assert_true(gmA.is_isomorphic())
-        g2.remove_node('C')
-        assert_true(gmA.subgraph_is_isomorphic())
-        assert_true(gmB.subgraph_is_isomorphic())
-#        for m in [gmB.mapping, gmB.mapping]:
-#            assert_true(m['A'] == 'A')
-#            assert_true(m['B'] == 'B')
-#            assert_true('C' not in m)
-
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/isomorphism/tests/test_vf2userfunc.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/isomorphism/tests/test_vf2userfunc.py
deleted file mode 100644
index ca4f6bd..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/isomorphism/tests/test_vf2userfunc.py
+++ /dev/null
@@ -1,192 +0,0 @@
-"""
-    Tests for VF2 isomorphism algorithm for weighted graphs.
-"""
-
-from nose.tools import assert_true, assert_false
-from operator import eq
-
-import networkx as nx
-import networkx.algorithms.isomorphism as iso
-def test_simple():
-    # 16 simple tests
-    w = 'weight'
-    edges = [(0,0,1),(0,0,1.5),(0,1,2),(1,0,3)]
-    for g1 in [nx.Graph(),
-               nx.DiGraph(),
-               nx.MultiGraph(),
-               nx.MultiDiGraph(),
-               ]:
-
-        g1.add_weighted_edges_from(edges)
-        g2 = g1.subgraph(g1.nodes())
-        if g1.is_multigraph():
-            em = iso.numerical_multiedge_match('weight', 1)
-        else:
-            em = iso.numerical_edge_match('weight', 1)
-        assert_true( nx.is_isomorphic(g1,g2,edge_match=em) )
-
-        for mod1, mod2 in [(False, True), (True, False), (True, True)]:
-            # mod1 tests a regular edge
-            # mod2 tests a selfloop
-            if g2.is_multigraph():
-                if mod1:
-                    data1 = {0:{'weight':10}}
-                if mod2:
-                    data2 = {0:{'weight':1},1:{'weight':2.5}}
-            else:
-                if mod1:
-                    data1 = {'weight':10}
-                if mod2:
-                    data2 = {'weight':2.5}
-
-            g2 = g1.subgraph(g1.nodes())
-            if mod1:
-                if not g1.is_directed():
-                    g2.adj[1][0] = data1
-                    g2.adj[0][1] = data1
-                else:
-                    g2.succ[1][0] = data1
-                    g2.pred[0][1] = data1
-            if mod2:
-                if not g1.is_directed():
-                    g2.adj[0][0] = data2
-                else:
-                    g2.succ[0][0] = data2
-                    g2.pred[0][0] = data2
-
-            assert_false(nx.is_isomorphic(g1,g2,edge_match=em))
-
-def test_weightkey():
-    g1 = nx.DiGraph()
-    g2 = nx.DiGraph()
-
-    g1.add_edge('A','B', weight=1)
-    g2.add_edge('C','D', weight=0)
-
-    assert_true(  nx.is_isomorphic(g1, g2) )
-    em = iso.numerical_edge_match('nonexistent attribute', 1)
-    assert_true(  nx.is_isomorphic(g1, g2, edge_match=em) )
-    em = iso.numerical_edge_match('weight', 1)
-    assert_false( nx.is_isomorphic(g1, g2, edge_match=em) )
-
-    g2 = nx.DiGraph()
-    g2.add_edge('C','D')
-    assert_true( nx.is_isomorphic(g1, g2, edge_match=em) )
-
-class TestNodeMatch_Graph(object):
-    def setUp(self):
-        self.g1 = nx.Graph()
-        self.g2 = nx.Graph()
-        self.build()
-
-    def build(self):
-
-        self.nm = iso.categorical_node_match('color', '')
-        self.em = iso.numerical_edge_match('weight', 1)
-
-        self.g1.add_node('A', color='red')
-        self.g2.add_node('C', color='blue')
-
-        self.g1.add_edge('A','B', weight=1)
-        self.g2.add_edge('C','D', weight=1)
-
-    def test_noweight_nocolor(self):
-        assert_true(  nx.is_isomorphic(self.g1, self.g2) )
-
-    def test_color1(self):
-        assert_false(  nx.is_isomorphic(self.g1, self.g2, node_match=self.nm) )
-
-    def test_color2(self):
-        self.g1.node['A']['color'] = 'blue'
-        assert_true(  nx.is_isomorphic(self.g1, self.g2, node_match=self.nm) )
-
-    def test_weight1(self):
-        assert_true(  nx.is_isomorphic(self.g1, self.g2, edge_match=self.em) )
-
-    def test_weight2(self):
-        self.g1.add_edge('A', 'B', weight=2)
-        assert_false(  nx.is_isomorphic(self.g1, self.g2, edge_match=self.em) )
-
-    def test_colorsandweights1(self):
-        iso = nx.is_isomorphic(self.g1, self.g2,
-                               node_match=self.nm, edge_match=self.em)
-        assert_false(iso)
-
-    def test_colorsandweights2(self):
-        self.g1.node['A']['color'] = 'blue'
-        iso = nx.is_isomorphic(self.g1, self.g2,
-                               node_match=self.nm, edge_match=self.em)
-        assert_true(iso)
-
-    def test_colorsandweights3(self):
-        # make the weights disagree
-        self.g1.add_edge('A', 'B', weight=2)
-        assert_false(  nx.is_isomorphic(self.g1, self.g2,
-                                        node_match=self.nm, edge_match=self.em) )
-
-class TestEdgeMatch_MultiGraph(object):
-    def setUp(self):
-        self.g1 = nx.MultiGraph()
-        self.g2 = nx.MultiGraph()
-        self.GM = iso.MultiGraphMatcher
-        self.build()
-
-    def build(self):
-        g1 = self.g1
-        g2 = self.g2
-
-        # We will assume integer weights only.
-        g1.add_edge('A', 'B', color='green', weight=0, size=.5)
-        g1.add_edge('A', 'B', color='red', weight=1, size=.35)
-        g1.add_edge('A', 'B', color='red', weight=2, size=.65)
-
-        g2.add_edge('C', 'D', color='green', weight=1, size=.5)
-        g2.add_edge('C', 'D', color='red', weight=0, size=.45)
-        g2.add_edge('C', 'D', color='red', weight=2, size=.65)
-
-        if g1.is_multigraph():
-            self.em = iso.numerical_multiedge_match('weight', 1)
-            self.emc = iso.categorical_multiedge_match('color', '')
-            self.emcm = iso.categorical_multiedge_match(['color', 'weight'], ['', 1])
-            self.emg1 = iso.generic_multiedge_match('color', 'red', eq)
-            self.emg2 = iso.generic_multiedge_match(['color', 'weight', 'size'], ['red', 1, .5], [eq, eq, iso.matchhelpers.close])
-        else:
-            self.em = iso.numerical_edge_match('weight', 1)
-            self.emc = iso.categorical_edge_match('color', '')
-            self.emcm = iso.categorical_edge_match(['color', 'weight'], ['', 1])
-            self.emg1 = iso.generic_multiedge_match('color', 'red', eq)
-            self.emg2 = iso.generic_edge_match(['color', 'weight', 'size'], ['red', 1, .5], [eq, eq, iso.matchhelpers.close])
-
-    def test_weights_only(self):
-        assert_true( nx.is_isomorphic(self.g1, self.g2, edge_match=self.em) )
-
-    def test_colors_only(self):
-        gm = self.GM(self.g1, self.g2, edge_match=self.emc)
-        assert_true( gm.is_isomorphic() )
-
-    def test_colorsandweights(self):
-        gm = self.GM(self.g1, self.g2, edge_match=self.emcm)
-        assert_false( gm.is_isomorphic() )
-
-    def test_generic1(self):
-        gm = self.GM(self.g1, self.g2, edge_match=self.emg1)
-        assert_true( gm.is_isomorphic() )
-
-    def test_generic2(self):
-        gm = self.GM(self.g1, self.g2, edge_match=self.emg2)
-        assert_false( gm.is_isomorphic() )
-
-
-class TestEdgeMatch_DiGraph(TestNodeMatch_Graph):
-    def setUp(self):
-        self.g1 = nx.DiGraph()
-        self.g2 = nx.DiGraph()
-        self.build()
-
-class TestEdgeMatch_MultiDiGraph(TestEdgeMatch_MultiGraph):
-    def setUp(self):
-        self.g1 = nx.MultiDiGraph()
-        self.g2 = nx.MultiDiGraph()
-        self.GM = iso.MultiDiGraphMatcher
-        self.build()
-
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/isomorphism/vf2userfunc.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/isomorphism/vf2userfunc.py
deleted file mode 100644
index 64685c7..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/isomorphism/vf2userfunc.py
+++ /dev/null
@@ -1,198 +0,0 @@
-"""
-    Module to simplify the specification of user-defined equality functions for
-    node and edge attributes during isomorphism checks.
-
-    During the construction of an isomorphism, the algorithm considers two
-    candidate nodes n1 in G1 and n2 in G2.  The graphs G1 and G2 are then
-    compared with respect to properties involving n1 and n2, and if the outcome
-    is good, then the candidate nodes are considered isomorphic. NetworkX
-    provides a simple mechanism for users to extend the comparisons to include
-    node and edge attributes.
-
-    Node attributes are handled by the node_match keyword. When considering
-    n1 and n2, the algorithm passes their node attribute dictionaries to
-    node_match, and if it returns False, then n1 and n2 cannot be
-    considered to be isomorphic.
-
-    Edge attributes are handled by the edge_match keyword. When considering
-    n1 and n2, the algorithm must verify that outgoing edges from n1 are
-    commensurate with the outgoing edges for n2. If the graph is directed,
-    then a similar check is also performed for incoming edges.
-
-    Focusing only on outgoing edges, we consider pairs of nodes (n1, v1) from
-    G1 and (n2, v2) from G2. For graphs and digraphs, there is only one edge
-    between (n1, v1) and only one edge between (n2, v2). Those edge attribute
-    dictionaries are passed to edge_match, and if it returns False, then
-    n1 and n2 cannot be considered isomorphic. For multigraphs and
-    multidigraphs, there can be multiple edges between (n1, v1) and also
-    multiple edges between (n2, v2).  Now, there must exist an isomorphism
-    from "all the edges between (n1, v1)" to "all the edges between (n2, v2)".
-    So, all of the edge attribute dictionaries are passed to edge_match, and
-    it must determine if there is an isomorphism between the two sets of edges.
-"""
-
-import networkx as nx
-
-from . import isomorphvf2 as vf2
-
-__all__ = ['GraphMatcher',
-           'DiGraphMatcher',
-           'MultiGraphMatcher',
-           'MultiDiGraphMatcher',
-          ]
-
-
-def _semantic_feasibility(self, G1_node, G2_node):
-    """Returns True if mapping G1_node to G2_node is semantically feasible.
-    """
-    # Make sure the nodes match
-    if self.node_match is not None:
-        nm = self.node_match(self.G1.node[G1_node], self.G2.node[G2_node])
-        if not nm:
-            return False
-
-    # Make sure the edges match
-    if self.edge_match is not None:
-
-        # Cached lookups
-        G1_adj = self.G1_adj
-        G2_adj = self.G2_adj
-        core_1 = self.core_1
-        edge_match = self.edge_match
-
-        for neighbor in G1_adj[G1_node]:
-            # G1_node is not in core_1, so we must handle R_self separately
-            if neighbor == G1_node:
-                if not edge_match(G1_adj[G1_node][G1_node],
-                                  G2_adj[G2_node][G2_node]):
-                    return False
-            elif neighbor in core_1:
-                if not edge_match(G1_adj[G1_node][neighbor],
-                                  G2_adj[G2_node][core_1[neighbor]]):
-                    return False
-        # syntactic check has already verified that neighbors are symmetric
-
-    return True
-
-
-class GraphMatcher(vf2.GraphMatcher):
-    """VF2 isomorphism checker for undirected graphs.
-    """
-    def __init__(self, G1, G2, node_match=None, edge_match=None):
-        """Initialize graph matcher.
-
-        Parameters
-        ----------
-        G1, G2: graph
-            The graphs to be tested.
-
-        node_match: callable
-            A function that returns True iff node n1 in G1 and n2 in G2
-            should be considered equal during the isomorphism test. The
-            function will be called like::
-
-               node_match(G1.node[n1], G2.node[n2])
-
-            That is, the function will receive the node attribute dictionaries
-            of the nodes under consideration. If None, then no attributes are
-            considered when testing for an isomorphism.
-
-        edge_match: callable
-            A function that returns True iff the edge attribute dictionary for
-            the pair of nodes (u1, v1) in G1 and (u2, v2) in G2 should be
-            considered equal during the isomorphism test. The function will be
-            called like::
-
-               edge_match(G1[u1][v1], G2[u2][v2])
-
-            That is, the function will receive the edge attribute dictionaries
-            of the edges under consideration. If None, then no attributes are
-            considered when testing for an isomorphism.
-
-        """
-        vf2.GraphMatcher.__init__(self, G1, G2)
-
-        self.node_match = node_match
-        self.edge_match = edge_match
-
-        # These will be modified during checks to minimize code repeat.
-        self.G1_adj = self.G1.adj
-        self.G2_adj = self.G2.adj
-
-    semantic_feasibility = _semantic_feasibility
-
-
-class DiGraphMatcher(vf2.DiGraphMatcher):
-    """VF2 isomorphism checker for directed graphs.
-    """
-    def __init__(self, G1, G2, node_match=None, edge_match=None):
-        """Initialize graph matcher.
-
-        Parameters
-        ----------
-        G1, G2 : graph
-            The graphs to be tested.
-
-        node_match : callable
-            A function that returns True iff node n1 in G1 and n2 in G2
-            should be considered equal during the isomorphism test. The
-            function will be called like::
-
-               node_match(G1.node[n1], G2.node[n2])
-
-            That is, the function will receive the node attribute dictionaries
-            of the nodes under consideration. If None, then no attributes are
-            considered when testing for an isomorphism.
-
-        edge_match : callable
-            A function that returns True iff the edge attribute dictionary for
-            the pair of nodes (u1, v1) in G1 and (u2, v2) in G2 should be
-            considered equal during the isomorphism test. The function will be
-            called like::
-
-               edge_match(G1[u1][v1], G2[u2][v2])
-
-            That is, the function will receive the edge attribute dictionaries
-            of the edges under consideration. If None, then no attributes are
-            considered when testing for an isomorphism.
-
-        """
-        vf2.DiGraphMatcher.__init__(self, G1, G2)
-
-        self.node_match = node_match
-        self.edge_match = edge_match
-
-        # These will be modified during checks to minimize code repeat.
-        self.G1_adj = self.G1.adj
-        self.G2_adj = self.G2.adj
-
-
-    def semantic_feasibility(self, G1_node, G2_node):
-        """Returns True if mapping G1_node to G2_node is semantically feasible."""
-
-        # Test node_match and also test edge_match on successors
-        feasible = _semantic_feasibility(self, G1_node, G2_node)
-        if not feasible:
-            return False
-
-        # Test edge_match on predecessors
-        self.G1_adj = self.G1.pred
-        self.G2_adj = self.G2.pred
-        feasible = _semantic_feasibility(self, G1_node, G2_node)
-        self.G1_adj = self.G1.adj
-        self.G2_adj = self.G2.adj
-
-        return feasible
-
-## The "semantics" of edge_match are different for multi(di)graphs, but
-## the implementation is the same.  So, technically we do not need to
-## provide "multi" versions, but we do so to match NetworkX's base classes.
-
-class MultiGraphMatcher(GraphMatcher):
-    """VF2 isomorphism checker for undirected multigraphs. """
-    pass
-
-class MultiDiGraphMatcher(DiGraphMatcher):
-    """VF2 isomorphism checker for directed multigraphs. """
-    pass
-
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/link_analysis/__init__.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/link_analysis/__init__.py
deleted file mode 100644
index d7e67c3..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/link_analysis/__init__.py
+++ /dev/null
@@ -1,2 +0,0 @@
-from networkx.algorithms.link_analysis.pagerank_alg import *
-from networkx.algorithms.link_analysis.hits_alg import *
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/link_analysis/hits_alg.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/link_analysis/hits_alg.py
deleted file mode 100644
index 5b707d7..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/link_analysis/hits_alg.py
+++ /dev/null
@@ -1,308 +0,0 @@
-"""Hubs and authorities analysis of graph structure.
-"""
-#    Copyright (C) 2008-2012 by
-#    Aric Hagberg <hagberg@lanl.gov>
-#    Dan Schult <dschult@colgate.edu>
-#    Pieter Swart <swart@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-#    NetworkX:http://networkx.lanl.gov/
-import networkx as nx
-from networkx.exception import NetworkXError
-__author__ = """Aric Hagberg (hagberg@lanl.gov)"""
-__all__ = ['hits','hits_numpy','hits_scipy','authority_matrix','hub_matrix']
-
-def hits(G,max_iter=100,tol=1.0e-8,nstart=None,normalized=True):
-    """Return HITS hubs and authorities values for nodes.
-
-    The HITS algorithm computes two numbers for a node.
-    Authorities estimates the node value based on the incoming links.
-    Hubs estimates the node value based on outgoing links.
-
-    Parameters
-    ----------
-    G : graph
-      A NetworkX graph
-
-    max_iter : interger, optional
-      Maximum number of iterations in power method.
-
-    tol : float, optional
-      Error tolerance used to check convergence in power method iteration.
-
-    nstart : dictionary, optional
-      Starting value of each node for power method iteration.
-
-    normalized : bool (default=True)
-       Normalize results by the sum of all of the values.
-
-    Returns
-    -------
-    (hubs,authorities) : two-tuple of dictionaries
-       Two dictionaries keyed by node containing the hub and authority
-       values.
-
-    Examples
-    --------
-    >>> G=nx.path_graph(4)
-    >>> h,a=nx.hits(G)
-
-    Notes
-    -----
-    The eigenvector calculation is done by the power iteration method
-    and has no guarantee of convergence.  The iteration will stop
-    after max_iter iterations or an error tolerance of
-    number_of_nodes(G)*tol has been reached.
-
-    The HITS algorithm was designed for directed graphs but this
-    algorithm does not check if the input graph is directed and will
-    execute on undirected graphs.
-
-    References
-    ----------
-    .. [1] A. Langville and C. Meyer,
-       "A survey of eigenvector methods of web information retrieval."
-       http://citeseer.ist.psu.edu/713792.html
-    .. [2] Jon Kleinberg,
-       Authoritative sources in a hyperlinked environment
-       Journal of the ACM 46 (5): 604-32, 1999.
-       doi:10.1145/324133.324140.
-       http://www.cs.cornell.edu/home/kleinber/auth.pdf.
-    """
-    if type(G) == nx.MultiGraph or type(G) == nx.MultiDiGraph:
-        raise Exception("hits() not defined for graphs with multiedges.")
-    if len(G) == 0:
-        return {},{}
-    # choose fixed starting vector if not given
-    if nstart is None:
-        h=dict.fromkeys(G,1.0/G.number_of_nodes())
-    else:
-        h=nstart
-        # normalize starting vector
-        s=1.0/sum(h.values())
-        for k in h:
-            h[k]*=s
-    i=0
-    while True: # power iteration: make up to max_iter iterations
-        hlast=h
-        h=dict.fromkeys(hlast.keys(),0)
-        a=dict.fromkeys(hlast.keys(),0)
-        # this "matrix multiply" looks odd because it is
-        # doing a left multiply a^T=hlast^T*G
-        for n in h:
-            for nbr in G[n]:
-                a[nbr]+=hlast[n]*G[n][nbr].get('weight',1)
-        # now multiply h=Ga
-        for n in h:
-            for nbr in G[n]:
-                h[n]+=a[nbr]*G[n][nbr].get('weight',1)
-        # normalize vector
-        s=1.0/max(h.values())
-        for n in h: h[n]*=s
-        # normalize vector
-        s=1.0/max(a.values())
-        for n in a: a[n]*=s
-        # check convergence, l1 norm
-        err=sum([abs(h[n]-hlast[n]) for n in h])
-        if err < tol:
-            break
-        if i>max_iter:
-            raise NetworkXError(\
-            "HITS: power iteration failed to converge in %d iterations."%(i+1))
-        i+=1
-    if normalized:
-        s = 1.0/sum(a.values())
-        for n in a:
-            a[n] *= s
-        s = 1.0/sum(h.values())
-        for n in h:
-            h[n] *= s
-    return h,a
-
-def authority_matrix(G,nodelist=None):
-    """Return the HITS authority matrix."""
-    M=nx.to_numpy_matrix(G,nodelist=nodelist)
-    return M.T*M
-
-def hub_matrix(G,nodelist=None):
-    """Return the HITS hub matrix."""
-    M=nx.to_numpy_matrix(G,nodelist=nodelist)
-    return M*M.T
-
-def hits_numpy(G,normalized=True):
-    """Return HITS hubs and authorities values for nodes.
-
-    The HITS algorithm computes two numbers for a node.
-    Authorities estimates the node value based on the incoming links.
-    Hubs estimates the node value based on outgoing links.
-
-    Parameters
-    -----------
-    G : graph
-      A NetworkX graph
-
-    normalized : bool (default=True)
-       Normalize results by the sum of all of the values.
-
-    Returns
-    -------
-    (hubs,authorities) : two-tuple of dictionaries
-       Two dictionaries keyed by node containing the hub and authority
-       values.
-
-    Examples
-    --------
-    >>> G=nx.path_graph(4)
-    >>> h,a=nx.hits(G)
-
-    Notes
-    -----
-    The eigenvector calculation uses NumPy's interface to LAPACK.
-
-    The HITS algorithm was designed for directed graphs but this
-    algorithm does not check if the input graph is directed and will
-    execute on undirected graphs.
-
-    References
-    ----------
-    .. [1] A. Langville and C. Meyer,
-       "A survey of eigenvector methods of web information retrieval."
-       http://citeseer.ist.psu.edu/713792.html
-    .. [2] Jon Kleinberg,
-       Authoritative sources in a hyperlinked environment
-       Journal of the ACM 46 (5): 604-32, 1999.
-       doi:10.1145/324133.324140.
-       http://www.cs.cornell.edu/home/kleinber/auth.pdf.
-    """
-    try:
-        import numpy as np
-    except ImportError:
-        raise ImportError(\
-            "hits_numpy() requires NumPy: http://scipy.org/")
-    if len(G) == 0:
-        return {},{}
-    H=nx.hub_matrix(G,G.nodes())
-    e,ev=np.linalg.eig(H)
-    m=e.argsort()[-1] # index of maximum eigenvalue
-    h=np.array(ev[:,m]).flatten()
-    A=nx.authority_matrix(G,G.nodes())
-    e,ev=np.linalg.eig(A)
-    m=e.argsort()[-1] # index of maximum eigenvalue
-    a=np.array(ev[:,m]).flatten()
-    if normalized:
-        h = h/h.sum()
-        a = a/a.sum()
-    else:
-        h = h/h.max()
-        a = a/a.max()
-    hubs=dict(zip(G.nodes(),map(float,h)))
-    authorities=dict(zip(G.nodes(),map(float,a)))
-    return hubs,authorities
-
-def hits_scipy(G,max_iter=100,tol=1.0e-6,normalized=True):
-    """Return HITS hubs and authorities values for nodes.
-
-    The HITS algorithm computes two numbers for a node.
-    Authorities estimates the node value based on the incoming links.
-    Hubs estimates the node value based on outgoing links.
-
-    Parameters
-    -----------
-    G : graph
-      A NetworkX graph
-
-    max_iter : interger, optional
-      Maximum number of iterations in power method.
-
-    tol : float, optional
-      Error tolerance used to check convergence in power method iteration.
-
-    nstart : dictionary, optional
-      Starting value of each node for power method iteration.
-
-    normalized : bool (default=True)
-       Normalize results by the sum of all of the values.
-
-    Returns
-    -------
-    (hubs,authorities) : two-tuple of dictionaries
-       Two dictionaries keyed by node containing the hub and authority
-       values.
-
-    Examples
-    --------
-    >>> G=nx.path_graph(4)
-    >>> h,a=nx.hits(G)
-
-    Notes
-    -----
-    This implementation uses SciPy sparse matrices.
-
-    The eigenvector calculation is done by the power iteration method
-    and has no guarantee of convergence.  The iteration will stop
-    after max_iter iterations or an error tolerance of
-    number_of_nodes(G)*tol has been reached.
-
-    The HITS algorithm was designed for directed graphs but this
-    algorithm does not check if the input graph is directed and will
-    execute on undirected graphs.
-
-    References
-    ----------
-    .. [1] A. Langville and C. Meyer,
-       "A survey of eigenvector methods of web information retrieval."
-       http://citeseer.ist.psu.edu/713792.html
-    .. [2] Jon Kleinberg,
-       Authoritative sources in a hyperlinked environment
-       Journal of the ACM 46 (5): 604-632, 1999.
-       doi:10.1145/324133.324140.
-       http://www.cs.cornell.edu/home/kleinber/auth.pdf.
-    """
-    try:
-        import scipy.sparse
-        import numpy as np
-    except ImportError:
-        raise ImportError(\
-            "hits_scipy() requires SciPy: http://scipy.org/")
-    if len(G) == 0:
-        return {},{}
-    M=nx.to_scipy_sparse_matrix(G,nodelist=G.nodes())
-    (n,m)=M.shape # should be square
-    A=M.T*M # authority matrix
-    x=scipy.ones((n,1))/n  # initial guess
-    # power iteration on authority matrix
-    i=0
-    while True:
-        xlast=x
-        x=A*x
-        x=x/x.max()
-        # check convergence, l1 norm
-        err=scipy.absolute(x-xlast).sum()
-        if err < tol:
-            break
-        if i>max_iter:
-            raise NetworkXError(\
-            "HITS: power iteration failed to converge in %d iterations."%(i+1))
-        i+=1
-
-    a=np.asarray(x).flatten()
-    # h=M*a
-    h=np.asarray(M*a).flatten()
-    if normalized:
-        h = h/h.sum()
-        a = a/a.sum()
-    hubs=dict(zip(G.nodes(),map(float,h)))
-    authorities=dict(zip(G.nodes(),map(float,a)))
-    return hubs,authorities
-
-# fixture for nose tests
-def setup_module(module):
-    from nose import SkipTest
-    try:
-        import numpy
-    except:
-        raise SkipTest("NumPy not available")
-    try:
-        import scipy
-    except:
-        raise SkipTest("SciPy not available")
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/link_analysis/pagerank_alg.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/link_analysis/pagerank_alg.py
deleted file mode 100644
index 244350a..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/link_analysis/pagerank_alg.py
+++ /dev/null
@@ -1,399 +0,0 @@
-"""PageRank analysis of graph structure. """
-#    Copyright (C) 2004-2011 by
-#    Aric Hagberg <hagberg@lanl.gov>
-#    Dan Schult <dschult@colgate.edu>
-#    Pieter Swart <swart@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-#    NetworkX:http://networkx.lanl.gov/
-import networkx as nx
-from networkx.exception import NetworkXError
-__author__ = """Aric Hagberg (hagberg@lanl.gov)"""
-__all__ = ['pagerank','pagerank_numpy','pagerank_scipy','google_matrix']
-
-def pagerank(G,alpha=0.85,personalization=None,
-             max_iter=100,tol=1.0e-8,nstart=None,weight='weight'):
-    """Return the PageRank of the nodes in the graph.
-
-    PageRank computes a ranking of the nodes in the graph G based on
-    the structure of the incoming links. It was originally designed as
-    an algorithm to rank web pages.
-
-    Parameters
-    -----------
-    G : graph
-      A NetworkX graph
-
-    alpha : float, optional
-      Damping parameter for PageRank, default=0.85
-
-    personalization: dict, optional
-       The "personalization vector" consisting of a dictionary with a
-       key for every graph node and nonzero personalization value for each node.
-
-    max_iter : integer, optional
-      Maximum number of iterations in power method eigenvalue solver.
-
-    tol : float, optional
-      Error tolerance used to check convergence in power method solver.
-
-    nstart : dictionary, optional
-      Starting value of PageRank iteration for each node.
-
-    weight : key, optional
-      Edge data key to use as weight.  If None weights are set to 1.
-
-    Returns
-    -------
-    pagerank : dictionary
-       Dictionary of nodes with PageRank as value
-
-    Examples
-    --------
-    >>> G=nx.DiGraph(nx.path_graph(4))
-    >>> pr=nx.pagerank(G,alpha=0.9)
-
-    Notes
-    -----
-    The eigenvector calculation is done by the power iteration method
-    and has no guarantee of convergence.  The iteration will stop
-    after max_iter iterations or an error tolerance of
-    number_of_nodes(G)*tol has been reached.
-
-    The PageRank algorithm was designed for directed graphs but this
-    algorithm does not check if the input graph is directed and will
-    execute on undirected graphs by converting each oriented edge in the
-    directed graph to two edges.
-
-    See Also
-    --------
-    pagerank_numpy, pagerank_scipy, google_matrix
-
-    References
-    ----------
-    .. [1] A. Langville and C. Meyer,
-       "A survey of eigenvector methods of web information retrieval."
-       http://citeseer.ist.psu.edu/713792.html
-    .. [2] Page, Lawrence; Brin, Sergey; Motwani, Rajeev and Winograd, Terry,
-       The PageRank citation ranking: Bringing order to the Web. 1999
-       http://dbpubs.stanford.edu:8090/pub/showDoc.Fulltext?lang=en&doc=1999-66&format=pdf
-    """
-    if type(G) == nx.MultiGraph or type(G) == nx.MultiDiGraph:
-        raise Exception("pagerank() not defined for graphs with multiedges.")
-
-    if len(G) == 0:
-        return {}
-
-    if not G.is_directed():
-        D=G.to_directed()
-    else:
-        D=G
-
-    # create a copy in (right) stochastic form
-    W=nx.stochastic_graph(D, weight=weight)
-    scale=1.0/W.number_of_nodes()
-
-    # choose fixed starting vector if not given
-    if nstart is None:
-        x=dict.fromkeys(W,scale)
-    else:
-        x=nstart
-        # normalize starting vector to 1
-        s=1.0/sum(x.values())
-        for k in x: x[k]*=s
-
-    # assign uniform personalization/teleportation vector if not given
-    if personalization is None:
-        p=dict.fromkeys(W,scale)
-    else:
-        p=personalization
-        # normalize starting vector to 1
-        s=1.0/sum(p.values())
-        for k in p:
-            p[k]*=s
-        if set(p)!=set(G):
-            raise NetworkXError('Personalization vector '
-                                'must have a value for every node')
-
-
-    # "dangling" nodes, no links out from them
-    out_degree=W.out_degree()
-    dangle=[n for n in W if out_degree[n]==0.0]
-    i=0
-    while True: # power iteration: make up to max_iter iterations
-        xlast=x
-        x=dict.fromkeys(xlast.keys(),0)
-        danglesum=alpha*scale*sum(xlast[n] for n in dangle)
-        for n in x:
-            # this matrix multiply looks odd because it is
-            # doing a left multiply x^T=xlast^T*W
-            for nbr in W[n]:
-                x[nbr]+=alpha*xlast[n]*W[n][nbr][weight]
-            x[n]+=danglesum+(1.0-alpha)*p[n]
-        # normalize vector
-        s=1.0/sum(x.values())
-        for n in x:
-            x[n]*=s
-        # check convergence, l1 norm
-        err=sum([abs(x[n]-xlast[n]) for n in x])
-        if err < tol:
-            break
-        if i>max_iter:
-            raise NetworkXError('pagerank: power iteration failed to converge '
-                                'in %d iterations.'%(i-1))
-        i+=1
-    return x
-
-
-def google_matrix(G, alpha=0.85, personalization=None,
-                  nodelist=None, weight='weight'):
-    """Return the Google matrix of the graph.
-
-    Parameters
-    -----------
-    G : graph
-      A NetworkX graph
-
-    alpha : float
-      The damping factor
-
-    personalization: dict, optional
-       The "personalization vector" consisting of a dictionary with a
-       key for every graph node and nonzero personalization value for each node.
-
-    nodelist : list, optional
-      The rows and columns are ordered according to the nodes in nodelist.
-      If nodelist is None, then the ordering is produced by G.nodes().
-
-    weight : key, optional
-      Edge data key to use as weight.  If None weights are set to 1.
-
-    Returns
-    -------
-    A : NumPy matrix
-       Google matrix of the graph
-
-    See Also
-    --------
-    pagerank, pagerank_numpy, pagerank_scipy
-    """
-    try:
-        import numpy as np
-    except ImportError:
-        raise ImportError(\
-            "google_matrix() requires NumPy: http://scipy.org/")
-    # choose ordering in matrix
-    if personalization is None: # use G.nodes() ordering
-        nodelist=G.nodes()
-    else:  # use personalization "vector" ordering
-        nodelist=personalization.keys()
-        if set(nodelist)!=set(G):
-            raise NetworkXError('Personalization vector dictionary'
-                                'must have a value for every node')
-    M=nx.to_numpy_matrix(G,nodelist=nodelist,weight=weight)
-    (n,m)=M.shape # should be square
-    if n == 0:
-        return M
-    # add constant to dangling nodes' row
-    dangling=np.where(M.sum(axis=1)==0)
-    for d in dangling[0]:
-        M[d]=1.0/n
-    # normalize
-    M=M/M.sum(axis=1)
-    # add "teleportation"/personalization
-    e=np.ones((n))
-    if personalization is not None:
-        v=np.array(list(personalization.values()),dtype=float)
-    else:
-        v=e
-    v=v/v.sum()
-    P=alpha*M+(1-alpha)*np.outer(e,v)
-    return P
-
-
-def pagerank_numpy(G, alpha=0.85, personalization=None, weight='weight'):
-    """Return the PageRank of the nodes in the graph.
-
-    PageRank computes a ranking of the nodes in the graph G based on
-    the structure of the incoming links. It was originally designed as
-    an algorithm to rank web pages.
-
-    Parameters
-    -----------
-    G : graph
-      A NetworkX graph
-
-    alpha : float, optional
-      Damping parameter for PageRank, default=0.85
-
-    personalization: dict, optional
-       The "personalization vector" consisting of a dictionary with a
-       key for every graph node and nonzero personalization value for each node.
-
-    weight : key, optional
-      Edge data key to use as weight.  If None weights are set to 1.
-
-    Returns
-    -------
-    pagerank : dictionary
-       Dictionary of nodes with PageRank as value
-
-    Examples
-    --------
-    >>> G=nx.DiGraph(nx.path_graph(4))
-    >>> pr=nx.pagerank_numpy(G,alpha=0.9)
-
-    Notes
-    -----
-    The eigenvector calculation uses NumPy's interface to the LAPACK
-    eigenvalue solvers.  This will be the fastest and most accurate
-    for small graphs.
-
-    This implementation works with Multi(Di)Graphs.
-
-    See Also
-    --------
-    pagerank, pagerank_scipy, google_matrix
-
-    References
-    ----------
-    .. [1] A. Langville and C. Meyer,
-       "A survey of eigenvector methods of web information retrieval."
-       http://citeseer.ist.psu.edu/713792.html
-    .. [2] Page, Lawrence; Brin, Sergey; Motwani, Rajeev and Winograd, Terry,
-       The PageRank citation ranking: Bringing order to the Web. 1999
-       http://dbpubs.stanford.edu:8090/pub/showDoc.Fulltext?lang=en&doc=1999-66&format=pdf
-    """
-    try:
-        import numpy as np
-    except ImportError:
-        raise ImportError("pagerank_numpy() requires NumPy: http://scipy.org/")
-    if len(G) == 0:
-        return {}
-    # choose ordering in matrix
-    if personalization is None: # use G.nodes() ordering
-        nodelist=G.nodes()
-    else:  # use personalization "vector" ordering
-        nodelist=personalization.keys()
-    M=google_matrix(G, alpha, personalization=personalization,
-                    nodelist=nodelist, weight=weight)
-    # use numpy LAPACK solver
-    eigenvalues,eigenvectors=np.linalg.eig(M.T)
-    ind=eigenvalues.argsort()
-    # eigenvector of largest eigenvalue at ind[-1], normalized
-    largest=np.array(eigenvectors[:,ind[-1]]).flatten().real
-    norm=float(largest.sum())
-    centrality=dict(zip(nodelist,map(float,largest/norm)))
-    return centrality
-
-
-def pagerank_scipy(G, alpha=0.85, personalization=None,
-                   max_iter=100, tol=1.0e-6, weight='weight'):
-    """Return the PageRank of the nodes in the graph.
-
-    PageRank computes a ranking of the nodes in the graph G based on
-    the structure of the incoming links. It was originally designed as
-    an algorithm to rank web pages.
-
-    Parameters
-    -----------
-    G : graph
-      A NetworkX graph
-
-    alpha : float, optional
-      Damping parameter for PageRank, default=0.85
-
-    personalization: dict, optional
-       The "personalization vector" consisting of a dictionary with a
-       key for every graph node and nonzero personalization value for each node.
-
-    max_iter : integer, optional
-      Maximum number of iterations in power method eigenvalue solver.
-
-    tol : float, optional
-      Error tolerance used to check convergence in power method solver.
-
-    weight : key, optional
-      Edge data key to use as weight.  If None weights are set to 1.
-
-    Returns
-    -------
-    pagerank : dictionary
-       Dictionary of nodes with PageRank as value
-
-    Examples
-    --------
-    >>> G=nx.DiGraph(nx.path_graph(4))
-    >>> pr=nx.pagerank_scipy(G,alpha=0.9)
-
-    Notes
-    -----
-    The eigenvector calculation uses power iteration with a SciPy
-    sparse matrix representation.
-
-    See Also
-    --------
-    pagerank, pagerank_numpy, google_matrix
-
-    References
-    ----------
-    .. [1] A. Langville and C. Meyer,
-       "A survey of eigenvector methods of web information retrieval."
-       http://citeseer.ist.psu.edu/713792.html
-    .. [2] Page, Lawrence; Brin, Sergey; Motwani, Rajeev and Winograd, Terry,
-       The PageRank citation ranking: Bringing order to the Web. 1999
-       http://dbpubs.stanford.edu:8090/pub/showDoc.Fulltext?lang=en&doc=1999-66&format=pdf
-    """
-    try:
-        import scipy.sparse
-    except ImportError:
-        raise ImportError("pagerank_scipy() requires SciPy: http://scipy.org/")
-    if len(G) == 0:
-        return {}
-    # choose ordering in matrix
-    if personalization is None: # use G.nodes() ordering
-        nodelist=G.nodes()
-    else:  # use personalization "vector" ordering
-        nodelist=personalization.keys()
-    M=nx.to_scipy_sparse_matrix(G,nodelist=nodelist,weight=weight,dtype='f')
-    (n,m)=M.shape # should be square
-    S=scipy.array(M.sum(axis=1)).flatten()
-#    for i, j, v in zip( *scipy.sparse.find(M) ):
-#        M[i,j] = v / S[i]
-    S[S>0] = 1.0 / S[S>0]
-    Q = scipy.sparse.spdiags(S.T, 0, *M.shape, format='csr')
-    M = Q * M
-    x=scipy.ones((n))/n  # initial guess
-    dangle=scipy.array(scipy.where(M.sum(axis=1)==0,1.0/n,0)).flatten()
-    # add "teleportation"/personalization
-    if personalization is not None:
-        v=scipy.array(list(personalization.values()),dtype=float)
-        v=v/v.sum()
-    else:
-        v=x
-    i=0
-    while i <= max_iter:
-        # power iteration: make up to max_iter iterations
-        xlast=x
-        x=alpha*(x*M+scipy.dot(dangle,xlast))+(1-alpha)*v
-        x=x/x.sum()
-        # check convergence, l1 norm
-        err=scipy.absolute(x-xlast).sum()
-        if err < n*tol:
-            return dict(zip(nodelist,map(float,x)))
-        i+=1
-    raise NetworkXError('pagerank_scipy: power iteration failed to converge'
-                        'in %d iterations.'%(i+1))
-
-
-# fixture for nose tests
-def setup_module(module):
-    from nose import SkipTest
-    try:
-        import numpy
-    except:
-        raise SkipTest("NumPy not available")
-    try:
-        import scipy
-    except:
-        raise SkipTest("SciPy not available")
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/link_analysis/tests/test_hits.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/link_analysis/tests/test_hits.py
deleted file mode 100644
index 7092d1d..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/link_analysis/tests/test_hits.py
+++ /dev/null
@@ -1,93 +0,0 @@
-#!/usr/bin/env python
-from nose.tools import *
-from nose import SkipTest
-from nose.plugins.attrib import attr
-import networkx
-
-# Example from
-# A. Langville and C. Meyer, "A survey of eigenvector methods of web
-# information retrieval."  http://citeseer.ist.psu.edu/713792.html
-
-
-class TestHITS:
-
-    def setUp(self):
-        
-        G=networkx.DiGraph()
-
-        edges=[(1,3),(1,5),\
-           (2,1),\
-           (3,5),\
-           (5,4),(5,3),\
-           (6,5)]
-           
-        G.add_edges_from(edges,weight=1)
-        self.G=G
-        self.G.a=dict(zip(G,[0.000000, 0.000000, 0.366025,
-                             0.133975, 0.500000, 0.000000]))
-        self.G.h=dict(zip(G,[ 0.366025, 0.000000, 0.211325, 
-                              0.000000, 0.211325, 0.211325]))
-
-
-    def test_hits(self):
-        G=self.G
-        h,a=networkx.hits(G,tol=1.e-08)
-        for n in G:
-            assert_almost_equal(h[n],G.h[n],places=4)
-        for n in G:
-            assert_almost_equal(a[n],G.a[n],places=4)
-
-    def test_hits_nstart(self):
-        G = self.G
-        nstart = dict([(i, 1./2) for i in G])
-        h, a = networkx.hits(G, nstart = nstart)
-
-    @attr('numpy')
-    def test_hits_numpy(self):
-        try:
-            import numpy as np
-        except ImportError:
-            raise SkipTest('NumPy not available.')
-
-
-        G=self.G
-        h,a=networkx.hits_numpy(G)
-        for n in G:
-            assert_almost_equal(h[n],G.h[n],places=4)
-        for n in G:
-            assert_almost_equal(a[n],G.a[n],places=4)
-
-
-    def test_hits_scipy(self):
-        try:
-            import scipy as sp
-        except ImportError:
-            raise SkipTest('SciPy not available.')
-
-        G=self.G
-        h,a=networkx.hits_scipy(G,tol=1.e-08)
-        for n in G:
-            assert_almost_equal(h[n],G.h[n],places=4)
-        for n in G:
-            assert_almost_equal(a[n],G.a[n],places=4)
-
-
-    @attr('numpy')
-    def test_empty(self):
-        try:
-            import numpy
-        except ImportError:
-            raise SkipTest('numpy not available.')
-        G=networkx.Graph()
-        assert_equal(networkx.hits(G),({},{}))
-        assert_equal(networkx.hits_numpy(G),({},{}))
-        assert_equal(networkx.authority_matrix(G).shape,(0,0))
-        assert_equal(networkx.hub_matrix(G).shape,(0,0))
-
-    def test_empty_scipy(self):
-        try:
-            import scipy
-        except ImportError:
-            raise SkipTest('scipy not available.')
-        G=networkx.Graph()
-        assert_equal(networkx.hits_scipy(G),({},{}))
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/link_analysis/tests/test_pagerank.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/link_analysis/tests/test_pagerank.py
deleted file mode 100644
index 7b409ff..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/link_analysis/tests/test_pagerank.py
+++ /dev/null
@@ -1,122 +0,0 @@
-#!/usr/bin/env python
-from nose.tools import *
-from nose import SkipTest
-from nose.plugins.attrib import attr
-import random
-import networkx
-
-# Example from
-# A. Langville and C. Meyer, "A survey of eigenvector methods of web
-# information retrieval."  http://citeseer.ist.psu.edu/713792.html
-
-
-class TestPageRank:
-
-    def setUp(self):
-        G=networkx.DiGraph()
-        edges=[(1,2),(1,3),\
-           (3,1),(3,2),(3,5),\
-           (4,5),(4,6),\
-           (5,4),(5,6),\
-           (6,4)]
-        G.add_edges_from(edges)
-        self.G=G
-        self.G.pagerank=dict(zip(G,
-                                 [0.03721197,0.05395735,0.04150565,
-                                  0.37508082,0.20599833, 0.28624589]))
-
-    def test_pagerank(self):
-        G=self.G
-        p=networkx.pagerank(G,alpha=0.9,tol=1.e-08)
-        for n in G:
-            assert_almost_equal(p[n],G.pagerank[n],places=4)
-
-        nstart = dict((n,random.random()) for n in G)
-        p=networkx.pagerank(G,alpha=0.9,tol=1.e-08, nstart=nstart)
-        for n in G:
-            assert_almost_equal(p[n],G.pagerank[n],places=4)
-
-        assert_raises(networkx.NetworkXError,networkx.pagerank,G,
-                      max_iter=0)
-
-
-    @attr('numpy')
-    def test_numpy_pagerank(self):
-        try:
-            import numpy
-        except ImportError:
-            raise SkipTest('numpy not available.')
-        G=self.G
-        p=networkx.pagerank_numpy(G,alpha=0.9)
-        for n in G:
-            assert_almost_equal(p[n],G.pagerank[n],places=4)
-        personalize = dict((n,random.random()) for n in G)
-        p=networkx.pagerank_numpy(G,alpha=0.9, personalization=personalize)
-
-
-
-    @attr('numpy')
-    def test_google_matrix(self):
-        try:
-            import numpy.linalg
-        except ImportError:
-            raise SkipTest('numpy not available.')
-        G=self.G
-        M=networkx.google_matrix(G,alpha=0.9)
-        e,ev=numpy.linalg.eig(M.T)
-        p=numpy.array(ev[:,0]/ev[:,0].sum())[:,0]
-        for (a,b) in zip(p,self.G.pagerank.values()):
-            assert_almost_equal(a,b)
-
-        personalize = dict((n,random.random()) for n in G)
-        M=networkx.google_matrix(G,alpha=0.9, personalization=personalize)
-        _ = personalize.pop(1)
-        assert_raises(networkx.NetworkXError,networkx.google_matrix,G,
-                      personalization=personalize)
-
-    def test_scipy_pagerank(self):
-        G=self.G
-        try:
-            import scipy
-        except ImportError:
-            raise SkipTest('scipy not available.')
-        p=networkx.pagerank_scipy(G,alpha=0.9,tol=1.e-08)
-        for n in G:
-            assert_almost_equal(p[n],G.pagerank[n],places=4)
-        personalize = dict((n,random.random()) for n in G)
-        p=networkx.pagerank_scipy(G,alpha=0.9,tol=1.e-08,
-                                  personalization=personalize)
-
-        assert_raises(networkx.NetworkXError,networkx.pagerank_scipy,G,
-                      max_iter=0)
-
-    def test_personalization(self):
-        G=networkx.complete_graph(4)
-        personalize={0:1,1:1,2:4,3:4}
-        answer={0:0.1,1:0.1,2:0.4,3:0.4}
-        p=networkx.pagerank(G,alpha=0.0,personalization=personalize)
-        for n in G:
-            assert_almost_equal(p[n],answer[n],places=4)
-        _ = personalize.pop(0)
-        assert_raises(networkx.NetworkXError,networkx.pagerank,G,
-                      personalization=personalize)
-
-
-    @attr('numpy')
-    def test_empty(self):
-        try:
-            import numpy
-        except ImportError:
-            raise SkipTest('numpy not available.')
-        G=networkx.Graph()
-        assert_equal(networkx.pagerank(G),{})
-        assert_equal(networkx.pagerank_numpy(G),{})
-        assert_equal(networkx.google_matrix(G).shape,(0,0))
-
-    def test_empty_scipy(self):
-        try:
-            import scipy
-        except ImportError:
-            raise SkipTest('scipy not available.')
-        G=networkx.Graph()
-        assert_equal(networkx.pagerank_scipy(G),{})
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/matching.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/matching.py
deleted file mode 100644
index 70c424f..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/matching.py
+++ /dev/null
@@ -1,825 +0,0 @@
-"""
-********
-Matching
-********
-"""
-#    Copyright (C) 2004-2008 by
-#    Aric Hagberg <hagberg@lanl.gov>
-#    Dan Schult <dschult@colgate.edu>
-#    Pieter Swart <swart@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-#   Copyright (C) 2011 by
-#   Nicholas Mancuso <nick.mancuso@gmail.com>
-#   All rights reserved.
-#   BSD license.
-from itertools import repeat
-__author__ = """\n""".join(['Joris van Rantwijk',
-                            'Nicholas Mancuso (nick.mancuso@gmail.com)'])
-
-_all__ = ['max_weight_matching', 'maximal_matching']
-
-
-def maximal_matching(G):
-    r"""Find a maximal cardinality matching in the graph.
-
-    A matching is a subset of edges in which no node occurs more than once.
-    The cardinality of a matching is the number of matched edges.
-
-    Parameters
-    ----------
-    G : NetworkX graph
-        Undirected graph
-
-    Returns
-    -------
-    matching : set
-        A maximal matching of the graph.
-
-    Notes
-    -----
-    The algorithm greedily selects a maximal matching M of the graph G
-    (i.e. no superset of M exists). It runs in `O(|E|)` time.
-    """
-    matching = set([])
-    edges = set([])
-    for edge in G.edges_iter():
-        # If the edge isn't covered, add it to the matching
-        # then remove neighborhood of u and v from consideration.
-        if edge not in edges:
-            u, v = edge
-            matching.add(edge)
-            edges |= set(G.edges(u))
-            edges |= set(G.edges(v))
-
-    return matching
-
-
-def max_weight_matching(G, maxcardinality=False):
-    """Compute a maximum-weighted matching of G.
-
-    A matching is a subset of edges in which no node occurs more than once.
-    The cardinality of a matching is the number of matched edges.
-    The weight of a matching is the sum of the weights of its edges.
-
-    Parameters
-    ----------
-    G : NetworkX graph
-      Undirected graph
-
-    maxcardinality: bool, optional
-       If maxcardinality is True, compute the maximum-cardinality matching
-       with maximum weight among all maximum-cardinality matchings.
-
-    Returns
-    -------
-    mate : dictionary
-       The matching is returned as a dictionary, mate, such that
-       mate[v] == w if node v is matched to node w.  Unmatched nodes do not
-       occur as a key in mate.
-
-
-    Notes
-    ------
-    If G has edges with 'weight' attribute the edge data are used as
-    weight values else the weights are assumed to be 1.
-
-    This function takes time O(number_of_nodes ** 3).
-
-    If all edge weights are integers, the algorithm uses only integer
-    computations.  If floating point weights are used, the algorithm
-    could return a slightly suboptimal matching due to numeric
-    precision errors.
-
-    This method is based on the "blossom" method for finding augmenting
-    paths and the "primal-dual" method for finding a matching of maximum
-    weight, both methods invented by Jack Edmonds [1]_.
-
-    References
-    ----------
-    .. [1] "Efficient Algorithms for Finding Maximum Matching in Graphs",
-       Zvi Galil, ACM Computing Surveys, 1986.
-    """
-    #
-    # The algorithm is taken from "Efficient Algorithms for Finding Maximum
-    # Matching in Graphs" by Zvi Galil, ACM Computing Surveys, 1986.
-    # It is based on the "blossom" method for finding augmenting paths and
-    # the "primal-dual" method for finding a matching of maximum weight, both
-    # methods invented by Jack Edmonds.
-    #
-    # A C program for maximum weight matching by Ed Rothberg was used
-    # extensively to validate this new code.
-    #
-    # Many terms used in the code comments are explained in the paper
-    # by Galil. You will probably need the paper to make sense of this code.
-    #
-
-    class NoNode:
-        """Dummy value which is different from any node."""
-        pass
-
-    class Blossom:
-        """Representation of a non-trivial blossom or sub-blossom."""
-
-        __slots__ = [ 'childs', 'edges', 'mybestedges' ]
-
-        # b.childs is an ordered list of b's sub-blossoms, starting with
-        # the base and going round the blossom.
-
-        # b.edges is the list of b's connecting edges, such that
-        # b.edges[i] = (v, w) where v is a vertex in b.childs[i]
-        # and w is a vertex in b.childs[wrap(i+1)].
-
-        # If b is a top-level S-blossom,
-        # b.mybestedges is a list of least-slack edges to neighbouring
-        # S-blossoms, or None if no such list has been computed yet.
-        # This is used for efficient computation of delta3.
-
-        # Generate the blossom's leaf vertices.
-        def leaves(self):
-            for t in self.childs:
-                if isinstance(t, Blossom):
-                    for v in t.leaves():
-                        yield v
-                else:
-                    yield t
-
-    # Get a list of vertices.
-    gnodes = G.nodes()
-    if not gnodes:
-        return { }  # don't bother with empty graphs
-
-    # Find the maximum edge weight.
-    maxweight = 0
-    allinteger = True
-    for i,j,d in G.edges_iter(data=True):
-        wt=d.get('weight',1)
-        if i != j and wt > maxweight:
-            maxweight = wt
-        allinteger = allinteger and (str(type(wt)).split("'")[1]
-                                     in ('int', 'long'))
-
-    # If v is a matched vertex, mate[v] is its partner vertex.
-    # If v is a single vertex, v does not occur as a key in mate.
-    # Initially all vertices are single; updated during augmentation.
-    mate = { }
-
-    # If b is a top-level blossom,
-    # label.get(b) is None if b is unlabeled (free),
-    #                 1 if b is an S-blossom,
-    #                 2 if b is a T-blossom.
-    # The label of a vertex is found by looking at the label of its top-level
-    # containing blossom.
-    # If v is a vertex inside a T-blossom, label[v] is 2 iff v is reachable
-    # from an S-vertex outside the blossom.
-    # Labels are assigned during a stage and reset after each augmentation.
-    label = { }
-
-    # If b is a labeled top-level blossom,
-    # labeledge[b] = (v, w) is the edge through which b obtained its label
-    # such that w is a vertex in b, or None if b's base vertex is single.
-    # If w is a vertex inside a T-blossom and label[w] == 2,
-    # labeledge[w] = (v, w) is an edge through which w is reachable from
-    # outside the blossom.
-    labeledge = { }
-
-    # If v is a vertex, inblossom[v] is the top-level blossom to which v
-    # belongs.
-    # If v is a top-level vertex, inblossom[v] == v since v is itself
-    # a (trivial) top-level blossom.
-    # Initially all vertices are top-level trivial blossoms.
-    inblossom = dict(zip(gnodes, gnodes))
-
-    # If b is a sub-blossom,
-    # blossomparent[b] is its immediate parent (sub-)blossom.
-    # If b is a top-level blossom, blossomparent[b] is None.
-    blossomparent = dict(zip(gnodes, repeat(None)))
-
-    # If b is a (sub-)blossom,
-    # blossombase[b] is its base VERTEX (i.e. recursive sub-blossom).
-    blossombase = dict(zip(gnodes, gnodes))
-
-    # If w is a free vertex (or an unreached vertex inside a T-blossom),
-    # bestedge[w] = (v, w) is the least-slack edge from an S-vertex,
-    # or None if there is no such edge.
-    # If b is a (possibly trivial) top-level S-blossom,
-    # bestedge[b] = (v, w) is the least-slack edge to a different S-blossom
-    # (v inside b), or None if there is no such edge.
-    # This is used for efficient computation of delta2 and delta3.
-    bestedge = { }
-
-    # If v is a vertex,
-    # dualvar[v] = 2 * u(v) where u(v) is the v's variable in the dual
-    # optimization problem (if all edge weights are integers, multiplication
-    # by two ensures that all values remain integers throughout the algorithm).
-    # Initially, u(v) = maxweight / 2.
-    dualvar = dict(zip(gnodes, repeat(maxweight)))
-
-    # If b is a non-trivial blossom,
-    # blossomdual[b] = z(b) where z(b) is b's variable in the dual
-    # optimization problem.
-    blossomdual = { }
-
-    # If (v, w) in allowedge or (w, v) in allowedg, then the edge
-    # (v, w) is known to have zero slack in the optimization problem;
-    # otherwise the edge may or may not have zero slack.
-    allowedge = { }
-
-    # Queue of newly discovered S-vertices.
-    queue = [ ]
-
-    # Return 2 * slack of edge (v, w) (does not work inside blossoms).
-    def slack(v, w):
-        return dualvar[v] + dualvar[w] - 2 * G[v][w].get('weight',1)
-
-    # Assign label t to the top-level blossom containing vertex w,
-    # coming through an edge from vertex v.
-    def assignLabel(w, t, v):
-        b = inblossom[w]
-        assert label.get(w) is None and label.get(b) is None
-        label[w] = label[b] = t
-        if v is not None:
-            labeledge[w] = labeledge[b] = (v, w)
-        else:
-            labeledge[w] = labeledge[b] = None
-        bestedge[w] = bestedge[b] = None
-        if t == 1:
-            # b became an S-vertex/blossom; add it(s vertices) to the queue.
-            if isinstance(b, Blossom):
-                queue.extend(b.leaves())
-            else:
-                queue.append(b)
-        elif t == 2:
-            # b became a T-vertex/blossom; assign label S to its mate.
-            # (If b is a non-trivial blossom, its base is the only vertex
-            # with an external mate.)
-            base = blossombase[b]
-            assignLabel(mate[base], 1, base)
-
-    # Trace back from vertices v and w to discover either a new blossom
-    # or an augmenting path. Return the base vertex of the new blossom,
-    # or NoNode if an augmenting path was found.
-    def scanBlossom(v, w):
-        # Trace back from v and w, placing breadcrumbs as we go.
-        path = [ ]
-        base = NoNode
-        while v is not NoNode:
-            # Look for a breadcrumb in v's blossom or put a new breadcrumb.
-            b = inblossom[v]
-            if label[b] & 4:
-                base = blossombase[b]
-                break
-            assert label[b] == 1
-            path.append(b)
-            label[b] = 5
-            # Trace one step back.
-            if labeledge[b] is None:
-                # The base of blossom b is single; stop tracing this path.
-                assert blossombase[b] not in mate
-                v = NoNode
-            else:
-                assert labeledge[b][0] == mate[blossombase[b]]
-                v = labeledge[b][0]
-                b = inblossom[v]
-                assert label[b] == 2
-                # b is a T-blossom; trace one more step back.
-                v = labeledge[b][0]
-            # Swap v and w so that we alternate between both paths.
-            if w is not NoNode:
-                v, w = w, v
-       # Remove breadcrumbs.
-        for b in path:
-            label[b] = 1
-        # Return base vertex, if we found one.
-        return base
-
-    # Construct a new blossom with given base, through S-vertices v and w.
-    # Label the new blossom as S; set its dual variable to zero;
-    # relabel its T-vertices to S and add them to the queue.
-    def addBlossom(base, v, w):
-        bb = inblossom[base]
-        bv = inblossom[v]
-        bw = inblossom[w]
-        # Create blossom.
-        b = Blossom()
-        blossombase[b] = base
-        blossomparent[b] = None
-        blossomparent[bb] = b
-        # Make list of sub-blossoms and their interconnecting edge endpoints.
-        b.childs = path = [ ]
-        b.edges  = edgs = [ (v, w) ]
-        # Trace back from v to base.
-        while bv != bb:
-            # Add bv to the new blossom.
-            blossomparent[bv] = b
-            path.append(bv)
-            edgs.append(labeledge[bv])
-            assert label[bv] == 2 or (label[bv] == 1 and labeledge[bv][0] == mate[blossombase[bv]])
-            # Trace one step back.
-            v = labeledge[bv][0]
-            bv = inblossom[v]
-        # Add base sub-blossom; reverse lists.
-        path.append(bb)
-        path.reverse()
-        edgs.reverse()
-        # Trace back from w to base.
-        while bw != bb:
-            # Add bw to the new blossom.
-            blossomparent[bw] = b
-            path.append(bw)
-            edgs.append((labeledge[bw][1], labeledge[bw][0]))
-            assert label[bw] == 2 or (label[bw] == 1 and labeledge[bw][0] == mate[blossombase[bw]])
-            # Trace one step back.
-            w = labeledge[bw][0]
-            bw = inblossom[w]
-        # Set label to S.
-        assert label[bb] == 1
-        label[b] = 1
-        labeledge[b] = labeledge[bb]
-        # Set dual variable to zero.
-        blossomdual[b] = 0
-        # Relabel vertices.
-        for v in b.leaves():
-            if label[inblossom[v]] == 2:
-                # This T-vertex now turns into an S-vertex because it becomes
-                # part of an S-blossom; add it to the queue.
-                queue.append(v)
-            inblossom[v] = b
-        # Compute b.mybestedges.
-        bestedgeto = { }
-        for bv in path:
-            if isinstance(bv, Blossom):
-                if bv.mybestedges is not None:
-                    # Walk this subblossom's least-slack edges.
-                    nblist = bv.mybestedges
-                    # The sub-blossom won't need this data again.
-                    bv.mybestedges = None
-                else:
-                    # This subblossom does not have a list of least-slack
-                    # edges; get the information from the vertices.
-                    nblist = [ (v, w)
-                                for v in bv.leaves()
-                                for w in G.neighbors_iter(v)
-                                if v != w ]
-            else:
-                nblist = [ (bv, w)
-                           for w in G.neighbors_iter(bv)
-                           if bv != w ]
-            for k in nblist:
-                (i, j) = k
-                if inblossom[j] == b:
-                    i, j = j, i
-                bj = inblossom[j]
-                if (bj != b and label.get(bj) == 1 and
-                    ((bj not in bestedgeto) or
-                     slack(i, j) < slack(*bestedgeto[bj]))):
-                    bestedgeto[bj] = k
-            # Forget about least-slack edge of the subblossom.
-            bestedge[bv] = None
-        b.mybestedges = list(bestedgeto.values())
-        # Select bestedge[b].
-        mybestedge = None
-        bestedge[b] = None
-        for k in b.mybestedges:
-            kslack = slack(*k)
-            if mybestedge is None or kslack < mybestslack:
-                mybestedge = k
-                mybestslack = kslack
-        bestedge[b] = mybestedge
-
-    # Expand the given top-level blossom.
-    def expandBlossom(b, endstage):
-        # Convert sub-blossoms into top-level blossoms.
-        for s in b.childs:
-            blossomparent[s] = None
-            if isinstance(s, Blossom):
-                if endstage and blossomdual[s] == 0:
-                    # Recursively expand this sub-blossom.
-                    expandBlossom(s, endstage)
-                else:
-                    for v in s.leaves():
-                        inblossom[v] = s
-            else:
-                inblossom[s] = s
-        # If we expand a T-blossom during a stage, its sub-blossoms must be
-        # relabeled.
-        if (not endstage) and label.get(b) == 2:
-            # Start at the sub-blossom through which the expanding
-            # blossom obtained its label, and relabel sub-blossoms untili
-            # we reach the base.
-            # Figure out through which sub-blossom the expanding blossom
-            # obtained its label initially.
-            entrychild = inblossom[labeledge[b][1]]
-            # Decide in which direction we will go round the blossom.
-            j = b.childs.index(entrychild)
-            if j & 1:
-                # Start index is odd; go forward and wrap.
-                j -= len(b.childs)
-                jstep = 1
-            else:
-                # Start index is even; go backward.
-                jstep = -1
-            # Move along the blossom until we get to the base.
-            v, w = labeledge[b]
-            while j != 0:
-                # Relabel the T-sub-blossom.
-                if jstep == 1:
-                    p, q  = b.edges[j]
-                else:
-                    q, p = b.edges[j-1]
-                label[w] = None
-                label[q] = None
-                assignLabel(w, 2, v)
-                # Step to the next S-sub-blossom and note its forward edge.
-                allowedge[(p, q)] = allowedge[(q, p)] = True
-                j += jstep
-                if jstep == 1:
-                    v, w = b.edges[j]
-                else:
-                    w, v = b.edges[j-1]
-                # Step to the next T-sub-blossom.
-                allowedge[(v, w)] = allowedge[(w, v)] = True
-                j += jstep
-            # Relabel the base T-sub-blossom WITHOUT stepping through to
-            # its mate (so don't call assignLabel).
-            bw = b.childs[j]
-            label[w] = label[bw] = 2
-            labeledge[w] = labeledge[bw] = (v, w)
-            bestedge[bw] = None
-            # Continue along the blossom until we get back to entrychild.
-            j += jstep
-            while b.childs[j] != entrychild:
-                # Examine the vertices of the sub-blossom to see whether
-                # it is reachable from a neighbouring S-vertex outside the
-                # expanding blossom.
-                bv = b.childs[j]
-                if label.get(bv) == 1:
-                    # This sub-blossom just got label S through one of its
-                    # neighbours; leave it be.
-                    j += jstep
-                    continue
-                if isinstance(bv, Blossom):
-                    for v in bv.leaves():
-                        if label.get(v):
-                            break
-                else:
-                    v = bv
-                # If the sub-blossom contains a reachable vertex, assign
-                # label T to the sub-blossom.
-                if label.get(v):
-                    assert label[v] == 2
-                    assert inblossom[v] == bv
-                    label[v] = None
-                    label[mate[blossombase[bv]]] = None
-                    assignLabel(v, 2, labeledge[v][0])
-                j += jstep
-        # Remove the expanded blossom entirely.
-        label.pop(b, None)
-        labeledge.pop(b, None)
-        bestedge.pop(b, None)
-        del blossomparent[b]
-        del blossombase[b]
-        del blossomdual[b]
-
-    # Swap matched/unmatched edges over an alternating path through blossom b
-    # between vertex v and the base vertex. Keep blossom bookkeeping consistent.
-    def augmentBlossom(b, v):
-        # Bubble up through the blossom tree from vertex v to an immediate
-        # sub-blossom of b.
-        t = v
-        while blossomparent[t] != b:
-            t = blossomparent[t]
-        # Recursively deal with the first sub-blossom.
-        if isinstance(t, Blossom):
-            augmentBlossom(t, v)
-        # Decide in which direction we will go round the blossom.
-        i = j = b.childs.index(t)
-        if i & 1:
-            # Start index is odd; go forward and wrap.
-            j -= len(b.childs)
-            jstep = 1
-        else:
-            # Start index is even; go backward.
-            jstep = -1
-        # Move along the blossom until we get to the base.
-        while j != 0:
-            # Step to the next sub-blossom and augment it recursively.
-            j += jstep
-            t = b.childs[j]
-            if jstep == 1:
-                w, x = b.edges[j]
-            else:
-                x, w = b.edges[j-1]
-            if isinstance(t, Blossom):
-                augmentBlossom(t, w)
-            # Step to the next sub-blossom and augment it recursively.
-            j += jstep
-            t = b.childs[j]
-            if isinstance(t, Blossom):
-                augmentBlossom(t, x)
-            # Match the edge connecting those sub-blossoms.
-            mate[w] = x
-            mate[x] = w
-        # Rotate the list of sub-blossoms to put the new base at the front.
-        b.childs = b.childs[i:] + b.childs[:i]
-        b.edges  = b.edges[i:]  + b.edges[:i]
-        blossombase[b] = blossombase[b.childs[0]]
-        assert blossombase[b] == v
-
-    # Swap matched/unmatched edges over an alternating path between two
-    # single vertices. The augmenting path runs through S-vertices v and w.
-    def augmentMatching(v, w):
-        for (s, j) in ((v, w), (w, v)):
-            # Match vertex s to vertex j. Then trace back from s
-            # until we find a single vertex, swapping matched and unmatched
-            # edges as we go.
-            while 1:
-                bs = inblossom[s]
-                assert label[bs] == 1
-                assert (labeledge[bs] is None and blossombase[bs] not in mate) or (labeledge[bs][0] == mate[blossombase[bs]])
-                # Augment through the S-blossom from s to base.
-                if isinstance(bs, Blossom):
-                    augmentBlossom(bs, s)
-                # Update mate[s]
-                mate[s] = j
-                # Trace one step back.
-                if labeledge[bs] is None:
-                    # Reached single vertex; stop.
-                    break
-                t = labeledge[bs][0]
-                bt = inblossom[t]
-                assert label[bt] == 2
-                # Trace one more step back.
-                s, j = labeledge[bt]
-                # Augment through the T-blossom from j to base.
-                assert blossombase[bt] == t
-                if isinstance(bt, Blossom):
-                    augmentBlossom(bt, j)
-                # Update mate[j]
-                mate[j] = s
-
-    # Verify that the optimum solution has been reached.
-    def verifyOptimum():
-        if maxcardinality:
-            # Vertices may have negative dual;
-            # find a constant non-negative number to add to all vertex duals.
-            vdualoffset = max(0, -min(dualvar.values()))
-        else:
-            vdualoffset = 0
-        # 0. all dual variables are non-negative
-        assert min(dualvar.values()) + vdualoffset >= 0
-        assert len(blossomdual) == 0 or min(blossomdual.values()) >= 0
-        # 0. all edges have non-negative slack and
-        # 1. all matched edges have zero slack;
-        for i,j,d in G.edges_iter(data=True):
-            wt=d.get('weight',1)
-            if i == j:
-                continue # ignore self-loops
-            s = dualvar[i] + dualvar[j] - 2 * wt
-            iblossoms = [ i ]
-            jblossoms = [ j ]
-            while blossomparent[iblossoms[-1]] is not None:
-                iblossoms.append(blossomparent[iblossoms[-1]])
-            while blossomparent[jblossoms[-1]] is not None:
-                jblossoms.append(blossomparent[jblossoms[-1]])
-            iblossoms.reverse()
-            jblossoms.reverse()
-            for (bi, bj) in zip(iblossoms, jblossoms):
-                if bi != bj:
-                    break
-                s += 2 * blossomdual[bi]
-            assert s >= 0
-            if mate.get(i) == j or mate.get(j) == i:
-                assert mate[i] == j and mate[j] == i
-                assert s == 0
-        # 2. all single vertices have zero dual value;
-        for v in gnodes:
-            assert (v in mate) or dualvar[v] + vdualoffset == 0
-        # 3. all blossoms with positive dual value are full.
-        for b in blossomdual:
-            if blossomdual[b] > 0:
-                assert len(b.edges) % 2 == 1
-                for (i, j) in b.edges[1::2]:
-                    assert mate[i] == j and mate[j] == i
-        # Ok.
-
-    # Main loop: continue until no further improvement is possible.
-    while 1:
-
-        # Each iteration of this loop is a "stage".
-        # A stage finds an augmenting path and uses that to improve
-        # the matching.
-
-        # Remove labels from top-level blossoms/vertices.
-        label.clear()
-        labeledge.clear()
-
-        # Forget all about least-slack edges.
-        bestedge.clear()
-        for b in blossomdual:
-            b.mybestedges = None
-
-        # Loss of labeling means that we can not be sure that currently
-        # allowable edges remain allowable througout this stage.
-        allowedge.clear()
-
-        # Make queue empty.
-        queue[:] = [ ]
-
-        # Label single blossoms/vertices with S and put them in the queue.
-        for v in gnodes:
-            if (v not in mate) and label.get(inblossom[v]) is None:
-                assignLabel(v, 1, None)
-
-
-        # Loop until we succeed in augmenting the matching.
-        augmented = 0
-        while 1:
-
-            # Each iteration of this loop is a "substage".
-            # A substage tries to find an augmenting path;
-            # if found, the path is used to improve the matching and
-            # the stage ends. If there is no augmenting path, the
-            # primal-dual method is used to pump some slack out of
-            # the dual variables.
-
-            # Continue labeling until all vertices which are reachable
-            # through an alternating path have got a label.
-            while queue and not augmented:
-
-                # Take an S vertex from the queue.
-                v = queue.pop()
-                assert label[inblossom[v]] == 1
-
-                # Scan its neighbours:
-                for w in G.neighbors_iter(v):
-                    if w == v:
-                        continue # ignore self-loops
-                    # w is a neighbour to v
-                    bv = inblossom[v]
-                    bw = inblossom[w]
-                    if bv == bw:
-                        # this edge is internal to a blossom; ignore it
-                        continue
-                    if (v, w) not in allowedge:
-                        kslack = slack(v, w)
-                        if kslack <= 0:
-                            # edge k has zero slack => it is allowable
-                            allowedge[(v, w)] = allowedge[(w, v)] = True
-                    if (v, w) in allowedge:
-                        if label.get(bw) is None:
-                            # (C1) w is a free vertex;
-                            # label w with T and label its mate with S (R12).
-                            assignLabel(w, 2, v)
-                        elif label.get(bw) == 1:
-                            # (C2) w is an S-vertex (not in the same blossom);
-                            # follow back-links to discover either an
-                            # augmenting path or a new blossom.
-                            base = scanBlossom(v, w)
-                            if base is not NoNode:
-                                # Found a new blossom; add it to the blossom
-                                # bookkeeping and turn it into an S-blossom.
-                                addBlossom(base, v, w)
-                            else:
-                                # Found an augmenting path; augment the
-                                # matching and end this stage.
-                                augmentMatching(v, w)
-                                augmented = 1
-                                break
-                        elif label.get(w) is None:
-                            # w is inside a T-blossom, but w itself has not
-                            # yet been reached from outside the blossom;
-                            # mark it as reached (we need this to relabel
-                            # during T-blossom expansion).
-                            assert label[bw] == 2
-                            label[w] = 2
-                            labeledge[w] = (v, w)
-                    elif label.get(bw) == 1:
-                        # keep track of the least-slack non-allowable edge to
-                        # a different S-blossom.
-                        if bestedge.get(bv) is None or kslack < slack(*bestedge[bv]):
-                            bestedge[bv] = (v, w)
-                    elif label.get(w) is None:
-                        # w is a free vertex (or an unreached vertex inside
-                        # a T-blossom) but we can not reach it yet;
-                        # keep track of the least-slack edge that reaches w.
-                        if bestedge.get(w) is None or kslack < slack(*bestedge[w]):
-                            bestedge[w] = (v, w)
-
-            if augmented:
-                break
-
-            # There is no augmenting path under these constraints;
-            # compute delta and reduce slack in the optimization problem.
-            # (Note that our vertex dual variables, edge slacks and delta's
-            # are pre-multiplied by two.)
-            deltatype = -1
-            delta = deltaedge = deltablossom = None
-
-            # Compute delta1: the minumum value of any vertex dual.
-            if not maxcardinality:
-                deltatype = 1
-                delta = min(dualvar.values())
-
-            # Compute delta2: the minimum slack on any edge between
-            # an S-vertex and a free vertex.
-            for v in G.nodes_iter():
-                if label.get(inblossom[v]) is None and bestedge.get(v) is not None:
-                    d = slack(*bestedge[v])
-                    if deltatype == -1 or d < delta:
-                        delta = d
-                        deltatype = 2
-                        deltaedge = bestedge[v]
-
-            # Compute delta3: half the minimum slack on any edge between
-            # a pair of S-blossoms.
-            for b in blossomparent:
-                if ( blossomparent[b] is None and label.get(b) == 1 and
-                     bestedge.get(b) is not None ):
-                    kslack = slack(*bestedge[b])
-                    if allinteger:
-                        assert (kslack % 2) == 0
-                        d = kslack // 2
-                    else:
-                        d = kslack / 2.0
-                    if deltatype == -1 or d < delta:
-                        delta = d
-                        deltatype = 3
-                        deltaedge = bestedge[b]
-
-            # Compute delta4: minimum z variable of any T-blossom.
-            for b in blossomdual:
-                if ( blossomparent[b] is None and label.get(b) == 2 and
-                     (deltatype == -1 or blossomdual[b] < delta) ):
-                    delta = blossomdual[b]
-                    deltatype = 4
-                    deltablossom = b
-
-            if deltatype == -1:
-                # No further improvement possible; max-cardinality optimum
-                # reached. Do a final delta update to make the optimum
-                # verifyable.
-                assert maxcardinality
-                deltatype = 1
-                delta = max(0, min(dualvar.values()))
-
-            # Update dual variables according to delta.
-            for v in gnodes:
-                if label.get(inblossom[v]) == 1:
-                    # S-vertex: 2*u = 2*u - 2*delta
-                    dualvar[v] -= delta
-                elif label.get(inblossom[v]) == 2:
-                    # T-vertex: 2*u = 2*u + 2*delta
-                    dualvar[v] += delta
-            for b in blossomdual:
-                if blossomparent[b] is None:
-                    if label.get(b) == 1:
-                        # top-level S-blossom: z = z + 2*delta
-                        blossomdual[b] += delta
-                    elif label.get(b) == 2:
-                        # top-level T-blossom: z = z - 2*delta
-                        blossomdual[b] -= delta
-
-            # Take action at the point where minimum delta occurred.
-            if deltatype == 1:
-                # No further improvement possible; optimum reached.
-                break
-            elif deltatype == 2:
-                # Use the least-slack edge to continue the search.
-                (v, w) = deltaedge
-                assert label[inblossom[v]] == 1
-                allowedge[(v, w)] = allowedge[(w, v)] = True
-                queue.append(v)
-            elif deltatype == 3:
-                # Use the least-slack edge to continue the search.
-                (v, w) = deltaedge
-                allowedge[(v, w)] = allowedge[(w, v)] = True
-                assert label[inblossom[v]] == 1
-                queue.append(v)
-            elif deltatype == 4:
-                # Expand the least-z blossom.
-                expandBlossom(deltablossom, False)
-
-            # End of a this substage.
-
-        # Paranoia check that the matching is symmetric.
-        for v in mate:
-            assert mate[mate[v]] == v
-
-        # Stop when no more augmenting path can be found.
-        if not augmented:
-            break
-
-        # End of a stage; expand all S-blossoms which have zero dual.
-        for b in list(blossomdual.keys()):
-            if b not in blossomdual:
-                continue # already expanded
-            if ( blossomparent[b] is None and label.get(b) == 1 and
-                 blossomdual[b] == 0 ):
-                expandBlossom(b, True)
-
-    # Verify that we reached the optimum solution (only for integer weights).
-    if allinteger:
-        verifyOptimum()
-
-    return mate
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/mis.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/mis.py
deleted file mode 100644
index d02c2d5..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/mis.py
+++ /dev/null
@@ -1,81 +0,0 @@
-# -*- coding: utf-8 -*-
-# $Id: maximalIndependentSet.py 576 2011-03-01 05:50:34Z lleeoo $
-"""
-Algorithm to find a maximal (not maximum) independent set.
-
-"""
-#    Leo Lopes <leo.lopes@monash.edu>
-#    Aric Hagberg <hagberg@lanl.gov>
-#    Dan Schult <dschult@colgate.edu>
-#    Pieter Swart <swart@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-
-__author__ = "\n".join(["Leo Lopes <leo.lopes@monash.edu>",
-                        "Loïc Séguin-C. <loicseguin@gmail.com>"])
-
-__all__ = ['maximal_independent_set']
-
-import random
-import networkx as nx
-
-def maximal_independent_set(G, nodes=None):
-    """Return a random maximal independent set guaranteed to contain
-    a given set of nodes.
-
-    An independent set is a set of nodes such that the subgraph
-    of G induced by these nodes contains no edges. A maximal
-    independent set is an independent set such that it is not possible
-    to add a new node and still get an independent set.
-    
-    Parameters
-    ----------
-    G : NetworkX graph 
-
-    nodes : list or iterable
-       Nodes that must be part of the independent set. This set of nodes
-       must be independent.
-
-    Returns
-    -------
-    indep_nodes : list 
-       List of nodes that are part of a maximal independent set.
-
-    Raises
-    ------
-    NetworkXUnfeasible
-       If the nodes in the provided list are not part of the graph or
-       do not form an independent set, an exception is raised.
-
-    Examples
-    --------
-    >>> G = nx.path_graph(5)
-    >>> nx.maximal_independent_set(G) # doctest: +SKIP
-    [4, 0, 2]
-    >>> nx.maximal_independent_set(G, [1]) # doctest: +SKIP
-    [1, 3]
-    
-    Notes
-    ------
-    This algorithm does not solve the maximum independent set problem.
-
-    """
-    if not nodes:
-        nodes = set([random.choice(G.nodes())])
-    else:
-        nodes = set(nodes)
-    if not nodes.issubset(G):
-        raise nx.NetworkXUnfeasible(
-                "%s is not a subset of the nodes of G" % nodes)
-    neighbors = set.union(*[set(G.neighbors(v)) for v in nodes])
-    if set.intersection(neighbors, nodes):
-        raise nx.NetworkXUnfeasible(
-                "%s is not an independent set of G" % nodes)
-    indep_nodes = list(nodes)
-    available_nodes = set(G.nodes()).difference(neighbors.union(nodes))
-    while available_nodes:
-        node = random.choice(list(available_nodes))
-        indep_nodes.append(node)
-        available_nodes.difference_update(G.neighbors(node) + [node])
-    return indep_nodes
-
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/mst.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/mst.py
deleted file mode 100644
index 03ca5e8..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/mst.py
+++ /dev/null
@@ -1,254 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-Computes minimum spanning tree of a weighted graph.
-
-"""
-#    Copyright (C) 2009-2010 by 
-#    Aric Hagberg <hagberg@lanl.gov>
-#    Dan Schult <dschult@colgate.edu>
-#    Pieter Swart <swart@lanl.gov>
-#    Loïc Séguin-C. <loicseguin@gmail.com>
-#    All rights reserved.
-#    BSD license.
-
-__all__ = ['kruskal_mst',
-           'minimum_spanning_edges',
-           'minimum_spanning_tree',
-           'prim_mst_edges', 'prim_mst']
-
-import networkx as nx
-from heapq import heappop, heappush
-
-def minimum_spanning_edges(G,weight='weight',data=True):
-    """Generate edges in a minimum spanning forest of an undirected 
-    weighted graph.
-
-    A minimum spanning tree is a subgraph of the graph (a tree)
-    with the minimum sum of edge weights.  A spanning forest is a
-    union of the spanning trees for each connected component of the graph.
-
-    Parameters
-    ----------
-    G : NetworkX Graph
-    
-    weight : string
-       Edge data key to use for weight (default 'weight').
-
-    data : bool, optional
-       If True yield the edge data along with the edge.
-       
-    Returns
-    -------
-    edges : iterator
-       A generator that produces edges in the minimum spanning tree.
-       The edges are three-tuples (u,v,w) where w is the weight.
-    
-    Examples
-    --------
-    >>> G=nx.cycle_graph(4)
-    >>> G.add_edge(0,3,weight=2) # assign weight 2 to edge 0-3
-    >>> mst=nx.minimum_spanning_edges(G,data=False) # a generator of MST edges
-    >>> edgelist=list(mst) # make a list of the edges
-    >>> print(sorted(edgelist))
-    [(0, 1), (1, 2), (2, 3)]
-
-    Notes
-    -----
-    Uses Kruskal's algorithm.
-
-    If the graph edges do not have a weight attribute a default weight of 1
-    will be used.
-
-    Modified code from David Eppstein, April 2006
-    http://www.ics.uci.edu/~eppstein/PADS/
-    """
-    # Modified code from David Eppstein, April 2006
-    # http://www.ics.uci.edu/~eppstein/PADS/
-    # Kruskal's algorithm: sort edges by weight, and add them one at a time.
-    # We use Kruskal's algorithm, first because it is very simple to
-    # implement once UnionFind exists, and second, because the only slow
-    # part (the sort) is sped up by being built in to Python.
-    from networkx.utils import UnionFind
-    if G.is_directed():
-        raise nx.NetworkXError(
-            "Mimimum spanning tree not defined for directed graphs.")
-
-    subtrees = UnionFind()
-    edges = sorted(G.edges(data=True),key=lambda t: t[2].get(weight,1))
-    for u,v,d in edges:
-        if subtrees[u] != subtrees[v]:
-            if data:
-                yield (u,v,d)
-            else:
-                yield (u,v)
-            subtrees.union(u,v)
-
-
-def minimum_spanning_tree(G,weight='weight'):
-    """Return a minimum spanning tree or forest of an undirected 
-    weighted graph.
-
-    A minimum spanning tree is a subgraph of the graph (a tree) with
-    the minimum sum of edge weights.
-
-    If the graph is not connected a spanning forest is constructed.  A
-    spanning forest is a union of the spanning trees for each
-    connected component of the graph.
-
-    Parameters
-    ----------
-    G : NetworkX Graph
-    
-    weight : string
-       Edge data key to use for weight (default 'weight').
-
-    Returns
-    -------
-    G : NetworkX Graph
-       A minimum spanning tree or forest. 
-    
-    Examples
-    --------
-    >>> G=nx.cycle_graph(4)
-    >>> G.add_edge(0,3,weight=2) # assign weight 2 to edge 0-3
-    >>> T=nx.minimum_spanning_tree(G)
-    >>> print(sorted(T.edges(data=True)))
-    [(0, 1, {}), (1, 2, {}), (2, 3, {})]
-
-    Notes
-    -----
-    Uses Kruskal's algorithm.
-
-    If the graph edges do not have a weight attribute a default weight of 1
-    will be used.
-    """
-    T=nx.Graph(nx.minimum_spanning_edges(G,weight=weight,data=True))
-    # Add isolated nodes
-    if len(T)!=len(G):
-        T.add_nodes_from([n for n,d in G.degree().items() if d==0])
-    # Add node and graph attributes as shallow copy
-    for n in T:
-        T.node[n]=G.node[n].copy()
-    T.graph=G.graph.copy()
-    return T
-
-kruskal_mst=minimum_spanning_tree
-
-def prim_mst_edges(G, weight = 'weight', data = True):
-    """Generate edges in a minimum spanning forest of an undirected 
-    weighted graph.
-
-    A minimum spanning tree is a subgraph of the graph (a tree)
-    with the minimum sum of edge weights.  A spanning forest is a
-    union of the spanning trees for each connected component of the graph.
-
-    Parameters
-    ----------
-    G : NetworkX Graph
-    
-    weight : string
-       Edge data key to use for weight (default 'weight').
-
-    data : bool, optional
-       If True yield the edge data along with the edge.
-       
-    Returns
-    -------
-    edges : iterator
-       A generator that produces edges in the minimum spanning tree.
-       The edges are three-tuples (u,v,w) where w is the weight.
-    
-    Examples
-    --------
-    >>> G=nx.cycle_graph(4)
-    >>> G.add_edge(0,3,weight=2) # assign weight 2 to edge 0-3
-    >>> mst=nx.prim_mst_edges(G,data=False) # a generator of MST edges
-    >>> edgelist=list(mst) # make a list of the edges
-    >>> print(sorted(edgelist))
-    [(0, 1), (1, 2), (2, 3)]
-
-    Notes
-    -----
-    Uses Prim's algorithm.
-
-    If the graph edges do not have a weight attribute a default weight of 1
-    will be used.
-    """
-
-    if G.is_directed():
-        raise nx.NetworkXError(
-            "Mimimum spanning tree not defined for directed graphs.")
-
-    nodes = G.nodes()
-
-    while nodes:
-        u = nodes.pop(0)
-        frontier = []
-        visited = [u]
-        for u, v in G.edges(u):
-            heappush(frontier, (G[u][v].get(weight, 1), u, v))
-
-        while frontier:
-            W, u, v = heappop(frontier)
-            if v in visited:
-                continue
-            visited.append(v)
-            nodes.remove(v)
-            for v, w  in G.edges(v):
-                if not w in visited:
-                    heappush(frontier, (G[v][w].get(weight, 1), v, w))
-            if data:
-                yield u, v, G[u][v]
-            else:
-                yield u, v
-
-
-def prim_mst(G, weight = 'weight'):
-    """Return a minimum spanning tree or forest of an undirected 
-    weighted graph.
-
-    A minimum spanning tree is a subgraph of the graph (a tree) with
-    the minimum sum of edge weights.
-
-    If the graph is not connected a spanning forest is constructed.  A
-    spanning forest is a union of the spanning trees for each
-    connected component of the graph.
-
-    Parameters
-    ----------
-    G : NetworkX Graph
-    
-    weight : string
-       Edge data key to use for weight (default 'weight').
-
-    Returns
-    -------
-    G : NetworkX Graph
-       A minimum spanning tree or forest. 
-    
-    Examples
-    --------
-    >>> G=nx.cycle_graph(4)
-    >>> G.add_edge(0,3,weight=2) # assign weight 2 to edge 0-3
-    >>> T=nx.prim_mst(G)
-    >>> print(sorted(T.edges(data=True)))
-    [(0, 1, {}), (1, 2, {}), (2, 3, {})]
-
-    Notes
-    -----
-    Uses Prim's algorithm.
-
-    If the graph edges do not have a weight attribute a default weight of 1
-    will be used.
-    """
-
-    T=nx.Graph(nx.prim_mst_edges(G,weight=weight,data=True))
-    # Add isolated nodes
-    if len(T)!=len(G):
-        T.add_nodes_from([n for n,d in G.degree().items() if d==0])
-    # Add node and graph attributes as shallow copy
-    for n in T:
-        T.node[n]=G.node[n].copy()
-    T.graph=G.graph.copy()
-    return T
-
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/operators/__init__.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/operators/__init__.py
deleted file mode 100644
index 0ebc6ab..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/operators/__init__.py
+++ /dev/null
@@ -1,4 +0,0 @@
-from networkx.algorithms.operators.all import *
-from networkx.algorithms.operators.binary import *
-from networkx.algorithms.operators.product import *
-from networkx.algorithms.operators.unary import *
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/operators/all.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/operators/all.py
deleted file mode 100644
index 755256b..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/operators/all.py
+++ /dev/null
@@ -1,151 +0,0 @@
-"""Operations on many graphs.
-"""
-#    Copyright (C) 2012 by
-#    Aric Hagberg <hagberg@lanl.gov>
-#    Dan Schult <dschult@colgate.edu>
-#    Pieter Swart <swart@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-try:
-    from itertools import izip_longest as zip_longest
-except ImportError: # Python3 has zip_longest
-    from itertools import zip_longest
-import networkx as nx
-from networkx.utils import is_string_like
-
-__author__ = """\n""".join([ 'Robert King <kingrobertking@gmail.com>',
-                             'Aric Hagberg <aric.hagberg@gmail.com>'])
-
-__all__ = ['union_all', 'compose_all', 'disjoint_union_all',
-           'intersection_all']
-
-def union_all(graphs, rename=(None,) , name=None):
-    """Return the union of all graphs.
-
-    The graphs must be disjoint, otherwise an exception is raised.
-
-    Parameters
-    ----------
-    graphs : list of graphs
-       List of NetworkX graphs
-
-    rename : bool , default=(None, None)
-       Node names of G and H can be changed by specifying the tuple
-       rename=('G-','H-') (for example).  Node "u" in G is then renamed
-       "G-u" and "v" in H is renamed "H-v".
-
-    name : string
-       Specify the name for the union graph@not_implemnted_for('direct
-
-    Returns
-    -------
-    U : a graph with the same type as the first graph in list
-
-    Notes
-    -----
-    To force a disjoint union with node relabeling, use
-    disjoint_union_all(G,H) or convert_node_labels_to integers().
-
-    Graph, edge, and node attributes are propagated to the union graph.
-    If a graph attribute is present in multiple graphs, then the value
-    from the last graph in the list with that attribute is used.
-
-    See Also
-    --------
-    union
-    disjoint_union_all
-    """
-    graphs_names = zip_longest(graphs,rename)
-    U, gname = next(graphs_names)
-    for H,hname in graphs_names:
-        U = nx.union(U, H, (gname,hname),name=name)
-        gname = None
-    return U
-
-def disjoint_union_all(graphs):
-    """Return the disjoint union of all graphs.
-
-    This operation forces distinct integer node labels starting with 0
-    for the first graph in the list and numbering consecutively.
-
-    Parameters
-    ----------
-    graphs : list
-       List of NetworkX graphs
-
-    Returns
-    -------
-    U : A graph with the same type as the first graph in list
-
-    Notes
-    -----
-    It is recommended that the graphs be either all directed or all undirected.
-
-    Graph, edge, and node attributes are propagated to the union graph.
-    If a graph attribute is present in multiple graphs, then the value
-    from the last graph in the list with that attribute is used.
-    """
-    graphs = iter(graphs)
-    U = next(graphs)
-    for H in graphs:
-        U = nx.disjoint_union(U, H)
-    return U
-
-def compose_all(graphs, name=None):
-    """Return the composition of all graphs.
-
-    Composition is the simple union of the node sets and edge sets.
-    The node sets of the supplied graphs need not be disjoint.
-
-    Parameters
-    ----------
-    graphs : list
-       List of NetworkX graphs
-
-    name : string
-       Specify name for new graph
-
-    Returns
-    -------
-    C : A graph with the same type as the first graph in list
-
-    Notes
-    -----
-    It is recommended that the supplied graphs be either all directed or all
-    undirected.
-
-    Graph, edge, and node attributes are propagated to the union graph.
-    If a graph attribute is present in multiple graphs, then the value
-    from the last graph in the list with that attribute is used.
-    """
-    graphs = iter(graphs)
-    C = next(graphs)
-    for H in graphs:
-        C = nx.compose(C, H, name=name)
-    return C
-
-def intersection_all(graphs):
-    """Return a new graph that contains only the edges that exist in
-    all graphs.
-
-    All supplied graphs must have the same node set.
-
-    Parameters
-    ----------
-    graphs_list : list
-       List of NetworkX graphs
-
-    Returns
-    -------
-    R : A new graph with the same type as the first graph in list
-
-    Notes
-    -----
-    Attributes from the graph, nodes, and edges are not copied to the new
-    graph.
-    """
-    graphs = iter(graphs)
-    R = next(graphs)
-    for H in graphs:
-        R = nx.intersection(R, H)
-    return R
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/operators/binary.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/operators/binary.py
deleted file mode 100644
index a710008..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/operators/binary.py
+++ /dev/null
@@ -1,329 +0,0 @@
-"""
-Operations on graphs including union, intersection, difference.
-"""
-#    Copyright (C) 2004-2012 by
-#    Aric Hagberg <hagberg@lanl.gov>
-#    Dan Schult <dschult@colgate.edu>
-#    Pieter Swart <swart@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-import networkx as nx
-from networkx.utils import is_string_like
-__author__ = """\n""".join(['Aric Hagberg (hagberg@lanl.gov)',
-                           'Pieter Swart (swart@lanl.gov)',
-                           'Dan Schult(dschult@colgate.edu)'])
-__all__ = ['union', 'compose', 'disjoint_union', 'intersection',
-           'difference', 'symmetric_difference']
-
-def union(G, H, rename=(None, None), name=None):
-    """ Return the union of graphs G and H.
-
-    Graphs G and H must be disjoint, otherwise an exception is raised.
-
-    Parameters
-    ----------
-    G,H : graph
-       A NetworkX graph
-
-    create_using : NetworkX graph
-       Use specified graph for result.  Otherwise
-
-    rename : bool , default=(None, None)
-       Node names of G and H can be changed by specifying the tuple
-       rename=('G-','H-') (for example).  Node "u" in G is then renamed
-       "G-u" and "v" in H is renamed "H-v".
-
-    name : string
-       Specify the name for the union graph
-
-    Returns
-    -------
-    U : A union graph with the same type as G.
-
-    Notes
-    -----
-    To force a disjoint union with node relabeling, use
-    disjoint_union(G,H) or convert_node_labels_to integers().
-
-    Graph, edge, and node attributes are propagated from G and H
-    to the union graph.  If a graph attribute is present in both
-    G and H the value from H is used.
-
-    See Also
-    --------
-    disjoint_union
-    """
-    # Union is the same type as G
-    R = G.__class__()
-    if name is None:
-        name = "union( %s, %s )"%(G.name,H.name)
-    R.name = name
-
-    # rename graph to obtain disjoint node labels
-    def add_prefix(graph, prefix):
-        if prefix is None:
-            return graph
-        def label(x):
-            if is_string_like(x):
-                name=prefix+x
-            else:
-                name=prefix+repr(x)
-            return name
-        return nx.relabel_nodes(graph, label)
-    G = add_prefix(G,rename[0])
-    H = add_prefix(H,rename[1])
-    if set(G) & set(H):
-        raise nx.NetworkXError('The node sets of G and H are not disjoint.',
-                               'Use appropriate rename=(Gprefix,Hprefix)'
-                               'or use disjoint_union(G,H).')
-    if G.is_multigraph():
-        G_edges = G.edges_iter(keys=True, data=True)
-    else:
-        G_edges = G.edges_iter(data=True)
-    if H.is_multigraph():
-        H_edges = H.edges_iter(keys=True, data=True)
-    else:
-        H_edges = H.edges_iter(data=True)
-
-    # add nodes
-    R.add_nodes_from(G)
-    R.add_edges_from(G_edges)
-    # add edges
-    R.add_nodes_from(H)
-    R.add_edges_from(H_edges)
-    # add node attributes
-    R.node.update(G.node)
-    R.node.update(H.node)
-    # add graph attributes, H attributes take precedent over G attributes
-    R.graph.update(G.graph)
-    R.graph.update(H.graph)
-
-
-    return R
-
-def disjoint_union(G,H):
-    """ Return the disjoint union of graphs G and H.
-
-    This algorithm forces distinct integer node labels.
-
-    Parameters
-    ----------
-    G,H : graph
-       A NetworkX graph
-
-    Returns
-    -------
-    U : A union graph with the same type as G.
-
-    Notes
-    -----
-    A new graph is created, of the same class as G.  It is recommended
-    that G and H be either both directed or both undirected.
-
-    The nodes of G are relabeled 0 to len(G)-1, and the nodes of H are
-    relabeled len(G) to len(G)+len(H)-1.
-
-    Graph, edge, and node attributes are propagated from G and H
-    to the union graph.  If a graph attribute is present in both
-    G and H the value from H is used.
-    """
-    R1=nx.convert_node_labels_to_integers(G)
-    R2=nx.convert_node_labels_to_integers(H,first_label=len(R1))
-    R=union(R1,R2)
-    R.name="disjoint_union( %s, %s )"%(G.name,H.name)
-    R.graph.update(G.graph)
-    R.graph.update(H.graph)
-    return R
-
-
-def intersection(G, H):
-    """Return a new graph that contains only the edges that exist in
-    both G and H.
-
-    The node sets of H and G must be the same.
-
-    Parameters
-    ----------
-    G,H : graph
-       A NetworkX graph.  G and H must have the same node sets.
-
-    Returns
-    -------
-    GH : A new graph with the same type as G.
-
-    Notes
-    -----
-    Attributes from the graph, nodes, and edges are not copied to the new
-    graph.  If you want a new graph of the intersection of G and H
-    with the attributes (including edge data) from G use remove_nodes_from()
-    as follows
-
-    >>> G=nx.path_graph(3)
-    >>> H=nx.path_graph(5)
-    >>> R=G.copy()
-    >>> R.remove_nodes_from(n for n in G if n not in H)
-    """
-    # create new graph
-    R=nx.create_empty_copy(G)
-
-    R.name="Intersection of (%s and %s)"%(G.name, H.name)
-
-    if set(G)!=set(H):
-        raise nx.NetworkXError("Node sets of graphs are not equal")
-
-    if G.number_of_edges()<=H.number_of_edges():
-        if G.is_multigraph():
-            edges=G.edges_iter(keys=True)
-        else:
-            edges=G.edges_iter()
-        for e in edges:
-            if H.has_edge(*e):
-                R.add_edge(*e)
-    else:
-        if H.is_multigraph():
-            edges=H.edges_iter(keys=True)
-        else:
-            edges=H.edges_iter()
-        for e in edges:
-            if G.has_edge(*e):
-                R.add_edge(*e)
-
-    return R
-
-def difference(G, H):
-    """Return a new graph that contains the edges that exist in G but not in H.
-
-    The node sets of H and G must be the same.
-
-    Parameters
-    ----------
-    G,H : graph
-       A NetworkX graph.  G and H must have the same node sets.
-
-    Returns
-    -------
-    D : A new graph with the same type as G.
-
-    Notes
-    -----
-    Attributes from the graph, nodes, and edges are not copied to the new
-    graph.  If you want a new graph of the difference of G and H with
-    with the attributes (including edge data) from G use remove_nodes_from()
-    as follows:
-
-    >>> G=nx.path_graph(3)
-    >>> H=nx.path_graph(5)
-    >>> R=G.copy()
-    >>> R.remove_nodes_from(n for n in G if n in H)
-    """
-    # create new graph
-    R=nx.create_empty_copy(G)
-    R.name="Difference of (%s and %s)"%(G.name, H.name)
-
-    if set(G)!=set(H):
-        raise nx.NetworkXError("Node sets of graphs not equal")
-
-    if G.is_multigraph():
-        edges=G.edges_iter(keys=True)
-    else:
-        edges=G.edges_iter()
-    for e in edges:
-        if not H.has_edge(*e):
-            R.add_edge(*e)
-    return R
-
-def symmetric_difference(G, H):
-    """Return new graph with edges that exist in either G or H but not both.
-
-    The node sets of H and G must be the same.
-
-    Parameters
-    ----------
-    G,H : graph
-       A NetworkX graph.  G and H must have the same node sets.
-
-    Returns
-    -------
-    D : A new graph with the same type as G.
-
-    Notes
-    -----
-    Attributes from the graph, nodes, and edges are not copied to the new
-    graph.
-    """
-    # create new graph
-    R=nx.create_empty_copy(G)
-    R.name="Symmetric difference of (%s and %s)"%(G.name, H.name)
-
-    if set(G)!=set(H):
-        raise nx.NetworkXError("Node sets of graphs not equal")
-
-    gnodes=set(G) # set of nodes in G
-    hnodes=set(H) # set of nodes in H
-    nodes=gnodes.symmetric_difference(hnodes)
-    R.add_nodes_from(nodes)
-
-    if G.is_multigraph():
-        edges=G.edges_iter(keys=True)
-    else:
-        edges=G.edges_iter()
-    # we could copy the data here but then this function doesn't
-    # match intersection and difference
-    for e in edges:
-        if not H.has_edge(*e):
-            R.add_edge(*e)
-
-    if H.is_multigraph():
-        edges=H.edges_iter(keys=True)
-    else:
-        edges=H.edges_iter()
-    for e in edges:
-        if not G.has_edge(*e):
-            R.add_edge(*e)
-    return R
-
-def compose(G, H, name=None):
-    """Return a new graph of G composed with H.
-
-    Composition is the simple union of the node sets and edge sets.
-    The node sets of G and H need not be disjoint.
-
-    Parameters
-    ----------
-    G,H : graph
-       A NetworkX graph
-
-    name : string
-       Specify name for new graph
-
-    Returns
-    -------
-    C: A new graph  with the same type as G
-
-    Notes
-    -----
-    It is recommended that G and H be either both directed or both undirected.
-    Attributes from H take precedent over attributes from G.
-    """
-    if name is None:
-        name="compose( %s, %s )"%(G.name,H.name)
-    R=G.__class__()
-    R.name=name
-    R.add_nodes_from(H.nodes())
-    R.add_nodes_from(G.nodes())
-    if H.is_multigraph():
-        R.add_edges_from(H.edges_iter(keys=True,data=True))
-    else:
-        R.add_edges_from(H.edges_iter(data=True))
-    if G.is_multigraph():
-        R.add_edges_from(G.edges_iter(keys=True,data=True))
-    else:
-        R.add_edges_from(G.edges_iter(data=True))
-
-    # add node attributes, H attributes take precedent over G attributes
-    R.node.update(G.node)
-    R.node.update(H.node)
-    # add graph attributes, H attributes take precedent over G attributes
-    R.graph.update(G.graph)
-    R.graph.update(H.graph)
-    return R
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/operators/product.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/operators/product.py
deleted file mode 100644
index 0fa8a17..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/operators/product.py
+++ /dev/null
@@ -1,330 +0,0 @@
-"""
-Graph products.
-"""
-#    Copyright (C) 2011 by 
-#    Aric Hagberg <hagberg@lanl.gov>
-#    Dan Schult <dschult@colgate.edu>
-#    Pieter Swart <swart@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-import networkx as nx
-from itertools import product
-
-__author__ = """\n""".join(['Aric Hagberg (hagberg@lanl.gov)',
-                            'Pieter Swart (swart@lanl.gov)',
-                            'Dan Schult(dschult@colgate.edu)'
-                            'Ben Edwards(bedwards@cs.unm.edu)'])
-
-__all__ = ['tensor_product','cartesian_product',
-           'lexicographic_product', 'strong_product']
-
-def _dict_product(d1,d2):
-    return dict((k,(d1.get(k),d2.get(k))) for k in set(d1)|set(d2))
-
-
-# Generators for producting graph products
-def _node_product(G,H):
-    for u,v in product(G, H):
-        yield ((u,v), _dict_product(G.node[u], H.node[v]))
-
-def _directed_edges_cross_edges(G,H):
-    if not G.is_multigraph() and not H.is_multigraph():
-        for u,v,c in G.edges_iter(data=True):
-            for x,y,d in H.edges_iter(data=True):
-                yield (u,x),(v,y),_dict_product(c,d)
-    if not G.is_multigraph() and H.is_multigraph():
-        for u,v,c in G.edges_iter(data=True):
-            for x,y,k,d in H.edges_iter(data=True,keys=True):
-                yield (u,x),(v,y),k,_dict_product(c,d)
-    if G.is_multigraph() and not H.is_multigraph():
-        for u,v,k,c in G.edges_iter(data=True,keys=True):
-            for x,y,d in H.edges_iter(data=True):
-                yield (u,x),(v,y),k,_dict_product(c,d)
-    if G.is_multigraph() and H.is_multigraph():
-        for u,v,j,c in G.edges_iter(data=True,keys=True):
-            for x,y,k,d in H.edges_iter(data=True,keys=True):
-                yield (u,x),(v,y),(j,k),_dict_product(c,d)
-
-def _undirected_edges_cross_edges(G,H):
-    if not G.is_multigraph() and not H.is_multigraph():
-        for u,v,c in G.edges_iter(data=True):
-            for x,y,d in H.edges_iter(data=True):
-                yield (v,x),(u,y),_dict_product(c,d)
-    if not G.is_multigraph() and H.is_multigraph():
-        for u,v,c in G.edges_iter(data=True):
-            for x,y,k,d in H.edges_iter(data=True,keys=True):
-                yield (v,x),(u,y),k,_dict_product(c,d)
-    if G.is_multigraph() and not H.is_multigraph():
-        for u,v,k,c in G.edges_iter(data=True,keys=True):
-            for x,y,d in H.edges_iter(data=True):
-                yield (v,x),(u,y),k,_dict_product(c,d)
-    if G.is_multigraph() and H.is_multigraph():
-        for u,v,j,c in G.edges_iter(data=True,keys=True):
-            for x,y,k,d in H.edges_iter(data=True,keys=True):
-                yield (v,x),(u,y),(j,k),_dict_product(c,d)
-
-def _edges_cross_nodes(G,H):
-    if G.is_multigraph():
-        for u,v,k,d in G.edges_iter(data=True,keys=True):
-            for x in H:
-                yield (u,x),(v,x),k,d
-    else:
-        for u,v,d in G.edges_iter(data=True):
-            for x in H:
-                if H.is_multigraph():
-                    yield (u,x),(v,x),None,d
-                else:
-                    yield (u,x),(v,x),d
-
-
-def _nodes_cross_edges(G,H):
-    if H.is_multigraph():
-        for x in G:
-            for u,v,k,d in H.edges_iter(data=True,keys=True):
-                yield (x,u),(x,v),k,d
-    else:
-        for x in G:
-            for u,v,d in H.edges_iter(data=True):
-                if G.is_multigraph():
-                    yield (x,u),(x,v),None,d
-                else:
-                    yield (x,u),(x,v),d
-
-def _edges_cross_nodes_and_nodes(G,H):
-    if G.is_multigraph():
-        for u,v,k,d in G.edges_iter(data=True,keys=True):
-            for x in H:
-                for y in H:
-                    yield (u,x),(v,y),k,d
-    else:
-        for u,v,d in G.edges_iter(data=True):
-            for x in H:
-                for y in H:
-                    if H.is_multigraph():
-                        yield (u,x),(v,y),None,d
-                    else:
-                        yield (u,x),(v,y),d
-
-def _init_product_graph(G,H):
-    if not G.is_directed() == H.is_directed():
-        raise nx.NetworkXError("G and H must be both directed or",
-                               "both undirected")
-    if G.is_multigraph() or H.is_multigraph():
-        GH = nx.MultiGraph()
-    else:
-        GH = nx.Graph()
-    if G.is_directed():
-        GH = GH.to_directed()
-    return GH
-
-
-def tensor_product(G,H):
-    r"""Return the tensor product of G and H.
-
-    The tensor product P of the graphs G and H has a node set that
-    is the Cartesian product of the node sets, $V(P)=V(G) \times V(H)$.
-    P has an edge ((u,v),(x,y)) if and only if (u,v) is an edge in G
-    and (x,y) is an edge in H.
-
-    Sometimes referred to as the categorical product. 
-
-
-    Parameters
-    ----------
-    G, H: graphs
-     Networkx graphs. 
-
-    Returns
-    -------
-    P: NetworkX graph
-     The tensor product of G and H. P will be a multi-graph if either G
-     or H is a multi-graph. Will be a directed if G and H are directed,
-     and undirected if G and H are undirected.
-
-    Raises
-    ------
-    NetworkXError
-     If G and H are not both directed or both undirected.
-
-    Notes
-    -----
-    Node attributes in P are two-tuple of the G and H node attributes.
-    Missing attributes are assigned None.
-
-    For example
-    >>> G = nx.Graph()
-    >>> H = nx.Graph()
-    >>> G.add_node(0,a1=True)
-    >>> H.add_node('a',a2='Spam')
-    >>> P = nx.tensor_product(G,H)
-    >>> P.nodes()
-    [(0, 'a')]
-
-    Edge attributes and edge keys (for multigraphs) are also copied to the
-    new product graph
-    """
-    GH = _init_product_graph(G,H)
-    GH.add_nodes_from(_node_product(G,H))
-    GH.add_edges_from(_directed_edges_cross_edges(G,H))
-    if not GH.is_directed():
-        GH.add_edges_from(_undirected_edges_cross_edges(G,H))
-    GH.name = "Tensor product("+G.name+","+H.name+")"
-    return GH
-
-def cartesian_product(G,H):
-    """Return the Cartesian product of G and H.
-
-    The tensor product P of the graphs G and H has a node set that
-    is the Cartesian product of the node sets, $V(P)=V(G) \times V(H)$.
-    P has an edge ((u,v),(x,y)) if and only if (u,v) is an edge in G 
-    and x==y or  and (x,y) is an edge in H and u==v.
-    and (x,y) is an edge in H.
-
-    Parameters
-    ----------
-    G, H: graphs
-     Networkx graphs. 
-
-    Returns
-    -------
-    P: NetworkX graph
-     The Cartesian product of G and H. P will be a multi-graph if either G
-     or H is a multi-graph. Will be a directed if G and H are directed,
-     and undirected if G and H are undirected.
-
-    Raises
-    ------
-    NetworkXError
-     If G and H are not both directed or both undirected.
-
-    Notes
-    -----
-    Node attributes in P are two-tuple of the G and H node attributes.
-    Missing attributes are assigned None.
-
-    For example
-    >>> G = nx.Graph()
-    >>> H = nx.Graph()
-    >>> G.add_node(0,a1=True)
-    >>> H.add_node('a',a2='Spam')
-    >>> P = nx.cartesian_product(G,H)
-    >>> P.nodes()
-    [(0, 'a')]
-
-    Edge attributes and edge keys (for multigraphs) are also copied to the
-    new product graph
-    """
-    if not G.is_directed() == H.is_directed():
-        raise nx.NetworkXError("G and H must be both directed or",
-                               "both undirected")
-    GH = _init_product_graph(G,H)
-    GH.add_nodes_from(_node_product(G,H))
-    GH.add_edges_from(_edges_cross_nodes(G,H))
-    GH.add_edges_from(_nodes_cross_edges(G,H))
-    GH.name = "Cartesian product("+G.name+","+H.name+")"
-    return GH
-
-def lexicographic_product(G,H):
-    """Return the lexicographic product of G and H.
-
-    The lexicographical product P of the graphs G and H has a node set that
-    is the Cartesian product of the node sets, $V(P)=V(G) \times V(H)$.
-    P has an edge ((u,v),(x,y)) if and only if (u,v) is an edge in G 
-    or u==v and (x,y) is an edge in H.
-
-    Parameters
-    ----------
-    G, H: graphs
-     Networkx graphs. 
-
-    Returns
-    -------
-    P: NetworkX graph
-     The Cartesian product of G and H. P will be a multi-graph if either G
-     or H is a multi-graph. Will be a directed if G and H are directed,
-     and undirected if G and H are undirected.
-
-    Raises
-    ------
-    NetworkXError
-     If G and H are not both directed or both undirected.
-
-    Notes
-    -----
-    Node attributes in P are two-tuple of the G and H node attributes.
-    Missing attributes are assigned None.
-
-    For example
-    >>> G = nx.Graph()
-    >>> H = nx.Graph()
-    >>> G.add_node(0,a1=True)
-    >>> H.add_node('a',a2='Spam')
-    >>> P = nx.lexicographic_product(G,H)
-    >>> P.nodes()
-    [(0, 'a')]
-
-    Edge attributes and edge keys (for multigraphs) are also copied to the
-    new product graph
-    """
-    GH = _init_product_graph(G,H)
-    GH.add_nodes_from(_node_product(G,H))
-    # Edges in G regardless of H designation
-    GH.add_edges_from(_edges_cross_nodes_and_nodes(G,H))
-    # For each x in G, only if there is an edge in H
-    GH.add_edges_from(_nodes_cross_edges(G,H))
-    GH.name = "Lexicographic product("+G.name+","+H.name+")"
-    return GH
-
-def strong_product(G,H):
-    """Return the strong product of G and H.
-
-    The strong product P of the graphs G and H has a node set that
-    is the Cartesian product of the node sets, $V(P)=V(G) \times V(H)$.
-    P has an edge ((u,v),(x,y)) if and only if 
-    u==v and (x,y) is an edge in H, or
-    x==y and (u,v) is an edge in G, or
-    (u,v) is an edge in G and (x,y) is an edge in H.
-
-    Parameters
-    ----------
-    G, H: graphs
-     Networkx graphs. 
-
-    Returns
-    -------
-    P: NetworkX graph
-     The Cartesian product of G and H. P will be a multi-graph if either G
-     or H is a multi-graph. Will be a directed if G and H are directed,
-     and undirected if G and H are undirected.
-
-    Raises
-    ------
-    NetworkXError
-     If G and H are not both directed or both undirected.
-
-    Notes
-    -----
-    Node attributes in P are two-tuple of the G and H node attributes.
-    Missing attributes are assigned None.
-
-    For example
-    >>> G = nx.Graph()
-    >>> H = nx.Graph()
-    >>> G.add_node(0,a1=True)
-    >>> H.add_node('a',a2='Spam')
-    >>> P = nx.strong_product(G,H)
-    >>> P.nodes()
-    [(0, 'a')]
-
-    Edge attributes and edge keys (for multigraphs) are also copied to the
-    new product graph
-    """
-    GH = _init_product_graph(G,H)
-    GH.add_nodes_from(_node_product(G,H))
-    GH.add_edges_from(_nodes_cross_edges(G,H))
-    GH.add_edges_from(_edges_cross_nodes(G,H))
-    GH.add_edges_from(_directed_edges_cross_edges(G,H))
-    if not GH.is_directed():
-        GH.add_edges_from(_undirected_edges_cross_edges(G,H))
-    GH.name = "Strong product("+G.name+","+H.name+")"
-    return GH
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/operators/tests/test_all.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/operators/tests/test_all.py
deleted file mode 100644
index fc4fa4a..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/operators/tests/test_all.py
+++ /dev/null
@@ -1,167 +0,0 @@
-from nose.tools import *
-import networkx as nx
-from networkx.testing import *
-
-def test_union_all_attributes():
-    g = nx.Graph()
-    g.add_node(0, x=4)
-    g.add_node(1, x=5)
-    g.add_edge(0, 1, size=5)
-    g.graph['name'] = 'g'
-
-    h = g.copy()
-    h.graph['name'] = 'h'
-    h.graph['attr'] = 'attr'
-    h.node[0]['x'] = 7
-
-    j = g.copy()
-    j.graph['name'] = 'j'
-    j.graph['attr'] = 'attr'
-    j.node[0]['x'] = 7
-
-    ghj = nx.union_all([g, h, j], rename=('g', 'h', 'j'))
-    assert_equal( set(ghj.nodes()) , set(['h0', 'h1', 'g0', 'g1', 'j0', 'j1']) )
-    for n in ghj:
-        graph, node = n
-        assert_equal( ghj.node[n], eval(graph).node[int(node)] )
-
-    assert_equal(ghj.graph['attr'],'attr')
-    assert_equal(ghj.graph['name'],'j') # j graph attributes take precendent
-
-
-
-def test_intersection_all():
-    G=nx.Graph()
-    H=nx.Graph()
-    R=nx.Graph()
-    G.add_nodes_from([1,2,3,4])
-    G.add_edge(1,2)
-    G.add_edge(2,3)
-    H.add_nodes_from([1,2,3,4])
-    H.add_edge(2,3)
-    H.add_edge(3,4)
-    R.add_nodes_from([1,2,3,4])
-    R.add_edge(2,3)
-    R.add_edge(4,1)
-    I=nx.intersection_all([G,H,R])
-    assert_equal( set(I.nodes()) , set([1,2,3,4]) )
-    assert_equal( sorted(I.edges()) , [(2,3)] )
-
-
-def test_intersection_all_attributes():
-    g = nx.Graph()
-    g.add_node(0, x=4)
-    g.add_node(1, x=5)
-    g.add_edge(0, 1, size=5)
-    g.graph['name'] = 'g'
-
-    h = g.copy()
-    h.graph['name'] = 'h'
-    h.graph['attr'] = 'attr'
-    h.node[0]['x'] = 7
-
-    gh = nx.intersection_all([g, h])
-    assert_equal( set(gh.nodes()) , set(g.nodes()) )
-    assert_equal( set(gh.nodes()) , set(h.nodes()) )
-    assert_equal( sorted(gh.edges()) , sorted(g.edges()) )
-
-    h.remove_node(0)
-    assert_raises(nx.NetworkXError, nx.intersection, g, h)
-
-def test_intersection_all_multigraph_attributes():
-    g = nx.MultiGraph()
-    g.add_edge(0, 1, key=0)
-    g.add_edge(0, 1, key=1)
-    g.add_edge(0, 1, key=2)
-    h = nx.MultiGraph()
-    h.add_edge(0, 1, key=0)
-    h.add_edge(0, 1, key=3)
-    gh = nx.intersection_all([g, h])
-    assert_equal( set(gh.nodes()) , set(g.nodes()) )
-    assert_equal( set(gh.nodes()) , set(h.nodes()) )
-    assert_equal( sorted(gh.edges()) , [(0,1)] )
-    assert_equal( sorted(gh.edges(keys=True)) , [(0,1,0)] )
-
-def test_union_all_and_compose_all():
-    K3=nx.complete_graph(3)
-    P3=nx.path_graph(3)
-
-    G1=nx.DiGraph()
-    G1.add_edge('A','B')
-    G1.add_edge('A','C')
-    G1.add_edge('A','D')
-    G2=nx.DiGraph()
-    G2.add_edge('1','2')
-    G2.add_edge('1','3')
-    G2.add_edge('1','4')
-
-    G=nx.union_all([G1,G2])
-    H=nx.compose_all([G1,G2])
-    assert_edges_equal(G.edges(),H.edges())
-    assert_false(G.has_edge('A','1'))
-    assert_raises(nx.NetworkXError, nx.union, K3, P3)
-    H1=nx.union_all([H,G1],rename=('H','G1'))
-    assert_equal(sorted(H1.nodes()),
-        ['G1A', 'G1B', 'G1C', 'G1D',
-         'H1', 'H2', 'H3', 'H4', 'HA', 'HB', 'HC', 'HD'])
-
-    H2=nx.union_all([H,G2],rename=("H",""))
-    assert_equal(sorted(H2.nodes()),
-        ['1', '2', '3', '4',
-         'H1', 'H2', 'H3', 'H4', 'HA', 'HB', 'HC', 'HD'])
-
-    assert_false(H1.has_edge('NB','NA'))
-
-    G=nx.compose_all([G,G])
-    assert_edges_equal(G.edges(),H.edges())
-
-    G2=nx.union_all([G2,G2],rename=('','copy'))
-    assert_equal(sorted(G2.nodes()),
-        ['1', '2', '3', '4', 'copy1', 'copy2', 'copy3', 'copy4'])
-
-    assert_equal(G2.neighbors('copy4'),[])
-    assert_equal(sorted(G2.neighbors('copy1')),['copy2', 'copy3', 'copy4'])
-    assert_equal(len(G),8)
-    assert_equal(nx.number_of_edges(G),6)
-
-    E=nx.disjoint_union_all([G,G])
-    assert_equal(len(E),16)
-    assert_equal(nx.number_of_edges(E),12)
-
-    E=nx.disjoint_union_all([G1,G2])
-    assert_equal(sorted(E.nodes()),[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
-
-    G1=nx.DiGraph()
-    G1.add_edge('A','B')
-    G2=nx.DiGraph()
-    G2.add_edge(1,2)
-    G3=nx.DiGraph()
-    G3.add_edge(11,22)
-    G4=nx.union_all([G1,G2,G3],rename=("G1","G2","G3"))
-    assert_equal(sorted(G4.nodes()),
-        ['G1A', 'G1B', 'G21', 'G22',
-         'G311', 'G322'])
-
-
-def test_union_all_multigraph():
-    G=nx.MultiGraph()
-    G.add_edge(1,2,key=0)
-    G.add_edge(1,2,key=1)
-    H=nx.MultiGraph()
-    H.add_edge(3,4,key=0)
-    H.add_edge(3,4,key=1)
-    GH=nx.union_all([G,H])
-    assert_equal( set(GH) , set(G)|set(H))
-    assert_equal( set(GH.edges(keys=True)) ,
-        set(G.edges(keys=True))|set(H.edges(keys=True)))
-
-
-def test_input_output():
-    l = [nx.Graph([(1,2)]),nx.Graph([(3,4)])]
-    U = nx.disjoint_union_all(l)
-    assert_equal(len(l),2)
-    C = nx.compose_all(l)
-    assert_equal(len(l),2)
-    l = [nx.Graph([(1,2)]),nx.Graph([(1,2)])]
-    R = nx.intersection_all(l)
-    assert_equal(len(l),2)
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/operators/tests/test_binary.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/operators/tests/test_binary.py
deleted file mode 100644
index 34b7e6e..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/operators/tests/test_binary.py
+++ /dev/null
@@ -1,270 +0,0 @@
-from nose.tools import *
-import networkx as nx
-from networkx import *
-from networkx.testing import *
-
-def test_union_attributes():
-    g = nx.Graph()
-    g.add_node(0, x=4)
-    g.add_node(1, x=5)
-    g.add_edge(0, 1, size=5)
-    g.graph['name'] = 'g'
-
-    h = g.copy()
-    h.graph['name'] = 'h'
-    h.graph['attr'] = 'attr'
-    h.node[0]['x'] = 7
-
-    gh = nx.union(g, h, rename=('g', 'h'))
-    assert_equal( set(gh.nodes()) , set(['h0', 'h1', 'g0', 'g1']) )
-    for n in gh:
-        graph, node = n
-        assert_equal( gh.node[n], eval(graph).node[int(node)] )
-
-    assert_equal(gh.graph['attr'],'attr')
-    assert_equal(gh.graph['name'],'h') # h graph attributes take precendent
-
-def test_intersection():
-    G=nx.Graph()
-    H=nx.Graph()
-    G.add_nodes_from([1,2,3,4])
-    G.add_edge(1,2)
-    G.add_edge(2,3)
-    H.add_nodes_from([1,2,3,4])
-    H.add_edge(2,3)
-    H.add_edge(3,4)
-    I=nx.intersection(G,H)
-    assert_equal( set(I.nodes()) , set([1,2,3,4]) )    
-    assert_equal( sorted(I.edges()) , [(2,3)] )    
-
-
-def test_intersection_attributes():
-    g = nx.Graph()
-    g.add_node(0, x=4)
-    g.add_node(1, x=5)
-    g.add_edge(0, 1, size=5)
-    g.graph['name'] = 'g'
-
-    h = g.copy()
-    h.graph['name'] = 'h'
-    h.graph['attr'] = 'attr'
-    h.node[0]['x'] = 7
-
-    gh = nx.intersection(g, h)
-    assert_equal( set(gh.nodes()) , set(g.nodes()) )
-    assert_equal( set(gh.nodes()) , set(h.nodes()) )
-    assert_equal( sorted(gh.edges()) , sorted(g.edges()) )
-
-    h.remove_node(0)
-    assert_raises(nx.NetworkXError, nx.intersection, g, h)
-
-
-
-def test_intersection_multigraph_attributes():
-    g = nx.MultiGraph()
-    g.add_edge(0, 1, key=0)
-    g.add_edge(0, 1, key=1)
-    g.add_edge(0, 1, key=2)
-    h = nx.MultiGraph()
-    h.add_edge(0, 1, key=0)
-    h.add_edge(0, 1, key=3)
-    gh = nx.intersection(g, h)
-    assert_equal( set(gh.nodes()) , set(g.nodes()) )
-    assert_equal( set(gh.nodes()) , set(h.nodes()) )
-    assert_equal( sorted(gh.edges()) , [(0,1)] )
-    assert_equal( sorted(gh.edges(keys=True)) , [(0,1,0)] )
-
-
-def test_difference():
-    G=nx.Graph()
-    H=nx.Graph()
-    G.add_nodes_from([1,2,3,4])
-    G.add_edge(1,2)
-    G.add_edge(2,3)
-    H.add_nodes_from([1,2,3,4])
-    H.add_edge(2,3)
-    H.add_edge(3,4)
-    D=nx.difference(G,H)
-    assert_equal( set(D.nodes()) , set([1,2,3,4]) )    
-    assert_equal( sorted(D.edges()) , [(1,2)] )    
-    D=nx.difference(H,G)
-    assert_equal( set(D.nodes()) , set([1,2,3,4]) )    
-    assert_equal( sorted(D.edges()) , [(3,4)] )    
-    D=nx.symmetric_difference(G,H)
-    assert_equal( set(D.nodes()) , set([1,2,3,4]) )    
-    assert_equal( sorted(D.edges()) , [(1,2),(3,4)] )    
-
-
-def test_difference2():
-    G=nx.Graph()
-    H=nx.Graph()
-    G.add_nodes_from([1,2,3,4])
-    H.add_nodes_from([1,2,3,4])
-    G.add_edge(1,2)
-    H.add_edge(1,2)
-    G.add_edge(2,3)
-    D=nx.difference(G,H)
-    assert_equal( set(D.nodes()) , set([1,2,3,4]) )    
-    assert_equal( sorted(D.edges()) , [(2,3)] )    
-    D=nx.difference(H,G)
-    assert_equal( set(D.nodes()) , set([1,2,3,4]) )    
-    assert_equal( sorted(D.edges()) , [] )    
-    H.add_edge(3,4)
-    D=nx.difference(H,G)
-    assert_equal( set(D.nodes()) , set([1,2,3,4]) )    
-    assert_equal( sorted(D.edges()) , [(3,4)] )    
-
-
-def test_difference_attributes():
-    g = nx.Graph()
-    g.add_node(0, x=4)
-    g.add_node(1, x=5)
-    g.add_edge(0, 1, size=5)
-    g.graph['name'] = 'g'
-
-    h = g.copy()
-    h.graph['name'] = 'h'
-    h.graph['attr'] = 'attr'
-    h.node[0]['x'] = 7
-
-    gh = nx.difference(g, h)
-    assert_equal( set(gh.nodes()) , set(g.nodes()) )
-    assert_equal( set(gh.nodes()) , set(h.nodes()) )
-    assert_equal( sorted(gh.edges()) , [])
-
-    h.remove_node(0)
-    assert_raises(nx.NetworkXError, nx.intersection, g, h)
-
-def test_difference_multigraph_attributes():
-    g = nx.MultiGraph()
-    g.add_edge(0, 1, key=0)
-    g.add_edge(0, 1, key=1)
-    g.add_edge(0, 1, key=2)
-    h = nx.MultiGraph()
-    h.add_edge(0, 1, key=0)
-    h.add_edge(0, 1, key=3)
-    gh = nx.difference(g, h)
-    assert_equal( set(gh.nodes()) , set(g.nodes()) )
-    assert_equal( set(gh.nodes()) , set(h.nodes()) )
-    assert_equal( sorted(gh.edges()) , [(0,1),(0,1)] )
-    assert_equal( sorted(gh.edges(keys=True)) , [(0,1,1),(0,1,2)] )
-
-
-@raises(nx.NetworkXError)
-def test_difference_raise():
-    G = nx.path_graph(4)
-    H = nx.path_graph(3)
-    GH = nx.difference(G, H)
-
-def test_symmetric_difference_multigraph():
-    g = nx.MultiGraph()
-    g.add_edge(0, 1, key=0)
-    g.add_edge(0, 1, key=1)
-    g.add_edge(0, 1, key=2)
-    h = nx.MultiGraph()
-    h.add_edge(0, 1, key=0)
-    h.add_edge(0, 1, key=3)
-    gh = nx.symmetric_difference(g, h)
-    assert_equal( set(gh.nodes()) , set(g.nodes()) )
-    assert_equal( set(gh.nodes()) , set(h.nodes()) )
-    assert_equal( sorted(gh.edges()) , 3*[(0,1)] )
-    assert_equal( sorted(sorted(e) for e in gh.edges(keys=True)), 
-                  [[0,1,1],[0,1,2],[0,1,3]] )
-
-@raises(nx.NetworkXError)
-def test_symmetric_difference_raise():
-    G = nx.path_graph(4)
-    H = nx.path_graph(3)
-    GH = nx.symmetric_difference(G, H)
-
-def test_union_and_compose():
-    K3=complete_graph(3)
-    P3=path_graph(3)
-
-    G1=nx.DiGraph()
-    G1.add_edge('A','B')
-    G1.add_edge('A','C')
-    G1.add_edge('A','D')
-    G2=nx.DiGraph()
-    G2.add_edge('1','2')
-    G2.add_edge('1','3')
-    G2.add_edge('1','4')
-
-    G=union(G1,G2)
-    H=compose(G1,G2)
-    assert_edges_equal(G.edges(),H.edges())
-    assert_false(G.has_edge('A',1))
-    assert_raises(nx.NetworkXError, nx.union, K3, P3)
-    H1=union(H,G1,rename=('H','G1'))
-    assert_equal(sorted(H1.nodes()),
-                 ['G1A', 'G1B', 'G1C', 'G1D', 
-                  'H1', 'H2', 'H3', 'H4', 'HA', 'HB', 'HC', 'HD'])
-
-    H2=union(H,G2,rename=("H",""))
-    assert_equal(sorted(H2.nodes()),
-                 ['1', '2', '3', '4', 
-                  'H1', 'H2', 'H3', 'H4', 'HA', 'HB', 'HC', 'HD'])
-
-    assert_false(H1.has_edge('NB','NA'))
-
-    G=compose(G,G)
-    assert_edges_equal(G.edges(),H.edges())
-
-    G2=union(G2,G2,rename=('','copy'))
-    assert_equal(sorted(G2.nodes()),
-                 ['1', '2', '3', '4', 'copy1', 'copy2', 'copy3', 'copy4'])
-
-    assert_equal(G2.neighbors('copy4'),[])
-    assert_equal(sorted(G2.neighbors('copy1')),['copy2', 'copy3', 'copy4'])
-    assert_equal(len(G),8)
-    assert_equal(number_of_edges(G),6)
-
-    E=disjoint_union(G,G)
-    assert_equal(len(E),16)
-    assert_equal(number_of_edges(E),12)
-
-    E=disjoint_union(G1,G2)
-    assert_equal(sorted(E.nodes()),[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
-
-
-def test_union_multigraph():
-    G=nx.MultiGraph()
-    G.add_edge(1,2,key=0)
-    G.add_edge(1,2,key=1)
-    H=nx.MultiGraph()
-    H.add_edge(3,4,key=0)
-    H.add_edge(3,4,key=1)
-    GH=nx.union(G,H)
-    assert_equal( set(GH) , set(G)|set(H))
-    assert_equal( set(GH.edges(keys=True)) , 
-                  set(G.edges(keys=True))|set(H.edges(keys=True)))
-
-def test_disjoint_union_multigraph():
-    G=nx.MultiGraph()
-    G.add_edge(0,1,key=0)
-    G.add_edge(0,1,key=1)
-    H=nx.MultiGraph()
-    H.add_edge(2,3,key=0)
-    H.add_edge(2,3,key=1)
-    GH=nx.disjoint_union(G,H)
-    assert_equal( set(GH) , set(G)|set(H))
-    assert_equal( set(GH.edges(keys=True)) , 
-                  set(G.edges(keys=True))|set(H.edges(keys=True)))
-
-
-def test_compose_multigraph():
-    G=nx.MultiGraph()
-    G.add_edge(1,2,key=0)
-    G.add_edge(1,2,key=1)
-    H=nx.MultiGraph()
-    H.add_edge(3,4,key=0)
-    H.add_edge(3,4,key=1)
-    GH=nx.compose(G,H)
-    assert_equal( set(GH) , set(G)|set(H))
-    assert_equal( set(GH.edges(keys=True)) , 
-                  set(G.edges(keys=True))|set(H.edges(keys=True)))
-    H.add_edge(1,2,key=2)
-    GH=nx.compose(G,H)
-    assert_equal( set(GH) , set(G)|set(H))
-    assert_equal( set(GH.edges(keys=True)) , 
-                  set(G.edges(keys=True))|set(H.edges(keys=True)))    
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/operators/tests/test_product.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/operators/tests/test_product.py
deleted file mode 100644
index b157aac..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/operators/tests/test_product.py
+++ /dev/null
@@ -1,334 +0,0 @@
-import networkx as nx
-from networkx import tensor_product,cartesian_product,lexicographic_product,strong_product
-from nose.tools import assert_raises, assert_true, assert_equal, raises
-
-@raises(nx.NetworkXError)
-def test_tensor_product_raises():
-    P = tensor_product(nx.DiGraph(),nx.Graph())
-
-def test_tensor_product_null():
-    null=nx.null_graph()
-    empty10=nx.empty_graph(10)
-    K3=nx.complete_graph(3)
-    K10=nx.complete_graph(10)
-    P3=nx.path_graph(3)
-    P10=nx.path_graph(10)
-    # null graph
-    G=tensor_product(null,null)
-    assert_true(nx.is_isomorphic(G,null))
-    # null_graph X anything = null_graph and v.v.
-    G=tensor_product(null,empty10)
-    assert_true(nx.is_isomorphic(G,null))
-    G=tensor_product(null,K3)
-    assert_true(nx.is_isomorphic(G,null))
-    G=tensor_product(null,K10)
-    assert_true(nx.is_isomorphic(G,null))
-    G=tensor_product(null,P3)
-    assert_true(nx.is_isomorphic(G,null))
-    G=tensor_product(null,P10)
-    assert_true(nx.is_isomorphic(G,null))
-    G=tensor_product(empty10,null)
-    assert_true(nx.is_isomorphic(G,null))
-    G=tensor_product(K3,null)
-    assert_true(nx.is_isomorphic(G,null))
-    G=tensor_product(K10,null)
-    assert_true(nx.is_isomorphic(G,null))
-    G=tensor_product(P3,null)
-    assert_true(nx.is_isomorphic(G,null))
-    G=tensor_product(P10,null)
-    assert_true(nx.is_isomorphic(G,null))
-
-def test_tensor_product_size():
-    P5 = nx.path_graph(5)
-    K3 = nx.complete_graph(3)
-    K5 = nx.complete_graph(5)
-    
-    G=tensor_product(P5,K3)
-    assert_equal(nx.number_of_nodes(G),5*3)
-    G=tensor_product(K3,K5)
-    assert_equal(nx.number_of_nodes(G),3*5)
-
-
-def test_tensor_product_combinations():
-    # basic smoke test, more realistic tests would be usefule
-    P5 = nx.path_graph(5)
-    K3 = nx.complete_graph(3)
-    G=tensor_product(P5,K3)
-    assert_equal(nx.number_of_nodes(G),5*3)
-    G=tensor_product(P5,nx.MultiGraph(K3))
-    assert_equal(nx.number_of_nodes(G),5*3)
-    G=tensor_product(nx.MultiGraph(P5),K3)
-    assert_equal(nx.number_of_nodes(G),5*3)
-    G=tensor_product(nx.MultiGraph(P5),nx.MultiGraph(K3))
-    assert_equal(nx.number_of_nodes(G),5*3)
-
-    G=tensor_product(nx.DiGraph(P5),nx.DiGraph(K3))
-    assert_equal(nx.number_of_nodes(G),5*3)
-
-
-def test_tensor_product_classic_result():
-    K2 = nx.complete_graph(2)
-    G = nx.petersen_graph()
-    G = tensor_product(G,K2)
-    assert_true(nx.is_isomorphic(G,nx.desargues_graph()))
-
-    G = nx.cycle_graph(5)
-    G = tensor_product(G,K2)
-    assert_true(nx.is_isomorphic(G,nx.cycle_graph(10)))
-
-    G = nx.tetrahedral_graph()
-    G = tensor_product(G,K2)
-    assert_true(nx.is_isomorphic(G,nx.cubical_graph()))
-
-def test_tensor_product_random():
-    G = nx.erdos_renyi_graph(10,2/10.)
-    H = nx.erdos_renyi_graph(10,2/10.)
-    GH = tensor_product(G,H)
-
-    for (u_G,u_H) in GH.nodes_iter():
-        for (v_G,v_H) in GH.nodes_iter():
-            if H.has_edge(u_H,v_H) and G.has_edge(u_G,v_G):
-                assert_true(GH.has_edge((u_G,u_H),(v_G,v_H)))
-            else:
-                assert_true(not GH.has_edge((u_G,u_H),(v_G,v_H)))
-
-
-def test_cartesian_product_multigraph():
-    G=nx.MultiGraph()
-    G.add_edge(1,2,key=0)
-    G.add_edge(1,2,key=1)
-    H=nx.MultiGraph()
-    H.add_edge(3,4,key=0)
-    H.add_edge(3,4,key=1)
-    GH=cartesian_product(G,H)
-    assert_equal( set(GH) , set([(1, 3), (2, 3), (2, 4), (1, 4)]))
-    assert_equal( set(GH.edges(keys=True)) ,
-                  set([((1, 3), (2, 3), 0), ((1, 3), (2, 3), 1), 
-                       ((1, 3), (1, 4), 0), ((1, 3), (1, 4), 1), 
-                       ((2, 3), (2, 4), 0), ((2, 3), (2, 4), 1), 
-                       ((2, 4), (1, 4), 0), ((2, 4), (1, 4), 1)]))    
-
-@raises(nx.NetworkXError)
-def test_cartesian_product_raises():
-    P = cartesian_product(nx.DiGraph(),nx.Graph())
-
-def test_cartesian_product_null():
-    null=nx.null_graph()
-    empty10=nx.empty_graph(10)
-    K3=nx.complete_graph(3)
-    K10=nx.complete_graph(10)
-    P3=nx.path_graph(3)
-    P10=nx.path_graph(10)
-    # null graph
-    G=cartesian_product(null,null)
-    assert_true(nx.is_isomorphic(G,null))
-    # null_graph X anything = null_graph and v.v.
-    G=cartesian_product(null,empty10)
-    assert_true(nx.is_isomorphic(G,null))
-    G=cartesian_product(null,K3)
-    assert_true(nx.is_isomorphic(G,null))
-    G=cartesian_product(null,K10)
-    assert_true(nx.is_isomorphic(G,null))
-    G=cartesian_product(null,P3)
-    assert_true(nx.is_isomorphic(G,null))
-    G=cartesian_product(null,P10)
-    assert_true(nx.is_isomorphic(G,null))
-    G=cartesian_product(empty10,null)
-    assert_true(nx.is_isomorphic(G,null))
-    G=cartesian_product(K3,null)
-    assert_true(nx.is_isomorphic(G,null))
-    G=cartesian_product(K10,null)
-    assert_true(nx.is_isomorphic(G,null))
-    G=cartesian_product(P3,null)
-    assert_true(nx.is_isomorphic(G,null))
-    G=cartesian_product(P10,null)
-    assert_true(nx.is_isomorphic(G,null))
-
-def test_cartesian_product_size():
-    # order(GXH)=order(G)*order(H)
-    K5=nx.complete_graph(5)
-    P5=nx.path_graph(5)
-    K3=nx.complete_graph(3)
-    G=cartesian_product(P5,K3)
-    assert_equal(nx.number_of_nodes(G),5*3)
-    assert_equal(nx.number_of_edges(G),
-                 nx.number_of_edges(P5)*nx.number_of_nodes(K3)+
-                 nx.number_of_edges(K3)*nx.number_of_nodes(P5))
-    G=cartesian_product(K3,K5)
-    assert_equal(nx.number_of_nodes(G),3*5)
-    assert_equal(nx.number_of_edges(G),
-                 nx.number_of_edges(K5)*nx.number_of_nodes(K3)+
-                 nx.number_of_edges(K3)*nx.number_of_nodes(K5))
-
-def test_cartesian_product_classic():
-    # test some classic product graphs
-    P2 = nx.path_graph(2)
-    P3 = nx.path_graph(3)
-    # cube = 2-path X 2-path
-    G=cartesian_product(P2,P2)
-    G=cartesian_product(P2,G)
-    assert_true(nx.is_isomorphic(G,nx.cubical_graph()))
-
-    # 3x3 grid
-    G=cartesian_product(P3,P3)
-    assert_true(nx.is_isomorphic(G,nx.grid_2d_graph(3,3)))
-
-def test_cartesian_product_random():
-    G = nx.erdos_renyi_graph(10,2/10.)
-    H = nx.erdos_renyi_graph(10,2/10.)
-    GH = cartesian_product(G,H)
-
-    for (u_G,u_H) in GH.nodes_iter():
-        for (v_G,v_H) in GH.nodes_iter():
-            if (u_G==v_G and H.has_edge(u_H,v_H)) or \
-               (u_H==v_H and G.has_edge(u_G,v_G)):
-                assert_true(GH.has_edge((u_G,u_H),(v_G,v_H)))
-            else:
-                assert_true(not GH.has_edge((u_G,u_H),(v_G,v_H)))
-
-@raises(nx.NetworkXError)
-def test_lexicographic_product_raises():
-    P=lexicographic_product(nx.DiGraph(),nx.Graph())
-
-def test_lexicographic_product_null():
-    null=nx.null_graph()
-    empty10=nx.empty_graph(10)
-    K3=nx.complete_graph(3)
-    K10=nx.complete_graph(10)
-    P3=nx.path_graph(3)
-    P10=nx.path_graph(10)
-    # null graph
-    G=lexicographic_product(null,null)
-    assert_true(nx.is_isomorphic(G,null))
-    # null_graph X anything = null_graph and v.v.
-    G=lexicographic_product(null,empty10)
-    assert_true(nx.is_isomorphic(G,null))
-    G=lexicographic_product(null,K3)
-    assert_true(nx.is_isomorphic(G,null))
-    G=lexicographic_product(null,K10)
-    assert_true(nx.is_isomorphic(G,null))
-    G=lexicographic_product(null,P3)
-    assert_true(nx.is_isomorphic(G,null))
-    G=lexicographic_product(null,P10)
-    assert_true(nx.is_isomorphic(G,null))
-    G=lexicographic_product(empty10,null)
-    assert_true(nx.is_isomorphic(G,null))
-    G=lexicographic_product(K3,null)
-    assert_true(nx.is_isomorphic(G,null))
-    G=lexicographic_product(K10,null)
-    assert_true(nx.is_isomorphic(G,null))
-    G=lexicographic_product(P3,null)
-    assert_true(nx.is_isomorphic(G,null))
-    G=lexicographic_product(P10,null)
-    assert_true(nx.is_isomorphic(G,null))
-
-def test_lexicographic_product_size():
-    K5=nx.complete_graph(5)
-    P5=nx.path_graph(5)
-    K3=nx.complete_graph(3)
-    G=lexicographic_product(P5,K3)
-    assert_equal(nx.number_of_nodes(G),5*3)
-    G=lexicographic_product(K3,K5)
-    assert_equal(nx.number_of_nodes(G),3*5)
-
-def test_lexicographic_product_combinations():
-    P5=nx.path_graph(5)
-    K3=nx.complete_graph(3)
-    G=lexicographic_product(P5,K3)
-    assert_equal(nx.number_of_nodes(G),5*3)
-    G=lexicographic_product(nx.MultiGraph(P5),K3)
-    assert_equal(nx.number_of_nodes(G),5*3)
-    G=lexicographic_product(P5,nx.MultiGraph(K3))
-    assert_equal(nx.number_of_nodes(G),5*3)
-    G=lexicographic_product(nx.MultiGraph(P5),nx.MultiGraph(K3))
-    assert_equal(nx.number_of_nodes(G),5*3)
-
-
-
-
-    #No classic easily found classic results for lexicographic product
-def test_lexicographic_product_random():
-    G = nx.erdos_renyi_graph(10,2/10.)
-    H = nx.erdos_renyi_graph(10,2/10.)
-    GH = lexicographic_product(G,H)
-
-    for (u_G,u_H) in GH.nodes_iter():
-        for (v_G,v_H) in GH.nodes_iter():
-            if G.has_edge(u_G,v_G) or (u_G==v_G and H.has_edge(u_H,v_H)):
-                assert_true(GH.has_edge((u_G,u_H),(v_G,v_H)))
-            else:
-                assert_true(not GH.has_edge((u_G,u_H),(v_G,v_H)))
-
-@raises(nx.NetworkXError)
-def test_strong_product_raises():
-    P = strong_product(nx.DiGraph(),nx.Graph())
-
-def test_strong_product_null():
-    null=nx.null_graph()
-    empty10=nx.empty_graph(10)
-    K3=nx.complete_graph(3)
-    K10=nx.complete_graph(10)
-    P3=nx.path_graph(3)
-    P10=nx.path_graph(10)
-    # null graph
-    G=strong_product(null,null)
-    assert_true(nx.is_isomorphic(G,null))
-    # null_graph X anything = null_graph and v.v.
-    G=strong_product(null,empty10)
-    assert_true(nx.is_isomorphic(G,null))
-    G=strong_product(null,K3)
-    assert_true(nx.is_isomorphic(G,null))
-    G=strong_product(null,K10)
-    assert_true(nx.is_isomorphic(G,null))
-    G=strong_product(null,P3)
-    assert_true(nx.is_isomorphic(G,null))
-    G=strong_product(null,P10)
-    assert_true(nx.is_isomorphic(G,null))
-    G=strong_product(empty10,null)
-    assert_true(nx.is_isomorphic(G,null))
-    G=strong_product(K3,null)
-    assert_true(nx.is_isomorphic(G,null))
-    G=strong_product(K10,null)
-    assert_true(nx.is_isomorphic(G,null))
-    G=strong_product(P3,null)
-    assert_true(nx.is_isomorphic(G,null))
-    G=strong_product(P10,null)
-    assert_true(nx.is_isomorphic(G,null))
-
-def test_strong_product_size():
-    K5=nx.complete_graph(5)
-    P5=nx.path_graph(5)
-    K3 = nx.complete_graph(3)
-    G=strong_product(P5,K3)
-    assert_equal(nx.number_of_nodes(G),5*3)
-    G=strong_product(K3,K5)
-    assert_equal(nx.number_of_nodes(G),3*5)
-
-def test_strong_product_combinations():
-    P5=nx.path_graph(5)
-    K3 = nx.complete_graph(3)
-    G=strong_product(P5,K3)
-    assert_equal(nx.number_of_nodes(G),5*3)
-    G=strong_product(nx.MultiGraph(P5),K3)
-    assert_equal(nx.number_of_nodes(G),5*3)
-    G=strong_product(P5,nx.MultiGraph(K3))
-    assert_equal(nx.number_of_nodes(G),5*3)
-    G=strong_product(nx.MultiGraph(P5),nx.MultiGraph(K3))
-    assert_equal(nx.number_of_nodes(G),5*3)
-
-
-
-    #No classic easily found classic results for strong product
-def test_strong_product_random():
-    G = nx.erdos_renyi_graph(10,2/10.)
-    H = nx.erdos_renyi_graph(10,2/10.)
-    GH = strong_product(G,H)
-
-    for (u_G,u_H) in GH.nodes_iter():
-        for (v_G,v_H) in GH.nodes_iter():
-            if (u_G==v_G and H.has_edge(u_H,v_H)) or \
-               (u_H==v_H and G.has_edge(u_G,v_G)) or \
-               (G.has_edge(u_G,v_G) and H.has_edge(u_H,v_H)):
-                assert_true(GH.has_edge((u_G,u_H),(v_G,v_H)))
-            else:
-                assert_true(not GH.has_edge((u_G,u_H),(v_G,v_H)))
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/operators/tests/test_unary.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/operators/tests/test_unary.py
deleted file mode 100644
index ea10d75..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/operators/tests/test_unary.py
+++ /dev/null
@@ -1,47 +0,0 @@
-from nose.tools import *
-import networkx as nx
-from networkx import *
-
-
-def test_complement():
-    null=null_graph()
-    empty1=empty_graph(1)
-    empty10=empty_graph(10)
-    K3=complete_graph(3)
-    K5=complete_graph(5)
-    K10=complete_graph(10)
-    P2=path_graph(2)
-    P3=path_graph(3)
-    P5=path_graph(5)
-    P10=path_graph(10)
-    #complement of the complete graph is empty
-
-    G=complement(K3)
-    assert_true(is_isomorphic(G,empty_graph(3)))
-    G=complement(K5)
-    assert_true(is_isomorphic(G,empty_graph(5)))
-    # for any G, G=complement(complement(G))
-    P3cc=complement(complement(P3))
-    assert_true(is_isomorphic(P3,P3cc))
-    nullcc=complement(complement(null))
-    assert_true(is_isomorphic(null,nullcc))
-    b=bull_graph()
-    bcc=complement(complement(b))
-    assert_true(is_isomorphic(b,bcc))
-
-def test_complement_2():
-    G1=nx.DiGraph()
-    G1.add_edge('A','B')
-    G1.add_edge('A','C')
-    G1.add_edge('A','D')
-    G1C=complement(G1)
-    assert_equal(sorted(G1C.edges()),
-                 [('B', 'A'), ('B', 'C'),
-                  ('B', 'D'), ('C', 'A'), ('C', 'B'),
-                  ('C', 'D'), ('D', 'A'), ('D', 'B'), ('D', 'C')])
-
-def test_reverse1():
-    # Other tests for reverse are done by the DiGraph and MultiDigraph.
-    G1=nx.Graph()
-    assert_raises(nx.NetworkXError, nx.reverse, G1)
-
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/operators/unary.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/operators/unary.py
deleted file mode 100644
index fbbb31e..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/operators/unary.py
+++ /dev/null
@@ -1,69 +0,0 @@
-"""Unary operations on graphs"""
-#    Copyright (C) 2004-2012 by
-#    Aric Hagberg <hagberg@lanl.gov>
-#    Dan Schult <dschult@colgate.edu>
-#    Pieter Swart <swart@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-import networkx as nx
-from networkx.utils import is_string_like
-__author__ = """\n""".join(['Aric Hagberg (hagberg@lanl.gov)',
-                           'Pieter Swart (swart@lanl.gov)',
-                           'Dan Schult(dschult@colgate.edu)'])
-__all__ = ['complement', 'reverse']
-
-def complement(G, name=None):
-    """Return the graph complement of G.
-
-    Parameters
-    ----------
-    G : graph
-       A NetworkX graph
-
-    name : string
-       Specify name for new graph
-
-    Returns
-    -------
-    GC : A new graph.
-
-    Notes
-    ------
-    Note that complement() does not create self-loops and also
-    does not produce parallel edges for MultiGraphs.
-
-    Graph, node, and edge data are not propagated to the new graph.
-    """
-    if name is None:
-        name="complement(%s)"%(G.name)
-    R=G.__class__()
-    R.name=name
-    R.add_nodes_from(G)
-    R.add_edges_from( ((n,n2)
-                       for n,nbrs in G.adjacency_iter()
-                       for n2 in G if n2 not in nbrs
-                       if n != n2) )
-    return R
-
-def reverse(G, copy=True):
-    """Return the reverse directed graph of G.
-
-    Parameters
-    ----------
-    G : directed graph
-        A NetworkX directed graph
-    copy : bool
-        If True, then a new graph is returned. If False, then the graph is
-        reversed in place.
-
-    Returns
-    -------
-    H : directed graph
-        The reversed G.
-
-    """
-    if not G.is_directed():
-        raise nx.NetworkXError("Cannot reverse an undirected graph.")
-    else:
-        return G.reverse(copy=copy)
-
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/richclub.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/richclub.py
deleted file mode 100644
index 5701806..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/richclub.py
+++ /dev/null
@@ -1,101 +0,0 @@
-# -*- coding: utf-8 -*-
-import networkx as nx
-__author__ = """\n""".join(['Ben Edwards',
-                            'Aric Hagberg <hagberg@lanl.gov>'])
-
-__all__ = ['rich_club_coefficient']
-
-def rich_club_coefficient(G, normalized=True, Q=100):
-    """Return the rich-club coefficient of the graph G.
-
-    The rich-club coefficient is the ratio, for every degree k, of the
-    number of actual to the number of potential edges for nodes 
-    with degree greater than k: 
-
-    .. math::
-
-        \\phi(k) = \\frac{2 Ek}{Nk(Nk-1)}
-
-    where Nk is the number of nodes with degree larger than k, and Ek
-    be the number of edges among those nodes.
-
-    Parameters
-    ----------
-    G : NetworkX graph 
-    normalized : bool (optional)
-       Normalize using randomized network (see [1]_)
-    Q : float (optional, default=100)
-       If normalized=True build a random network by performing 
-       Q*M double-edge swaps, where M is the number of edges in G,
-       to use as a null-model for normalization.
-
-    Returns
-    -------       
-    rc : dictionary 
-       A dictionary, keyed by degree, with rich club coefficient values.
-
-    Examples
-    --------
-    >>> G = nx.Graph([(0,1),(0,2),(1,2),(1,3),(1,4),(4,5)])
-    >>> rc = nx.rich_club_coefficient(G,normalized=False)
-    >>> rc[0] # doctest: +SKIP 
-    0.4
-
-    Notes
-    ------
-    The rich club definition and algorithm are found in [1]_.  This
-    algorithm ignores any edge weights and is not defined for directed
-    graphs or graphs with parallel edges or self loops.
-
-    Estimates for appropriate values of Q are found in [2]_.
-
-    References
-    ----------
-    .. [1] Julian J. McAuley, Luciano da Fontoura Costa, and Tibério S. Caetano,
-       "The rich-club phenomenon across complex network hierarchies",
-       Applied Physics Letters Vol 91 Issue 8, August 2007.
-       http://arxiv.org/abs/physics/0701290
-    .. [2] R. Milo, N. Kashtan, S. Itzkovitz, M. E. J. Newman, U. Alon,
-       "Uniform generation of random graphs with arbitrary degree 
-       sequences", 2006. http://arxiv.org/abs/cond-mat/0312028
-    """
-    if G.is_multigraph() or G.is_directed():
-        raise Exception('rich_club_coefficient is not implemented for ',
-                        'directed or multiedge graphs.')
-    if len(G.selfloop_edges()) > 0:
-        raise Exception('rich_club_coefficient is not implemented for ',
-                        'graphs with self loops.')
-    rc=_compute_rc(G)
-    if normalized:
-        # make R a copy of G, randomize with Q*|E| double edge swaps
-        # and use rich_club coefficient of R to normalize
-        R = G.copy()
-        E = R.number_of_edges()
-        nx.double_edge_swap(R,Q*E,max_tries=Q*E*10)
-        rcran=_compute_rc(R)
-        for d in rc:
-#            if rcran[d] > 0:
-            rc[d]/=rcran[d]
-    return rc
-
-
-def _compute_rc(G):
-    # compute rich club coefficient for all k degrees in G
-    deghist = nx.degree_histogram(G)
-    total = sum(deghist)
-    # number of nodes with degree > k (omit last entry which is zero)
-    nks = [total-cs for cs in nx.utils.cumulative_sum(deghist) if total-cs > 1]
-    deg=G.degree()
-    edge_degrees=sorted(sorted((deg[u],deg[v])) for u,v in G.edges_iter()) 
-    ek=G.number_of_edges()
-    k1,k2=edge_degrees.pop(0)
-    rc={}
-    for d,nk in zip(range(len(nks)),nks):         
-        while k1 <= d:
-            if len(edge_degrees)==0:
-                break
-            k1,k2=edge_degrees.pop(0)
-            ek-=1
-        rc[d] = 2.0*ek/(nk*(nk-1))
-    return rc
-
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/shortest_paths/__init__.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/shortest_paths/__init__.py
deleted file mode 100644
index 64846eb..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/shortest_paths/__init__.py
+++ /dev/null
@@ -1,6 +0,0 @@
-from networkx.algorithms.shortest_paths.generic import *
-from networkx.algorithms.shortest_paths.unweighted import *
-from networkx.algorithms.shortest_paths.weighted import *
-from networkx.algorithms.shortest_paths.astar import *
-from networkx.algorithms.shortest_paths.dense import *
-
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/shortest_paths/astar.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/shortest_paths/astar.py
deleted file mode 100644
index 7b25d64..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/shortest_paths/astar.py
+++ /dev/null
@@ -1,159 +0,0 @@
-# -*- coding: utf-8 -*-
-"""Shortest paths and path lengths using A* ("A star") algorithm.
-"""
-
-#    Copyright (C) 2004-2011 by
-#    Aric Hagberg <hagberg@lanl.gov>
-#    Dan Schult <dschult@colgate.edu>
-#    Pieter Swart <swart@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-
-from heapq import heappush, heappop
-from networkx import NetworkXError
-import networkx as nx
-
-__author__ = "\n".join(["Salim Fadhley <salimfadhley@gmail.com>",
-                        "Matteo Dell'Amico <matteodellamico@gmail.com>"])
-__all__ = ['astar_path', 'astar_path_length']
-
-
-def astar_path(G, source, target, heuristic=None, weight='weight'):
-    """Return a list of nodes in a shortest path between source and target
-    using the A* ("A-star") algorithm.
-
-    There may be more than one shortest path.  This returns only one.
-
-    Parameters
-    ----------
-    G : NetworkX graph
-
-    source : node
-       Starting node for path
-
-    target : node
-       Ending node for path
-
-    heuristic : function
-       A function to evaluate the estimate of the distance
-       from the a node to the target.  The function takes
-       two nodes arguments and must return a number.
-
-    weight: string, optional (default='weight')
-       Edge data key corresponding to the edge weight.
-
-    Raises
-    ------
-    NetworkXNoPath
-        If no path exists between source and target.
-
-    Examples
-    --------
-    >>> G=nx.path_graph(5)
-    >>> print(nx.astar_path(G,0,4))
-    [0, 1, 2, 3, 4]
-    >>> G=nx.grid_graph(dim=[3,3])  # nodes are two-tuples (x,y)
-    >>> def dist(a, b):
-    ...    (x1, y1) = a
-    ...    (x2, y2) = b
-    ...    return ((x1 - x2) ** 2 + (y1 - y2) ** 2) ** 0.5
-    >>> print(nx.astar_path(G,(0,0),(2,2),dist))
-    [(0, 0), (0, 1), (1, 1), (1, 2), (2, 2)]
-
-
-    See Also
-    --------
-    shortest_path, dijkstra_path
-
-    """
-    if G.is_multigraph():
-        raise NetworkXError("astar_path() not implemented for Multi(Di)Graphs")
-
-    if heuristic is None:
-        # The default heuristic is h=0 - same as Dijkstra's algorithm
-        def heuristic(u, v):
-            return 0
-    # The queue stores priority, node, cost to reach, and parent.
-    # Uses Python heapq to keep in priority order.
-    # Add each node's hash to the queue to prevent the underlying heap from
-    # attempting to compare the nodes themselves. The hash breaks ties in the
-    # priority and is guarenteed unique for all nodes in the graph.
-    queue = [(0, hash(source), source, 0, None)]
-
-    # Maps enqueued nodes to distance of discovered paths and the
-    # computed heuristics to target. We avoid computing the heuristics
-    # more than once and inserting the node into the queue too many times.
-    enqueued = {}
-    # Maps explored nodes to parent closest to the source.
-    explored = {}
-
-    while queue:
-        # Pop the smallest item from queue.
-        _, __, curnode, dist, parent = heappop(queue)
-
-        if curnode == target:
-            path = [curnode]
-            node = parent
-            while node is not None:
-                path.append(node)
-                node = explored[node]
-            path.reverse()
-            return path
-
-        if curnode in explored:
-            continue
-
-        explored[curnode] = parent
-
-        for neighbor, w in G[curnode].items():
-            if neighbor in explored:
-                continue
-            ncost = dist + w.get(weight, 1)
-            if neighbor in enqueued:
-                qcost, h = enqueued[neighbor]
-                # if qcost < ncost, a longer path to neighbor remains
-                # enqueued. Removing it would need to filter the whole
-                # queue, it's better just to leave it there and ignore
-                # it when we visit the node a second time.
-                if qcost <= ncost:
-                    continue
-            else:
-                h = heuristic(neighbor, target)
-            enqueued[neighbor] = ncost, h
-            heappush(queue, (ncost + h, hash(neighbor), neighbor,
-                             ncost, curnode))
-
-    raise nx.NetworkXNoPath("Node %s not reachable from %s" % (source, target))
-
-
-def astar_path_length(G, source, target, heuristic=None, weight='weight'):
-    """Return the length of the shortest path between source and target using
-    the A* ("A-star") algorithm.
-
-    Parameters
-    ----------
-    G : NetworkX graph
-
-    source : node
-       Starting node for path
-
-    target : node
-       Ending node for path
-
-    heuristic : function
-       A function to evaluate the estimate of the distance
-       from the a node to the target.  The function takes
-       two nodes arguments and must return a number.
-
-    Raises
-    ------
-    NetworkXNoPath
-        If no path exists between source and target.
-
-    See Also
-    --------
-    astar_path
-
-    """
-    path = astar_path(G, source, target, heuristic, weight)
-    return sum(G[u][v].get(weight, 1) for u, v in zip(path[:-1], path[1:]))
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/shortest_paths/dense.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/shortest_paths/dense.py
deleted file mode 100644
index 4dccae6..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/shortest_paths/dense.py
+++ /dev/null
@@ -1,156 +0,0 @@
-# -*- coding: utf-8 -*-
-"""Floyd-Warshall algorithm for shortest paths.
-"""
-#    Copyright (C) 2004-2012 by
-#    Aric Hagberg <hagberg@lanl.gov>
-#    Dan Schult <dschult@colgate.edu>
-#    Pieter Swart <swart@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-import networkx as nx
-__author__ = """Aric Hagberg <aric.hagberg@gmail.com>"""
-__all__ = ['floyd_warshall',
-           'floyd_warshall_predecessor_and_distance',
-           'floyd_warshall_numpy']
-
-def floyd_warshall_numpy(G, nodelist=None, weight='weight'):
-    """Find all-pairs shortest path lengths using Floyd's algorithm.
-
-    Parameters
-    ----------
-    G : NetworkX graph
-
-    nodelist : list, optional
-       The rows and columns are ordered by the nodes in nodelist.
-       If nodelist is None then the ordering is produced by G.nodes().
-
-    weight: string, optional (default= 'weight')
-       Edge data key corresponding to the edge weight.
-
-    Returns
-    -------
-    distance : NumPy matrix
-        A matrix of shortest path distances between nodes.
-        If there is no path between to nodes the corresponding matrix entry
-        will be Inf.
-
-    Notes
-    ------
-    Floyd's algorithm is appropriate for finding shortest paths in
-    dense graphs or graphs with negative weights when Dijkstra's
-    algorithm fails.  This algorithm can still fail if there are
-    negative cycles.  It has running time O(n^3) with running space of O(n^2).
-    """
-    try:
-        import numpy as np
-    except ImportError:
-        raise ImportError(\
-          "to_numpy_matrix() requires numpy: http://scipy.org/ ")
-    A = nx.to_numpy_matrix(G, nodelist=nodelist, multigraph_weight=min,
-                           weight=weight)
-    n,m = A.shape
-    I = np.identity(n)
-    A[A==0] = np.inf # set zero entries to inf
-    A[I==1] = 0 # except diagonal which should be zero
-    for i in range(n):
-        A = np.minimum(A, A[i,:] + A[:,i])
-    return A
-
-def floyd_warshall_predecessor_and_distance(G, weight='weight'):
-    """Find all-pairs shortest path lengths using Floyd's algorithm.
-
-    Parameters
-    ----------
-    G : NetworkX graph
-
-    weight: string, optional (default= 'weight')
-       Edge data key corresponding to the edge weight.
-
-    Returns
-    -------
-    predecessor,distance : dictionaries
-       Dictionaries, keyed by source and target, of predecessors and distances
-       in the shortest path.
-
-    Notes
-    ------
-    Floyd's algorithm is appropriate for finding shortest paths
-    in dense graphs or graphs with negative weights when Dijkstra's algorithm
-    fails.  This algorithm can still fail if there are negative cycles.
-    It has running time O(n^3) with running space of O(n^2).
-
-    See Also
-    --------
-    floyd_warshall
-    floyd_warshall_numpy
-    all_pairs_shortest_path
-    all_pairs_shortest_path_length
-    """
-    from collections import defaultdict
-    # dictionary-of-dictionaries representation for dist and pred
-    # use some defaultdict magick here
-    # for dist the default is the floating point inf value
-    dist = defaultdict(lambda : defaultdict(lambda: float('inf')))
-    for u in G:
-        dist[u][u] = 0
-    pred = defaultdict(dict)
-    # initialize path distance dictionary to be the adjacency matrix
-    # also set the distance to self to 0 (zero diagonal)
-    undirected = not G.is_directed()
-    for u,v,d in G.edges(data=True):
-        e_weight = d.get(weight, 1.0)
-        dist[u][v] = min(e_weight, dist[u][v])
-        pred[u][v] = u
-        if undirected:
-            dist[v][u] = min(e_weight, dist[v][u])
-            pred[v][u] = v
-    for w in G:
-        for u in G:
-            for v in G:
-                if dist[u][v] > dist[u][w] + dist[w][v]:
-                    dist[u][v] = dist[u][w] + dist[w][v]
-                    pred[u][v] = pred[w][v]
-    return dict(pred),dict(dist)
-
-
-def floyd_warshall(G, weight='weight'):
-    """Find all-pairs shortest path lengths using Floyd's algorithm.
-
-    Parameters
-    ----------
-    G : NetworkX graph
-
-    weight: string, optional (default= 'weight')
-       Edge data key corresponding to the edge weight.
-
-
-    Returns
-    -------
-    distance : dict
-       A dictionary,  keyed by source and target, of shortest paths distances
-       between nodes.
-
-    Notes
-    ------
-    Floyd's algorithm is appropriate for finding shortest paths
-    in dense graphs or graphs with negative weights when Dijkstra's algorithm
-    fails.  This algorithm can still fail if there are negative cycles.
-    It has running time O(n^3) with running space of O(n^2).
-
-    See Also
-    --------
-    floyd_warshall_predecessor_and_distance
-    floyd_warshall_numpy
-    all_pairs_shortest_path
-    all_pairs_shortest_path_length
-    """
-    # could make this its own function to reduce memory costs
-    return floyd_warshall_predecessor_and_distance(G, weight=weight)[1]
-
-# fixture for nose tests
-def setup_module(module):
-    from nose import SkipTest
-    try:
-        import numpy
-    except:
-        raise SkipTest("NumPy not available")
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/shortest_paths/generic.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/shortest_paths/generic.py
deleted file mode 100644
index a337cbb..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/shortest_paths/generic.py
+++ /dev/null
@@ -1,392 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-Compute the shortest paths and path lengths between nodes in the graph.
-
-These algorithms work with undirected and directed graphs.
-
-For directed graphs the paths can be computed in the reverse
-order by first flipping the edge orientation using R=G.reverse(copy=False).
-
-"""
-#    Copyright (C) 2004-2012 by
-#    Aric Hagberg <hagberg@lanl.gov>
-#    Dan Schult <dschult@colgate.edu>
-#    Pieter Swart <swart@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-import networkx as nx
-__author__ = """\n""".join(['Aric Hagberg <aric.hagberg@gmail.com>',
-                            'Sérgio Nery Simões <sergionery@gmail.com>'])
-__all__ = ['shortest_path', 'all_shortest_paths',
-           'shortest_path_length', 'average_shortest_path_length',
-           'has_path']
-
-def has_path(G, source, target):
-    """Return True if G has a path from source to target, False otherwise.
-
-    Parameters
-    ----------
-    G : NetworkX graph
-
-    source : node
-       Starting node for path
-
-    target : node
-       Ending node for path
-    """
-    try:
-        sp = nx.shortest_path(G,source, target)
-    except nx.NetworkXNoPath:
-        return False
-    return True
-
-
-def shortest_path(G, source=None, target=None, weight=None):
-    """Compute shortest paths in the graph.
-
-    Parameters
-    ----------
-    G : NetworkX graph
-
-    source : node, optional
-        Starting node for path.
-        If not specified, compute shortest paths using all nodes as source nodes.
-
-    target : node, optional
-        Ending node for path.
-        If not specified, compute shortest paths using all nodes as target nodes.
-
-    weight : None or string, optional (default = None)
-        If None, every edge has weight/distance/cost 1.
-        If a string, use this edge attribute as the edge weight.
-        Any edge attribute not present defaults to 1.
-
-    Returns
-    -------
-    path: list or dictionary
-        All returned paths include both the source and target in the path.
-
-        If the source and target are both specified, return a single list
-        of nodes in a shortest path from the source to the target.
-
-        If only the source is specified, return a dictionary keyed by
-        targets with a list of nodes in a shortest path from the source
-        to one of the targets.
-
-        If only the target is specified, return a dictionary keyed by
-        sources with a list of nodes in a shortest path from one of the
-        sources to the target.
-
-        If neither the source nor target are specified return a dictionary
-        of dictionaries with path[source][target]=[list of nodes in path].
-
-    Examples
-    --------
-    >>> G=nx.path_graph(5)
-    >>> print(nx.shortest_path(G,source=0,target=4))
-    [0, 1, 2, 3, 4]
-    >>> p=nx.shortest_path(G,source=0) # target not specified
-    >>> p[4]
-    [0, 1, 2, 3, 4]
-    >>> p=nx.shortest_path(G,target=4) # source not specified
-    >>> p[0]
-    [0, 1, 2, 3, 4]
-    >>> p=nx.shortest_path(G) # source,target not specified
-    >>> p[0][4]
-    [0, 1, 2, 3, 4]
-
-    Notes
-    -----
-    There may be more than one shortest path between a source and target.
-    This returns only one of them.
-
-    For digraphs this returns a shortest directed path. To find paths in the
-    reverse direction first use G.reverse(copy=False) to flip the edge
-    orientation.
-
-    See Also
-    --------
-    all_pairs_shortest_path()
-    all_pairs_dijkstra_path()
-    single_source_shortest_path()
-    single_source_dijkstra_path()
-    """
-    if source is None:
-        if target is None:
-            ## Find paths between all pairs.
-            if weight is None:
-                paths=nx.all_pairs_shortest_path(G)
-            else:
-                paths=nx.all_pairs_dijkstra_path(G,weight=weight)
-        else:
-            ## Find paths from all nodes co-accessible to the target.
-            directed = G.is_directed()
-            if directed:
-               G.reverse(copy=False)
-
-            if weight is None:
-                paths=nx.single_source_shortest_path(G,target)
-            else:
-                paths=nx.single_source_dijkstra_path(G,target,weight=weight)
-
-            # Now flip the paths so they go from a source to the target.
-            for target in paths:
-                paths[target] = list(reversed(paths[target]))
-
-            if directed:
-                G.reverse(copy=False)
-    else:
-        if target is None:
-            ## Find paths to all nodes accessible from the source.
-            if weight is None:
-                paths=nx.single_source_shortest_path(G,source)
-            else:
-                paths=nx.single_source_dijkstra_path(G,source,weight=weight)
-        else:
-            ## Find shortest source-target path.
-            if weight is None:
-                paths=nx.bidirectional_shortest_path(G,source,target)
-            else:
-                paths=nx.dijkstra_path(G,source,target,weight)
-
-    return paths
-
-
-def shortest_path_length(G, source=None, target=None, weight=None):
-    """Compute shortest path lengths in the graph.
-
-    Parameters
-    ----------
-    G : NetworkX graph
-
-    source : node, optional
-        Starting node for path.
-        If not specified, compute shortest path lengths using all nodes as
-        source nodes.
-
-    target : node, optional
-        Ending node for path.
-        If not specified, compute shortest path lengths using all nodes as
-        target nodes.
-
-    weight : None or string, optional (default = None)
-        If None, every edge has weight/distance/cost 1.
-        If a string, use this edge attribute as the edge weight.
-        Any edge attribute not present defaults to 1.
-
-    Returns
-    -------
-    length: int or dictionary
-        If the source and target are both specified, return the length of
-        the shortest path from the source to the target.
-
-        If only the source is specified, return a dictionary keyed by
-        targets whose values are the lengths of the shortest path from the
-        source to one of the targets.
-
-        If only the target is specified, return a dictionary keyed by
-        sources whose values are the lengths of the shortest path from one
-        of the sources to the target.
-
-        If neither the source nor target are specified return a dictionary
-        of dictionaries with path[source][target]=L, where L is the length
-        of the shortest path from source to target.
-
-    Raises
-    ------
-    NetworkXNoPath
-        If no path exists between source and target.
-
-    Examples
-    --------
-    >>> G=nx.path_graph(5)
-    >>> print(nx.shortest_path_length(G,source=0,target=4))
-    4
-    >>> p=nx.shortest_path_length(G,source=0) # target not specified
-    >>> p[4]
-    4
-    >>> p=nx.shortest_path_length(G,target=4) # source not specified
-    >>> p[0]
-    4
-    >>> p=nx.shortest_path_length(G) # source,target not specified
-    >>> p[0][4]
-    4
-
-    Notes
-    -----
-    The length of the path is always 1 less than the number of nodes involved
-    in the path since the length measures the number of edges followed.
-
-    For digraphs this returns the shortest directed path length. To find path
-    lengths in the reverse direction use G.reverse(copy=False) first to flip
-    the edge orientation.
-
-    See Also
-    --------
-    all_pairs_shortest_path_length()
-    all_pairs_dijkstra_path_length()
-    single_source_shortest_path_length()
-    single_source_dijkstra_path_length()
-
-    """
-    if source is None:
-        if target is None:
-            ## Find paths between all pairs.
-            if weight is None:
-                paths=nx.all_pairs_shortest_path_length(G)
-            else:
-                paths=nx.all_pairs_dijkstra_path_length(G, weight=weight)
-        else:
-            ## Find paths from all nodes co-accessible to the target.
-            directed = G.is_directed()
-            if directed:
-               G.reverse(copy=False)
-
-            if weight is None:
-                paths=nx.single_source_shortest_path_length(G,target)
-            else:
-                paths=nx.single_source_dijkstra_path_length(G,target,
-                                                            weight=weight)
-
-            if directed:
-                G.reverse(copy=False)
-    else:
-        if target is None:
-            ## Find paths to all nodes accessible from the source.
-            if weight is None:
-                paths=nx.single_source_shortest_path_length(G,source)
-            else:
-                paths=nx.single_source_dijkstra_path_length(G,source,weight=weight)
-        else:
-            ## Find shortest source-target path.
-            if weight is None:
-                p=nx.bidirectional_shortest_path(G,source,target)
-                paths=len(p)-1
-            else:
-                paths=nx.dijkstra_path_length(G,source,target,weight)
-    return paths
-
-
-def average_shortest_path_length(G, weight=None):
-    r"""Return the average shortest path length.
-
-    The average shortest path length is
-
-    .. math::
-
-       a =\sum_{s,t \in V} \frac{d(s, t)}{n(n-1)}
-
-    where `V` is the set of nodes in `G`,
-    `d(s, t)` is the shortest path from `s` to `t`,
-    and `n` is the number of nodes in `G`.
-
-    Parameters
-    ----------
-    G : NetworkX graph
-
-    weight : None or string, optional (default = None)
-       If None, every edge has weight/distance/cost 1.
-       If a string, use this edge attribute as the edge weight.
-       Any edge attribute not present defaults to 1.
-
-    Raises
-    ------
-    NetworkXError:
-       if the graph is not connected.
-
-    Examples
-    --------
-    >>> G=nx.path_graph(5)
-    >>> print(nx.average_shortest_path_length(G))
-    2.0
-
-    For disconnected graphs you can compute the average shortest path
-    length for each component:
-    >>> G=nx.Graph([(1,2),(3,4)])
-    >>> for g in nx.connected_component_subgraphs(G):
-    ...     print(nx.average_shortest_path_length(g))
-    1.0
-    1.0
-
-    """
-    if G.is_directed():
-        if not nx.is_weakly_connected(G):
-            raise nx.NetworkXError("Graph is not connected.")
-    else:
-        if not nx.is_connected(G):
-            raise nx.NetworkXError("Graph is not connected.")
-    avg=0.0
-    if weight is None:
-        for node in G:
-            path_length=nx.single_source_shortest_path_length(G, node)
-            avg += sum(path_length.values())
-    else:
-        for node in G:
-            path_length=nx.single_source_dijkstra_path_length(G, node, weight=weight)
-            avg += sum(path_length.values())
-    n=len(G)
-    return avg/(n*(n-1))
-
-
-def all_shortest_paths(G, source, target, weight=None):
-    """Compute all shortest paths in the graph.
-
-    Parameters
-    ----------
-    G : NetworkX graph
-
-    source : node
-       Starting node for path.
-
-    target : node
-       Ending node for path.
-
-    weight : None or string, optional (default = None)
-       If None, every edge has weight/distance/cost 1.
-       If a string, use this edge attribute as the edge weight.
-       Any edge attribute not present defaults to 1.
-
-    Returns
-    -------
-    paths: generator of lists
-        A generator of all paths between source and target.
-
-    Examples
-    --------
-    >>> G=nx.Graph()
-    >>> G.add_path([0,1,2])
-    >>> G.add_path([0,10,2])
-    >>> print([p for p in nx.all_shortest_paths(G,source=0,target=2)])
-    [[0, 1, 2], [0, 10, 2]]
-
-    Notes
-    -----
-    There may be many shortest paths between the source and target.
-
-    See Also
-    --------
-    shortest_path()
-    single_source_shortest_path()
-    all_pairs_shortest_path()
-    """
-    if weight is not None:
-        pred,dist = nx.dijkstra_predecessor_and_distance(G,source,weight=weight)
-    else:
-        pred = nx.predecessor(G,source)
-    if target not in pred:
-        raise nx.NetworkXNoPath()
-    stack = [[target,0]]
-    top = 0
-    while top >= 0:
-        node,i = stack[top]
-        if node == source:
-            yield [p for p,n in reversed(stack[:top+1])]
-        if len(pred[node]) > i:
-            top += 1
-            if top == len(stack):
-                stack.append([pred[node][i],0])
-            else:
-                stack[top] = [pred[node][i],0]
-        else:
-            stack[top-1][1] += 1
-            top -= 1
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/shortest_paths/tests/test_astar.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/shortest_paths/tests/test_astar.py
deleted file mode 100644
index 81ba6ab..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/shortest_paths/tests/test_astar.py
+++ /dev/null
@@ -1,137 +0,0 @@
-#!/usr/bin/env python
-from nose.tools import *
-import networkx as nx
-from random import random, choice
-
-class TestAStar:
-
-    def setUp(self):
-        self.XG=nx.DiGraph()
-        self.XG.add_edges_from([('s','u',{'weight':10}),
-                                ('s','x',{'weight':5}),
-                                ('u','v',{'weight':1}),
-                                ('u','x',{'weight':2}),
-                                ('v','y',{'weight':1}),
-                                ('x','u',{'weight':3}),
-                                ('x','v',{'weight':5}),
-                                ('x','y',{'weight':2}),
-                                ('y','s',{'weight':7}),
-                                ('y','v',{'weight':6})])
-
-    def test_random_graph(self):
-
-        def dist(a, b):
-            (x1, y1) = a
-            (x2, y2) = b
-            return ((x1 - x2) ** 2 + (y1 - y2) ** 2) ** 0.5
-
-        G = nx.Graph()
-
-        points = [(random(), random()) for _ in range(100)]
-
-        # Build a path from points[0] to points[-1] to be sure it exists
-        for p1, p2 in zip(points[:-1], points[1:]):
-            G.add_edge(p1, p2, weight=dist(p1, p2))
-
-        # Add other random edges
-        for _ in range(100):
-            p1, p2 = choice(points), choice(points)
-            G.add_edge(p1, p2, weight=dist(p1, p2))
-
-        path = nx.astar_path(G, points[0], points[-1], dist)
-        assert path == nx.dijkstra_path(G, points[0], points[-1])
-
-    def test_astar_directed(self):
-        assert nx.astar_path(self.XG,'s','v')==['s', 'x', 'u', 'v']
-        assert nx.astar_path_length(self.XG,'s','v')==9
-
-    def test_astar_multigraph(self):
-         G=nx.MultiDiGraph(self.XG)
-         assert_raises((TypeError,nx.NetworkXError),
-                      nx.astar_path, [G,'s','v'])
-         assert_raises((TypeError,nx.NetworkXError),
-                      nx.astar_path_length, [G,'s','v'])
-
-    def test_astar_undirected(self):
-        GG=self.XG.to_undirected()
-        # make sure we get lower weight
-        # to_undirected might choose either edge with weight 2 or weight 3
-        GG['u']['x']['weight']=2
-        GG['y']['v']['weight'] = 2
-        assert_equal(nx.astar_path(GG,'s','v'),['s', 'x', 'u', 'v'])
-        assert_equal(nx.astar_path_length(GG,'s','v'),8)
-
-    def test_astar_directed2(self):
-        XG2=nx.DiGraph()
-        XG2.add_edges_from([[1,4,{'weight':1}],
-                            [4,5,{'weight':1}],
-                            [5,6,{'weight':1}],
-                            [6,3,{'weight':1}],
-                            [1,3,{'weight':50}],
-                            [1,2,{'weight':100}],
-                            [2,3,{'weight':100}]])
-        assert nx.astar_path(XG2,1,3)==[1, 4, 5, 6, 3]
-
-    def test_astar_undirected2(self):
-        XG3=nx.Graph()
-        XG3.add_edges_from([ [0,1,{'weight':2}],
-                             [1,2,{'weight':12}],
-                             [2,3,{'weight':1}],
-                             [3,4,{'weight':5}],
-                             [4,5,{'weight':1}],
-                             [5,0,{'weight':10}] ])
-        assert nx.astar_path(XG3,0,3)==[0, 1, 2, 3]
-        assert nx.astar_path_length(XG3,0,3)==15
-
-
-    def test_astar_undirected3(self):
-        XG4=nx.Graph()
-        XG4.add_edges_from([ [0,1,{'weight':2}],
-                             [1,2,{'weight':2}],
-                             [2,3,{'weight':1}],
-                             [3,4,{'weight':1}],
-                             [4,5,{'weight':1}],
-                             [5,6,{'weight':1}],
-                             [6,7,{'weight':1}],
-                             [7,0,{'weight':1}] ])
-        assert nx.astar_path(XG4,0,2)==[0, 1, 2]
-        assert nx.astar_path_length(XG4,0,2)==4
-
-
-# >>> MXG4=NX.MultiGraph(XG4)
-# >>> MXG4.add_edge(0,1,3)
-# >>> NX.dijkstra_path(MXG4,0,2)
-# [0, 1, 2]
-
-    def test_astar_w1(self):
-        G=nx.DiGraph()
-        G.add_edges_from([('s','u'), ('s','x'), ('u','v'), ('u','x'),
-            ('v','y'), ('x','u'), ('x','w'), ('w', 'v'), ('x','y'),
-            ('y','s'), ('y','v')])
-        assert nx.astar_path(G,'s','v')==['s', 'u', 'v']
-        assert nx.astar_path_length(G,'s','v')== 2
-
-    @raises(nx.NetworkXNoPath)
-    def test_astar_nopath(self):
-        p = nx.astar_path(self.XG,'s','moon')
-
-    def test_cycle(self):
-        C=nx.cycle_graph(7)
-        assert nx.astar_path(C,0,3)==[0, 1, 2, 3]
-        assert nx.dijkstra_path(C,0,4)==[0, 6, 5, 4]
-
-
-    def test_orderable(self):
-        class UnorderableClass: pass
-        node_1 = UnorderableClass()
-        node_2 = UnorderableClass()
-        node_3 = UnorderableClass()
-        node_4 = UnorderableClass()
-        G = nx.Graph()
-        G.add_edge(node_1, node_2)
-        G.add_edge(node_1, node_3)
-        G.add_edge(node_2, node_4)
-        G.add_edge(node_3, node_4)
-        path=nx.algorithms.shortest_paths.astar.astar_path(G, node_1, node_4)
-
-
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/shortest_paths/tests/test_dense.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/shortest_paths/tests/test_dense.py
deleted file mode 100644
index 6c170da..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/shortest_paths/tests/test_dense.py
+++ /dev/null
@@ -1,106 +0,0 @@
-#!/usr/bin/env python
-from nose.tools import *
-from nose import SkipTest
-import networkx as nx
-
-class TestFloyd:
-    def setUp(self):
-        pass
-
-    def test_floyd_warshall_predecessor_and_distance(self):
-        XG=nx.DiGraph()
-        XG.add_weighted_edges_from([('s','u',10) ,('s','x',5) ,
-                                    ('u','v',1) ,('u','x',2) ,
-                                    ('v','y',1) ,('x','u',3) ,
-                                    ('x','v',5) ,('x','y',2) ,
-                                    ('y','s',7) ,('y','v',6)])
-        path, dist =nx.floyd_warshall_predecessor_and_distance(XG)
-        assert_equal(dist['s']['v'],9)
-        assert_equal(path['s']['v'],'u')
-        assert_equal(dist,
-                     {'y': {'y': 0, 'x': 12, 's': 7, 'u': 15, 'v': 6},
-                      'x': {'y': 2, 'x': 0, 's': 9, 'u': 3, 'v': 4},
-                      's': {'y': 7, 'x': 5, 's': 0, 'u': 8, 'v': 9},
-                      'u': {'y': 2, 'x': 2, 's': 9, 'u': 0, 'v': 1},
-                      'v': {'y': 1, 'x': 13, 's': 8, 'u': 16, 'v': 0}})
-
-
-        GG=XG.to_undirected()
-        # make sure we get lower weight
-        # to_undirected might choose either edge with weight 2 or weight 3
-        GG['u']['x']['weight']=2
-        path, dist = nx.floyd_warshall_predecessor_and_distance(GG)
-        assert_equal(dist['s']['v'],8)
-        # skip this test, could be alternate path s-u-v
-#        assert_equal(path['s']['v'],'y')
-
-        G=nx.DiGraph()  # no weights
-        G.add_edges_from([('s','u'), ('s','x'),
-                          ('u','v'), ('u','x'),
-                          ('v','y'), ('x','u'),
-                          ('x','v'), ('x','y'),
-                          ('y','s'), ('y','v')])
-        path, dist = nx.floyd_warshall_predecessor_and_distance(G)
-        assert_equal(dist['s']['v'],2)
-        # skip this test, could be alternate path s-u-v
- #       assert_equal(path['s']['v'],'x')
-
-        # alternate interface
-        dist = nx.floyd_warshall(G)
-        assert_equal(dist['s']['v'],2)
-
-    def test_cycle(self):
-        path, dist = nx.floyd_warshall_predecessor_and_distance(nx.cycle_graph(7))
-        assert_equal(dist[0][3],3)
-        assert_equal(path[0][3],2)
-        assert_equal(dist[0][4],3)
-
-    def test_weighted(self):
-        XG3=nx.Graph()
-        XG3.add_weighted_edges_from([ [0,1,2],[1,2,12],[2,3,1],
-                                      [3,4,5],[4,5,1],[5,0,10] ])
-        path, dist = nx.floyd_warshall_predecessor_and_distance(XG3)
-        assert_equal(dist[0][3],15)
-        assert_equal(path[0][3],2)
-
-    def test_weighted2(self):
-        XG4=nx.Graph()
-        XG4.add_weighted_edges_from([ [0,1,2],[1,2,2],[2,3,1],
-                                      [3,4,1],[4,5,1],[5,6,1],
-                                      [6,7,1],[7,0,1] ])
-        path, dist = nx.floyd_warshall_predecessor_and_distance(XG4)
-        assert_equal(dist[0][2],4)
-        assert_equal(path[0][2],1)
-
-    def test_weight_parameter(self):
-        XG4 = nx.Graph()
-        XG4.add_edges_from([ (0, 1, {'heavy': 2}), (1, 2, {'heavy': 2}),
-                             (2, 3, {'heavy': 1}), (3, 4, {'heavy': 1}),
-                             (4, 5, {'heavy': 1}), (5, 6, {'heavy': 1}),
-                             (6, 7, {'heavy': 1}), (7, 0, {'heavy': 1}) ])
-        path, dist = nx.floyd_warshall_predecessor_and_distance(XG4,
-                                                            weight='heavy')
-        assert_equal(dist[0][2], 4)
-        assert_equal(path[0][2], 1)
-    
-    def test_zero_distance(self):
-        XG=nx.DiGraph()
-        XG.add_weighted_edges_from([('s','u',10) ,('s','x',5) ,
-                                    ('u','v',1) ,('u','x',2) ,
-                                    ('v','y',1) ,('x','u',3) ,
-                                    ('x','v',5) ,('x','y',2) ,
-                                    ('y','s',7) ,('y','v',6)])
-        path, dist =nx.floyd_warshall_predecessor_and_distance(XG)
-
-        for u in XG:
-            assert_equal(dist[u][u], 0)
-
-        GG=XG.to_undirected()
-        # make sure we get lower weight
-        # to_undirected might choose either edge with weight 2 or weight 3
-        GG['u']['x']['weight']=2
-        path, dist = nx.floyd_warshall_predecessor_and_distance(GG)
-        
-        for u in GG:
-            dist[u][u] = 0
-
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/shortest_paths/tests/test_dense_numpy.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/shortest_paths/tests/test_dense_numpy.py
deleted file mode 100644
index 2fa0b67..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/shortest_paths/tests/test_dense_numpy.py
+++ /dev/null
@@ -1,53 +0,0 @@
-#!/usr/bin/env python
-from nose.tools import *
-from nose import SkipTest
-import networkx as nx
-
-class TestFloydNumpy(object):
-    numpy=1 # nosetests attribute, use nosetests -a 'not numpy' to skip test
-    @classmethod
-    def setupClass(cls):
-        global numpy
-        global assert_equal
-        global assert_almost_equal
-        try:
-            import numpy
-            from numpy.testing import assert_equal,assert_almost_equal
-        except ImportError:
-             raise SkipTest('NumPy not available.')
-
-    def test_cycle_numpy(self):
-        dist = nx.floyd_warshall_numpy(nx.cycle_graph(7))
-        assert_equal(dist[0,3],3)
-        assert_equal(dist[0,4],3)
-
-    def test_weighted_numpy(self):
-        XG3=nx.Graph()
-        XG3.add_weighted_edges_from([ [0,1,2],[1,2,12],[2,3,1],
-                                      [3,4,5],[4,5,1],[5,0,10] ])
-        dist = nx.floyd_warshall_numpy(XG3)
-        assert_equal(dist[0,3],15)
-
-    def test_weighted_numpy(self):
-        XG4=nx.Graph()
-        XG4.add_weighted_edges_from([ [0,1,2],[1,2,2],[2,3,1],
-                                      [3,4,1],[4,5,1],[5,6,1],
-                                      [6,7,1],[7,0,1] ])
-        dist = nx.floyd_warshall_numpy(XG4)
-        assert_equal(dist[0,2],4)
-
-    def test_weight_parameter_numpy(self):
-        XG4 = nx.Graph()
-        XG4.add_edges_from([ (0, 1, {'heavy': 2}), (1, 2, {'heavy': 2}),
-                             (2, 3, {'heavy': 1}), (3, 4, {'heavy': 1}),
-                             (4, 5, {'heavy': 1}), (5, 6, {'heavy': 1}),
-                             (6, 7, {'heavy': 1}), (7, 0, {'heavy': 1}) ])
-        dist = nx.floyd_warshall_numpy(XG4, weight='heavy')
-        assert_equal(dist[0, 2], 4)
-
-    def test_directed_cycle_numpy(self):
-        G = nx.DiGraph()
-        G.add_cycle([0,1,2,3])
-        pred,dist = nx.floyd_warshall_predecessor_and_distance(G)
-        D = nx.utils.dict_to_numpy_array(dist)
-        assert_equal(nx.floyd_warshall_numpy(G),D)
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/shortest_paths/tests/test_generic.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/shortest_paths/tests/test_generic.py
deleted file mode 100644
index edaa9f9..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/shortest_paths/tests/test_generic.py
+++ /dev/null
@@ -1,145 +0,0 @@
-#!/usr/bin/env python
-from nose.tools import *
-import networkx as nx
-
-class TestGenericPath:
-
-    def setUp(self):
-        from networkx import convert_node_labels_to_integers as cnlti
-        self.grid=cnlti(nx.grid_2d_graph(4,4),first_label=1,ordering="sorted")
-        self.cycle=nx.cycle_graph(7)
-        self.directed_cycle=nx.cycle_graph(7,create_using=nx.DiGraph())
-
-
-    def test_shortest_path(self):
-        assert_equal(nx.shortest_path(self.cycle,0,3),[0, 1, 2, 3])
-        assert_equal(nx.shortest_path(self.cycle,0,4),[0, 6, 5, 4])
-        assert_equal(nx.shortest_path(self.grid,1,12),[1, 2, 3, 4, 8, 12])
-        assert_equal(nx.shortest_path(self.directed_cycle,0,3),[0, 1, 2, 3])
-        # now with weights
-        assert_equal(nx.shortest_path(self.cycle,0,3,weight='weight'),[0, 1, 2, 3])
-        assert_equal(nx.shortest_path(self.cycle,0,4,weight='weight'),[0, 6, 5, 4])
-        assert_equal(nx.shortest_path(self.grid,1,12,weight='weight'),[1, 2, 3, 4, 8, 12])
-        assert_equal(nx.shortest_path(self.directed_cycle,0,3,weight='weight'),
-                     [0, 1, 2, 3])
-
-    def test_shortest_path_target(self):
-        sp = nx.shortest_path(nx.path_graph(3), target=1)
-        assert_equal(sp, {0: [0, 1], 1: [1], 2: [2, 1]})
-
-    def test_shortest_path_length(self):
-        assert_equal(nx.shortest_path_length(self.cycle,0,3),3)
-        assert_equal(nx.shortest_path_length(self.grid,1,12),5)
-        assert_equal(nx.shortest_path_length(self.directed_cycle,0,4),4)
-        # now with weights
-        assert_equal(nx.shortest_path_length(self.cycle,0,3,weight='weight'),3)
-        assert_equal(nx.shortest_path_length(self.grid,1,12,weight='weight'),5)
-        assert_equal(nx.shortest_path_length(self.directed_cycle,0,4,weight='weight'),4)
-
-    def test_shortest_path_length_target(self):
-        sp = nx.shortest_path_length(nx.path_graph(3), target=1)
-        assert_equal(sp[0], 1)
-        assert_equal(sp[1], 0)
-        assert_equal(sp[2], 1)
-
-    def test_single_source_shortest_path(self):
-        p=nx.shortest_path(self.cycle,0)
-        assert_equal(p[3],[0,1,2,3])
-        assert_equal(p,nx.single_source_shortest_path(self.cycle,0))
-        p=nx.shortest_path(self.grid,1)
-        assert_equal(p[12],[1, 2, 3, 4, 8, 12])
-        # now with weights
-        p=nx.shortest_path(self.cycle,0,weight='weight')
-        assert_equal(p[3],[0,1,2,3])
-        assert_equal(p,nx.single_source_dijkstra_path(self.cycle,0))
-        p=nx.shortest_path(self.grid,1,weight='weight')
-        assert_equal(p[12],[1, 2, 3, 4, 8, 12])
-
-
-    def test_single_source_shortest_path_length(self):
-        l=nx.shortest_path_length(self.cycle,0)
-        assert_equal(l,{0:0,1:1,2:2,3:3,4:3,5:2,6:1})
-        assert_equal(l,nx.single_source_shortest_path_length(self.cycle,0))
-        l=nx.shortest_path_length(self.grid,1)
-        assert_equal(l[16],6)
-        # now with weights
-        l=nx.shortest_path_length(self.cycle,0,weight='weight')
-        assert_equal(l,{0:0,1:1,2:2,3:3,4:3,5:2,6:1})
-        assert_equal(l,nx.single_source_dijkstra_path_length(self.cycle,0))
-        l=nx.shortest_path_length(self.grid,1,weight='weight')
-        assert_equal(l[16],6)
-
-
-    def test_all_pairs_shortest_path(self):
-        p=nx.shortest_path(self.cycle)
-        assert_equal(p[0][3],[0,1,2,3])
-        assert_equal(p,nx.all_pairs_shortest_path(self.cycle))
-        p=nx.shortest_path(self.grid)
-        assert_equal(p[1][12],[1, 2, 3, 4, 8, 12])
-        # now with weights
-        p=nx.shortest_path(self.cycle,weight='weight')
-        assert_equal(p[0][3],[0,1,2,3])
-        assert_equal(p,nx.all_pairs_dijkstra_path(self.cycle))
-        p=nx.shortest_path(self.grid,weight='weight')
-        assert_equal(p[1][12],[1, 2, 3, 4, 8, 12])
-
-
-    def test_all_pairs_shortest_path_length(self):
-        l=nx.shortest_path_length(self.cycle)
-        assert_equal(l[0],{0:0,1:1,2:2,3:3,4:3,5:2,6:1})
-        assert_equal(l,nx.all_pairs_shortest_path_length(self.cycle))
-        l=nx.shortest_path_length(self.grid)
-        assert_equal(l[1][16],6)
-        # now with weights
-        l=nx.shortest_path_length(self.cycle,weight='weight')
-        assert_equal(l[0],{0:0,1:1,2:2,3:3,4:3,5:2,6:1})
-        assert_equal(l,nx.all_pairs_dijkstra_path_length(self.cycle))
-        l=nx.shortest_path_length(self.grid,weight='weight')
-        assert_equal(l[1][16],6)
-
-    def test_average_shortest_path(self):
-        l=nx.average_shortest_path_length(self.cycle)
-        assert_almost_equal(l,2)
-        l=nx.average_shortest_path_length(nx.path_graph(5))
-        assert_almost_equal(l,2)
-
-
-    def test_weighted_average_shortest_path(self):
-        G=nx.Graph()
-        G.add_cycle(range(7),weight=2)
-        l=nx.average_shortest_path_length(G,weight='weight')
-        assert_almost_equal(l,4)
-        G=nx.Graph()
-        G.add_path(range(5),weight=2)
-        l=nx.average_shortest_path_length(G,weight='weight')
-        assert_almost_equal(l,4)
-
-
-    def test_average_shortest_disconnected(self):
-        g = nx.Graph()
-        g.add_nodes_from(range(3))
-        g.add_edge(0, 1)
-        assert_raises(nx.NetworkXError,nx.average_shortest_path_length,g)
-        g = g.to_directed()
-        assert_raises(nx.NetworkXError,nx.average_shortest_path_length,g)
-
-    def test_has_path(self):
-        G = nx.Graph()
-        G.add_path(range(3))
-        G.add_path(range(3,5))
-        assert_true(nx.has_path(G,0,2))
-        assert_false(nx.has_path(G,0,4))
-
-    def test_all_shortest_paths(self):
-        G = nx.Graph()
-        G.add_path([0,1,2,3])
-        G.add_path([0,10,20,3])
-        assert_equal([[0,1,2,3],[0,10,20,3]],
-                     sorted(nx.all_shortest_paths(G,0,3)))
-
-    @raises(nx.NetworkXNoPath)
-    def test_all_shortest_paths_raise(self):
-        G = nx.Graph()
-        G.add_path([0,1,2,3])
-        G.add_node(4)
-        paths = list(nx.all_shortest_paths(G,0,4))
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/shortest_paths/tests/test_unweighted.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/shortest_paths/tests/test_unweighted.py
deleted file mode 100644
index fc2abfb..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/shortest_paths/tests/test_unweighted.py
+++ /dev/null
@@ -1,81 +0,0 @@
-#!/usr/bin/env python
-from nose.tools import *
-import networkx as nx
-
-class TestUnweightedPath:
-
-    def setUp(self):
-        from networkx import convert_node_labels_to_integers as cnlti
-        self.grid=cnlti(nx.grid_2d_graph(4,4),first_label=1,ordering="sorted")
-        self.cycle=nx.cycle_graph(7)
-        self.directed_cycle=nx.cycle_graph(7,create_using=nx.DiGraph())
-
-
-    def test_bidirectional_shortest_path(self):
-        assert_equal(nx.bidirectional_shortest_path(self.cycle,0,3),
-                     [0, 1, 2, 3])
-        assert_equal(nx.bidirectional_shortest_path(self.cycle,0,4),
-                     [0, 6, 5, 4])
-        assert_equal(nx.bidirectional_shortest_path(self.grid,1,12),
-                     [1, 2, 3, 4, 8, 12])
-        assert_equal(nx.bidirectional_shortest_path(self.directed_cycle,0,3),
-                     [0, 1, 2, 3])
-
-    def test_shortest_path_length(self):
-        assert_equal(nx.shortest_path_length(self.cycle,0,3),3)
-        assert_equal(nx.shortest_path_length(self.grid,1,12),5)
-        assert_equal(nx.shortest_path_length(self.directed_cycle,0,4),4)
-        # now with weights
-        assert_equal(nx.shortest_path_length(self.cycle,0,3,weight=True),3)
-        assert_equal(nx.shortest_path_length(self.grid,1,12,weight=True),5)
-        assert_equal(nx.shortest_path_length(self.directed_cycle,0,4,weight=True),4)
-
-
-    def test_single_source_shortest_path(self):
-        p=nx.single_source_shortest_path(self.cycle,0)
-        assert_equal(p[3],[0,1,2,3])
-        p=nx.single_source_shortest_path(self.cycle,0, cutoff=0)
-        assert_equal(p,{0 : [0]})
-
-    def test_single_source_shortest_path_length(self):
-        assert_equal(nx.single_source_shortest_path_length(self.cycle,0),
-                     {0:0,1:1,2:2,3:3,4:3,5:2,6:1})
-
-    def test_all_pairs_shortest_path(self):
-        p=nx.all_pairs_shortest_path(self.cycle)
-        assert_equal(p[0][3],[0,1,2,3])
-        p=nx.all_pairs_shortest_path(self.grid)
-        assert_equal(p[1][12],[1, 2, 3, 4, 8, 12])
-
-    def test_all_pairs_shortest_path_length(self):
-        l=nx.all_pairs_shortest_path_length(self.cycle)
-        assert_equal(l[0],{0:0,1:1,2:2,3:3,4:3,5:2,6:1})
-        l=nx.all_pairs_shortest_path_length(self.grid)
-        assert_equal(l[1][16],6)
-
-    def test_predecessor(self):
-        G=nx.path_graph(4)
-        assert_equal(nx.predecessor(G,0),{0: [], 1: [0], 2: [1], 3: [2]})
-        assert_equal(nx.predecessor(G,0,3),[2])
-        G=nx.grid_2d_graph(2,2)
-        assert_equal(sorted(nx.predecessor(G,(0,0)).items()),
-                     [((0, 0), []), ((0, 1), [(0, 0)]),
-                      ((1, 0), [(0, 0)]), ((1, 1), [(0, 1), (1, 0)])])
-
-    def test_predecessor_cutoff(self):
-        G=nx.path_graph(4)
-        p = nx.predecessor(G,0,3)
-        assert_false(4 in p)
-
-    def test_predecessor_target(self):
-        G=nx.path_graph(4)
-        p = nx.predecessor(G,0,3)
-        assert_equal(p,[2])
-        p = nx.predecessor(G,0,3,cutoff=2)
-        assert_equal(p,[])
-        p,s = nx.predecessor(G,0,3,return_seen=True)
-        assert_equal(p,[2])
-        assert_equal(s,3)
-        p,s = nx.predecessor(G,0,3,cutoff=2,return_seen=True)
-        assert_equal(p,[])
-        assert_equal(s,-1)
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/shortest_paths/tests/test_weighted.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/shortest_paths/tests/test_weighted.py
deleted file mode 100644
index c3998d4..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/shortest_paths/tests/test_weighted.py
+++ /dev/null
@@ -1,246 +0,0 @@
-#!/usr/bin/env python
-from nose.tools import *
-import networkx as nx
-
-class TestWeightedPath:
-
-    def setUp(self):
-        from networkx import convert_node_labels_to_integers as cnlti
-        self.grid=cnlti(nx.grid_2d_graph(4,4),first_label=1,ordering="sorted")
-        self.cycle=nx.cycle_graph(7)
-        self.directed_cycle=nx.cycle_graph(7,create_using=nx.DiGraph())
-        self.XG=nx.DiGraph()
-        self.XG.add_weighted_edges_from([('s','u',10) ,('s','x',5) ,
-                                         ('u','v',1) ,('u','x',2) ,
-                                         ('v','y',1) ,('x','u',3) ,
-                                         ('x','v',5) ,('x','y',2) ,
-                                         ('y','s',7) ,('y','v',6)])
-        self.MXG=nx.MultiDiGraph(self.XG)
-        self.MXG.add_edge('s','u',weight=15)
-        self.XG2=nx.DiGraph()
-        self.XG2.add_weighted_edges_from([[1,4,1],[4,5,1],
-                                          [5,6,1],[6,3,1],
-                                          [1,3,50],[1,2,100],[2,3,100]])
-
-        self.XG3=nx.Graph()
-        self.XG3.add_weighted_edges_from([ [0,1,2],[1,2,12],
-                                           [2,3,1],[3,4,5],
-                                           [4,5,1],[5,0,10] ])
-
-        self.XG4=nx.Graph()
-        self.XG4.add_weighted_edges_from([ [0,1,2],[1,2,2],
-                                           [2,3,1],[3,4,1],
-                                           [4,5,1],[5,6,1],
-                                           [6,7,1],[7,0,1] ])
-        self.MXG4=nx.MultiGraph(self.XG4)
-        self.MXG4.add_edge(0,1,weight=3)
-        self.G=nx.DiGraph()  # no weights
-        self.G.add_edges_from([('s','u'), ('s','x'),
-                          ('u','v'), ('u','x'),
-                          ('v','y'), ('x','u'),
-                          ('x','v'), ('x','y'),
-                          ('y','s'), ('y','v')])
-
-    def test_dijkstra(self):
-        (D,P)= nx.single_source_dijkstra(self.XG,'s')
-        assert_equal(P['v'], ['s', 'x', 'u', 'v'])
-        assert_equal(D['v'],9)
-
-        assert_equal(nx.single_source_dijkstra_path(self.XG,'s')['v'],
-                     ['s', 'x', 'u', 'v'])
-        assert_equal(nx.single_source_dijkstra_path_length(self.XG,'s')['v'],9)
-
-        assert_equal(nx.single_source_dijkstra(self.XG,'s')[1]['v'],
-                     ['s', 'x', 'u', 'v'])
-
-        assert_equal(nx.single_source_dijkstra_path(self.MXG,'s')['v'],
-                     ['s', 'x', 'u', 'v'])
-
-        GG=self.XG.to_undirected()
-        # make sure we get lower weight
-        # to_undirected might choose either edge with weight 2 or weight 3
-        GG['u']['x']['weight']=2
-        (D,P)= nx.single_source_dijkstra(GG,'s')
-        assert_equal(P['v'] , ['s', 'x', 'u', 'v'])
-        assert_equal(D['v'],8)     # uses lower weight of 2 on u<->x edge
-        assert_equal(nx.dijkstra_path(GG,'s','v'), ['s', 'x', 'u', 'v'])
-        assert_equal(nx.dijkstra_path_length(GG,'s','v'),8)
-
-        assert_equal(nx.dijkstra_path(self.XG2,1,3), [1, 4, 5, 6, 3])
-        assert_equal(nx.dijkstra_path(self.XG3,0,3), [0, 1, 2, 3])
-        assert_equal(nx.dijkstra_path_length(self.XG3,0,3),15)
-        assert_equal(nx.dijkstra_path(self.XG4,0,2), [0, 1, 2])
-        assert_equal(nx.dijkstra_path_length(self.XG4,0,2), 4)
-        assert_equal(nx.dijkstra_path(self.MXG4,0,2), [0, 1, 2])
-        assert_equal(nx.single_source_dijkstra(self.G,'s','v')[1]['v'],
-                     ['s', 'u', 'v'])
-        assert_equal(nx.single_source_dijkstra(self.G,'s')[1]['v'],
-                     ['s', 'u', 'v'])
-
-        assert_equal(nx.dijkstra_path(self.G,'s','v'), ['s', 'u', 'v'])
-        assert_equal(nx.dijkstra_path_length(self.G,'s','v'), 2)
-
-        # NetworkXError: node s not reachable from moon
-        assert_raises(nx.NetworkXNoPath,nx.dijkstra_path,self.G,'s','moon')
-        assert_raises(nx.NetworkXNoPath,nx.dijkstra_path_length,self.G,'s','moon')
-
-        assert_equal(nx.dijkstra_path(self.cycle,0,3),[0, 1, 2, 3])
-        assert_equal(nx.dijkstra_path(self.cycle,0,4), [0, 6, 5, 4])
-
-        assert_equal(nx.single_source_dijkstra(self.cycle,0,0),({0:0}, {0:[0]}) )
-
-    def test_bidirectional_dijkstra(self):
-        assert_equal(nx.bidirectional_dijkstra(self.XG, 's', 'v'),
-                     (9, ['s', 'x', 'u', 'v']))
-        (dist,path) = nx.bidirectional_dijkstra(self.G,'s','v')
-        assert_equal(dist,2)
-        # skip this test, correct path could also be ['s','u','v']
-#        assert_equal(nx.bidirectional_dijkstra(self.G,'s','v'),
-#                     (2, ['s', 'x', 'v']))
-        assert_equal(nx.bidirectional_dijkstra(self.cycle,0,3),
-                     (3, [0, 1, 2, 3]))
-        assert_equal(nx.bidirectional_dijkstra(self.cycle,0,4),
-                     (3, [0, 6, 5, 4]))
-        assert_equal(nx.bidirectional_dijkstra(self.XG3,0,3),
-                     (15, [0, 1, 2, 3]))
-        assert_equal(nx.bidirectional_dijkstra(self.XG4,0,2),
-                     (4, [0, 1, 2]))
-
-        # need more tests here
-        assert_equal(nx.dijkstra_path(self.XG,'s','v'),
-                     nx.single_source_dijkstra_path(self.XG,'s')['v'])
-
-
-    @raises(nx.NetworkXNoPath)
-    def test_bidirectional_dijkstra_no_path(self):
-        G = nx.Graph()
-        G.add_path([1,2,3])
-        G.add_path([4,5,6])
-        path = nx.bidirectional_dijkstra(G,1,6)
-
-    def test_dijkstra_predecessor(self):
-        G=nx.path_graph(4)
-        assert_equal(nx.dijkstra_predecessor_and_distance(G,0),
-                     ({0: [], 1: [0], 2: [1], 3: [2]}, {0: 0, 1: 1, 2: 2, 3: 3}))
-        G=nx.grid_2d_graph(2,2)
-        pred,dist=nx.dijkstra_predecessor_and_distance(G,(0,0))
-        assert_equal(sorted(pred.items()),
-                     [((0, 0), []), ((0, 1), [(0, 0)]),
-                      ((1, 0), [(0, 0)]), ((1, 1), [(0, 1), (1, 0)])])
-        assert_equal(sorted(dist.items()),
-                     [((0, 0), 0), ((0, 1), 1), ((1, 0), 1), ((1, 1), 2)])
-
-        XG=nx.DiGraph()
-        XG.add_weighted_edges_from([('s','u',10) ,('s','x',5) ,
-                                    ('u','v',1) ,('u','x',2) ,
-                                    ('v','y',1) ,('x','u',3) ,
-                                    ('x','v',5) ,('x','y',2) ,
-                                    ('y','s',7) ,('y','v',6)])
-        (P,D)= nx.dijkstra_predecessor_and_distance(XG,'s')
-        assert_equal(P['v'],['u'])
-        assert_equal(D['v'],9)
-        (P,D)= nx.dijkstra_predecessor_and_distance(XG,'s',cutoff=8)
-        assert_false('v' in D)
-
-    def test_single_source_dijkstra_path_length(self):
-        pl = nx.single_source_dijkstra_path_length
-        assert_equal(pl(self.MXG4,0)[2], 4)
-        spl = pl(self.MXG4,0,cutoff=2)
-        assert_false(2 in spl)
-
-    def test_bidirectional_dijkstra_multigraph(self):
-        G = nx.MultiGraph()
-        G.add_edge('a', 'b', weight=10)
-        G.add_edge('a', 'b', weight=100)
-        dp= nx.bidirectional_dijkstra(G, 'a', 'b')
-        assert_equal(dp,(10, ['a', 'b']))
-
-
-    def test_dijkstra_pred_distance_multigraph(self):
-        G = nx.MultiGraph()
-        G.add_edge('a', 'b', key='short',foo=5, weight=100)
-        G.add_edge('a', 'b', key='long',bar=1, weight=110)
-        p,d= nx.dijkstra_predecessor_and_distance(G, 'a')
-        assert_equal(p,{'a': [], 'b': ['a']})
-        assert_equal(d,{'a': 0, 'b': 100})
-
-    def test_negative_edge_cycle(self):
-        G = nx.cycle_graph(5, create_using = nx.DiGraph())
-        assert_equal(nx.negative_edge_cycle(G), False)
-        G.add_edge(8, 9, weight = -7)
-        G.add_edge(9, 8, weight = 3)
-        assert_equal(nx.negative_edge_cycle(G), True)
-        assert_raises(ValueError,nx.single_source_dijkstra_path_length,G,8)
-        assert_raises(ValueError,nx.single_source_dijkstra,G,8)
-        assert_raises(ValueError,nx.dijkstra_predecessor_and_distance,G,8)
-        G.add_edge(9,10)
-        assert_raises(ValueError,nx.bidirectional_dijkstra,G,8,10)
-
-    def test_bellman_ford(self):
-        # single node graph
-        G = nx.DiGraph()
-        G.add_node(0)
-        assert_equal(nx.bellman_ford(G, 0), ({0: None}, {0: 0}))
-        assert_raises(KeyError, nx.bellman_ford, G, 1)
-
-        # negative weight cycle
-        G = nx.cycle_graph(5, create_using = nx.DiGraph())
-        G.add_edge(1, 2, weight = -7)
-        for i in range(5):
-            assert_raises(nx.NetworkXUnbounded, nx.bellman_ford, G, i)
-        G = nx.cycle_graph(5)  # undirected Graph
-        G.add_edge(1, 2, weight = -3)
-        for i in range(5):
-            assert_raises(nx.NetworkXUnbounded, nx.bellman_ford, G, i)
-        # no negative cycle but negative weight
-        G = nx.cycle_graph(5, create_using = nx.DiGraph())
-        G.add_edge(1, 2, weight = -3)
-        assert_equal(nx.bellman_ford(G, 0),
-                     ({0: None, 1: 0, 2: 1, 3: 2, 4: 3},
-                      {0: 0, 1: 1, 2: -2, 3: -1, 4: 0}))
-
-        # not connected
-        G = nx.complete_graph(6)
-        G.add_edge(10, 11)
-        G.add_edge(10, 12)
-        assert_equal(nx.bellman_ford(G, 0),
-                     ({0: None, 1: 0, 2: 0, 3: 0, 4: 0, 5: 0},
-                      {0: 0, 1: 1, 2: 1, 3: 1, 4: 1, 5: 1}))
-
-        # not connected, with a component not containing the source that
-        # contains a negative cost cycle.
-        G = nx.complete_graph(6)
-        G.add_edges_from([('A', 'B', {'load': 3}),
-                          ('B', 'C', {'load': -10}),
-                          ('C', 'A', {'load': 2})])
-        assert_equal(nx.bellman_ford(G, 0, weight = 'load'),
-                     ({0: None, 1: 0, 2: 0, 3: 0, 4: 0, 5: 0},
-                      {0: 0, 1: 1, 2: 1, 3: 1, 4: 1, 5: 1}))
-
-        # multigraph
-        P, D = nx.bellman_ford(self.MXG,'s')
-        assert_equal(P['v'], 'u')
-        assert_equal(D['v'], 9)
-        P, D = nx.bellman_ford(self.MXG4, 0)
-        assert_equal(P[2], 1)
-        assert_equal(D[2], 4)
-
-        # other tests
-        (P,D)= nx.bellman_ford(self.XG,'s')
-        assert_equal(P['v'], 'u')
-        assert_equal(D['v'], 9)
-
-        G=nx.path_graph(4)
-        assert_equal(nx.bellman_ford(G,0),
-                     ({0: None, 1: 0, 2: 1, 3: 2}, {0: 0, 1: 1, 2: 2, 3: 3}))
-        assert_equal(nx.bellman_ford(G, 3),
-                    ({0: 1, 1: 2, 2: 3, 3: None}, {0: 3, 1: 2, 2: 1, 3: 0}))
-
-        G=nx.grid_2d_graph(2,2)
-        pred,dist=nx.bellman_ford(G,(0,0))
-        assert_equal(sorted(pred.items()),
-                     [((0, 0), None), ((0, 1), (0, 0)),
-                      ((1, 0), (0, 0)), ((1, 1), (0, 1))])
-        assert_equal(sorted(dist.items()),
-                     [((0, 0), 0), ((0, 1), 1), ((1, 0), 1), ((1, 1), 2)])
-
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/shortest_paths/unweighted.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/shortest_paths/unweighted.py
deleted file mode 100644
index b7ce18a..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/shortest_paths/unweighted.py
+++ /dev/null
@@ -1,359 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-Shortest path algorithms for unweighted graphs.
-"""
-__author__ = """Aric Hagberg (hagberg@lanl.gov)"""
-#    Copyright (C) 2004-2010 by
-#    Aric Hagberg <hagberg@lanl.gov>
-#    Dan Schult <dschult@colgate.edu>
-#    Pieter Swart <swart@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-
-__all__ = ['bidirectional_shortest_path',
-           'single_source_shortest_path',
-           'single_source_shortest_path_length',
-           'all_pairs_shortest_path',
-           'all_pairs_shortest_path_length',
-           'predecessor']
-
-
-import networkx as nx
-
-def single_source_shortest_path_length(G,source,cutoff=None):
-    """Compute the shortest path lengths from source to all reachable nodes.
-
-    Parameters
-    ----------
-    G : NetworkX graph
-
-    source : node
-       Starting node for path
-
-    cutoff : integer, optional
-        Depth to stop the search. Only paths of length <= cutoff are returned.
-
-    Returns
-    -------
-    lengths : dictionary
-        Dictionary of shortest path lengths keyed by target.
-
-    Examples
-    --------
-    >>> G=nx.path_graph(5)
-    >>> length=nx.single_source_shortest_path_length(G,0)
-    >>> length[4]
-    4
-    >>> print(length)
-    {0: 0, 1: 1, 2: 2, 3: 3, 4: 4}
-
-    See Also
-    --------
-    shortest_path_length
-    """
-    seen={}                  # level (number of hops) when seen in BFS
-    level=0                  # the current level
-    nextlevel={source:1}  # dict of nodes to check at next level
-    while nextlevel:
-        thislevel=nextlevel  # advance to next level
-        nextlevel={}         # and start a new list (fringe)
-        for v in thislevel:
-            if v not in seen:
-                seen[v]=level # set the level of vertex v
-                nextlevel.update(G[v]) # add neighbors of v
-        if (cutoff is not None and cutoff <= level):  break
-        level=level+1
-    return seen  # return all path lengths as dictionary
-
-
-def all_pairs_shortest_path_length(G,cutoff=None):
-    """ Compute the shortest path lengths between all nodes in G.
-
-    Parameters
-    ----------
-    G : NetworkX graph
-
-    cutoff : integer, optional
-        depth to stop the search. Only paths of length <= cutoff are returned.
-
-    Returns
-    -------
-    lengths : dictionary
-        Dictionary of shortest path lengths keyed by source and target.
-
-    Notes
-    -----
-    The dictionary returned only has keys for reachable node pairs.
-
-    Examples
-    --------
-    >>> G=nx.path_graph(5)
-    >>> length=nx.all_pairs_shortest_path_length(G)
-    >>> print(length[1][4])
-    3
-    >>> length[1]
-    {0: 1, 1: 0, 2: 1, 3: 2, 4: 3}
-
-    """
-    paths={}
-    for n in G:
-        paths[n]=single_source_shortest_path_length(G,n,cutoff=cutoff)
-    return paths
-
-
-
-
-def bidirectional_shortest_path(G,source,target):
-    """Return a list of nodes in a shortest path between source and target.
-
-    Parameters
-    ----------
-    G : NetworkX graph
-
-    source : node label
-       starting node for path
-
-    target : node label
-       ending node for path
-
-    Returns
-    -------
-    path: list
-       List of nodes in a path from source to target.
-
-    Raises
-    ------
-    NetworkXNoPath
-       If no path exists between source and target.
-
-    See Also
-    --------
-    shortest_path
-
-    Notes
-    -----
-    This algorithm is used by shortest_path(G,source,target).
-    """
-    # call helper to do the real work
-    results=_bidirectional_pred_succ(G,source,target)
-    pred,succ,w=results
-
-    # build path from pred+w+succ
-    path=[]
-    # from w to target
-    while w is not None:
-        path.append(w)
-        w=succ[w]
-    # from source to w
-    w=pred[path[0]]
-    while w is not None:
-        path.insert(0,w)
-        w=pred[w]
-
-    return path
-
-def _bidirectional_pred_succ(G, source, target):
-    """Bidirectional shortest path helper.
-
-       Returns (pred,succ,w) where
-       pred is a dictionary of predecessors from w to the source, and
-       succ is a dictionary of successors from w to the target.
-    """
-    # does BFS from both source and target and meets in the middle
-    if target == source:
-        return ({target:None},{source:None},source)
-
-    # handle either directed or undirected
-    if G.is_directed():
-        Gpred=G.predecessors_iter
-        Gsucc=G.successors_iter
-    else:
-        Gpred=G.neighbors_iter
-        Gsucc=G.neighbors_iter
-
-    # predecesssor and successors in search
-    pred={source:None}
-    succ={target:None}
-
-    # initialize fringes, start with forward
-    forward_fringe=[source]
-    reverse_fringe=[target]
-
-    while forward_fringe and reverse_fringe:
-        if len(forward_fringe) <= len(reverse_fringe):
-            this_level=forward_fringe
-            forward_fringe=[]
-            for v in this_level:
-                for w in Gsucc(v):
-                    if w not in pred:
-                        forward_fringe.append(w)
-                        pred[w]=v
-                    if w in succ:  return pred,succ,w # found path
-        else:
-            this_level=reverse_fringe
-            reverse_fringe=[]
-            for v in this_level:
-                for w in Gpred(v):
-                    if w not in succ:
-                        succ[w]=v
-                        reverse_fringe.append(w)
-                    if w in pred:  return pred,succ,w # found path
-
-    raise nx.NetworkXNoPath("No path between %s and %s." % (source, target))
-
-
-def single_source_shortest_path(G,source,cutoff=None):
-    """Compute shortest path between source
-    and all other nodes reachable from source.
-
-    Parameters
-    ----------
-    G : NetworkX graph
-
-    source : node label
-       Starting node for path
-
-    cutoff : integer, optional
-        Depth to stop the search. Only paths of length <= cutoff are returned.
-
-    Returns
-    -------
-    lengths : dictionary
-        Dictionary, keyed by target, of shortest paths.
-
-    Examples
-    --------
-    >>> G=nx.path_graph(5)
-    >>> path=nx.single_source_shortest_path(G,0)
-    >>> path[4]
-    [0, 1, 2, 3, 4]
-
-    Notes
-    -----
-    The shortest path is not necessarily unique. So there can be multiple
-    paths between the source and each target node, all of which have the
-    same 'shortest' length. For each target node, this function returns
-    only one of those paths.
-
-    See Also
-    --------
-    shortest_path
-    """
-    level=0                  # the current level
-    nextlevel={source:1}       # list of nodes to check at next level
-    paths={source:[source]}  # paths dictionary  (paths to key from source)
-    if cutoff==0:
-        return paths
-    while nextlevel:
-        thislevel=nextlevel
-        nextlevel={}
-        for v in thislevel:
-            for w in G[v]:
-                if w not in paths:
-                    paths[w]=paths[v]+[w]
-                    nextlevel[w]=1
-        level=level+1
-        if (cutoff is not None and cutoff <= level):  break
-    return paths
-
-
-def all_pairs_shortest_path(G,cutoff=None):
-    """ Compute shortest paths between all nodes.
-
-    Parameters
-    ----------
-    G : NetworkX graph
-
-    cutoff : integer, optional
-        Depth to stop the search. Only paths of length <= cutoff are returned.
-
-    Returns
-    -------
-    lengths : dictionary
-        Dictionary, keyed by source and target, of shortest paths.
-
-    Examples
-    --------
-    >>> G=nx.path_graph(5)
-    >>> path=nx.all_pairs_shortest_path(G)
-    >>> print(path[0][4])
-    [0, 1, 2, 3, 4]
-
-    See Also
-    --------
-    floyd_warshall()
-
-    """
-    paths={}
-    for n in G:
-        paths[n]=single_source_shortest_path(G,n,cutoff=cutoff)
-    return paths
-
-
-
-
-def predecessor(G,source,target=None,cutoff=None,return_seen=None):
-    """ Returns dictionary of predecessors for the path from source to all nodes in G.
-
-
-    Parameters
-    ----------
-    G : NetworkX graph
-
-    source : node label
-       Starting node for path
-
-    target : node label, optional
-       Ending node for path. If provided only predecessors between
-       source and target are returned
-
-    cutoff : integer, optional
-        Depth to stop the search. Only paths of length <= cutoff are returned.
-
-
-    Returns
-    -------
-    pred : dictionary
-        Dictionary, keyed by node, of predecessors in the shortest path.
-
-    Examples
-    --------
-    >>> G=nx.path_graph(4)
-    >>> print(G.nodes())
-    [0, 1, 2, 3]
-    >>> nx.predecessor(G,0)
-    {0: [], 1: [0], 2: [1], 3: [2]}
-
-    """
-    level=0                  # the current level
-    nextlevel=[source]       # list of nodes to check at next level
-    seen={source:level}      # level (number of hops) when seen in BFS
-    pred={source:[]}         # predecessor dictionary
-    while nextlevel:
-        level=level+1
-        thislevel=nextlevel
-        nextlevel=[]
-        for v in thislevel:
-            for w in G[v]:
-                if w not in seen:
-                    pred[w]=[v]
-                    seen[w]=level
-                    nextlevel.append(w)
-                elif (seen[w]==level):# add v to predecessor list if it
-                    pred[w].append(v) # is at the correct level
-        if (cutoff and cutoff <= level):
-            break
-
-    if target is not None:
-        if return_seen:
-            if not target in pred: return ([],-1)  # No predecessor
-            return (pred[target],seen[target])
-        else:
-            if not target in pred: return []  # No predecessor
-            return pred[target]
-    else:
-        if return_seen:
-            return (pred,seen)
-        else:
-            return pred
-
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/shortest_paths/weighted.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/shortest_paths/weighted.py
deleted file mode 100644
index 41757f9..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/shortest_paths/weighted.py
+++ /dev/null
@@ -1,765 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-Shortest path algorithms for weighed graphs.
-"""
-__author__ = """\n""".join(['Aric Hagberg <hagberg@lanl.gov>',
-                            'Loïc Séguin-C. <loicseguin@gmail.com>',
-                            'Dan Schult <dschult@colgate.edu>'])
-#    Copyright (C) 2004-2011 by
-#    Aric Hagberg <hagberg@lanl.gov>
-#    Dan Schult <dschult@colgate.edu>
-#    Pieter Swart <swart@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-
-__all__ = ['dijkstra_path',
-           'dijkstra_path_length',
-           'bidirectional_dijkstra',
-           'single_source_dijkstra',
-           'single_source_dijkstra_path',
-           'single_source_dijkstra_path_length',
-           'all_pairs_dijkstra_path',
-           'all_pairs_dijkstra_path_length',
-           'dijkstra_predecessor_and_distance',
-           'bellman_ford','negative_edge_cycle']
-
-import heapq
-import networkx as nx
-from networkx.utils import generate_unique_node
-
-def dijkstra_path(G, source, target, weight='weight'):
-    """Returns the shortest path from source to target in a weighted graph G.
-
-    Parameters
-    ----------
-    G : NetworkX graph
-
-    source : node
-       Starting node
-
-    target : node
-       Ending node
-
-    weight: string, optional (default='weight')
-       Edge data key corresponding to the edge weight
-
-    Returns
-    -------
-    path : list
-       List of nodes in a shortest path.
-
-    Raises
-    ------
-    NetworkXNoPath
-       If no path exists between source and target.
-
-    Examples
-    --------
-    >>> G=nx.path_graph(5)
-    >>> print(nx.dijkstra_path(G,0,4))
-    [0, 1, 2, 3, 4]
-
-    Notes
-    ------
-    Edge weight attributes must be numerical.
-    Distances are calculated as sums of weighted edges traversed.
-
-    See Also
-    --------
-    bidirectional_dijkstra()
-    """
-    (length,path)=single_source_dijkstra(G, source, target=target,
-                                         weight=weight)
-    try:
-        return path[target]
-    except KeyError:
-        raise nx.NetworkXNoPath("node %s not reachable from %s"%(source,target))
-
-
-def dijkstra_path_length(G, source, target, weight='weight'):
-    """Returns the shortest path length from source to target
-    in a weighted graph.
-
-    Parameters
-    ----------
-    G : NetworkX graph
-
-    source : node label
-       starting node for path
-
-    target : node label
-       ending node for path
-
-    weight: string, optional (default='weight')
-       Edge data key corresponding to the edge weight
-
-    Returns
-    -------
-    length : number
-        Shortest path length.
-
-    Raises
-    ------
-    NetworkXNoPath
-        If no path exists between source and target.
-
-    Examples
-    --------
-    >>> G=nx.path_graph(5)
-    >>> print(nx.dijkstra_path_length(G,0,4))
-    4
-
-    Notes
-    -----
-    Edge weight attributes must be numerical.
-    Distances are calculated as sums of weighted edges traversed.
-
-    See Also
-    --------
-    bidirectional_dijkstra()
-    """
-    length=single_source_dijkstra_path_length(G, source, weight=weight)
-    try:
-        return length[target]
-    except KeyError:
-        raise nx.NetworkXNoPath("node %s not reachable from %s"%(source,target))
-
-
-def single_source_dijkstra_path(G,source, cutoff=None, weight='weight'):
-    """Compute shortest path between source and all other reachable
-    nodes for a weighted graph.
-
-    Parameters
-    ----------
-    G : NetworkX graph
-
-    source : node
-       Starting node for path.
-
-    weight: string, optional (default='weight')
-       Edge data key corresponding to the edge weight
-
-    cutoff : integer or float, optional
-       Depth to stop the search. Only paths of length <= cutoff are returned.
-
-    Returns
-    -------
-    paths : dictionary
-       Dictionary of shortest path lengths keyed by target.
-
-    Examples
-    --------
-    >>> G=nx.path_graph(5)
-    >>> path=nx.single_source_dijkstra_path(G,0)
-    >>> path[4]
-    [0, 1, 2, 3, 4]
-
-    Notes
-    -----
-    Edge weight attributes must be numerical.
-    Distances are calculated as sums of weighted edges traversed.
-
-    See Also
-    --------
-    single_source_dijkstra()
-
-    """
-    (length,path)=single_source_dijkstra(G,source, cutoff = cutoff, weight = weight)
-    return path
-
-
-def single_source_dijkstra_path_length(G, source, cutoff= None,
-                                       weight= 'weight'):
-    """Compute the shortest path length between source and all other
-    reachable nodes for a weighted graph.
-
-    Parameters
-    ----------
-    G : NetworkX graph
-
-    source : node label
-       Starting node for path
-
-    weight: string, optional (default='weight')
-       Edge data key corresponding to the edge weight.
-
-    cutoff : integer or float, optional
-       Depth to stop the search. Only paths of length <= cutoff are returned.
-
-    Returns
-    -------
-    length : dictionary
-       Dictionary of shortest lengths keyed by target.
-
-    Examples
-    --------
-    >>> G=nx.path_graph(5)
-    >>> length=nx.single_source_dijkstra_path_length(G,0)
-    >>> length[4]
-    4
-    >>> print(length)
-    {0: 0, 1: 1, 2: 2, 3: 3, 4: 4}
-
-    Notes
-    -----
-    Edge weight attributes must be numerical.
-    Distances are calculated as sums of weighted edges traversed.
-
-    See Also
-    --------
-    single_source_dijkstra()
-
-    """
-    dist = {}  # dictionary of final distances
-    seen = {source:0}
-    fringe=[] # use heapq with (distance,label) tuples
-    heapq.heappush(fringe,(0,source))
-    while fringe:
-        (d,v)=heapq.heappop(fringe)
-        if v in dist:
-            continue # already searched this node.
-        dist[v] = d
-        #for ignore,w,edgedata in G.edges_iter(v,data=True):
-        #is about 30% slower than the following
-        if G.is_multigraph():
-            edata=[]
-            for w,keydata in G[v].items():
-                minweight=min((dd.get(weight,1)
-                               for k,dd in keydata.items()))
-                edata.append((w,{weight:minweight}))
-        else:
-            edata=iter(G[v].items())
-
-        for w,edgedata in edata:
-            vw_dist = dist[v] + edgedata.get(weight,1)
-            if cutoff is not None:
-                if vw_dist>cutoff:
-                    continue
-            if w in dist:
-                if vw_dist < dist[w]:
-                    raise ValueError('Contradictory paths found:',
-                                     'negative weights?')
-            elif w not in seen or vw_dist < seen[w]:
-                seen[w] = vw_dist
-                heapq.heappush(fringe,(vw_dist,w))
-    return dist
-
-
-def single_source_dijkstra(G,source,target=None,cutoff=None,weight='weight'):
-    """Compute shortest paths and lengths in a weighted graph G.
-
-    Uses Dijkstra's algorithm for shortest paths.
-
-    Parameters
-    ----------
-    G : NetworkX graph
-
-    source : node label
-       Starting node for path
-
-    target : node label, optional
-       Ending node for path
-
-    cutoff : integer or float, optional
-       Depth to stop the search. Only paths of length <= cutoff are returned.
-
-    Returns
-    -------
-    distance,path : dictionaries
-       Returns a tuple of two dictionaries keyed by node.
-       The first dictionary stores distance from the source.
-       The second stores the path from the source to that node.
-
-
-    Examples
-    --------
-    >>> G=nx.path_graph(5)
-    >>> length,path=nx.single_source_dijkstra(G,0)
-    >>> print(length[4])
-    4
-    >>> print(length)
-    {0: 0, 1: 1, 2: 2, 3: 3, 4: 4}
-    >>> path[4]
-    [0, 1, 2, 3, 4]
-
-    Notes
-    ---------
-    Edge weight attributes must be numerical.
-    Distances are calculated as sums of weighted edges traversed.
-
-    Based on the Python cookbook recipe (119466) at
-    http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/119466
-
-    This algorithm is not guaranteed to work if edge weights
-    are negative or are floating point numbers
-    (overflows and roundoff errors can cause problems).
-
-    See Also
-    --------
-    single_source_dijkstra_path()
-    single_source_dijkstra_path_length()
-    """
-    if source==target:
-        return ({source:0}, {source:[source]})
-    dist = {}  # dictionary of final distances
-    paths = {source:[source]}  # dictionary of paths
-    seen = {source:0}
-    fringe=[] # use heapq with (distance,label) tuples
-    heapq.heappush(fringe,(0,source))
-    while fringe:
-        (d,v)=heapq.heappop(fringe)
-        if v in dist:
-            continue # already searched this node.
-        dist[v] = d
-        if v == target:
-            break
-        #for ignore,w,edgedata in G.edges_iter(v,data=True):
-        #is about 30% slower than the following
-        if G.is_multigraph():
-            edata=[]
-            for w,keydata in G[v].items():
-                minweight=min((dd.get(weight,1)
-                               for k,dd in keydata.items()))
-                edata.append((w,{weight:minweight}))
-        else:
-            edata=iter(G[v].items())
-
-        for w,edgedata in edata:
-            vw_dist = dist[v] + edgedata.get(weight,1)
-            if cutoff is not None:
-                if vw_dist>cutoff:
-                    continue
-            if w in dist:
-                if vw_dist < dist[w]:
-                    raise ValueError('Contradictory paths found:',
-                                     'negative weights?')
-            elif w not in seen or vw_dist < seen[w]:
-                seen[w] = vw_dist
-                heapq.heappush(fringe,(vw_dist,w))
-                paths[w] = paths[v]+[w]
-    return (dist,paths)
-
-
-def dijkstra_predecessor_and_distance(G,source, cutoff=None, weight='weight'):
-    """Compute shortest path length and predecessors on shortest paths
-    in weighted graphs.
-
-    Parameters
-    ----------
-    G : NetworkX graph
-
-    source : node label
-       Starting node for path
-
-    weight: string, optional (default='weight')
-       Edge data key corresponding to the edge weight
-
-    cutoff : integer or float, optional
-       Depth to stop the search. Only paths of length <= cutoff are returned.
-
-    Returns
-    -------
-    pred,distance : dictionaries
-       Returns two dictionaries representing a list of predecessors
-       of a node and the distance to each node.
-
-    Notes
-    -----
-    Edge weight attributes must be numerical.
-    Distances are calculated as sums of weighted edges traversed.
-
-    The list of predecessors contains more than one element only when
-    there are more than one shortest paths to the key node.
-    """
-    push=heapq.heappush
-    pop=heapq.heappop
-    dist = {}  # dictionary of final distances
-    pred = {source:[]}  # dictionary of predecessors
-    seen = {source:0}
-    fringe=[] # use heapq with (distance,label) tuples
-    push(fringe,(0,source))
-    while fringe:
-        (d,v)=pop(fringe)
-        if v in dist: continue # already searched this node.
-        dist[v] = d
-        if G.is_multigraph():
-            edata=[]
-            for w,keydata in G[v].items():
-                minweight=min((dd.get(weight,1)
-                               for k,dd in keydata.items()))
-                edata.append((w,{weight:minweight}))
-        else:
-            edata=iter(G[v].items())
-        for w,edgedata in edata:
-            vw_dist = dist[v] + edgedata.get(weight,1)
-            if cutoff is not None:
-                if vw_dist>cutoff:
-                    continue
-            if w in dist:
-                if vw_dist < dist[w]:
-                    raise ValueError('Contradictory paths found:',
-                                     'negative weights?')
-            elif w not in seen or vw_dist < seen[w]:
-                seen[w] = vw_dist
-                push(fringe,(vw_dist,w))
-                pred[w] = [v]
-            elif vw_dist==seen[w]:
-                pred[w].append(v)
-    return (pred,dist)
-
-
-def all_pairs_dijkstra_path_length(G, cutoff=None, weight='weight'):
-    """ Compute shortest path lengths between all nodes in a weighted graph.
-
-    Parameters
-    ----------
-    G : NetworkX graph
-
-    weight: string, optional (default='weight')
-       Edge data key corresponding to the edge weight
-
-    cutoff : integer or float, optional
-       Depth to stop the search. Only paths of length <= cutoff are returned.
-
-    Returns
-    -------
-    distance : dictionary
-       Dictionary, keyed by source and target, of shortest path lengths.
-
-    Examples
-    --------
-    >>> G=nx.path_graph(5)
-    >>> length=nx.all_pairs_dijkstra_path_length(G)
-    >>> print(length[1][4])
-    3
-    >>> length[1]
-    {0: 1, 1: 0, 2: 1, 3: 2, 4: 3}
-
-    Notes
-    -----
-    Edge weight attributes must be numerical.
-    Distances are calculated as sums of weighted edges traversed.
-
-    The dictionary returned only has keys for reachable node pairs.
-    """
-    paths={}
-    for n in G:
-        paths[n]=single_source_dijkstra_path_length(G,n, cutoff=cutoff,
-                                                    weight=weight)
-    return paths
-
-def all_pairs_dijkstra_path(G, cutoff=None, weight='weight'):
-    """ Compute shortest paths between all nodes in a weighted graph.
-
-    Parameters
-    ----------
-    G : NetworkX graph
-
-    weight: string, optional (default='weight')
-       Edge data key corresponding to the edge weight
-
-    cutoff : integer or float, optional
-       Depth to stop the search. Only paths of length <= cutoff are returned.
-
-    Returns
-    -------
-    distance : dictionary
-       Dictionary, keyed by source and target, of shortest paths.
-
-    Examples
-    --------
-    >>> G=nx.path_graph(5)
-    >>> path=nx.all_pairs_dijkstra_path(G)
-    >>> print(path[0][4])
-    [0, 1, 2, 3, 4]
-
-    Notes
-    -----
-    Edge weight attributes must be numerical.
-    Distances are calculated as sums of weighted edges traversed.
-
-    See Also
-    --------
-    floyd_warshall()
-
-    """
-    paths={}
-    for n in G:
-        paths[n]=single_source_dijkstra_path(G, n, cutoff=cutoff,
-                                             weight=weight)
-    return paths
-
-def bellman_ford(G, source, weight = 'weight'):
-    """Compute shortest path lengths and predecessors on shortest paths
-    in weighted graphs.
-
-    The algorithm has a running time of O(mn) where n is the number of
-    nodes and m is the number of edges.  It is slower than Dijkstra but
-    can handle negative edge weights.
-
-    Parameters
-    ----------
-    G : NetworkX graph
-       The algorithm works for all types of graphs, including directed
-       graphs and multigraphs.
-
-    source: node label
-       Starting node for path
-
-    weight: string, optional (default='weight')
-       Edge data key corresponding to the edge weight
-
-    Returns
-    -------
-    pred, dist : dictionaries
-       Returns two dictionaries keyed by node to predecessor in the
-       path and to the distance from the source respectively.
-
-    Raises
-    ------
-    NetworkXUnbounded
-       If the (di)graph contains a negative cost (di)cycle, the
-       algorithm raises an exception to indicate the presence of the
-       negative cost (di)cycle.  Note: any negative weight edge in an
-       undirected graph is a negative cost cycle.
-
-    Examples
-    --------
-    >>> import networkx as nx
-    >>> G = nx.path_graph(5, create_using = nx.DiGraph())
-    >>> pred, dist = nx.bellman_ford(G, 0)
-    >>> pred
-    {0: None, 1: 0, 2: 1, 3: 2, 4: 3}
-    >>> dist
-    {0: 0, 1: 1, 2: 2, 3: 3, 4: 4}
-
-    >>> from nose.tools import assert_raises
-    >>> G = nx.cycle_graph(5, create_using = nx.DiGraph())
-    >>> G[1][2]['weight'] = -7
-    >>> assert_raises(nx.NetworkXUnbounded, nx.bellman_ford, G, 0)
-
-    Notes
-    -----
-    Edge weight attributes must be numerical.
-    Distances are calculated as sums of weighted edges traversed.
-
-    The dictionaries returned only have keys for nodes reachable from
-    the source.
-
-    In the case where the (di)graph is not connected, if a component
-    not containing the source contains a negative cost (di)cycle, it
-    will not be detected.
-
-    """
-    if source not in G:
-        raise KeyError("Node %s is not found in the graph"%source)
-    numb_nodes = len(G)
-
-    dist = {source: 0}
-    pred = {source: None}
-
-    if numb_nodes == 1:
-       return pred, dist
-
-    if G.is_multigraph():
-        def get_weight(edge_dict):
-            return min([eattr.get(weight,1) for eattr in edge_dict.values()])
-    else:
-        def get_weight(edge_dict):
-            return edge_dict.get(weight,1)
-
-    for i in range(numb_nodes):
-        no_changes=True
-        # Only need edges from nodes in dist b/c all others have dist==inf
-        for u, dist_u in list(dist.items()): # get all edges from nodes in dist
-            for v, edict in G[u].items():  # double loop handles undirected too
-                dist_v = dist_u + get_weight(edict)
-                if v not in dist or dist[v] > dist_v:
-                    dist[v] = dist_v
-                    pred[v] = u
-                    no_changes = False
-        if no_changes:
-            break
-    else:
-        raise nx.NetworkXUnbounded("Negative cost cycle detected.")
-    return pred, dist
-
-def negative_edge_cycle(G, weight = 'weight'):
-    """Return True if there exists a negative edge cycle anywhere in G.
-
-    Parameters
-    ----------
-    G : NetworkX graph
-
-    weight: string, optional (default='weight')
-       Edge data key corresponding to the edge weight
-
-    Returns
-    -------
-    negative_cycle : bool
-        True if a negative edge cycle exists, otherwise False.
-
-    Examples
-    --------
-    >>> import networkx as nx
-    >>> G = nx.cycle_graph(5, create_using = nx.DiGraph())
-    >>> print(nx.negative_edge_cycle(G))
-    False
-    >>> G[1][2]['weight'] = -7
-    >>> print(nx.negative_edge_cycle(G))
-    True
-
-    Notes
-    -----
-    Edge weight attributes must be numerical.
-    Distances are calculated as sums of weighted edges traversed.
-
-    This algorithm uses bellman_ford() but finds negative cycles
-    on any component by first adding a new node connected to
-    every node, and starting bellman_ford on that node.  It then
-    removes that extra node.
-    """
-    newnode = generate_unique_node()
-    G.add_edges_from([ (newnode,n) for n in G])
-
-    try:
-        bellman_ford(G, newnode, weight)
-    except nx.NetworkXUnbounded:
-        G.remove_node(newnode)
-        return True
-    G.remove_node(newnode)
-    return False
-
-
-def bidirectional_dijkstra(G, source, target, weight = 'weight'):
-    """Dijkstra's algorithm for shortest paths using bidirectional search.
-
-    Parameters
-    ----------
-    G : NetworkX graph
-
-    source : node
-       Starting node.
-
-    target : node
-       Ending node.
-
-    weight: string, optional (default='weight')
-       Edge data key corresponding to the edge weight
-
-    Returns
-    -------
-    length : number
-        Shortest path length.
-
-    Returns a tuple of two dictionaries keyed by node.
-    The first dictionary stores distance from the source.
-    The second stores the path from the source to that node.
-
-    Raises
-    ------
-    NetworkXNoPath
-        If no path exists between source and target.
-
-    Examples
-    --------
-    >>> G=nx.path_graph(5)
-    >>> length,path=nx.bidirectional_dijkstra(G,0,4)
-    >>> print(length)
-    4
-    >>> print(path)
-    [0, 1, 2, 3, 4]
-
-    Notes
-    -----
-    Edge weight attributes must be numerical.
-    Distances are calculated as sums of weighted edges traversed.
-
-    In practice  bidirectional Dijkstra is much more than twice as fast as
-    ordinary Dijkstra.
-
-    Ordinary Dijkstra expands nodes in a sphere-like manner from the
-    source. The radius of this sphere will eventually be the length
-    of the shortest path. Bidirectional Dijkstra will expand nodes
-    from both the source and the target, making two spheres of half
-    this radius. Volume of the first sphere is pi*r*r while the
-    others are 2*pi*r/2*r/2, making up half the volume.
-
-    This algorithm is not guaranteed to work if edge weights
-    are negative or are floating point numbers
-    (overflows and roundoff errors can cause problems).
-
-    See Also
-    --------
-    shortest_path
-    shortest_path_length
-    """
-    if source == target: return (0, [source])
-    #Init:   Forward             Backward
-    dists =  [{},                {}]# dictionary of final distances
-    paths =  [{source:[source]}, {target:[target]}] # dictionary of paths
-    fringe = [[],                []] #heap of (distance, node) tuples for extracting next node to expand
-    seen =   [{source:0},        {target:0} ]#dictionary of distances to nodes seen
-    #initialize fringe heap
-    heapq.heappush(fringe[0], (0, source))
-    heapq.heappush(fringe[1], (0, target))
-    #neighs for extracting correct neighbor information
-    if G.is_directed():
-        neighs = [G.successors_iter, G.predecessors_iter]
-    else:
-        neighs = [G.neighbors_iter, G.neighbors_iter]
-    #variables to hold shortest discovered path
-    #finaldist = 1e30000
-    finalpath = []
-    dir = 1
-    while fringe[0] and fringe[1]:
-        # choose direction
-        # dir == 0 is forward direction and dir == 1 is back
-        dir = 1-dir
-        # extract closest to expand
-        (dist, v )= heapq.heappop(fringe[dir])
-        if v in dists[dir]:
-            # Shortest path to v has already been found
-            continue
-        # update distance
-        dists[dir][v] = dist #equal to seen[dir][v]
-        if v in dists[1-dir]:
-            # if we have scanned v in both directions we are done
-            # we have now discovered the shortest path
-            return (finaldist,finalpath)
-
-        for w in neighs[dir](v):
-            if(dir==0): #forward
-                if G.is_multigraph():
-                    minweight=min((dd.get(weight,1)
-                               for k,dd in G[v][w].items()))
-                else:
-                    minweight=G[v][w].get(weight,1)
-                vwLength = dists[dir][v] + minweight #G[v][w].get(weight,1)
-            else: #back, must remember to change v,w->w,v
-                if G.is_multigraph():
-                    minweight=min((dd.get(weight,1)
-                               for k,dd in G[w][v].items()))
-                else:
-                    minweight=G[w][v].get(weight,1)
-                vwLength = dists[dir][v] + minweight #G[w][v].get(weight,1)
-
-            if w in dists[dir]:
-                if vwLength < dists[dir][w]:
-                    raise ValueError("Contradictory paths found: negative weights?")
-            elif w not in seen[dir] or vwLength < seen[dir][w]:
-                # relaxing
-                seen[dir][w] = vwLength
-                heapq.heappush(fringe[dir], (vwLength,w))
-                paths[dir][w] = paths[dir][v]+[w]
-                if w in seen[0] and w in seen[1]:
-                    #see if this path is better than than the already
-                    #discovered shortest path
-                    totaldist = seen[0][w] + seen[1][w]
-                    if finalpath == [] or finaldist > totaldist:
-                        finaldist = totaldist
-                        revpath = paths[1][w][:]
-                        revpath.reverse()
-                        finalpath = paths[0][w] + revpath[1:]
-    raise nx.NetworkXNoPath("No path between %s and %s." % (source, target))
-
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/simple_paths.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/simple_paths.py
deleted file mode 100644
index f72d4d2..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/simple_paths.py
+++ /dev/null
@@ -1,124 +0,0 @@
-# -*- coding: utf-8 -*-
-#    Copyright (C) 2012 by
-#    Sergio Nery Simoes <sergionery@gmail.com>
-#    All rights reserved.
-#    BSD license.
-import networkx as nx
-__author__ = """\n""".join(['Sérgio Nery Simões <sergionery@gmail.com>',
-                            'Aric Hagberg <aric.hagberg@gmail.com>'])
-__all__ = ['all_simple_paths']
-
-def all_simple_paths(G, source, target, cutoff=None):
-    """Generate all simple paths in the graph G from source to target.
-
-    A simple path is a path with no repeated nodes.
-
-    Parameters
-    ----------
-    G : NetworkX graph
-
-    source : node
-       Starting node for path
-
-    target : node
-       Ending node for path
-
-    cutoff : integer, optional
-        Depth to stop the search. Only paths of length <= cutoff are returned.
-
-    Returns
-    -------
-    path_generator: generator
-       A generator that produces lists of simple paths.  If there are no paths
-       between the source and target within the given cutoff the generator
-       produces no output.
-
-    Examples
-    --------
-    >>> G = nx.complete_graph(4)
-    >>> for path in nx.all_simple_paths(G, source=0, target=3):
-    ...     print(path)
-    ...
-    [0, 1, 2, 3]
-    [0, 1, 3]
-    [0, 2, 1, 3]
-    [0, 2, 3]
-    [0, 3]
-    >>> paths = nx.all_simple_paths(G, source=0, target=3, cutoff=2)
-    >>> print(list(paths))
-    [[0, 1, 3], [0, 2, 3], [0, 3]]
-
-    Notes
-    -----
-    This algorithm uses a modified depth-first search to generate the
-    paths [1]_.  A single path can be found in `O(V+E)` time but the
-    number of simple paths in a graph can be very large, e.g. `O(n!)` in
-    the complete graph of order n.
-
-    References
-    ----------
-    .. [1] R. Sedgewick, "Algorithms in C, Part 5: Graph Algorithms",
-       Addison Wesley Professional, 3rd ed., 2001.
-
-    See Also
-    --------
-    all_shortest_paths, shortest_path
-    """
-    if source not in G:
-        raise nx.NetworkXError('source node %s not in graph'%source)
-    if target not in G:
-        raise nx.NetworkXError('target node %s not in graph'%target)
-    if cutoff is None:
-        cutoff = len(G)-1
-    if G.is_multigraph():
-        return _all_simple_paths_multigraph(G, source, target, cutoff=cutoff)
-    else:
-        return _all_simple_paths_graph(G, source, target, cutoff=cutoff)
-
-def _all_simple_paths_graph(G, source, target, cutoff=None):
-    if cutoff < 1:
-        return
-    visited = [source]
-    stack = [iter(G[source])]
-    while stack:
-        children = stack[-1]
-        child = next(children, None)
-        if child is None:
-            stack.pop()
-            visited.pop()
-        elif len(visited) < cutoff:
-            if child == target:
-                yield visited + [target]
-            elif child not in visited:
-                visited.append(child)
-                stack.append(iter(G[child]))
-        else: #len(visited) == cutoff:
-            if child == target or target in children:
-                yield visited + [target]
-            stack.pop()
-            visited.pop()
-
-
-def _all_simple_paths_multigraph(G, source, target, cutoff=None):
-    if cutoff < 1:
-        return
-    visited = [source]
-    stack = [(v for u,v in G.edges(source))]
-    while stack:
-        children = stack[-1]
-        child = next(children, None)
-        if child is None:
-            stack.pop()
-            visited.pop()
-        elif len(visited) < cutoff:
-            if child == target:
-                yield visited + [target]
-            elif child not in visited:
-                visited.append(child)
-                stack.append((v for u,v in G.edges(child)))
-        else: #len(visited) == cutoff:
-            count = ([child]+list(children)).count(target)
-            for i in range(count):
-                yield visited + [target]
-            stack.pop()
-            visited.pop()
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/smetric.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/smetric.py
deleted file mode 100644
index 0e801bf..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/smetric.py
+++ /dev/null
@@ -1,37 +0,0 @@
-import networkx as nx
-#from networkx.generators.smax import li_smax_graph
-
-def s_metric(G, normalized=True):
-    """Return the s-metric of graph.
-
-    The s-metric is defined as the sum of the products deg(u)*deg(v)
-    for every edge (u,v) in G. If norm is provided construct the
-    s-max graph and compute it's s_metric, and return the normalized
-    s value
-
-    Parameters
-    ----------
-    G    : graph
-           The graph used to compute the s-metric.
-    normalized : bool (optional)
-           Normalize the value.
-
-    Returns
-    -------       
-    s : float
-        The s-metric of the graph.
-
-    References
-    ----------
-    .. [1] Lun Li, David Alderson, John C. Doyle, and Walter Willinger,
-           Towards a Theory of Scale-Free Graphs:
-           Definition, Properties, and  Implications (Extended Version), 2005.
-           http://arxiv.org/abs/cond-mat/0501169
-    """
-    if normalized:
-        raise nx.NetworkXError("Normalization not implemented")
-#        Gmax = li_smax_graph(list(G.degree().values()))
-#        return s_metric(G,normalized=False)/s_metric(Gmax,normalized=False)
-#    else:    
-    return float(sum([G.degree(u)*G.degree(v) for (u,v) in G.edges_iter()]))
-
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/swap.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/swap.py
deleted file mode 100644
index 33d882d..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/swap.py
+++ /dev/null
@@ -1,185 +0,0 @@
-# -*- coding: utf-8 -*-
-"""Swap edges in a graph.
-"""
-#    Copyright (C) 2004-2012 by
-#    Aric Hagberg <hagberg@lanl.gov>
-#    Dan Schult <dschult@colgate.edu>
-#    Pieter Swart <swart@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-import math
-import random
-import networkx as nx
-__author__ = "\n".join(['Aric Hagberg (hagberg@lanl.gov)',
-                        'Pieter Swart (swart@lanl.gov)',
-                        'Dan Schult (dschult@colgate.edu)'
-                        'Joel Miller (joel.c.miller.research@gmail.com)'
-                        'Ben Edwards'])
-
-__all__ = ['double_edge_swap',
-           'connected_double_edge_swap']
-
-
-def double_edge_swap(G, nswap=1, max_tries=100):
-    """Swap two edges in the graph while keeping the node degrees fixed.
-
-    A double-edge swap removes two randomly chosen edges u-v and x-y
-    and creates the new edges u-x and v-y::
-
-     u--v            u  v
-            becomes  |  |
-     x--y            x  y
-
-    If either the edge u-x or v-y already exist no swap is performed
-    and another attempt is made to find a suitable edge pair.
-
-    Parameters
-    ----------
-    G : graph
-       An undirected graph
-
-    nswap : integer (optional, default=1)
-       Number of double-edge swaps to perform
-
-    max_tries : integer (optional)
-       Maximum number of attempts to swap edges
-
-    Returns
-    -------
-    G : graph
-       The graph after double edge swaps.
-
-    Notes
-    -----
-    Does not enforce any connectivity constraints.
-
-    The graph G is modified in place.
-    """
-    if G.is_directed():
-        raise nx.NetworkXError(\
-            "double_edge_swap() not defined for directed graphs.")
-    if nswap>max_tries:
-        raise nx.NetworkXError("Number of swaps > number of tries allowed.")
-    if len(G) < 4:
-        raise nx.NetworkXError("Graph has less than four nodes.")
-    # Instead of choosing uniformly at random from a generated edge list,
-    # this algorithm chooses nonuniformly from the set of nodes with
-    # probability weighted by degree.
-    n=0
-    swapcount=0
-    keys,degrees=zip(*G.degree().items()) # keys, degree
-    cdf=nx.utils.cumulative_distribution(degrees)  # cdf of degree
-    while swapcount < nswap:
-#        if random.random() < 0.5: continue # trick to avoid periodicities?
-        # pick two random edges without creating edge list
-        # choose source node indices from discrete distribution
-        (ui,xi)=nx.utils.discrete_sequence(2,cdistribution=cdf)
-        if ui==xi:
-            continue # same source, skip
-        u=keys[ui] # convert index to label
-        x=keys[xi]
-        # choose target uniformly from neighbors
-        v=random.choice(list(G[u]))
-        y=random.choice(list(G[x]))
-        if v==y:
-            continue # same target, skip
-        if (x not in G[u]) and (y not in G[v]): # don't create parallel edges
-            G.add_edge(u,x)
-            G.add_edge(v,y)
-            G.remove_edge(u,v)
-            G.remove_edge(x,y)
-            swapcount+=1
-        if n >= max_tries:
-            e=('Maximum number of swap attempts (%s) exceeded '%n +
-            'before desired swaps achieved (%s).'%nswap)
-            raise nx.NetworkXAlgorithmError(e)
-        n+=1
-    return G
-
-def connected_double_edge_swap(G, nswap=1):
-    """Attempt nswap double-edge swaps in the graph G.
-
-    A double-edge swap removes two randomly chosen edges u-v and x-y
-    and creates the new edges u-x and v-y::
-
-     u--v            u  v
-            becomes  |  |
-     x--y            x  y
-
-    If either the edge u-x or v-y already exist no swap is performed so
-    the actual count of swapped edges is always <= nswap
-
-    Parameters
-    ----------
-    G : graph
-       An undirected graph
-
-    nswap : integer (optional, default=1)
-       Number of double-edge swaps to perform
-
-    Returns
-    -------
-    G : int
-       The number of successful swaps
-
-    Notes
-    -----
-    The initial graph G must be connected, and the resulting graph is connected.
-    The graph G is modified in place.
-
-    References
-    ----------
-    .. [1] C. Gkantsidis and M. Mihail and E. Zegura,
-           The Markov chain simulation method for generating connected
-           power law random graphs, 2003.
-           http://citeseer.ist.psu.edu/gkantsidis03markov.html
-    """
-    import math
-    if not nx.is_connected(G):
-       raise nx.NetworkXError("Graph not connected")
-    if len(G) < 4:
-        raise nx.NetworkXError("Graph has less than four nodes.")
-    n=0
-    swapcount=0
-    deg=G.degree()
-    dk=list(deg.keys()) # Label key for nodes
-    cdf=nx.utils.cumulative_distribution(list(G.degree().values()))
-    window=1
-    while n < nswap:
-        wcount=0
-        swapped=[]
-        while wcount < window and n < nswap:
-            # Pick two random edges without creating edge list
-            # Choose source nodes from discrete degree distribution
-            (ui,xi)=nx.utils.discrete_sequence(2,cdistribution=cdf)
-            if ui==xi:
-                continue # same source, skip
-            u=dk[ui] # convert index to label
-            x=dk[xi]
-            # Choose targets uniformly from neighbors
-            v=random.choice(G.neighbors(u))
-            y=random.choice(G.neighbors(x)) #
-            if v==y: continue # same target, skip
-            if (not G.has_edge(u,x)) and (not G.has_edge(v,y)):
-                G.remove_edge(u,v)
-                G.remove_edge(x,y)
-                G.add_edge(u,x)
-                G.add_edge(v,y)
-                swapped.append((u,v,x,y))
-                swapcount+=1
-            n+=1
-            wcount+=1
-        if nx.is_connected(G):
-            window+=1
-        else:
-            # not connected, undo changes from previous window, decrease window
-            while swapped:
-                (u,v,x,y)=swapped.pop()
-                G.add_edge(u,v)
-                G.add_edge(x,y)
-                G.remove_edge(u,x)
-                G.remove_edge(v,y)
-                swapcount-=1
-            window = int(math.ceil(float(window)/2))
-    return swapcount
-
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/tests/test_block.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/tests/test_block.py
deleted file mode 100644
index 281e385..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/tests/test_block.py
+++ /dev/null
@@ -1,103 +0,0 @@
-#!/usr/bin/env python
-from nose.tools import *
-import networkx
-
-class TestBlock:
-
-    def test_path(self):
-        G=networkx.path_graph(6)
-        partition=[[0,1],[2,3],[4,5]]
-        M=networkx.blockmodel(G,partition)
-        assert_equal(sorted(M.nodes()),[0,1,2])
-        assert_equal(sorted(M.edges()),[(0,1),(1,2)])
-        for n in M.nodes():
-            assert_equal(M.node[n]['nedges'],1)
-            assert_equal(M.node[n]['nnodes'],2)
-            assert_equal(M.node[n]['density'],1.0)
-
-    def test_multigraph_path(self):
-        G=networkx.MultiGraph(networkx.path_graph(6))
-        partition=[[0,1],[2,3],[4,5]]
-        M=networkx.blockmodel(G,partition,multigraph=True)
-        assert_equal(sorted(M.nodes()),[0,1,2])
-        assert_equal(sorted(M.edges()),[(0,1),(1,2)])
-        for n in M.nodes():
-            assert_equal(M.node[n]['nedges'],1)
-            assert_equal(M.node[n]['nnodes'],2)
-            assert_equal(M.node[n]['density'],1.0)
-
-    def test_directed_path(self):
-        G = networkx.DiGraph()
-        G.add_path(list(range(6)))
-        partition=[[0,1],[2,3],[4,5]]
-        M=networkx.blockmodel(G,partition)
-        assert_equal(sorted(M.nodes()),[0,1,2])
-        assert_equal(sorted(M.edges()),[(0,1),(1,2)])
-        for n in M.nodes():
-            assert_equal(M.node[n]['nedges'],1)
-            assert_equal(M.node[n]['nnodes'],2)
-            assert_equal(M.node[n]['density'],0.5)
-
-    def test_directed_multigraph_path(self):
-        G = networkx.MultiDiGraph()
-        G.add_path(list(range(6)))
-        partition=[[0,1],[2,3],[4,5]]
-        M=networkx.blockmodel(G,partition,multigraph=True)
-        assert_equal(sorted(M.nodes()),[0,1,2])
-        assert_equal(sorted(M.edges()),[(0,1),(1,2)])
-        for n in M.nodes():
-            assert_equal(M.node[n]['nedges'],1)
-            assert_equal(M.node[n]['nnodes'],2)
-            assert_equal(M.node[n]['density'],0.5)
-
-    @raises(networkx.NetworkXException)
-    def test_overlapping(self):
-        G=networkx.path_graph(6)
-        partition=[[0,1,2],[2,3],[4,5]]
-        M=networkx.blockmodel(G,partition)
-
-    def test_weighted_path(self):
-        G=networkx.path_graph(6)
-        G[0][1]['weight']=1
-        G[1][2]['weight']=2
-        G[2][3]['weight']=3
-        G[3][4]['weight']=4
-        G[4][5]['weight']=5
-        partition=[[0,1],[2,3],[4,5]]
-        M=networkx.blockmodel(G,partition)
-        assert_equal(sorted(M.nodes()),[0,1,2])
-        assert_equal(sorted(M.edges()),[(0,1),(1,2)])
-        assert_equal(M[0][1]['weight'],2)
-        assert_equal(M[1][2]['weight'],4)
-        for n in M.nodes():
-            assert_equal(M.node[n]['nedges'],1)
-            assert_equal(M.node[n]['nnodes'],2)
-            assert_equal(M.node[n]['density'],1.0)
-
-
-    def test_barbell(self):
-        G=networkx.barbell_graph(3,0)
-        partition=[[0,1,2],[3,4,5]]
-        M=networkx.blockmodel(G,partition)
-        assert_equal(sorted(M.nodes()),[0,1])
-        assert_equal(sorted(M.edges()),[(0,1)])
-        for n in M.nodes():
-            assert_equal(M.node[n]['nedges'],3)
-            assert_equal(M.node[n]['nnodes'],3)
-            assert_equal(M.node[n]['density'],1.0)
-
-    def test_barbell_plus(self):
-        G=networkx.barbell_graph(3,0)
-        G.add_edge(0,5) # add extra edge between bells
-        partition=[[0,1,2],[3,4,5]]
-        M=networkx.blockmodel(G,partition)
-        assert_equal(sorted(M.nodes()),[0,1])
-        assert_equal(sorted(M.edges()),[(0,1)])
-        assert_equal(M[0][1]['weight'],2)
-        for n in M.nodes():
-            assert_equal(M.node[n]['nedges'],3)
-            assert_equal(M.node[n]['nnodes'],3)
-            assert_equal(M.node[n]['density'],1.0)
-        
-
-
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/tests/test_boundary.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/tests/test_boundary.py
deleted file mode 100644
index 2b9e714..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/tests/test_boundary.py
+++ /dev/null
@@ -1,104 +0,0 @@
-#!/usr/bin/env python
-from nose.tools import *
-import networkx as nx
-from networkx import convert_node_labels_to_integers as cnlti
-
-class TestBoundary:
-
-    def setUp(self):
-        self.null=nx.null_graph()
-        self.P10=cnlti(nx.path_graph(10),first_label=1)
-        self.K10=cnlti(nx.complete_graph(10),first_label=1)
-
-    def test_null_node_boundary(self):
-        """null graph has empty node boundaries"""
-        null=self.null
-        assert_equal(nx.node_boundary(null,[]),[])
-        assert_equal(nx.node_boundary(null,[],[]),[])
-        assert_equal(nx.node_boundary(null,[1,2,3]),[])
-        assert_equal(nx.node_boundary(null,[1,2,3],[4,5,6]),[])
-        assert_equal(nx.node_boundary(null,[1,2,3],[3,4,5]),[])
-
-    def test_null_edge_boundary(self):
-        """null graph has empty edge boundaries"""
-        null=self.null
-        assert_equal(nx.edge_boundary(null,[]),[])
-        assert_equal(nx.edge_boundary(null,[],[]),[])
-        assert_equal(nx.edge_boundary(null,[1,2,3]),[])
-        assert_equal(nx.edge_boundary(null,[1,2,3],[4,5,6]),[])
-        assert_equal(nx.edge_boundary(null,[1,2,3],[3,4,5]),[])
-
-    def test_path_node_boundary(self):
-        """Check node boundaries in path graph."""
-        P10=self.P10
-        assert_equal(nx.node_boundary(P10,[]),[])
-        assert_equal(nx.node_boundary(P10,[],[]),[])
-        assert_equal(nx.node_boundary(P10,[1,2,3]),[4])
-        assert_equal(sorted(nx.node_boundary(P10,[4,5,6])),[3, 7])
-        assert_equal(sorted(nx.node_boundary(P10,[3,4,5,6,7])),[2, 8])
-        assert_equal(nx.node_boundary(P10,[8,9,10]),[7])
-        assert_equal(sorted(nx.node_boundary(P10,[4,5,6],[9,10])),[])
-
-    def test_path_edge_boundary(self):
-        """Check edge boundaries in path graph."""
-        P10=self.P10
-
-        assert_equal(nx.edge_boundary(P10,[]),[])
-        assert_equal(nx.edge_boundary(P10,[],[]),[])
-        assert_equal(nx.edge_boundary(P10,[1,2,3]),[(3, 4)])
-        assert_equal(sorted(nx.edge_boundary(P10,[4,5,6])),[(4, 3), (6, 7)])
-        assert_equal(sorted(nx.edge_boundary(P10,[3,4,5,6,7])),[(3, 2), (7, 8)])
-        assert_equal(nx.edge_boundary(P10,[8,9,10]),[(8, 7)])
-        assert_equal(sorted(nx.edge_boundary(P10,[4,5,6],[9,10])),[])
-        assert_equal(nx.edge_boundary(P10,[1,2,3],[3,4,5]) ,[(2, 3), (3, 4)])
-
-
-    def test_k10_node_boundary(self):
-        """Check node boundaries in K10"""
-        K10=self.K10
-
-        assert_equal(nx.node_boundary(K10,[]),[])
-        assert_equal(nx.node_boundary(K10,[],[]),[])
-        assert_equal(sorted(nx.node_boundary(K10,[1,2,3])),
-                     [4, 5, 6, 7, 8, 9, 10])
-        assert_equal(sorted(nx.node_boundary(K10,[4,5,6])),
-                     [1, 2, 3, 7, 8, 9, 10])
-        assert_equal(sorted(nx.node_boundary(K10,[3,4,5,6,7])),
-                            [1, 2, 8, 9, 10])
-        assert_equal(nx.node_boundary(K10,[4,5,6],[]),[])
-        assert_equal(nx.node_boundary(K10,K10),[])
-        assert_equal(nx.node_boundary(K10,[1,2,3],[3,4,5]),[4, 5])
-
-    def test_k10_edge_boundary(self):
-        """Check edge boundaries in K10"""
-        K10=self.K10
-
-        assert_equal(nx.edge_boundary(K10,[]),[])
-        assert_equal(nx.edge_boundary(K10,[],[]),[])
-        assert_equal(len(nx.edge_boundary(K10,[1,2,3])),21)
-        assert_equal(len(nx.edge_boundary(K10,[4,5,6,7])),24)
-        assert_equal(len(nx.edge_boundary(K10,[3,4,5,6,7])),25)
-        assert_equal(len(nx.edge_boundary(K10,[8,9,10])),21)
-        assert_equal(sorted(nx.edge_boundary(K10,[4,5,6],[9,10])),
-                     [(4, 9), (4, 10), (5, 9), (5, 10), (6, 9), (6, 10)])
-        assert_equal(nx.edge_boundary(K10,[1,2,3],[3,4,5]),
-                     [(1, 3), (1, 4), (1, 5), (2, 3), (2, 4), 
-                      (2, 5), (3, 4), (3, 5)])
-
-
-    def test_petersen(self):
-        """Check boundaries in the petersen graph
-
-        cheeger(G,k)=min(|bdy(S)|/|S| for |S|=k, 0<k<=|V(G)|/2)
-        """
-        from random import sample
-        P=nx.petersen_graph()
-        def cheeger(G,k):
-            return min([float(len(nx.node_boundary(G,sample(G.nodes(),k))))/k 
-                        for n in range(100)])
-
-        assert_almost_equals(cheeger(P,1),3.00,places=2)
-        assert_almost_equals(cheeger(P,2),2.00,places=2)
-        assert_almost_equals(cheeger(P,3),1.67,places=2)
-        assert_almost_equals(cheeger(P,4),1.00,places=2)
-        assert_almost_equals(cheeger(P,5),0.80,places=2)
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/tests/test_clique.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/tests/test_clique.py
deleted file mode 100644
index 892a67d..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/tests/test_clique.py
+++ /dev/null
@@ -1,114 +0,0 @@
-#!/usr/bin/env python
-from nose.tools import *
-import networkx as nx
-from networkx import convert_node_labels_to_integers as cnlti
-
-class TestCliques:
-
-    def setUp(self):
-        z=[3,4,3,4,2,4,2,1,1,1,1]
-        self.G=cnlti(nx.generators.havel_hakimi_graph(z),first_label=1)
-        self.cl=list(nx.find_cliques(self.G))
-        H=nx.complete_graph(6)
-        H=nx.relabel_nodes(H,dict( [(i,i+1) for i in range(6)]))
-        H.remove_edges_from([(2,6),(2,5),(2,4),(1,3),(5,3)])
-        self.H=H
-
-    def test_find_cliques1(self):
-        cl=list(nx.find_cliques(self.G))
-        rcl=nx.find_cliques_recursive(self.G)
-        assert_equal(sorted(map(sorted,cl)), sorted(map(sorted,rcl)))
-        assert_equal(cl,
-                     [[2, 6, 1, 3], [2, 6, 4], [5, 4, 7], [8, 9], [10, 11]])
-
-    def test_selfloops(self):
-        self.G.add_edge(1,1)
-        cl=list(nx.find_cliques(self.G))
-        rcl=nx.find_cliques_recursive(self.G)
-        assert_equal(sorted(map(sorted,cl)), sorted(map(sorted,rcl)))
-        assert_equal(cl,
-                     [[2, 6, 1, 3], [2, 6, 4], [5, 4, 7], [8, 9], [10, 11]])
-
-    def test_find_cliques2(self):
-        hcl=list(nx.find_cliques(self.H))
-        assert_equal(sorted(map(sorted,hcl)),
-                     [[1, 2], [1, 4, 5, 6], [2, 3], [3, 4, 6]])
-
-    def test_clique_number(self):
-        G=self.G
-        assert_equal(nx.graph_clique_number(G),4)
-        assert_equal(nx.graph_clique_number(G,cliques=self.cl),4)
-
-    def test_number_of_cliques(self):
-        G=self.G
-        assert_equal(nx.graph_number_of_cliques(G),5)
-        assert_equal(nx.graph_number_of_cliques(G,cliques=self.cl),5)
-        assert_equal(nx.number_of_cliques(G,1),1)
-        assert_equal(list(nx.number_of_cliques(G,[1]).values()),[1])
-        assert_equal(list(nx.number_of_cliques(G,[1,2]).values()),[1, 2])
-        assert_equal(nx.number_of_cliques(G,[1,2]),{1: 1, 2: 2})
-        assert_equal(nx.number_of_cliques(G,2),2)
-        assert_equal(nx.number_of_cliques(G),
-                     {1: 1, 2: 2, 3: 1, 4: 2, 5: 1,
-                      6: 2, 7: 1, 8: 1, 9: 1, 10: 1, 11: 1})
-        assert_equal(nx.number_of_cliques(G,nodes=G.nodes()),
-                     {1: 1, 2: 2, 3: 1, 4: 2, 5: 1,
-                      6: 2, 7: 1, 8: 1, 9: 1, 10: 1, 11: 1})
-        assert_equal(nx.number_of_cliques(G,nodes=[2,3,4]),
-                     {2: 2, 3: 1, 4: 2})
-        assert_equal(nx.number_of_cliques(G,cliques=self.cl),
-                     {1: 1, 2: 2, 3: 1, 4: 2, 5: 1,
-                      6: 2, 7: 1, 8: 1, 9: 1, 10: 1, 11: 1})
-        assert_equal(nx.number_of_cliques(G,G.nodes(),cliques=self.cl),
-                     {1: 1, 2: 2, 3: 1, 4: 2, 5: 1,
-                      6: 2, 7: 1, 8: 1, 9: 1, 10: 1, 11: 1})
-
-
-
-    def test_node_clique_number(self):
-        G=self.G
-        assert_equal(nx.node_clique_number(G,1),4)
-        assert_equal(list(nx.node_clique_number(G,[1]).values()),[4])
-        assert_equal(list(nx.node_clique_number(G,[1,2]).values()),[4, 4])
-        assert_equal(nx.node_clique_number(G,[1,2]),{1: 4, 2: 4})
-        assert_equal(nx.node_clique_number(G,1),4)
-        assert_equal(nx.node_clique_number(G),
-                     {1: 4, 2: 4, 3: 4, 4: 3, 5: 3, 6: 4, 
-                      7: 3, 8: 2, 9: 2, 10: 2, 11: 2})
-        assert_equal(nx.node_clique_number(G,cliques=self.cl),
-                     {1: 4, 2: 4, 3: 4, 4: 3, 5: 3, 6: 4, 
-                      7: 3, 8: 2, 9: 2, 10: 2, 11: 2})
-
-    def test_cliques_containing_node(self):
-        G=self.G
-        assert_equal(nx.cliques_containing_node(G,1),
-                     [[2, 6, 1, 3]])
-        assert_equal(list(nx.cliques_containing_node(G,[1]).values()),
-                     [[[2, 6, 1, 3]]])
-        assert_equal(list(nx.cliques_containing_node(G,[1,2]).values()),
-                     [[[2, 6, 1, 3]], [[2, 6, 1, 3], [2, 6, 4]]])
-        assert_equal(nx.cliques_containing_node(G,[1,2]),
-                     {1: [[2, 6, 1, 3]], 2: [[2, 6, 1, 3], [2, 6, 4]]})
-        assert_equal(nx.cliques_containing_node(G,1),
-                     [[2, 6, 1, 3]])
-        assert_equal(nx.cliques_containing_node(G,2),
-                     [[2, 6, 1, 3], [2, 6, 4]])
-        assert_equal(nx.cliques_containing_node(G,2,cliques=self.cl),
-                     [[2, 6, 1, 3], [2, 6, 4]])
-        assert_equal(len(nx.cliques_containing_node(G)),11)
-
-    def test_make_clique_bipartite(self):
-        G=self.G
-        B=nx.make_clique_bipartite(G)
-        assert_equal(sorted(B.nodes()),
-                     [-5, -4, -3, -2, -1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
-        H=nx.project_down(B)
-        assert_equal(H.adj,G.adj)
-        H1=nx.project_up(B)
-        assert_equal(H1.nodes(),[1, 2, 3, 4, 5])
-        H2=nx.make_max_clique_graph(G)
-        assert_equal(H1.adj,H2.adj)
-
-    @raises(nx.NetworkXNotImplemented)
-    def test_directed(self):
-        cliques=nx.find_cliques(nx.DiGraph())
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/tests/test_cluster.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/tests/test_cluster.py
deleted file mode 100644
index 19c00ae..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/tests/test_cluster.py
+++ /dev/null
@@ -1,195 +0,0 @@
-#!/usr/bin/env python
-from nose.tools import *
-import networkx as nx
-
-class TestTriangles:
-
-    def test_empty(self):
-        G = nx.Graph()
-        assert_equal(list(nx.triangles(G).values()),[])
-
-    def test_path(self):
-        G = nx.path_graph(10)
-        assert_equal(list(nx.triangles(G).values()),
-                     [0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
-        assert_equal(nx.triangles(G),
-                     {0: 0, 1: 0, 2: 0, 3: 0, 4: 0, 
-                      5: 0, 6: 0, 7: 0, 8: 0, 9: 0})
-
-    def test_cubical(self):
-        G = nx.cubical_graph()
-        assert_equal(list(nx.triangles(G).values()),
-                     [0, 0, 0, 0, 0, 0, 0, 0])
-        assert_equal(nx.triangles(G,1),0)
-        assert_equal(list(nx.triangles(G,[1,2]).values()),[0, 0])
-        assert_equal(nx.triangles(G,1),0)
-        assert_equal(nx.triangles(G,[1,2]),{1: 0, 2: 0})
-
-    def test_k5(self):
-        G = nx.complete_graph(5)
-        assert_equal(list(nx.triangles(G).values()),[6, 6, 6, 6, 6])
-        assert_equal(sum(nx.triangles(G).values())/3.0,10)
-        assert_equal(nx.triangles(G,1),6)
-        G.remove_edge(1,2)
-        assert_equal(list(nx.triangles(G).values()),[5, 3, 3, 5, 5])
-        assert_equal(nx.triangles(G,1),3)
-
-
-class TestWeightedClustering:
-
-    def test_clustering(self):
-        G = nx.Graph()
-        assert_equal(list(nx.clustering(G,weight='weight').values()),[])
-        assert_equal(nx.clustering(G),{})
-
-    def test_path(self):
-        G = nx.path_graph(10)
-        assert_equal(list(nx.clustering(G,weight='weight').values()),
-                     [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0])
-        assert_equal(nx.clustering(G,weight='weight'),
-                     {0: 0.0, 1: 0.0, 2: 0.0, 3: 0.0, 4: 0.0, 
-                      5: 0.0, 6: 0.0, 7: 0.0, 8: 0.0, 9: 0.0})
-
-    def test_cubical(self):
-        G = nx.cubical_graph()
-        assert_equal(list(nx.clustering(G,weight='weight').values()),
-                     [0, 0, 0, 0, 0, 0, 0, 0])
-        assert_equal(nx.clustering(G,1),0)
-        assert_equal(list(nx.clustering(G,[1,2],weight='weight').values()),[0, 0])
-        assert_equal(nx.clustering(G,1,weight='weight'),0)
-        assert_equal(nx.clustering(G,[1,2],weight='weight'),{1: 0, 2: 0})
-
-    def test_k5(self):
-        G = nx.complete_graph(5)
-        assert_equal(list(nx.clustering(G,weight='weight').values()),[1, 1, 1, 1, 1])
-        assert_equal(nx.average_clustering(G,weight='weight'),1)
-        G.remove_edge(1,2)
-        assert_equal(list(nx.clustering(G,weight='weight').values()),
-                     [5./6., 1.0, 1.0, 5./6., 5./6.])
-        assert_equal(nx.clustering(G,[1,4],weight='weight'),{1: 1.0, 4: 0.83333333333333337})
-
-
-    def test_triangle_and_edge(self):
-        G=nx.Graph()
-        G.add_cycle([0,1,2])
-        G.add_edge(0,4,weight=2)
-        assert_equal(nx.clustering(G)[0],1.0/3.0)
-        assert_equal(nx.clustering(G,weight='weight')[0],1.0/6.0)
-
-class TestClustering:
-
-    def test_clustering(self):
-        G = nx.Graph()
-        assert_equal(list(nx.clustering(G).values()),[])
-        assert_equal(nx.clustering(G),{})
-
-    def test_path(self):
-        G = nx.path_graph(10)
-        assert_equal(list(nx.clustering(G).values()),
-                     [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0])
-        assert_equal(nx.clustering(G),
-                     {0: 0.0, 1: 0.0, 2: 0.0, 3: 0.0, 4: 0.0, 
-                      5: 0.0, 6: 0.0, 7: 0.0, 8: 0.0, 9: 0.0})
-
-    def test_cubical(self):
-        G = nx.cubical_graph()
-        assert_equal(list(nx.clustering(G).values()),
-                     [0, 0, 0, 0, 0, 0, 0, 0])
-        assert_equal(nx.clustering(G,1),0)
-        assert_equal(list(nx.clustering(G,[1,2]).values()),[0, 0])
-        assert_equal(nx.clustering(G,1),0)
-        assert_equal(nx.clustering(G,[1,2]),{1: 0, 2: 0})
-
-    def test_k5(self):
-        G = nx.complete_graph(5)
-        assert_equal(list(nx.clustering(G).values()),[1, 1, 1, 1, 1])
-        assert_equal(nx.average_clustering(G),1)
-        G.remove_edge(1,2)
-        assert_equal(list(nx.clustering(G).values()),
-                     [5./6., 1.0, 1.0, 5./6., 5./6.])
-        assert_equal(nx.clustering(G,[1,4]),{1: 1.0, 4: 0.83333333333333337})
-
-
-
-class TestTransitivity:
-
-    def test_transitivity(self):
-        G = nx.Graph()
-        assert_equal(nx.transitivity(G),0.0)
-
-    def test_path(self):
-        G = nx.path_graph(10)
-        assert_equal(nx.transitivity(G),0.0)
-
-    def test_cubical(self):
-        G = nx.cubical_graph()
-        assert_equal(nx.transitivity(G),0.0)
-
-    def test_k5(self):
-        G = nx.complete_graph(5)
-        assert_equal(nx.transitivity(G),1.0)
-        G.remove_edge(1,2)
-        assert_equal(nx.transitivity(G),0.875)
-
-    # def test_clustering_transitivity(self):
-    #     # check that weighted average of clustering is transitivity
-    #     G = nx.complete_graph(5)
-    #     G.remove_edge(1,2)
-    #     t1=nx.transitivity(G)
-    #     (cluster_d2,weights)=nx.clustering(G,weights=True)
-    #     trans=[]
-    #     for v in G.nodes():
-    #         trans.append(cluster_d2[v]*weights[v])
-    #     t2=sum(trans)
-    #     assert_almost_equal(abs(t1-t2),0)
-
-class TestSquareClustering:
-
-    def test_clustering(self):
-        G = nx.Graph()
-        assert_equal(list(nx.square_clustering(G).values()),[])
-        assert_equal(nx.square_clustering(G),{})
-
-    def test_path(self):
-        G = nx.path_graph(10)
-        assert_equal(list(nx.square_clustering(G).values()),
-                     [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0])
-        assert_equal(nx.square_clustering(G),
-                     {0: 0.0, 1: 0.0, 2: 0.0, 3: 0.0, 4: 0.0, 
-                      5: 0.0, 6: 0.0, 7: 0.0, 8: 0.0, 9: 0.0})
-
-    def test_cubical(self):
-        G = nx.cubical_graph()
-        assert_equal(list(nx.square_clustering(G).values()),
-                     [0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5])
-        assert_equal(list(nx.square_clustering(G,[1,2]).values()),[0.5, 0.5])
-        assert_equal(nx.square_clustering(G,[1])[1],0.5)
-        assert_equal(nx.square_clustering(G,[1,2]),{1: 0.5, 2: 0.5})
-
-    def test_k5(self):
-        G = nx.complete_graph(5)
-        assert_equal(list(nx.square_clustering(G).values()),[1, 1, 1, 1, 1])
-
-    def test_bipartite_k5(self):
-        G = nx.complete_bipartite_graph(5,5)
-        assert_equal(list(nx.square_clustering(G).values()),
-                        [1, 1, 1, 1, 1, 1, 1, 1, 1, 1])
-
-    def test_lind_square_clustering(self):
-        """Test C4 for figure 1 Lind et al (2005)"""
-        G = nx.Graph([(1,2),(1,3),(1,6),(1,7),(2,4),(2,5),
-                      (3,4),(3,5),(6,7),(7,8),(6,8),(7,9),
-                      (7,10),(6,11),(6,12),(2,13),(2,14),(3,15),(3,16)])
-        G1 = G.subgraph([1,2,3,4,5,13,14,15,16])
-        G2 = G.subgraph([1,6,7,8,9,10,11,12])
-        assert_equal(nx.square_clustering(G, [1])[1], 3/75.0)
-        assert_equal(nx.square_clustering(G1, [1])[1], 2/6.0)
-        assert_equal(nx.square_clustering(G2, [1])[1], 1/5.0)
-
-
-def test_average_clustering():
-    G=nx.cycle_graph(3)
-    G.add_edge(2,3)
-    assert_equal(nx.average_clustering(G),(1+1+1/3.0)/4.0)
-    assert_equal(nx.average_clustering(G,count_zeros=True),(1+1+1/3.0)/4.0)
-    assert_equal(nx.average_clustering(G,count_zeros=False),(1+1+1/3.0)/3.0)
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/tests/test_core.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/tests/test_core.py
deleted file mode 100644
index 48399ae..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/tests/test_core.py
+++ /dev/null
@@ -1,114 +0,0 @@
-#!/usr/bin/env python
-from nose.tools import *
-import networkx as nx
-
-class TestCore:
-
-    def setUp(self):
-        # G is the example graph in Figure 1 from Batagelj and
-        # Zaversnik's paper titled An O(m) Algorithm for Cores
-        # Decomposition of Networks, 2003,
-        # http://arXiv.org/abs/cs/0310049.  With nodes labeled as
-        # shown, the 3-core is given by nodes 1-8, the 2-core by nodes
-        # 9-16, the 1-core by nodes 17-20 and node 21 is in the
-        # 0-core.
-        t1=nx.convert_node_labels_to_integers(nx.tetrahedral_graph(),1)
-        t2=nx.convert_node_labels_to_integers(t1,5)
-        G=nx.union(t1,t2)
-        G.add_edges_from( [(3,7), (2,11), (11,5), (11,12), (5,12), (12,19),
-                           (12,18), (3,9), (7,9), (7,10), (9,10), (9,20),
-                           (17,13), (13,14), (14,15), (15,16), (16,13)])
-        G.add_node(21)
-        self.G=G
-
-        # Create the graph H resulting from the degree sequence
-        # [0,1,2,2,2,2,3] when using the Havel-Hakimi algorithm. 
-
-        degseq=[0,1,2,2,2,2,3]
-        H = nx.havel_hakimi_graph(degseq)
-        mapping = {6:0, 0:1, 4:3, 5:6, 3:4, 1:2, 2:5 }
-        self.H = nx.relabel_nodes(H, mapping)
-
-    def test_trivial(self):
-        """Empty graph"""
-        G = nx.Graph()
-        assert_equal(nx.find_cores(G),{})
-
-    def test_find_cores(self):
-        cores=nx.find_cores(self.G)
-        nodes_by_core=[]
-        for val in [0,1,2,3]:
-            nodes_by_core.append( sorted([k for k in cores if cores[k]==val]))
-        assert_equal(nodes_by_core[0],[21])
-        assert_equal(nodes_by_core[1],[17, 18, 19, 20])
-        assert_equal(nodes_by_core[2],[9, 10, 11, 12, 13, 14, 15, 16])
-        assert_equal(nodes_by_core[3], [1, 2, 3, 4, 5, 6, 7, 8])
-
-    def test_core_number(self):
-        # smoke test real name
-        cores=nx.core_number(self.G)
-
-    def test_find_cores2(self):
-        cores=nx.find_cores(self.H)
-        nodes_by_core=[]
-        for val in [0,1,2]:
-            nodes_by_core.append( sorted([k for k in cores if cores[k]==val]))
-        assert_equal(nodes_by_core[0],[0])
-        assert_equal(nodes_by_core[1],[1, 3])
-        assert_equal(nodes_by_core[2],[2, 4, 5, 6])
-
-    def test_main_core(self):
-        main_core_subgraph=nx.k_core(self.H)
-        assert_equal(sorted(main_core_subgraph.nodes()),[2,4,5,6])
-
-    def test_k_core(self):
-        # k=0
-        k_core_subgraph=nx.k_core(self.H,k=0)
-        assert_equal(sorted(k_core_subgraph.nodes()),sorted(self.H.nodes()))
-        # k=1
-        k_core_subgraph=nx.k_core(self.H,k=1)
-        assert_equal(sorted(k_core_subgraph.nodes()),[1,2,3,4,5,6])
-        # k=2
-        k_core_subgraph=nx.k_core(self.H,k=2)
-        assert_equal(sorted(k_core_subgraph.nodes()),[2,4,5,6])
-
-    def test_main_crust(self):
-        main_crust_subgraph=nx.k_crust(self.H)
-        assert_equal(sorted(main_crust_subgraph.nodes()),[0,1,3])
-
-    def test_k_crust(self):
-        # k=0
-        k_crust_subgraph=nx.k_crust(self.H,k=2)
-        assert_equal(sorted(k_crust_subgraph.nodes()),sorted(self.H.nodes()))
-        # k=1
-        k_crust_subgraph=nx.k_crust(self.H,k=1)
-        assert_equal(sorted(k_crust_subgraph.nodes()),[0,1,3])
-        # k=2
-        k_crust_subgraph=nx.k_crust(self.H,k=0)
-        assert_equal(sorted(k_crust_subgraph.nodes()),[0])
-
-    def test_main_shell(self):
-        main_shell_subgraph=nx.k_shell(self.H)
-        assert_equal(sorted(main_shell_subgraph.nodes()),[2,4,5,6])
-
-    def test_k_shell(self):
-        # k=0
-        k_shell_subgraph=nx.k_shell(self.H,k=2)
-        assert_equal(sorted(k_shell_subgraph.nodes()),[2,4,5,6])
-        # k=1
-        k_shell_subgraph=nx.k_shell(self.H,k=1)
-        assert_equal(sorted(k_shell_subgraph.nodes()),[1,3])
-        # k=2
-        k_shell_subgraph=nx.k_shell(self.H,k=0)
-        assert_equal(sorted(k_shell_subgraph.nodes()),[0])
-
-    def test_k_corona(self):
-        # k=0
-        k_corona_subgraph=nx.k_corona(self.H,k=2)
-        assert_equal(sorted(k_corona_subgraph.nodes()),[2,4,5,6])
-        # k=1
-        k_corona_subgraph=nx.k_corona(self.H,k=1)
-        assert_equal(sorted(k_corona_subgraph.nodes()),[1])
-        # k=2
-        k_corona_subgraph=nx.k_corona(self.H,k=0)
-        assert_equal(sorted(k_corona_subgraph.nodes()),[0])
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/tests/test_cycles.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/tests/test_cycles.py
deleted file mode 100644
index e39bb87..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/tests/test_cycles.py
+++ /dev/null
@@ -1,122 +0,0 @@
-#!/usr/bin/env python
-from nose.tools import *
-import networkx
-import networkx as nx
-
-class TestCycles:
-    def setUp(self):
-        G=networkx.Graph()
-        G.add_cycle([0,1,2,3])
-        G.add_cycle([0,3,4,5])
-        G.add_cycle([0,1,6,7,8])
-        G.add_edge(8,9)
-        self.G=G
-        
-    def is_cyclic_permutation(self,a,b):
-        n=len(a)
-        if len(b)!=n:
-            return False
-        l=a+a
-        return any(l[i:i+n]==b for i in range(2*n-n+1))
-
-    def test_cycle_basis(self):
-        G=self.G
-        cy=networkx.cycle_basis(G,0)
-        sort_cy= sorted( sorted(c) for c in cy )
-        assert_equal(sort_cy, [[0,1,2,3],[0,1,6,7,8],[0,3,4,5]])
-        cy=networkx.cycle_basis(G,1)
-        sort_cy= sorted( sorted(c) for c in cy )
-        assert_equal(sort_cy, [[0,1,2,3],[0,1,6,7,8],[0,3,4,5]])
-        cy=networkx.cycle_basis(G,9)
-        sort_cy= sorted( sorted(c) for c in cy )
-        assert_equal(sort_cy, [[0,1,2,3],[0,1,6,7,8],[0,3,4,5]])
-        # test disconnected graphs
-        G.add_cycle(list("ABC"))
-        cy=networkx.cycle_basis(G,9)
-        sort_cy= sorted(sorted(c) for c in cy[:-1]) + [sorted(cy[-1])]
-        assert_equal(sort_cy, [[0,1,2,3],[0,1,6,7,8],[0,3,4,5],['A','B','C']])
-
-    @raises(nx.NetworkXNotImplemented)
-    def test_cycle_basis(self):
-        G=nx.DiGraph()
-        cy=networkx.cycle_basis(G,0)
-
-    @raises(nx.NetworkXNotImplemented)
-    def test_cycle_basis(self):
-        G=nx.MultiGraph()
-        cy=networkx.cycle_basis(G,0)
-
-    def test_simple_cycles(self):
-        G = nx.DiGraph([(0, 0), (0, 1), (0, 2), (1, 2), (2, 0), (2, 1), (2, 2)])
-        cc=sorted(nx.simple_cycles(G))
-        ca=[[0], [0, 1, 2], [0, 2], [1, 2], [2]]
-        for c in cc:
-            assert_true(any(self.is_cyclic_permutation(c,rc) for rc in ca))
-
-    @raises(nx.NetworkXNotImplemented)
-    def test_simple_cycles_graph(self):
-        G = nx.Graph()
-        c = sorted(nx.simple_cycles(G))
-
-    def test_unsortable(self):
-        #  TODO What does this test do?  das 6/2013
-        G=nx.DiGraph()
-        G.add_cycle(['a',1])
-        c=list(nx.simple_cycles(G))
-
-    def test_simple_cycles_small(self):
-        G = nx.DiGraph()
-        G.add_cycle([1,2,3])
-        c=sorted(nx.simple_cycles(G))
-        assert_equal(len(c),1)
-        assert_true(self.is_cyclic_permutation(c[0],[1,2,3]))
-        G.add_cycle([10,20,30])
-        cc=sorted(nx.simple_cycles(G))
-        ca=[[1,2,3],[10,20,30]]
-        for c in cc:
-            assert_true(any(self.is_cyclic_permutation(c,rc) for rc in ca))
-
-    def test_simple_cycles_empty(self):
-        G = nx.DiGraph()
-        assert_equal(list(nx.simple_cycles(G)),[])
-        
-    def test_complete_directed_graph(self):
-        # see table 2 in Johnson's paper
-        ncircuits=[1,5,20,84,409,2365,16064]
-        for n,c in zip(range(2,9),ncircuits):
-            G=nx.DiGraph(nx.complete_graph(n))
-            assert_equal(len(list(nx.simple_cycles(G))),c)
-        
-    def worst_case_graph(self,k):
-        # see figure 1 in Johnson's paper
-        # this graph has excactly 3k simple cycles
-        G=nx.DiGraph()
-        for n in range(2,k+2):
-            G.add_edge(1,n)
-            G.add_edge(n,k+2)
-        G.add_edge(2*k+1,1)
-        for n in range(k+2,2*k+2):
-            G.add_edge(n,2*k+2)
-            G.add_edge(n,n+1)
-        G.add_edge(2*k+3,k+2)
-        for n in range(2*k+3,3*k+3):
-            G.add_edge(2*k+2,n)
-            G.add_edge(n,3*k+3)
-        G.add_edge(3*k+3,2*k+2)
-        return G
-
-    def test_worst_case_graph(self):
-        # see figure 1 in Johnson's paper
-        for k in range(3,10):
-            G=self.worst_case_graph(k)
-            l=len(list(nx.simple_cycles(G)))
-            assert_equal(l,3*k)
-    
-    def test_recursive_simple_and_not(self):
-        for k in range(2,10):
-            G=self.worst_case_graph(k)
-            cc=sorted(nx.simple_cycles(G))
-            rcc=sorted(nx.recursive_simple_cycles(G))
-            assert_equal(len(cc),len(rcc))
-            for c in cc:
-                assert_true(any(self.is_cyclic_permutation(c,rc) for rc in rcc))
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/tests/test_dag.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/tests/test_dag.py
deleted file mode 100644
index eb368af..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/tests/test_dag.py
+++ /dev/null
@@ -1,163 +0,0 @@
-#!/usr/bin/env python
-from nose.tools import *
-import networkx as nx
-
-class TestDAG:
-
-    def setUp(self):
-        pass
-
-    def test_topological_sort1(self):
-        DG=nx.DiGraph()
-        DG.add_edges_from([(1,2),(1,3),(2,3)])
-        assert_equal(nx.topological_sort(DG),[1, 2, 3])
-        assert_equal(nx.topological_sort_recursive(DG),[1, 2, 3])
-
-        DG.add_edge(3,2)
-        assert_raises(nx.NetworkXUnfeasible, nx.topological_sort, DG)
-        assert_raises(nx.NetworkXUnfeasible, nx.topological_sort_recursive, DG)
-        
-        DG.remove_edge(2,3)
-        assert_equal(nx.topological_sort(DG),[1, 3, 2])
-        assert_equal(nx.topological_sort_recursive(DG),[1, 3, 2])
-
-    def test_is_directed_acyclic_graph(self):
-        G = nx.generators.complete_graph(2)
-        assert_false(nx.is_directed_acyclic_graph(G))
-        assert_false(nx.is_directed_acyclic_graph(G.to_directed()))
-        assert_false(nx.is_directed_acyclic_graph(nx.Graph([(3, 4), (4, 5)])))
-        assert_true(nx.is_directed_acyclic_graph(nx.DiGraph([(3, 4), (4, 5)])))
-
-    def test_topological_sort2(self):
-        DG=nx.DiGraph({1:[2],2:[3],3:[4],
-                       4:[5],5:[1],11:[12],
-                       12:[13],13:[14],14:[15]})
-        assert_raises(nx.NetworkXUnfeasible, nx.topological_sort, DG)
-        assert_raises(nx.NetworkXUnfeasible, nx.topological_sort_recursive, DG)
-
-        assert_false(nx.is_directed_acyclic_graph(DG))
-
-        DG.remove_edge(1,2)
-        assert_equal(nx.topological_sort_recursive(DG),
-                     [11, 12, 13, 14, 15, 2, 3, 4, 5, 1])
-        assert_equal(nx.topological_sort(DG),
-                     [11, 12, 13, 14, 15, 2, 3, 4, 5, 1])
-        assert_true(nx.is_directed_acyclic_graph(DG))
-
-    def test_topological_sort3(self):
-        DG=nx.DiGraph()
-        DG.add_edges_from([(1,i) for i in range(2,5)])
-        DG.add_edges_from([(2,i) for i in range(5,9)])
-        DG.add_edges_from([(6,i) for i in range(9,12)])
-        DG.add_edges_from([(4,i) for i in range(12,15)])
-        assert_equal(nx.topological_sort_recursive(DG),
-                     [1, 4, 14, 13, 12, 3, 2, 7, 6, 11, 10, 9, 5, 8])
-        assert_equal(nx.topological_sort(DG),
-                     [1, 2, 8, 5, 6, 9, 10, 11, 7, 3, 4, 12, 13, 14])
-
-        DG.add_edge(14,1)
-        assert_raises(nx.NetworkXUnfeasible, nx.topological_sort, DG)
-        assert_raises(nx.NetworkXUnfeasible, nx.topological_sort_recursive, DG)
-
-    def test_topological_sort4(self):
-        G=nx.Graph()
-        G.add_edge(1,2)
-        assert_raises(nx.NetworkXError, nx.topological_sort, G)
-        assert_raises(nx.NetworkXError, nx.topological_sort_recursive, G)
-
-    def test_topological_sort5(self):
-        G=nx.DiGraph()
-        G.add_edge(0,1)
-        assert_equal(nx.topological_sort_recursive(G), [0,1])
-        assert_equal(nx.topological_sort(G), [0,1])
-
-    def test_nbunch_argument(self):
-        G=nx.DiGraph()
-        G.add_edges_from([(1,2), (2,3), (1,4), (1,5), (2,6)])
-        assert_equal(nx.topological_sort(G), [1, 2, 3, 6, 4, 5])
-        assert_equal(nx.topological_sort_recursive(G), [1, 5, 4, 2, 6, 3])
-        assert_equal(nx.topological_sort(G,[1]), [1, 2, 3, 6, 4, 5])
-        assert_equal(nx.topological_sort_recursive(G,[1]), [1, 5, 4, 2, 6, 3])
-        assert_equal(nx.topological_sort(G,[5]), [5])
-        assert_equal(nx.topological_sort_recursive(G,[5]), [5])
-
-    def test_ancestors(self):
-        G=nx.DiGraph()
-        ancestors = nx.algorithms.dag.ancestors
-        G.add_edges_from([
-            (1, 2), (1, 3), (4, 2), (4, 3), (4, 5), (2, 6), (5, 6)])
-        assert_equal(ancestors(G, 6), set([1, 2, 4, 5]))
-        assert_equal(ancestors(G, 3), set([1, 4]))
-        assert_equal(ancestors(G, 1), set())
-        assert_raises(nx.NetworkXError, ancestors, G, 8)
-
-    def test_descendants(self):
-        G=nx.DiGraph()
-        descendants = nx.algorithms.dag.descendants
-        G.add_edges_from([
-            (1, 2), (1, 3), (4, 2), (4, 3), (4, 5), (2, 6), (5, 6)])
-        assert_equal(descendants(G, 1), set([2, 3, 6]))
-        assert_equal(descendants(G, 4), set([2, 3, 5, 6]))
-        assert_equal(descendants(G, 3), set())
-        assert_raises(nx.NetworkXError, descendants, G, 8)
-
-
-def test_is_aperiodic_cycle():
-    G=nx.DiGraph()
-    G.add_cycle([1,2,3,4])
-    assert_false(nx.is_aperiodic(G))
-
-def test_is_aperiodic_cycle2():
-    G=nx.DiGraph()
-    G.add_cycle([1,2,3,4])
-    G.add_cycle([3,4,5,6,7])
-    assert_true(nx.is_aperiodic(G))
-
-def test_is_aperiodic_cycle3():
-    G=nx.DiGraph()
-    G.add_cycle([1,2,3,4])
-    G.add_cycle([3,4,5,6])
-    assert_false(nx.is_aperiodic(G))
-    
-def test_is_aperiodic_cycle4():
-    G = nx.DiGraph()
-    G.add_cycle([1,2,3,4])
-    G.add_edge(1,3)
-    assert_true(nx.is_aperiodic(G))
-
-def test_is_aperiodic_selfloop():
-    G = nx.DiGraph()
-    G.add_cycle([1,2,3,4])
-    G.add_edge(1,1)
-    assert_true(nx.is_aperiodic(G))
-
-def test_is_aperiodic_raise():
-    G = nx.Graph()
-    assert_raises(nx.NetworkXError,
-                  nx.is_aperiodic,
-                  G)
-
-def test_is_aperiodic_bipartite():
-    #Bipartite graph
-    G = nx.DiGraph(nx.davis_southern_women_graph())
-    assert_false(nx.is_aperiodic(G))
-
-def test_is_aperiodic_rary_tree():
-    G = nx.full_rary_tree(3,27,create_using=nx.DiGraph())
-    assert_false(nx.is_aperiodic(G))
-
-def test_is_aperiodic_disconnected():
-    #disconnected graph
-    G = nx.DiGraph()
-    G.add_cycle([1,2,3,4])
-    G.add_cycle([5,6,7,8])
-    assert_false(nx.is_aperiodic(G))
-    G.add_edge(1,3)
-    G.add_edge(5,7)
-    assert_true(nx.is_aperiodic(G))
-    
-def test_is_aperiodic_disconnected2():
-    G = nx.DiGraph()
-    G.add_cycle([0,1,2])
-    G.add_edge(3,3)
-    assert_false(nx.is_aperiodic(G))
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/tests/test_distance_measures.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/tests/test_distance_measures.py
deleted file mode 100644
index ff3530c..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/tests/test_distance_measures.py
+++ /dev/null
@@ -1,69 +0,0 @@
-#!/usr/bin/env python
-from nose.tools import *
-import networkx
-
-class TestDistance:
-
-    def setUp(self):
-        G=networkx.Graph()
-        from networkx import convert_node_labels_to_integers as cnlti
-        G=cnlti(networkx.grid_2d_graph(4,4),first_label=1,ordering="sorted")
-        self.G=G
-
-    def test_eccentricity(self):
-        assert_equal(networkx.eccentricity(self.G,1),6)
-        e=networkx.eccentricity(self.G)
-        assert_equal(e[1],6)
-        sp=networkx.shortest_path_length(self.G)
-        e=networkx.eccentricity(self.G,sp=sp)
-        assert_equal(e[1],6)
-        e=networkx.eccentricity(self.G,v=1)
-        assert_equal(e,6)
-        e=networkx.eccentricity(self.G,v=[1,1])  #This behavior changed in version 1.8 (ticket #739)
-        assert_equal(e[1],6)
-        e=networkx.eccentricity(self.G,v=[1,2])
-        assert_equal(e[1],6)
-        # test against graph with one node
-        G=networkx.path_graph(1)
-        e=networkx.eccentricity(G)
-        assert_equal(e[0],0)
-        e=networkx.eccentricity(G,v=0)
-        assert_equal(e,0)
-        assert_raises(networkx.NetworkXError, networkx.eccentricity, G, 1)
-        # test against empty graph
-        G=networkx.empty_graph()
-        e=networkx.eccentricity(G)
-        assert_equal(e,{})
-
-
-
-        
-    def test_diameter(self):
-        assert_equal(networkx.diameter(self.G),6)
-
-    def test_radius(self):
-        assert_equal(networkx.radius(self.G),4)
-
-    def test_periphery(self):
-        assert_equal(set(networkx.periphery(self.G)),set([1, 4, 13, 16]))
-
-    def test_center(self):
-        assert_equal(set(networkx.center(self.G)),set([6, 7, 10, 11]))
-
-    def test_radius_exception(self):
-        G=networkx.Graph()
-        G.add_edge(1,2)
-        G.add_edge(3,4)
-        assert_raises(networkx.NetworkXError, networkx.diameter, G)
-
-    @raises(networkx.NetworkXError)
-    def test_eccentricity_infinite(self):
-        G=networkx.Graph([(1,2),(3,4)])
-        e = networkx.eccentricity(G)
-
-    @raises(networkx.NetworkXError)
-    def test_eccentricity_invalid(self):
-        G=networkx.Graph([(1,2),(3,4)])
-        e = networkx.eccentricity(G,sp=1)
-
-
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/tests/test_distance_regular.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/tests/test_distance_regular.py
deleted file mode 100644
index 068a81f..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/tests/test_distance_regular.py
+++ /dev/null
@@ -1,44 +0,0 @@
-#!/usr/bin/env python
-from nose.tools import *
-import networkx as nx
-
-class TestDistanceRegular:
-
-    def test_is_distance_regular(self):
-        assert_true(nx.is_distance_regular(nx.icosahedral_graph()))
-        assert_true(nx.is_distance_regular(nx.petersen_graph()))
-        assert_true(nx.is_distance_regular(nx.cubical_graph()))
-        assert_true(nx.is_distance_regular(nx.complete_bipartite_graph(3,3)))
-        assert_true(nx.is_distance_regular(nx.tetrahedral_graph()))
-        assert_true(nx.is_distance_regular(nx.dodecahedral_graph()))
-        assert_true(nx.is_distance_regular(nx.pappus_graph()))
-        assert_true(nx.is_distance_regular(nx.heawood_graph()))
-        assert_true(nx.is_distance_regular(nx.cycle_graph(3)))
-        # no distance regular
-        assert_false(nx.is_distance_regular(nx.path_graph(4)))
-
-    def test_not_connected(self):
-        G=nx.cycle_graph(4)
-        G.add_cycle([5,6,7])
-        assert_false(nx.is_distance_regular(G))
-
-
-    def test_global_parameters(self):
-        b,c=nx.intersection_array(nx.cycle_graph(5))
-        g=nx.global_parameters(b,c)
-        assert_equal(list(g),[(0, 0, 2), (1, 0, 1), (1, 1, 0)])
-        b,c=nx.intersection_array(nx.cycle_graph(3))
-        g=nx.global_parameters(b,c)
-        assert_equal(list(g),[(0, 0, 2), (1, 1, 0)])
-
-
-    def test_intersection_array(self):
-        b,c=nx.intersection_array(nx.cycle_graph(5))
-        assert_equal(b,[2, 1])
-        assert_equal(c,[1, 1])
-        b,c=nx.intersection_array(nx.dodecahedral_graph())
-        assert_equal(b,[3, 2, 1, 1, 1])
-        assert_equal(c,[1, 1, 1, 2, 3])
-        b,c=nx.intersection_array(nx.icosahedral_graph())
-        assert_equal(b,[5, 2, 1])
-        assert_equal(c,[1, 2, 5])
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/tests/test_euler.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/tests/test_euler.py
deleted file mode 100644
index 0b55f1f..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/tests/test_euler.py
+++ /dev/null
@@ -1,84 +0,0 @@
-#!/usr/bin/env python
-# run with nose: nosetests -v test_euler.py
-
-from nose.tools import *
-import networkx as nx
-from networkx import is_eulerian,eulerian_circuit
-
-class TestEuler:
-
-    def test_is_eulerian(self):
-        assert_true(is_eulerian(nx.complete_graph(5)))
-        assert_true(is_eulerian(nx.complete_graph(7)))
-        assert_true(is_eulerian(nx.hypercube_graph(4)))
-        assert_true(is_eulerian(nx.hypercube_graph(6)))
-
-        assert_false(is_eulerian(nx.complete_graph(4)))
-        assert_false(is_eulerian(nx.complete_graph(6)))
-        assert_false(is_eulerian(nx.hypercube_graph(3)))
-        assert_false(is_eulerian(nx.hypercube_graph(5)))
-
-        assert_false(is_eulerian(nx.petersen_graph()))
-        assert_false(is_eulerian(nx.path_graph(4)))
-
-    def test_is_eulerian2(self):
-        # not connected
-        G = nx.Graph()
-        G.add_nodes_from([1,2,3])
-        assert_false(is_eulerian(G))
-        # not strongly connected
-        G = nx.DiGraph()
-        G.add_nodes_from([1,2,3])
-        assert_false(is_eulerian(G))
-        G = nx.MultiDiGraph()
-        G.add_edge(1,2)
-        G.add_edge(2,3)
-        G.add_edge(2,3)
-        G.add_edge(3,1)
-        assert_false(is_eulerian(G))
-
-        
-
-    def test_eulerian_circuit_cycle(self):
-        G=nx.cycle_graph(4)
-
-        edges=list(eulerian_circuit(G,source=0))
-        nodes=[u for u,v in edges]
-        assert_equal(nodes,[0,1,2,3])
-        assert_equal(edges,[(0,1),(1,2),(2,3),(3,0)])
-
-        edges=list(eulerian_circuit(G,source=1))
-        nodes=[u for u,v in edges]
-        assert_equal(nodes,[1,0,3,2])
-        assert_equal(edges,[(1,0),(0,3),(3,2),(2,1)])
-
-
-    def test_eulerian_circuit_digraph(self):
-        G=nx.DiGraph()
-        G.add_cycle([0,1,2,3])
-
-        edges=list(eulerian_circuit(G,source=0))
-        nodes=[u for u,v in edges]
-        assert_equal(nodes,[0,1,2,3])
-        assert_equal(edges,[(0,1),(1,2),(2,3),(3,0)])
-
-        edges=list(eulerian_circuit(G,source=1))
-        nodes=[u for u,v in edges]
-        assert_equal(nodes,[1,2,3,0])
-        assert_equal(edges,[(1,2),(2,3),(3,0),(0,1)])
-
-
-    def test_eulerian_circuit_multigraph(self):
-        G=nx.MultiGraph()
-        G.add_cycle([0,1,2,3])
-        G.add_edge(1,2)
-        G.add_edge(1,2)
-        edges=list(eulerian_circuit(G,source=0))
-        nodes=[u for u,v in edges]
-        assert_equal(nodes,[0,1,2,1,2,3])
-        assert_equal(edges,[(0,1),(1,2),(2,1),(1,2),(2,3),(3,0)])
-
-
-    @raises(nx.NetworkXError)
-    def test_not_eulerian(self):    
-        f=list(eulerian_circuit(nx.complete_graph(4)))
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/tests/test_graphical.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/tests/test_graphical.py
deleted file mode 100644
index 9609d25..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/tests/test_graphical.py
+++ /dev/null
@@ -1,114 +0,0 @@
-#!/usr/bin/env python
-from nose.tools import *
-import networkx as nx
-
-def test_valid_degree_sequence1():
-    n = 100
-    p = .3
-    for i in range(10):
-        G = nx.erdos_renyi_graph(n,p)
-        deg = list(G.degree().values())
-        assert_true( nx.is_valid_degree_sequence(deg, method='eg') )
-        assert_true( nx.is_valid_degree_sequence(deg, method='hh') )        
-
-def test_valid_degree_sequence2():
-    n = 100
-    for i in range(10):
-        G = nx.barabasi_albert_graph(n,1)
-        deg = list(G.degree().values())
-        assert_true( nx.is_valid_degree_sequence(deg, method='eg') )
-        assert_true( nx.is_valid_degree_sequence(deg, method='hh') )        
-
-@raises(nx.NetworkXException)
-def test_string_input():
-    a = nx.is_valid_degree_sequence([],'foo')
-
-def test_negative_input():
-    assert_false(nx.is_valid_degree_sequence([-1],'hh'))
-    assert_false(nx.is_valid_degree_sequence([-1],'eg'))
-    assert_false(nx.is_valid_degree_sequence([72.5],'eg'))
-
-
-def test_atlas():
-    for graph in nx.graph_atlas_g():
-        deg = list(graph.degree().values())
-        assert_true( nx.is_valid_degree_sequence(deg, method='eg') )
-        assert_true( nx.is_valid_degree_sequence(deg, method='hh') )        
-        
-def test_small_graph_true():
-        z=[5,3,3,3,3,2,2,2,1,1,1]
-        assert_true(nx.is_valid_degree_sequence(z, method='hh'))
-        assert_true(nx.is_valid_degree_sequence(z, method='eg'))       
-        z=[10,3,3,3,3,2,2,2,2,2,2]
-        assert_true(nx.is_valid_degree_sequence(z, method='hh'))
-        assert_true(nx.is_valid_degree_sequence(z, method='eg'))        
-        z=[1, 1, 1, 1, 1, 2, 2, 2, 3, 4]
-        assert_true(nx.is_valid_degree_sequence(z, method='hh'))
-        assert_true(nx.is_valid_degree_sequence(z, method='eg'))        
-
-
-
-def test_small_graph_false():
-    z=[1000,3,3,3,3,2,2,2,1,1,1]
-    assert_false(nx.is_valid_degree_sequence(z, method='hh'))
-    assert_false(nx.is_valid_degree_sequence(z, method='eg'))
-    z=[6,5,4,4,2,1,1,1]
-    assert_false(nx.is_valid_degree_sequence(z, method='hh'))
-    assert_false(nx.is_valid_degree_sequence(z, method='eg'))
-    z=[1, 1, 1, 1, 1, 1, 2, 2, 2, 3, 4]
-    assert_false(nx.is_valid_degree_sequence(z, method='hh'))
-    assert_false(nx.is_valid_degree_sequence(z, method='eg'))        
-
-def test_directed_degree_sequence():
-    # Test a range of valid directed degree sequences
-    n, r = 100, 10
-    p = 1.0 / r
-    for i in range(r):
-        G = nx.erdos_renyi_graph(n,p*(i+1),None,True)
-        din = list(G.in_degree().values())
-        dout = list(G.out_degree().values())
-        assert_true(nx.is_digraphical(din, dout))
-
-def test_small_directed_sequences():
-    dout=[5,3,3,3,3,2,2,2,1,1,1]
-    din=[3,3,3,3,3,2,2,2,2,2,1]
-    assert_true(nx.is_digraphical(din, dout))
-    # Test nongraphical directed sequence
-    dout = [1000,3,3,3,3,2,2,2,1,1,1]
-    din=[103,102,102,102,102,102,102,102,102,102]
-    assert_false(nx.is_digraphical(din, dout))
-    # Test digraphical small sequence
-    dout=[1, 1, 1, 1, 1, 2, 2, 2, 3, 4]
-    din=[2, 2, 2, 2, 2, 2, 2, 2, 1, 1]
-    assert_true(nx.is_digraphical(din, dout))
-    # Test nonmatching sum
-    din=[2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1]
-    assert_false(nx.is_digraphical(din, dout))
-    # Test for negative integer in sequence
-    din=[2, 2, 2, -2, 2, 2, 2, 2, 1, 1, 4]
-    assert_false(nx.is_digraphical(din, dout))
-
-def test_multi_sequence():
-    # Test nongraphical multi sequence
-    seq=[1000,3,3,3,3,2,2,2,1,1]
-    assert_false(nx.is_multigraphical(seq))
-    # Test small graphical multi sequence
-    seq=[6,5,4,4,2,1,1,1]
-    assert_true(nx.is_multigraphical(seq))
-    # Test for negative integer in sequence
-    seq=[6,5,4,-4,2,1,1,1]
-    assert_false(nx.is_multigraphical(seq))
-    # Test for sequence with odd sum
-    seq=[1, 1, 1, 1, 1, 1, 2, 2, 2, 3, 4]
-    assert_false(nx.is_multigraphical(seq))
-        
-def test_pseudo_sequence():
-    # Test small valid pseudo sequence
-    seq=[1000,3,3,3,3,2,2,2,1,1]
-    assert_true(nx.is_pseudographical(seq))
-    # Test for sequence with odd sum
-    seq=[1000,3,3,3,3,2,2,2,1,1,1]
-    assert_false(nx.is_pseudographical(seq))
-    # Test for negative integer in sequence
-    seq=[1000,3,3,3,3,2,2,-2,1,1]
-    assert_false(nx.is_pseudographical(seq))
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/tests/test_hierarchy.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/tests/test_hierarchy.py
deleted file mode 100644
index 6f2907e..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/tests/test_hierarchy.py
+++ /dev/null
@@ -1,30 +0,0 @@
-#!/usr/bin/env python
-from nose.tools import *
-import networkx as nx
-
-def test_hierarchy_exception():
-    G = nx.cycle_graph(5)
-    assert_raises(nx.NetworkXError,nx.flow_hierarchy,G)
-
-def test_hierarchy_cycle():
-    G = nx.cycle_graph(5,create_using=nx.DiGraph())
-    assert_equal(nx.flow_hierarchy(G),0.0)
-
-def test_hierarchy_tree():
-    G = nx.full_rary_tree(2,16,create_using=nx.DiGraph())
-    assert_equal(nx.flow_hierarchy(G),1.0)
-
-def test_hierarchy_1():
-    G = nx.DiGraph()
-    G.add_edges_from([(0,1),(1,2),(2,3),(3,1),(3,4),(0,4)])
-    assert_equal(nx.flow_hierarchy(G),0.5)
-
-def test_hierarchy_weight():
-    G = nx.DiGraph()
-    G.add_edges_from([(0,1,{'weight':.3}),
-                      (1,2,{'weight':.1}),
-                      (2,3,{'weight':.1}),
-                      (3,1,{'weight':.1}),
-                      (3,4,{'weight':.3}),
-                      (0,4,{'weight':.3})])
-    assert_equal(nx.flow_hierarchy(G,weight='weight'),.75)
\ No newline at end of file
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/tests/test_matching.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/tests/test_matching.py
deleted file mode 100644
index 5509e2d..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/tests/test_matching.py
+++ /dev/null
@@ -1,247 +0,0 @@
-#!/usr/bin/env python
-import math
-from nose.tools import *
-import networkx as nx
-
-class TestMatching:
-
-    def setUp(self):
-        pass
-
-    def test_trivial1(self):
-        """Empty graph"""
-        G = nx.Graph()
-        assert_equal(nx.max_weight_matching(G),{})
-
-    def test_trivial2(self):
-        """Self loop"""
-        G = nx.Graph()
-        G.add_edge(0, 0, weight=100)
-        assert_equal(nx.max_weight_matching(G),{})
-
-    def test_trivial3(self):
-        """Single edge"""
-        G = nx.Graph()
-        G.add_edge(0, 1)
-        assert_equal(nx.max_weight_matching(G),
-                     {0: 1, 1: 0})
-
-    def test_trivial4(self):
-        """Small graph"""
-        G = nx.Graph()
-        G.add_edge('one', 'two', weight=10)
-        G.add_edge('two', 'three', weight=11)
-        assert_equal(nx.max_weight_matching(G),
-                     {'three': 'two', 'two': 'three'})
-
-    def test_trivial5(self):
-        """Path"""
-        G = nx.Graph()
-        G.add_edge(1, 2, weight=5)
-        G.add_edge(2, 3, weight=11)
-        G.add_edge(3, 4, weight=5)
-        assert_equal(nx.max_weight_matching(G),
-                     {2: 3, 3: 2})
-        assert_equal(nx.max_weight_matching(G, 1),
-                     {1: 2, 2: 1, 3: 4, 4: 3})
-
-
-    def test_floating_point_weights(self):
-        """Floating point weights"""
-        G = nx.Graph()
-        G.add_edge(1, 2, weight=math.pi)
-        G.add_edge(2, 3, weight=math.exp(1))
-        G.add_edge(1, 3, weight=3.0)
-        G.add_edge(1, 4, weight=math.sqrt(2.0))
-        assert_equal(nx.max_weight_matching(G),
-                     {1: 4, 2: 3, 3: 2, 4: 1})
-
-    def test_negative_weights(self):
-        """Negative weights"""
-        G = nx.Graph()
-        G.add_edge(1, 2, weight=2)
-        G.add_edge(1, 3, weight=-2)
-        G.add_edge(2, 3, weight=1)
-        G.add_edge(2, 4, weight=-1)
-        G.add_edge(3, 4, weight=-6)
-        assert_equal(nx.max_weight_matching(G),
-                     {1: 2, 2: 1})
-        assert_equal(nx.max_weight_matching(G, 1),
-                     {1: 3, 2: 4, 3: 1, 4: 2})
-
-    def test_s_blossom(self):
-        """Create S-blossom and use it for augmentation:"""
-        G = nx.Graph()
-        G.add_weighted_edges_from([ (1, 2, 8), (1, 3, 9), 
-                                    (2, 3, 10), (3, 4, 7) ])
-        assert_equal(nx.max_weight_matching(G),
-                     {1: 2, 2: 1, 3: 4, 4: 3})
-
-        G.add_weighted_edges_from([ (1, 6, 5), (4, 5, 6) ])
-        assert_equal(nx.max_weight_matching(G),
-                     {1: 6, 2: 3, 3: 2, 4: 5, 5: 4, 6: 1})
-
-    def test_s_t_blossom(self):
-        """Create S-blossom, relabel as T-blossom, use for augmentation:"""
-        G = nx.Graph()
-        G.add_weighted_edges_from([ (1, 2, 9), (1, 3, 8), (2, 3, 10), 
-                                    (1, 4, 5), (4, 5, 4), (1, 6, 3) ])
-        assert_equal(nx.max_weight_matching(G),
-                     {1: 6, 2: 3, 3: 2, 4: 5, 5: 4, 6: 1})
-        G.add_edge(4, 5, weight=3)
-        G.add_edge(1, 6, weight=4)
-        assert_equal(nx.max_weight_matching(G),
-                     {1: 6, 2: 3, 3: 2, 4: 5, 5: 4, 6: 1})
-        G.remove_edge(1, 6)
-        G.add_edge(3, 6, weight=4)
-        assert_equal(nx.max_weight_matching(G),
-                     {1: 2, 2: 1, 3: 6, 4: 5, 5: 4, 6: 3})
-
-    def test_nested_s_blossom(self):
-        """Create nested S-blossom, use for augmentation:"""
-
-        G = nx.Graph()
-        G.add_weighted_edges_from([ (1, 2, 9), (1, 3, 9), (2, 3, 10), 
-                                    (2, 4, 8), (3, 5, 8), (4, 5, 10), 
-                                    (5, 6, 6) ])
-        assert_equal(nx.max_weight_matching(G),
-                     {1: 3, 2: 4, 3: 1, 4: 2, 5: 6, 6: 5})
-
-    def test_nested_s_blossom_relabel(self):
-        """Create S-blossom, relabel as S, include in nested S-blossom:"""
-        G = nx.Graph()
-        G.add_weighted_edges_from([ (1, 2, 10), (1, 7, 10), (2, 3, 12), 
-                                    (3, 4, 20), (3, 5, 20), (4, 5, 25), 
-                                    (5, 6, 10), (6, 7, 10), (7, 8, 8) ])
-        assert_equal(nx.max_weight_matching(G),
-                     {1: 2, 2: 1, 3: 4, 4: 3, 5: 6, 6: 5, 7: 8, 8: 7})
-
-    def test_nested_s_blossom_expand(self):
-        """Create nested S-blossom, augment, expand recursively:"""
-        G = nx.Graph()
-        G.add_weighted_edges_from([ (1, 2, 8), (1, 3, 8), (2, 3, 10), 
-                                    (2, 4, 12),(3, 5, 12), (4, 5, 14), 
-                                    (4, 6, 12), (5, 7, 12), (6, 7, 14), 
-                                    (7, 8, 12) ])
-        assert_equal(nx.max_weight_matching(G),
-                     {1: 2, 2: 1, 3: 5, 4: 6, 5: 3, 6: 4, 7: 8, 8: 7})
-
-
-    def test_s_blossom_relabel_expand(self):
-        """Create S-blossom, relabel as T, expand:"""
-        G = nx.Graph()
-        G.add_weighted_edges_from([ (1, 2, 23), (1, 5, 22), (1, 6, 15), 
-                                    (2, 3, 25), (3, 4, 22), (4, 5, 25), 
-                                    (4, 8, 14), (5, 7, 13) ])
-        assert_equal(nx.max_weight_matching(G),
-                     {1: 6, 2: 3, 3: 2, 4: 8, 5: 7, 6: 1, 7: 5, 8: 4})
-
-    def test_nested_s_blossom_relabel_expand(self):
-        """Create nested S-blossom, relabel as T, expand:"""
-        G = nx.Graph()
-        G.add_weighted_edges_from([ (1, 2, 19), (1, 3, 20), (1, 8, 8), 
-                                    (2, 3, 25), (2, 4, 18), (3, 5, 18), 
-                                    (4, 5, 13), (4, 7, 7), (5, 6, 7) ])
-        assert_equal(nx.max_weight_matching(G),
-                     {1: 8, 2: 3, 3: 2, 4: 7, 5: 6, 6: 5, 7: 4, 8: 1})
-
-
-    def test_nasty_blossom1(self):
-        """Create blossom, relabel as T in more than one way, expand, 
-        augment:
-        """
-        G = nx.Graph()
-        G.add_weighted_edges_from([ (1, 2, 45), (1, 5, 45), (2, 3, 50), 
-                                    (3, 4, 45), (4, 5, 50), (1, 6, 30), 
-                                    (3, 9, 35), (4, 8, 35), (5, 7, 26), 
-                                    (9, 10, 5) ])
-        assert_equal(nx.max_weight_matching(G),
-                     {1: 6, 2: 3, 3: 2, 4: 8, 5: 7,
-                      6: 1, 7: 5, 8: 4, 9: 10, 10: 9})
-
-    def test_nasty_blossom2(self):
-        """Again but slightly different:"""
-        G = nx.Graph()
-        G.add_weighted_edges_from([ (1, 2, 45), (1, 5, 45), (2, 3, 50), 
-                                    (3, 4, 45), (4, 5, 50), (1, 6, 30), 
-                                    (3, 9, 35), (4, 8, 26), (5, 7, 40), 
-                                    (9, 10, 5) ])
-        assert_equal(nx.max_weight_matching(G),
-                     {1: 6, 2: 3, 3: 2, 4: 8, 5: 7, 
-                      6: 1, 7: 5, 8: 4, 9: 10, 10: 9})
-
-    def test_nasty_blossom_least_slack(self):
-        """Create blossom, relabel as T, expand such that a new 
-        least-slack S-to-free dge is produced, augment:
-        """
-        G = nx.Graph()
-        G.add_weighted_edges_from([ (1, 2, 45), (1, 5, 45), (2, 3, 50), 
-                                    (3, 4, 45), (4, 5, 50), (1, 6, 30), 
-                                    (3, 9, 35), (4, 8, 28), (5, 7, 26), 
-                                    (9, 10, 5) ])
-        assert_equal(nx.max_weight_matching(G),
-                     {1: 6, 2: 3, 3: 2, 4: 8, 5: 7, 
-                      6: 1, 7: 5, 8: 4, 9: 10, 10: 9})
-
-    def test_nasty_blossom_augmenting(self):
-        """Create nested blossom, relabel as T in more than one way""" 
-        # expand outer blossom such that inner blossom ends up on an 
-        # augmenting path:
-        G = nx.Graph()
-        G.add_weighted_edges_from([ (1, 2, 45), (1, 7, 45), (2, 3, 50), 
-                                    (3, 4, 45), (4, 5, 95), (4, 6, 94), 
-                                    (5, 6, 94), (6, 7, 50), (1, 8, 30), 
-                                    (3, 11, 35), (5, 9, 36), (7, 10, 26),
-                                    (11, 12, 5) ])
-        assert_equal(nx.max_weight_matching(G),
-                     {1: 8, 2: 3, 3: 2, 4: 6, 5: 9, 6: 4, 
-                      7: 10, 8: 1, 9: 5, 10: 7, 11: 12, 12: 11})
-
-    def test_nasty_blossom_expand_recursively(self):
-        """Create nested S-blossom, relabel as S, expand recursively:"""
-        G = nx.Graph()
-        G.add_weighted_edges_from([ (1, 2, 40), (1, 3, 40), (2, 3, 60), 
-                                    (2, 4, 55), (3, 5, 55), (4, 5, 50), 
-                                    (1, 8, 15), (5, 7, 30), (7, 6, 10), 
-                                    (8, 10, 10), (4, 9, 30) ])
-        assert_equal(nx.max_weight_matching(G),
-                     {1: 2, 2: 1, 3: 5, 4: 9, 5: 3, 
-                      6: 7, 7: 6, 8: 10, 9: 4, 10: 8})
-
-def test_maximal_matching():
-    graph = nx.Graph()
-    graph.add_edge(0, 1)
-    graph.add_edge(0, 2)
-    graph.add_edge(0, 3)
-    graph.add_edge(0, 4)
-    graph.add_edge(0, 5)
-    graph.add_edge(1, 2)
-    matching = nx.maximal_matching(graph)
-
-    vset = set(u for u, v in matching)
-    vset = vset | set(v for u, v in matching)
-
-    for edge in graph.edges_iter():
-        u, v = edge
-        ok_(len(set([v]) & vset) > 0 or len(set([u]) & vset) > 0, \
-                "not a proper matching!")
-
-    eq_(1, len(matching), "matching not length 1!")
-    graph = nx.Graph()
-    graph.add_edge(1, 2)
-    graph.add_edge(1, 5)
-    graph.add_edge(2, 3)
-    graph.add_edge(2, 5)
-    graph.add_edge(3, 4)
-    graph.add_edge(3, 6)
-    graph.add_edge(5, 6)
-
-    matching = nx.maximal_matching(graph)
-    vset = set(u for u, v in matching)
-    vset = vset | set(v for u, v in matching)
-
-    for edge in graph.edges_iter():
-        u, v = edge
-        ok_(len(set([v]) & vset) > 0 or len(set([u]) & vset) > 0, \
-                "not a proper matching!")
-
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/tests/test_mis.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/tests/test_mis.py
deleted file mode 100644
index 01092ef..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/tests/test_mis.py
+++ /dev/null
@@ -1,89 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-# $Id: test_maximal_independent_set.py 577 2011-03-01 06:07:53Z lleeoo $
-"""
-Tests for maximal (not maximum) independent sets.
-
-"""
-#    Copyright (C) 2004-2010 by 
-#    Leo Lopes <leo.lopes@monash.edu>
-#    Aric Hagberg <hagberg@lanl.gov>
-#    Dan Schult <dschult@colgate.edu>
-#    Pieter Swart <swart@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-
-__author__ = """Leo Lopes (leo.lopes@monash.edu)"""
-
-from nose.tools import *
-import networkx as nx
-import random
-
-class TestMaximalIndependantSet(object):
-    def setup(self):
-        self.florentine = nx.Graph()
-        self.florentine.add_edge('Acciaiuoli','Medici')
-        self.florentine.add_edge('Castellani','Peruzzi')
-        self.florentine.add_edge('Castellani','Strozzi')
-        self.florentine.add_edge('Castellani','Barbadori')
-        self.florentine.add_edge('Medici','Barbadori')
-        self.florentine.add_edge('Medici','Ridolfi')
-        self.florentine.add_edge('Medici','Tornabuoni')
-        self.florentine.add_edge('Medici','Albizzi')
-        self.florentine.add_edge('Medici','Salviati')
-        self.florentine.add_edge('Salviati','Pazzi')
-        self.florentine.add_edge('Peruzzi','Strozzi')
-        self.florentine.add_edge('Peruzzi','Bischeri')
-        self.florentine.add_edge('Strozzi','Ridolfi')
-        self.florentine.add_edge('Strozzi','Bischeri')
-        self.florentine.add_edge('Ridolfi','Tornabuoni')
-        self.florentine.add_edge('Tornabuoni','Guadagni')
-        self.florentine.add_edge('Albizzi','Ginori')
-        self.florentine.add_edge('Albizzi','Guadagni')
-        self.florentine.add_edge('Bischeri','Guadagni')
-        self.florentine.add_edge('Guadagni','Lamberteschi')
-        
-    def test_K5(self):
-        """Maximal independent set: K5"""
-        G = nx.complete_graph(5)
-        for node in G:
-            assert_equal(nx.maximal_independent_set(G, [node]), [node])
-
-    def test_K55(self):
-        """Maximal independent set: K55"""
-        G = nx.complete_graph(55)
-        for node in G:
-            assert_equal(nx.maximal_independent_set(G, [node]), [node])
-
-    def test_exception(self):
-        """Bad input should raise exception."""
-        G = self.florentine
-        assert_raises(nx.NetworkXUnfeasible,
-                      nx.maximal_independent_set, G, ["Smith"])
-        assert_raises(nx.NetworkXUnfeasible,
-                      nx.maximal_independent_set, G, ["Salviati", "Pazzi"])
-
-    def test_florentine_family(self):
-        G = self.florentine
-        indep = nx.maximal_independent_set(G, ["Medici", "Bischeri"])
-        assert_equal(sorted(indep),
-                     sorted(["Medici", "Bischeri", "Castellani", "Pazzi",
-                      "Ginori", "Lamberteschi"]))
-
-    def test_bipartite(self):
-        G = nx.complete_bipartite_graph(12, 34)
-        indep = nx.maximal_independent_set(G, [4, 5, 9, 10])
-        assert_equal(sorted(indep), list(range(12)))
-
-
-    def test_random_graphs(self):
-        """Generate 50 random graphs of different types and sizes and
-        make sure that all sets are independent and maximal."""
-        for i in range(0, 50, 10):
-            G = nx.random_graphs.erdos_renyi_graph(i*10+1, random.random())
-            IS = nx.maximal_independent_set(G)
-            assert_false(G.subgraph(IS).edges())
-            neighbors_of_MIS = set.union(*(set(G.neighbors(v)) for v in IS))
-            for v in set(G.nodes()).difference(IS):
-                assert_true(v in neighbors_of_MIS)
-
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/tests/test_mst.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/tests/test_mst.py
deleted file mode 100644
index 5716506..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/tests/test_mst.py
+++ /dev/null
@@ -1,133 +0,0 @@
-#!/usr/bin/env python
-from nose.tools import *
-import networkx as nx
-
-class TestMST:
-
-    def setUp(self):
-    # example from Wikipedia: http://en.wikipedia.org/wiki/Kruskal's_algorithm
-        G=nx.Graph() 
-        edgelist = [(0,3,[('weight',5)]),
-                    (0,1,[('weight',7)]),
-                    (1,3,[('weight',9)]),
-                    (1,2,[('weight',8)]),
-                    (1,4,[('weight',7)]),
-                    (3,4,[('weight',15)]),
-                    (3,5,[('weight',6)]),
-                    (2,4,[('weight',5)]),
-                    (4,5,[('weight',8)]),
-                    (4,6,[('weight',9)]),
-                    (5,6,[('weight',11)])]
-                     
-
-        G.add_edges_from(edgelist)
-        self.G=G
-        tree_edgelist =  [(0,1,{'weight':7}),
-                          (0,3,{'weight':5}),
-                          (3,5,{'weight':6}),
-                          (1,4,{'weight':7}),
-                          (4,2,{'weight':5}),
-                          (4,6,{'weight':9})]
-        self.tree_edgelist=sorted((sorted((u, v))[0], sorted((u, v))[1], d)
-                                  for u,v,d in tree_edgelist)
-
-    def test_mst(self):
-        T=nx.minimum_spanning_tree(self.G)
-        assert_equal(T.edges(data=True),self.tree_edgelist)
-
-    def test_mst_edges(self):
-        edgelist=sorted(nx.minimum_spanning_edges(self.G))
-        assert_equal(edgelist,self.tree_edgelist)
-
-    def test_mst_disconnected(self):
-        G=nx.Graph()
-        G.add_path([1,2])
-        G.add_path([10,20])
-        T=nx.minimum_spanning_tree(G)
-        assert_equal(sorted(T.edges()),[(1, 2), (20, 10)])
-        assert_equal(sorted(T.nodes()),[1, 2, 10, 20])
-
-    def test_mst_isolate(self):
-        G=nx.Graph()
-        G.add_nodes_from([1,2])
-        T=nx.minimum_spanning_tree(G)
-        assert_equal(sorted(T.nodes()),[1, 2])
-        assert_equal(sorted(T.edges()),[])
-
-    def test_mst_attributes(self):
-        G=nx.Graph()
-        G.add_edge(1,2,weight=1,color='red',distance=7)
-        G.add_edge(2,3,weight=1,color='green',distance=2)
-        G.add_edge(1,3,weight=10,color='blue',distance=1)
-        G.add_node(13,color='purple')
-        G.graph['foo']='bar'
-        T=nx.minimum_spanning_tree(G)
-        assert_equal(T.graph,G.graph)
-        assert_equal(T.node[13],G.node[13])
-        assert_equal(T.edge[1][2],G.edge[1][2])
-
-    def test_mst_edges_specify_weight(self):
-        G=nx.Graph()
-        G.add_edge(1,2,weight=1,color='red',distance=7)
-        G.add_edge(1,3,weight=30,color='blue',distance=1)
-        G.add_edge(2,3,weight=1,color='green',distance=1)
-        G.add_node(13,color='purple')
-        G.graph['foo']='bar'
-        T=nx.minimum_spanning_tree(G)
-        assert_equal(sorted(T.nodes()),[1,2,3,13])
-        assert_equal(sorted(T.edges()),[(1,2),(2,3)])
-        T=nx.minimum_spanning_tree(G,weight='distance')
-        assert_equal(sorted(T.edges()),[(1,3),(2,3)])
-        assert_equal(sorted(T.nodes()),[1,2,3,13])
-
-    def test_prim_mst(self):
-        T=nx.prim_mst(self.G)
-        assert_equal(T.edges(data=True),self.tree_edgelist)
-
-    def test_prim_mst_edges(self):
-        edgelist=sorted(nx.prim_mst_edges(self.G))
-        edgelist=sorted((sorted((u, v))[0], sorted((u, v))[1], d)
-                                  for u,v,d in edgelist)
-        assert_equal(edgelist,self.tree_edgelist)
-
-    def test_prim_mst_disconnected(self):
-        G=nx.Graph()
-        G.add_path([1,2])
-        G.add_path([10,20])
-        T=nx.prim_mst(G)
-        assert_equal(sorted(T.edges()),[(1, 2), (20, 10)])
-        assert_equal(sorted(T.nodes()),[1, 2, 10, 20])
-
-    def test_prim_mst_isolate(self):
-        G=nx.Graph()
-        G.add_nodes_from([1,2])
-        T=nx.prim_mst(G)
-        assert_equal(sorted(T.nodes()),[1, 2])
-        assert_equal(sorted(T.edges()),[])
-
-    def test_prim_mst_attributes(self):
-        G=nx.Graph()
-        G.add_edge(1,2,weight=1,color='red',distance=7)
-        G.add_edge(2,3,weight=1,color='green',distance=2)
-        G.add_edge(1,3,weight=10,color='blue',distance=1)
-        G.add_node(13,color='purple')
-        G.graph['foo']='bar'
-        T=nx.prim_mst(G)
-        assert_equal(T.graph,G.graph)
-        assert_equal(T.node[13],G.node[13])
-        assert_equal(T.edge[1][2],G.edge[1][2])
-
-    def test_prim_mst_edges_specify_weight(self):
-        G=nx.Graph()
-        G.add_edge(1,2,weight=1,color='red',distance=7)
-        G.add_edge(1,3,weight=30,color='blue',distance=1)
-        G.add_edge(2,3,weight=1,color='green',distance=1)
-        G.add_node(13,color='purple')
-        G.graph['foo']='bar'
-        T=nx.prim_mst(G)
-        assert_equal(sorted(T.nodes()),[1,2,3,13])
-        assert_equal(sorted(T.edges()),[(1,2),(2,3)])
-        T=nx.prim_mst(G,weight='distance')
-        assert_equal(sorted(T.edges()),[(1,3),(2,3)])
-        assert_equal(sorted(T.nodes()),[1,2,3,13])
-
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/tests/test_richclub.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/tests/test_richclub.py
deleted file mode 100644
index 8114d91..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/tests/test_richclub.py
+++ /dev/null
@@ -1,30 +0,0 @@
-import networkx as nx
-from nose.tools import *
-
-
-def test_richclub():
-    G = nx.Graph([(0,1),(0,2),(1,2),(1,3),(1,4),(4,5)])
-    rc = nx.richclub.rich_club_coefficient(G,normalized=False)
-    assert_equal(rc,{0: 12.0/30,1:8.0/12})
-    
-    # test single value
-    rc0 = nx.richclub.rich_club_coefficient(G,normalized=False)[0]
-    assert_equal(rc0,12.0/30.0)
-
-def test_richclub_normalized():
-    G = nx.Graph([(0,1),(0,2),(1,2),(1,3),(1,4),(4,5)])
-    rcNorm = nx.richclub.rich_club_coefficient(G,Q=2)
-    assert_equal(rcNorm,{0:1.0,1:1.0})
-
-
-def test_richclub2():
-    T = nx.balanced_tree(2,10)
-    rc = nx.richclub.rich_club_coefficient(T,normalized=False)
-    assert_equal(rc,{0:4092/(2047*2046.0),
-                     1:(2044.0/(1023*1022)),
-                     2:(2040.0/(1022*1021))})
-
-#def test_richclub2_normalized():
-#    T = nx.balanced_tree(2,10)
-#    rcNorm = nx.richclub.rich_club_coefficient(T,Q=2)
-#    assert_true(rcNorm[0] ==1.0 and rcNorm[1] < 0.9 and rcNorm[2] < 0.9)
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/tests/test_simple_paths.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/tests/test_simple_paths.py
deleted file mode 100644
index 268a890..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/tests/test_simple_paths.py
+++ /dev/null
@@ -1,73 +0,0 @@
-#!/usr/bin/env python
-from nose.tools import *
-import networkx as nx
-
-def test_all_simple_paths():
-    G = nx.path_graph(4)
-    paths = nx.all_simple_paths(G,0,3)
-    assert_equal(list(list(p) for p in paths),[[0,1,2,3]])
-
-def test_all_simple_paths_cutoff():
-    G = nx.complete_graph(4)
-    paths = nx.all_simple_paths(G,0,1,cutoff=1)
-    assert_equal(list(list(p) for p in paths),[[0,1]])
-    paths = nx.all_simple_paths(G,0,1,cutoff=2)
-    assert_equal(list(list(p) for p in paths),[[0,1],[0,2,1],[0,3,1]])
-
-def test_all_simple_paths_multigraph():
-    G = nx.MultiGraph([(1,2),(1,2)])
-    paths = nx.all_simple_paths(G,1,2)
-    assert_equal(list(list(p) for p in paths),[[1,2],[1,2]])
-
-def test_all_simple_paths_multigraph_with_cutoff():
-    G = nx.MultiGraph([(1,2),(1,2),(1,10),(10,2)])
-    paths = nx.all_simple_paths(G,1,2, cutoff=1)
-    assert_equal(list(list(p) for p in paths),[[1,2],[1,2]])
-
-
-def test_all_simple_paths_directed():
-    G = nx.DiGraph()
-    G.add_path([1,2,3])
-    G.add_path([3,2,1])
-    paths = nx.all_simple_paths(G,1,3)
-    assert_equal(list(list(p) for p in paths),[[1,2,3]])
-
-def test_all_simple_paths_empty():
-    G = nx.path_graph(4)
-    paths = nx.all_simple_paths(G,0,3,cutoff=2)
-    assert_equal(list(list(p) for p in paths),[])
-
-def hamiltonian_path(G,source):
-    source = next(G.nodes_iter())
-    neighbors = set(G[source])-set([source])
-    n = len(G)
-    for target in neighbors:
-        for path in nx.all_simple_paths(G,source,target):
-            if len(path) == n:
-                yield path
-
-def test_hamiltonian_path():
-    from itertools import permutations
-    G=nx.complete_graph(4)
-    paths = [list(p) for p in hamiltonian_path(G,0)]
-    exact = [[0]+list(p) for p in permutations([1,2,3],3) ]
-    assert_equal(sorted(paths),sorted(exact))
-
-def test_cutoff_zero():
-    G = nx.complete_graph(4)
-    paths = nx.all_simple_paths(G,0,3,cutoff=0)
-    assert_equal(list(list(p) for p in paths),[])
-    paths = nx.all_simple_paths(nx.MultiGraph(G),0,3,cutoff=0)
-    assert_equal(list(list(p) for p in paths),[])
-
-@raises(nx.NetworkXError)
-def test_source_missing():
-    G = nx.Graph()
-    G.add_path([1,2,3])
-    paths = list(nx.all_simple_paths(nx.MultiGraph(G),0,3))
-
-@raises(nx.NetworkXError)
-def test_target_missing():
-    G = nx.Graph()
-    G.add_path([1,2,3])
-    paths = list(nx.all_simple_paths(nx.MultiGraph(G),1,4))
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/tests/test_smetric.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/tests/test_smetric.py
deleted file mode 100644
index 3fb288b..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/tests/test_smetric.py
+++ /dev/null
@@ -1,19 +0,0 @@
-
-from nose.tools import assert_equal,raises
-
-import networkx as nx
-
-def test_smetric():
-    g = nx.Graph()
-    g.add_edge(1,2)
-    g.add_edge(2,3)
-    g.add_edge(2,4)
-    g.add_edge(1,4)
-    sm = nx.s_metric(g,normalized=False)
-    assert_equal(sm, 19.0)
-#    smNorm = nx.s_metric(g,normalized=True)
-#    assert_equal(smNorm, 0.95)
-
-@raises(nx.NetworkXError)
-def test_normalized():
-        sm = nx.s_metric(nx.Graph(),normalized=True)
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/tests/test_swap.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/tests/test_swap.py
deleted file mode 100644
index afa2355..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/tests/test_swap.py
+++ /dev/null
@@ -1,42 +0,0 @@
-#!/usr/bin/env python
-from nose.tools import *
-from networkx import *
-
-def test_double_edge_swap():
-    graph = barabasi_albert_graph(200,1)
-    degrees = sorted(graph.degree().values())
-    G = double_edge_swap(graph, 40)
-    assert_equal(degrees, sorted(graph.degree().values()))
-
-def test_connected_double_edge_swap():
-    graph = barabasi_albert_graph(200,1)
-    degrees = sorted(graph.degree().values())
-    G = connected_double_edge_swap(graph, 40)
-    assert_true(is_connected(graph))
-    assert_equal(degrees, sorted(graph.degree().values()))
-
-@raises(NetworkXError)
-def test_double_edge_swap_small():
-    G = nx.double_edge_swap(nx.path_graph(3))
-
-@raises(NetworkXError)
-def test_double_edge_swap_tries():
-    G = nx.double_edge_swap(nx.path_graph(10),nswap=1,max_tries=0)
-
-@raises(NetworkXError)
-def test_connected_double_edge_swap_small():
-    G = nx.connected_double_edge_swap(nx.path_graph(3))
-
-@raises(NetworkXError)
-def test_connected_double_edge_swap_not_connected():
-    G = nx.path_graph(3)
-    G.add_path([10,11,12])
-    G = nx.connected_double_edge_swap(G)
-
-
-def test_degree_seq_c4():
-    G = cycle_graph(4)
-    degrees = sorted(G.degree().values())
-    G = double_edge_swap(G,1,100)
-    assert_equal(degrees, sorted(G.degree().values()))
-
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/tests/test_vitality.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/tests/test_vitality.py
deleted file mode 100644
index 06f09fe..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/tests/test_vitality.py
+++ /dev/null
@@ -1,35 +0,0 @@
-#!/usr/bin/env python
-from nose.tools import *
-import networkx as nx
-
-class TestVitality:
-
-    def test_closeness_vitality_unweighted(self):
-        G=nx.cycle_graph(3)
-        v=nx.closeness_vitality(G)
-        assert_equal(v,{0:4.0, 1:4.0, 2:4.0})
-        assert_equal(v[0],4.0)
-
-    def test_closeness_vitality_weighted(self):
-        G=nx.Graph()
-        G.add_cycle([0,1,2],weight=2)
-        v=nx.closeness_vitality(G,weight='weight')
-        assert_equal(v,{0:8.0, 1:8.0, 2:8.0})
-
-    def test_closeness_vitality_unweighted_digraph(self):
-        G=nx.DiGraph()
-        G.add_cycle([0,1,2])
-        v=nx.closeness_vitality(G)
-        assert_equal(v,{0:8.0, 1:8.0, 2:8.0})
-
-    def test_closeness_vitality_weighted_digraph(self):
-        G=nx.DiGraph()
-        G.add_cycle([0,1,2],weight=2)
-        v=nx.closeness_vitality(G,weight='weight')
-        assert_equal(v,{0:16.0, 1:16.0, 2:16.0})
-
-    def test_closeness_vitality_weighted_multidigraph(self):
-        G=nx.MultiDiGraph()
-        G.add_cycle([0,1,2],weight=2)
-        v=nx.closeness_vitality(G,weight='weight')
-        assert_equal(v,{0:16.0, 1:16.0, 2:16.0})
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/traversal/__init__.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/traversal/__init__.py
deleted file mode 100644
index de558ba..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/traversal/__init__.py
+++ /dev/null
@@ -1,4 +0,0 @@
-import networkx.algorithms.traversal.depth_first_search
-from networkx.algorithms.traversal.depth_first_search import *
-import networkx.algorithms.traversal.breadth_first_search
-from networkx.algorithms.traversal.breadth_first_search import *
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/traversal/breadth_first_search.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/traversal/breadth_first_search.py
deleted file mode 100644
index 6ef2985..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/traversal/breadth_first_search.py
+++ /dev/null
@@ -1,53 +0,0 @@
-"""
-====================
-Breadth-first search
-====================
-
-Basic algorithms for breadth-first searching.
-"""
-__author__ = """\n""".join(['Aric Hagberg <hagberg@lanl.gov>'])
-
-__all__ = ['bfs_edges', 'bfs_tree',
-           'bfs_predecessors', 'bfs_successors']
-
-import networkx as nx
-from collections import defaultdict, deque
-
-def bfs_edges(G, source, reverse=False):
-    """Produce edges in a breadth-first-search starting at source."""
-    # Based on http://www.ics.uci.edu/~eppstein/PADS/BFS.py
-    # by D. Eppstein, July 2004.
-    if reverse and isinstance(G, nx.DiGraph):
-        neighbors = G.predecessors_iter
-    else:
-        neighbors = G.neighbors_iter
-    visited=set([source])
-    queue = deque([(source, neighbors(source))])
-    while queue:
-        parent, children = queue[0]
-        try:
-            child = next(children)
-            if child not in visited:
-                yield parent, child
-                visited.add(child)
-                queue.append((child, neighbors(child)))
-        except StopIteration:
-            queue.popleft()
-
-def bfs_tree(G, source, reverse=False):
-    """Return directed tree of breadth-first-search from source."""
-    T = nx.DiGraph()
-    T.add_node(source)
-    T.add_edges_from(bfs_edges(G,source,reverse=reverse))
-    return T
-
-def bfs_predecessors(G, source):
-    """Return dictionary of predecessors in breadth-first-search from source."""
-    return dict((t,s) for s,t in bfs_edges(G,source))
-
-def bfs_successors(G, source):
-    """Return dictionary of successors in breadth-first-search from source."""
-    d=defaultdict(list)
-    for s,t in bfs_edges(G,source):
-        d[s].append(t)
-    return dict(d)
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/traversal/depth_first_search.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/traversal/depth_first_search.py
deleted file mode 100644
index feb6713..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/traversal/depth_first_search.py
+++ /dev/null
@@ -1,124 +0,0 @@
-"""
-==================
-Depth-first search
-==================
-
-Basic algorithms for depth-first searching.
-
-Based on http://www.ics.uci.edu/~eppstein/PADS/DFS.py
-by D. Eppstein, July 2004.
-"""
-__author__ = """\n""".join(['Aric Hagberg <hagberg@lanl.gov>'])
-
-__all__ = ['dfs_edges', 'dfs_tree',
-           'dfs_predecessors', 'dfs_successors',
-           'dfs_preorder_nodes','dfs_postorder_nodes',
-           'dfs_labeled_edges']
-
-import networkx as nx
-from collections import defaultdict
-
-def dfs_edges(G,source=None):
-    """Produce edges in a depth-first-search starting at source."""
-    # Based on http://www.ics.uci.edu/~eppstein/PADS/DFS.py
-    # by D. Eppstein, July 2004.
-    if source is None:
-        # produce edges for all components
-        nodes=G
-    else:
-        # produce edges for components with source
-        nodes=[source]
-    visited=set()
-    for start in nodes:
-        if start in visited:
-            continue
-        visited.add(start)
-        stack = [(start,iter(G[start]))]
-        while stack:
-            parent,children = stack[-1]
-            try:
-                child = next(children)
-                if child not in visited:
-                    yield parent,child
-                    visited.add(child)
-                    stack.append((child,iter(G[child])))
-            except StopIteration:
-                stack.pop()
-
-def dfs_tree(G, source):
-    """Return directed tree of depth-first-search from source."""
-    T = nx.DiGraph()
-    if source is None:
-        T.add_nodes_from(G)
-    else:
-        T.add_node(source)
-    T.add_edges_from(dfs_edges(G,source))
-    return T
-
-def dfs_predecessors(G, source=None):
-    """Return dictionary of predecessors in depth-first-search from source."""
-    return dict((t,s) for s,t in dfs_edges(G,source=source))
-
-
-def dfs_successors(G, source=None):
-    """Return dictionary of successors in depth-first-search from source."""
-    d=defaultdict(list)
-    for s,t in dfs_edges(G,source=source):
-        d[s].append(t)
-    return dict(d)
-
-
-def dfs_postorder_nodes(G,source=None):
-    """Produce nodes in a depth-first-search post-ordering starting
-    from source.
-    """
-    post=(v for u,v,d in nx.dfs_labeled_edges(G,source=source)
-          if d['dir']=='reverse')
-    # chain source to end of pre-ordering
-#    return chain(post,[source])
-    return post
-
-
-def dfs_preorder_nodes(G,source=None):
-    """Produce nodes in a depth-first-search pre-ordering starting at source."""
-    pre=(v for u,v,d in nx.dfs_labeled_edges(G,source=source)
-         if d['dir']=='forward')
-    # chain source to beginning of pre-ordering
-#    return chain([source],pre)
-    return pre
-
-
-def dfs_labeled_edges(G,source=None):
-    """Produce edges in a depth-first-search starting at source and
-    labeled by direction type (forward, reverse, nontree).
-    """
-    # Based on http://www.ics.uci.edu/~eppstein/PADS/DFS.py
-    # by D. Eppstein, July 2004.
-    if source is None:
-        # produce edges for all components
-        nodes=G
-    else:
-        # produce edges for components with source
-        nodes=[source]
-    visited=set()
-    for start in nodes:
-        if start in visited:
-            continue
-        yield start,start,{'dir':'forward'}
-        visited.add(start)
-        stack = [(start,iter(G[start]))]
-        while stack:
-            parent,children = stack[-1]
-            try:
-                child = next(children)
-                if child in visited:
-                    yield parent,child,{'dir':'nontree'}
-                else:
-                    yield parent,child,{'dir':'forward'}
-                    visited.add(child)
-                    stack.append((child,iter(G[child])))
-            except StopIteration:
-                stack.pop()
-                if stack:
-                    yield stack[-1][0],parent,{'dir':'reverse'}
-        yield start,start,{'dir':'reverse'}
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/traversal/tests/test_bfs.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/traversal/tests/test_bfs.py
deleted file mode 100644
index bae2fac..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/traversal/tests/test_bfs.py
+++ /dev/null
@@ -1,36 +0,0 @@
-#!/usr/bin/env python
-from nose.tools import *
-import networkx as nx
-
-class TestBFS:
-
-    def setUp(self):
-        # simple graph
-        G=nx.Graph()
-        G.add_edges_from([(0,1),(1,2),(1,3),(2,4),(3,4)])
-        self.G=G
-
-    def test_successor(self):
-        assert_equal(nx.bfs_successors(self.G,source=0),
-                     {0: [1], 1: [2,3], 2:[4]})
-
-    def test_predecessor(self):
-        assert_equal(nx.bfs_predecessors(self.G,source=0),
-                     {1: 0, 2: 1, 3: 1, 4: 2})
-
-    def test_bfs_tree(self):
-        T=nx.bfs_tree(self.G,source=0)
-        assert_equal(sorted(T.nodes()),sorted(self.G.nodes()))
-        assert_equal(sorted(T.edges()),[(0, 1), (1, 2), (1, 3), (2, 4)])
-
-    def test_bfs_edges(self):
-        edges=nx.bfs_edges(self.G,source=0)
-        assert_equal(list(edges),[(0, 1), (1, 2), (1, 3), (2, 4)])
-
-    def test_bfs_tree_isolates(self):
-        G = nx.Graph()
-        G.add_node(1)
-        G.add_node(2)
-        T=nx.bfs_tree(G,source=1)
-        assert_equal(sorted(T.nodes()),[1])
-        assert_equal(sorted(T.edges()),[])
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/traversal/tests/test_dfs.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/traversal/tests/test_dfs.py
deleted file mode 100644
index 9fad985..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/traversal/tests/test_dfs.py
+++ /dev/null
@@ -1,68 +0,0 @@
-#!/usr/bin/env python
-from nose.tools import *
-import networkx as nx
-
-class TestDFS:
-
-    def setUp(self):
-        # simple graph
-        G=nx.Graph()
-        G.add_edges_from([(0,1),(1,2),(1,3),(2,4),(3,4)])
-        self.G=G
-        # simple graph, disconnected
-        D=nx.Graph()
-        D.add_edges_from([(0,1),(2,3)])
-        self.D=D
-
-
-    def test_preorder_nodes(self):
-        assert_equal(list(nx.dfs_preorder_nodes(self.G,source=0)),
-                     [0, 1, 2, 4, 3])
-        assert_equal(list(nx.dfs_preorder_nodes(self.D)),[0, 1, 2, 3])
-
-    def test_postorder_nodes(self):
-        assert_equal(list(nx.dfs_postorder_nodes(self.G,source=0)),
-                     [3, 4, 2, 1, 0])
-        assert_equal(list(nx.dfs_postorder_nodes(self.D)),[1, 0, 3, 2])
-
-    def test_successor(self):
-        assert_equal(nx.dfs_successors(self.G,source=0),
-                     {0: [1], 1: [2], 2: [4], 4: [3]})
-        assert_equal(nx.dfs_successors(self.D), {0: [1], 2: [3]})
-
-    def test_predecessor(self):
-        assert_equal(nx.dfs_predecessors(self.G,source=0),
-                     {1: 0, 2: 1, 3: 4, 4: 2})
-        assert_equal(nx.dfs_predecessors(self.D), {1: 0, 3: 2})
-
-    def test_dfs_tree(self):
-        T=nx.dfs_tree(self.G,source=0)
-        assert_equal(sorted(T.nodes()),sorted(self.G.nodes()))
-        assert_equal(sorted(T.edges()),[(0, 1), (1, 2), (2, 4), (4, 3)])
-
-    def test_dfs_edges(self):
-        edges=nx.dfs_edges(self.G,source=0)
-        assert_equal(list(edges),[(0, 1), (1, 2), (2, 4), (4, 3)])
-        edges=nx.dfs_edges(self.D)
-        assert_equal(list(edges),[(0, 1), (2, 3)])
-
-    def test_dfs_labeled_edges(self):
-        edges=list(nx.dfs_labeled_edges(self.G,source=0))
-        forward=[(u,v) for (u,v,d) in edges if d['dir']=='forward']
-        assert_equal(forward,[(0,0), (0, 1), (1, 2), (2, 4), (4, 3)])
-
-    def test_dfs_labeled_disconnected_edges(self):
-        edges=list(nx.dfs_labeled_edges(self.D))
-        forward=[(u,v) for (u,v,d) in edges if d['dir']=='forward']
-        assert_equal(forward,[(0, 0), (0, 1), (2, 2), (2, 3)])
-
-    def test_dfs_tree_isolates(self):
-        G = nx.Graph()
-        G.add_node(1)
-        G.add_node(2)
-        T=nx.dfs_tree(G,source=1)
-        assert_equal(sorted(T.nodes()),[1])
-        assert_equal(sorted(T.edges()),[])
-        T=nx.dfs_tree(G,source=None)
-        assert_equal(sorted(T.nodes()),[1, 2])
-        assert_equal(sorted(T.edges()),[])
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/vitality.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/vitality.py
deleted file mode 100644
index c4db32e..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/vitality.py
+++ /dev/null
@@ -1,84 +0,0 @@
-"""
-Vitality measures.
-"""
-#    Copyright (C) 2012 by
-#    Aric Hagberg <hagberg@lanl.gov>
-#    Dan Schult <dschult@colgate.edu>
-#    Pieter Swart <swart@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-import networkx as nx
-__author__ = "\n".join(['Aric Hagberg (hagberg@lanl.gov)',
-                        'Renato Fabbri'])
-__all__ = ['closeness_vitality']
-
-def weiner_index(G, weight=None):
-    # compute sum of distances between all node pairs
-    # (with optional weights)
-    weiner=0.0
-    if weight is None:
-        for n in G:
-            path_length=nx.single_source_shortest_path_length(G,n)
-            weiner+=sum(path_length.values())
-    else:
-        for n in G:
-            path_length=nx.single_source_dijkstra_path_length(G,
-                    n,weight=weight)
-            weiner+=sum(path_length.values())
-    return weiner
-
-
-def closeness_vitality(G, weight=None):
-    """Compute closeness vitality for nodes.
-
-    Closeness vitality of a node is the change in the sum of distances
-    between all node pairs when excluding that node.
-
-    Parameters
-    ----------
-    G : graph
-
-    weight : None or string (optional)
-       The name of the edge attribute used as weight. If None the edge
-       weights are ignored.
-
-    Returns
-    -------
-    nodes : dictionary
-       Dictionary with nodes as keys and closeness vitality as the value.
-
-    Examples
-    --------
-    >>> G=nx.cycle_graph(3)
-    >>> nx.closeness_vitality(G)
-    {0: 4.0, 1: 4.0, 2: 4.0}
-
-    See Also
-    --------
-    closeness_centrality()
-
-    References
-    ----------
-    .. [1] Ulrik Brandes, Sec. 3.6.2 in
-       Network Analysis: Methodological Foundations, Springer, 2005.
-       http://books.google.com/books?id=TTNhSm7HYrIC
-    """
-    multigraph = G.is_multigraph()
-    wig = weiner_index(G,weight)
-    closeness_vitality = {}
-    for n in G:
-        # remove edges connected to node n and keep list of edges with data
-        # could remove node n but it doesn't count anyway
-        if multigraph:
-            edges = G.edges(n,data=True,keys=True)
-            if G.is_directed():
-                edges += G.in_edges(n,data=True,keys=True)
-        else:
-            edges = G.edges(n,data=True)
-            if G.is_directed():
-                edges += G.in_edges(n,data=True)
-        G.remove_edges_from(edges)
-        closeness_vitality[n] = wig - weiner_index(G,weight)
-        # add edges and data back to graph
-        G.add_edges_from(edges)
-    return closeness_vitality
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/classes/__init__.py b/lib/python2.7/site-packages/setoolsgui/networkx/classes/__init__.py
deleted file mode 100644
index fa97851..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/classes/__init__.py
+++ /dev/null
@@ -1,5 +0,0 @@
-from networkx.classes.graph import Graph
-from networkx.classes.digraph import DiGraph
-from networkx.classes.multigraph import MultiGraph
-from networkx.classes.multidigraph import MultiDiGraph
-from networkx.classes.function import *
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/classes/digraph.py b/lib/python2.7/site-packages/setoolsgui/networkx/classes/digraph.py
deleted file mode 100644
index 37b9f9d..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/classes/digraph.py
+++ /dev/null
@@ -1,1236 +0,0 @@
-"""Base class for directed graphs."""
-#    Copyright (C) 2004-2011 by
-#    Aric Hagberg <hagberg@lanl.gov>
-#    Dan Schult <dschult@colgate.edu>
-#    Pieter Swart <swart@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-from copy import deepcopy
-import networkx as nx
-from networkx.classes.graph import Graph
-from networkx.exception import NetworkXError
-import networkx.convert as convert
-__author__ = """\n""".join(['Aric Hagberg (hagberg@lanl.gov)',
-                            'Pieter Swart (swart@lanl.gov)',
-                            'Dan Schult(dschult@colgate.edu)'])
-
-class DiGraph(Graph):
-    """
-    Base class for directed graphs.
-
-    A DiGraph stores nodes and edges with optional data, or attributes.
-
-    DiGraphs hold directed edges.  Self loops are allowed but multiple
-    (parallel) edges are not.
-
-    Nodes can be arbitrary (hashable) Python objects with optional
-    key/value attributes.
-
-    Edges are represented as links between nodes with optional
-    key/value attributes.
-
-    Parameters
-    ----------
-    data : input graph
-        Data to initialize graph.  If data=None (default) an empty
-        graph is created.  The data can be an edge list, or any
-        NetworkX graph object.  If the corresponding optional Python
-        packages are installed the data can also be a NumPy matrix
-        or 2d ndarray, a SciPy sparse matrix, or a PyGraphviz graph.
-    attr : keyword arguments, optional (default= no attributes)
-        Attributes to add to graph as key=value pairs.
-
-    See Also
-    --------
-    Graph
-    MultiGraph
-    MultiDiGraph
-
-    Examples
-    --------
-    Create an empty graph structure (a "null graph") with no nodes and
-    no edges.
-
-    >>> G = nx.DiGraph()
-
-    G can be grown in several ways.
-
-    **Nodes:**
-
-    Add one node at a time:
-
-    >>> G.add_node(1)
-
-    Add the nodes from any container (a list, dict, set or
-    even the lines from a file or the nodes from another graph).
-
-    >>> G.add_nodes_from([2,3])
-    >>> G.add_nodes_from(range(100,110))
-    >>> H=nx.Graph()
-    >>> H.add_path([0,1,2,3,4,5,6,7,8,9])
-    >>> G.add_nodes_from(H)
-
-    In addition to strings and integers any hashable Python object
-    (except None) can represent a node, e.g. a customized node object,
-    or even another Graph.
-
-    >>> G.add_node(H)
-
-    **Edges:**
-
-    G can also be grown by adding edges.
-
-    Add one edge,
-
-    >>> G.add_edge(1, 2)
-
-    a list of edges,
-
-    >>> G.add_edges_from([(1,2),(1,3)])
-
-    or a collection of edges,
-
-    >>> G.add_edges_from(H.edges())
-
-    If some edges connect nodes not yet in the graph, the nodes
-    are added automatically.  There are no errors when adding
-    nodes or edges that already exist.
-
-    **Attributes:**
-
-    Each graph, node, and edge can hold key/value attribute pairs
-    in an associated attribute dictionary (the keys must be hashable).
-    By default these are empty, but can be added or changed using
-    add_edge, add_node or direct manipulation of the attribute
-    dictionaries named graph, node and edge respectively.
-
-    >>> G = nx.DiGraph(day="Friday")
-    >>> G.graph
-    {'day': 'Friday'}
-
-    Add node attributes using add_node(), add_nodes_from() or G.node
-
-    >>> G.add_node(1, time='5pm')
-    >>> G.add_nodes_from([3], time='2pm')
-    >>> G.node[1]
-    {'time': '5pm'}
-    >>> G.node[1]['room'] = 714
-    >>> del G.node[1]['room'] # remove attribute
-    >>> G.nodes(data=True)
-    [(1, {'time': '5pm'}), (3, {'time': '2pm'})]
-
-    Warning: adding a node to G.node does not add it to the graph.
-
-    Add edge attributes using add_edge(), add_edges_from(), subscript
-    notation, or G.edge.
-
-    >>> G.add_edge(1, 2, weight=4.7 )
-    >>> G.add_edges_from([(3,4),(4,5)], color='red')
-    >>> G.add_edges_from([(1,2,{'color':'blue'}), (2,3,{'weight':8})])
-    >>> G[1][2]['weight'] = 4.7
-    >>> G.edge[1][2]['weight'] = 4
-
-    **Shortcuts:**
-
-    Many common graph features allow python syntax to speed reporting.
-
-    >>> 1 in G     # check if node in graph
-    True
-    >>> [n for n in G if n<3]   # iterate through nodes
-    [1, 2]
-    >>> len(G)  # number of nodes in graph
-    5
-
-    The fastest way to traverse all edges of a graph is via
-    adjacency_iter(), but the edges() method is often more convenient.
-
-    >>> for n,nbrsdict in G.adjacency_iter():
-    ...     for nbr,eattr in nbrsdict.items():
-    ...        if 'weight' in eattr:
-    ...            (n,nbr,eattr['weight'])
-    (1, 2, 4)
-    (2, 3, 8)
-    >>> [ (u,v,edata['weight']) for u,v,edata in G.edges(data=True) if 'weight' in edata ]
-    [(1, 2, 4), (2, 3, 8)]
-
-    **Reporting:**
-
-    Simple graph information is obtained using methods.
-    Iterator versions of many reporting methods exist for efficiency.
-    Methods exist for reporting nodes(), edges(), neighbors() and degree()
-    as well as the number of nodes and edges.
-
-    For details on these and other miscellaneous methods, see below.
-    """
-    def __init__(self, data=None, **attr):
-        """Initialize a graph with edges, name, graph attributes.
-
-        Parameters
-        ----------
-        data : input graph
-            Data to initialize graph.  If data=None (default) an empty
-            graph is created.  The data can be an edge list, or any
-            NetworkX graph object.  If the corresponding optional Python
-            packages are installed the data can also be a NumPy matrix
-            or 2d ndarray, a SciPy sparse matrix, or a PyGraphviz graph.
-        name : string, optional (default='')
-            An optional name for the graph.
-        attr : keyword arguments, optional (default= no attributes)
-            Attributes to add to graph as key=value pairs.
-
-        See Also
-        --------
-        convert
-
-        Examples
-        --------
-        >>> G = nx.Graph()   # or DiGraph, MultiGraph, MultiDiGraph, etc
-        >>> G = nx.Graph(name='my graph')
-        >>> e = [(1,2),(2,3),(3,4)] # list of edges
-        >>> G = nx.Graph(e)
-
-        Arbitrary graph attribute pairs (key=value) may be assigned
-
-        >>> G=nx.Graph(e, day="Friday")
-        >>> G.graph
-        {'day': 'Friday'}
-
-        """
-        self.graph = {} # dictionary for graph attributes
-        self.node = {} # dictionary for node attributes
-        # We store two adjacency lists:
-        # the  predecessors of node n are stored in the dict self.pred
-        # the successors of node n are stored in the dict self.succ=self.adj
-        self.adj = {}  # empty adjacency dictionary
-        self.pred = {}  # predecessor
-        self.succ = self.adj  # successor
-
-        # attempt to load graph with data
-        if data is not None:
-            convert.to_networkx_graph(data,create_using=self)
-        # load graph attributes (must be after convert)
-        self.graph.update(attr)
-        self.edge=self.adj
-
-
-    def add_node(self, n, attr_dict=None, **attr):
-        """Add a single node n and update node attributes.
-
-        Parameters
-        ----------
-        n : node
-            A node can be any hashable Python object except None.
-        attr_dict : dictionary, optional (default= no attributes)
-            Dictionary of node attributes.  Key/value pairs will
-            update existing data associated with the node.
-        attr : keyword arguments, optional
-            Set or change attributes using key=value.
-
-        See Also
-        --------
-        add_nodes_from
-
-        Examples
-        --------
-        >>> G = nx.Graph()   # or DiGraph, MultiGraph, MultiDiGraph, etc
-        >>> G.add_node(1)
-        >>> G.add_node('Hello')
-        >>> K3 = nx.Graph([(0,1),(1,2),(2,0)])
-        >>> G.add_node(K3)
-        >>> G.number_of_nodes()
-        3
-
-        Use keywords set/change node attributes:
-
-        >>> G.add_node(1,size=10)
-        >>> G.add_node(3,weight=0.4,UTM=('13S',382871,3972649))
-
-        Notes
-        -----
-        A hashable object is one that can be used as a key in a Python
-        dictionary. This includes strings, numbers, tuples of strings
-        and numbers, etc.
-
-        On many platforms hashable items also include mutables such as
-        NetworkX Graphs, though one should be careful that the hash
-        doesn't change on mutables.
-        """
-        # set up attribute dict
-        if attr_dict is None:
-            attr_dict=attr
-        else:
-            try:
-                attr_dict.update(attr)
-            except AttributeError:
-                raise NetworkXError(\
-                    "The attr_dict argument must be a dictionary.")
-        if n not in self.succ:
-            self.succ[n] = {}
-            self.pred[n] = {}
-            self.node[n] = attr_dict
-        else: # update attr even if node already exists
-            self.node[n].update(attr_dict)
-
-
-    def add_nodes_from(self, nodes, **attr):
-        """Add multiple nodes.
-
-        Parameters
-        ----------
-        nodes : iterable container
-            A container of nodes (list, dict, set, etc.).
-            OR
-            A container of (node, attribute dict) tuples.
-            Node attributes are updated using the attribute dict.
-        attr : keyword arguments, optional (default= no attributes)
-            Update attributes for all nodes in nodes.
-            Node attributes specified in nodes as a tuple
-            take precedence over attributes specified generally.
-
-        See Also
-        --------
-        add_node
-
-        Examples
-        --------
-        >>> G = nx.Graph()   # or DiGraph, MultiGraph, MultiDiGraph, etc
-        >>> G.add_nodes_from('Hello')
-        >>> K3 = nx.Graph([(0,1),(1,2),(2,0)])
-        >>> G.add_nodes_from(K3)
-        >>> sorted(G.nodes(),key=str)
-        [0, 1, 2, 'H', 'e', 'l', 'o']
-
-        Use keywords to update specific node attributes for every node.
-
-        >>> G.add_nodes_from([1,2], size=10)
-        >>> G.add_nodes_from([3,4], weight=0.4)
-
-        Use (node, attrdict) tuples to update attributes for specific
-        nodes.
-
-        >>> G.add_nodes_from([(1,dict(size=11)), (2,{'color':'blue'})])
-        >>> G.node[1]['size']
-        11
-        >>> H = nx.Graph()
-        >>> H.add_nodes_from(G.nodes(data=True))
-        >>> H.node[1]['size']
-        11
-
-        """
-        for n in nodes:
-            try:
-                newnode=n not in self.succ
-            except TypeError:
-                nn,ndict = n
-                if nn not in self.succ:
-                    self.succ[nn] = {}
-                    self.pred[nn] = {}
-                    newdict = attr.copy()
-                    newdict.update(ndict)
-                    self.node[nn] = newdict
-                else:
-                    olddict = self.node[nn]
-                    olddict.update(attr)
-                    olddict.update(ndict)
-                continue
-            if newnode:
-                self.succ[n] = {}
-                self.pred[n] = {}
-                self.node[n] = attr.copy()
-            else:
-                self.node[n].update(attr)
-
-    def remove_node(self, n):
-        """Remove node n.
-
-        Removes the node n and all adjacent edges.
-        Attempting to remove a non-existent node will raise an exception.
-
-        Parameters
-        ----------
-        n : node
-           A node in the graph
-
-        Raises
-        -------
-        NetworkXError
-           If n is not in the graph.
-
-        See Also
-        --------
-        remove_nodes_from
-
-        Examples
-        --------
-        >>> G = nx.Graph()   # or DiGraph, MultiGraph, MultiDiGraph, etc
-        >>> G.add_path([0,1,2])
-        >>> G.edges()
-        [(0, 1), (1, 2)]
-        >>> G.remove_node(1)
-        >>> G.edges()
-        []
-
-        """
-        try:
-            nbrs=self.succ[n]
-            del self.node[n]
-        except KeyError: # NetworkXError if n not in self
-            raise NetworkXError("The node %s is not in the digraph."%(n,))
-        for u in nbrs:
-            del self.pred[u][n] # remove all edges n-u in digraph
-        del self.succ[n]          # remove node from succ
-        for u in self.pred[n]:
-            del self.succ[u][n] # remove all edges n-u in digraph
-        del self.pred[n]          # remove node from pred
-
-
-    def remove_nodes_from(self, nbunch):
-        """Remove multiple nodes.
-
-        Parameters
-        ----------
-        nodes : iterable container
-            A container of nodes (list, dict, set, etc.).  If a node
-            in the container is not in the graph it is silently
-            ignored.
-
-        See Also
-        --------
-        remove_node
-
-        Examples
-        --------
-        >>> G = nx.Graph()   # or DiGraph, MultiGraph, MultiDiGraph, etc
-        >>> G.add_path([0,1,2])
-        >>> e = G.nodes()
-        >>> e
-        [0, 1, 2]
-        >>> G.remove_nodes_from(e)
-        >>> G.nodes()
-        []
-
-        """
-        for n in nbunch:
-            try:
-                succs=self.succ[n]
-                del self.node[n]
-                for u in succs:
-                    del self.pred[u][n] # remove all edges n-u in digraph
-                del self.succ[n]          # now remove node
-                for u in self.pred[n]:
-                    del self.succ[u][n] # remove all edges n-u in digraph
-                del self.pred[n]          # now remove node
-            except KeyError:
-                pass # silent failure on remove
-
-
-    def add_edge(self, u, v, attr_dict=None, **attr):
-        """Add an edge between u and v.
-
-        The nodes u and v will be automatically added if they are
-        not already in the graph.
-
-        Edge attributes can be specified with keywords or by providing
-        a dictionary with key/value pairs.  See examples below.
-
-        Parameters
-        ----------
-        u,v : nodes
-            Nodes can be, for example, strings or numbers.
-            Nodes must be hashable (and not None) Python objects.
-        attr_dict : dictionary, optional (default= no attributes)
-            Dictionary of edge attributes.  Key/value pairs will
-            update existing data associated with the edge.
-        attr : keyword arguments, optional
-            Edge data (or labels or objects) can be assigned using
-            keyword arguments.
-
-        See Also
-        --------
-        add_edges_from : add a collection of edges
-
-        Notes
-        -----
-        Adding an edge that already exists updates the edge data.
-
-        Many NetworkX algorithms designed for weighted graphs use as
-        the edge weight a numerical value assigned to a keyword
-        which by default is 'weight'.
-
-        Examples
-        --------
-        The following all add the edge e=(1,2) to graph G:
-
-        >>> G = nx.Graph()   # or DiGraph, MultiGraph, MultiDiGraph, etc
-        >>> e = (1,2)
-        >>> G.add_edge(1, 2)           # explicit two-node form
-        >>> G.add_edge(*e)             # single edge as tuple of two nodes
-        >>> G.add_edges_from( [(1,2)] ) # add edges from iterable container
-
-        Associate data to edges using keywords:
-
-        >>> G.add_edge(1, 2, weight=3)
-        >>> G.add_edge(1, 3, weight=7, capacity=15, length=342.7)
-        """
-        # set up attribute dict
-        if attr_dict is None:
-            attr_dict=attr
-        else:
-            try:
-                attr_dict.update(attr)
-            except AttributeError:
-                raise NetworkXError(\
-                    "The attr_dict argument must be a dictionary.")
-        # add nodes
-        if u not in self.succ:
-            self.succ[u]={}
-            self.pred[u]={}
-            self.node[u] = {}
-        if v not in self.succ:
-            self.succ[v]={}
-            self.pred[v]={}
-            self.node[v] = {}
-        # add the edge
-        datadict=self.adj[u].get(v,{})
-        datadict.update(attr_dict)
-        self.succ[u][v]=datadict
-        self.pred[v][u]=datadict
-
-    def add_edges_from(self, ebunch, attr_dict=None, **attr):
-        """Add all the edges in ebunch.
-
-        Parameters
-        ----------
-        ebunch : container of edges
-            Each edge given in the container will be added to the
-            graph. The edges must be given as as 2-tuples (u,v) or
-            3-tuples (u,v,d) where d is a dictionary containing edge
-            data.
-        attr_dict : dictionary, optional (default= no attributes)
-            Dictionary of edge attributes.  Key/value pairs will
-            update existing data associated with each edge.
-        attr : keyword arguments, optional
-            Edge data (or labels or objects) can be assigned using
-            keyword arguments.
-
-
-        See Also
-        --------
-        add_edge : add a single edge
-        add_weighted_edges_from : convenient way to add weighted edges
-
-        Notes
-        -----
-        Adding the same edge twice has no effect but any edge data
-        will be updated when each duplicate edge is added.
-
-        Examples
-        --------
-        >>> G = nx.Graph()   # or DiGraph, MultiGraph, MultiDiGraph, etc
-        >>> G.add_edges_from([(0,1),(1,2)]) # using a list of edge tuples
-        >>> e = zip(range(0,3),range(1,4))
-        >>> G.add_edges_from(e) # Add the path graph 0-1-2-3
-
-        Associate data to edges
-
-        >>> G.add_edges_from([(1,2),(2,3)], weight=3)
-        >>> G.add_edges_from([(3,4),(1,4)], label='WN2898')
-        """
-        # set up attribute dict
-        if attr_dict is None:
-            attr_dict=attr
-        else:
-            try:
-                attr_dict.update(attr)
-            except AttributeError:
-                raise NetworkXError(\
-                    "The attr_dict argument must be a dict.")
-        # process ebunch
-        for e in ebunch:
-            ne = len(e)
-            if ne==3:
-                u,v,dd = e
-                assert hasattr(dd,"update")
-            elif ne==2:
-                u,v = e
-                dd = {}
-            else:
-                raise NetworkXError(\
-                    "Edge tuple %s must be a 2-tuple or 3-tuple."%(e,))
-            if u not in self.succ:
-                self.succ[u] = {}
-                self.pred[u] = {}
-                self.node[u] = {}
-            if v not in self.succ:
-                self.succ[v] = {}
-                self.pred[v] = {}
-                self.node[v] = {}
-            datadict=self.adj[u].get(v,{})
-            datadict.update(attr_dict)
-            datadict.update(dd)
-            self.succ[u][v] = datadict
-            self.pred[v][u] = datadict
-
-
-    def remove_edge(self, u, v):
-        """Remove the edge between u and v.
-
-        Parameters
-        ----------
-        u,v: nodes
-            Remove the edge between nodes u and v.
-
-        Raises
-        ------
-        NetworkXError
-            If there is not an edge between u and v.
-
-        See Also
-        --------
-        remove_edges_from : remove a collection of edges
-
-        Examples
-        --------
-        >>> G = nx.Graph()   # or DiGraph, etc
-        >>> G.add_path([0,1,2,3])
-        >>> G.remove_edge(0,1)
-        >>> e = (1,2)
-        >>> G.remove_edge(*e) # unpacks e from an edge tuple
-        >>> e = (2,3,{'weight':7}) # an edge with attribute data
-        >>> G.remove_edge(*e[:2]) # select first part of edge tuple
-        """
-        try:
-            del self.succ[u][v]
-            del self.pred[v][u]
-        except KeyError:
-            raise NetworkXError("The edge %s-%s not in graph."%(u,v))
-
-
-    def remove_edges_from(self, ebunch):
-        """Remove all edges specified in ebunch.
-
-        Parameters
-        ----------
-        ebunch: list or container of edge tuples
-            Each edge given in the list or container will be removed
-            from the graph. The edges can be:
-
-                - 2-tuples (u,v) edge between u and v.
-                - 3-tuples (u,v,k) where k is ignored.
-
-        See Also
-        --------
-        remove_edge : remove a single edge
-
-        Notes
-        -----
-        Will fail silently if an edge in ebunch is not in the graph.
-
-        Examples
-        --------
-        >>> G = nx.Graph()   # or DiGraph, MultiGraph, MultiDiGraph, etc
-        >>> G.add_path([0,1,2,3])
-        >>> ebunch=[(1,2),(2,3)]
-        >>> G.remove_edges_from(ebunch)
-        """
-        for e in ebunch:
-            (u,v)=e[:2]  # ignore edge data
-            if u in self.succ and v in self.succ[u]:
-                del self.succ[u][v]
-                del self.pred[v][u]
-
-
-    def has_successor(self, u, v):
-        """Return True if node u has successor v.
-
-        This is true if graph has the edge u->v.
-        """
-        return (u in self.succ and v in self.succ[u])
-
-    def has_predecessor(self, u, v):
-        """Return True if node u has predecessor v.
-
-        This is true if graph has the edge u<-v.
-        """
-        return (u in self.pred and v in self.pred[u])
-
-    def successors_iter(self,n):
-        """Return an iterator over successor nodes of n.
-
-        neighbors_iter() and successors_iter() are the same.
-        """
-        try:
-            return iter(self.succ[n])
-        except KeyError:
-            raise NetworkXError("The node %s is not in the digraph."%(n,))
-
-    def predecessors_iter(self,n):
-        """Return an iterator over predecessor nodes of n."""
-        try:
-            return iter(self.pred[n])
-        except KeyError:
-            raise NetworkXError("The node %s is not in the digraph."%(n,))
-
-    def successors(self, n):
-        """Return a list of successor nodes of n.
-
-        neighbors() and successors() are the same function.
-        """
-        return list(self.successors_iter(n))
-
-    def predecessors(self, n):
-        """Return a list of predecessor nodes of n."""
-        return list(self.predecessors_iter(n))
-
-
-    # digraph definitions
-    neighbors = successors
-    neighbors_iter = successors_iter
-
-    def edges_iter(self, nbunch=None, data=False):
-        """Return an iterator over the edges.
-
-        Edges are returned as tuples with optional data
-        in the order (node, neighbor, data).
-
-        Parameters
-        ----------
-        nbunch : iterable container, optional (default= all nodes)
-            A container of nodes.  The container will be iterated
-            through once.
-        data : bool, optional (default=False)
-            If True, return edge attribute dict in 3-tuple (u,v,data).
-
-        Returns
-        -------
-        edge_iter : iterator
-            An iterator of (u,v) or (u,v,d) tuples of edges.
-
-        See Also
-        --------
-        edges : return a list of edges
-
-        Notes
-        -----
-        Nodes in nbunch that are not in the graph will be (quietly) ignored.
-        For directed graphs this returns the out-edges.
-
-        Examples
-        --------
-        >>> G = nx.DiGraph()   # or MultiDiGraph, etc
-        >>> G.add_path([0,1,2,3])
-        >>> [e for e in G.edges_iter()]
-        [(0, 1), (1, 2), (2, 3)]
-        >>> list(G.edges_iter(data=True)) # default data is {} (empty dict)
-        [(0, 1, {}), (1, 2, {}), (2, 3, {})]
-        >>> list(G.edges_iter([0,2]))
-        [(0, 1), (2, 3)]
-        >>> list(G.edges_iter(0))
-        [(0, 1)]
-
-        """
-        if nbunch is None:
-            nodes_nbrs=self.adj.items()
-        else:
-            nodes_nbrs=((n,self.adj[n]) for n in self.nbunch_iter(nbunch))
-        if data:
-            for n,nbrs in nodes_nbrs:
-                for nbr,data in nbrs.items():
-                    yield (n,nbr,data)
-        else:
-            for n,nbrs in nodes_nbrs:
-                for nbr in nbrs:
-                    yield (n,nbr)
-
-    # alias out_edges to edges
-    out_edges_iter=edges_iter
-    out_edges=Graph.edges
-
-    def in_edges_iter(self, nbunch=None, data=False):
-        """Return an iterator over the incoming edges.
-
-        Parameters
-        ----------
-        nbunch : iterable container, optional (default= all nodes)
-            A container of nodes.  The container will be iterated
-            through once.
-        data : bool, optional (default=False)
-            If True, return edge attribute dict in 3-tuple (u,v,data).
-
-        Returns
-        -------
-        in_edge_iter : iterator
-            An iterator of (u,v) or (u,v,d) tuples of incoming edges.
-
-        See Also
-        --------
-        edges_iter : return an iterator of edges
-        """
-        if nbunch is None:
-            nodes_nbrs=self.pred.items()
-        else:
-            nodes_nbrs=((n,self.pred[n]) for n in self.nbunch_iter(nbunch))
-        if data:
-            for n,nbrs in nodes_nbrs:
-                for nbr,data in nbrs.items():
-                    yield (nbr,n,data)
-        else:
-            for n,nbrs in nodes_nbrs:
-                for nbr in nbrs:
-                    yield (nbr,n)
-
-    def in_edges(self, nbunch=None, data=False):
-        """Return a list of the incoming edges.
-
-        See Also
-        --------
-        edges : return a list of edges
-        """
-        return list(self.in_edges_iter(nbunch, data))
-
-    def degree_iter(self, nbunch=None, weight=None):
-        """Return an iterator for (node, degree).
-
-        The node degree is the number of edges adjacent to the node.
-
-        Parameters
-        ----------
-        nbunch : iterable container, optional (default=all nodes)
-            A container of nodes.  The container will be iterated
-            through once.
-
-        weight : string or None, optional (default=None)
-           The edge attribute that holds the numerical value used 
-           as a weight.  If None, then each edge has weight 1.
-           The degree is the sum of the edge weights adjacent to the node.
-
-        Returns
-        -------
-        nd_iter : an iterator
-            The iterator returns two-tuples of (node, degree).
-
-        See Also
-        --------
-        degree, in_degree, out_degree, in_degree_iter, out_degree_iter
-
-        Examples
-        --------
-        >>> G = nx.DiGraph()   # or MultiDiGraph
-        >>> G.add_path([0,1,2,3])
-        >>> list(G.degree_iter(0)) # node 0 with degree 1
-        [(0, 1)]
-        >>> list(G.degree_iter([0,1]))
-        [(0, 1), (1, 2)]
-
-        """
-        if nbunch is None:
-            nodes_nbrs=zip(iter(self.succ.items()),iter(self.pred.items()))
-        else:
-            nodes_nbrs=zip(
-                ((n,self.succ[n]) for n in self.nbunch_iter(nbunch)),
-                ((n,self.pred[n]) for n in self.nbunch_iter(nbunch)))
-
-        if weight is None:
-            for (n,succ),(n2,pred) in nodes_nbrs:
-                yield (n,len(succ)+len(pred))
-        else:
-        # edge weighted graph - degree is sum of edge weights
-            for (n,succ),(n2,pred) in nodes_nbrs:
-               yield (n,
-                      sum((succ[nbr].get(weight,1) for nbr in succ))+
-                      sum((pred[nbr].get(weight,1) for nbr in pred)))
-
-
-    def in_degree_iter(self, nbunch=None, weight=None):
-        """Return an iterator for (node, in-degree).
-
-        The node in-degree is the number of edges pointing in to the node.
-
-        Parameters
-        ----------
-        nbunch : iterable container, optional (default=all nodes)
-            A container of nodes.  The container will be iterated
-            through once.
-
-        weight : string or None, optional (default=None)
-           The edge attribute that holds the numerical value used 
-           as a weight.  If None, then each edge has weight 1.
-           The degree is the sum of the edge weights adjacent to the node.
-
-        Returns
-        -------
-        nd_iter : an iterator
-            The iterator returns two-tuples of (node, in-degree).
-
-        See Also
-        --------
-        degree, in_degree, out_degree, out_degree_iter
-
-        Examples
-        --------
-        >>> G = nx.DiGraph()
-        >>> G.add_path([0,1,2,3])
-        >>> list(G.in_degree_iter(0)) # node 0 with degree 0
-        [(0, 0)]
-        >>> list(G.in_degree_iter([0,1]))
-        [(0, 0), (1, 1)]
-
-        """
-        if nbunch is None:
-            nodes_nbrs=self.pred.items()
-        else:
-            nodes_nbrs=((n,self.pred[n]) for n in self.nbunch_iter(nbunch))
-
-        if weight is None:
-            for n,nbrs in nodes_nbrs:
-                yield (n,len(nbrs))
-        else:
-        # edge weighted graph - degree is sum of edge weights
-            for n,nbrs in nodes_nbrs:
-                yield (n, sum(data.get(weight,1) for data in nbrs.values()))
-
-
-    def out_degree_iter(self, nbunch=None, weight=None):
-        """Return an iterator for (node, out-degree).
-
-        The node out-degree is the number of edges pointing out of the node.
-
-        Parameters
-        ----------
-        nbunch : iterable container, optional (default=all nodes)
-            A container of nodes.  The container will be iterated
-            through once.
-
-        weight : string or None, optional (default=None)
-           The edge attribute that holds the numerical value used 
-           as a weight.  If None, then each edge has weight 1.
-           The degree is the sum of the edge weights adjacent to the node.
-
-        Returns
-        -------
-        nd_iter : an iterator
-            The iterator returns two-tuples of (node, out-degree).
-
-        See Also
-        --------
-        degree, in_degree, out_degree, in_degree_iter
-
-        Examples
-        --------
-        >>> G = nx.DiGraph()
-        >>> G.add_path([0,1,2,3])
-        >>> list(G.out_degree_iter(0)) # node 0 with degree 1
-        [(0, 1)]
-        >>> list(G.out_degree_iter([0,1]))
-        [(0, 1), (1, 1)]
-
-        """
-        if nbunch is None:
-            nodes_nbrs=self.succ.items()
-        else:
-            nodes_nbrs=((n,self.succ[n]) for n in self.nbunch_iter(nbunch))
-
-        if weight is None:
-            for n,nbrs in nodes_nbrs:
-                yield (n,len(nbrs))
-        else:
-        # edge weighted graph - degree is sum of edge weights
-            for n,nbrs in nodes_nbrs:
-                yield (n, sum(data.get(weight,1) for data in nbrs.values()))
-
-
-    def in_degree(self, nbunch=None, weight=None):
-        """Return the in-degree of a node or nodes.
-
-        The node in-degree is the number of edges pointing in to the node.
-
-        Parameters
-        ----------
-        nbunch : iterable container, optional (default=all nodes)
-            A container of nodes.  The container will be iterated
-            through once.
-
-        weight : string or None, optional (default=None)
-           The edge attribute that holds the numerical value used 
-           as a weight.  If None, then each edge has weight 1.
-           The degree is the sum of the edge weights adjacent to the node.
-
-        Returns
-        -------
-        nd : dictionary, or number
-            A dictionary with nodes as keys and in-degree as values or
-            a number if a single node is specified.
-
-        See Also
-        --------
-        degree, out_degree, in_degree_iter
-
-        Examples
-        --------
-        >>> G = nx.DiGraph()   # or MultiDiGraph
-        >>> G.add_path([0,1,2,3])
-        >>> G.in_degree(0)
-        0
-        >>> G.in_degree([0,1])
-        {0: 0, 1: 1}
-        >>> list(G.in_degree([0,1]).values())
-        [0, 1]
-        """
-        if nbunch in self:      # return a single node
-            return next(self.in_degree_iter(nbunch,weight))[1]
-        else:           # return a dict
-            return dict(self.in_degree_iter(nbunch,weight))
-
-    def out_degree(self, nbunch=None, weight=None):
-        """Return the out-degree of a node or nodes.
-
-        The node out-degree is the number of edges pointing out of the node.
-
-        Parameters
-        ----------
-        nbunch : iterable container, optional (default=all nodes)
-            A container of nodes.  The container will be iterated
-            through once.
-
-        weight : string or None, optional (default=None)
-           The edge attribute that holds the numerical value used 
-           as a weight.  If None, then each edge has weight 1.
-           The degree is the sum of the edge weights adjacent to the node.
-
-        Returns
-        -------
-        nd : dictionary, or number
-            A dictionary with nodes as keys and out-degree as values or
-            a number if a single node is specified.
-
-        Examples
-        --------
-        >>> G = nx.DiGraph()   # or MultiDiGraph
-        >>> G.add_path([0,1,2,3])
-        >>> G.out_degree(0)
-        1
-        >>> G.out_degree([0,1])
-        {0: 1, 1: 1}
-        >>> list(G.out_degree([0,1]).values())
-        [1, 1]
-
-
-        """
-        if nbunch in self:      # return a single node
-            return next(self.out_degree_iter(nbunch,weight))[1]
-        else:           # return a dict
-            return dict(self.out_degree_iter(nbunch,weight))
-
-    def clear(self):
-        """Remove all nodes and edges from the graph.
-
-        This also removes the name, and all graph, node, and edge attributes.
-
-        Examples
-        --------
-        >>> G = nx.Graph()   # or DiGraph, MultiGraph, MultiDiGraph, etc
-        >>> G.add_path([0,1,2,3])
-        >>> G.clear()
-        >>> G.nodes()
-        []
-        >>> G.edges()
-        []
-
-        """
-        self.succ.clear()
-        self.pred.clear()
-        self.node.clear()
-        self.graph.clear()
-
-
-    def is_multigraph(self):
-        """Return True if graph is a multigraph, False otherwise."""
-        return False
-
-
-    def is_directed(self):
-        """Return True if graph is directed, False otherwise."""
-        return True
-
-    def to_directed(self):
-        """Return a directed copy of the graph.
-
-        Returns
-        -------
-        G : DiGraph
-            A deepcopy of the graph.
-
-        Notes
-        -----
-        This returns a "deepcopy" of the edge, node, and
-        graph attributes which attempts to completely copy
-        all of the data and references.
-
-        This is in contrast to the similar D=DiGraph(G) which returns a
-        shallow copy of the data.
-
-        See the Python copy module for more information on shallow
-        and deep copies, http://docs.python.org/library/copy.html.
-
-        Examples
-        --------
-        >>> G = nx.Graph()   # or MultiGraph, etc
-        >>> G.add_path([0,1])
-        >>> H = G.to_directed()
-        >>> H.edges()
-        [(0, 1), (1, 0)]
-
-        If already directed, return a (deep) copy
-
-        >>> G = nx.DiGraph()   # or MultiDiGraph, etc
-        >>> G.add_path([0,1])
-        >>> H = G.to_directed()
-        >>> H.edges()
-        [(0, 1)]
-        """
-        return deepcopy(self)
-
-    def to_undirected(self, reciprocal=False):
-        """Return an undirected representation of the digraph.
-
-        Parameters
-        ----------
-        reciprocal : bool (optional)
-          If True only keep edges that appear in both directions 
-          in the original digraph. 
-
-        Returns
-        -------
-        G : Graph
-            An undirected graph with the same name and nodes and
-            with edge (u,v,data) if either (u,v,data) or (v,u,data)
-            is in the digraph.  If both edges exist in digraph and
-            their edge data is different, only one edge is created
-            with an arbitrary choice of which edge data to use.
-            You must check and correct for this manually if desired.
-
-        Notes
-        -----
-        If edges in both directions (u,v) and (v,u) exist in the
-        graph, attributes for the new undirected edge will be a combination of
-        the attributes of the directed edges.  The edge data is updated
-        in the (arbitrary) order that the edges are encountered.  For
-        more customized control of the edge attributes use add_edge().
-
-        This returns a "deepcopy" of the edge, node, and
-        graph attributes which attempts to completely copy
-        all of the data and references.
-
-        This is in contrast to the similar G=DiGraph(D) which returns a
-        shallow copy of the data.
-
-        See the Python copy module for more information on shallow
-        and deep copies, http://docs.python.org/library/copy.html.
-        """
-        H=Graph()
-        H.name=self.name
-        H.add_nodes_from(self)
-        if reciprocal is True:
-            H.add_edges_from( (u,v,deepcopy(d))
-                              for u,nbrs in self.adjacency_iter()
-                              for v,d in nbrs.items() 
-                              if v in self.pred[u])
-        else:
-            H.add_edges_from( (u,v,deepcopy(d))
-                              for u,nbrs in self.adjacency_iter()
-                              for v,d in nbrs.items() )
-        H.graph=deepcopy(self.graph)
-        H.node=deepcopy(self.node)
-        return H
-
-
-    def reverse(self, copy=True):
-        """Return the reverse of the graph.
-
-        The reverse is a graph with the same nodes and edges
-        but with the directions of the edges reversed.
-
-        Parameters
-        ----------
-        copy : bool optional (default=True)
-            If True, return a new DiGraph holding the reversed edges.
-            If False, reverse the reverse graph is created using
-            the original graph (this changes the original graph).
-        """
-        if copy:
-            H = self.__class__(name="Reverse of (%s)"%self.name)
-            H.add_nodes_from(self)
-            H.add_edges_from( (v,u,deepcopy(d)) for u,v,d 
-                              in self.edges(data=True) )
-            H.graph=deepcopy(self.graph)
-            H.node=deepcopy(self.node)
-        else:
-            self.pred,self.succ=self.succ,self.pred
-            self.adj=self.succ
-            H=self
-        return H
-
-
-    def subgraph(self, nbunch):
-        """Return the subgraph induced on nodes in nbunch.
-
-        The induced subgraph of the graph contains the nodes in nbunch
-        and the edges between those nodes.
-
-        Parameters
-        ----------
-        nbunch : list, iterable
-            A container of nodes which will be iterated through once.
-
-        Returns
-        -------
-        G : Graph
-            A subgraph of the graph with the same edge attributes.
-
-        Notes
-        -----
-        The graph, edge or node attributes just point to the original graph.
-        So changes to the node or edge structure will not be reflected in
-        the original graph while changes to the attributes will.
-
-        To create a subgraph with its own copy of the edge/node attributes use:
-        nx.Graph(G.subgraph(nbunch))
-
-        If edge attributes are containers, a deep copy can be obtained using:
-        G.subgraph(nbunch).copy()
-
-        For an inplace reduction of a graph to a subgraph you can remove nodes:
-        G.remove_nodes_from([ n in G if n not in set(nbunch)])
-
-        Examples
-        --------
-        >>> G = nx.Graph()   # or DiGraph, MultiGraph, MultiDiGraph, etc
-        >>> G.add_path([0,1,2,3])
-        >>> H = G.subgraph([0,1,2])
-        >>> H.edges()
-        [(0, 1), (1, 2)]
-        """
-        bunch = self.nbunch_iter(nbunch)
-        # create new graph and copy subgraph into it
-        H = self.__class__()
-        # copy node and attribute dictionaries
-        for n in bunch:
-            H.node[n]=self.node[n]
-        # namespace shortcuts for speed
-        H_succ=H.succ
-        H_pred=H.pred
-        self_succ=self.succ
-        # add nodes
-        for n in H:
-            H_succ[n]={}
-            H_pred[n]={}
-        # add edges
-        for u in H_succ:
-            Hnbrs=H_succ[u]
-            for v,datadict in self_succ[u].items():
-                if v in H_succ:
-                    # add both representations of edge: u-v and v-u
-                    Hnbrs[v]=datadict
-                    H_pred[v][u]=datadict
-        H.graph=self.graph
-        return H
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/classes/function.py b/lib/python2.7/site-packages/setoolsgui/networkx/classes/function.py
deleted file mode 100644
index 0c5e208..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/classes/function.py
+++ /dev/null
@@ -1,423 +0,0 @@
-"""Functional interface to graph methods and assorted utilities.
-"""
-#    Copyright (C) 2004-2012 by
-#    Aric Hagberg <hagberg@lanl.gov>
-#    Dan Schult <dschult@colgate.edu>
-#    Pieter Swart <swart@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-#
-import networkx as nx
-import itertools
-__author__ = """\n""".join(['Aric Hagberg (hagberg@lanl.gov)',
-                           'Pieter Swart (swart@lanl.gov)',
-                           'Dan Schult(dschult@colgate.edu)'])
-__all__ = ['nodes', 'edges', 'degree', 'degree_histogram', 'neighbors',
-           'number_of_nodes', 'number_of_edges', 'density',
-           'nodes_iter', 'edges_iter', 'is_directed','info',
-           'freeze','is_frozen','subgraph','create_empty_copy',
-           'set_node_attributes','get_node_attributes',
-           'set_edge_attributes','get_edge_attributes',
-           'all_neighbors','non_neighbors']
-
-def nodes(G):
-    """Return a copy of the graph nodes in a list."""
-    return G.nodes()
-
-def nodes_iter(G):
-    """Return an iterator over the graph nodes."""
-    return G.nodes_iter()
-
-def edges(G,nbunch=None):
-    """Return list of  edges adjacent to nodes in nbunch.
-
-    Return all edges if nbunch is unspecified or nbunch=None.
-
-    For digraphs, edges=out_edges
-    """
-    return G.edges(nbunch)
-
-def edges_iter(G,nbunch=None):
-    """Return iterator over  edges adjacent to nodes in nbunch.
-
-    Return all edges if nbunch is unspecified or nbunch=None.
-
-    For digraphs, edges=out_edges
-    """
-    return G.edges_iter(nbunch)
-
-def degree(G,nbunch=None,weight=None):
-    """Return degree of single node or of nbunch of nodes.
-    If nbunch is ommitted, then return degrees of *all* nodes.
-    """
-    return G.degree(nbunch,weight)
-
-def neighbors(G,n):
-    """Return a list of nodes connected to node n. """
-    return G.neighbors(n)
-
-def number_of_nodes(G):
-    """Return the number of nodes in the graph."""
-    return G.number_of_nodes()
-
-def number_of_edges(G):
-    """Return the number of edges in the graph. """
-    return G.number_of_edges()
-
-def density(G):
-    r"""Return the density of a graph.
-
-    The density for undirected graphs is
-
-    .. math::
-
-       d = \frac{2m}{n(n-1)},
-
-    and for directed graphs is
-
-    .. math::
-
-       d = \frac{m}{n(n-1)},
-
-    where `n` is the number of nodes and `m`  is the number of edges in `G`.
-
-    Notes
-    -----
-    The density is 0 for a graph without edges and 1 for a complete graph.
-    The density of multigraphs can be higher than 1.
-
-    Self loops are counted in the total number of edges so graphs with self
-    loops can have density higher than 1.
-    """
-    n=number_of_nodes(G)
-    m=number_of_edges(G)
-    if m==0 or n <= 1:
-        d=0.0
-    else:
-        if G.is_directed():
-            d=m/float(n*(n-1))
-        else:
-            d= m*2.0/float(n*(n-1))
-    return d
-
-def degree_histogram(G):
-    """Return a list of the frequency of each degree value.
-
-    Parameters
-    ----------
-    G : Networkx graph
-       A graph
-
-    Returns
-    -------
-    hist : list
-       A list of frequencies of degrees.
-       The degree values are the index in the list.
-
-    Notes
-    -----
-    Note: the bins are width one, hence len(list) can be large
-    (Order(number_of_edges))
-    """
-    degseq=list(G.degree().values())
-    dmax=max(degseq)+1
-    freq= [ 0 for d in range(dmax) ]
-    for d in degseq:
-        freq[d] += 1
-    return freq
-
-def is_directed(G):
-    """ Return True if graph is directed."""
-    return G.is_directed()
-
-
-def freeze(G):
-    """Modify graph to prevent further change by adding or removing
-    nodes or edges.
-
-    Node and edge data can still be modified.
-
-    Parameters
-    -----------
-    G : graph
-      A NetworkX graph
-
-    Examples
-    --------
-    >>> G=nx.Graph()
-    >>> G.add_path([0,1,2,3])
-    >>> G=nx.freeze(G)
-    >>> try:
-    ...    G.add_edge(4,5)
-    ... except nx.NetworkXError as e:
-    ...    print(str(e))
-    Frozen graph can't be modified
-
-    Notes
-    -----
-    To "unfreeze" a graph you must make a copy by creating a new graph object:
-
-    >>> graph = nx.path_graph(4)
-    >>> frozen_graph = nx.freeze(graph)
-    >>> unfrozen_graph = nx.Graph(frozen_graph)
-    >>> nx.is_frozen(unfrozen_graph)
-    False
-
-    See Also
-    --------
-    is_frozen
-    """
-    def frozen(*args):
-        raise nx.NetworkXError("Frozen graph can't be modified")
-    G.add_node=frozen
-    G.add_nodes_from=frozen
-    G.remove_node=frozen
-    G.remove_nodes_from=frozen
-    G.add_edge=frozen
-    G.add_edges_from=frozen
-    G.remove_edge=frozen
-    G.remove_edges_from=frozen
-    G.clear=frozen
-    G.frozen=True
-    return G
-
-def is_frozen(G):
-    """Return True if graph is frozen.
-
-    Parameters
-    -----------
-    G : graph
-      A NetworkX graph
-
-    See Also
-    --------
-    freeze
-    """
-    try:
-        return G.frozen
-    except AttributeError:
-        return False
-
-def subgraph(G, nbunch):
-    """Return the subgraph induced on nodes in nbunch.
-
-    Parameters
-    ----------
-    G : graph
-       A NetworkX graph
-
-    nbunch : list, iterable
-       A container of nodes that will be iterated through once (thus
-       it should be an iterator or be iterable).  Each element of the
-       container should be a valid node type: any hashable type except
-       None.  If nbunch is None, return all edges data in the graph.
-       Nodes in nbunch that are not in the graph will be (quietly)
-       ignored.
-
-    Notes
-    -----
-    subgraph(G) calls G.subgraph()
-    """
-    return G.subgraph(nbunch)
-
-def create_empty_copy(G,with_nodes=True):
-    """Return a copy of the graph G with all of the edges removed.
-
-    Parameters
-    ----------
-    G : graph
-       A NetworkX graph
-
-    with_nodes :  bool (default=True)
-       Include nodes.
-
-    Notes
-    -----
-    Graph, node, and edge data is not propagated to the new graph.
-    """
-    H=G.__class__()
-    if with_nodes:
-        H.add_nodes_from(G)
-    return H
-
-
-def info(G, n=None):
-    """Print short summary of information for the graph G or the node n.
-
-    Parameters
-    ----------
-    G : Networkx graph
-       A graph
-    n : node (any hashable)
-       A node in the graph G
-    """
-    info='' # append this all to a string
-    if n is None:
-        info+="Name: %s\n"%G.name
-        type_name = [type(G).__name__]
-        info+="Type: %s\n"%",".join(type_name)
-        info+="Number of nodes: %d\n"%G.number_of_nodes()
-        info+="Number of edges: %d\n"%G.number_of_edges()
-        nnodes=G.number_of_nodes()
-        if len(G) > 0:
-            if G.is_directed():
-                info+="Average in degree: %8.4f\n"%\
-                    (sum(G.in_degree().values())/float(nnodes))
-                info+="Average out degree: %8.4f"%\
-                    (sum(G.out_degree().values())/float(nnodes))
-            else:
-                s=sum(G.degree().values())
-                info+="Average degree: %8.4f"%\
-                    (float(s)/float(nnodes))
-
-    else:
-        if n not in G:
-            raise nx.NetworkXError("node %s not in graph"%(n,))
-        info+="Node % s has the following properties:\n"%n
-        info+="Degree: %d\n"%G.degree(n)
-        info+="Neighbors: "
-        info+=' '.join(str(nbr) for nbr in G.neighbors(n))
-    return info
-
-def set_node_attributes(G,name,attributes):
-    """Set node attributes from dictionary of nodes and values
-
-    Parameters
-    ----------
-    G : NetworkX Graph
-
-    name : string
-       Attribute name
-
-    attributes: dict
-       Dictionary of attributes keyed by node.
-
-    Examples
-    --------
-    >>> G=nx.path_graph(3)
-    >>> bb=nx.betweenness_centrality(G)
-    >>> nx.set_node_attributes(G,'betweenness',bb)
-    >>> G.node[1]['betweenness']
-    1.0
-    """
-    for node,value in attributes.items():
-        G.node[node][name]=value
-
-def get_node_attributes(G,name):
-    """Get node attributes from graph
-
-    Parameters
-    ----------
-    G : NetworkX Graph
-
-    name : string
-       Attribute name
-
-    Returns
-    -------
-    Dictionary of attributes keyed by node.
-
-    Examples
-    --------
-    >>> G=nx.Graph()
-    >>> G.add_nodes_from([1,2,3],color='red')
-    >>> color=nx.get_node_attributes(G,'color')
-    >>> color[1]
-    'red'
-    """
-    return dict( (n,d[name]) for n,d in G.node.items() if name in d)
-
-
-def set_edge_attributes(G,name,attributes):
-    """Set edge attributes from dictionary of edge tuples and values
-
-    Parameters
-    ----------
-    G : NetworkX Graph
-
-    name : string
-       Attribute name
-
-    attributes: dict
-       Dictionary of attributes keyed by edge (tuple).
-
-    Examples
-    --------
-    >>> G=nx.path_graph(3)
-    >>> bb=nx.edge_betweenness_centrality(G, normalized=False)
-    >>> nx.set_edge_attributes(G,'betweenness',bb)
-    >>> G[1][2]['betweenness']
-    2.0
-    """
-    for (u,v),value in attributes.items():
-        G[u][v][name]=value
-
-def get_edge_attributes(G,name):
-    """Get edge attributes from graph
-
-    Parameters
-    ----------
-    G : NetworkX Graph
-
-    name : string
-       Attribute name
-
-    Returns
-    -------
-    Dictionary of attributes keyed by node.
-
-    Examples
-    --------
-    >>> G=nx.Graph()
-    >>> G.add_path([1,2,3],color='red')
-    >>> color=nx.get_edge_attributes(G,'color')
-    >>> color[(1,2)]
-    'red'
-    """
-    return dict( ((u,v),d[name]) for u,v,d in G.edges(data=True) if name in d)
-
-
-def all_neighbors(graph, node):
-    """ Returns all of the neighbors of a node in the graph.
-
-    If the graph is directed returns predecessors as well as successors.
-
-    Parameters
-    ----------
-    graph : NetworkX graph
-        Graph to find neighbors.
-
-    node : node
-        The node whose neighbors will be returned.
-
-    Returns
-    -------
-    neighbors : iterator
-        Iterator of neighbors
-    """
-    if graph.is_directed():
-        values = itertools.chain.from_iterable([graph.predecessors_iter(node),
-                                                graph.successors_iter(node)])
-    else:
-        values = graph.neighbors_iter(node)
-
-    return values
-
-def non_neighbors(graph, node):
-    """Returns the non-neighbors of the node in the graph.
-
-    Parameters
-    ----------
-    graph : NetworkX graph
-        Graph to find neighbors.
-
-    node : node
-        The node whose neighbors will be returned.
-
-    Returns
-    -------
-    non_neighbors : iterator
-        Iterator of nodes in the graph that are not neighbors of the node.
-    """
-    nbors = set(neighbors(graph, node)) | set([node])
-    return (nnode for nnode in graph if nnode not in nbors)
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/classes/graph.py b/lib/python2.7/site-packages/setoolsgui/networkx/classes/graph.py
deleted file mode 100644
index 9ef7c23..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/classes/graph.py
+++ /dev/null
@@ -1,1816 +0,0 @@
-"""Base class for undirected graphs.
-
-The Graph class allows any hashable object as a node
-and can associate key/value attribute pairs with each undirected edge.
-
-Self-loops are allowed but multiple edges are not (see MultiGraph).
-
-For directed graphs see DiGraph and MultiDiGraph.
-"""
-#    Copyright (C) 2004-2011 by
-#    Aric Hagberg <hagberg@lanl.gov>
-#    Dan Schult <dschult@colgate.edu>
-#    Pieter Swart <swart@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-from copy import deepcopy
-import networkx as nx
-from networkx.exception import NetworkXError
-import networkx.convert as convert
-
-__author__ = """\n""".join(['Aric Hagberg (hagberg@lanl.gov)',
-                            'Pieter Swart (swart@lanl.gov)',
-                            'Dan Schult(dschult@colgate.edu)'])
-
-class Graph(object):
-    """
-    Base class for undirected graphs.
-
-    A Graph stores nodes and edges with optional data, or attributes.
-
-    Graphs hold undirected edges.  Self loops are allowed but multiple
-    (parallel) edges are not.
-
-    Nodes can be arbitrary (hashable) Python objects with optional
-    key/value attributes.
-
-    Edges are represented as links between nodes with optional
-    key/value attributes.
-
-    Parameters
-    ----------
-    data : input graph
-        Data to initialize graph.  If data=None (default) an empty
-        graph is created.  The data can be an edge list, or any
-        NetworkX graph object.  If the corresponding optional Python
-        packages are installed the data can also be a NumPy matrix
-        or 2d ndarray, a SciPy sparse matrix, or a PyGraphviz graph.
-    attr : keyword arguments, optional (default= no attributes)
-        Attributes to add to graph as key=value pairs.
-
-    See Also
-    --------
-    DiGraph
-    MultiGraph
-    MultiDiGraph
-
-    Examples
-    --------
-    Create an empty graph structure (a "null graph") with no nodes and
-    no edges.
-
-    >>> G = nx.Graph()
-
-    G can be grown in several ways.
-
-    **Nodes:**
-
-    Add one node at a time:
-
-    >>> G.add_node(1)
-
-    Add the nodes from any container (a list, dict, set or
-    even the lines from a file or the nodes from another graph).
-
-    >>> G.add_nodes_from([2,3])
-    >>> G.add_nodes_from(range(100,110))
-    >>> H=nx.Graph()
-    >>> H.add_path([0,1,2,3,4,5,6,7,8,9])
-    >>> G.add_nodes_from(H)
-
-    In addition to strings and integers any hashable Python object
-    (except None) can represent a node, e.g. a customized node object,
-    or even another Graph.
-
-    >>> G.add_node(H)
-
-    **Edges:**
-
-    G can also be grown by adding edges.
-
-    Add one edge,
-
-    >>> G.add_edge(1, 2)
-
-    a list of edges,
-
-    >>> G.add_edges_from([(1,2),(1,3)])
-
-    or a collection of edges,
-
-    >>> G.add_edges_from(H.edges())
-
-    If some edges connect nodes not yet in the graph, the nodes
-    are added automatically.  There are no errors when adding
-    nodes or edges that already exist.
-
-    **Attributes:**
-
-    Each graph, node, and edge can hold key/value attribute pairs
-    in an associated attribute dictionary (the keys must be hashable).
-    By default these are empty, but can be added or changed using
-    add_edge, add_node or direct manipulation of the attribute
-    dictionaries named graph, node and edge respectively.
-
-    >>> G = nx.Graph(day="Friday")
-    >>> G.graph
-    {'day': 'Friday'}
-
-    Add node attributes using add_node(), add_nodes_from() or G.node
-
-    >>> G.add_node(1, time='5pm')
-    >>> G.add_nodes_from([3], time='2pm')
-    >>> G.node[1]
-    {'time': '5pm'}
-    >>> G.node[1]['room'] = 714
-    >>> del G.node[1]['room'] # remove attribute
-    >>> G.nodes(data=True)
-    [(1, {'time': '5pm'}), (3, {'time': '2pm'})]
-
-    Warning: adding a node to G.node does not add it to the graph.
-
-    Add edge attributes using add_edge(), add_edges_from(), subscript
-    notation, or G.edge.
-
-    >>> G.add_edge(1, 2, weight=4.7 )
-    >>> G.add_edges_from([(3,4),(4,5)], color='red')
-    >>> G.add_edges_from([(1,2,{'color':'blue'}), (2,3,{'weight':8})])
-    >>> G[1][2]['weight'] = 4.7
-    >>> G.edge[1][2]['weight'] = 4
-
-    **Shortcuts:**
-
-    Many common graph features allow python syntax to speed reporting.
-
-    >>> 1 in G     # check if node in graph
-    True
-    >>> [n for n in G if n<3]   # iterate through nodes
-    [1, 2]
-    >>> len(G)  # number of nodes in graph
-    5
-
-    The fastest way to traverse all edges of a graph is via
-    adjacency_iter(), but the edges() method is often more convenient.
-
-    >>> for n,nbrsdict in G.adjacency_iter():
-    ...     for nbr,eattr in nbrsdict.items():
-    ...        if 'weight' in eattr:
-    ...            (n,nbr,eattr['weight'])
-    (1, 2, 4)
-    (2, 1, 4)
-    (2, 3, 8)
-    (3, 2, 8)
-    >>> [ (u,v,edata['weight']) for u,v,edata in G.edges(data=True) if 'weight' in edata ]
-    [(1, 2, 4), (2, 3, 8)]
-
-    **Reporting:**
-
-    Simple graph information is obtained using methods.
-    Iterator versions of many reporting methods exist for efficiency.
-    Methods exist for reporting nodes(), edges(), neighbors() and degree()
-    as well as the number of nodes and edges.
-
-    For details on these and other miscellaneous methods, see below.
-    """
-    def __init__(self, data=None, **attr):
-        """Initialize a graph with edges, name, graph attributes.
-
-        Parameters
-        ----------
-        data : input graph
-            Data to initialize graph.  If data=None (default) an empty
-            graph is created.  The data can be an edge list, or any
-            NetworkX graph object.  If the corresponding optional Python
-            packages are installed the data can also be a NumPy matrix
-            or 2d ndarray, a SciPy sparse matrix, or a PyGraphviz graph.
-        name : string, optional (default='')
-            An optional name for the graph.
-        attr : keyword arguments, optional (default= no attributes)
-            Attributes to add to graph as key=value pairs.
-
-        See Also
-        --------
-        convert
-
-        Examples
-        --------
-        >>> G = nx.Graph()   # or DiGraph, MultiGraph, MultiDiGraph, etc
-        >>> G = nx.Graph(name='my graph')
-        >>> e = [(1,2),(2,3),(3,4)] # list of edges
-        >>> G = nx.Graph(e)
-
-        Arbitrary graph attribute pairs (key=value) may be assigned
-
-        >>> G=nx.Graph(e, day="Friday")
-        >>> G.graph
-        {'day': 'Friday'}
-
-        """
-        self.graph = {}   # dictionary for graph attributes
-        self.node = {}    # empty node dict (created before convert)
-        self.adj = {}     # empty adjacency dict
-        # attempt to load graph with data
-        if data is not None:
-            convert.to_networkx_graph(data,create_using=self)
-        # load graph attributes (must be after convert)
-        self.graph.update(attr)
-        self.edge = self.adj
-
-    @property
-    def name(self):
-        return self.graph.get('name','')
-    @name.setter
-    def name(self, s):
-        self.graph['name']=s
-
-    def __str__(self):
-        """Return the graph name.
-
-        Returns
-        -------
-        name : string
-            The name of the graph.
-
-        Examples
-        --------
-        >>> G = nx.Graph(name='foo')
-        >>> str(G)
-        'foo'
-        """
-        return self.name
-
-    def __iter__(self):
-        """Iterate over the nodes. Use the expression 'for n in G'.
-
-        Returns
-        -------
-        niter : iterator
-            An iterator over all nodes in the graph.
-
-        Examples
-        --------
-        >>> G = nx.Graph()   # or DiGraph, MultiGraph, MultiDiGraph, etc
-        >>> G.add_path([0,1,2,3])
-        """
-        return iter(self.node)
-
-    def __contains__(self,n):
-        """Return True if n is a node, False otherwise. Use the expression
-        'n in G'.
-
-        Examples
-        --------
-        >>> G = nx.Graph()   # or DiGraph, MultiGraph, MultiDiGraph, etc
-        >>> G.add_path([0,1,2,3])
-        >>> 1 in G
-        True
-        """
-        try:
-            return n in self.node
-        except TypeError:
-            return False
-
-    def __len__(self):
-        """Return the number of nodes. Use the expression 'len(G)'.
-
-        Returns
-        -------
-        nnodes : int
-            The number of nodes in the graph.
-
-        Examples
-        --------
-        >>> G = nx.Graph()   # or DiGraph, MultiGraph, MultiDiGraph, etc
-        >>> G.add_path([0,1,2,3])
-        >>> len(G)
-        4
-
-        """
-        return len(self.node)
-
-    def __getitem__(self, n):
-        """Return a dict of neighbors of node n.  Use the expression 'G[n]'.
-
-        Parameters
-        ----------
-        n : node
-           A node in the graph.
-
-        Returns
-        -------
-        adj_dict : dictionary
-           The adjacency dictionary for nodes connected to n.
-
-        Notes
-        -----
-        G[n] is similar to G.neighbors(n) but the internal data dictionary
-        is returned instead of a list.
-
-        Assigning G[n] will corrupt the internal graph data structure.
-        Use G[n] for reading data only.
-
-        Examples
-        --------
-        >>> G = nx.Graph()   # or DiGraph, MultiGraph, MultiDiGraph, etc
-        >>> G.add_path([0,1,2,3])
-        >>> G[0]
-        {1: {}}
-        """
-        return self.adj[n]
-
-
-    def add_node(self, n, attr_dict=None, **attr):
-        """Add a single node n and update node attributes.
-
-        Parameters
-        ----------
-        n : node
-            A node can be any hashable Python object except None.
-        attr_dict : dictionary, optional (default= no attributes)
-            Dictionary of node attributes.  Key/value pairs will
-            update existing data associated with the node.
-        attr : keyword arguments, optional
-            Set or change attributes using key=value.
-
-        See Also
-        --------
-        add_nodes_from
-
-        Examples
-        --------
-        >>> G = nx.Graph()   # or DiGraph, MultiGraph, MultiDiGraph, etc
-        >>> G.add_node(1)
-        >>> G.add_node('Hello')
-        >>> K3 = nx.Graph([(0,1),(1,2),(2,0)])
-        >>> G.add_node(K3)
-        >>> G.number_of_nodes()
-        3
-
-        Use keywords set/change node attributes:
-
-        >>> G.add_node(1,size=10)
-        >>> G.add_node(3,weight=0.4,UTM=('13S',382871,3972649))
-
-        Notes
-        -----
-        A hashable object is one that can be used as a key in a Python
-        dictionary. This includes strings, numbers, tuples of strings
-        and numbers, etc.
-
-        On many platforms hashable items also include mutables such as
-        NetworkX Graphs, though one should be careful that the hash
-        doesn't change on mutables.
-        """
-        # set up attribute dict
-        if attr_dict is None:
-            attr_dict=attr
-        else:
-            try:
-                attr_dict.update(attr)
-            except AttributeError:
-                raise NetworkXError(\
-                    "The attr_dict argument must be a dictionary.")
-        if n not in self.node:
-            self.adj[n] = {}
-            self.node[n] = attr_dict
-        else: # update attr even if node already exists
-            self.node[n].update(attr_dict)
-
-
-    def add_nodes_from(self, nodes, **attr):
-        """Add multiple nodes.
-
-        Parameters
-        ----------
-        nodes : iterable container
-            A container of nodes (list, dict, set, etc.).
-            OR
-            A container of (node, attribute dict) tuples.
-            Node attributes are updated using the attribute dict.
-        attr : keyword arguments, optional (default= no attributes)
-            Update attributes for all nodes in nodes.
-            Node attributes specified in nodes as a tuple
-            take precedence over attributes specified generally.
-
-        See Also
-        --------
-        add_node
-
-        Examples
-        --------
-        >>> G = nx.Graph()   # or DiGraph, MultiGraph, MultiDiGraph, etc
-        >>> G.add_nodes_from('Hello')
-        >>> K3 = nx.Graph([(0,1),(1,2),(2,0)])
-        >>> G.add_nodes_from(K3)
-        >>> sorted(G.nodes(),key=str)
-        [0, 1, 2, 'H', 'e', 'l', 'o']
-
-        Use keywords to update specific node attributes for every node.
-
-        >>> G.add_nodes_from([1,2], size=10)
-        >>> G.add_nodes_from([3,4], weight=0.4)
-
-        Use (node, attrdict) tuples to update attributes for specific
-        nodes.
-
-        >>> G.add_nodes_from([(1,dict(size=11)), (2,{'color':'blue'})])
-        >>> G.node[1]['size']
-        11
-        >>> H = nx.Graph()
-        >>> H.add_nodes_from(G.nodes(data=True))
-        >>> H.node[1]['size']
-        11
-
-        """
-        for n in nodes:
-            try:
-                newnode=n not in self.node
-            except TypeError:
-                nn,ndict = n
-                if nn not in self.node:
-                    self.adj[nn] = {}
-                    newdict = attr.copy()
-                    newdict.update(ndict)
-                    self.node[nn] = newdict
-                else:
-                    olddict = self.node[nn]
-                    olddict.update(attr)
-                    olddict.update(ndict)
-                continue
-            if newnode:
-                self.adj[n] = {}
-                self.node[n] = attr.copy()
-            else:
-                self.node[n].update(attr)
-
-    def remove_node(self,n):
-        """Remove node n.
-
-        Removes the node n and all adjacent edges.
-        Attempting to remove a non-existent node will raise an exception.
-
-        Parameters
-        ----------
-        n : node
-           A node in the graph
-
-        Raises
-        -------
-        NetworkXError
-           If n is not in the graph.
-
-        See Also
-        --------
-        remove_nodes_from
-
-        Examples
-        --------
-        >>> G = nx.Graph()   # or DiGraph, MultiGraph, MultiDiGraph, etc
-        >>> G.add_path([0,1,2])
-        >>> G.edges()
-        [(0, 1), (1, 2)]
-        >>> G.remove_node(1)
-        >>> G.edges()
-        []
-
-        """
-        adj = self.adj
-        try:
-            nbrs = list(adj[n].keys()) # keys handles self-loops (allow mutation later)
-            del self.node[n]
-        except KeyError: # NetworkXError if n not in self
-            raise NetworkXError("The node %s is not in the graph."%(n,))
-        for u in nbrs:
-            del adj[u][n]   # remove all edges n-u in graph
-        del adj[n]          # now remove node
-
-
-    def remove_nodes_from(self, nodes):
-        """Remove multiple nodes.
-
-        Parameters
-        ----------
-        nodes : iterable container
-            A container of nodes (list, dict, set, etc.).  If a node
-            in the container is not in the graph it is silently
-            ignored.
-
-        See Also
-        --------
-        remove_node
-
-        Examples
-        --------
-        >>> G = nx.Graph()   # or DiGraph, MultiGraph, MultiDiGraph, etc
-        >>> G.add_path([0,1,2])
-        >>> e = G.nodes()
-        >>> e
-        [0, 1, 2]
-        >>> G.remove_nodes_from(e)
-        >>> G.nodes()
-        []
-
-        """
-        adj = self.adj
-        for n in nodes:
-            try:
-                del self.node[n]
-                for u in list(adj[n].keys()):   # keys() handles self-loops 
-                    del adj[u][n]         #(allows mutation of dict in loop)
-                del adj[n]
-            except KeyError:
-                pass
-
-
-    def nodes_iter(self, data=False):
-        """Return an iterator over the nodes.
-
-        Parameters
-        ----------
-        data : boolean, optional (default=False)
-               If False the iterator returns nodes.  If True
-               return a two-tuple of node and node data dictionary
-
-        Returns
-        -------
-        niter : iterator
-            An iterator over nodes.  If data=True the iterator gives
-            two-tuples containing (node, node data, dictionary)
-
-        Notes
-        -----
-        If the node data is not required it is simpler and equivalent
-        to use the expression 'for n in G'.
-
-        >>> G = nx.Graph()   # or DiGraph, MultiGraph, MultiDiGraph, etc
-        >>> G.add_path([0,1,2])
-
-        Examples
-        --------
-        >>> G = nx.Graph()   # or DiGraph, MultiGraph, MultiDiGraph, etc
-        >>> G.add_path([0,1,2])
-
-        >>> [d for n,d in G.nodes_iter(data=True)]
-        [{}, {}, {}]
-        """
-        if data:
-            return iter(self.node.items())
-        return iter(self.node)
-
-    def nodes(self, data=False):
-        """Return a list of the nodes in the graph.
-
-        Parameters
-        ----------
-        data : boolean, optional (default=False)
-               If False return a list of nodes.  If True return a
-               two-tuple of node and node data dictionary
-
-        Returns
-        -------
-        nlist : list
-            A list of nodes.  If data=True a list of two-tuples containing
-            (node, node data dictionary).
-
-        Examples
-        --------
-        >>> G = nx.Graph()   # or DiGraph, MultiGraph, MultiDiGraph, etc
-        >>> G.add_path([0,1,2])
-        >>> G.nodes()
-        [0, 1, 2]
-        >>> G.add_node(1, time='5pm')
-        >>> G.nodes(data=True)
-        [(0, {}), (1, {'time': '5pm'}), (2, {})]
-        """
-        return list(self.nodes_iter(data=data))
-
-    def number_of_nodes(self):
-        """Return the number of nodes in the graph.
-
-        Returns
-        -------
-        nnodes : int
-            The number of nodes in the graph.
-
-        See Also
-        --------
-        order, __len__  which are identical
-
-        Examples
-        --------
-        >>> G = nx.Graph()   # or DiGraph, MultiGraph, MultiDiGraph, etc
-        >>> G.add_path([0,1,2])
-        >>> len(G)
-        3
-        """
-        return len(self.node)
-
-    def order(self):
-        """Return the number of nodes in the graph.
-
-        Returns
-        -------
-        nnodes : int
-            The number of nodes in the graph.
-
-        See Also
-        --------
-        number_of_nodes, __len__  which are identical
-
-        """
-        return len(self.node)
-
-    def has_node(self, n):
-        """Return True if the graph contains the node n.
-
-        Parameters
-        ----------
-        n : node
-
-        Examples
-        --------
-        >>> G = nx.Graph()   # or DiGraph, MultiGraph, MultiDiGraph, etc
-        >>> G.add_path([0,1,2])
-        >>> G.has_node(0)
-        True
-
-        It is more readable and simpler to use
-
-        >>> 0 in G
-        True
-
-        """
-        try:
-            return n in self.node
-        except TypeError:
-            return False
-
-    def add_edge(self, u, v, attr_dict=None, **attr):
-        """Add an edge between u and v.
-
-        The nodes u and v will be automatically added if they are
-        not already in the graph.
-
-        Edge attributes can be specified with keywords or by providing
-        a dictionary with key/value pairs.  See examples below.
-
-        Parameters
-        ----------
-        u,v : nodes
-            Nodes can be, for example, strings or numbers.
-            Nodes must be hashable (and not None) Python objects.
-        attr_dict : dictionary, optional (default= no attributes)
-            Dictionary of edge attributes.  Key/value pairs will
-            update existing data associated with the edge.
-        attr : keyword arguments, optional
-            Edge data (or labels or objects) can be assigned using
-            keyword arguments.
-
-        See Also
-        --------
-        add_edges_from : add a collection of edges
-
-        Notes
-        -----
-        Adding an edge that already exists updates the edge data.
-
-        Many NetworkX algorithms designed for weighted graphs use as
-        the edge weight a numerical value assigned to a keyword
-        which by default is 'weight'.
-
-        Examples
-        --------
-        The following all add the edge e=(1,2) to graph G:
-
-        >>> G = nx.Graph()   # or DiGraph, MultiGraph, MultiDiGraph, etc
-        >>> e = (1,2)
-        >>> G.add_edge(1, 2)           # explicit two-node form
-        >>> G.add_edge(*e)             # single edge as tuple of two nodes
-        >>> G.add_edges_from( [(1,2)] ) # add edges from iterable container
-
-        Associate data to edges using keywords:
-
-        >>> G.add_edge(1, 2, weight=3)
-        >>> G.add_edge(1, 3, weight=7, capacity=15, length=342.7)
-        """
-        # set up attribute dictionary
-        if attr_dict is None:
-            attr_dict=attr
-        else:
-            try:
-                attr_dict.update(attr)
-            except AttributeError:
-                raise NetworkXError(\
-                    "The attr_dict argument must be a dictionary.")
-        # add nodes
-        if u not in self.node:
-            self.adj[u] = {}
-            self.node[u] = {}
-        if v not in self.node:
-            self.adj[v] = {}
-            self.node[v] = {}
-        # add the edge
-        datadict=self.adj[u].get(v,{})
-        datadict.update(attr_dict)
-        self.adj[u][v] = datadict
-        self.adj[v][u] = datadict
-
-
-    def add_edges_from(self, ebunch, attr_dict=None, **attr):
-        """Add all the edges in ebunch.
-
-        Parameters
-        ----------
-        ebunch : container of edges
-            Each edge given in the container will be added to the
-            graph. The edges must be given as as 2-tuples (u,v) or
-            3-tuples (u,v,d) where d is a dictionary containing edge
-            data.
-        attr_dict : dictionary, optional (default= no attributes)
-            Dictionary of edge attributes.  Key/value pairs will
-            update existing data associated with each edge.
-        attr : keyword arguments, optional
-            Edge data (or labels or objects) can be assigned using
-            keyword arguments.
-
-
-        See Also
-        --------
-        add_edge : add a single edge
-        add_weighted_edges_from : convenient way to add weighted edges
-
-        Notes
-        -----
-        Adding the same edge twice has no effect but any edge data
-        will be updated when each duplicate edge is added.
-
-        Examples
-        --------
-        >>> G = nx.Graph()   # or DiGraph, MultiGraph, MultiDiGraph, etc
-        >>> G.add_edges_from([(0,1),(1,2)]) # using a list of edge tuples
-        >>> e = zip(range(0,3),range(1,4))
-        >>> G.add_edges_from(e) # Add the path graph 0-1-2-3
-
-        Associate data to edges
-
-        >>> G.add_edges_from([(1,2),(2,3)], weight=3)
-        >>> G.add_edges_from([(3,4),(1,4)], label='WN2898')
-        """
-        # set up attribute dict
-        if attr_dict is None:
-            attr_dict=attr
-        else:
-            try:
-                attr_dict.update(attr)
-            except AttributeError:
-                raise NetworkXError(\
-                    "The attr_dict argument must be a dictionary.")
-        # process ebunch
-        for e in ebunch:
-            ne=len(e)
-            if ne==3:
-                u,v,dd = e
-            elif ne==2:
-                u,v = e
-                dd = {}
-            else:
-                raise NetworkXError(\
-                    "Edge tuple %s must be a 2-tuple or 3-tuple."%(e,))
-            if u not in self.node:
-                self.adj[u] = {}
-                self.node[u] = {}
-            if v not in self.node:
-                self.adj[v] = {}
-                self.node[v] = {}
-            datadict=self.adj[u].get(v,{})
-            datadict.update(attr_dict)
-            datadict.update(dd)
-            self.adj[u][v] = datadict
-            self.adj[v][u] = datadict
-
-
-    def add_weighted_edges_from(self, ebunch, weight='weight', **attr):
-        """Add all the edges in ebunch as weighted edges with specified
-        weights.
-
-        Parameters
-        ----------
-        ebunch : container of edges
-            Each edge given in the list or container will be added
-            to the graph. The edges must be given as 3-tuples (u,v,w)
-            where w is a number.
-        weight : string, optional (default= 'weight')
-            The attribute name for the edge weights to be added.
-        attr : keyword arguments, optional (default= no attributes)
-            Edge attributes to add/update for all edges.
-
-        See Also
-        --------
-        add_edge : add a single edge
-        add_edges_from : add multiple edges
-
-        Notes
-        -----
-        Adding the same edge twice for Graph/DiGraph simply updates 
-        the edge data.  For MultiGraph/MultiDiGraph, duplicate edges 
-        are stored.
-
-        Examples
-        --------
-        >>> G = nx.Graph()   # or DiGraph, MultiGraph, MultiDiGraph, etc
-        >>> G.add_weighted_edges_from([(0,1,3.0),(1,2,7.5)])
-        """
-        self.add_edges_from(((u,v,{weight:d}) for u,v,d in ebunch),**attr)
-
-    def remove_edge(self, u, v):
-        """Remove the edge between u and v.
-
-        Parameters
-        ----------
-        u,v: nodes
-            Remove the edge between nodes u and v.
-
-        Raises
-        ------
-        NetworkXError
-            If there is not an edge between u and v.
-
-        See Also
-        --------
-        remove_edges_from : remove a collection of edges
-
-        Examples
-        --------
-        >>> G = nx.Graph()   # or DiGraph, etc
-        >>> G.add_path([0,1,2,3])
-        >>> G.remove_edge(0,1)
-        >>> e = (1,2)
-        >>> G.remove_edge(*e) # unpacks e from an edge tuple
-        >>> e = (2,3,{'weight':7}) # an edge with attribute data
-        >>> G.remove_edge(*e[:2]) # select first part of edge tuple
-        """
-        try:
-            del self.adj[u][v]
-            if u != v:  # self-loop needs only one entry removed
-                del self.adj[v][u]
-        except KeyError:
-            raise NetworkXError("The edge %s-%s is not in the graph"%(u,v))
-
-
-
-    def remove_edges_from(self, ebunch):
-        """Remove all edges specified in ebunch.
-
-        Parameters
-        ----------
-        ebunch: list or container of edge tuples
-            Each edge given in the list or container will be removed
-            from the graph. The edges can be:
-
-                - 2-tuples (u,v) edge between u and v.
-                - 3-tuples (u,v,k) where k is ignored.
-
-        See Also
-        --------
-        remove_edge : remove a single edge
-
-        Notes
-        -----
-        Will fail silently if an edge in ebunch is not in the graph.
-
-        Examples
-        --------
-        >>> G = nx.Graph()   # or DiGraph, MultiGraph, MultiDiGraph, etc
-        >>> G.add_path([0,1,2,3])
-        >>> ebunch=[(1,2),(2,3)]
-        >>> G.remove_edges_from(ebunch)
-        """
-        adj=self.adj
-        for e in ebunch:
-            u,v = e[:2]  # ignore edge data if present
-            if u in adj and v in adj[u]:
-                del adj[u][v]
-                if u != v:  # self loop needs only one entry removed
-                    del adj[v][u]
-
-
-    def has_edge(self, u, v):
-        """Return True if the edge (u,v) is in the graph.
-
-        Parameters
-        ----------
-        u,v : nodes
-            Nodes can be, for example, strings or numbers.
-            Nodes must be hashable (and not None) Python objects.
-
-        Returns
-        -------
-        edge_ind : bool
-            True if edge is in the graph, False otherwise.
-
-        Examples
-        --------
-        Can be called either using two nodes u,v or edge tuple (u,v)
-
-        >>> G = nx.Graph()   # or DiGraph, MultiGraph, MultiDiGraph, etc
-        >>> G.add_path([0,1,2,3])
-        >>> G.has_edge(0,1)  # using two nodes
-        True
-        >>> e = (0,1)
-        >>> G.has_edge(*e)  #  e is a 2-tuple (u,v)
-        True
-        >>> e = (0,1,{'weight':7})
-        >>> G.has_edge(*e[:2])  # e is a 3-tuple (u,v,data_dictionary)
-        True
-
-        The following syntax are all equivalent:
-
-        >>> G.has_edge(0,1)
-        True
-        >>> 1 in G[0]  # though this gives KeyError if 0 not in G
-        True
-
-        """
-        try:
-            return v in self.adj[u]
-        except KeyError:
-            return False
-
-
-    def neighbors(self, n):
-        """Return a list of the nodes connected to the node n.
-
-        Parameters
-        ----------
-        n : node
-           A node in the graph
-
-        Returns
-        -------
-        nlist : list
-            A list of nodes that are adjacent to n.
-
-        Raises
-        ------
-        NetworkXError
-            If the node n is not in the graph.
-
-        Notes
-        -----
-        It is usually more convenient (and faster) to access the
-        adjacency dictionary as G[n]:
-
-        >>> G = nx.Graph()   # or DiGraph, MultiGraph, MultiDiGraph, etc
-        >>> G.add_edge('a','b',weight=7)
-        >>> G['a']
-        {'b': {'weight': 7}}
-
-        Examples
-        --------
-        >>> G = nx.Graph()   # or DiGraph, MultiGraph, MultiDiGraph, etc
-        >>> G.add_path([0,1,2,3])
-        >>> G.neighbors(0)
-        [1]
-
-        """
-        try:
-            return list(self.adj[n])
-        except KeyError:
-            raise NetworkXError("The node %s is not in the graph."%(n,))
-
-    def neighbors_iter(self, n):
-        """Return an iterator over all neighbors of node n.
-
-        Examples
-        --------
-        >>> G = nx.Graph()   # or DiGraph, MultiGraph, MultiDiGraph, etc
-        >>> G.add_path([0,1,2,3])
-        >>> [n for n in G.neighbors_iter(0)]
-        [1]
-
-        Notes
-        -----
-        It is faster to use the idiom "in G[0]", e.g.
-
-        >>> G = nx.path_graph(4)
-        >>> [n for n in G[0]]
-        [1]
-        """
-        try:
-            return iter(self.adj[n])
-        except KeyError:
-            raise NetworkXError("The node %s is not in the graph."%(n,))
-
-    def edges(self, nbunch=None, data=False):
-        """Return a list of edges.
-
-        Edges are returned as tuples with optional data
-        in the order (node, neighbor, data).
-
-        Parameters
-        ----------
-        nbunch : iterable container, optional (default= all nodes)
-            A container of nodes.  The container will be iterated
-            through once.
-        data : bool, optional (default=False)
-            Return two tuples (u,v) (False) or three-tuples (u,v,data) (True).
-
-        Returns
-        --------
-        edge_list: list of edge tuples
-            Edges that are adjacent to any node in nbunch, or a list
-            of all edges if nbunch is not specified.
-
-        See Also
-        --------
-        edges_iter : return an iterator over the edges
-
-        Notes
-        -----
-        Nodes in nbunch that are not in the graph will be (quietly) ignored.
-        For directed graphs this returns the out-edges.
-
-        Examples
-        --------
-        >>> G = nx.Graph()   # or DiGraph, MultiGraph, MultiDiGraph, etc
-        >>> G.add_path([0,1,2,3])
-        >>> G.edges()
-        [(0, 1), (1, 2), (2, 3)]
-        >>> G.edges(data=True) # default edge data is {} (empty dictionary)
-        [(0, 1, {}), (1, 2, {}), (2, 3, {})]
-        >>> G.edges([0,3])
-        [(0, 1), (3, 2)]
-        >>> G.edges(0)
-        [(0, 1)]
-
-        """
-        return list(self.edges_iter(nbunch, data))
-
-    def edges_iter(self, nbunch=None, data=False):
-        """Return an iterator over the edges.
-
-        Edges are returned as tuples with optional data
-        in the order (node, neighbor, data).
-
-        Parameters
-        ----------
-        nbunch : iterable container, optional (default= all nodes)
-            A container of nodes.  The container will be iterated
-            through once.
-        data : bool, optional (default=False)
-            If True, return edge attribute dict in 3-tuple (u,v,data).
-
-        Returns
-        -------
-        edge_iter : iterator
-            An iterator of (u,v) or (u,v,d) tuples of edges.
-
-        See Also
-        --------
-        edges : return a list of edges
-
-        Notes
-        -----
-        Nodes in nbunch that are not in the graph will be (quietly) ignored.
-        For directed graphs this returns the out-edges.
-
-        Examples
-        --------
-        >>> G = nx.Graph()   # or MultiGraph, etc
-        >>> G.add_path([0,1,2,3])
-        >>> [e for e in G.edges_iter()]
-        [(0, 1), (1, 2), (2, 3)]
-        >>> list(G.edges_iter(data=True)) # default data is {} (empty dict)
-        [(0, 1, {}), (1, 2, {}), (2, 3, {})]
-        >>> list(G.edges_iter([0,3]))
-        [(0, 1), (3, 2)]
-        >>> list(G.edges_iter(0))
-        [(0, 1)]
-
-        """
-        seen={}     # helper dict to keep track of multiply stored edges
-        if nbunch is None:
-            nodes_nbrs = self.adj.items()
-        else:
-            nodes_nbrs=((n,self.adj[n]) for n in self.nbunch_iter(nbunch))
-        if data:
-            for n,nbrs in nodes_nbrs:
-                for nbr,data in nbrs.items():
-                    if nbr not in seen:
-                        yield (n,nbr,data)
-                seen[n]=1
-        else:
-            for n,nbrs in nodes_nbrs:
-                for nbr in nbrs:
-                    if nbr not in seen:
-                        yield (n,nbr)
-                seen[n] = 1
-        del seen
-
-
-    def get_edge_data(self, u, v, default=None):
-        """Return the attribute dictionary associated with edge (u,v).
-
-        Parameters
-        ----------
-        u,v : nodes
-        default:  any Python object (default=None)
-            Value to return if the edge (u,v) is not found.
-
-        Returns
-        -------
-        edge_dict : dictionary
-            The edge attribute dictionary.
-
-        Notes
-        -----
-        It is faster to use G[u][v].
-
-        >>> G = nx.Graph()   # or DiGraph, MultiGraph, MultiDiGraph, etc
-        >>> G.add_path([0,1,2,3])
-        >>> G[0][1]
-        {}
-
-        Warning: Assigning G[u][v] corrupts the graph data structure.
-        But it is safe to assign attributes to that dictionary,
-
-        >>> G[0][1]['weight'] = 7
-        >>> G[0][1]['weight']
-        7
-        >>> G[1][0]['weight']
-        7
-
-        Examples
-        --------
-        >>> G = nx.Graph()   # or DiGraph, MultiGraph, MultiDiGraph, etc
-        >>> G.add_path([0,1,2,3])
-        >>> G.get_edge_data(0,1) # default edge data is {}
-        {}
-        >>> e = (0,1)
-        >>> G.get_edge_data(*e) # tuple form
-        {}
-        >>> G.get_edge_data('a','b',default=0) # edge not in graph, return 0
-        0
-        """
-        try:
-            return self.adj[u][v]
-        except KeyError:
-            return default
-
-    def adjacency_list(self):
-        """Return an adjacency list representation of the graph.
-
-        The output adjacency list is in the order of G.nodes().
-        For directed graphs, only outgoing adjacencies are included.
-
-        Returns
-        -------
-        adj_list : lists of lists
-            The adjacency structure of the graph as a list of lists.
-
-        See Also
-        --------
-        adjacency_iter
-
-        Examples
-        --------
-        >>> G = nx.Graph()   # or DiGraph, MultiGraph, MultiDiGraph, etc
-        >>> G.add_path([0,1,2,3])
-        >>> G.adjacency_list() # in order given by G.nodes()
-        [[1], [0, 2], [1, 3], [2]]
-
-        """
-        return list(map(list,iter(self.adj.values())))
-
-    def adjacency_iter(self):
-        """Return an iterator of (node, adjacency dict) tuples for all nodes.
-
-        This is the fastest way to look at every edge.
-        For directed graphs, only outgoing adjacencies are included.
-
-        Returns
-        -------
-        adj_iter : iterator
-           An iterator of (node, adjacency dictionary) for all nodes in
-           the graph.
-
-        See Also
-        --------
-        adjacency_list
-
-        Examples
-        --------
-        >>> G = nx.Graph()   # or DiGraph, MultiGraph, MultiDiGraph, etc
-        >>> G.add_path([0,1,2,3])
-        >>> [(n,nbrdict) for n,nbrdict in G.adjacency_iter()]
-        [(0, {1: {}}), (1, {0: {}, 2: {}}), (2, {1: {}, 3: {}}), (3, {2: {}})]
-
-        """
-        return iter(self.adj.items())
-
-    def degree(self, nbunch=None, weight=None):
-        """Return the degree of a node or nodes.
-
-        The node degree is the number of edges adjacent to that node.
-
-        Parameters
-        ----------
-        nbunch : iterable container, optional (default=all nodes)
-            A container of nodes.  The container will be iterated
-            through once.
-
-        weight : string or None, optional (default=None)
-           The edge attribute that holds the numerical value used 
-           as a weight.  If None, then each edge has weight 1.
-           The degree is the sum of the edge weights adjacent to the node.
-
-        Returns
-        -------
-        nd : dictionary, or number
-            A dictionary with nodes as keys and degree as values or
-            a number if a single node is specified.
-
-        Examples
-        --------
-        >>> G = nx.Graph()   # or DiGraph, MultiGraph, MultiDiGraph, etc
-        >>> G.add_path([0,1,2,3])
-        >>> G.degree(0)
-        1
-        >>> G.degree([0,1])
-        {0: 1, 1: 2}
-        >>> list(G.degree([0,1]).values())
-        [1, 2]
-
-        """
-        if nbunch in self:      # return a single node
-            return next(self.degree_iter(nbunch,weight))[1]
-        else:           # return a dict
-            return dict(self.degree_iter(nbunch,weight))
-
-    def degree_iter(self, nbunch=None, weight=None):
-        """Return an iterator for (node, degree).
-
-        The node degree is the number of edges adjacent to the node.
-
-        Parameters
-        ----------
-        nbunch : iterable container, optional (default=all nodes)
-            A container of nodes.  The container will be iterated
-            through once.
-
-        weight : string or None, optional (default=None)
-           The edge attribute that holds the numerical value used 
-           as a weight.  If None, then each edge has weight 1.
-           The degree is the sum of the edge weights adjacent to the node.
-
-        Returns
-        -------
-        nd_iter : an iterator
-            The iterator returns two-tuples of (node, degree).
-
-        See Also
-        --------
-        degree
-
-        Examples
-        --------
-        >>> G = nx.Graph()   # or DiGraph, MultiGraph, MultiDiGraph, etc
-        >>> G.add_path([0,1,2,3])
-        >>> list(G.degree_iter(0)) # node 0 with degree 1
-        [(0, 1)]
-        >>> list(G.degree_iter([0,1]))
-        [(0, 1), (1, 2)]
-
-        """
-        if nbunch is None:
-            nodes_nbrs = self.adj.items()
-        else:
-            nodes_nbrs=((n,self.adj[n]) for n in self.nbunch_iter(nbunch))
-  
-        if weight is None:
-            for n,nbrs in nodes_nbrs:
-                yield (n,len(nbrs)+(n in nbrs)) # return tuple (n,degree)
-        else:
-        # edge weighted graph - degree is sum of nbr edge weights
-            for n,nbrs in nodes_nbrs:
-                yield (n, sum((nbrs[nbr].get(weight,1) for nbr in nbrs)) +
-                              (n in nbrs and nbrs[n].get(weight,1)))
-
-
-    def clear(self):
-        """Remove all nodes and edges from the graph.
-
-        This also removes the name, and all graph, node, and edge attributes.
-
-        Examples
-        --------
-        >>> G = nx.Graph()   # or DiGraph, MultiGraph, MultiDiGraph, etc
-        >>> G.add_path([0,1,2,3])
-        >>> G.clear()
-        >>> G.nodes()
-        []
-        >>> G.edges()
-        []
-
-        """
-        self.name = ''
-        self.adj.clear()
-        self.node.clear()
-        self.graph.clear()
-
-    def copy(self):
-        """Return a copy of the graph.
-
-        Returns
-        -------
-        G : Graph
-            A copy of the graph.
-
-        See Also
-        --------
-        to_directed: return a directed copy of the graph.
-
-        Notes
-        -----
-        This makes a complete copy of the graph including all of the
-        node or edge attributes.
-
-        Examples
-        --------
-        >>> G = nx.Graph()   # or DiGraph, MultiGraph, MultiDiGraph, etc
-        >>> G.add_path([0,1,2,3])
-        >>> H = G.copy()
-
-        """
-        return deepcopy(self)
-
-    def is_multigraph(self):
-        """Return True if graph is a multigraph, False otherwise."""
-        return False
-
-
-    def is_directed(self):
-        """Return True if graph is directed, False otherwise."""
-        return False
-
-    def to_directed(self):
-        """Return a directed representation of the graph.
-
-        Returns
-        -------
-        G : DiGraph
-            A directed graph with the same name, same nodes, and with
-            each edge (u,v,data) replaced by two directed edges
-            (u,v,data) and (v,u,data).
-
-        Notes
-        -----
-        This returns a "deepcopy" of the edge, node, and
-        graph attributes which attempts to completely copy
-        all of the data and references.
-
-        This is in contrast to the similar D=DiGraph(G) which returns a
-        shallow copy of the data.
-
-        See the Python copy module for more information on shallow
-        and deep copies, http://docs.python.org/library/copy.html.
-
-        Examples
-        --------
-        >>> G = nx.Graph()   # or MultiGraph, etc
-        >>> G.add_path([0,1])
-        >>> H = G.to_directed()
-        >>> H.edges()
-        [(0, 1), (1, 0)]
-
-        If already directed, return a (deep) copy
-
-        >>> G = nx.DiGraph()   # or MultiDiGraph, etc
-        >>> G.add_path([0,1])
-        >>> H = G.to_directed()
-        >>> H.edges()
-        [(0, 1)]
-        """
-        from networkx import DiGraph
-        G=DiGraph()
-        G.name=self.name
-        G.add_nodes_from(self)
-        G.add_edges_from( ((u,v,deepcopy(data)) 
-                           for u,nbrs in self.adjacency_iter() 
-                           for v,data in nbrs.items()) )
-        G.graph=deepcopy(self.graph)
-        G.node=deepcopy(self.node)
-        return G
-
-    def to_undirected(self):
-        """Return an undirected copy of the graph.
-
-        Returns
-        -------
-        G : Graph/MultiGraph
-            A deepcopy of the graph.
-
-        See Also
-        --------
-        copy, add_edge, add_edges_from
-
-        Notes
-        -----
-        This returns a "deepcopy" of the edge, node, and
-        graph attributes which attempts to completely copy
-        all of the data and references.
-
-        This is in contrast to the similar G=DiGraph(D) which returns a
-        shallow copy of the data.
-
-        See the Python copy module for more information on shallow
-        and deep copies, http://docs.python.org/library/copy.html.
-
-        Examples
-        --------
-        >>> G = nx.Graph()   # or MultiGraph, etc
-        >>> G.add_path([0,1])
-        >>> H = G.to_directed()
-        >>> H.edges()
-        [(0, 1), (1, 0)]
-        >>> G2 = H.to_undirected()
-        >>> G2.edges()
-        [(0, 1)]
-        """
-        return deepcopy(self)
-
-    def subgraph(self, nbunch):
-        """Return the subgraph induced on nodes in nbunch.
-
-        The induced subgraph of the graph contains the nodes in nbunch
-        and the edges between those nodes.
-
-        Parameters
-        ----------
-        nbunch : list, iterable
-            A container of nodes which will be iterated through once.
-
-        Returns
-        -------
-        G : Graph
-            A subgraph of the graph with the same edge attributes.
-
-        Notes
-        -----
-        The graph, edge or node attributes just point to the original graph.
-        So changes to the node or edge structure will not be reflected in
-        the original graph while changes to the attributes will.
-
-        To create a subgraph with its own copy of the edge/node attributes use:
-        nx.Graph(G.subgraph(nbunch))
-
-        If edge attributes are containers, a deep copy can be obtained using:
-        G.subgraph(nbunch).copy()
-
-        For an inplace reduction of a graph to a subgraph you can remove nodes:
-        G.remove_nodes_from([ n in G if n not in set(nbunch)])
-
-        Examples
-        --------
-        >>> G = nx.Graph()   # or DiGraph, MultiGraph, MultiDiGraph, etc
-        >>> G.add_path([0,1,2,3])
-        >>> H = G.subgraph([0,1,2])
-        >>> H.edges()
-        [(0, 1), (1, 2)]
-        """
-        bunch =self.nbunch_iter(nbunch)
-        # create new graph and copy subgraph into it
-        H = self.__class__()
-        # copy node and attribute dictionaries
-        for n in bunch:
-            H.node[n]=self.node[n]
-        # namespace shortcuts for speed
-        H_adj=H.adj
-        self_adj=self.adj
-        # add nodes and edges (undirected method)
-        for n in H.node:
-            Hnbrs={}
-            H_adj[n]=Hnbrs
-            for nbr,d in self_adj[n].items():
-                if nbr in H_adj:
-                    # add both representations of edge: n-nbr and nbr-n
-                    Hnbrs[nbr]=d
-                    H_adj[nbr][n]=d
-        H.graph=self.graph
-        return H
-
-
-    def nodes_with_selfloops(self):
-        """Return a list of nodes with self loops.
-
-        A node with a self loop has an edge with both ends adjacent
-        to that node.
-
-        Returns
-        -------
-        nodelist : list
-            A list of nodes with self loops.
-
-        See Also
-        --------
-        selfloop_edges, number_of_selfloops
-
-        Examples
-        --------
-        >>> G = nx.Graph()   # or DiGraph, MultiGraph, MultiDiGraph, etc
-        >>> G.add_edge(1,1)
-        >>> G.add_edge(1,2)
-        >>> G.nodes_with_selfloops()
-        [1]
-        """
-        return [ n for n,nbrs in self.adj.items() if n in nbrs ]
-
-    def selfloop_edges(self, data=False):
-        """Return a list of selfloop edges.
-
-        A selfloop edge has the same node at both ends.
-
-        Parameters
-        -----------
-        data : bool, optional (default=False)
-            Return selfloop edges as two tuples (u,v) (data=False)
-            or three-tuples (u,v,data) (data=True)
-
-        Returns
-        -------
-        edgelist : list of edge tuples
-            A list of all selfloop edges.
-
-        See Also
-        --------
-        nodes_with_selfloops, number_of_selfloops
-
-        Examples
-        --------
-        >>> G = nx.Graph()   # or DiGraph, MultiGraph, MultiDiGraph, etc
-        >>> G.add_edge(1,1)
-        >>> G.add_edge(1,2)
-        >>> G.selfloop_edges()
-        [(1, 1)]
-        >>> G.selfloop_edges(data=True)
-        [(1, 1, {})]
-        """
-        if data:
-            return [ (n,n,nbrs[n])
-                     for n,nbrs in self.adj.items() if n in nbrs ]
-        else:
-            return [ (n,n)
-                     for n,nbrs in self.adj.items() if n in nbrs ]
-
-
-    def number_of_selfloops(self):
-        """Return the number of selfloop edges.
-
-        A selfloop edge has the same node at both ends.
-
-        Returns
-        -------
-        nloops : int
-            The number of selfloops.
-
-        See Also
-        --------
-        nodes_with_selfloops, selfloop_edges
-
-        Examples
-        --------
-        >>> G=nx.Graph()   # or DiGraph, MultiGraph, MultiDiGraph, etc
-        >>> G.add_edge(1,1)
-        >>> G.add_edge(1,2)
-        >>> G.number_of_selfloops()
-        1
-        """
-        return len(self.selfloop_edges())
-
-
-    def size(self, weight=None):
-        """Return the number of edges.
-
-        Parameters
-        ----------
-        weight : string or None, optional (default=None)
-           The edge attribute that holds the numerical value used 
-           as a weight.  If None, then each edge has weight 1.
-
-        Returns
-        -------
-        nedges : int
-            The number of edges of sum of edge weights in the graph.
-
-        See Also
-        --------
-        number_of_edges
-
-        Examples
-        --------
-        >>> G = nx.Graph()   # or DiGraph, MultiGraph, MultiDiGraph, etc
-        >>> G.add_path([0,1,2,3])
-        >>> G.size()
-        3
-
-        >>> G = nx.Graph()   # or DiGraph, MultiGraph, MultiDiGraph, etc
-        >>> G.add_edge('a','b',weight=2)
-        >>> G.add_edge('b','c',weight=4)
-        >>> G.size()
-        2
-        >>> G.size(weight='weight')
-        6.0
-        """
-        s=sum(self.degree(weight=weight).values())/2
-        if weight is None:
-            return int(s)
-        else:
-            return float(s)
-
-    def number_of_edges(self, u=None, v=None):
-        """Return the number of edges between two nodes.
-
-        Parameters
-        ----------
-        u,v : nodes, optional (default=all edges)
-            If u and v are specified, return the number of edges between
-            u and v. Otherwise return the total number of all edges.
-
-        Returns
-        -------
-        nedges : int
-            The number of edges in the graph.  If nodes u and v are specified
-            return the number of edges between those nodes.
-
-        See Also
-        --------
-        size
-
-        Examples
-        --------
-        >>> G = nx.Graph()   # or DiGraph, MultiGraph, MultiDiGraph, etc
-        >>> G.add_path([0,1,2,3])
-        >>> G.number_of_edges()
-        3
-        >>> G.number_of_edges(0,1)
-        1
-        >>> e = (0,1)
-        >>> G.number_of_edges(*e)
-        1
-        """
-        if u is None: return int(self.size())
-        if v in self.adj[u]:
-            return 1
-        else:
-            return 0
-
-
-    def add_star(self, nodes, **attr):
-        """Add a star.
-
-        The first node in nodes is the middle of the star.  It is connected
-        to all other nodes.
-
-        Parameters
-        ----------
-        nodes : iterable container
-            A container of nodes.
-        attr : keyword arguments, optional (default= no attributes)
-            Attributes to add to every edge in star.
-
-        See Also
-        --------
-        add_path, add_cycle
-
-        Examples
-        --------
-        >>> G = nx.Graph()   # or DiGraph, MultiGraph, MultiDiGraph, etc
-        >>> G.add_star([0,1,2,3])
-        >>> G.add_star([10,11,12],weight=2)
-
-        """
-        nlist = list(nodes)
-        v=nlist[0]
-        edges=((v,n) for n in nlist[1:])
-        self.add_edges_from(edges, **attr)
-
-    def add_path(self, nodes, **attr):
-        """Add a path.
-
-        Parameters
-        ----------
-        nodes : iterable container
-            A container of nodes.  A path will be constructed from
-            the nodes (in order) and added to the graph.
-        attr : keyword arguments, optional (default= no attributes)
-            Attributes to add to every edge in path.
-
-        See Also
-        --------
-        add_star, add_cycle
-
-        Examples
-        --------
-        >>> G=nx.Graph()   # or DiGraph, MultiGraph, MultiDiGraph, etc
-        >>> G.add_path([0,1,2,3])
-        >>> G.add_path([10,11,12],weight=7)
-
-        """
-        nlist = list(nodes)
-        edges=zip(nlist[:-1],nlist[1:])
-        self.add_edges_from(edges, **attr)
-
-    def add_cycle(self, nodes, **attr):
-        """Add a cycle.
-
-        Parameters
-        ----------
-        nodes: iterable container
-            A container of nodes.  A cycle will be constructed from
-            the nodes (in order) and added to the graph.
-        attr : keyword arguments, optional (default= no attributes)
-            Attributes to add to every edge in cycle.
-
-        See Also
-        --------
-        add_path, add_star
-
-        Examples
-        --------
-        >>> G=nx.Graph()   # or DiGraph, MultiGraph, MultiDiGraph, etc
-        >>> G.add_cycle([0,1,2,3])
-        >>> G.add_cycle([10,11,12],weight=7)
-
-        """
-        nlist = list(nodes)
-        edges=zip(nlist,nlist[1:]+[nlist[0]])
-        self.add_edges_from(edges, **attr)
-
-
-    def nbunch_iter(self, nbunch=None):
-        """Return an iterator of nodes contained in nbunch that are
-        also in the graph.
-
-        The nodes in nbunch are checked for membership in the graph
-        and if not are silently ignored.
-
-        Parameters
-        ----------
-        nbunch : iterable container, optional (default=all nodes)
-            A container of nodes.  The container will be iterated
-            through once.
-
-        Returns
-        -------
-        niter : iterator
-            An iterator over nodes in nbunch that are also in the graph.
-            If nbunch is None, iterate over all nodes in the graph.
-
-        Raises
-        ------
-        NetworkXError
-            If nbunch is not a node or or sequence of nodes.
-            If a node in nbunch is not hashable.
-
-        See Also
-        --------
-        Graph.__iter__
-
-        Notes
-        -----
-        When nbunch is an iterator, the returned iterator yields values
-        directly from nbunch, becoming exhausted when nbunch is exhausted.
-
-        To test whether nbunch is a single node, one can use
-        "if nbunch in self:", even after processing with this routine.
-
-        If nbunch is not a node or a (possibly empty) sequence/iterator
-        or None, a NetworkXError is raised.  Also, if any object in
-        nbunch is not hashable, a NetworkXError is raised.
-        """
-        if nbunch is None:   # include all nodes via iterator
-            bunch=iter(self.adj.keys())
-        elif nbunch in self: # if nbunch is a single node
-            bunch=iter([nbunch])
-        else:                # if nbunch is a sequence of nodes
-            def bunch_iter(nlist,adj):
-                try:
-                    for n in nlist:
-                        if n in adj:
-                            yield n
-                except TypeError as e:
-                    message=e.args[0]
-                    import sys
-                    sys.stdout.write(message)
-                    # capture error for non-sequence/iterator nbunch.
-                    if 'iter' in message:
-                        raise NetworkXError(\
-                            "nbunch is not a node or a sequence of nodes.")
-                    # capture error for unhashable node.
-                    elif 'hashable' in message:
-                        raise NetworkXError(\
-                            "Node %s in the sequence nbunch is not a valid node."%n)
-                    else: 
-                        raise 
-            bunch=bunch_iter(nbunch,self.adj)
-        return bunch
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/classes/multidigraph.py b/lib/python2.7/site-packages/setoolsgui/networkx/classes/multidigraph.py
deleted file mode 100644
index 392db89..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/classes/multidigraph.py
+++ /dev/null
@@ -1,851 +0,0 @@
-"""Base class for MultiDiGraph."""
-#    Copyright (C) 2004-2011 by
-#    Aric Hagberg <hagberg@lanl.gov>
-#    Dan Schult <dschult@colgate.edu>
-#    Pieter Swart <swart@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-from copy import deepcopy
-import networkx as nx
-from networkx.classes.graph import Graph  # for doctests
-from networkx.classes.digraph import DiGraph
-from networkx.classes.multigraph import MultiGraph
-from networkx.exception import NetworkXError
-__author__ = """\n""".join(['Aric Hagberg (hagberg@lanl.gov)',
-                            'Pieter Swart (swart@lanl.gov)',
-                            'Dan Schult(dschult@colgate.edu)'])
-
-class MultiDiGraph(MultiGraph,DiGraph):
-    """A directed graph class that can store multiedges.
-
-    Multiedges are multiple edges between two nodes.  Each edge
-    can hold optional data or attributes.
-
-    A MultiDiGraph holds directed edges.  Self loops are allowed.
-
-    Nodes can be arbitrary (hashable) Python objects with optional
-    key/value attributes.
-
-    Edges are represented as links between nodes with optional
-    key/value attributes.
-
-    Parameters
-    ----------
-    data : input graph
-        Data to initialize graph.  If data=None (default) an empty
-        graph is created.  The data can be an edge list, or any
-        NetworkX graph object.  If the corresponding optional Python
-        packages are installed the data can also be a NumPy matrix
-        or 2d ndarray, a SciPy sparse matrix, or a PyGraphviz graph.
-    attr : keyword arguments, optional (default= no attributes)
-        Attributes to add to graph as key=value pairs.
-
-    See Also
-    --------
-    Graph
-    DiGraph
-    MultiGraph
-
-    Examples
-    --------
-    Create an empty graph structure (a "null graph") with no nodes and
-    no edges.
-
-    >>> G = nx.MultiDiGraph()
-
-    G can be grown in several ways.
-
-    **Nodes:**
-
-    Add one node at a time:
-
-    >>> G.add_node(1)
-
-    Add the nodes from any container (a list, dict, set or
-    even the lines from a file or the nodes from another graph).
-
-    >>> G.add_nodes_from([2,3])
-    >>> G.add_nodes_from(range(100,110))
-    >>> H=nx.Graph()
-    >>> H.add_path([0,1,2,3,4,5,6,7,8,9])
-    >>> G.add_nodes_from(H)
-
-    In addition to strings and integers any hashable Python object
-    (except None) can represent a node, e.g. a customized node object,
-    or even another Graph.
-
-    >>> G.add_node(H)
-
-    **Edges:**
-
-    G can also be grown by adding edges.
-
-    Add one edge,
-
-    >>> G.add_edge(1, 2)
-
-    a list of edges,
-
-    >>> G.add_edges_from([(1,2),(1,3)])
-
-    or a collection of edges,
-
-    >>> G.add_edges_from(H.edges())
-
-    If some edges connect nodes not yet in the graph, the nodes
-    are added automatically.  If an edge already exists, an additional
-    edge is created and stored using a key to identify the edge.
-    By default the key is the lowest unused integer.
-
-    >>> G.add_edges_from([(4,5,dict(route=282)), (4,5,dict(route=37))])
-    >>> G[4]
-    {5: {0: {}, 1: {'route': 282}, 2: {'route': 37}}}
-
-    **Attributes:**
-
-    Each graph, node, and edge can hold key/value attribute pairs
-    in an associated attribute dictionary (the keys must be hashable).
-    By default these are empty, but can be added or changed using
-    add_edge, add_node or direct manipulation of the attribute
-    dictionaries named graph, node and edge respectively.
-
-    >>> G = nx.MultiDiGraph(day="Friday")
-    >>> G.graph
-    {'day': 'Friday'}
-
-    Add node attributes using add_node(), add_nodes_from() or G.node
-
-    >>> G.add_node(1, time='5pm')
-    >>> G.add_nodes_from([3], time='2pm')
-    >>> G.node[1]
-    {'time': '5pm'}
-    >>> G.node[1]['room'] = 714
-    >>> del G.node[1]['room'] # remove attribute
-    >>> G.nodes(data=True)
-    [(1, {'time': '5pm'}), (3, {'time': '2pm'})]
-
-    Warning: adding a node to G.node does not add it to the graph.
-
-    Add edge attributes using add_edge(), add_edges_from(), subscript
-    notation, or G.edge.
-
-    >>> G.add_edge(1, 2, weight=4.7 )
-    >>> G.add_edges_from([(3,4),(4,5)], color='red')
-    >>> G.add_edges_from([(1,2,{'color':'blue'}), (2,3,{'weight':8})])
-    >>> G[1][2][0]['weight'] = 4.7
-    >>> G.edge[1][2][0]['weight'] = 4
-
-    **Shortcuts:**
-
-    Many common graph features allow python syntax to speed reporting.
-
-    >>> 1 in G     # check if node in graph
-    True
-    >>> [n for n in G if n<3]   # iterate through nodes
-    [1, 2]
-    >>> len(G)  # number of nodes in graph
-    5
-    >>> G[1] # adjacency dict keyed by neighbor to edge attributes
-    ...            # Note: you should not change this dict manually!
-    {2: {0: {'weight': 4}, 1: {'color': 'blue'}}}
-
-    The fastest way to traverse all edges of a graph is via
-    adjacency_iter(), but the edges() method is often more convenient.
-
-    >>> for n,nbrsdict in G.adjacency_iter():
-    ...     for nbr,keydict in nbrsdict.items():
-    ...        for key,eattr in keydict.items():
-    ...            if 'weight' in eattr:
-    ...                (n,nbr,eattr['weight'])
-    (1, 2, 4)
-    (2, 3, 8)
-    >>> [ (u,v,edata['weight']) for u,v,edata in G.edges(data=True) if 'weight' in edata ]
-    [(1, 2, 4), (2, 3, 8)]
-
-    **Reporting:**
-
-    Simple graph information is obtained using methods.
-    Iterator versions of many reporting methods exist for efficiency.
-    Methods exist for reporting nodes(), edges(), neighbors() and degree()
-    as well as the number of nodes and edges.
-
-    For details on these and other miscellaneous methods, see below.
-    """
-    def add_edge(self, u, v, key=None, attr_dict=None, **attr):
-        """Add an edge between u and v.
-
-        The nodes u and v will be automatically added if they are
-        not already in the graph.
-
-        Edge attributes can be specified with keywords or by providing
-        a dictionary with key/value pairs.  See examples below.
-
-        Parameters
-        ----------
-        u,v : nodes
-            Nodes can be, for example, strings or numbers.
-            Nodes must be hashable (and not None) Python objects.
-        key : hashable identifier, optional (default=lowest unused integer)
-            Used to distinguish multiedges between a pair of nodes.
-        attr_dict : dictionary, optional (default= no attributes)
-            Dictionary of edge attributes.  Key/value pairs will
-            update existing data associated with the edge.
-        attr : keyword arguments, optional
-            Edge data (or labels or objects) can be assigned using
-            keyword arguments.
-
-        See Also
-        --------
-        add_edges_from : add a collection of edges
-
-        Notes
-        -----
-        To replace/update edge data, use the optional key argument
-        to identify a unique edge.  Otherwise a new edge will be created.
-
-        NetworkX algorithms designed for weighted graphs cannot use
-        multigraphs directly because it is not clear how to handle
-        multiedge weights.  Convert to Graph using edge attribute
-        'weight' to enable weighted graph algorithms.
-
-        Examples
-        --------
-        The following all add the edge e=(1,2) to graph G:
-
-        >>> G = nx.MultiDiGraph()
-        >>> e = (1,2)
-        >>> G.add_edge(1, 2)           # explicit two-node form
-        >>> G.add_edge(*e)             # single edge as tuple of two nodes
-        >>> G.add_edges_from( [(1,2)] ) # add edges from iterable container
-
-        Associate data to edges using keywords:
-
-        >>> G.add_edge(1, 2, weight=3)
-        >>> G.add_edge(1, 2, key=0, weight=4)   # update data for key=0
-        >>> G.add_edge(1, 3, weight=7, capacity=15, length=342.7)
-        """
-        # set up attribute dict
-        if attr_dict is None:
-            attr_dict=attr
-        else:
-            try:
-                attr_dict.update(attr)
-            except AttributeError:
-                raise NetworkXError(\
-                    "The attr_dict argument must be a dictionary.")
-        # add nodes
-        if u not in self.succ:
-            self.succ[u] = {}
-            self.pred[u] = {}
-            self.node[u] = {}
-        if v not in self.succ:
-            self.succ[v] = {}
-            self.pred[v] = {}
-            self.node[v] = {}
-        if v in self.succ[u]:
-            keydict=self.adj[u][v]
-            if key is None:
-                # find a unique integer key
-                # other methods might be better here?
-                key=len(keydict)
-                while key in keydict:
-                    key+=1
-            datadict=keydict.get(key,{})
-            datadict.update(attr_dict)
-            keydict[key]=datadict
-        else:
-            # selfloops work this way without special treatment
-            if key is None:
-                key=0
-            datadict={}
-            datadict.update(attr_dict)
-            keydict={key:datadict}
-            self.succ[u][v] = keydict
-            self.pred[v][u] = keydict
-
-    def remove_edge(self, u, v, key=None):
-        """Remove an edge between u and v.
-
-        Parameters
-        ----------
-        u,v: nodes
-            Remove an edge between nodes u and v.
-        key : hashable identifier, optional (default=None)
-            Used to distinguish multiple edges between a pair of nodes.
-            If None remove a single (abritrary) edge between u and v.
-
-        Raises
-        ------
-        NetworkXError
-            If there is not an edge between u and v, or
-            if there is no edge with the specified key.
-
-        See Also
-        --------
-        remove_edges_from : remove a collection of edges
-
-        Examples
-        --------
-        >>> G = nx.MultiDiGraph()
-        >>> G.add_path([0,1,2,3])
-        >>> G.remove_edge(0,1)
-        >>> e = (1,2)
-        >>> G.remove_edge(*e) # unpacks e from an edge tuple
-
-        For multiple edges
-
-        >>> G = nx.MultiDiGraph()
-        >>> G.add_edges_from([(1,2),(1,2),(1,2)])
-        >>> G.remove_edge(1,2) # remove a single (arbitrary) edge
-
-        For edges with keys
-
-        >>> G = nx.MultiDiGraph()
-        >>> G.add_edge(1,2,key='first')
-        >>> G.add_edge(1,2,key='second')
-        >>> G.remove_edge(1,2,key='second')
-
-        """
-        try:
-            d=self.adj[u][v]
-        except (KeyError):
-            raise NetworkXError(
-                "The edge %s-%s is not in the graph."%(u,v))
-        # remove the edge with specified data
-        if key is None:
-            d.popitem()
-        else:
-            try:
-                del d[key]
-            except (KeyError):
-                raise NetworkXError(
-                "The edge %s-%s with key %s is not in the graph."%(u,v,key))
-        if len(d)==0:
-            # remove the key entries if last edge
-            del self.succ[u][v]
-            del self.pred[v][u]
-
-
-    def edges_iter(self, nbunch=None, data=False, keys=False):
-        """Return an iterator over the edges.
-
-        Edges are returned as tuples with optional data and keys
-        in the order (node, neighbor, key, data).
-
-        Parameters
-        ----------
-        nbunch : iterable container, optional (default= all nodes)
-            A container of nodes.  The container will be iterated
-            through once.
-        data : bool, optional (default=False)
-            If True, return edge attribute dict with each edge.
-        keys : bool, optional (default=False)
-            If True, return edge keys with each edge.
-
-        Returns
-        -------
-        edge_iter : iterator
-            An iterator of (u,v), (u,v,d) or (u,v,key,d) tuples of edges.
-
-        See Also
-        --------
-        edges : return a list of edges
-
-        Notes
-        -----
-        Nodes in nbunch that are not in the graph will be (quietly) ignored.
-        For directed graphs this returns the out-edges.
-
-        Examples
-        --------
-        >>> G = nx.MultiDiGraph()
-        >>> G.add_path([0,1,2,3])
-        >>> [e for e in G.edges_iter()]
-        [(0, 1), (1, 2), (2, 3)]
-        >>> list(G.edges_iter(data=True)) # default data is {} (empty dict)
-        [(0, 1, {}), (1, 2, {}), (2, 3, {})]
-        >>> list(G.edges_iter([0,2]))
-        [(0, 1), (2, 3)]
-        >>> list(G.edges_iter(0))
-        [(0, 1)]
-
-        """
-        if nbunch is None:
-            nodes_nbrs = self.adj.items()
-        else:
-            nodes_nbrs=((n,self.adj[n]) for n in self.nbunch_iter(nbunch))
-        if data:
-            for n,nbrs in nodes_nbrs:
-                for nbr,keydict in nbrs.items():
-                    for key,data in keydict.items():
-                        if keys:
-                            yield (n,nbr,key,data)
-                        else:
-                            yield (n,nbr,data)
-        else:
-            for n,nbrs in nodes_nbrs:
-                for nbr,keydict in nbrs.items():
-                    for key,data in keydict.items():
-                        if keys:
-                            yield (n,nbr,key)
-                        else:
-                            yield (n,nbr)
-
-    # alias out_edges to edges
-    out_edges_iter=edges_iter
-
-    def out_edges(self, nbunch=None, keys=False, data=False):
-        """Return a list of the outgoing edges.
-
-        Edges are returned as tuples with optional data and keys
-        in the order (node, neighbor, key, data).
-
-        Parameters
-        ----------
-        nbunch : iterable container, optional (default= all nodes)
-            A container of nodes.  The container will be iterated
-            through once.
-        data : bool, optional (default=False)
-            If True, return edge attribute dict with each edge.
-        keys : bool, optional (default=False)
-            If True, return edge keys with each edge.
-
-        Returns
-        -------
-        out_edges : list
-            An listr of (u,v), (u,v,d) or (u,v,key,d) tuples of edges.
-
-        Notes
-        -----
-        Nodes in nbunch that are not in the graph will be (quietly) ignored.
-        For directed graphs edges() is the same as out_edges().
-
-        See Also
-        --------
-        in_edges: return a list of incoming edges
-        """
-        return list(self.out_edges_iter(nbunch, keys=keys, data=data))
-
-
-    def in_edges_iter(self, nbunch=None, data=False, keys=False):
-        """Return an iterator over the incoming edges.
-
-        Parameters
-        ----------
-        nbunch : iterable container, optional (default= all nodes)
-            A container of nodes.  The container will be iterated
-            through once.
-        data : bool, optional (default=False)
-            If True, return edge attribute dict with each edge.
-        keys : bool, optional (default=False)
-            If True, return edge keys with each edge.
-
-        Returns
-        -------
-        in_edge_iter : iterator
-            An iterator of (u,v), (u,v,d) or (u,v,key,d) tuples of edges.
-
-        See Also
-        --------
-        edges_iter : return an iterator of edges
-        """
-        if nbunch is None:
-            nodes_nbrs=self.pred.items()
-        else:
-            nodes_nbrs=((n,self.pred[n]) for n in self.nbunch_iter(nbunch))
-        if data:
-            for n,nbrs in nodes_nbrs:
-                for nbr,keydict in nbrs.items():
-                    for key,data in keydict.items():
-                        if keys:
-                            yield (nbr,n,key,data)
-                        else:
-                            yield (nbr,n,data)
-        else:
-            for n,nbrs in nodes_nbrs:
-                for nbr,keydict in nbrs.items():
-                    for key,data in keydict.items():
-                        if keys:
-                            yield (nbr,n,key)
-                        else:
-                            yield (nbr,n)
-
-    def in_edges(self, nbunch=None, keys=False, data=False):
-        """Return a list of the incoming edges.
-
-        Parameters
-        ----------
-        nbunch : iterable container, optional (default= all nodes)
-            A container of nodes.  The container will be iterated
-            through once.
-        data : bool, optional (default=False)
-            If True, return edge attribute dict with each edge.
-        keys : bool, optional (default=False)
-            If True, return edge keys with each edge.
-
-        Returns
-        -------
-        in_edges : list
-            A list  of (u,v), (u,v,d) or (u,v,key,d) tuples of edges.
-
-        See Also
-        --------
-        out_edges: return a list of outgoing edges
-        """
-        return list(self.in_edges_iter(nbunch, keys=keys, data=data))
-
-
-    def degree_iter(self, nbunch=None, weight=None):
-        """Return an iterator for (node, degree).
-
-        The node degree is the number of edges adjacent to the node.
-
-        Parameters
-        ----------
-        nbunch : iterable container, optional (default=all nodes)
-            A container of nodes.  The container will be iterated
-            through once.
-
-        weight : string or None, optional (default=None)
-           The edge attribute that holds the numerical value used 
-           as a weight.  If None, then each edge has weight 1.
-           The degree is the sum of the edge weights.
-
-        Returns
-        -------
-        nd_iter : an iterator
-            The iterator returns two-tuples of (node, degree).
-
-        See Also
-        --------
-        degree
-
-        Examples
-        --------
-        >>> G = nx.MultiDiGraph()
-        >>> G.add_path([0,1,2,3])
-        >>> list(G.degree_iter(0)) # node 0 with degree 1
-        [(0, 1)]
-        >>> list(G.degree_iter([0,1]))
-        [(0, 1), (1, 2)]
-
-        """
-        if nbunch is None:
-            nodes_nbrs=zip(iter(self.succ.items()),iter(self.pred.items()))
-        else:
-            nodes_nbrs=zip(
-                ((n,self.succ[n]) for n in self.nbunch_iter(nbunch)),
-                ((n,self.pred[n]) for n in self.nbunch_iter(nbunch)))
-
-        if weight is None:
-            for (n,succ),(n2,pred) in nodes_nbrs:
-                indeg = sum([len(data) for data in pred.values()])
-                outdeg = sum([len(data) for data in succ.values()])
-                yield (n, indeg + outdeg)
-        else:
-        # edge weighted graph - degree is sum of nbr edge weights
-            for (n,succ),(n2,pred) in nodes_nbrs:
-                deg = sum([d.get(weight,1)
-                           for data in pred.values()
-                           for d in data.values()])
-                deg += sum([d.get(weight,1)
-                           for data in succ.values()
-                           for d in data.values()])
-                yield (n, deg)
-
-
-    def in_degree_iter(self, nbunch=None, weight=None):
-        """Return an iterator for (node, in-degree).
-
-        The node in-degree is the number of edges pointing in to the node.
-
-        Parameters
-        ----------
-        nbunch : iterable container, optional (default=all nodes)
-            A container of nodes.  The container will be iterated
-            through once.
-
-        weight : string or None, optional (default=None)
-           The edge attribute that holds the numerical value used 
-           as a weight.  If None, then each edge has weight 1.
-           The degree is the sum of the edge weights adjacent to the node.
-
-        Returns
-        -------
-        nd_iter : an iterator
-            The iterator returns two-tuples of (node, in-degree).
-
-        See Also
-        --------
-        degree, in_degree, out_degree, out_degree_iter
-
-        Examples
-        --------
-        >>> G = nx.MultiDiGraph()
-        >>> G.add_path([0,1,2,3])
-        >>> list(G.in_degree_iter(0)) # node 0 with degree 0
-        [(0, 0)]
-        >>> list(G.in_degree_iter([0,1]))
-        [(0, 0), (1, 1)]
-
-        """
-        if nbunch is None:
-            nodes_nbrs=self.pred.items()
-        else:
-            nodes_nbrs=((n,self.pred[n]) for n in self.nbunch_iter(nbunch))
-
-        if weight is None:
-            for n,nbrs in nodes_nbrs:
-                yield (n, sum([len(data) for data in nbrs.values()]) )
-        else:
-            # edge weighted graph - degree is sum of nbr edge weights
-            for n,pred in nodes_nbrs:
-                deg = sum([d.get(weight,1)
-                           for data in pred.values()
-                           for d in data.values()])
-                yield (n, deg)
-
-
-    def out_degree_iter(self, nbunch=None, weight=None):
-        """Return an iterator for (node, out-degree).
-
-        The node out-degree is the number of edges pointing out of the node.
-
-        Parameters
-        ----------
-        nbunch : iterable container, optional (default=all nodes)
-            A container of nodes.  The container will be iterated
-            through once.
-
-        weight : string or None, optional (default=None)
-           The edge attribute that holds the numerical value used 
-           as a weight.  If None, then each edge has weight 1.
-           The degree is the sum of the edge weights.
-
-        Returns
-        -------
-        nd_iter : an iterator
-            The iterator returns two-tuples of (node, out-degree).
-
-        See Also
-        --------
-        degree, in_degree, out_degree, in_degree_iter
-
-        Examples
-        --------
-        >>> G = nx.MultiDiGraph()
-        >>> G.add_path([0,1,2,3])
-        >>> list(G.out_degree_iter(0)) # node 0 with degree 1
-        [(0, 1)]
-        >>> list(G.out_degree_iter([0,1]))
-        [(0, 1), (1, 1)]
-
-        """
-        if nbunch is None:
-            nodes_nbrs=self.succ.items()
-        else:
-            nodes_nbrs=((n,self.succ[n]) for n in self.nbunch_iter(nbunch))
-
-        if weight is None:
-            for n,nbrs in nodes_nbrs:
-                yield (n, sum([len(data) for data in nbrs.values()]) )
-        else:
-            for n,succ in nodes_nbrs:
-                deg = sum([d.get(weight,1)
-                           for data in succ.values()
-                           for d in data.values()])
-                yield (n, deg)
-
-    def is_multigraph(self):
-        """Return True if graph is a multigraph, False otherwise."""
-        return True
-
-    def is_directed(self):
-        """Return True if graph is directed, False otherwise."""
-        return True
-
-    def to_directed(self):
-        """Return a directed copy of the graph.
-
-        Returns
-        -------
-        G : MultiDiGraph
-            A deepcopy of the graph.
-
-        Notes
-        -----
-        If edges in both directions (u,v) and (v,u) exist in the
-        graph, attributes for the new undirected edge will be a combination of
-        the attributes of the directed edges.  The edge data is updated
-        in the (arbitrary) order that the edges are encountered.  For
-        more customized control of the edge attributes use add_edge().
-
-        This returns a "deepcopy" of the edge, node, and
-        graph attributes which attempts to completely copy
-        all of the data and references.
-
-        This is in contrast to the similar G=DiGraph(D) which returns a
-        shallow copy of the data.
-
-        See the Python copy module for more information on shallow
-        and deep copies, http://docs.python.org/library/copy.html.
-
-        Examples
-        --------
-        >>> G = nx.Graph()   # or MultiGraph, etc
-        >>> G.add_path([0,1])
-        >>> H = G.to_directed()
-        >>> H.edges()
-        [(0, 1), (1, 0)]
-
-        If already directed, return a (deep) copy
-
-        >>> G = nx.MultiDiGraph()
-        >>> G.add_path([0,1])
-        >>> H = G.to_directed()
-        >>> H.edges()
-        [(0, 1)]
-        """
-        return deepcopy(self)
-
-    def to_undirected(self, reciprocal=False):
-        """Return an undirected representation of the digraph.
-
-        Parameters
-        ----------
-        reciprocal : bool (optional)
-          If True only keep edges that appear in both directions 
-          in the original digraph. 
-
-        Returns
-        -------
-        G : MultiGraph
-            An undirected graph with the same name and nodes and
-            with edge (u,v,data) if either (u,v,data) or (v,u,data)
-            is in the digraph.  If both edges exist in digraph and
-            their edge data is different, only one edge is created
-            with an arbitrary choice of which edge data to use.
-            You must check and correct for this manually if desired.
-
-        Notes
-        -----
-        This returns a "deepcopy" of the edge, node, and
-        graph attributes which attempts to completely copy
-        all of the data and references.
-
-        This is in contrast to the similar D=DiGraph(G) which returns a
-        shallow copy of the data.
-
-        See the Python copy module for more information on shallow
-        and deep copies, http://docs.python.org/library/copy.html.
-        """
-        H=MultiGraph()
-        H.name=self.name
-        H.add_nodes_from(self)
-        if reciprocal is True:
-            H.add_edges_from( (u,v,key,deepcopy(data))
-                              for u,nbrs in self.adjacency_iter()
-                              for v,keydict in nbrs.items()
-                              for key,data in keydict.items()
-                              if self.has_edge(v,u,key))
-        else:
-            H.add_edges_from( (u,v,key,deepcopy(data))
-                              for u,nbrs in self.adjacency_iter()
-                              for v,keydict in nbrs.items()
-                              for key,data in keydict.items())
-        H.graph=deepcopy(self.graph)
-        H.node=deepcopy(self.node)
-        return H
-
-    def subgraph(self, nbunch):
-        """Return the subgraph induced on nodes in nbunch.
-
-        The induced subgraph of the graph contains the nodes in nbunch
-        and the edges between those nodes.
-
-        Parameters
-        ----------
-        nbunch : list, iterable
-            A container of nodes which will be iterated through once.
-
-        Returns
-        -------
-        G : Graph
-            A subgraph of the graph with the same edge attributes.
-
-        Notes
-        -----
-        The graph, edge or node attributes just point to the original graph.
-        So changes to the node or edge structure will not be reflected in
-        the original graph while changes to the attributes will.
-
-        To create a subgraph with its own copy of the edge/node attributes use:
-        nx.Graph(G.subgraph(nbunch))
-
-        If edge attributes are containers, a deep copy can be obtained using:
-        G.subgraph(nbunch).copy()
-
-        For an inplace reduction of a graph to a subgraph you can remove nodes:
-        G.remove_nodes_from([ n in G if n not in set(nbunch)])
-
-        Examples
-        --------
-        >>> G = nx.Graph()   # or DiGraph, MultiGraph, MultiDiGraph, etc
-        >>> G.add_path([0,1,2,3])
-        >>> H = G.subgraph([0,1,2])
-        >>> H.edges()
-        [(0, 1), (1, 2)]
-        """
-        bunch = self.nbunch_iter(nbunch)
-        # create new graph and copy subgraph into it
-        H = self.__class__()
-        # copy node and attribute dictionaries
-        for n in bunch:
-            H.node[n]=self.node[n]
-        # namespace shortcuts for speed
-        H_succ=H.succ
-        H_pred=H.pred
-        self_succ=self.succ
-        self_pred=self.pred
-        # add nodes
-        for n in H:
-            H_succ[n]={}
-            H_pred[n]={}
-        # add edges
-        for u in H_succ:
-            Hnbrs=H_succ[u]
-            for v,edgedict in self_succ[u].items():
-                if v in H_succ:
-                    # add both representations of edge: u-v and v-u
-                    # they share the same edgedict
-                    ed=edgedict.copy()
-                    Hnbrs[v]=ed
-                    H_pred[v][u]=ed
-        H.graph=self.graph
-        return H
-
-    def reverse(self, copy=True):
-        """Return the reverse of the graph.
-
-        The reverse is a graph with the same nodes and edges
-        but with the directions of the edges reversed.
-
-        Parameters
-        ----------
-        copy : bool optional (default=True)
-            If True, return a new DiGraph holding the reversed edges.
-            If False, reverse the reverse graph is created using
-            the original graph (this changes the original graph).
-        """
-        if copy:
-            H = self.__class__(name="Reverse of (%s)"%self.name)
-            H.add_nodes_from(self)
-            H.add_edges_from( (v,u,k,deepcopy(d)) for u,v,k,d 
-                              in self.edges(keys=True, data=True) )
-            H.graph=deepcopy(self.graph)
-            H.node=deepcopy(self.node)
-        else:
-            self.pred,self.succ=self.succ,self.pred
-            self.adj=self.succ
-            H=self
-        return H
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/classes/multigraph.py b/lib/python2.7/site-packages/setoolsgui/networkx/classes/multigraph.py
deleted file mode 100644
index 63bdf0f..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/classes/multigraph.py
+++ /dev/null
@@ -1,966 +0,0 @@
-"""Base class for MultiGraph."""
-#    Copyright (C) 2004-2011 by
-#    Aric Hagberg <hagberg@lanl.gov>
-#    Dan Schult <dschult@colgate.edu>
-#    Pieter Swart <swart@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-from copy import deepcopy
-import networkx as nx
-from networkx.classes.graph import Graph
-from networkx import NetworkXError
-__author__ = """\n""".join(['Aric Hagberg (hagberg@lanl.gov)',
-                            'Pieter Swart (swart@lanl.gov)',
-                            'Dan Schult(dschult@colgate.edu)'])
-
-class MultiGraph(Graph):
-    """
-    An undirected graph class that can store multiedges.
-
-    Multiedges are multiple edges between two nodes.  Each edge
-    can hold optional data or attributes.
-
-    A MultiGraph holds undirected edges.  Self loops are allowed.
-
-    Nodes can be arbitrary (hashable) Python objects with optional
-    key/value attributes.
-
-    Edges are represented as links between nodes with optional
-    key/value attributes.
-
-    Parameters
-    ----------
-    data : input graph
-        Data to initialize graph.  If data=None (default) an empty
-        graph is created.  The data can be an edge list, or any
-        NetworkX graph object.  If the corresponding optional Python
-        packages are installed the data can also be a NumPy matrix
-        or 2d ndarray, a SciPy sparse matrix, or a PyGraphviz graph.
-    attr : keyword arguments, optional (default= no attributes)
-        Attributes to add to graph as key=value pairs.
-
-    See Also
-    --------
-    Graph
-    DiGraph
-    MultiDiGraph
-
-    Examples
-    --------
-    Create an empty graph structure (a "null graph") with no nodes and
-    no edges.
-
-    >>> G = nx.MultiGraph()
-
-    G can be grown in several ways.
-
-    **Nodes:**
-
-    Add one node at a time:
-
-    >>> G.add_node(1)
-
-    Add the nodes from any container (a list, dict, set or
-    even the lines from a file or the nodes from another graph).
-
-    >>> G.add_nodes_from([2,3])
-    >>> G.add_nodes_from(range(100,110))
-    >>> H=nx.Graph()
-    >>> H.add_path([0,1,2,3,4,5,6,7,8,9])
-    >>> G.add_nodes_from(H)
-
-    In addition to strings and integers any hashable Python object
-    (except None) can represent a node, e.g. a customized node object,
-    or even another Graph.
-
-    >>> G.add_node(H)
-
-    **Edges:**
-
-    G can also be grown by adding edges.
-
-    Add one edge,
-
-    >>> G.add_edge(1, 2)
-
-    a list of edges,
-
-    >>> G.add_edges_from([(1,2),(1,3)])
-
-    or a collection of edges,
-
-    >>> G.add_edges_from(H.edges())
-
-    If some edges connect nodes not yet in the graph, the nodes
-    are added automatically.  If an edge already exists, an additional
-    edge is created and stored using a key to identify the edge.
-    By default the key is the lowest unused integer.
-
-    >>> G.add_edges_from([(4,5,dict(route=282)), (4,5,dict(route=37))])
-    >>> G[4]
-    {3: {0: {}}, 5: {0: {}, 1: {'route': 282}, 2: {'route': 37}}}
-
-    **Attributes:**
-
-    Each graph, node, and edge can hold key/value attribute pairs
-    in an associated attribute dictionary (the keys must be hashable).
-    By default these are empty, but can be added or changed using
-    add_edge, add_node or direct manipulation of the attribute
-    dictionaries named graph, node and edge respectively.
-
-    >>> G = nx.MultiGraph(day="Friday")
-    >>> G.graph
-    {'day': 'Friday'}
-
-    Add node attributes using add_node(), add_nodes_from() or G.node
-
-    >>> G.add_node(1, time='5pm')
-    >>> G.add_nodes_from([3], time='2pm')
-    >>> G.node[1]
-    {'time': '5pm'}
-    >>> G.node[1]['room'] = 714
-    >>> del G.node[1]['room'] # remove attribute
-    >>> G.nodes(data=True)
-    [(1, {'time': '5pm'}), (3, {'time': '2pm'})]
-
-    Warning: adding a node to G.node does not add it to the graph.
-
-    Add edge attributes using add_edge(), add_edges_from(), subscript
-    notation, or G.edge.
-
-    >>> G.add_edge(1, 2, weight=4.7 )
-    >>> G.add_edges_from([(3,4),(4,5)], color='red')
-    >>> G.add_edges_from([(1,2,{'color':'blue'}), (2,3,{'weight':8})])
-    >>> G[1][2][0]['weight'] = 4.7
-    >>> G.edge[1][2][0]['weight'] = 4
-
-    **Shortcuts:**
-
-    Many common graph features allow python syntax to speed reporting.
-
-    >>> 1 in G     # check if node in graph
-    True
-    >>> [n for n in G if n<3]   # iterate through nodes
-    [1, 2]
-    >>> len(G)  # number of nodes in graph
-    5
-    >>> G[1] # adjacency dict keyed by neighbor to edge attributes
-    ...            # Note: you should not change this dict manually!
-    {2: {0: {'weight': 4}, 1: {'color': 'blue'}}}
-
-    The fastest way to traverse all edges of a graph is via
-    adjacency_iter(), but the edges() method is often more convenient.
-
-    >>> for n,nbrsdict in G.adjacency_iter():
-    ...     for nbr,keydict in nbrsdict.items():
-    ...        for key,eattr in keydict.items():
-    ...            if 'weight' in eattr:
-    ...                (n,nbr,eattr['weight'])
-    (1, 2, 4)
-    (2, 1, 4)
-    (2, 3, 8)
-    (3, 2, 8)
-    >>> [ (u,v,edata['weight']) for u,v,edata in G.edges(data=True) if 'weight' in edata ]
-    [(1, 2, 4), (2, 3, 8)]
-
-    **Reporting:**
-
-    Simple graph information is obtained using methods.
-    Iterator versions of many reporting methods exist for efficiency.
-    Methods exist for reporting nodes(), edges(), neighbors() and degree()
-    as well as the number of nodes and edges.
-
-    For details on these and other miscellaneous methods, see below.
-    """
-    def add_edge(self, u, v, key=None, attr_dict=None, **attr):
-        """Add an edge between u and v.
-
-        The nodes u and v will be automatically added if they are
-        not already in the graph.
-
-        Edge attributes can be specified with keywords or by providing
-        a dictionary with key/value pairs.  See examples below.
-
-        Parameters
-        ----------
-        u,v : nodes
-            Nodes can be, for example, strings or numbers.
-            Nodes must be hashable (and not None) Python objects.
-        key : hashable identifier, optional (default=lowest unused integer)
-            Used to distinguish multiedges between a pair of nodes.
-        attr_dict : dictionary, optional (default= no attributes)
-            Dictionary of edge attributes.  Key/value pairs will
-            update existing data associated with the edge.
-        attr : keyword arguments, optional
-            Edge data (or labels or objects) can be assigned using
-            keyword arguments.
-
-        See Also
-        --------
-        add_edges_from : add a collection of edges
-
-        Notes
-        -----
-        To replace/update edge data, use the optional key argument
-        to identify a unique edge.  Otherwise a new edge will be created.
-
-        NetworkX algorithms designed for weighted graphs cannot use
-        multigraphs directly because it is not clear how to handle
-        multiedge weights.  Convert to Graph using edge attribute
-        'weight' to enable weighted graph algorithms.
-
-        Examples
-        --------
-        The following all add the edge e=(1,2) to graph G:
-
-        >>> G = nx.Graph()   # or DiGraph, MultiGraph, MultiDiGraph, etc
-        >>> e = (1,2)
-        >>> G.add_edge(1, 2)           # explicit two-node form
-        >>> G.add_edge(*e)             # single edge as tuple of two nodes
-        >>> G.add_edges_from( [(1,2)] ) # add edges from iterable container
-
-        Associate data to edges using keywords:
-
-        >>> G.add_edge(1, 2, weight=3)
-        >>> G.add_edge(1, 2, key=0, weight=4)   # update data for key=0
-        >>> G.add_edge(1, 3, weight=7, capacity=15, length=342.7)
-        """
-        # set up attribute dict
-        if attr_dict is None:
-            attr_dict=attr
-        else:
-            try:
-                attr_dict.update(attr)
-            except AttributeError:
-                raise NetworkXError(\
-                    "The attr_dict argument must be a dictionary.")
-        # add nodes
-        if u not in self.adj:
-            self.adj[u] = {}
-            self.node[u] = {}
-        if v not in self.adj:
-            self.adj[v] = {}
-            self.node[v] = {}
-        if v in self.adj[u]:
-            keydict=self.adj[u][v]
-            if key is None:
-                # find a unique integer key
-                # other methods might be better here?
-                key=len(keydict)
-                while key in keydict:
-                    key+=1
-            datadict=keydict.get(key,{})
-            datadict.update(attr_dict)
-            keydict[key]=datadict
-        else:
-            # selfloops work this way without special treatment
-            if key is None:
-                key=0
-            datadict={}
-            datadict.update(attr_dict)
-            keydict={key:datadict}
-            self.adj[u][v] = keydict
-            self.adj[v][u] = keydict
-
-
-    def add_edges_from(self, ebunch, attr_dict=None, **attr):
-        """Add all the edges in ebunch.
-
-        Parameters
-        ----------
-        ebunch : container of edges
-            Each edge given in the container will be added to the
-            graph. The edges can be:
-
-                - 2-tuples (u,v) or
-                - 3-tuples (u,v,d) for an edge attribute dict d, or
-                - 4-tuples (u,v,k,d) for an edge identified by key k
-
-        attr_dict : dictionary, optional  (default= no attributes)
-            Dictionary of edge attributes.  Key/value pairs will
-            update existing data associated with each edge.
-        attr : keyword arguments, optional
-            Edge data (or labels or objects) can be assigned using
-            keyword arguments.
-
-
-        See Also
-        --------
-        add_edge : add a single edge
-        add_weighted_edges_from : convenient way to add weighted edges
-
-        Notes
-        -----
-        Adding the same edge twice has no effect but any edge data
-        will be updated when each duplicate edge is added.
-
-        Examples
-        --------
-        >>> G = nx.Graph()   # or DiGraph, MultiGraph, MultiDiGraph, etc
-        >>> G.add_edges_from([(0,1),(1,2)]) # using a list of edge tuples
-        >>> e = zip(range(0,3),range(1,4))
-        >>> G.add_edges_from(e) # Add the path graph 0-1-2-3
-
-        Associate data to edges
-
-        >>> G.add_edges_from([(1,2),(2,3)], weight=3)
-        >>> G.add_edges_from([(3,4),(1,4)], label='WN2898')
-        """
-        # set up attribute dict
-        if attr_dict is None:
-            attr_dict=attr
-        else:
-            try:
-                attr_dict.update(attr)
-            except AttributeError:
-                raise NetworkXError(\
-                    "The attr_dict argument must be a dictionary.")
-        # process ebunch
-        for e in ebunch:
-            ne=len(e)
-            if ne==4:
-                u,v,key,dd = e
-            elif ne==3:
-                u,v,dd = e
-                key=None
-            elif ne==2:
-                u,v = e
-                dd = {}
-                key=None
-            else:
-                raise NetworkXError(\
-                    "Edge tuple %s must be a 2-tuple, 3-tuple or 4-tuple."%(e,))
-            if u in self.adj:
-                keydict=self.adj[u].get(v,{})
-            else:
-                keydict={}
-            if key is None:
-                # find a unique integer key
-                # other methods might be better here?
-                key=len(keydict)
-                while key in keydict:
-                    key+=1
-            datadict=keydict.get(key,{})
-            datadict.update(attr_dict)
-            datadict.update(dd)
-            self.add_edge(u,v,key=key,attr_dict=datadict)
-
-
-    def remove_edge(self, u, v, key=None):
-        """Remove an edge between u and v.
-
-        Parameters
-        ----------
-        u,v: nodes
-            Remove an edge between nodes u and v.
-        key : hashable identifier, optional (default=None)
-            Used to distinguish multiple edges between a pair of nodes.
-            If None remove a single (abritrary) edge between u and v.
-
-        Raises
-        ------
-        NetworkXError
-            If there is not an edge between u and v, or
-            if there is no edge with the specified key.
-
-        See Also
-        --------
-        remove_edges_from : remove a collection of edges
-
-        Examples
-        --------
-        >>> G = nx.MultiGraph()
-        >>> G.add_path([0,1,2,3])
-        >>> G.remove_edge(0,1)
-        >>> e = (1,2)
-        >>> G.remove_edge(*e) # unpacks e from an edge tuple
-
-        For multiple edges
-
-        >>> G = nx.MultiGraph()   # or MultiDiGraph, etc
-        >>> G.add_edges_from([(1,2),(1,2),(1,2)])
-        >>> G.remove_edge(1,2) # remove a single (arbitrary) edge
-
-        For edges with keys
-
-        >>> G = nx.MultiGraph()   # or MultiDiGraph, etc
-        >>> G.add_edge(1,2,key='first')
-        >>> G.add_edge(1,2,key='second')
-        >>> G.remove_edge(1,2,key='second')
-
-        """
-        try:
-            d=self.adj[u][v]
-        except (KeyError):
-            raise NetworkXError(
-                "The edge %s-%s is not in the graph."%(u,v))
-        # remove the edge with specified data
-        if key is None:
-            d.popitem()
-        else:
-            try:
-                del d[key]
-            except (KeyError):
-                raise NetworkXError(
-                "The edge %s-%s with key %s is not in the graph."%(u,v,key))
-        if len(d)==0:
-            # remove the key entries if last edge
-            del self.adj[u][v]
-            if u!=v:  # check for selfloop
-                del self.adj[v][u]
-
-
-    def remove_edges_from(self, ebunch):
-        """Remove all edges specified in ebunch.
-
-        Parameters
-        ----------
-        ebunch: list or container of edge tuples
-            Each edge given in the list or container will be removed
-            from the graph. The edges can be:
-
-                - 2-tuples (u,v) All edges between u and v are removed.
-                - 3-tuples (u,v,key) The edge identified by key is removed.
-                - 4-tuples (u,v,key,data) where data is ignored.
-
-        See Also
-        --------
-        remove_edge : remove a single edge
-
-        Notes
-        -----
-        Will fail silently if an edge in ebunch is not in the graph.
-
-        Examples
-        --------
-        >>> G = nx.MultiGraph() # or MultiDiGraph
-        >>> G.add_path([0,1,2,3])
-        >>> ebunch=[(1,2),(2,3)]
-        >>> G.remove_edges_from(ebunch)
-
-        Removing multiple copies of edges
-
-        >>> G = nx.MultiGraph()
-        >>> G.add_edges_from([(1,2),(1,2),(1,2)])
-        >>> G.remove_edges_from([(1,2),(1,2)])
-        >>> G.edges()
-        [(1, 2)]
-        >>> G.remove_edges_from([(1,2),(1,2)]) # silently ignore extra copy
-        >>> G.edges() # now empty graph
-        []
-        """
-        for e in ebunch:
-            try:
-                self.remove_edge(*e[:3])
-            except NetworkXError:
-                pass
-
-
-    def has_edge(self, u, v, key=None):
-        """Return True if the graph has an edge between nodes u and v.
-
-        Parameters
-        ----------
-        u,v : nodes
-            Nodes can be, for example, strings or numbers.
-
-        key : hashable identifier, optional (default=None)
-            If specified return True only if the edge with
-            key is found.
-
-        Returns
-        -------
-        edge_ind : bool
-            True if edge is in the graph, False otherwise.
-
-        Examples
-        --------
-        Can be called either using two nodes u,v, an edge tuple (u,v),
-        or an edge tuple (u,v,key).
-
-        >>> G = nx.MultiGraph()   # or MultiDiGraph
-        >>> G.add_path([0,1,2,3])
-        >>> G.has_edge(0,1)  # using two nodes
-        True
-        >>> e = (0,1)
-        >>> G.has_edge(*e)  #  e is a 2-tuple (u,v)
-        True
-        >>> G.add_edge(0,1,key='a')
-        >>> G.has_edge(0,1,key='a')  # specify key
-        True
-        >>> e=(0,1,'a')
-        >>> G.has_edge(*e) # e is a 3-tuple (u,v,'a')
-        True
-
-        The following syntax are equivalent:
-
-        >>> G.has_edge(0,1)
-        True
-        >>> 1 in G[0]  # though this gives KeyError if 0 not in G
-        True
-
-
-
-        """
-        try:
-            if key is None:
-                return v in self.adj[u]
-            else:
-                return key in self.adj[u][v]
-        except KeyError:
-            return False
-
-    def edges(self, nbunch=None, data=False, keys=False):
-        """Return a list of edges.
-
-        Edges are returned as tuples with optional data and keys
-        in the order (node, neighbor, key, data).
-
-        Parameters
-        ----------
-        nbunch : iterable container, optional (default= all nodes)
-            A container of nodes.  The container will be iterated
-            through once.
-        data : bool, optional (default=False)
-            Return two tuples (u,v) (False) or three-tuples (u,v,data) (True).
-        keys : bool, optional (default=False)
-            Return two tuples (u,v) (False) or three-tuples (u,v,key) (True).
-
-        Returns
-        --------
-        edge_list: list of edge tuples
-            Edges that are adjacent to any node in nbunch, or a list
-            of all edges if nbunch is not specified.
-
-        See Also
-        --------
-        edges_iter : return an iterator over the edges
-
-        Notes
-        -----
-        Nodes in nbunch that are not in the graph will be (quietly) ignored.
-        For directed graphs this returns the out-edges.
-
-        Examples
-        --------
-        >>> G = nx.MultiGraph()  # or MultiDiGraph
-        >>> G.add_path([0,1,2,3])
-        >>> G.edges()
-        [(0, 1), (1, 2), (2, 3)]
-        >>> G.edges(data=True) # default edge data is {} (empty dictionary)
-        [(0, 1, {}), (1, 2, {}), (2, 3, {})]
-        >>> G.edges(keys=True) # default keys are integers
-        [(0, 1, 0), (1, 2, 0), (2, 3, 0)]
-        >>> G.edges(data=True,keys=True) # default keys are integers
-        [(0, 1, 0, {}), (1, 2, 0, {}), (2, 3, 0, {})]
-        >>> G.edges([0,3])
-        [(0, 1), (3, 2)]
-        >>> G.edges(0)
-        [(0, 1)]
-
-        """
-        return list(self.edges_iter(nbunch, data=data,keys=keys))
-
-    def edges_iter(self, nbunch=None, data=False, keys=False):
-        """Return an iterator over the edges.
-
-        Edges are returned as tuples with optional data and keys
-        in the order (node, neighbor, key, data).
-
-        Parameters
-        ----------
-        nbunch : iterable container, optional (default= all nodes)
-            A container of nodes.  The container will be iterated
-            through once.
-        data : bool, optional (default=False)
-            If True, return edge attribute dict with each edge.
-        keys : bool, optional (default=False)
-            If True, return edge keys with each edge.
-
-        Returns
-        -------
-        edge_iter : iterator
-            An iterator of (u,v), (u,v,d) or (u,v,key,d) tuples of edges.
-
-        See Also
-        --------
-        edges : return a list of edges
-
-        Notes
-        -----
-        Nodes in nbunch that are not in the graph will be (quietly) ignored.
-        For directed graphs this returns the out-edges.
-
-        Examples
-        --------
-        >>> G = nx.MultiGraph()   # or MultiDiGraph
-        >>> G.add_path([0,1,2,3])
-        >>> [e for e in G.edges_iter()]
-        [(0, 1), (1, 2), (2, 3)]
-        >>> list(G.edges_iter(data=True)) # default data is {} (empty dict)
-        [(0, 1, {}), (1, 2, {}), (2, 3, {})]
-        >>> list(G.edges(keys=True)) # default keys are integers
-        [(0, 1, 0), (1, 2, 0), (2, 3, 0)]
-        >>> list(G.edges(data=True,keys=True)) # default keys are integers
-        [(0, 1, 0, {}), (1, 2, 0, {}), (2, 3, 0, {})]
-        >>> list(G.edges_iter([0,3]))
-        [(0, 1), (3, 2)]
-        >>> list(G.edges_iter(0))
-        [(0, 1)]
-
-        """
-        seen={}     # helper dict to keep track of multiply stored edges
-        if nbunch is None:
-            nodes_nbrs = self.adj.items()
-        else:
-            nodes_nbrs=((n,self.adj[n]) for n in self.nbunch_iter(nbunch))
-        if data:
-            for n,nbrs in nodes_nbrs:
-                for nbr,keydict in nbrs.items():
-                    if nbr not in seen:
-                        for key,data in keydict.items():
-                            if keys:
-                                yield (n,nbr,key,data)
-                            else:
-                                yield (n,nbr,data)
-                seen[n]=1
-        else:
-            for n,nbrs in nodes_nbrs:
-                for nbr,keydict in nbrs.items():
-                    if nbr not in seen:
-                        for key,data in keydict.items():
-                            if keys:
-                                yield (n,nbr,key)
-                            else:
-                                yield (n,nbr)
-
-                seen[n] = 1
-        del seen
-
-
-    def get_edge_data(self, u, v, key=None, default=None):
-        """Return the attribute dictionary associated with edge (u,v).
-
-        Parameters
-        ----------
-        u,v : nodes
-        default:  any Python object (default=None)
-            Value to return if the edge (u,v) is not found.
-        key : hashable identifier, optional (default=None)
-            Return data only for the edge with specified key.
-
-        Returns
-        -------
-        edge_dict : dictionary
-            The edge attribute dictionary.
-
-        Notes
-        -----
-        It is faster to use G[u][v][key].
-
-        >>> G = nx.MultiGraph() # or MultiDiGraph
-        >>> G.add_edge(0,1,key='a',weight=7)
-        >>> G[0][1]['a']  # key='a'
-        {'weight': 7}
-
-        Warning: Assigning G[u][v][key] corrupts the graph data structure.
-        But it is safe to assign attributes to that dictionary,
-
-        >>> G[0][1]['a']['weight'] = 10
-        >>> G[0][1]['a']['weight']
-        10
-        >>> G[1][0]['a']['weight']
-        10
-
-        Examples
-        --------
-        >>> G = nx.MultiGraph() # or MultiDiGraph
-        >>> G.add_path([0,1,2,3])
-        >>> G.get_edge_data(0,1)
-        {0: {}}
-        >>> e = (0,1)
-        >>> G.get_edge_data(*e) # tuple form
-        {0: {}}
-        >>> G.get_edge_data('a','b',default=0) # edge not in graph, return 0
-        0
-        """
-        try:
-            if key is None:
-                return self.adj[u][v]
-            else:
-                return self.adj[u][v][key]
-        except KeyError:
-            return default
-
-    def degree_iter(self, nbunch=None, weight=None):
-        """Return an iterator for (node, degree).
-
-        The node degree is the number of edges adjacent to the node.
-
-        Parameters
-        ----------
-        nbunch : iterable container, optional (default=all nodes)
-            A container of nodes.  The container will be iterated
-            through once.
-
-        weight : string or None, optional (default=None)
-           The edge attribute that holds the numerical value used 
-           as a weight.  If None, then each edge has weight 1.
-           The degree is the sum of the edge weights adjacent to the node.
-
-        Returns
-        -------
-        nd_iter : an iterator
-            The iterator returns two-tuples of (node, degree).
-
-        See Also
-        --------
-        degree
-
-        Examples
-        --------
-        >>> G = nx.Graph()   # or DiGraph, MultiGraph, MultiDiGraph, etc
-        >>> G.add_path([0,1,2,3])
-        >>> list(G.degree_iter(0)) # node 0 with degree 1
-        [(0, 1)]
-        >>> list(G.degree_iter([0,1]))
-        [(0, 1), (1, 2)]
-
-        """
-        if nbunch is None:
-            nodes_nbrs = self.adj.items()
-        else:
-            nodes_nbrs=((n,self.adj[n]) for n in self.nbunch_iter(nbunch))
-
-        if weight is None:
-            for n,nbrs in nodes_nbrs:
-                deg = sum([len(data) for data in nbrs.values()])
-                yield (n, deg+(n in nbrs and len(nbrs[n])))
-        else:
-        # edge weighted graph - degree is sum of nbr edge weights
-            for n,nbrs in nodes_nbrs:
-                deg = sum([d.get(weight,1)
-                           for data in nbrs.values()
-                           for d in data.values()])
-                if n in nbrs:
-                    deg += sum([d.get(weight,1)
-                           for key,d in nbrs[n].items()])
-                yield (n, deg)
-
-
-    def is_multigraph(self):
-        """Return True if graph is a multigraph, False otherwise."""
-        return True
-
-    def is_directed(self):
-        """Return True if graph is directed, False otherwise."""
-        return False
-
-    def to_directed(self):
-        """Return a directed representation of the graph.
-
-        Returns
-        -------
-        G : MultiDiGraph
-            A directed graph with the same name, same nodes, and with
-            each edge (u,v,data) replaced by two directed edges
-            (u,v,data) and (v,u,data).
-
-        Notes
-        -----
-        This returns a "deepcopy" of the edge, node, and
-        graph attributes which attempts to completely copy
-        all of the data and references.
-
-        This is in contrast to the similar D=DiGraph(G) which returns a
-        shallow copy of the data.
-
-        See the Python copy module for more information on shallow
-        and deep copies, http://docs.python.org/library/copy.html.
-
-
-        Examples
-        --------
-        >>> G = nx.Graph()   # or MultiGraph, etc
-        >>> G.add_path([0,1])
-        >>> H = G.to_directed()
-        >>> H.edges()
-        [(0, 1), (1, 0)]
-
-        If already directed, return a (deep) copy
-
-        >>> G = nx.DiGraph()   # or MultiDiGraph, etc
-        >>> G.add_path([0,1])
-        >>> H = G.to_directed()
-        >>> H.edges()
-        [(0, 1)]
-        """
-        from networkx.classes.multidigraph import MultiDiGraph
-        G=MultiDiGraph()
-        G.add_nodes_from(self)
-        G.add_edges_from( (u,v,key,deepcopy(datadict))
-                           for u,nbrs in self.adjacency_iter()
-                           for v,keydict in nbrs.items()
-                           for key,datadict in keydict.items() ) 
-        G.graph=deepcopy(self.graph)
-        G.node=deepcopy(self.node)
-        return G
-
-
-    def selfloop_edges(self, data=False, keys=False):
-        """Return a list of selfloop edges.
-
-        A selfloop edge has the same node at both ends.
-
-        Parameters
-        -----------
-        data : bool, optional (default=False)
-            Return selfloop edges as two tuples (u,v) (data=False)
-            or three-tuples (u,v,data) (data=True)
-        keys : bool, optional (default=False)
-            If True, return edge keys with each edge.
-
-        Returns
-        -------
-        edgelist : list of edge tuples
-            A list of all selfloop edges.
-
-        See Also
-        --------
-        nodes_with_selfloops, number_of_selfloops
-
-        Examples
-        --------
-        >>> G = nx.MultiGraph()   # or MultiDiGraph
-        >>> G.add_edge(1,1)
-        >>> G.add_edge(1,2)
-        >>> G.selfloop_edges()
-        [(1, 1)]
-        >>> G.selfloop_edges(data=True)
-        [(1, 1, {})]
-        >>> G.selfloop_edges(keys=True)
-        [(1, 1, 0)]
-        >>> G.selfloop_edges(keys=True, data=True)
-        [(1, 1, 0, {})]
-        """
-        if data:
-            if keys:
-                return [ (n,n,k,d) 
-                         for n,nbrs in self.adj.items() 
-                         if n in nbrs for k,d in nbrs[n].items()]
-            else:
-                return [ (n,n,d) 
-                         for n,nbrs in self.adj.items() 
-                         if n in nbrs for d in nbrs[n].values()]
-        else:
-            if keys:
-                return [ (n,n,k)
-                     for n,nbrs in self.adj.items() 
-                     if n in nbrs for k in nbrs[n].keys()]
-
-            else:
-                return [ (n,n)
-                     for n,nbrs in self.adj.items() 
-                     if n in nbrs for d in nbrs[n].values()]
-
-
-    def number_of_edges(self, u=None, v=None):
-        """Return the number of edges between two nodes.
-
-        Parameters
-        ----------
-        u,v : nodes, optional (default=all edges)
-            If u and v are specified, return the number of edges between
-            u and v. Otherwise return the total number of all edges.
-
-        Returns
-        -------
-        nedges : int
-            The number of edges in the graph.  If nodes u and v are specified
-            return the number of edges between those nodes.
-
-        See Also
-        --------
-        size
-
-        Examples
-        --------
-        >>> G = nx.Graph()   # or DiGraph, MultiGraph, MultiDiGraph, etc
-        >>> G.add_path([0,1,2,3])
-        >>> G.number_of_edges()
-        3
-        >>> G.number_of_edges(0,1)
-        1
-        >>> e = (0,1)
-        >>> G.number_of_edges(*e)
-        1
-        """
-        if u is None: return self.size()
-        try:
-            edgedata=self.adj[u][v]
-        except KeyError:
-            return 0 # no such edge
-        return len(edgedata)
-
-
-    def subgraph(self, nbunch):
-        """Return the subgraph induced on nodes in nbunch.
-
-        The induced subgraph of the graph contains the nodes in nbunch
-        and the edges between those nodes.
-
-        Parameters
-        ----------
-        nbunch : list, iterable
-            A container of nodes which will be iterated through once.
-
-        Returns
-        -------
-        G : Graph
-            A subgraph of the graph with the same edge attributes.
-
-        Notes
-        -----
-        The graph, edge or node attributes just point to the original graph.
-        So changes to the node or edge structure will not be reflected in
-        the original graph while changes to the attributes will.
-
-        To create a subgraph with its own copy of the edge/node attributes use:
-        nx.Graph(G.subgraph(nbunch))
-
-        If edge attributes are containers, a deep copy can be obtained using:
-        G.subgraph(nbunch).copy()
-
-        For an inplace reduction of a graph to a subgraph you can remove nodes:
-        G.remove_nodes_from([ n in G if n not in set(nbunch)])
-
-        Examples
-        --------
-        >>> G = nx.Graph()   # or DiGraph, MultiGraph, MultiDiGraph, etc
-        >>> G.add_path([0,1,2,3])
-        >>> H = G.subgraph([0,1,2])
-        >>> H.edges()
-        [(0, 1), (1, 2)]
-        """
-        bunch =self.nbunch_iter(nbunch)
-        # create new graph and copy subgraph into it
-        H = self.__class__()
-        # copy node and attribute dictionaries
-        for n in bunch:
-            H.node[n]=self.node[n]
-        # namespace shortcuts for speed
-        H_adj=H.adj
-        self_adj=self.adj
-        # add nodes and edges (undirected method)
-        for n in H:
-            Hnbrs={}
-            H_adj[n]=Hnbrs
-            for nbr,edgedict in self_adj[n].items():
-                if nbr in H_adj:
-                    # add both representations of edge: n-nbr and nbr-n
-                    # they share the same edgedict
-                    ed=edgedict.copy()
-                    Hnbrs[nbr]=ed
-                    H_adj[nbr][n]=ed
-        H.graph=self.graph
-        return H
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/classes/tests/historical_tests.py b/lib/python2.7/site-packages/setoolsgui/networkx/classes/tests/historical_tests.py
deleted file mode 100644
index 5dd398c..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/classes/tests/historical_tests.py
+++ /dev/null
@@ -1,477 +0,0 @@
-#!/usr/bin/env python
-"""Original NetworkX graph tests"""
-from nose.tools import *
-import networkx
-import networkx as nx
-from networkx import convert_node_labels_to_integers as cnlti
-from networkx.testing import *
-
-class HistoricalTests(object):
-
-    def setUp(self):
-        self.null=nx.null_graph()
-        self.P1=cnlti(nx.path_graph(1),first_label=1)
-        self.P3=cnlti(nx.path_graph(3),first_label=1)
-        self.P10=cnlti(nx.path_graph(10),first_label=1)
-        self.K1=cnlti(nx.complete_graph(1),first_label=1)
-        self.K3=cnlti(nx.complete_graph(3),first_label=1)
-        self.K4=cnlti(nx.complete_graph(4),first_label=1)
-        self.K5=cnlti(nx.complete_graph(5),first_label=1)
-        self.K10=cnlti(nx.complete_graph(10),first_label=1)
-        self.G=nx.Graph
-
-    def test_name(self):
-        G=self.G(name="test")
-        assert_equal(str(G),'test')
-        assert_equal(G.name,'test')
-        H=self.G()
-        assert_equal(H.name,'')
-
-    # Nodes
-
-    def test_add_remove_node(self):
-        G=self.G()
-        G.add_node('A')
-        assert_true(G.has_node('A'))
-        G.remove_node('A')
-        assert_false(G.has_node('A'))
-
-    def test_nonhashable_node(self):
-        # Test if a non-hashable object is in the Graph.  A python dict will
-        # raise a TypeError, but for a Graph class a simple  False should be
-        # returned (see Graph __contains__). If it cannot be a node then it is
-        # not a node.
-        G=self.G()
-        assert_false(G.has_node(['A']))
-        assert_false(G.has_node({'A':1}))
-
-    def test_add_nodes_from(self):
-        G=self.G()
-        G.add_nodes_from(list("ABCDEFGHIJKL"))
-        assert_true(G.has_node("L"))
-        G.remove_nodes_from(['H','I','J','K','L'])
-        G.add_nodes_from([1,2,3,4])
-        assert_equal(sorted(G.nodes(),key=str),
-                     [1, 2, 3, 4, 'A', 'B', 'C', 'D', 'E', 'F', 'G'])
-        # test __iter__
-        assert_equal(sorted(G,key=str),
-                     [1, 2, 3, 4, 'A', 'B', 'C', 'D', 'E', 'F', 'G'])
-
-
-    def test_contains(self):
-        G=self.G()
-        G.add_node('A')
-        assert_true('A' in G)
-        assert_false([] in G)  # never raise a Key or TypeError in this test
-        assert_false({1:1} in G) 
-
-    def test_add_remove(self):
-        # Test add_node and remove_node acting for various nbunch
-        G=self.G()
-        G.add_node('m')
-        assert_true(G.has_node('m'))
-        G.add_node('m')   # no complaints
-        assert_raises(nx.NetworkXError,G.remove_node,'j')
-        G.remove_node('m')
-        assert_equal(G.nodes(),[])
-
-    def test_nbunch_is_list(self):
-        G=self.G()
-        G.add_nodes_from(list("ABCD")) 
-        G.add_nodes_from(self.P3) # add nbunch of nodes (nbunch=Graph)
-        assert_equal(sorted(G.nodes(),key=str),
-                     [1, 2, 3, 'A', 'B', 'C', 'D'])
-        G.remove_nodes_from(self.P3) # remove nbunch of nodes (nbunch=Graph)
-        assert_equal(sorted(G.nodes(),key=str),
-                     ['A', 'B', 'C', 'D'])
-
-    def test_nbunch_is_set(self):
-        G=self.G()
-        nbunch=set("ABCDEFGHIJKL")
-        G.add_nodes_from(nbunch)
-        assert_true(G.has_node("L"))
-
-    def test_nbunch_dict(self):
-        # nbunch is a dict with nodes as keys
-        G=self.G()
-        nbunch=set("ABCDEFGHIJKL")
-        G.add_nodes_from(nbunch)
-        nbunch={'I':"foo",'J':2,'K':True,'L':"spam"}
-        G.remove_nodes_from(nbunch)
-        assert_true(sorted(G.nodes(),key=str),
-        ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'])
-
-    def test_nbunch_iterator(self):
-        G=self.G()
-        G.add_nodes_from(['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'])
-        n_iter=self.P3.nodes_iter()
-        G.add_nodes_from(n_iter)
-        assert_equal(sorted(G.nodes(),key=str),
-                     [1, 2, 3, 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'])
-        n_iter=self.P3.nodes_iter() # rebuild same iterator
-        G.remove_nodes_from(n_iter) # remove nbunch of nodes (nbunch=iterator)
-        assert_equal(sorted(G.nodes(),key=str),
-                     ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'])
-
-    def test_nbunch_graph(self):
-        G=self.G()
-        G.add_nodes_from(['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'])
-        nbunch=self.K3
-        G.add_nodes_from(nbunch)
-        assert_true(sorted(G.nodes(),key=str),
-                    [1, 2, 3, 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'])
-
-
-
-    # Edges
-
-    def test_add_edge(self):
-        G=self.G()
-        assert_raises(TypeError,G.add_edge,'A')
-
-        G.add_edge('A','B')     # testing add_edge()
-        G.add_edge('A','B') # should fail silently
-        assert_true(G.has_edge('A','B'))
-        assert_false(G.has_edge('A','C'))
-        assert_true(G.has_edge( *('A','B') ))
-        if G.is_directed():
-            assert_false(G.has_edge('B','A')) 
-        else:
-            # G is undirected, so B->A is an edge
-            assert_true(G.has_edge('B','A')) 
-
-
-        G.add_edge('A','C')  # test directedness
-        G.add_edge('C','A')
-        G.remove_edge('C','A')
-        if G.is_directed():
-            assert_true(G.has_edge('A','C')) 
-        else:
-            assert_false(G.has_edge('A','C')) 
-        assert_false(G.has_edge('C','A')) 
-
-
-    def test_self_loop(self):
-        G=self.G()
-        G.add_edge('A','A') # test self loops
-        assert_true(G.has_edge('A','A'))
-        G.remove_edge('A','A')
-        G.add_edge('X','X')
-        assert_true(G.has_node('X')) 
-        G.remove_node('X')
-        G.add_edge('A','Z') # should add the node silently
-        assert_true(G.has_node('Z'))
-
-    def test_add_edges_from(self):
-        G=self.G()
-        G.add_edges_from([('B','C')])   # test add_edges_from()
-        assert_true(G.has_edge('B','C'))
-        if G.is_directed():
-            assert_false(G.has_edge('C','B')) 
-        else:
-            assert_true(G.has_edge('C','B'))  # undirected
-
-        G.add_edges_from([('D','F'),('B','D')])
-        assert_true(G.has_edge('D','F'))
-        assert_true(G.has_edge('B','D'))
-
-        if G.is_directed():
-            assert_false(G.has_edge('D','B')) 
-        else:
-            assert_true(G.has_edge('D','B'))  # undirected
-
-    def test_add_edges_from2(self):
-        G=self.G()
-        # after failing silently, should add 2nd edge
-        G.add_edges_from([tuple('IJ'),list('KK'),tuple('JK')]) 
-        assert_true(G.has_edge(*('I','J')))
-        assert_true(G.has_edge(*('K','K')))
-        assert_true(G.has_edge(*('J','K')))
-        if G.is_directed():
-            assert_false(G.has_edge(*('K','J')))
-        else:
-            assert_true(G.has_edge(*('K','J')))
-            
-    def test_add_edges_from3(self):
-        G=self.G()
-        G.add_edges_from(zip(list('ACD'),list('CDE'))) 
-        assert_true(G.has_edge('D','E'))
-        assert_false(G.has_edge('E','C'))
-
-    def test_remove_edge(self):
-        G=self.G()
-        G.add_nodes_from([1, 2, 3, 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'])
-
-        G.add_edges_from(zip(list('MNOP'),list('NOPM')))
-        assert_true(G.has_edge('O','P'))
-        assert_true( G.has_edge('P','M'))
-        G.remove_node('P')    # tests remove_node()'s handling of edges.
-        assert_false(G.has_edge('P','M'))
-        assert_raises(TypeError,G.remove_edge,'M')
-
-        G.add_edge('N','M')  
-        assert_true(G.has_edge('M','N'))
-        G.remove_edge('M','N')
-        assert_false(G.has_edge('M','N'))
-                        
-        # self loop fails silently
-        G.remove_edges_from([list('HI'),list('DF'),
-                             tuple('KK'),tuple('JK')]) 
-        assert_false(G.has_edge('H','I'))
-        assert_false(G.has_edge('J','K'))
-        G.remove_edges_from([list('IJ'),list('KK'),list('JK')])
-        assert_false(G.has_edge('I','J'))
-        G.remove_nodes_from(set('ZEFHIMNO'))
-        G.add_edge('J','K')
-
-
-    def test_edges_nbunch(self):
-        # Test G.edges(nbunch) with various forms of nbunch
-        G=self.G()
-        G.add_edges_from([('A', 'B'), ('A', 'C'), ('B', 'D'), 
-                          ('C', 'B'), ('C', 'D')])
-        # node not in nbunch should be quietly ignored
-        assert_raises(nx.NetworkXError,G.edges,6)
-        assert_equals(G.edges('Z'),[])  # iterable non-node
-        # nbunch can be an empty list
-        assert_equals(G.edges([]),[])
-        if G.is_directed():
-            elist=[('A', 'B'), ('A', 'C'), ('B', 'D')]
-        else:
-            elist=[('A', 'B'), ('A', 'C'), ('B', 'C'), ('B', 'D')]
-        # nbunch can be a list
-        assert_edges_equal(G.edges(['A','B']),elist)
-        # nbunch can be a set
-        assert_edges_equal(G.edges(set(['A','B'])),elist)
-        # nbunch can be a graph
-        G1=self.G()
-        G1.add_nodes_from('AB')
-        assert_edges_equal(G.edges(G1),elist)
-        # nbunch can be a dict with nodes as keys
-        ndict={'A': "thing1", 'B': "thing2"}
-        assert_edges_equal(G.edges(ndict),elist)
-        # nbunch can be a single node
-        assert_edges_equal(G.edges('A'), [('A', 'B'), ('A', 'C')])
-
-        assert_edges_equal(G.nodes_iter(), ['A', 'B', 'C', 'D'])
-
-    def test_edges_iter_nbunch(self):
-        G=self.G()
-        G.add_edges_from([('A', 'B'), ('A', 'C'), ('B', 'D'), 
-                          ('C', 'B'), ('C', 'D')])
-        # Test G.edges_iter(nbunch) with various forms of nbunch
-        # node not in nbunch should be quietly ignored
-        assert_equals(list(G.edges_iter('Z')),[])
-        # nbunch can be an empty list
-        assert_equals(sorted(G.edges_iter([])),[])
-        if G.is_directed():
-            elist=[('A', 'B'), ('A', 'C'), ('B', 'D')]
-        else:
-            elist=[('A', 'B'), ('A', 'C'), ('B', 'C'), ('B', 'D')]
-        # nbunch can be a list
-        assert_edges_equal(G.edges_iter(['A','B']),elist)
-        # nbunch can be a set
-        assert_edges_equal(G.edges_iter(set(['A','B'])),elist)
-        # nbunch can be a graph
-        G1=self.G()
-        G1.add_nodes_from(['A','B'])
-        assert_edges_equal(G.edges_iter(G1),elist)
-        # nbunch can be a dict with nodes as keys
-        ndict={'A': "thing1", 'B': "thing2"}
-        assert_edges_equal(G.edges_iter(ndict),elist)
-        # nbunch can be a single node
-        assert_edges_equal(G.edges_iter('A'), [('A', 'B'), ('A', 'C')])
-
-        # nbunch can be nothing (whole graph)
-        assert_edges_equal(G.edges_iter(), [('A', 'B'), ('A', 'C'), ('B', 'D'), 
-                           ('C', 'B'), ('C', 'D')])
-
-
-    def test_degree(self):
-        G=self.G()
-        G.add_edges_from([('A', 'B'), ('A', 'C'), ('B', 'D'), 
-                          ('C', 'B'), ('C', 'D')])
-        assert_equal(G.degree('A'),2)
-
-        # degree of single node in iterable container must return dict
-        assert_equal(list(G.degree(['A']).values()),[2])
-        assert_equal(G.degree(['A']),{'A': 2})
-        assert_equal(sorted(G.degree(['A','B']).values()),[2, 3])
-        assert_equal(G.degree(['A','B']),{'A': 2, 'B': 3})
-        assert_equal(sorted(G.degree().values()),[2, 2, 3, 3])
-        assert_equal(sorted([v for k,v in G.degree_iter()]),
-                     [2, 2, 3, 3])
-
-    def test_degree2(self):
-        H=self.G()
-        H.add_edges_from([(1,24),(1,2)])
-        assert_equal(sorted(H.degree([1,24]).values()),[1, 2])
-
-    def test_degree_graph(self):
-        P3=nx.path_graph(3)
-        P5=nx.path_graph(5)
-        # silently ignore nodes not in P3
-        assert_equal(P3.degree(['A','B']),{})
-        # nbunch can be a graph
-        assert_equal(sorted(P5.degree(P3).values()),[1, 2, 2])
-        # nbunch can be a graph thats way to big
-        assert_equal(sorted(P3.degree(P5).values()),[1, 1, 2])
-        assert_equal(P5.degree([]),{})
-        assert_equal(list(P5.degree_iter([])),[])
-        assert_equal(dict(P5.degree_iter([])),{})
-
-    def test_null(self):
-        null=nx.null_graph()
-        assert_equal(null.degree(),{})
-        assert_equal(list(null.degree_iter()),[])
-        assert_equal(dict(null.degree_iter()),{})
-
-    def test_order_size(self):
-        G=self.G()
-        G.add_edges_from([('A', 'B'), ('A', 'C'), ('B', 'D'), 
-                          ('C', 'B'), ('C', 'D')])
-        assert_equal(G.order(),4)
-        assert_equal(G.size(),5)
-        assert_equal(G.number_of_edges(),5)
-        assert_equal(G.number_of_edges('A','B'),1)
-        assert_equal(G.number_of_edges('A','D'),0)
-
-    def test_copy(self):
-        G=self.G()
-        H=G.copy()      # copy
-        assert_equal(H.adj,G.adj)
-        assert_equal(H.name,G.name)
-        assert_not_equal(H,G)
-
-    def test_subgraph(self):
-        G=self.G()
-        G.add_edges_from([('A', 'B'), ('A', 'C'), ('B', 'D'), 
-                          ('C', 'B'), ('C', 'D')])
-        SG=G.subgraph(['A','B','D']) 
-        assert_nodes_equal(SG.nodes(),['A', 'B', 'D'])
-        assert_edges_equal(SG.edges(),[('A', 'B'), ('B', 'D')])
-
-    def test_to_directed(self):
-        G=self.G()
-        if not G.is_directed():
-            G.add_edges_from([('A', 'B'), ('A', 'C'), ('B', 'D'), 
-                              ('C', 'B'), ('C', 'D')])
-
-            DG=G.to_directed()
-            assert_not_equal(DG,G) # directed copy or copy
-
-            assert_true(DG.is_directed())
-            assert_equal(DG.name,G.name)
-            assert_equal(DG.adj,G.adj)
-            assert_equal(sorted(DG.out_edges(list('AB'))),
-                         [('A', 'B'), ('A', 'C'), ('B', 'A'), 
-                          ('B', 'C'), ('B', 'D')])
-            DG.remove_edge('A','B')
-            assert_true(DG.has_edge('B','A')) # this removes B-A but not  A-B
-            assert_false(DG.has_edge('A','B'))
-
-    def test_to_undirected(self):
-        G=self.G()
-        if G.is_directed():
-            G.add_edges_from([('A', 'B'), ('A', 'C'), ('B', 'D'), 
-                              ('C', 'B'), ('C', 'D')])
-            UG=G.to_undirected()       # to_undirected
-            assert_not_equal(UG,G)
-            assert_false(UG.is_directed())
-            assert_true(G.is_directed())
-            assert_equal(UG.name,G.name)
-            assert_not_equal(UG.adj,G.adj)
-            assert_equal(sorted(UG.edges(list('AB'))),
-                         [('A', 'B'), ('A', 'C'), ('B', 'C'), ('B', 'D')])
-            assert_equal(sorted(UG.edges(['A','B'])),
-                         [('A', 'B'), ('A', 'C'), ('B', 'C'), ('B', 'D')])
-            UG.remove_edge('A','B')
-            assert_false(UG.has_edge('B','A'))
-            assert_false( UG.has_edge('A','B'))
-
-
-
-    def test_neighbors(self):
-        G=self.G()
-        G.add_edges_from([('A', 'B'), ('A', 'C'), ('B', 'D'), 
-                          ('C', 'B'), ('C', 'D')])
-        G.add_nodes_from('GJK')
-        assert_equal(sorted(G['A']),['B', 'C'])
-        assert_equal(sorted(G.neighbors('A')),['B', 'C'])
-        assert_equal(sorted(G.neighbors_iter('A')),['B', 'C'])
-        assert_equal(sorted(G.neighbors('G')),[])
-        assert_raises(nx.NetworkXError,G.neighbors,'j')
-
-    def test_iterators(self):
-        G=self.G()
-        G.add_edges_from([('A', 'B'), ('A', 'C'), ('B', 'D'), 
-                          ('C', 'B'), ('C', 'D')])
-        G.add_nodes_from('GJK')
-        assert_equal(sorted(G.nodes_iter()),
-                     ['A', 'B', 'C', 'D', 'G', 'J', 'K'])
-        assert_edges_equal(G.edges_iter(),
-        [('A', 'B'), ('A', 'C'), ('B', 'D'), ('C', 'B'), ('C', 'D')])
-
-        assert_equal(sorted([v for k,v in G.degree_iter()]),
-                     [0, 0, 0, 2, 2, 3, 3])
-        assert_equal(sorted(G.degree_iter(),key=str),
-                     [('A', 2), ('B', 3), ('C', 3), ('D', 2), 
-                      ('G', 0), ('J', 0), ('K', 0)])
-        assert_equal(sorted(G.neighbors_iter('A')),['B', 'C'])
-        assert_raises(nx.NetworkXError,G.neighbors_iter,'X')
-        G.clear()
-        assert_equal(nx.number_of_nodes(G),0)
-        assert_equal(nx.number_of_edges(G),0)
-
-
-    def test_null_subgraph(self):
-        # Subgraph of a null graph is a null graph
-        nullgraph=nx.null_graph()
-        G=nx.null_graph()
-        H=G.subgraph([])
-        assert_true(nx.is_isomorphic(H,nullgraph))
-
-    def test_empty_subgraph(self):
-        # Subgraph of an empty graph is an empty graph. test 1 
-        nullgraph=nx.null_graph()
-        E5=nx.empty_graph(5)
-        E10=nx.empty_graph(10)
-        H=E10.subgraph([])
-        assert_true(nx.is_isomorphic(H,nullgraph))
-        H=E10.subgraph([1,2,3,4,5])
-        assert_true(nx.is_isomorphic(H,E5))
-
-    def test_complete_subgraph(self):
-        # Subgraph of a complete graph is a complete graph
-        K1=nx.complete_graph(1)
-        K3=nx.complete_graph(3)
-        K5=nx.complete_graph(5)
-        H=K5.subgraph([1,2,3])
-        assert_true(nx.is_isomorphic(H,K3))
-
-    def test_subgraph_nbunch(self):
-        nullgraph=nx.null_graph()
-        K1=nx.complete_graph(1)
-        K3=nx.complete_graph(3)
-        K5=nx.complete_graph(5)
-        # Test G.subgraph(nbunch), where nbunch is a single node
-        H=K5.subgraph(1)
-        assert_true(nx.is_isomorphic(H,K1))
-        # Test G.subgraph(nbunch), where nbunch is a set
-        H=K5.subgraph(set([1]))
-        assert_true(nx.is_isomorphic(H,K1))
-        # Test G.subgraph(nbunch), where nbunch is an iterator
-        H=K5.subgraph(iter(K3))
-        assert_true(nx.is_isomorphic(H,K3))
-        # Test G.subgraph(nbunch), where nbunch is another graph
-        H=K5.subgraph(K3)
-        assert_true(nx.is_isomorphic(H,K3))
-        H=K5.subgraph([9])
-        assert_true(nx.is_isomorphic(H,nullgraph))
-
-    def test_node_tuple_error(self):
-        H=self.G()
-        # Test error handling of tuple as a node
-        assert_raises(nx.NetworkXError,H.remove_node,(1,2))
-        H.remove_nodes_from([(1,2)]) # no error
-        assert_raises(nx.NetworkXError,H.neighbors,(1,2))
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/classes/tests/test_digraph.py b/lib/python2.7/site-packages/setoolsgui/networkx/classes/tests/test_digraph.py
deleted file mode 100644
index 9ac3d3e..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/classes/tests/test_digraph.py
+++ /dev/null
@@ -1,257 +0,0 @@
-#!/usr/bin/env python
-from nose.tools import *
-import networkx
-from test_graph import BaseGraphTester, BaseAttrGraphTester, TestGraph
-
-class BaseDiGraphTester(BaseGraphTester):
-    def test_has_successor(self):
-        G=self.K3
-        assert_equal(G.has_successor(0,1),True)
-        assert_equal(G.has_successor(0,-1),False)
-
-    def test_successors(self):
-        G=self.K3
-        assert_equal(sorted(G.successors(0)),[1,2])
-        assert_raises((KeyError,networkx.NetworkXError), G.successors,-1)
-
-    def test_successors_iter(self):
-        G=self.K3
-        assert_equal(sorted(G.successors_iter(0)),[1,2])
-        assert_raises((KeyError,networkx.NetworkXError), G.successors_iter,-1)
-
-    def test_has_predecessor(self):
-        G=self.K3
-        assert_equal(G.has_predecessor(0,1),True)
-        assert_equal(G.has_predecessor(0,-1),False)
-
-    def test_predecessors(self):
-        G=self.K3
-        assert_equal(sorted(G.predecessors(0)),[1,2])
-        assert_raises((KeyError,networkx.NetworkXError), G.predecessors,-1)
-
-    def test_predecessors_iter(self):
-        G=self.K3
-        assert_equal(sorted(G.predecessors_iter(0)),[1,2])
-        assert_raises((KeyError,networkx.NetworkXError), G.predecessors_iter,-1)
-
-    def test_edges(self):
-        G=self.K3
-        assert_equal(sorted(G.edges()),[(0,1),(0,2),(1,0),(1,2),(2,0),(2,1)])
-        assert_equal(sorted(G.edges(0)),[(0,1),(0,2)])
-        assert_raises((KeyError,networkx.NetworkXError), G.edges,-1)
-
-    def test_edges_iter(self):
-        G=self.K3
-        assert_equal(sorted(G.edges_iter()),
-                     [(0,1),(0,2),(1,0),(1,2),(2,0),(2,1)])
-        assert_equal(sorted(G.edges_iter(0)),[(0,1),(0,2)])
-
-    def test_edges_data(self):
-        G=self.K3
-        assert_equal(sorted(G.edges(data=True)),
-                     [(0,1,{}),(0,2,{}),(1,0,{}),(1,2,{}),(2,0,{}),(2,1,{})])
-        assert_equal(sorted(G.edges(0,data=True)),[(0,1,{}),(0,2,{})])
-        assert_raises((KeyError,networkx.NetworkXError), G.edges,-1)
-
-    def test_out_edges(self):
-        G=self.K3
-        assert_equal(sorted(G.out_edges()),
-                     [(0,1),(0,2),(1,0),(1,2),(2,0),(2,1)])
-        assert_equal(sorted(G.out_edges(0)),[(0,1),(0,2)])
-        assert_raises((KeyError,networkx.NetworkXError), G.out_edges,-1)
-
-    def test_out_edges_iter(self):
-        G=self.K3
-        assert_equal(sorted(G.out_edges_iter()),
-                     [(0,1),(0,2),(1,0),(1,2),(2,0),(2,1)])
-        assert_equal(sorted(G.edges_iter(0)),[(0,1),(0,2)])
-
-    def test_out_edges_dir(self):
-        G=self.P3
-        assert_equal(sorted(G.out_edges()),[(0, 1), (1, 2)])
-        assert_equal(sorted(G.out_edges(0)),[(0, 1)])
-        assert_equal(sorted(G.out_edges(2)),[])
-
-    def test_out_edges_iter_dir(self):
-        G=self.P3
-        assert_equal(sorted(G.out_edges_iter()),[(0, 1), (1, 2)])
-        assert_equal(sorted(G.out_edges_iter(0)),[(0, 1)])
-        assert_equal(sorted(G.out_edges_iter(2)),[])
-
-    def test_in_edges_dir(self):
-        G=self.P3
-        assert_equal(sorted(G.in_edges()),[(0, 1), (1, 2)])
-        assert_equal(sorted(G.in_edges(0)),[])
-        assert_equal(sorted(G.in_edges(2)),[(1,2)])
-
-    def test_in_edges_iter_dir(self):
-        G=self.P3
-        assert_equal(sorted(G.in_edges_iter()),[(0, 1), (1, 2)])
-        assert_equal(sorted(G.in_edges_iter(0)),[])
-        assert_equal(sorted(G.in_edges_iter(2)),[(1,2)])
-
-    def test_degree(self):
-        G=self.K3
-        assert_equal(list(G.degree().values()),[4,4,4])
-        assert_equal(G.degree(),{0:4,1:4,2:4})
-        assert_equal(G.degree(0),4)
-        assert_equal(G.degree([0]),{0:4})
-        assert_raises((KeyError,networkx.NetworkXError), G.degree,-1)
-
-    def test_degree_iter(self):
-        G=self.K3
-        assert_equal(list(G.degree_iter()),[(0,4),(1,4),(2,4)])
-        assert_equal(dict(G.degree_iter()),{0:4,1:4,2:4})
-        assert_equal(list(G.degree_iter(0)),[(0,4)])
-
-    def test_in_degree(self):
-        G=self.K3
-        assert_equal(list(G.in_degree().values()),[2,2,2])
-        assert_equal(G.in_degree(),{0:2,1:2,2:2})
-        assert_equal(G.in_degree(0),2)
-        assert_equal(G.in_degree([0]),{0:2})
-        assert_raises((KeyError,networkx.NetworkXError), G.in_degree,-1)
-
-    def test_in_degree_iter(self):
-        G=self.K3
-        assert_equal(list(G.in_degree_iter()),[(0,2),(1,2),(2,2)])
-        assert_equal(dict(G.in_degree_iter()),{0:2,1:2,2:2})
-        assert_equal(list(G.in_degree_iter(0)),[(0,2)])
-
-    def test_in_degree_iter_weighted(self):
-        G=self.K3
-        G.add_edge(0,1,weight=0.3,other=1.2)
-        assert_equal(list(G.in_degree_iter(weight='weight')),[(0,2),(1,1.3),(2,2)])
-        assert_equal(dict(G.in_degree_iter(weight='weight')),{0:2,1:1.3,2:2})
-        assert_equal(list(G.in_degree_iter(1,weight='weight')),[(1,1.3)])
-        assert_equal(list(G.in_degree_iter(weight='other')),[(0,2),(1,2.2),(2,2)])
-        assert_equal(dict(G.in_degree_iter(weight='other')),{0:2,1:2.2,2:2})
-        assert_equal(list(G.in_degree_iter(1,weight='other')),[(1,2.2)])
-
-    def test_out_degree(self):
-        G=self.K3
-        assert_equal(list(G.out_degree().values()),[2,2,2])
-        assert_equal(G.out_degree(),{0:2,1:2,2:2})
-        assert_equal(G.out_degree(0),2)
-        assert_equal(G.out_degree([0]),{0:2})
-        assert_raises((KeyError,networkx.NetworkXError), G.out_degree,-1)
-
-    def test_out_degree_iter_weighted(self):
-        G=self.K3
-        G.add_edge(0,1,weight=0.3,other=1.2)
-        assert_equal(list(G.out_degree_iter(weight='weight')),[(0,1.3),(1,2),(2,2)])
-        assert_equal(dict(G.out_degree_iter(weight='weight')),{0:1.3,1:2,2:2})
-        assert_equal(list(G.out_degree_iter(0,weight='weight')),[(0,1.3)])
-        assert_equal(list(G.out_degree_iter(weight='other')),[(0,2.2),(1,2),(2,2)])
-        assert_equal(dict(G.out_degree_iter(weight='other')),{0:2.2,1:2,2:2})
-        assert_equal(list(G.out_degree_iter(0,weight='other')),[(0,2.2)])
-
-    def test_out_degree_iter(self):
-        G=self.K3
-        assert_equal(list(G.out_degree_iter()),[(0,2),(1,2),(2,2)])
-        assert_equal(dict(G.out_degree_iter()),{0:2,1:2,2:2})
-        assert_equal(list(G.out_degree_iter(0)),[(0,2)])
-
-    def test_size(self):
-        G=self.K3
-        assert_equal(G.size(),6)
-        assert_equal(G.number_of_edges(),6)
-
-    def test_to_undirected_reciprocal(self):
-        G=self.Graph()
-        G.add_edge(1,2)
-        assert_true(G.to_undirected().has_edge(1,2))
-        assert_false(G.to_undirected(reciprocal=True).has_edge(1,2))
-        G.add_edge(2,1)
-        assert_true(G.to_undirected(reciprocal=True).has_edge(1,2))
-
-    def test_reverse_copy(self):
-        G=networkx.DiGraph([(0,1),(1,2)])
-        R=G.reverse()
-        assert_equal(sorted(R.edges()),[(1,0),(2,1)])
-        R.remove_edge(1,0)
-        assert_equal(sorted(R.edges()),[(2,1)])
-        assert_equal(sorted(G.edges()),[(0,1),(1,2)])
-
-    def test_reverse_nocopy(self):
-        G=networkx.DiGraph([(0,1),(1,2)])
-        R=G.reverse(copy=False)
-        assert_equal(sorted(R.edges()),[(1,0),(2,1)])
-        R.remove_edge(1,0)
-        assert_equal(sorted(R.edges()),[(2,1)])
-        assert_equal(sorted(G.edges()),[(2,1)])
-
-class BaseAttrDiGraphTester(BaseDiGraphTester,BaseAttrGraphTester):
-    pass
-
-
-class TestDiGraph(BaseAttrDiGraphTester,TestGraph):
-    """Tests specific to dict-of-dict-of-dict digraph data structure"""
-    def setUp(self):
-        self.Graph=networkx.DiGraph
-        # build dict-of-dict-of-dict K3
-        ed1,ed2,ed3,ed4,ed5,ed6 = ({},{},{},{},{},{})
-        self.k3adj={0: {1: ed1, 2: ed2}, 1: {0: ed3, 2: ed4}, 2: {0: ed5, 1:ed6}}
-        self.k3edges=[(0, 1), (0, 2), (1, 2)]
-        self.k3nodes=[0, 1, 2]
-        self.K3=self.Graph()
-        self.K3.adj = self.K3.succ = self.K3.edge = self.k3adj
-        self.K3.pred={0: {1: ed3, 2: ed5}, 1: {0: ed1, 2: ed6}, 2: {0: ed2, 1:ed4}}
-
-        ed1,ed2 = ({},{})
-        self.P3=self.Graph()
-        self.P3.adj={0: {1: ed1}, 1: {2: ed2}, 2: {}}
-        self.P3.succ=self.P3.adj
-        self.P3.pred={0: {}, 1: {0: ed1}, 2: {1: ed2}}
-        self.K3.node={}
-        self.K3.node[0]={}
-        self.K3.node[1]={}
-        self.K3.node[2]={}
-        self.P3.node={}
-        self.P3.node[0]={}
-        self.P3.node[1]={}
-        self.P3.node[2]={}
-
-    def test_data_input(self):
-        G=self.Graph(data={1:[2],2:[1]}, name="test")
-        assert_equal(G.name,"test")
-        assert_equal(sorted(G.adj.items()),[(1, {2: {}}), (2, {1: {}})])
-        assert_equal(sorted(G.succ.items()),[(1, {2: {}}), (2, {1: {}})])
-        assert_equal(sorted(G.pred.items()),[(1, {2: {}}), (2, {1: {}})])
-
-    def test_add_edge(self):
-        G=self.Graph()
-        G.add_edge(0,1)
-        assert_equal(G.adj,{0: {1: {}}, 1: {}})
-        assert_equal(G.succ,{0: {1: {}}, 1: {}})
-        assert_equal(G.pred,{0: {}, 1: {0:{}}})
-        G=self.Graph()
-        G.add_edge(*(0,1))
-        assert_equal(G.adj,{0: {1: {}}, 1: {}})
-        assert_equal(G.succ,{0: {1: {}}, 1: {}})
-        assert_equal(G.pred,{0: {}, 1: {0:{}}})
-
-    def test_add_edges_from(self):
-        G=self.Graph()
-        G.add_edges_from([(0,1),(0,2,{'data':3})],data=2)
-        assert_equal(G.adj,{0: {1: {'data':2}, 2: {'data':3}}, 1: {}, 2: {}})
-        assert_equal(G.succ,{0: {1: {'data':2}, 2: {'data':3}}, 1: {}, 2: {}})
-        assert_equal(G.pred,{0: {}, 1: {0: {'data':2}}, 2: {0: {'data':3}}})
-
-        assert_raises(networkx.NetworkXError, G.add_edges_from,[(0,)])  # too few in tuple
-        assert_raises(networkx.NetworkXError, G.add_edges_from,[(0,1,2,3)])  # too many in tuple
-        assert_raises(TypeError, G.add_edges_from,[0])  # not a tuple
-
-    def test_remove_edge(self):
-        G=self.K3
-        G.remove_edge(0,1)
-        assert_equal(G.succ,{0:{2:{}},1:{0:{},2:{}},2:{0:{},1:{}}})
-        assert_equal(G.pred,{0:{1:{}, 2:{}}, 1:{2:{}}, 2:{0:{},1:{}}})
-        assert_raises((KeyError,networkx.NetworkXError), G.remove_edge,-1,0)
-
-    def test_remove_edges_from(self):
-        G=self.K3
-        G.remove_edges_from([(0,1)])
-        assert_equal(G.succ,{0:{2:{}},1:{0:{},2:{}},2:{0:{},1:{}}})
-        assert_equal(G.pred,{0:{1:{}, 2:{}}, 1:{2:{}}, 2:{0:{},1: {}}})
-        G.remove_edges_from([(0,0)]) # silent fail
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/classes/tests/test_digraph_historical.py b/lib/python2.7/site-packages/setoolsgui/networkx/classes/tests/test_digraph_historical.py
deleted file mode 100644
index 6bf295c..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/classes/tests/test_digraph_historical.py
+++ /dev/null
@@ -1,119 +0,0 @@
-#!/usr/bin/env python
-"""Original NetworkX graph tests"""
-from nose.tools import *
-import networkx
-import networkx as nx
-
-from historical_tests import HistoricalTests
-
-class TestDiGraphHistorical(HistoricalTests):
-
-    def setUp(self):
-        HistoricalTests.setUp(self)
-        self.G=nx.DiGraph
-
-
-    def test_in_degree(self):
-        G=self.G()
-        G.add_nodes_from('GJK')
-        G.add_edges_from([('A', 'B'), ('A', 'C'), ('B', 'D'), 
-                          ('B', 'C'), ('C', 'D')])
-
-        assert_equal(sorted(G.in_degree().values()),[0, 0, 0, 0, 1, 2, 2])
-        assert_equal(G.in_degree(),
-                     {'A': 0, 'C': 2, 'B': 1, 'D': 2, 'G': 0, 'K': 0, 'J': 0})
-        assert_equal(sorted([v for k,v in G.in_degree_iter()]),
-                     [0, 0, 0, 0, 1, 2, 2])
-        assert_equal(dict(G.in_degree_iter()),
-                    {'A': 0, 'C': 2, 'B': 1, 'D': 2, 'G': 0, 'K': 0, 'J': 0})
-
-
-    def test_out_degree(self):
-        G=self.G()
-        G.add_nodes_from('GJK')
-        G.add_edges_from([('A', 'B'), ('A', 'C'), ('B', 'D'), 
-                          ('B', 'C'), ('C', 'D')])
-        assert_equal(sorted(G.out_degree().values()),[0, 0, 0, 0, 1, 2, 2])
-        assert_equal(G.out_degree(),
-                     {'A': 2, 'C': 1, 'B': 2, 'D': 0, 'G': 0, 'K': 0, 'J': 0})
-        assert_equal(sorted([v for k,v in G.in_degree_iter()]),
-                     [0, 0, 0, 0, 1, 2, 2])
-        assert_equal(dict(G.out_degree_iter()),
-             {'A': 2, 'C': 1, 'B': 2, 'D': 0, 'G': 0, 'K': 0, 'J': 0})
-
-
-    def test_degree_digraph(self):
-        H=nx.DiGraph()
-        H.add_edges_from([(1,24),(1,2)])
-        assert_equal(sorted(H.in_degree([1,24]).values()),[0, 1])
-        assert_equal(sorted(H.out_degree([1,24]).values()),[0, 2])
-        assert_equal(sorted(H.degree([1,24]).values()),[1, 2])
-
-
-    def test_neighbors(self):
-        G=self.G()
-        G.add_nodes_from('GJK')
-        G.add_edges_from([('A', 'B'), ('A', 'C'), ('B', 'D'), 
-                          ('B', 'C'), ('C', 'D')])
-
-        assert_equal(sorted(G.neighbors('C')),['D'])
-        assert_equal(sorted(G['C']),['D'])
-        assert_equal(sorted(G.neighbors('A')),['B', 'C'])
-        assert_equal(sorted(G.neighbors_iter('A')),['B', 'C'])
-        assert_equal(sorted(G.neighbors_iter('C')),['D'])
-        assert_equal(sorted(G.neighbors('A')),['B', 'C'])
-        assert_raises(nx.NetworkXError,G.neighbors,'j')
-        assert_raises(nx.NetworkXError,G.neighbors_iter,'j')
-
-    def test_successors(self):
-        G=self.G()
-        G.add_nodes_from('GJK')
-        G.add_edges_from([('A', 'B'), ('A', 'C'), ('B', 'D'), 
-                          ('B', 'C'), ('C', 'D')])
-        assert_equal(sorted(G.successors('A')),['B', 'C'])
-        assert_equal(sorted(G.successors_iter('A')),['B', 'C'])
-        assert_equal(sorted(G.successors('G')),[])
-        assert_equal(sorted(G.successors('D')),[])
-        assert_equal(sorted(G.successors_iter('G')),[])
-        assert_raises(nx.NetworkXError,G.successors,'j')
-        assert_raises(nx.NetworkXError,G.successors_iter,'j')
-        
-
-    def test_predecessors(self):
-        G=self.G()
-        G.add_nodes_from('GJK')
-        G.add_edges_from([('A', 'B'), ('A', 'C'), ('B', 'D'), 
-                          ('B', 'C'), ('C', 'D')])
-        assert_equal(sorted(G.predecessors('C')),['A', 'B'])
-        assert_equal(sorted(G.predecessors_iter('C')),['A', 'B'])
-        assert_equal(sorted(G.predecessors('G')),[])
-        assert_equal(sorted(G.predecessors('A')),[])
-        assert_equal(sorted(G.predecessors_iter('G')),[])
-        assert_equal(sorted(G.predecessors_iter('A')),[])
-        assert_equal(sorted(G.successors_iter('D')),[])
-
-        assert_raises(nx.NetworkXError,G.predecessors,'j')
-        assert_raises(nx.NetworkXError,G.predecessors,'j')
-
-
-
-    def test_reverse(self):
-        G=nx.complete_graph(10)
-        H=G.to_directed()
-        HR=H.reverse()
-        assert_true(nx.is_isomorphic(H,HR))
-        assert_equal(sorted(H.edges()),sorted(HR.edges()))
-
-    def test_reverse2(self):
-        H=nx.DiGraph()
-        foo=[H.add_edge(u,u+1) for u in range(0,5)]
-        HR=H.reverse()
-        for u in range(0,5):
-            assert_true(HR.has_edge(u+1,u))
-
-    def test_reverse3(self):
-        H=nx.DiGraph()
-        H.add_nodes_from([1,2,3,4])
-        HR=H.reverse()
-        assert_equal(sorted(HR.nodes()),[1, 2, 3, 4])
-
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/classes/tests/test_function.py b/lib/python2.7/site-packages/setoolsgui/networkx/classes/tests/test_function.py
deleted file mode 100644
index 2c12178..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/classes/tests/test_function.py
+++ /dev/null
@@ -1,190 +0,0 @@
-#!/usr/bin/env python
-import random
-from nose.tools import *
-import networkx
-import networkx as nx
-
-class TestFunction(object):
-    def setUp(self):
-        self.G=networkx.Graph({0:[1,2,3], 1:[1,2,0], 4:[]}, name='Test')
-        self.Gdegree={0:3, 1:2, 2:2, 3:1, 4:0}
-        self.Gnodes=list(range(5))
-        self.Gedges=[(0,1),(0,2),(0,3),(1,0),(1,1),(1,2)]
-        self.DG=networkx.DiGraph({0:[1,2,3], 1:[1,2,0], 4:[]})
-        self.DGin_degree={0:1, 1:2, 2:2, 3:1, 4:0}
-        self.DGout_degree={0:3, 1:3, 2:0, 3:0, 4:0}
-        self.DGnodes=list(range(5))
-        self.DGedges=[(0,1),(0,2),(0,3),(1,0),(1,1),(1,2)]
-
-    def test_nodes(self):
-        assert_equal(self.G.nodes(),networkx.nodes(self.G))
-        assert_equal(self.DG.nodes(),networkx.nodes(self.DG))
-    def test_edges(self):
-        assert_equal(self.G.edges(),networkx.edges(self.G))
-        assert_equal(self.DG.edges(),networkx.edges(self.DG))
-        assert_equal(self.G.edges(nbunch=[0,1,3]),networkx.edges(self.G,nbunch=[0,1,3]))
-        assert_equal(self.DG.edges(nbunch=[0,1,3]),networkx.edges(self.DG,nbunch=[0,1,3]))
-    def test_nodes_iter(self):
-        assert_equal(list(self.G.nodes_iter()),list(networkx.nodes_iter(self.G)))
-        assert_equal(list(self.DG.nodes_iter()),list(networkx.nodes_iter(self.DG)))
-    def test_edges_iter(self):
-        assert_equal(list(self.G.edges_iter()),list(networkx.edges_iter(self.G)))
-        assert_equal(list(self.DG.edges_iter()),list(networkx.edges_iter(self.DG)))
-        assert_equal(list(self.G.edges_iter(nbunch=[0,1,3])),list(networkx.edges_iter(self.G,nbunch=[0,1,3])))
-        assert_equal(list(self.DG.edges_iter(nbunch=[0,1,3])),list(networkx.edges_iter(self.DG,nbunch=[0,1,3])))
-    def test_degree(self):
-        assert_equal(self.G.degree(),networkx.degree(self.G))
-        assert_equal(self.DG.degree(),networkx.degree(self.DG))
-        assert_equal(self.G.degree(nbunch=[0,1]),networkx.degree(self.G,nbunch=[0,1]))
-        assert_equal(self.DG.degree(nbunch=[0,1]),networkx.degree(self.DG,nbunch=[0,1]))
-        assert_equal(self.G.degree(weight='weight'),networkx.degree(self.G,weight='weight'))
-        assert_equal(self.DG.degree(weight='weight'),networkx.degree(self.DG,weight='weight'))
-    def test_neighbors(self):
-        assert_equal(self.G.neighbors(1),networkx.neighbors(self.G,1))
-        assert_equal(self.DG.neighbors(1),networkx.neighbors(self.DG,1))
-    def test_number_of_nodes(self):
-        assert_equal(self.G.number_of_nodes(),networkx.number_of_nodes(self.G))
-        assert_equal(self.DG.number_of_nodes(),networkx.number_of_nodes(self.DG))
-    def test_number_of_edges(self):
-        assert_equal(self.G.number_of_edges(),networkx.number_of_edges(self.G))
-        assert_equal(self.DG.number_of_edges(),networkx.number_of_edges(self.DG))
-    def test_is_directed(self):
-        assert_equal(self.G.is_directed(),networkx.is_directed(self.G))
-        assert_equal(self.DG.is_directed(),networkx.is_directed(self.DG))
-    def test_subgraph(self):
-        assert_equal(self.G.subgraph([0,1,2,4]).adj,networkx.subgraph(self.G,[0,1,2,4]).adj)
-        assert_equal(self.DG.subgraph([0,1,2,4]).adj,networkx.subgraph(self.DG,[0,1,2,4]).adj)
-
-    def test_create_empty_copy(self):
-        G=networkx.create_empty_copy(self.G, with_nodes=False)
-        assert_equal(G.nodes(),[])
-        assert_equal(G.graph,{})
-        assert_equal(G.node,{})
-        assert_equal(G.edge,{})
-        G=networkx.create_empty_copy(self.G)
-        assert_equal(G.nodes(),self.G.nodes())
-        assert_equal(G.graph,{})
-        assert_equal(G.node,{}.fromkeys(self.G.nodes(),{}))
-        assert_equal(G.edge,{}.fromkeys(self.G.nodes(),{}))
-
-    def test_degree_histogram(self):
-        assert_equal(networkx.degree_histogram(self.G), [1,1,1,1,1])
-
-    def test_density(self):
-        assert_equal(networkx.density(self.G), 0.5)
-        assert_equal(networkx.density(self.DG), 0.3)
-        G=networkx.Graph()
-        G.add_node(1)
-        assert_equal(networkx.density(G), 0.0)
-
-    def test_density_selfloop(self):
-        G = nx.Graph()
-        G.add_edge(1,1)
-        assert_equal(networkx.density(G), 0.0)
-        G.add_edge(1,2)
-        assert_equal(networkx.density(G), 2.0)
-
-    def test_freeze(self):
-        G=networkx.freeze(self.G)
-        assert_equal(G.frozen,True)
-        assert_raises(networkx.NetworkXError, G.add_node, 1)
-        assert_raises(networkx.NetworkXError, G.add_nodes_from, [1])
-        assert_raises(networkx.NetworkXError, G.remove_node, 1)
-        assert_raises(networkx.NetworkXError, G.remove_nodes_from, [1])
-        assert_raises(networkx.NetworkXError, G.add_edge, 1,2)
-        assert_raises(networkx.NetworkXError, G.add_edges_from, [(1,2)])
-        assert_raises(networkx.NetworkXError, G.remove_edge, 1,2)
-        assert_raises(networkx.NetworkXError, G.remove_edges_from, [(1,2)])
-        assert_raises(networkx.NetworkXError, G.clear)
-
-    def test_is_frozen(self):
-        assert_equal(networkx.is_frozen(self.G), False)
-        G=networkx.freeze(self.G)
-        assert_equal(G.frozen, networkx.is_frozen(self.G))
-        assert_equal(G.frozen,True)
-
-    def test_info(self):
-        G=networkx.path_graph(5)
-        info=networkx.info(G)
-        expected_graph_info='\n'.join(['Name: path_graph(5)',
-                                       'Type: Graph',
-                                       'Number of nodes: 5',
-                                       'Number of edges: 4',
-                                       'Average degree:   1.6000'])
-        assert_equal(info,expected_graph_info)
-
-        info=networkx.info(G,n=1)
-        expected_node_info='\n'.join(
-            ['Node 1 has the following properties:',
-             'Degree: 2',
-             'Neighbors: 0 2'])
-        assert_equal(info,expected_node_info)
-
-    def test_info_digraph(self):
-        G=networkx.DiGraph(name='path_graph(5)')
-        G.add_path([0,1,2,3,4])
-        info=networkx.info(G)
-        expected_graph_info='\n'.join(['Name: path_graph(5)',
-                                       'Type: DiGraph',
-                                       'Number of nodes: 5',
-                                       'Number of edges: 4',
-                                       'Average in degree:   0.8000',
-                                       'Average out degree:   0.8000'])
-        assert_equal(info,expected_graph_info)
-
-        info=networkx.info(G,n=1)
-        expected_node_info='\n'.join(
-            ['Node 1 has the following properties:',
-             'Degree: 2',
-             'Neighbors: 2'])
-        assert_equal(info,expected_node_info)
-
-        assert_raises(networkx.NetworkXError,networkx.info,G,n=-1)
-
-    def test_neighbors(self):
-        graph = nx.complete_graph(100)
-        pop = random.sample(graph.nodes(), 1)
-        nbors = list(nx.neighbors(graph, pop[0]))
-        # should be all the other vertices in the graph
-        assert_equal(len(nbors), len(graph) - 1)
-
-        graph = nx.path_graph(100)
-        node = random.sample(graph.nodes(), 1)[0]
-        nbors = list(nx.neighbors(graph, node))
-        # should be all the other vertices in the graph
-        if node != 0 and node != 99:
-            assert_equal(len(nbors), 2)
-        else:
-            assert_equal(len(nbors), 1)
-
-        # create a star graph with 99 outer nodes
-        graph = nx.star_graph(99)
-        nbors = list(nx.neighbors(graph, 0))
-        assert_equal(len(nbors), 99)
-
-    def test_non_neighbors(self):
-        graph = nx.complete_graph(100)
-        pop = random.sample(graph.nodes(), 1)
-        nbors = list(nx.non_neighbors(graph, pop[0]))
-        # should be all the other vertices in the graph
-        assert_equal(len(nbors), 0)
-
-        graph = nx.path_graph(100)
-        node = random.sample(graph.nodes(), 1)[0]
-        nbors = list(nx.non_neighbors(graph, node))
-        # should be all the other vertices in the graph
-        if node != 0 and node != 99:
-            assert_equal(len(nbors), 97)
-        else:
-            assert_equal(len(nbors), 98)
-
-        # create a star graph with 99 outer nodes
-        graph = nx.star_graph(99)
-        nbors = list(nx.non_neighbors(graph, 0))
-        assert_equal(len(nbors), 0)
-
-        # disconnected graph
-        graph = nx.Graph()
-        graph.add_nodes_from(range(10))
-        nbors = list(nx.non_neighbors(graph, 0))
-        assert_equal(len(nbors), 9)
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/classes/tests/test_graph.py b/lib/python2.7/site-packages/setoolsgui/networkx/classes/tests/test_graph.py
deleted file mode 100644
index 077dead..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/classes/tests/test_graph.py
+++ /dev/null
@@ -1,602 +0,0 @@
-#!/usr/bin/env python
-from nose.tools import *
-import networkx
-
-class BaseGraphTester(object):
-    """ Tests for data-structure independent graph class features."""
-    def test_contains(self):
-        G=self.K3
-        assert(1 in G )
-        assert(4 not in G )
-        assert('b' not in G )
-        assert([] not in G )   # no exception for nonhashable
-        assert({1:1} not in G) # no exception for nonhashable
-
-    def test_order(self):
-        G=self.K3
-        assert_equal(len(G),3)
-        assert_equal(G.order(),3)
-        assert_equal(G.number_of_nodes(),3)
-
-    def test_nodes_iter(self):
-        G=self.K3
-        assert_equal(sorted(G.nodes_iter()),self.k3nodes)
-        assert_equal(sorted(G.nodes_iter(data=True)),[(0,{}),(1,{}),(2,{})])
-
-    def test_nodes(self):
-        G=self.K3
-        assert_equal(sorted(G.nodes()),self.k3nodes)
-        assert_equal(sorted(G.nodes(data=True)),[(0,{}),(1,{}),(2,{})])
-
-    def test_has_node(self):
-        G=self.K3
-        assert(G.has_node(1))
-        assert(not G.has_node(4))
-        assert(not G.has_node([]))   # no exception for nonhashable
-        assert(not G.has_node({1:1})) # no exception for nonhashable
-
-    def test_has_edge(self):
-        G=self.K3
-        assert_equal(G.has_edge(0,1),True)
-        assert_equal(G.has_edge(0,-1),False)
-
-    def test_neighbors(self):
-        G=self.K3
-        assert_equal(sorted(G.neighbors(0)),[1,2])
-        assert_raises((KeyError,networkx.NetworkXError), G.neighbors,-1)
-
-    def test_neighbors_iter(self):
-        G=self.K3
-        assert_equal(sorted(G.neighbors_iter(0)),[1,2])
-        assert_raises((KeyError,networkx.NetworkXError), G.neighbors_iter,-1)
-
-    def test_edges(self):
-        G=self.K3
-        assert_equal(sorted(G.edges()),[(0,1),(0,2),(1,2)])
-        assert_equal(sorted(G.edges(0)),[(0,1),(0,2)])
-        assert_raises((KeyError,networkx.NetworkXError), G.edges,-1)
-
-    def test_edges_iter(self):
-        G=self.K3
-        assert_equal(sorted(G.edges_iter()),[(0,1),(0,2),(1,2)])
-        assert_equal(sorted(G.edges_iter(0)),[(0,1),(0,2)])
-        f=lambda x:list(G.edges_iter(x))
-        assert_raises((KeyError,networkx.NetworkXError), f, -1)
-
-    def test_adjacency_list(self):
-        G=self.K3
-        assert_equal(G.adjacency_list(),[[1,2],[0,2],[0,1]])
-
-    def test_degree(self):
-        G=self.K3
-        assert_equal(list(G.degree().values()),[2,2,2])
-        assert_equal(G.degree(),{0:2,1:2,2:2})
-        assert_equal(G.degree(0),2)
-        assert_equal(G.degree([0]),{0:2})
-        assert_raises((KeyError,networkx.NetworkXError), G.degree,-1)
-
-    def test_weighted_degree(self):
-        G=self.Graph()
-        G.add_edge(1,2,weight=2)
-        G.add_edge(2,3,weight=3)
-        assert_equal(list(G.degree(weight='weight').values()),[2,5,3])
-        assert_equal(G.degree(weight='weight'),{1:2,2:5,3:3})
-        assert_equal(G.degree(1,weight='weight'),2)
-        assert_equal(G.degree([1],weight='weight'),{1:2})
-
-    def test_degree_iter(self):
-        G=self.K3
-        assert_equal(list(G.degree_iter()),[(0,2),(1,2),(2,2)])
-        assert_equal(dict(G.degree_iter()),{0:2,1:2,2:2})
-        assert_equal(list(G.degree_iter(0)),[(0,2)])
-
-    def test_size(self):
-        G=self.K3
-        assert_equal(G.size(),3)
-        assert_equal(G.number_of_edges(),3)
-
-    def test_add_star(self):
-        G=self.K3.copy()
-        nlist=[12,13,14,15]
-        G.add_star(nlist)
-        assert_equal(sorted(G.edges(nlist)),[(12,13),(12,14),(12,15)])
-        G=self.K3.copy()
-        G.add_star(nlist,weight=2.0)
-        assert_equal(sorted(G.edges(nlist,data=True)),\
-                     [(12,13,{'weight':2.}),
-                      (12,14,{'weight':2.}),
-                      (12,15,{'weight':2.})])
-
-    def test_add_path(self):
-        G=self.K3.copy()
-        nlist=[12,13,14,15]
-        G.add_path(nlist)
-        assert_equal(sorted(G.edges(nlist)),[(12,13),(13,14),(14,15)])
-        G=self.K3.copy()
-        G.add_path(nlist,weight=2.0)
-        assert_equal(sorted(G.edges(nlist,data=True)),\
-                     [(12,13,{'weight':2.}),
-                      (13,14,{'weight':2.}),
-                      (14,15,{'weight':2.})])
-
-    def test_add_cycle(self):
-        G=self.K3.copy()
-        nlist=[12,13,14,15]
-        oklists=[ [(12,13),(12,15),(13,14),(14,15)], \
-                      [(12,13),(13,14),(14,15),(15,12)] ]
-        G.add_cycle(nlist)
-        assert_true(sorted(G.edges(nlist)) in oklists)
-        G=self.K3.copy()
-        oklists=[ [(12,13,{'weight':1.}),\
-                (12,15,{'weight':1.}),\
-                (13,14,{'weight':1.}),\
-                (14,15,{'weight':1.})], \
-                \
-                [(12,13,{'weight':1.}),\
-                (13,14,{'weight':1.}),\
-                (14,15,{'weight':1.}),\
-                (15,12,{'weight':1.})] \
-                ]
-
-        G.add_cycle(nlist,weight=1.0)
-        assert_true(sorted(G.edges(nlist,data=True)) in oklists)
-
-    def test_nbunch_iter(self):
-        G=self.K3
-        assert_equal(list(G.nbunch_iter()),self.k3nodes) # all nodes
-        assert_equal(list(G.nbunch_iter(0)),[0]) # single node
-        assert_equal(list(G.nbunch_iter([0,1])),[0,1]) # sequence
-        # sequence with none in graph
-        assert_equal(list(G.nbunch_iter([-1])),[])
-        # string sequence with none in graph
-        assert_equal(list(G.nbunch_iter("foo")),[])
-        # node not in graph doesn't get caught upon creation of iterator
-        bunch=G.nbunch_iter(-1)
-        # but gets caught when iterator used
-        assert_raises(networkx.NetworkXError,list,bunch)
-        # unhashable doesn't get caught upon creation of iterator
-        bunch=G.nbunch_iter([0,1,2,{}])
-        # but gets caught when iterator hits the unhashable
-        assert_raises(networkx.NetworkXError,list,bunch)
-
-    def test_selfloop_degree(self):
-        G=self.Graph()
-        G.add_edge(1,1)
-        assert_equal(list(G.degree().values()),[2])
-        assert_equal(G.degree(),{1:2})
-        assert_equal(G.degree(1),2)
-        assert_equal(G.degree([1]),{1:2})
-        assert_equal(G.degree([1],weight='weight'),{1:2})
-
-    def test_selfloops(self):
-        G=self.K3.copy()
-        G.add_edge(0,0)
-        assert_equal(G.nodes_with_selfloops(),[0])
-        assert_equal(G.selfloop_edges(),[(0,0)])
-        assert_equal(G.number_of_selfloops(),1)
-        G.remove_edge(0,0)
-        G.add_edge(0,0)
-        G.remove_edges_from([(0,0)])
-        G.add_edge(1,1)
-        G.remove_node(1)
-        G.add_edge(0,0)
-        G.add_edge(1,1)
-        G.remove_nodes_from([0,1])
-
-
-class BaseAttrGraphTester(BaseGraphTester):
-    """ Tests of graph class attribute features."""
-    def test_weighted_degree(self):
-        G=self.Graph()
-        G.add_edge(1,2,weight=2,other=3)
-        G.add_edge(2,3,weight=3,other=4)
-        assert_equal(list(G.degree(weight='weight').values()),[2,5,3])
-        assert_equal(G.degree(weight='weight'),{1:2,2:5,3:3})
-        assert_equal(G.degree(1,weight='weight'),2)
-        assert_equal(G.degree([1],weight='weight'),{1:2})
-
-        assert_equal(list(G.degree(weight='other').values()),[3,7,4])
-        assert_equal(G.degree(weight='other'),{1:3,2:7,3:4})
-        assert_equal(G.degree(1,weight='other'),3)
-        assert_equal(G.degree([1],weight='other'),{1:3})
-
-    def add_attributes(self,G):
-        G.graph['foo']=[]
-        G.node[0]['foo']=[]
-        G.remove_edge(1,2)
-        ll=[]
-        G.add_edge(1,2,foo=ll)
-        G.add_edge(2,1,foo=ll)
-        # attr_dict must be dict
-        assert_raises(networkx.NetworkXError,G.add_edge,0,1,attr_dict=[])
-
-    def test_name(self):
-        G=self.Graph(name='')
-        assert_equal(G.name,"")
-        G=self.Graph(name='test')
-        assert_equal(G.__str__(),"test")
-        assert_equal(G.name,"test")
-
-    def test_copy(self):
-        G=self.K3
-        self.add_attributes(G)
-        H=G.copy()
-        self.is_deepcopy(H,G)
-        H=G.__class__(G)
-        self.is_shallow_copy(H,G)
-
-    def test_copy_attr(self):
-        G=self.Graph(foo=[])
-        G.add_node(0,foo=[])
-        G.add_edge(1,2,foo=[])
-        H=G.copy()
-        self.is_deepcopy(H,G)
-        H=G.__class__(G) # just copy
-        self.is_shallow_copy(H,G)
-
-    def is_deepcopy(self,H,G):
-        self.graphs_equal(H,G)
-        self.different_attrdict(H,G)
-        self.deep_copy_attrdict(H,G)
-
-    def deep_copy_attrdict(self,H,G):
-        self.deepcopy_graph_attr(H,G)
-        self.deepcopy_node_attr(H,G)
-        self.deepcopy_edge_attr(H,G)
-
-    def deepcopy_graph_attr(self,H,G):
-        assert_equal(G.graph['foo'],H.graph['foo'])
-        G.graph['foo'].append(1)
-        assert_not_equal(G.graph['foo'],H.graph['foo'])
-
-    def deepcopy_node_attr(self,H,G):
-        assert_equal(G.node[0]['foo'],H.node[0]['foo'])
-        G.node[0]['foo'].append(1)
-        assert_not_equal(G.node[0]['foo'],H.node[0]['foo'])
-
-    def deepcopy_edge_attr(self,H,G):
-        assert_equal(G[1][2]['foo'],H[1][2]['foo'])
-        G[1][2]['foo'].append(1)
-        assert_not_equal(G[1][2]['foo'],H[1][2]['foo'])
-
-    def is_shallow_copy(self,H,G):
-        self.graphs_equal(H,G)
-        self.different_attrdict(H,G)
-        self.shallow_copy_attrdict(H,G)
-
-    def shallow_copy_attrdict(self,H,G):
-        self.shallow_copy_graph_attr(H,G)
-        self.shallow_copy_node_attr(H,G)
-        self.shallow_copy_edge_attr(H,G)
-
-    def shallow_copy_graph_attr(self,H,G):
-        assert_equal(G.graph['foo'],H.graph['foo'])
-        G.graph['foo'].append(1)
-        assert_equal(G.graph['foo'],H.graph['foo'])
-
-    def shallow_copy_node_attr(self,H,G):
-        assert_equal(G.node[0]['foo'],H.node[0]['foo'])
-        G.node[0]['foo'].append(1)
-        assert_equal(G.node[0]['foo'],H.node[0]['foo'])
-
-    def shallow_copy_edge_attr(self,H,G):
-        assert_equal(G[1][2]['foo'],H[1][2]['foo'])
-        G[1][2]['foo'].append(1)
-        assert_equal(G[1][2]['foo'],H[1][2]['foo'])
-
-    def same_attrdict(self, H, G):
-        old_foo=H[1][2]['foo']
-        H.add_edge(1,2,foo='baz')
-        assert_equal(G.edge,H.edge)
-        H.add_edge(1,2,foo=old_foo)
-        assert_equal(G.edge,H.edge)
-        old_foo=H.node[0]['foo']
-        H.node[0]['foo']='baz'
-        assert_equal(G.node,H.node)
-        H.node[0]['foo']=old_foo
-        assert_equal(G.node,H.node)
-
-    def different_attrdict(self, H, G):
-        old_foo=H[1][2]['foo']
-        H.add_edge(1,2,foo='baz')
-        assert_not_equal(G.edge,H.edge)
-        H.add_edge(1,2,foo=old_foo)
-        assert_equal(G.edge,H.edge)
-        old_foo=H.node[0]['foo']
-        H.node[0]['foo']='baz'
-        assert_not_equal(G.node,H.node)
-        H.node[0]['foo']=old_foo
-        assert_equal(G.node,H.node)
-
-    def graphs_equal(self,H,G):
-        assert_equal(G.adj,H.adj)
-        assert_equal(G.edge,H.edge)
-        assert_equal(G.node,H.node)
-        assert_equal(G.graph,H.graph)
-        assert_equal(G.name,H.name)
-        if not G.is_directed() and not H.is_directed():
-                assert_true(H.adj[1][2] is H.adj[2][1])
-                assert_true(G.adj[1][2] is G.adj[2][1])
-        else: # at least one is directed
-            if not G.is_directed():
-                G.pred=G.adj
-                G.succ=G.adj
-            if not H.is_directed():
-                H.pred=H.adj
-                H.succ=H.adj
-            assert_equal(G.pred,H.pred)
-            assert_equal(G.succ,H.succ)
-            assert_true(H.succ[1][2] is H.pred[2][1])
-            assert_true(G.succ[1][2] is G.pred[2][1])
-
-    def test_graph_attr(self):
-        G=self.K3
-        G.graph['foo']='bar'
-        assert_equal(G.graph['foo'], 'bar')
-        del G.graph['foo']
-        assert_equal(G.graph, {})
-        H=self.Graph(foo='bar')
-        assert_equal(H.graph['foo'], 'bar')
-
-    def test_node_attr(self):
-        G=self.K3
-        G.add_node(1,foo='bar')
-        assert_equal(G.nodes(), [0,1,2])
-        assert_equal(G.nodes(data=True), [(0,{}),(1,{'foo':'bar'}),(2,{})])
-        G.node[1]['foo']='baz'
-        assert_equal(G.nodes(data=True), [(0,{}),(1,{'foo':'baz'}),(2,{})])
-
-    def test_node_attr2(self):
-        G=self.K3
-        a={'foo':'bar'}
-        G.add_node(3,attr_dict=a)
-        assert_equal(G.nodes(), [0,1,2,3])
-        assert_equal(G.nodes(data=True),
-                     [(0,{}),(1,{}),(2,{}),(3,{'foo':'bar'})])
-
-    def test_edge_attr(self):
-        G=self.Graph()
-        G.add_edge(1,2,foo='bar')
-        assert_equal(G.edges(data=True), [(1,2,{'foo':'bar'})])
-
-    def test_edge_attr2(self):
-        G=self.Graph()
-        G.add_edges_from([(1,2),(3,4)],foo='foo')
-        assert_equal(sorted(G.edges(data=True)),
-                     [(1,2,{'foo':'foo'}),(3,4,{'foo':'foo'})])
-
-    def test_edge_attr3(self):
-        G=self.Graph()
-        G.add_edges_from([(1,2,{'weight':32}),(3,4,{'weight':64})],foo='foo')
-        assert_equal(G.edges(data=True),
-                     [(1,2,{'foo':'foo','weight':32}),\
-                      (3,4,{'foo':'foo','weight':64})])
-
-        G.remove_edges_from([(1,2),(3,4)])
-        G.add_edge(1,2,data=7,spam='bar',bar='foo')
-        assert_equal(G.edges(data=True),
-                      [(1,2,{'data':7,'spam':'bar','bar':'foo'})])
-
-    def test_edge_attr4(self):
-        G=self.Graph()
-        G.add_edge(1,2,data=7,spam='bar',bar='foo')
-        assert_equal(G.edges(data=True),
-                      [(1,2,{'data':7,'spam':'bar','bar':'foo'})])
-        G[1][2]['data']=10 # OK to set data like this
-        assert_equal(G.edges(data=True),
-                     [(1,2,{'data':10,'spam':'bar','bar':'foo'})])
-
-        G.edge[1][2]['data']=20 # another spelling, "edge"
-        assert_equal(G.edges(data=True),
-                      [(1,2,{'data':20,'spam':'bar','bar':'foo'})])
-        G.edge[1][2]['listdata']=[20,200]
-        G.edge[1][2]['weight']=20
-        assert_equal(G.edges(data=True),
-                     [(1,2,{'data':20,'spam':'bar',
-                            'bar':'foo','listdata':[20,200],'weight':20})])
-
-    def test_attr_dict_not_dict(self):
-        # attr_dict must be dict
-        G=self.Graph()
-        edges=[(1,2)]
-        assert_raises(networkx.NetworkXError,G.add_edges_from,edges,
-                      attr_dict=[])
-
-    def test_to_undirected(self):
-        G=self.K3
-        self.add_attributes(G)
-        H=networkx.Graph(G)
-        self.is_shallow_copy(H,G)
-        H=G.to_undirected()
-        self.is_deepcopy(H,G)
-
-    def test_to_directed(self):
-        G=self.K3
-        self.add_attributes(G)
-        H=networkx.DiGraph(G)
-        self.is_shallow_copy(H,G)
-        H=G.to_directed()
-        self.is_deepcopy(H,G)
-
-    def test_subgraph(self):
-        G=self.K3
-        self.add_attributes(G)
-        H=G.subgraph([0,1,2,5])
-#        assert_equal(H.name, 'Subgraph of ('+G.name+')')
-        H.name=G.name
-        self.graphs_equal(H,G)
-        self.same_attrdict(H,G)
-        self.shallow_copy_attrdict(H,G)
-
-        H=G.subgraph(0)
-        assert_equal(H.adj,{0:{}})
-        H=G.subgraph([])
-        assert_equal(H.adj,{})
-        assert_not_equal(G.adj,{})
-
-    def test_selfloops_attr(self):
-        G=self.K3.copy()
-        G.add_edge(0,0)
-        G.add_edge(1,1,weight=2)
-        assert_equal(G.selfloop_edges(data=True),
-                [(0,0,{}),(1,1,{'weight':2})])
-
-
-class TestGraph(BaseAttrGraphTester):
-    """Tests specific to dict-of-dict-of-dict graph data structure"""
-    def setUp(self):
-        self.Graph=networkx.Graph
-        # build dict-of-dict-of-dict K3
-        ed1,ed2,ed3 = ({},{},{})
-        self.k3adj={0: {1: ed1, 2: ed2},
-                    1: {0: ed1, 2: ed3},
-                    2: {0: ed2, 1: ed3}}
-        self.k3edges=[(0, 1), (0, 2), (1, 2)]
-        self.k3nodes=[0, 1, 2]
-        self.K3=self.Graph()
-        self.K3.adj=self.K3.edge=self.k3adj
-        self.K3.node={}
-        self.K3.node[0]={}
-        self.K3.node[1]={}
-        self.K3.node[2]={}
-
-    def test_data_input(self):
-        G=self.Graph(data={1:[2],2:[1]}, name="test")
-        assert_equal(G.name,"test")
-        assert_equal(sorted(G.adj.items()),[(1, {2: {}}), (2, {1: {}})])
-        G=self.Graph({1:[2],2:[1]}, name="test")
-        assert_equal(G.name,"test")
-        assert_equal(sorted(G.adj.items()),[(1, {2: {}}), (2, {1: {}})])
-
-    def test_adjacency_iter(self):
-        G=self.K3
-        assert_equal(dict(G.adjacency_iter()),
-                {0: {1: {}, 2: {}}, 1: {0: {}, 2: {}}, 2: {0: {}, 1: {}}})
-
-    def test_getitem(self):
-        G=self.K3
-        assert_equal(G[0],{1: {}, 2: {}})
-        assert_raises(KeyError, G.__getitem__, 'j')
-        assert_raises((TypeError,networkx.NetworkXError), G.__getitem__, ['A'])
-
-    def test_add_node(self):
-        G=self.Graph()
-        G.add_node(0)
-        assert_equal(G.adj,{0:{}})
-        # test add attributes
-        G.add_node(1,c='red')
-        G.add_node(2,{'c':'blue'})
-        G.add_node(3,{'c':'blue'},c='red')
-        assert_raises(networkx.NetworkXError, G.add_node, 4, [])
-        assert_raises(networkx.NetworkXError, G.add_node, 4, 4)
-        assert_equal(G.node[1]['c'],'red')
-        assert_equal(G.node[2]['c'],'blue')
-        assert_equal(G.node[3]['c'],'red')
-        # test updating attributes
-        G.add_node(1,c='blue')
-        G.add_node(2,{'c':'red'})
-        G.add_node(3,{'c':'red'},c='blue')
-        assert_equal(G.node[1]['c'],'blue')
-        assert_equal(G.node[2]['c'],'red')
-        assert_equal(G.node[3]['c'],'blue')
-
-    def test_add_nodes_from(self):
-        G=self.Graph()
-        G.add_nodes_from([0,1,2])
-        assert_equal(G.adj,{0:{},1:{},2:{}})
-        # test add attributes
-        G.add_nodes_from([0,1,2],c='red')
-        assert_equal(G.node[0]['c'],'red')
-        assert_equal(G.node[2]['c'],'red')
-        # test that attribute dicts are not the same
-        assert(G.node[0] is not G.node[1])
-        # test updating attributes
-        G.add_nodes_from([0,1,2],c='blue')
-        assert_equal(G.node[0]['c'],'blue')
-        assert_equal(G.node[2]['c'],'blue')
-        assert(G.node[0] is not G.node[1])
-        # test tuple input
-        H=self.Graph()
-        H.add_nodes_from(G.nodes(data=True))
-        assert_equal(H.node[0]['c'],'blue')
-        assert_equal(H.node[2]['c'],'blue')
-        assert(H.node[0] is not H.node[1])
-        # specific overrides general
-        H.add_nodes_from([0,(1,{'c':'green'}),(3,{'c':'cyan'})],c='red')
-        assert_equal(H.node[0]['c'],'red')
-        assert_equal(H.node[1]['c'],'green')
-        assert_equal(H.node[2]['c'],'blue')
-        assert_equal(H.node[3]['c'],'cyan')
-
-    def test_remove_node(self):
-        G=self.K3
-        G.remove_node(0)
-        assert_equal(G.adj,{1:{2:{}},2:{1:{}}})
-        assert_raises((KeyError,networkx.NetworkXError), G.remove_node,-1)
-
-        # generator here to implement list,set,string...
-    def test_remove_nodes_from(self):
-        G=self.K3
-        G.remove_nodes_from([0,1])
-        assert_equal(G.adj,{2:{}})
-        G.remove_nodes_from([-1]) # silent fail
-
-    def test_add_edge(self):
-        G=self.Graph()
-        G.add_edge(0,1)
-        assert_equal(G.adj,{0: {1: {}}, 1: {0: {}}})
-        G=self.Graph()
-        G.add_edge(*(0,1))
-        assert_equal(G.adj,{0: {1: {}}, 1: {0: {}}})
-
-    def test_add_edges_from(self):
-        G=self.Graph()
-        G.add_edges_from([(0,1),(0,2,{'weight':3})])
-        assert_equal(G.adj,{0: {1:{}, 2:{'weight':3}}, 1: {0:{}}, \
-                2:{0:{'weight':3}}})
-        G=self.Graph()
-        G.add_edges_from([(0,1),(0,2,{'weight':3}),(1,2,{'data':4})],data=2)
-        assert_equal(G.adj,{\
-                0: {1:{'data':2}, 2:{'weight':3,'data':2}}, \
-                1: {0:{'data':2}, 2:{'data':4}}, \
-                2: {0:{'weight':3,'data':2}, 1:{'data':4}} \
-                })
-
-        assert_raises(networkx.NetworkXError,
-                      G.add_edges_from,[(0,)])  # too few in tuple
-        assert_raises(networkx.NetworkXError,
-                      G.add_edges_from,[(0,1,2,3)])  # too many in tuple
-        assert_raises(TypeError, G.add_edges_from,[0])  # not a tuple
-
-
-    def test_remove_edge(self):
-        G=self.K3
-        G.remove_edge(0,1)
-        assert_equal(G.adj,{0:{2:{}},1:{2:{}},2:{0:{},1:{}}})
-        assert_raises((KeyError,networkx.NetworkXError), G.remove_edge,-1,0)
-
-    def test_remove_edges_from(self):
-        G=self.K3
-        G.remove_edges_from([(0,1)])
-        assert_equal(G.adj,{0:{2:{}},1:{2:{}},2:{0:{},1:{}}})
-        G.remove_edges_from([(0,0)]) # silent fail
-
-    def test_clear(self):
-        G=self.K3
-        G.clear()
-        assert_equal(G.adj,{})
-
-    def test_edges_data(self):
-        G=self.K3
-        assert_equal(sorted(G.edges(data=True)),[(0,1,{}),(0,2,{}),(1,2,{})])
-        assert_equal(sorted(G.edges(0,data=True)),[(0,1,{}),(0,2,{})])
-        assert_raises((KeyError,networkx.NetworkXError), G.edges,-1)
-
-
-    def test_get_edge_data(self):
-        G=self.K3
-        assert_equal(G.get_edge_data(0,1),{})
-        assert_equal(G[0][1],{})
-        assert_equal(G.get_edge_data(10,20),None)
-        assert_equal(G.get_edge_data(-1,0),None)
-        assert_equal(G.get_edge_data(-1,0,default=1),1)
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/classes/tests/test_graph_historical.py b/lib/python2.7/site-packages/setoolsgui/networkx/classes/tests/test_graph_historical.py
deleted file mode 100644
index 0ade19a..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/classes/tests/test_graph_historical.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#!/usr/bin/env python
-"""Original NetworkX graph tests"""
-from nose.tools import *
-import networkx
-import networkx as nx
-
-from historical_tests import HistoricalTests
-
-class TestGraphHistorical(HistoricalTests):
-
-    def setUp(self):
-        HistoricalTests.setUp(self)
-        self.G=nx.Graph
-
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/classes/tests/test_multidigraph.py b/lib/python2.7/site-packages/setoolsgui/networkx/classes/tests/test_multidigraph.py
deleted file mode 100644
index e8c2543..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/classes/tests/test_multidigraph.py
+++ /dev/null
@@ -1,327 +0,0 @@
-#!/usr/bin/env python
-from nose.tools import *
-import networkx
-from test_multigraph import BaseMultiGraphTester, TestMultiGraph
-
-class BaseMultiDiGraphTester(BaseMultiGraphTester):
-    def test_edges(self):
-        G=self.K3
-        assert_equal(sorted(G.edges()),[(0,1),(0,2),(1,0),(1,2),(2,0),(2,1)])
-        assert_equal(sorted(G.edges(0)),[(0,1),(0,2)])
-        assert_raises((KeyError,networkx.NetworkXError), G.edges,-1)
-
-    def test_edges_data(self):
-        G=self.K3
-        assert_equal(sorted(G.edges(data=True)),
-                     [(0,1,{}),(0,2,{}),(1,0,{}),(1,2,{}),(2,0,{}),(2,1,{})])
-        assert_equal(sorted(G.edges(0,data=True)),[(0,1,{}),(0,2,{})])
-        assert_raises((KeyError,networkx.NetworkXError), G.neighbors,-1)
-
-
-    def test_edges_iter(self):
-        G=self.K3
-        assert_equal(sorted(G.edges_iter()),
-                     [(0,1),(0,2),(1,0),(1,2),(2,0),(2,1)])
-        assert_equal(sorted(G.edges_iter(0)),[(0,1),(0,2)])
-        G.add_edge(0,1)
-        assert_equal(sorted(G.edges_iter()),
-                     [(0,1),(0,1),(0,2),(1,0),(1,2),(2,0),(2,1)])
-
-    def test_out_edges(self):
-        G=self.K3
-        assert_equal(sorted(G.out_edges()),
-                     [(0,1),(0,2),(1,0),(1,2),(2,0),(2,1)])
-        assert_equal(sorted(G.out_edges(0)),[(0,1),(0,2)])
-        assert_raises((KeyError,networkx.NetworkXError), G.out_edges,-1)
-        assert_equal(sorted(G.out_edges(0,keys=True)),[(0,1,0),(0,2,0)])
-
-    def test_out_edges_iter(self):
-        G=self.K3
-        assert_equal(sorted(G.out_edges_iter()),
-                     [(0,1),(0,2),(1,0),(1,2),(2,0),(2,1)])
-        assert_equal(sorted(G.out_edges_iter(0)),[(0,1),(0,2)])
-        G.add_edge(0,1,2)
-        assert_equal(sorted(G.out_edges_iter()),
-                     [(0,1),(0,1),(0,2),(1,0),(1,2),(2,0),(2,1)])
-
-    def test_in_edges(self):
-        G=self.K3
-        assert_equal(sorted(G.in_edges()),
-                     [(0,1),(0,2),(1,0),(1,2),(2,0),(2,1)])
-        assert_equal(sorted(G.in_edges(0)),[(1,0),(2,0)])
-        assert_raises((KeyError,networkx.NetworkXError), G.in_edges,-1)
-        G.add_edge(0,1,2)
-        assert_equal(sorted(G.in_edges()),
-                     [(0,1),(0,1),(0,2),(1,0),(1,2),(2,0),(2,1)])
-        assert_equal(sorted(G.in_edges(0,keys=True)),[(1,0,0),(2,0,0)])
-
-    def test_in_edges_iter(self):
-        G=self.K3
-        assert_equal(sorted(G.in_edges_iter()),
-                     [(0,1),(0,2),(1,0),(1,2),(2,0),(2,1)])
-        assert_equal(sorted(G.in_edges_iter(0)),[(1,0),(2,0)])
-        G.add_edge(0,1,2)
-        assert_equal(sorted(G.in_edges_iter()),
-                     [(0,1),(0,1),(0,2),(1,0),(1,2),(2,0),(2,1)])
-
-        assert_equal(sorted(G.in_edges_iter(data=True,keys=False)),
-                     [(0,1,{}),(0,1,{}),(0,2,{}),(1,0,{}),(1,2,{}),
-                      (2,0,{}),(2,1,{})])
-
-
-    def is_shallow(self,H,G):
-        # graph
-        assert_equal(G.graph['foo'],H.graph['foo'])
-        G.graph['foo'].append(1)
-        assert_equal(G.graph['foo'],H.graph['foo'])
-        # node
-        assert_equal(G.node[0]['foo'],H.node[0]['foo'])
-        G.node[0]['foo'].append(1)
-        assert_equal(G.node[0]['foo'],H.node[0]['foo'])
-        # edge
-        assert_equal(G[1][2][0]['foo'],H[1][2][0]['foo'])
-        G[1][2][0]['foo'].append(1)
-        assert_equal(G[1][2][0]['foo'],H[1][2][0]['foo'])
-
-    def is_deep(self,H,G):
-        # graph
-        assert_equal(G.graph['foo'],H.graph['foo'])
-        G.graph['foo'].append(1)
-        assert_not_equal(G.graph['foo'],H.graph['foo'])
-        # node
-        assert_equal(G.node[0]['foo'],H.node[0]['foo'])
-        G.node[0]['foo'].append(1)
-        assert_not_equal(G.node[0]['foo'],H.node[0]['foo'])
-        # edge
-        assert_equal(G[1][2][0]['foo'],H[1][2][0]['foo'])
-        G[1][2][0]['foo'].append(1)
-        assert_not_equal(G[1][2][0]['foo'],H[1][2][0]['foo'])
-
-    def test_to_undirected(self):
-        # MultiDiGraph -> MultiGraph changes number of edges so it is
-        # not a copy operation... use is_shallow, not is_shallow_copy
-        G=self.K3
-        self.add_attributes(G)
-        H=networkx.MultiGraph(G)
-        self.is_shallow(H,G)
-        H=G.to_undirected()
-        self.is_deep(H,G)
-
-    def test_has_successor(self):
-        G=self.K3
-        assert_equal(G.has_successor(0,1),True)
-        assert_equal(G.has_successor(0,-1),False)
-
-    def test_successors(self):
-        G=self.K3
-        assert_equal(sorted(G.successors(0)),[1,2])
-        assert_raises((KeyError,networkx.NetworkXError), G.successors,-1)
-
-    def test_successors_iter(self):
-        G=self.K3
-        assert_equal(sorted(G.successors_iter(0)),[1,2])
-        assert_raises((KeyError,networkx.NetworkXError), G.successors_iter,-1)
-
-    def test_has_predecessor(self):
-        G=self.K3
-        assert_equal(G.has_predecessor(0,1),True)
-        assert_equal(G.has_predecessor(0,-1),False)
-
-    def test_predecessors(self):
-        G=self.K3
-        assert_equal(sorted(G.predecessors(0)),[1,2])
-        assert_raises((KeyError,networkx.NetworkXError), G.predecessors,-1)
-
-    def test_predecessors_iter(self):
-        G=self.K3
-        assert_equal(sorted(G.predecessors_iter(0)),[1,2])
-        assert_raises((KeyError,networkx.NetworkXError), G.predecessors_iter,-1)
-
-
-    def test_degree(self):
-        G=self.K3
-        assert_equal(list(G.degree().values()),[4,4,4])
-        assert_equal(G.degree(),{0:4,1:4,2:4})
-        assert_equal(G.degree(0),4)
-        assert_equal(G.degree([0]),{0:4})
-        assert_raises((KeyError,networkx.NetworkXError), G.degree,-1)
-
-    def test_degree_iter(self):
-        G=self.K3
-        assert_equal(list(G.degree_iter()),[(0,4),(1,4),(2,4)])
-        assert_equal(dict(G.degree_iter()),{0:4,1:4,2:4})
-        assert_equal(list(G.degree_iter(0)),[(0,4)])
-        G.add_edge(0,1,weight=0.3,other=1.2)
-        assert_equal(list(G.degree_iter(weight='weight')),[(0,4.3),(1,4.3),(2,4)])
-        assert_equal(list(G.degree_iter(weight='other')),[(0,5.2),(1,5.2),(2,4)])
-
-
-    def test_in_degree(self):
-        G=self.K3
-        assert_equal(list(G.in_degree().values()),[2,2,2])
-        assert_equal(G.in_degree(),{0:2,1:2,2:2})
-        assert_equal(G.in_degree(0),2)
-        assert_equal(G.in_degree([0]),{0:2})
-        assert_raises((KeyError,networkx.NetworkXError), G.in_degree,-1)
-
-    def test_in_degree_iter(self):
-        G=self.K3
-        assert_equal(list(G.in_degree_iter()),[(0,2),(1,2),(2,2)])
-        assert_equal(dict(G.in_degree_iter()),{0:2,1:2,2:2})
-        assert_equal(list(G.in_degree_iter(0)),[(0,2)])
-        assert_equal(list(G.in_degree_iter(0,weight='weight')),[(0,2)])
-
-    def test_out_degree(self):
-        G=self.K3
-        assert_equal(list(G.out_degree().values()),[2,2,2])
-        assert_equal(G.out_degree(),{0:2,1:2,2:2})
-        assert_equal(G.out_degree(0),2)
-        assert_equal(G.out_degree([0]),{0:2})
-        assert_raises((KeyError,networkx.NetworkXError), G.out_degree,-1)
-
-    def test_out_degree_iter(self):
-        G=self.K3
-        assert_equal(list(G.out_degree_iter()),[(0,2),(1,2),(2,2)])
-        assert_equal(dict(G.out_degree_iter()),{0:2,1:2,2:2})
-        assert_equal(list(G.out_degree_iter(0)),[(0,2)])
-        assert_equal(list(G.out_degree_iter(0,weight='weight')),[(0,2)])
-
-
-    def test_size(self):
-        G=self.K3
-        assert_equal(G.size(),6)
-        assert_equal(G.number_of_edges(),6)
-        G.add_edge(0,1,weight=0.3,other=1.2)
-        assert_equal(G.size(weight='weight'),6.3)
-        assert_equal(G.size(weight='other'),7.2)
-
-    def test_to_undirected_reciprocal(self):
-        G=self.Graph()
-        G.add_edge(1,2)
-        assert_true(G.to_undirected().has_edge(1,2))
-        assert_false(G.to_undirected(reciprocal=True).has_edge(1,2))
-        G.add_edge(2,1)
-        assert_true(G.to_undirected(reciprocal=True).has_edge(1,2))
-
-    def test_reverse_copy(self):
-        G=networkx.MultiDiGraph([(0,1),(0,1)])
-        R=G.reverse()
-        assert_equal(sorted(R.edges()),[(1,0),(1,0)])
-        R.remove_edge(1,0)
-        assert_equal(sorted(R.edges()),[(1,0)])
-        assert_equal(sorted(G.edges()),[(0,1),(0,1)])
-
-    def test_reverse_nocopy(self):
-        G=networkx.MultiDiGraph([(0,1),(0,1)])
-        R=G.reverse(copy=False)
-        assert_equal(sorted(R.edges()),[(1,0),(1,0)])
-        R.remove_edge(1,0)
-        assert_equal(sorted(R.edges()),[(1,0)])
-        assert_equal(sorted(G.edges()),[(1,0)])
-
-
-class TestMultiDiGraph(BaseMultiDiGraphTester,TestMultiGraph):
-    def setUp(self):
-        self.Graph=networkx.MultiDiGraph
-        # build K3
-        self.k3edges=[(0, 1), (0, 2), (1, 2)]
-        self.k3nodes=[0, 1, 2]
-        self.K3=self.Graph()
-        self.K3.adj={0:{},1:{},2:{}}
-        self.K3.succ=self.K3.adj
-        self.K3.pred={0:{},1:{},2:{}}
-        for u in self.k3nodes:
-            for v in self.k3nodes:
-                if u==v: continue
-                d={0:{}}
-                self.K3.succ[u][v]=d
-                self.K3.pred[v][u]=d
-        self.K3.adj=self.K3.succ
-        self.K3.edge=self.K3.adj
-        self.K3.node={}
-        self.K3.node[0]={}
-        self.K3.node[1]={}
-        self.K3.node[2]={}
-
-
-    def test_add_edge(self):
-        G=self.Graph()
-        G.add_edge(0,1)
-        assert_equal(G.adj,{0: {1: {0:{}}}, 1: {}})
-        assert_equal(G.succ,{0: {1: {0:{}}}, 1: {}})
-        assert_equal(G.pred,{0: {}, 1: {0:{0:{}}}})
-        G=self.Graph()
-        G.add_edge(*(0,1))
-        assert_equal(G.adj,{0: {1: {0:{}}}, 1: {}})
-        assert_equal(G.succ,{0: {1: {0:{}}}, 1: {}})
-        assert_equal(G.pred,{0: {}, 1: {0:{0:{}}}})
-
-    def test_add_edges_from(self):
-        G=self.Graph()
-        G.add_edges_from([(0,1),(0,1,{'weight':3})])
-        assert_equal(G.adj,{0: {1: {0:{},1:{'weight':3}}}, 1: {}})
-        assert_equal(G.succ,{0: {1: {0:{},1:{'weight':3}}}, 1: {}})
-        assert_equal(G.pred,{0: {}, 1: {0:{0:{},1:{'weight':3}}}})
-
-        G.add_edges_from([(0,1),(0,1,{'weight':3})],weight=2)
-        assert_equal(G.succ,{0: {1: {0:{},
-                                     1:{'weight':3},
-                                     2:{'weight':2},
-                                     3:{'weight':3}}},
-                             1: {}})
-        assert_equal(G.pred,{0: {}, 1: {0:{0:{},1:{'weight':3},
-                                           2:{'weight':2},
-                                           3:{'weight':3}}}})
-
-        assert_raises(networkx.NetworkXError, G.add_edges_from,[(0,)])  # too few in tuple
-        assert_raises(networkx.NetworkXError, G.add_edges_from,[(0,1,2,3,4)])  # too many in tuple
-        assert_raises(TypeError, G.add_edges_from,[0])  # not a tuple
-
-    def test_remove_edge(self):
-        G=self.K3
-        G.remove_edge(0,1)
-        assert_equal(G.succ,{0:{2:{0:{}}},
-                             1:{0:{0:{}},2:{0:{}}},
-                             2:{0:{0:{}},1:{0:{}}}})
-        assert_equal(G.pred,{0:{1:{0:{}}, 2:{0:{}}},
-                             1:{2:{0:{}}},
-                             2:{0:{0:{}},1:{0:{}}}})
-        assert_raises((KeyError,networkx.NetworkXError), G.remove_edge,-1,0)
-        assert_raises((KeyError,networkx.NetworkXError), G.remove_edge,0,2,
-                      key=1)
-
-
-    def test_remove_multiedge(self):
-        G=self.K3
-        G.add_edge(0,1,key='parallel edge')
-        G.remove_edge(0,1,key='parallel edge')
-        assert_equal(G.adj,{0: {1: {0:{}}, 2: {0:{}}},
-                           1: {0: {0:{}}, 2: {0:{}}},
-                           2: {0: {0:{}}, 1: {0:{}}}})
-
-        assert_equal(G.succ,{0: {1: {0:{}}, 2: {0:{}}},
-                           1: {0: {0:{}}, 2: {0:{}}},
-                           2: {0: {0:{}}, 1: {0:{}}}})
-
-        assert_equal(G.pred,{0:{1: {0:{}},2:{0:{}}},
-                             1:{0:{0:{}},2:{0:{}}},
-                             2:{0:{0:{}},1:{0:{}}}})
-        G.remove_edge(0,1)
-        assert_equal(G.succ,{0:{2:{0:{}}},
-                             1:{0:{0:{}},2:{0:{}}},
-                             2:{0:{0:{}},1:{0:{}}}})
-        assert_equal(G.pred,{0:{1:{0:{}}, 2:{0:{}}},
-                             1:{2:{0:{}}},
-                             2:{0:{0:{}},1:{0:{}}}})
-        assert_raises((KeyError,networkx.NetworkXError), G.remove_edge,-1,0)
-
-    def test_remove_edges_from(self):
-        G=self.K3
-        G.remove_edges_from([(0,1)])
-        assert_equal(G.succ,{0:{2:{0:{}}},
-                             1:{0:{0:{}},2:{0:{}}},
-                             2:{0:{0:{}},1:{0:{}}}})
-        assert_equal(G.pred,{0:{1:{0:{}}, 2:{0:{}}},
-                             1:{2:{0:{}}},
-                             2:{0:{0:{}},1:{0:{}}}})
-        G.remove_edges_from([(0,0)]) # silent fail
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/classes/tests/test_multigraph.py b/lib/python2.7/site-packages/setoolsgui/networkx/classes/tests/test_multigraph.py
deleted file mode 100644
index 6c9adbc..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/classes/tests/test_multigraph.py
+++ /dev/null
@@ -1,244 +0,0 @@
-#!/usr/bin/env python
-from nose.tools import *
-import networkx
-from test_graph import BaseAttrGraphTester, TestGraph
-
-class BaseMultiGraphTester(BaseAttrGraphTester):
-    def test_has_edge(self):
-        G=self.K3
-        assert_equal(G.has_edge(0,1),True)
-        assert_equal(G.has_edge(0,-1),False)
-        assert_equal(G.has_edge(0,1,0),True)
-        assert_equal(G.has_edge(0,1,1),False)
-
-    def test_get_edge_data(self):
-        G=self.K3
-        assert_equal(G.get_edge_data(0,1),{0:{}})
-        assert_equal(G[0][1],{0:{}})
-        assert_equal(G[0][1][0],{})
-        assert_equal(G.get_edge_data(10,20),None)
-        assert_equal(G.get_edge_data(0,1,0),{})
-        
-
-    def test_adjacency_iter(self):
-        G=self.K3
-        assert_equal(dict(G.adjacency_iter()),
-                          {0: {1: {0:{}}, 2: {0:{}}},
-                           1: {0: {0:{}}, 2: {0:{}}},
-                           2: {0: {0:{}}, 1: {0:{}}}})
-
-    def deepcopy_edge_attr(self,H,G):
-        assert_equal(G[1][2][0]['foo'],H[1][2][0]['foo'])
-        G[1][2][0]['foo'].append(1)
-        assert_not_equal(G[1][2][0]['foo'],H[1][2][0]['foo'])
-
-    def shallow_copy_edge_attr(self,H,G):
-        assert_equal(G[1][2][0]['foo'],H[1][2][0]['foo'])
-        G[1][2][0]['foo'].append(1)
-        assert_equal(G[1][2][0]['foo'],H[1][2][0]['foo'])
-
-    def same_attrdict(self, H, G):
-        # same attrdict in the edgedata
-        old_foo=H[1][2][0]['foo']
-        H.add_edge(1,2,0,foo='baz')
-        assert_equal(G.edge,H.edge)
-        H.add_edge(1,2,0,foo=old_foo)
-        assert_equal(G.edge,H.edge)
-        # but not same edgedata dict
-        H.add_edge(1,2,foo='baz')
-        assert_not_equal(G.edge,H.edge)
-
-        old_foo=H.node[0]['foo']
-        H.node[0]['foo']='baz'
-        assert_equal(G.node,H.node)
-        H.node[0]['foo']=old_foo
-        assert_equal(G.node,H.node)
-
-    def different_attrdict(self, H, G):
-        # used by graph_equal_but_different
-        old_foo=H[1][2][0]['foo']
-        H.add_edge(1,2,0,foo='baz')
-        assert_not_equal(G.edge,H.edge)
-        H.add_edge(1,2,0,foo=old_foo)
-        assert_equal(G.edge,H.edge)
-        HH=H.copy()
-        H.add_edge(1,2,foo='baz')
-        assert_not_equal(G.edge,H.edge)
-        H=HH
-        old_foo=H.node[0]['foo']
-        H.node[0]['foo']='baz'
-        assert_not_equal(G.node,H.node)
-        H.node[0]['foo']=old_foo
-        assert_equal(G.node,H.node)
-
-    def test_to_undirected(self):
-        G=self.K3
-        self.add_attributes(G)
-        H=networkx.MultiGraph(G)
-        self.is_shallow_copy(H,G)
-        H=G.to_undirected()
-        self.is_deepcopy(H,G)
-
-    def test_to_directed(self):
-        G=self.K3
-        self.add_attributes(G)
-        H=networkx.MultiDiGraph(G)
-        self.is_shallow_copy(H,G)
-        H=G.to_directed()
-        self.is_deepcopy(H,G)
-
-    def test_selfloops(self):
-        G=self.K3
-        G.add_edge(0,0)
-        assert_equal(G.nodes_with_selfloops(),[0])
-        assert_equal(G.selfloop_edges(),[(0,0)])
-        assert_equal(G.selfloop_edges(data=True),[(0,0,{})])
-        assert_equal(G.number_of_selfloops(),1)
-
-    def test_selfloops2(self):
-        G=self.K3
-        G.add_edge(0,0)
-        G.add_edge(0,0)
-        G.add_edge(0,0,key='parallel edge')
-        G.remove_edge(0,0,key='parallel edge')
-        assert_equal(G.number_of_edges(0,0),2)
-        G.remove_edge(0,0)
-        assert_equal(G.number_of_edges(0,0),1)
-
-    def test_edge_attr4(self):
-        G=self.Graph()
-        G.add_edge(1,2,key=0,data=7,spam='bar',bar='foo')
-        assert_equal(G.edges(data=True),
-                      [(1,2,{'data':7,'spam':'bar','bar':'foo'})])
-        G[1][2][0]['data']=10 # OK to set data like this
-        assert_equal(G.edges(data=True),
-                     [(1,2,{'data':10,'spam':'bar','bar':'foo'})])
-
-        G.edge[1][2][0]['data']=20 # another spelling, "edge"
-        assert_equal(G.edges(data=True),
-                      [(1,2,{'data':20,'spam':'bar','bar':'foo'})])
-        G.edge[1][2][0]['listdata']=[20,200]
-        G.edge[1][2][0]['weight']=20
-        assert_equal(G.edges(data=True),
-                     [(1,2,{'data':20,'spam':'bar',
-                            'bar':'foo','listdata':[20,200],'weight':20})])
-
-
-class TestMultiGraph(BaseMultiGraphTester,TestGraph):
-    def setUp(self):
-        self.Graph=networkx.MultiGraph
-        # build K3
-        ed1,ed2,ed3 = ({0:{}},{0:{}},{0:{}})
-        self.k3adj={0: {1: ed1, 2: ed2},
-                    1: {0: ed1, 2: ed3},
-                    2: {0: ed2, 1: ed3}}
-        self.k3edges=[(0, 1), (0, 2), (1, 2)]
-        self.k3nodes=[0, 1, 2]
-        self.K3=self.Graph()
-        self.K3.adj = self.K3.edge = self.k3adj
-        self.K3.node={}
-        self.K3.node[0]={}
-        self.K3.node[1]={}
-        self.K3.node[2]={}
-
-    def test_data_input(self):
-        G=self.Graph(data={1:[2],2:[1]}, name="test")
-        assert_equal(G.name,"test")
-        assert_equal(sorted(G.adj.items()),[(1, {2: {0:{}}}), (2, {1: {0:{}}})])
-
-    def test_getitem(self):
-        G=self.K3
-        assert_equal(G[0],{1: {0:{}}, 2: {0:{}}})
-        assert_raises(KeyError, G.__getitem__, 'j')
-        assert_raises((TypeError,networkx.NetworkXError), G.__getitem__, ['A'])
-
-    def test_remove_node(self):
-        G=self.K3
-        G.remove_node(0)
-        assert_equal(G.adj,{1:{2:{0:{}}},2:{1:{0:{}}}})
-        assert_raises((KeyError,networkx.NetworkXError), G.remove_node,-1)
-
-    def test_add_edge(self):
-        G=self.Graph()
-        G.add_edge(0,1)
-        assert_equal(G.adj,{0: {1: {0:{}}}, 1: {0: {0:{}}}})
-        G=self.Graph()
-        G.add_edge(*(0,1))
-        assert_equal(G.adj,{0: {1: {0:{}}}, 1: {0: {0:{}}}})
-        
-    def test_add_edge_conflicting_key(self):
-        G=self.Graph()
-        G.add_edge(0,1,key=1)
-        G.add_edge(0,1)
-        assert_equal(G.number_of_edges(),2)
-        G=self.Graph()
-        G.add_edges_from([(0,1,1,{})])
-        G.add_edges_from([(0,1)])
-        assert_equal(G.number_of_edges(),2)
-        
-        
-
-    def test_add_edges_from(self):
-        G=self.Graph()
-        G.add_edges_from([(0,1),(0,1,{'weight':3})])
-        assert_equal(G.adj,{0: {1: {0:{},1:{'weight':3}}},
-                            1: {0: {0:{},1:{'weight':3}}}})
-        G.add_edges_from([(0,1),(0,1,{'weight':3})],weight=2)
-        assert_equal(G.adj,{0: {1: {0:{},1:{'weight':3},
-                                    2:{'weight':2},3:{'weight':3}}},
-                            1: {0: {0:{},1:{'weight':3},
-                                    2:{'weight':2},3:{'weight':3}}}})
-
-        # too few in tuple
-        assert_raises(networkx.NetworkXError, G.add_edges_from,[(0,)])
-        # too many in tuple
-        assert_raises(networkx.NetworkXError, G.add_edges_from,[(0,1,2,3,4)])
-        assert_raises(TypeError, G.add_edges_from,[0])  # not a tuple
-
-
-    def test_remove_edge(self):
-        G=self.K3
-        G.remove_edge(0,1)
-        assert_equal(G.adj,{0: {2: {0: {}}},
-                            1: {2: {0: {}}},
-                            2: {0: {0: {}},
-                                1: {0: {}}}})
-
-        assert_raises((KeyError,networkx.NetworkXError), G.remove_edge,-1,0)
-        assert_raises((KeyError,networkx.NetworkXError), G.remove_edge,0,2,
-                      key=1)
-        
-        
-
-    def test_remove_edges_from(self):
-        G=self.K3.copy()
-        G.remove_edges_from([(0,1)])
-        assert_equal(G.adj,{0:{2:{0:{}}},1:{2:{0:{}}},2:{0:{0:{}},1:{0:{}}}})
-        G.remove_edges_from([(0,0)]) # silent fail
-        self.K3.add_edge(0,1)
-        G=self.K3.copy()
-        G.remove_edges_from(G.edges(data=True,keys=True))
-        assert_equal(G.adj,{0:{},1:{},2:{}})
-        G=self.K3.copy()
-        G.remove_edges_from(G.edges(data=False,keys=True))
-        assert_equal(G.adj,{0:{},1:{},2:{}})
-        G=self.K3.copy()
-        G.remove_edges_from(G.edges(data=False,keys=False))
-        assert_equal(G.adj,{0:{},1:{},2:{}})
-        G=self.K3.copy()
-        G.remove_edges_from([(0,1,0),(0,2,0,{}),(1,2)])
-        assert_equal(G.adj,{0:{1:{1:{}}},1:{0:{1:{}}},2:{}})
-
-
-
-    def test_remove_multiedge(self):
-        G=self.K3
-        G.add_edge(0,1,key='parallel edge')
-        G.remove_edge(0,1,key='parallel edge')
-        assert_equal(G.adj,{0: {1: {0:{}}, 2: {0:{}}},
-                           1: {0: {0:{}}, 2: {0:{}}},
-                           2: {0: {0:{}}, 1: {0:{}}}})
-        G.remove_edge(0,1)
-        assert_equal(G.adj,{0:{2:{0:{}}},1:{2:{0:{}}},2:{0:{0:{}},1:{0:{}}}})
-        assert_raises((KeyError,networkx.NetworkXError), G.remove_edge,-1,0)
-
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/convert.py b/lib/python2.7/site-packages/setoolsgui/networkx/convert.py
deleted file mode 100644
index 6333b9f..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/convert.py
+++ /dev/null
@@ -1,847 +0,0 @@
-"""
-This module provides functions to convert 
-NetworkX graphs to and from other formats.
-
-The preferred way of converting data to a NetworkX graph 
-is through the graph constuctor.  The constructor calls
-the to_networkx_graph() function which attempts to guess the
-input type and convert it automatically.
-
-Examples
---------
-
-Create a 10 node random graph from a numpy matrix
-
->>> import numpy
->>> a=numpy.reshape(numpy.random.random_integers(0,1,size=100),(10,10))
->>> D=nx.DiGraph(a) 
-
-or equivalently
-
->>> D=nx.to_networkx_graph(a,create_using=nx.DiGraph()) 
-
-Create a graph with a single edge from a dictionary of dictionaries
-
->>> d={0: {1: 1}} # dict-of-dicts single edge (0,1)
->>> G=nx.Graph(d)
-
-
-See Also
---------
-nx_pygraphviz, nx_pydot
-
-"""
-__author__ = """\n""".join(['Aric Hagberg (hagberg@lanl.gov)',
-                           'Pieter Swart (swart@lanl.gov)',
-                           'Dan Schult(dschult@colgate.edu)'])
-#    Copyright (C) 2006-2011 by 
-#    Aric Hagberg <hagberg@lanl.gov>
-#    Dan Schult <dschult@colgate.edu>
-#    Pieter Swart <swart@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-
-import warnings
-import networkx as nx
-
-__all__ = ['to_networkx_graph',
-           'from_dict_of_dicts', 'to_dict_of_dicts',
-           'from_dict_of_lists', 'to_dict_of_lists',
-           'from_edgelist', 'to_edgelist',
-           'from_numpy_matrix', 'to_numpy_matrix',
-           'to_numpy_recarray',
-           'from_scipy_sparse_matrix', 'to_scipy_sparse_matrix']
-
-def _prep_create_using(create_using):
-    """Return a graph object ready to be populated.
-
-    If create_using is None return the default (just networkx.Graph())
-    If create_using.clear() works, assume it returns a graph object.
-    Otherwise raise an exception because create_using is not a networkx graph.
-
-    """
-    if create_using is None:
-        G=nx.Graph()
-    else:
-        G=create_using
-        try:
-            G.clear()
-        except:
-            raise TypeError("Input graph is not a networkx graph type")
-    return G
-
-def to_networkx_graph(data,create_using=None,multigraph_input=False):
-    """Make a NetworkX graph from a known data structure.
-
-    The preferred way to call this is automatically
-    from the class constructor
-
-    >>> d={0: {1: {'weight':1}}} # dict-of-dicts single edge (0,1)
-    >>> G=nx.Graph(d)
-
-    instead of the equivalent
-
-    >>> G=nx.from_dict_of_dicts(d)
-
-    Parameters
-    ----------
-    data : a object to be converted
-       Current known types are:
-         any NetworkX graph
-         dict-of-dicts
-         dist-of-lists
-         list of edges
-         numpy matrix
-         numpy ndarray
-         scipy sparse matrix
-         pygraphviz agraph
-
-    create_using : NetworkX graph
-       Use specified graph for result.  Otherwise a new graph is created.
-
-    multigraph_input : bool (default False)
-      If True and  data is a dict_of_dicts,
-      try to create a multigraph assuming dict_of_dict_of_lists.
-      If data and create_using are both multigraphs then create
-      a multigraph from a multigraph.
-
-    """
-    # NX graph
-    if hasattr(data,"adj"):
-        try:
-            result= from_dict_of_dicts(data.adj,\
-                    create_using=create_using,\
-                    multigraph_input=data.is_multigraph())
-            if hasattr(data,'graph') and isinstance(data.graph,dict):
-                result.graph=data.graph.copy()
-            if hasattr(data,'node') and isinstance(data.node,dict):
-                result.node=dict( (n,dd.copy()) for n,dd in data.node.items() )
-            return result
-        except:
-            raise nx.NetworkXError("Input is not a correct NetworkX graph.")
-
-    # pygraphviz  agraph
-    if hasattr(data,"is_strict"):
-        try:
-            return nx.from_agraph(data,create_using=create_using)
-        except:
-            raise nx.NetworkXError("Input is not a correct pygraphviz graph.")
-
-    # dict of dicts/lists
-    if isinstance(data,dict):
-        try:
-            return from_dict_of_dicts(data,create_using=create_using,\
-                    multigraph_input=multigraph_input)
-        except:
-            try:
-                return from_dict_of_lists(data,create_using=create_using)
-            except:
-                raise TypeError("Input is not known type.")
-
-    # list or generator of edges
-    if (isinstance(data,list)
-        or hasattr(data,'next')
-        or hasattr(data, '__next__')): 
-        try:
-            return from_edgelist(data,create_using=create_using)
-        except:
-            raise nx.NetworkXError("Input is not a valid edge list")
-
-    # numpy matrix or ndarray 
-    try:
-        import numpy
-        if isinstance(data,numpy.matrix) or \
-               isinstance(data,numpy.ndarray):
-            try:
-                return from_numpy_matrix(data,create_using=create_using)
-            except:
-                raise nx.NetworkXError(\
-                  "Input is not a correct numpy matrix or array.")
-    except ImportError:
-        warnings.warn('numpy not found, skipping conversion test.',
-                      ImportWarning)
-
-    # scipy sparse matrix - any format
-    try:
-        import scipy
-        if hasattr(data,"format"):
-            try:
-                return from_scipy_sparse_matrix(data,create_using=create_using)
-            except:
-                raise nx.NetworkXError(\
-                      "Input is not a correct scipy sparse matrix type.")
-    except ImportError:
-        warnings.warn('scipy not found, skipping conversion test.',
-                      ImportWarning)
-
-
-    raise nx.NetworkXError(\
-          "Input is not a known data type for conversion.")
-
-    return 
-
-
-def convert_to_undirected(G):
-    """Return a new undirected representation of the graph G."""
-    return G.to_undirected()
-
-
-def convert_to_directed(G):
-    """Return a new directed representation of the graph G."""
-    return G.to_directed()
-
-
-def to_dict_of_lists(G,nodelist=None):
-    """Return adjacency representation of graph as a dictionary of lists.
-
-    Parameters
-    ----------
-    G : graph
-       A NetworkX graph
-
-    nodelist : list
-       Use only nodes specified in nodelist
-
-    Notes
-    -----
-    Completely ignores edge data for MultiGraph and MultiDiGraph.
-
-    """
-    if nodelist is None:
-        nodelist=G
-
-    d = {}
-    for n in nodelist:
-        d[n]=[nbr for nbr in G.neighbors(n) if nbr in nodelist]
-    return d
-
-def from_dict_of_lists(d,create_using=None):
-    """Return a graph from a dictionary of lists.
-
-    Parameters
-    ----------
-    d : dictionary of lists
-      A dictionary of lists adjacency representation.
-
-    create_using : NetworkX graph
-       Use specified graph for result.  Otherwise a new graph is created.
-
-    Examples
-    --------
-    >>> dol= {0:[1]} # single edge (0,1)
-    >>> G=nx.from_dict_of_lists(dol)
-
-    or
-    >>> G=nx.Graph(dol) # use Graph constructor
-
-    """
-    G=_prep_create_using(create_using)
-    G.add_nodes_from(d)
-    if G.is_multigraph() and not G.is_directed():
-        # a dict_of_lists can't show multiedges.  BUT for undirected graphs,
-        # each edge shows up twice in the dict_of_lists.
-        # So we need to treat this case separately.
-        seen={}
-        for node,nbrlist in d.items():
-            for nbr in nbrlist:
-                if nbr not in seen:
-                    G.add_edge(node,nbr)
-            seen[node]=1  # don't allow reverse edge to show up
-    else:
-        G.add_edges_from( ((node,nbr) for node,nbrlist in d.items()
-                           for nbr in nbrlist) )
-    return G
-
-
-def to_dict_of_dicts(G,nodelist=None,edge_data=None):
-    """Return adjacency representation of graph as a dictionary of dictionaries.
-
-    Parameters
-    ----------
-    G : graph
-       A NetworkX graph
-
-    nodelist : list
-       Use only nodes specified in nodelist
-
-    edge_data : list, optional
-       If provided,  the value of the dictionary will be
-       set to edge_data for all edges.  This is useful to make
-       an adjacency matrix type representation with 1 as the edge data.
-       If edgedata is None, the edgedata in G is used to fill the values.
-       If G is a multigraph, the edgedata is a dict for each pair (u,v).
-    """
-    dod={}
-    if nodelist is None:
-        if edge_data is None:
-            for u,nbrdict in G.adjacency_iter():
-                dod[u]=nbrdict.copy()
-        else: # edge_data is not None
-            for u,nbrdict in G.adjacency_iter():
-                dod[u]=dod.fromkeys(nbrdict, edge_data)
-    else: # nodelist is not None
-        if edge_data is None:
-            for u in nodelist:
-                dod[u]={}
-                for v,data in ((v,data) for v,data in G[u].items() if v in nodelist):
-                    dod[u][v]=data
-        else: # nodelist and edge_data are not None
-            for u in nodelist:
-                dod[u]={}
-                for v in ( v for v in G[u] if v in nodelist):
-                    dod[u][v]=edge_data
-    return dod
-
-def from_dict_of_dicts(d,create_using=None,multigraph_input=False):
-    """Return a graph from a dictionary of dictionaries.
-
-    Parameters
-    ----------
-    d : dictionary of dictionaries
-      A dictionary of dictionaries adjacency representation.
-
-    create_using : NetworkX graph
-       Use specified graph for result.  Otherwise a new graph is created.
-
-    multigraph_input : bool (default False)
-       When True, the values of the inner dict are assumed
-       to be containers of edge data for multiple edges.
-       Otherwise this routine assumes the edge data are singletons.
-
-    Examples
-    --------
-    >>> dod= {0: {1:{'weight':1}}} # single edge (0,1)
-    >>> G=nx.from_dict_of_dicts(dod)
-
-    or
-    >>> G=nx.Graph(dod) # use Graph constructor
-
-    """
-    G=_prep_create_using(create_using)
-    G.add_nodes_from(d)
-    # is dict a MultiGraph or MultiDiGraph?
-    if multigraph_input:
-        # make a copy of the list of edge data (but not the edge data)
-        if G.is_directed():
-            if G.is_multigraph():
-                G.add_edges_from( (u,v,key,data)
-                                  for u,nbrs in d.items()
-                                  for v,datadict in nbrs.items()
-                                  for key,data in datadict.items()
-                                )
-            else:
-                G.add_edges_from( (u,v,data)
-                                  for u,nbrs in d.items()
-                                  for v,datadict in nbrs.items()
-                                  for key,data in datadict.items()
-                                )
-        else: # Undirected
-            if G.is_multigraph():
-                seen=set()   # don't add both directions of undirected graph
-                for u,nbrs in d.items():
-                    for v,datadict in nbrs.items():
-                        if (u,v) not in seen:
-                            G.add_edges_from( (u,v,key,data)
-                                               for key,data in datadict.items()
-                                              )
-                            seen.add((v,u))
-            else:
-                seen=set()   # don't add both directions of undirected graph
-                for u,nbrs in d.items():
-                    for v,datadict in nbrs.items():
-                        if (u,v) not in seen:
-                            G.add_edges_from( (u,v,data)
-                                        for key,data in datadict.items() )
-                            seen.add((v,u))
-
-    else: # not a multigraph to multigraph transfer
-        if G.is_multigraph() and not G.is_directed():
-            # d can have both representations u-v, v-u in dict.  Only add one.
-            # We don't need this check for digraphs since we add both directions,
-            # or for Graph() since it is done implicitly (parallel edges not allowed)
-            seen=set()
-            for u,nbrs in d.items():
-                for v,data in nbrs.items():
-                    if (u,v) not in seen:
-                        G.add_edge(u,v,attr_dict=data)
-                    seen.add((v,u))
-        else:
-            G.add_edges_from( ( (u,v,data)
-                                for u,nbrs in d.items()
-                                for v,data in nbrs.items()) )
-    return G
-
-def to_edgelist(G,nodelist=None):
-    """Return a list of edges in the graph.
-
-    Parameters
-    ----------
-    G : graph
-       A NetworkX graph
-
-    nodelist : list
-       Use only nodes specified in nodelist
-
-    """
-    if nodelist is None:
-        return G.edges(data=True)
-    else:
-        return G.edges(nodelist,data=True)
-
-def from_edgelist(edgelist,create_using=None):
-    """Return a graph from a list of edges.
-
-    Parameters
-    ----------
-    edgelist : list or iterator
-      Edge tuples
-
-    create_using : NetworkX graph
-       Use specified graph for result.  Otherwise a new graph is created.
-
-    Examples
-    --------
-    >>> edgelist= [(0,1)] # single edge (0,1)
-    >>> G=nx.from_edgelist(edgelist)
-
-    or
-    >>> G=nx.Graph(edgelist) # use Graph constructor
-
-    """
-    G=_prep_create_using(create_using)
-    G.add_edges_from(edgelist)
-    return G
-
-def to_numpy_matrix(G, nodelist=None, dtype=None, order=None,
-                    multigraph_weight=sum, weight='weight'):
-    """Return the graph adjacency matrix as a NumPy matrix.
-
-    Parameters
-    ----------
-    G : graph
-        The NetworkX graph used to construct the NumPy matrix.
-
-    nodelist : list, optional
-       The rows and columns are ordered according to the nodes in `nodelist`.
-       If `nodelist` is None, then the ordering is produced by G.nodes().
-
-    dtype : NumPy data type, optional
-        A valid single NumPy data type used to initialize the array. 
-        This must be a simple type such as int or numpy.float64 and
-        not a compound data type (see to_numpy_recarray)
-        If None, then the NumPy default is used.
-
-    order : {'C', 'F'}, optional
-        Whether to store multidimensional data in C- or Fortran-contiguous
-        (row- or column-wise) order in memory. If None, then the NumPy default 
-        is used.
-
-    multigraph_weight : {sum, min, max}, optional
-        An operator that determines how weights in multigraphs are handled.
-        The default is to sum the weights of the multiple edges.
-
-    weight : string or None   optional (default='weight')
-        The edge attribute that holds the numerical value used for 
-        the edge weight.  If None then all edge weights are 1.
-
-
-    Returns
-    -------
-    M : NumPy matrix
-       Graph adjacency matrix.
-
-    See Also
-    --------
-    to_numpy_recarray, from_numpy_matrix
-
-    Notes
-    -----
-    The matrix entries are assigned with weight edge attribute. When
-    an edge does not have the weight attribute, the value of the entry is 1.
-    For multiple edges, the values of the entries are the sums of the edge
-    attributes for each edge.
-
-    When `nodelist` does not contain every node in `G`, the matrix is built 
-    from the subgraph of `G` that is induced by the nodes in `nodelist`.
-
-    Examples
-    --------
-    >>> G = nx.MultiDiGraph()
-    >>> G.add_edge(0,1,weight=2)
-    >>> G.add_edge(1,0)
-    >>> G.add_edge(2,2,weight=3)
-    >>> G.add_edge(2,2)
-    >>> nx.to_numpy_matrix(G, nodelist=[0,1,2])
-    matrix([[ 0.,  2.,  0.],
-            [ 1.,  0.,  0.],
-            [ 0.,  0.,  4.]])
-    """
-    try:
-        import numpy as np
-    except ImportError:
-        raise ImportError(\
-          "to_numpy_matrix() requires numpy: http://scipy.org/ ")
-
-    if nodelist is None:
-        nodelist = G.nodes()
-
-    nodeset = set(nodelist)
-    if len(nodelist) != len(nodeset):
-        msg = "Ambiguous ordering: `nodelist` contained duplicates."
-        raise nx.NetworkXError(msg)
-
-    nlen=len(nodelist)
-    undirected = not G.is_directed()
-    index=dict(zip(nodelist,range(nlen)))
-
-    if G.is_multigraph():
-        # Handle MultiGraphs and MultiDiGraphs
-        # array of nan' to start with, any leftover nans will be converted to 0
-        # nans are used so we can use sum, min, max for multigraphs
-        M = np.zeros((nlen,nlen), dtype=dtype, order=order)+np.nan
-        # use numpy nan-aware operations
-        operator={sum:np.nansum, min:np.nanmin, max:np.nanmax}
-        try:
-            op=operator[multigraph_weight]
-        except:
-            raise ValueError('multigraph_weight must be sum, min, or max')
-
-        for u,v,attrs in G.edges_iter(data=True):
-            if (u in nodeset) and (v in nodeset):
-                i,j = index[u],index[v]
-                e_weight = attrs.get(weight, 1)
-                M[i,j] = op([e_weight,M[i,j]]) 
-                if undirected:
-                    M[j,i] = M[i,j]
-        # convert any nans to zeros
-        M = np.asmatrix(np.nan_to_num(M))
-    else:
-        # Graph or DiGraph, this is much faster than above 
-        M = np.zeros((nlen,nlen), dtype=dtype, order=order)
-        for u,nbrdict in G.adjacency_iter():
-            for v,d in nbrdict.items():
-                try:
-                    M[index[u],index[v]]=d.get(weight,1)
-                except KeyError:
-                    pass
-        M = np.asmatrix(M)
-    return M
-
-
-def from_numpy_matrix(A,create_using=None):
-    """Return a graph from numpy matrix.
-
-    The numpy matrix is interpreted as an adjacency matrix for the graph.
-
-    Parameters
-    ----------
-    A : numpy matrix
-      An adjacency matrix representation of a graph
-
-    create_using : NetworkX graph
-       Use specified graph for result.  The default is Graph()
-
-    Notes
-    -----
-    If the numpy matrix has a single data type for each matrix entry it
-    will be converted to an appropriate Python data type.
-
-    If the numpy matrix has a user-specified compound data type the names
-    of the data fields will be used as attribute keys in the resulting
-    NetworkX graph.
-
-    See Also
-    --------
-    to_numpy_matrix, to_numpy_recarray
-
-    Examples
-    --------
-    Simple integer weights on edges:
-
-    >>> import numpy
-    >>> A=numpy.matrix([[1,1],[2,1]])
-    >>> G=nx.from_numpy_matrix(A)
-
-    User defined compound data type on edges:
-
-    >>> import numpy
-    >>> dt=[('weight',float),('cost',int)]
-    >>> A=numpy.matrix([[(1.0,2)]],dtype=dt)
-    >>> G=nx.from_numpy_matrix(A)
-    >>> G.edges(data=True)
-    [(0, 0, {'cost': 2, 'weight': 1.0})]
-    """
-    kind_to_python_type={'f':float,
-                         'i':int,
-                         'u':int,
-                         'b':bool,
-                         'c':complex,
-                         'S':str,
-                         'V':'void'}
-
-    try: # Python 3.x
-        blurb = chr(1245) # just to trigger the exception
-        kind_to_python_type['U']=str
-    except ValueError: # Python 2.6+
-        kind_to_python_type['U']=unicode
-
-    # This should never fail if you have created a numpy matrix with numpy...  
-    try:
-        import numpy as np
-    except ImportError:
-        raise ImportError(\
-          "from_numpy_matrix() requires numpy: http://scipy.org/ ")
-
-    G=_prep_create_using(create_using)
-    n,m=A.shape
-    if n!=m:
-        raise nx.NetworkXError("Adjacency matrix is not square.",
-                               "nx,ny=%s"%(A.shape,))
-    dt=A.dtype
-    try:
-        python_type=kind_to_python_type[dt.kind]
-    except:
-        raise TypeError("Unknown numpy data type: %s"%dt)
-
-    # make sure we get isolated nodes
-    G.add_nodes_from(range(n))
-    # get a list of edges
-    x,y=np.asarray(A).nonzero()
-
-    # handle numpy constructed data type
-    if python_type is 'void':
-        fields=sorted([(offset,dtype,name) for name,(dtype,offset) in
-                       A.dtype.fields.items()])
-        for (u,v) in zip(x,y):
-            attr={}
-            for (offset,dtype,name),val in zip(fields,A[u,v]):
-                attr[name]=kind_to_python_type[dtype.kind](val)
-            G.add_edge(u,v,attr)
-    else: # basic data type
-        G.add_edges_from( ((u,v,{'weight':python_type(A[u,v])}) 
-                           for (u,v) in zip(x,y)) )
-    return G
-
-
-def to_numpy_recarray(G,nodelist=None,
-                      dtype=[('weight',float)],
-                      order=None):
-    """Return the graph adjacency matrix as a NumPy recarray.
-
-    Parameters
-    ----------
-    G : graph
-        The NetworkX graph used to construct the NumPy matrix.
-
-    nodelist : list, optional
-       The rows and columns are ordered according to the nodes in `nodelist`.
-       If `nodelist` is None, then the ordering is produced by G.nodes().
-
-    dtype : NumPy data-type, optional
-        A valid NumPy named dtype used to initialize the NumPy recarray. 
-        The data type names are assumed to be keys in the graph edge attribute 
-        dictionary.
-
-    order : {'C', 'F'}, optional
-        Whether to store multidimensional data in C- or Fortran-contiguous
-        (row- or column-wise) order in memory. If None, then the NumPy default 
-        is used.
-
-    Returns
-    -------
-    M : NumPy recarray
-       The graph with specified edge data as a Numpy recarray 
-
-    Notes
-    -----
-    When `nodelist` does not contain every node in `G`, the matrix is built 
-    from the subgraph of `G` that is induced by the nodes in `nodelist`.
-
-    Examples
-    --------
-    >>> G = nx.Graph()
-    >>> G.add_edge(1,2,weight=7.0,cost=5)
-    >>> A=nx.to_numpy_recarray(G,dtype=[('weight',float),('cost',int)])
-    >>> print(A.weight)
-    [[ 0.  7.]
-     [ 7.  0.]]
-    >>> print(A.cost)
-    [[0 5]
-     [5 0]]
-    """
-    try:
-        import numpy as np
-    except ImportError:
-        raise ImportError(\
-          "to_numpy_matrix() requires numpy: http://scipy.org/ ")
-
-    if G.is_multigraph():
-        raise nx.NetworkXError("Not implemented for multigraphs.")
-
-    if nodelist is None:
-        nodelist = G.nodes()
-
-    nodeset = set(nodelist)
-    if len(nodelist) != len(nodeset):
-        msg = "Ambiguous ordering: `nodelist` contained duplicates."
-        raise nx.NetworkXError(msg)
-
-    nlen=len(nodelist)
-    undirected = not G.is_directed()
-    index=dict(zip(nodelist,range(nlen)))
-    M = np.zeros((nlen,nlen), dtype=dtype, order=order)
-
-    names=M.dtype.names
-    for u,v,attrs in G.edges_iter(data=True):
-        if (u in nodeset) and (v in nodeset):
-            i,j = index[u],index[v]
-            values=tuple([attrs[n] for n in names])
-            M[i,j] = values
-            if undirected:
-                M[j,i] = M[i,j]
-
-    return M.view(np.recarray)
-
-
-def to_scipy_sparse_matrix(G, nodelist=None, dtype=None, 
-                           weight='weight', format='csr'):
-    """Return the graph adjacency matrix as a SciPy sparse matrix.
-
-    Parameters
-    ----------
-    G : graph
-        The NetworkX graph used to construct the NumPy matrix.
-
-    nodelist : list, optional
-       The rows and columns are ordered according to the nodes in `nodelist`.
-       If `nodelist` is None, then the ordering is produced by G.nodes().
-
-    dtype : NumPy data-type, optional
-        A valid NumPy dtype used to initialize the array. If None, then the
-        NumPy default is used.
-
-    weight : string or None   optional (default='weight')
-        The edge attribute that holds the numerical value used for 
-        the edge weight.  If None then all edge weights are 1.
-
-    format : str in {'bsr', 'csr', 'csc', 'coo', 'lil', 'dia', 'dok'} 
-        The type of the matrix to be returned (default 'csr').  For
-        some algorithms different implementations of sparse matrices
-        can perform better.  See [1]_ for details.
-
-    Returns
-    -------
-    M : SciPy sparse matrix
-       Graph adjacency matrix.
-
-    Notes
-    -----
-    The matrix entries are populated using the edge attribute held in
-    parameter weight. When an edge does not have that attribute, the
-    value of the entry is 1.
-
-    For multiple edges the matrix values are the sums of the edge weights.
-
-    When `nodelist` does not contain every node in `G`, the matrix is built
-    from the subgraph of `G` that is induced by the nodes in `nodelist`.
-
-    Uses coo_matrix format. To convert to other formats specify the
-    format= keyword.
-
-    Examples
-    --------
-    >>> G = nx.MultiDiGraph()
-    >>> G.add_edge(0,1,weight=2)
-    >>> G.add_edge(1,0)
-    >>> G.add_edge(2,2,weight=3)
-    >>> G.add_edge(2,2)
-    >>> S = nx.to_scipy_sparse_matrix(G, nodelist=[0,1,2])
-    >>> print(S.todense())
-    [[0 2 0]
-     [1 0 0]
-     [0 0 4]]
-
-    References
-    ----------
-    .. [1] Scipy Dev. References, "Sparse Matrices",
-       http://docs.scipy.org/doc/scipy/reference/sparse.html
-    """
-    try:
-        from scipy import sparse
-    except ImportError:
-        raise ImportError(\
-          "to_scipy_sparse_matrix() requires scipy: http://scipy.org/ ")
-
-    if nodelist is None:
-        nodelist = G
-    nlen = len(nodelist)
-    if nlen == 0:
-        raise nx.NetworkXError("Graph has no nodes or edges")
-
-    if len(nodelist) != len(set(nodelist)):
-        msg = "Ambiguous ordering: `nodelist` contained duplicates."
-        raise nx.NetworkXError(msg)
-
-    index = dict(zip(nodelist,range(nlen)))
-    if G.number_of_edges() == 0:
-        row,col,data=[],[],[]
-    else:
-        row,col,data=zip(*((index[u],index[v],d.get(weight,1))
-                           for u,v,d in G.edges_iter(nodelist, data=True)
-                           if u in index and v in index))
-    if G.is_directed():
-        M = sparse.coo_matrix((data,(row,col)),shape=(nlen,nlen), dtype=dtype)
-    else:
-        # symmetrize matrix
-        M = sparse.coo_matrix((data+data,(row+col,col+row)),shape=(nlen,nlen),
-                              dtype=dtype)
-    try:
-        return M.asformat(format)
-    except AttributeError:
-        raise nx.NetworkXError("Unknown sparse matrix format: %s"%format)
-
-def from_scipy_sparse_matrix(A,create_using=None):
-    """Return a graph from scipy sparse matrix adjacency list.
-
-    Parameters
-    ----------
-    A : scipy sparse matrix
-      An adjacency matrix representation of a graph
-
-    create_using : NetworkX graph
-       Use specified graph for result.  The default is Graph()
-
-    Examples
-    --------
-    >>> import scipy.sparse
-    >>> A=scipy.sparse.eye(2,2,1)
-    >>> G=nx.from_scipy_sparse_matrix(A)
-
-    """
-    G=_prep_create_using(create_using)
-
-    # convert all formats to lil - not the most efficient way
-    AA=A.tolil()
-    n,m=AA.shape
-
-    if n!=m:
-        raise nx.NetworkXError(\
-              "Adjacency matrix is not square. nx,ny=%s"%(A.shape,))
-    G.add_nodes_from(range(n)) # make sure we get isolated nodes
-
-    for i,row in enumerate(AA.rows):
-        for pos,j in enumerate(row):
-            G.add_edge(i,j,**{'weight':AA.data[i][pos]})
-    return G
-
-# fixture for nose tests
-def setup_module(module):
-    from nose import SkipTest
-    try:
-        import numpy
-    except:
-        raise SkipTest("NumPy not available")
-    try:
-        import scipy
-    except:
-        raise SkipTest("SciPy not available")
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/drawing/__init__.py b/lib/python2.7/site-packages/setoolsgui/networkx/drawing/__init__.py
deleted file mode 100644
index 211457e..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/drawing/__init__.py
+++ /dev/null
@@ -1,20 +0,0 @@
-# graph drawing and interface to graphviz
-import sys
-from networkx.drawing.layout import *
-from networkx.drawing.nx_pylab import *
-
-# graphviz interface
-# prefer pygraphviz/agraph (it's faster)
-from networkx.drawing.nx_agraph import *
-try:
-    import pydot
-    import networkx.drawing.nx_pydot
-    from networkx.drawing.nx_pydot import *
-except ImportError:
-    pass
-try:
-    import pygraphviz
-    from networkx.drawing.nx_agraph import *
-except ImportError:    
-    pass 
-
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/drawing/layout.py b/lib/python2.7/site-packages/setoolsgui/networkx/drawing/layout.py
deleted file mode 100644
index 671d3b6..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/drawing/layout.py
+++ /dev/null
@@ -1,540 +0,0 @@
-"""
-******
-Layout
-******
-
-Node positioning algorithms for graph drawing.
-"""
-#    Copyright (C) 2004-2012 by
-#    Aric Hagberg <hagberg@lanl.gov>
-#    Dan Schult <dschult@colgate.edu>
-#    Pieter Swart <swart@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-import networkx as nx
-__author__ = """Aric Hagberg (hagberg@lanl.gov)\nDan Schult(dschult@colgate.edu)"""
-__all__ = ['circular_layout',
-           'random_layout',
-           'shell_layout',
-           'spring_layout',
-           'spectral_layout',
-           'fruchterman_reingold_layout']
-
-def random_layout(G,dim=2):
-    """Position nodes uniformly at random in the unit square.
-
-    For every node, a position is generated by choosing each of dim
-    coordinates uniformly at random on the interval [0.0, 1.0).
-
-    NumPy (http://scipy.org) is required for this function.
-
-    Parameters
-    ----------
-    G : NetworkX graph
-       A position will be assigned to every node in G.
-
-    dim : int
-       Dimension of layout.
-
-    Returns
-    -------
-    dict :
-       A dictionary of positions keyed by node
-
-    Examples
-    --------
-    >>> G = nx.lollipop_graph(4, 3)
-    >>> pos = nx.random_layout(G)
-
-    """
-    try:
-        import numpy as np
-    except ImportError:
-        raise ImportError("random_layout() requires numpy: http://scipy.org/ ")
-    n=len(G)
-    pos=np.asarray(np.random.random((n,dim)),dtype=np.float32)
-    return dict(zip(G,pos))
-
-
-def circular_layout(G, dim=2, scale=1):
-    # dim=2 only
-    """Position nodes on a circle.
-
-    Parameters
-    ----------
-    G : NetworkX graph
-
-    dim : int
-       Dimension of layout, currently only dim=2 is supported
-
-    scale : float
-        Scale factor for positions
-
-    Returns
-    -------
-    dict :
-       A dictionary of positions keyed by node
-
-    Examples
-    --------
-    >>> G=nx.path_graph(4)
-    >>> pos=nx.circular_layout(G)
-
-    Notes
-    ------
-    This algorithm currently only works in two dimensions and does not
-    try to minimize edge crossings.
-
-    """
-    try:
-        import numpy as np
-    except ImportError:
-        raise ImportError("circular_layout() requires numpy: http://scipy.org/ ")
-    if len(G)==0:
-        return {}
-    if len(G)==1:
-        return {G.nodes()[0]:(1,)*dim}
-    t=np.arange(0,2.0*np.pi,2.0*np.pi/len(G),dtype=np.float32)
-    pos=np.transpose(np.array([np.cos(t),np.sin(t)]))
-    pos=_rescale_layout(pos,scale=scale)
-    return dict(zip(G,pos))
-
-def shell_layout(G,nlist=None,dim=2,scale=1):
-    """Position nodes in concentric circles.
-
-    Parameters
-    ----------
-    G : NetworkX graph
-
-    nlist : list of lists
-       List of node lists for each shell.
-
-    dim : int
-       Dimension of layout, currently only dim=2 is supported
-
-    scale : float
-        Scale factor for positions
-
-    Returns
-    -------
-    dict :
-       A dictionary of positions keyed by node
-
-    Examples
-    --------
-    >>> G=nx.path_graph(4)
-    >>> shells=[[0],[1,2,3]]
-    >>> pos=nx.shell_layout(G,shells)
-
-    Notes
-    ------
-    This algorithm currently only works in two dimensions and does not
-    try to minimize edge crossings.
-
-    """
-    try:
-        import numpy as np
-    except ImportError:
-        raise ImportError("shell_layout() requires numpy: http://scipy.org/ ")
-    if len(G)==0:
-        return {}
-    if len(G)==1:
-        return {G.nodes()[0]:(1,)*dim}
-    if nlist==None:
-        nlist=[G.nodes()] # draw the whole graph in one shell
-
-    if len(nlist[0])==1:
-        radius=0.0 # single node at center
-    else:
-        radius=1.0 # else start at r=1
-
-    npos={}
-    for nodes in nlist:
-        t=np.arange(0,2.0*np.pi,2.0*np.pi/len(nodes),dtype=np.float32)
-        pos=np.transpose(np.array([radius*np.cos(t),radius*np.sin(t)]))
-        npos.update(zip(nodes,pos))
-        radius+=1.0
-
-    # FIXME: rescale
-    return npos
-
-
-def fruchterman_reingold_layout(G,dim=2,k=None,
-                                pos=None,
-                                fixed=None,
-                                iterations=50,
-                                weight='weight',
-                                scale=1.0):
-    """Position nodes using Fruchterman-Reingold force-directed algorithm. 
-
-    Parameters
-    ----------
-    G : NetworkX graph
-
-    dim : int
-       Dimension of layout
-
-    k : float (default=None)
-       Optimal distance between nodes.  If None the distance is set to
-       1/sqrt(n) where n is the number of nodes.  Increase this value
-       to move nodes farther apart.
-
-
-    pos : dict or None  optional (default=None)
-       Initial positions for nodes as a dictionary with node as keys
-       and values as a list or tuple.  If None, then nuse random initial
-       positions.
-
-    fixed : list or None  optional (default=None)
-      Nodes to keep fixed at initial position.
-
-    iterations : int  optional (default=50)
-       Number of iterations of spring-force relaxation
-
-    weight : string or None   optional (default='weight')
-        The edge attribute that holds the numerical value used for
-        the edge weight.  If None, then all edge weights are 1.
-
-    scale : float (default=1.0)
-        Scale factor for positions. The nodes are positioned 
-        in a box of size [0,scale] x [0,scale].  
-
-
-    Returns
-    -------
-    dict :
-       A dictionary of positions keyed by node
-
-    Examples
-    --------
-    >>> G=nx.path_graph(4)
-    >>> pos=nx.spring_layout(G)
-
-    # The same using longer function name
-    >>> pos=nx.fruchterman_reingold_layout(G)
-    """
-    try:
-        import numpy as np
-    except ImportError:
-        raise ImportError("fruchterman_reingold_layout() requires numpy: http://scipy.org/ ")
-    if fixed is not None:
-        nfixed=dict(zip(G,range(len(G))))
-        fixed=np.asarray([nfixed[v] for v in fixed])
-
-    if pos is not None:
-        pos_arr=np.asarray(np.random.random((len(G),dim)))
-        for i,n in enumerate(G):
-            if n in pos:
-                pos_arr[i]=np.asarray(pos[n])
-    else:
-        pos_arr=None
-
-    if len(G)==0:
-        return {}
-    if len(G)==1:
-        return {G.nodes()[0]:(1,)*dim}
-
-    try:
-        # Sparse matrix
-        if len(G) < 500:  # sparse solver for large graphs
-            raise ValueError
-        A=nx.to_scipy_sparse_matrix(G,weight=weight,dtype='f')
-        pos=_sparse_fruchterman_reingold(A,dim,k,pos_arr,fixed,iterations)
-    except:
-        A=nx.to_numpy_matrix(G,weight=weight)
-        pos=_fruchterman_reingold(A,dim,k,pos_arr,fixed,iterations)
-    if fixed is None:
-        pos=_rescale_layout(pos,scale=scale)
-    return dict(zip(G,pos))
-
-spring_layout=fruchterman_reingold_layout
-
-def _fruchterman_reingold(A, dim=2, k=None, pos=None, fixed=None, 
-                          iterations=50):
-    # Position nodes in adjacency matrix A using Fruchterman-Reingold
-    # Entry point for NetworkX graph is fruchterman_reingold_layout()
-    try:
-        import numpy as np
-    except ImportError:
-        raise ImportError("_fruchterman_reingold() requires numpy: http://scipy.org/ ")
-
-    try:
-        nnodes,_=A.shape
-    except AttributeError:
-        raise nx.NetworkXError(
-            "fruchterman_reingold() takes an adjacency matrix as input")
-
-    A=np.asarray(A) # make sure we have an array instead of a matrix
-
-    if pos==None:
-        # random initial positions
-        pos=np.asarray(np.random.random((nnodes,dim)),dtype=A.dtype)
-    else:
-        # make sure positions are of same type as matrix
-        pos=pos.astype(A.dtype)
-
-    # optimal distance between nodes
-    if k is None:
-        k=np.sqrt(1.0/nnodes)
-    # the initial "temperature"  is about .1 of domain area (=1x1)
-    # this is the largest step allowed in the dynamics.
-    t=0.1
-    # simple cooling scheme.
-    # linearly step down by dt on each iteration so last iteration is size dt.
-    dt=t/float(iterations+1)
-    delta = np.zeros((pos.shape[0],pos.shape[0],pos.shape[1]),dtype=A.dtype)
-    # the inscrutable (but fast) version
-    # this is still O(V^2)
-    # could use multilevel methods to speed this up significantly
-    for iteration in range(iterations):
-        # matrix of difference between points
-        for i in range(pos.shape[1]):
-            delta[:,:,i]= pos[:,i,None]-pos[:,i]
-        # distance between points
-        distance=np.sqrt((delta**2).sum(axis=-1))
-        # enforce minimum distance of 0.01
-        distance=np.where(distance<0.01,0.01,distance)
-        # displacement "force"
-        displacement=np.transpose(np.transpose(delta)*\
-                                  (k*k/distance**2-A*distance/k))\
-                                  .sum(axis=1)
-        # update positions
-        length=np.sqrt((displacement**2).sum(axis=1))
-        length=np.where(length<0.01,0.1,length)
-        delta_pos=np.transpose(np.transpose(displacement)*t/length)
-        if fixed is not None:
-            # don't change positions of fixed nodes
-            delta_pos[fixed]=0.0
-        pos+=delta_pos
-        # cool temperature
-        t-=dt
-        pos=_rescale_layout(pos)
-    return pos
-
-
-def _sparse_fruchterman_reingold(A, dim=2, k=None, pos=None, fixed=None, 
-                                 iterations=50):
-    # Position nodes in adjacency matrix A using Fruchterman-Reingold  
-    # Entry point for NetworkX graph is fruchterman_reingold_layout()
-    # Sparse version
-    try:
-        import numpy as np
-    except ImportError:
-        raise ImportError("_sparse_fruchterman_reingold() requires numpy: http://scipy.org/ ")
-    try:
-        nnodes,_=A.shape
-    except AttributeError:
-        raise nx.NetworkXError(
-            "fruchterman_reingold() takes an adjacency matrix as input")
-    try:
-        from scipy.sparse import spdiags,coo_matrix
-    except ImportError:
-        raise ImportError("_sparse_fruchterman_reingold() scipy numpy: http://scipy.org/ ")
-    # make sure we have a LIst of Lists representation
-    try:
-        A=A.tolil()
-    except:
-        A=(coo_matrix(A)).tolil()
-
-    if pos==None:
-        # random initial positions
-        pos=np.asarray(np.random.random((nnodes,dim)),dtype=A.dtype)
-    else:
-        # make sure positions are of same type as matrix
-        pos=pos.astype(A.dtype)
-
-    # no fixed nodes
-    if fixed==None:
-        fixed=[]
-
-    # optimal distance between nodes
-    if k is None:
-        k=np.sqrt(1.0/nnodes)
-    # the initial "temperature"  is about .1 of domain area (=1x1)
-    # this is the largest step allowed in the dynamics.
-    t=0.1
-    # simple cooling scheme.
-    # linearly step down by dt on each iteration so last iteration is size dt.
-    dt=t/float(iterations+1)
-
-    displacement=np.zeros((dim,nnodes))
-    for iteration in range(iterations):
-        displacement*=0
-        # loop over rows
-        for i in range(A.shape[0]):
-            if i in fixed:
-                continue
-            # difference between this row's node position and all others
-            delta=(pos[i]-pos).T
-            # distance between points
-            distance=np.sqrt((delta**2).sum(axis=0))
-            # enforce minimum distance of 0.01
-            distance=np.where(distance<0.01,0.01,distance)
-            # the adjacency matrix row
-            Ai=np.asarray(A.getrowview(i).toarray())
-            # displacement "force"
-            displacement[:,i]+=\
-                (delta*(k*k/distance**2-Ai*distance/k)).sum(axis=1)
-        # update positions
-        length=np.sqrt((displacement**2).sum(axis=0))
-        length=np.where(length<0.01,0.1,length)
-        pos+=(displacement*t/length).T
-        # cool temperature
-        t-=dt
-        pos=_rescale_layout(pos)
-    return pos
-
-
-def spectral_layout(G, dim=2, weight='weight', scale=1):
-    """Position nodes using the eigenvectors of the graph Laplacian. 
-
-    Parameters
-    ----------
-    G : NetworkX graph
-
-    dim : int
-       Dimension of layout
-
-    weight : string or None   optional (default='weight')
-        The edge attribute that holds the numerical value used for
-        the edge weight.  If None, then all edge weights are 1.
-
-    scale : float
-        Scale factor for positions
-
-    Returns
-    -------
-    dict :
-       A dictionary of positions keyed by node
-
-    Examples
-    --------
-    >>> G=nx.path_graph(4)
-    >>> pos=nx.spectral_layout(G)
-
-    Notes
-    -----
-    Directed graphs will be considered as unidrected graphs when
-    positioning the nodes.
-
-    For larger graphs (>500 nodes) this will use the SciPy sparse
-    eigenvalue solver (ARPACK).
-    """
-    # handle some special cases that break the eigensolvers
-    try:
-        import numpy as np
-    except ImportError:
-        raise ImportError("spectral_layout() requires numpy: http://scipy.org/ ")
-    if len(G)<=2:
-        if len(G)==0:
-            pos=np.array([])
-        elif len(G)==1:
-            pos=np.array([[1,1]])
-        else:
-            pos=np.array([[0,0.5],[1,0.5]])
-        return dict(zip(G,pos))
-    try:
-        # Sparse matrix
-        if len(G)< 500:  # dense solver is faster for small graphs
-            raise ValueError
-        A=nx.to_scipy_sparse_matrix(G, weight=weight,dtype='f')
-        # Symmetrize directed graphs
-        if G.is_directed():
-            A=A+np.transpose(A)
-        pos=_sparse_spectral(A,dim)
-    except (ImportError,ValueError):
-        # Dense matrix
-        A=nx.to_numpy_matrix(G, weight=weight)
-        # Symmetrize directed graphs
-        if G.is_directed():
-            A=A+np.transpose(A)
-        pos=_spectral(A,dim)
-
-    pos=_rescale_layout(pos,scale)
-    return dict(zip(G,pos))
-
-
-def _spectral(A, dim=2):
-    # Input adjacency matrix A
-    # Uses dense eigenvalue solver from numpy
-    try:
-        import numpy as np
-    except ImportError:
-        raise ImportError("spectral_layout() requires numpy: http://scipy.org/ ")
-    try:
-        nnodes,_=A.shape
-    except AttributeError:
-        raise nx.NetworkXError(\
-            "spectral() takes an adjacency matrix as input")
-
-    # form Laplacian matrix
-    # make sure we have an array instead of a matrix
-    A=np.asarray(A)
-    I=np.identity(nnodes,dtype=A.dtype)
-    D=I*np.sum(A,axis=1) # diagonal of degrees
-    L=D-A
-
-    eigenvalues,eigenvectors=np.linalg.eig(L)
-    # sort and keep smallest nonzero
-    index=np.argsort(eigenvalues)[1:dim+1] # 0 index is zero eigenvalue
-    return np.real(eigenvectors[:,index])
-
-def _sparse_spectral(A,dim=2):
-    # Input adjacency matrix A
-    # Uses sparse eigenvalue solver from scipy
-    # Could use multilevel methods here, see Koren "On spectral graph drawing"
-    try:
-        import numpy as np
-        from scipy.sparse import spdiags
-    except ImportError:
-        raise ImportError("_sparse_spectral() requires scipy & numpy: http://scipy.org/ ")
-    try:
-        from scipy.sparse.linalg.eigen import eigsh
-    except ImportError:
-        # scipy <0.9.0 names eigsh differently 
-        from scipy.sparse.linalg import eigen_symmetric as eigsh
-    try:
-        nnodes,_=A.shape
-    except AttributeError:
-        raise nx.NetworkXError(\
-            "sparse_spectral() takes an adjacency matrix as input")
-
-    # form Laplacian matrix
-    data=np.asarray(A.sum(axis=1).T)
-    D=spdiags(data,0,nnodes,nnodes)
-    L=D-A
-
-    k=dim+1
-    # number of Lanczos vectors for ARPACK solver.What is the right scaling?
-    ncv=max(2*k+1,int(np.sqrt(nnodes)))
-    # return smallest k eigenvalues and eigenvectors
-    eigenvalues,eigenvectors=eigsh(L,k,which='SM',ncv=ncv)
-    index=np.argsort(eigenvalues)[1:k] # 0 index is zero eigenvalue
-    return np.real(eigenvectors[:,index])
-
-
-def _rescale_layout(pos,scale=1):
-    # rescale to (0,pscale) in all axes
-
-    # shift origin to (0,0)
-    lim=0 # max coordinate for all axes
-    for i in range(pos.shape[1]):
-        pos[:,i]-=pos[:,i].min()
-        lim=max(pos[:,i].max(),lim)
-    # rescale to (0,scale) in all directions, preserves aspect
-    for i in range(pos.shape[1]):
-        pos[:,i]*=scale/lim
-    return pos
-
-
-# fixture for nose tests
-def setup_module(module):
-    from nose import SkipTest
-    try:
-        import numpy
-    except:
-        raise SkipTest("NumPy not available")
-    try:
-        import scipy
-    except:
-        raise SkipTest("SciPy not available")
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/drawing/nx_agraph.py b/lib/python2.7/site-packages/setoolsgui/networkx/drawing/nx_agraph.py
deleted file mode 100644
index ff61253..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/drawing/nx_agraph.py
+++ /dev/null
@@ -1,447 +0,0 @@
-"""
-***************
-Graphviz AGraph
-***************
-
-Interface to pygraphviz AGraph class.
-
-Examples
---------
->>> G=nx.complete_graph(5)
->>> A=nx.to_agraph(G)
->>> H=nx.from_agraph(A)
-
-See Also
---------
-Pygraphviz: http://networkx.lanl.gov/pygraphviz
-"""
-#    Copyright (C) 2004-2012 by
-#    Aric Hagberg <hagberg@lanl.gov>
-#    Dan Schult <dschult@colgate.edu>
-#    Pieter Swart <swart@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-import os
-import sys
-import tempfile
-import networkx as nx
-__author__ = """Aric Hagberg (hagberg@lanl.gov)"""
-__all__ = ['from_agraph', 'to_agraph',
-           'write_dot', 'read_dot',
-           'graphviz_layout',
-           'pygraphviz_layout',
-           'view_pygraphviz']
-
-def from_agraph(A,create_using=None):
-    """Return a NetworkX Graph or DiGraph from a PyGraphviz graph.
-
-    Parameters
-    ----------
-    A : PyGraphviz AGraph
-      A graph created with PyGraphviz
-
-    create_using : NetworkX graph class instance
-      The output is created using the given graph class instance
-
-    Examples
-    --------
-    >>> K5=nx.complete_graph(5)
-    >>> A=nx.to_agraph(K5)
-    >>> G=nx.from_agraph(A)
-    >>> G=nx.from_agraph(A)
-
-
-    Notes
-    -----
-    The Graph G will have a dictionary G.graph_attr containing
-    the default graphviz attributes for graphs, nodes and edges.
-
-    Default node attributes will be in the dictionary G.node_attr
-    which is keyed by node.
-
-    Edge attributes will be returned as edge data in G.  With
-    edge_attr=False the edge data will be the Graphviz edge weight
-    attribute or the value 1 if no edge weight attribute is found.
-
-    """
-    if create_using is None:
-        if A.is_directed():
-            if A.is_strict():
-                create_using=nx.DiGraph()
-            else:
-                create_using=nx.MultiDiGraph()
-        else:
-            if A.is_strict():
-                create_using=nx.Graph()
-            else:
-                create_using=nx.MultiGraph()
-
-    # assign defaults
-    N=nx.empty_graph(0,create_using)
-    N.name=''
-    if A.name is not None:
-        N.name=A.name
-
-    # add nodes, attributes to N.node_attr
-    for n in A.nodes():
-        str_attr=dict((str(k),v) for k,v in n.attr.items())
-        N.add_node(str(n),**str_attr)
-
-    # add edges, assign edge data as dictionary of attributes
-    for e in A.edges():
-        u,v=str(e[0]),str(e[1])
-        attr=dict(e.attr)
-        str_attr=dict((str(k),v) for k,v in attr.items())
-        if not N.is_multigraph():
-            if e.name is not None:
-                str_attr['key']=e.name
-            N.add_edge(u,v,**str_attr)
-        else:
-            N.add_edge(u,v,key=e.name,**str_attr)
-
-    # add default attributes for graph, nodes, and edges
-    # hang them on N.graph_attr
-    N.graph['graph']=dict(A.graph_attr)
-    N.graph['node']=dict(A.node_attr)
-    N.graph['edge']=dict(A.edge_attr)
-    return N
-
-def to_agraph(N):
-    """Return a pygraphviz graph from a NetworkX graph N.
-
-    Parameters
-    ----------
-    N : NetworkX graph
-      A graph created with NetworkX
-
-    Examples
-    --------
-    >>> K5=nx.complete_graph(5)
-    >>> A=nx.to_agraph(K5)
-
-    Notes
-    -----
-    If N has an dict N.graph_attr an attempt will be made first
-    to copy properties attached to the graph (see from_agraph)
-    and then updated with the calling arguments if any.
-
-    """
-    try:
-        import pygraphviz
-    except ImportError:
-        raise ImportError('requires pygraphviz ',
-                          'http://networkx.lanl.gov/pygraphviz ',
-                          '(not available for Python3)')
-    directed=N.is_directed()
-    strict=N.number_of_selfloops()==0 and not N.is_multigraph()
-    A=pygraphviz.AGraph(name=N.name,strict=strict,directed=directed)
-
-    # default graph attributes
-    A.graph_attr.update(N.graph.get('graph',{}))
-    A.node_attr.update(N.graph.get('node',{}))
-    A.edge_attr.update(N.graph.get('edge',{}))
-
-    # add nodes
-    for n,nodedata in N.nodes(data=True):
-        A.add_node(n,**nodedata)
-
-    # loop over edges
-
-    if N.is_multigraph():
-        for u,v,key,edgedata in N.edges_iter(data=True,keys=True):
-            str_edgedata=dict((k,str(v)) for k,v in edgedata.items())
-            A.add_edge(u,v,key=str(key),**str_edgedata)
-    else:
-        for u,v,edgedata in N.edges_iter(data=True):
-            str_edgedata=dict((k,str(v)) for k,v in edgedata.items())
-            A.add_edge(u,v,**str_edgedata)
-
-
-    return A
-
-def write_dot(G,path):
-    """Write NetworkX graph G to Graphviz dot format on path.
-
-    Parameters
-    ----------
-    G : graph
-       A networkx graph
-    path : filename
-       Filename or file handle to write
-    """
-    try:
-        import pygraphviz
-    except ImportError:
-        raise ImportError('requires pygraphviz ',
-                          'http://networkx.lanl.gov/pygraphviz ',
-                          '(not available for Python3)')
-    A=to_agraph(G)
-    A.write(path)
-    A.clear()
-    return
-
-def read_dot(path):
-    """Return a NetworkX graph from a dot file on path.
-
-    Parameters
-    ----------
-    path : file or string
-       File name or file handle to read.
-    """
-    try:
-        import pygraphviz
-    except ImportError:
-        raise ImportError('read_dot() requires pygraphviz ',
-                          'http://networkx.lanl.gov/pygraphviz ',
-                          '(not available for Python3)')
-    A=pygraphviz.AGraph(file=path)
-    return from_agraph(A)
-
-
-def graphviz_layout(G,prog='neato',root=None, args=''):
-    """Create node positions for G using Graphviz.
-
-    Parameters
-    ----------
-    G : NetworkX graph
-      A graph created with NetworkX
-    prog : string
-      Name of Graphviz layout program
-    root : string, optional
-      Root node for twopi layout
-    args : string, optional
-      Extra arguments to Graphviz layout program
-
-    Returns : dictionary
-      Dictionary of x,y, positions keyed by node.
-
-    Examples
-    --------
-    >>> G=nx.petersen_graph()
-    >>> pos=nx.graphviz_layout(G)
-    >>> pos=nx.graphviz_layout(G,prog='dot')
-
-    Notes
-    -----
-    This is a wrapper for pygraphviz_layout.
-
-    """
-    return pygraphviz_layout(G,prog=prog,root=root,args=args)
-
-def pygraphviz_layout(G,prog='neato',root=None, args=''):
-    """Create node positions for G using Graphviz.
-
-    Parameters
-    ----------
-    G : NetworkX graph
-      A graph created with NetworkX
-    prog : string
-      Name of Graphviz layout program
-    root : string, optional
-      Root node for twopi layout
-    args : string, optional
-      Extra arguments to Graphviz layout program
-
-    Returns : dictionary
-      Dictionary of x,y, positions keyed by node.
-
-    Examples
-    --------
-    >>> G=nx.petersen_graph()
-    >>> pos=nx.graphviz_layout(G)
-    >>> pos=nx.graphviz_layout(G,prog='dot')
-
-    """
-    try:
-        import pygraphviz
-    except ImportError:
-        raise ImportError('requires pygraphviz ',
-                          'http://networkx.lanl.gov/pygraphviz ',
-                          '(not available for Python3)')
-    if root is not None:
-        args+="-Groot=%s"%root
-    A=to_agraph(G)
-    A.layout(prog=prog,args=args)
-    node_pos={}
-    for n in G:
-        node=pygraphviz.Node(A,n)
-        try:
-            xx,yy=node.attr["pos"].split(',')
-            node_pos[n]=(float(xx),float(yy))
-        except:
-            print("no position for node",n)
-            node_pos[n]=(0.0,0.0)
-    return node_pos
-
-@nx.utils.open_file(5, 'w')
-def view_pygraphviz(G, edgelabel=None, prog='dot', args='',
-                       suffix='', path=None):
-    """Views the graph G using the specified layout algorithm.
-
-    Parameters
-    ----------
-    G : NetworkX graph
-        The machine to draw.
-    edgelabel : str, callable, None
-        If a string, then it specifes the edge attribute to be displayed
-        on the edge labels. If a callable, then it is called for each
-        edge and it should return the string to be displayed on the edges.
-        The function signature of `edgelabel` should be edgelabel(data),
-        where `data` is the edge attribute dictionary.
-    prog : string
-        Name of Graphviz layout program.
-    args : str
-        Additional arguments to pass to the Graphviz layout program.
-    suffix : str
-        If `filename` is None, we save to a temporary file.  The value of
-        `suffix` will appear at the tail end of the temporary filename.
-    path : str, None
-        The filename used to save the image.  If None, save to a temporary
-        file.  File formats are the same as those from pygraphviz.agraph.draw.
-
-    Returns
-    -------
-    path : str
-        The filename of the generated image.
-    A : PyGraphviz graph
-        The PyGraphviz graph instance used to generate the image.
-
-    Notes
-    -----
-    If this function is called in succession too quickly, sometimes the
-    image is not displayed. So you might consider time.sleep(.5) between
-    calls if you experience problems.
-
-    """
-    if not len(G):
-        raise nx.NetworkXException("An empty graph cannot be drawn.")
-
-    import pygraphviz
-
-    # If we are providing default values for graphviz, these must be set
-    # before any nodes or edges are added to the PyGraphviz graph object.
-    # The reason for this is that default values only affect incoming objects.
-    # If you change the default values after the objects have been added,
-    # then they inherit no value and are set only if explicitly set.
-
-    # to_agraph() uses these values.
-    attrs = ['edge', 'node', 'graph']
-    for attr in attrs:
-        if attr not in G.graph:
-            G.graph[attr] = {}
-
-    # These are the default values.
-    edge_attrs = {'fontsize': '10'}
-    node_attrs = {'style': 'filled',
-                  'fillcolor': '#0000FF40',
-                  'height': '0.75',
-                  'width': '0.75',
-                  'shape': 'circle'}
-    graph_attrs = {}
-
-    def update_attrs(which, attrs):
-        # Update graph attributes. Return list of those which were added.
-        added = []
-        for k,v in attrs.items():
-            if k not in G.graph[which]:
-                G.graph[which][k] = v
-                added.append(k)
-
-    def clean_attrs(which, added):
-        # Remove added attributes
-        for attr in added:
-            del G.graph[which][attr]
-        if not G.graph[which]:
-            del G.graph[which]
-
-    # Update all default values
-    update_attrs('edge', edge_attrs)
-    update_attrs('node', node_attrs)
-    update_attrs('graph', graph_attrs)
-
-    # Convert to agraph, so we inherit default values
-    A = to_agraph(G)
-
-    # Remove the default values we added to the original graph.
-    clean_attrs('edge', edge_attrs)
-    clean_attrs('node', node_attrs)
-    clean_attrs('graph', graph_attrs)
-
-    # If the user passed in an edgelabel, we update the labels for all edges.
-    if edgelabel is not None:
-        if not hasattr(edgelabel, '__call__'):
-            def func(data):
-                return ''.join(["  ", str(data[edgelabel]), "  "])
-        else:
-            func = edgelabel
-
-        # update all the edge labels
-        if G.is_multigraph():
-            for u,v,key,data in G.edges_iter(keys=True, data=True):
-                # PyGraphviz doesn't convert the key to a string. See #339
-                edge = A.get_edge(u,v,str(key))
-                edge.attr['label'] = str(func(data))
-        else:
-            for u,v,data in G.edges_iter(data=True):
-                edge = A.get_edge(u,v)
-                edge.attr['label'] = str(func(data))
-
-    if path is None:
-        ext = 'png'
-        if suffix:
-            suffix = '_%s.%s' % (suffix, ext)
-        else:
-            suffix = '.%s' % (ext,)
-        path = tempfile.NamedTemporaryFile(suffix=suffix, delete=False)
-    else:
-        # Assume the decorator worked and it is a file-object.
-        pass
-
-    display_pygraphviz(A, path=path, prog=prog, args=args)
-
-    return path.name, A
-
-def display_pygraphviz(graph, path, format=None, prog=None, args=''):
-    """Internal function to display a graph in OS dependent manner.
-
-    Parameters
-    ----------
-    graph : PyGraphviz graph
-        A PyGraphviz AGraph instance.
-    path :  file object
-        An already opened file object that will be closed.
-    format : str, None
-        An attempt is made to guess the output format based on the extension
-        of the filename. If that fails, the value of `format` is used.
-    prog : string
-        Name of Graphviz layout program.
-    args : str
-        Additional arguments to pass to the Graphviz layout program.
-
-    Notes
-    -----
-    If this function is called in succession too quickly, sometimes the
-    image is not displayed. So you might consider time.sleep(.5) between
-    calls if you experience problems.
-
-    """
-    if format is None:
-        filename = path.name
-        format = os.path.splitext(filename)[1].lower()[1:]
-    if not format:
-        # Let the draw() function use its default
-        format = None
-
-    # Save to a file and display in the default viewer.
-    # We must close the file before viewing it.
-    graph.draw(path, format, prog, args)
-    path.close()
-    nx.utils.default_opener(filename)
-
-# fixture for nose tests
-def setup_module(module):
-    from nose import SkipTest
-    try:
-        import pygraphviz
-    except:
-        raise SkipTest("pygraphviz not available")
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/drawing/nx_pydot.py b/lib/python2.7/site-packages/setoolsgui/networkx/drawing/nx_pydot.py
deleted file mode 100644
index 183f6ab..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/drawing/nx_pydot.py
+++ /dev/null
@@ -1,287 +0,0 @@
-"""
-*****
-Pydot
-*****
-
-Import and export NetworkX graphs in Graphviz dot format using pydot.
-
-Either this module or nx_pygraphviz can be used to interface with graphviz.
-
-See Also
---------
-Pydot: http://code.google.com/p/pydot/
-Graphviz:          http://www.research.att.com/sw/tools/graphviz/
-DOT Language:  http://www.graphviz.org/doc/info/lang.html
-"""
-#    Copyright (C) 2004-2013 by
-#    Aric Hagberg <hagberg@lanl.gov>
-#    Dan Schult <dschult@colgate.edu>
-#    Pieter Swart <swart@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-from networkx.utils import open_file, make_str
-import networkx as nx
-__author__ = """Aric Hagberg (aric.hagberg@gmail.com)"""
-__all__ = ['write_dot', 'read_dot', 'graphviz_layout', 'pydot_layout',
-           'to_pydot', 'from_pydot']
-
-@open_file(1,mode='w')
-def write_dot(G,path):
-    """Write NetworkX graph G to Graphviz dot format on path.
-
-    Path can be a string or a file handle.
-    """
-    try:
-        import pydot
-    except ImportError:
-        raise ImportError("write_dot() requires pydot",
-                          "http://code.google.com/p/pydot/")
-    P=to_pydot(G)
-    path.write(P.to_string())
-    return
-
-@open_file(0,mode='r')
-def read_dot(path):
-    """Return a NetworkX MultiGraph or MultiDiGraph from a dot file on path.
-
-    Parameters
-    ----------
-    path : filename or file handle
-
-    Returns
-    -------
-    G : NetworkX multigraph
-        A MultiGraph or MultiDiGraph.
-
-    Notes
-    -----
-    Use G=nx.Graph(nx.read_dot(path)) to return a Graph instead of a MultiGraph.
-    """
-    try:
-        import pydot
-    except ImportError:
-        raise ImportError("read_dot() requires pydot",
-                          "http://code.google.com/p/pydot/")
-
-    data=path.read()
-    P=pydot.graph_from_dot_data(data)
-    return from_pydot(P)
-
-def from_pydot(P):
-    """Return a NetworkX graph from a Pydot graph.
-
-    Parameters
-    ----------
-    P : Pydot graph
-      A graph created with Pydot
-
-    Returns
-    -------
-    G : NetworkX multigraph
-        A MultiGraph or MultiDiGraph.
-
-    Examples
-    --------
-    >>> K5=nx.complete_graph(5)
-    >>> A=nx.to_pydot(K5)
-    >>> G=nx.from_pydot(A) # return MultiGraph
-    >>> G=nx.Graph(nx.from_pydot(A)) # make a Graph instead of MultiGraph
-
-    """
-    if P.get_strict(None): # pydot bug: get_strict() shouldn't take argument
-        multiedges=False
-    else:
-        multiedges=True
-
-    if P.get_type()=='graph': # undirected
-        if multiedges:
-            create_using=nx.MultiGraph()
-        else:
-            create_using=nx.Graph()
-    else:
-        if multiedges:
-            create_using=nx.MultiDiGraph()
-        else:
-            create_using=nx.DiGraph()
-
-    # assign defaults
-    N=nx.empty_graph(0,create_using)
-    N.name=P.get_name()
-
-    # add nodes, attributes to N.node_attr
-    for p in P.get_node_list():
-        n=p.get_name().strip('"')
-        if n in ('node','graph','edge'):
-            continue
-        N.add_node(n,**p.get_attributes())
-
-    # add edges
-    for e in P.get_edge_list():
-        u=e.get_source().strip('"')
-        v=e.get_destination().strip('"')
-        attr=e.get_attributes()
-        N.add_edge(u,v,**attr)
-
-    # add default attributes for graph, nodes, edges
-    N.graph['graph']=P.get_attributes()
-    try:
-        N.graph['node']=P.get_node_defaults()[0]
-    except:# IndexError,TypeError:
-        N.graph['node']={}
-    try:
-        N.graph['edge']=P.get_edge_defaults()[0]
-    except:# IndexError,TypeError:
-        N.graph['edge']={}
-    return N
-
-def to_pydot(N, strict=True):
-    """Return a pydot graph from a NetworkX graph N.
-
-    Parameters
-    ----------
-    N : NetworkX graph
-      A graph created with NetworkX
-
-    Examples
-    --------
-    >>> K5=nx.complete_graph(5)
-    >>> P=nx.to_pydot(K5)
-
-    Notes
-    -----
-
-    """
-    try:
-        import pydot
-    except ImportError:
-        raise ImportError('to_pydot() requires pydot: '
-                          'http://code.google.com/p/pydot/')
-
-    # set Graphviz graph type
-    if N.is_directed():
-        graph_type='digraph'
-    else:
-        graph_type='graph'
-    strict=N.number_of_selfloops()==0 and not N.is_multigraph()
-
-    name = N.graph.get('name')
-    graph_defaults=N.graph.get('graph',{})
-    if name is None:
-        P = pydot.Dot(graph_type=graph_type,strict=strict,**graph_defaults)
-    else:
-        P = pydot.Dot('"%s"'%name,graph_type=graph_type,strict=strict,
-                      **graph_defaults)
-    try:
-        P.set_node_defaults(**N.graph['node'])
-    except KeyError:
-        pass
-    try:
-        P.set_edge_defaults(**N.graph['edge'])
-    except KeyError:
-        pass
-
-    for n,nodedata in N.nodes_iter(data=True):
-        str_nodedata=dict((k,make_str(v)) for k,v in nodedata.items())
-        p=pydot.Node(make_str(n),**str_nodedata)
-        P.add_node(p)
-
-    if N.is_multigraph():
-        for u,v,key,edgedata in N.edges_iter(data=True,keys=True):
-            str_edgedata=dict((k,make_str(v)) for k,v in edgedata.items())
-            edge=pydot.Edge(make_str(u),make_str(v),key=make_str(key),**str_edgedata)
-            P.add_edge(edge)
-
-    else:
-        for u,v,edgedata in N.edges_iter(data=True):
-            str_edgedata=dict((k,make_str(v)) for k,v in edgedata.items())
-            edge=pydot.Edge(make_str(u),make_str(v),**str_edgedata)
-            P.add_edge(edge)
-    return P
-
-
-def pydot_from_networkx(N):
-    """Create a Pydot graph from a NetworkX graph."""
-    from warnings import warn
-    warn('pydot_from_networkx is replaced by to_pydot', DeprecationWarning)
-    return to_pydot(N)
-
-def networkx_from_pydot(D, create_using=None):
-    """Create a NetworkX graph from a Pydot graph."""
-    from warnings import warn
-    warn('networkx_from_pydot is replaced by from_pydot',
-         DeprecationWarning)
-    return from_pydot(D)
-
-def graphviz_layout(G,prog='neato',root=None, **kwds):
-    """Create node positions using Pydot and Graphviz.
-
-    Returns a dictionary of positions keyed by node.
-
-    Examples
-    --------
-    >>> G=nx.complete_graph(4)
-    >>> pos=nx.graphviz_layout(G)
-    >>> pos=nx.graphviz_layout(G,prog='dot')
-
-    Notes
-    -----
-    This is a wrapper for pydot_layout.
-    """
-    return pydot_layout(G=G,prog=prog,root=root,**kwds)
-
-
-def pydot_layout(G,prog='neato',root=None, **kwds):
-    """Create node positions using Pydot and Graphviz.
-
-    Returns a dictionary of positions keyed by node.
-
-    Examples
-    --------
-    >>> G=nx.complete_graph(4)
-    >>> pos=nx.pydot_layout(G)
-    >>> pos=nx.pydot_layout(G,prog='dot')
-    """
-    try:
-        import pydot
-    except ImportError:
-        raise ImportError('pydot_layout() requires pydot ',
-                          'http://code.google.com/p/pydot/')
-
-    P=to_pydot(G)
-    if root is not None :
-        P.set("root",make_str(root))
-
-    D=P.create_dot(prog=prog)
-
-    if D=="":  # no data returned
-        print("Graphviz layout with %s failed"%(prog))
-        print()
-        print("To debug what happened try:")
-        print("P=pydot_from_networkx(G)")
-        print("P.write_dot(\"file.dot\")")
-        print("And then run %s on file.dot"%(prog))
-        return
-
-    Q=pydot.graph_from_dot_data(D)
-
-    node_pos={}
-    for n in G.nodes():
-        pydot_node = pydot.Node(make_str(n)).get_name().encode('utf-8')
-        node=Q.get_node(pydot_node)
-
-        if isinstance(node,list):
-            node=node[0]
-        pos=node.get_pos()[1:-1] # strip leading and trailing double quotes
-        if pos != None:
-            xx,yy=pos.split(",")
-            node_pos[n]=(float(xx),float(yy))
-    return node_pos
-
-# fixture for nose tests
-def setup_module(module):
-    from nose import SkipTest
-    try:
-        import pydot
-        import dot_parser
-    except:
-        raise SkipTest("pydot not available")
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/drawing/nx_pylab.py b/lib/python2.7/site-packages/setoolsgui/networkx/drawing/nx_pylab.py
deleted file mode 100644
index c7d0cf6..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/drawing/nx_pylab.py
+++ /dev/null
@@ -1,896 +0,0 @@
-"""
-**********
-Matplotlib
-**********
-
-Draw networks with matplotlib.
-
-See Also
---------
-
-matplotlib:     http://matplotlib.sourceforge.net/
-
-pygraphviz:     http://networkx.lanl.gov/pygraphviz/
-
-"""
-#    Copyright (C) 2004-2012 by
-#    Aric Hagberg <hagberg@lanl.gov>
-#    Dan Schult <dschult@colgate.edu>
-#    Pieter Swart <swart@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-import networkx as nx
-from networkx.drawing.layout import shell_layout,\
-    circular_layout,spectral_layout,spring_layout,random_layout
-__author__ = """Aric Hagberg (hagberg@lanl.gov)"""
-__all__ = ['draw',
-           'draw_networkx',
-           'draw_networkx_nodes',
-           'draw_networkx_edges',
-           'draw_networkx_labels',
-           'draw_networkx_edge_labels',
-           'draw_circular',
-           'draw_random',
-           'draw_spectral',
-           'draw_spring',
-           'draw_shell',
-           'draw_graphviz']
-
-def draw(G, pos=None, ax=None, hold=None, **kwds):
-    """Draw the graph G with Matplotlib.
-
-    Draw the graph as a simple representation with no node
-    labels or edge labels and using the full Matplotlib figure area
-    and no axis labels by default.  See draw_networkx() for more
-    full-featured drawing that allows title, axis labels etc.
-
-    Parameters
-    ----------
-    G : graph
-       A networkx graph
-
-    pos : dictionary, optional
-       A dictionary with nodes as keys and positions as values.
-       If not specified a spring layout positioning will be computed.
-       See networkx.layout for functions that compute node positions.
-
-    ax : Matplotlib Axes object, optional
-       Draw the graph in specified Matplotlib axes.
-
-    hold : bool, optional
-       Set the Matplotlib hold state.  If True subsequent draw
-       commands will be added to the current axes.
-
-    **kwds : optional keywords
-       See networkx.draw_networkx() for a description of optional keywords.
-
-    Examples
-    --------
-    >>> G=nx.dodecahedral_graph()
-    >>> nx.draw(G)
-    >>> nx.draw(G,pos=nx.spring_layout(G)) # use spring layout
-
-    See Also
-    --------
-    draw_networkx()
-    draw_networkx_nodes()
-    draw_networkx_edges()
-    draw_networkx_labels()
-    draw_networkx_edge_labels()
-
-    Notes
-    -----
-    This function has the same name as pylab.draw and pyplot.draw
-    so beware when using
-
-    >>> from networkx import *
-
-    since you might overwrite the pylab.draw function.
-
-    With pyplot use
-
-    >>> import matplotlib.pyplot as plt
-    >>> import networkx as nx
-    >>> G=nx.dodecahedral_graph()
-    >>> nx.draw(G)  # networkx draw()
-    >>> plt.draw()  # pyplot draw()
-
-    Also see the NetworkX drawing examples at
-    http://networkx.lanl.gov/gallery.html
-    """
-    try:
-        import matplotlib.pyplot as plt
-    except ImportError:
-        raise ImportError("Matplotlib required for draw()")
-    except RuntimeError:
-        print("Matplotlib unable to open display")
-        raise
-
-    if ax is None:
-        cf = plt.gcf()
-    else:
-        cf = ax.get_figure()
-    cf.set_facecolor('w')
-    if ax is None:
-        if cf._axstack() is None:
-            ax=cf.add_axes((0,0,1,1))
-        else:
-            ax=cf.gca()
-
- # allow callers to override the hold state by passing hold=True|False
-    b = plt.ishold()
-    h = kwds.pop('hold', None)
-    if h is not None:
-        plt.hold(h)
-    try:
-        draw_networkx(G,pos=pos,ax=ax,**kwds)
-        ax.set_axis_off()
-        plt.draw_if_interactive()
-    except:
-        plt.hold(b)
-        raise
-    plt.hold(b)
-    return
-
-
-def draw_networkx(G, pos=None, with_labels=True, **kwds):
-    """Draw the graph G using Matplotlib.
-
-    Draw the graph with Matplotlib with options for node positions,
-    labeling, titles, and many other drawing features.
-    See draw() for simple drawing without labels or axes.
-
-    Parameters
-    ----------
-    G : graph
-       A networkx graph
-
-    pos : dictionary, optional
-       A dictionary with nodes as keys and positions as values.
-       If not specified a spring layout positioning will be computed.
-       See networkx.layout for functions that compute node positions.
-
-    with_labels :  bool, optional (default=True)
-       Set to True to draw labels on the nodes.
-
-    ax : Matplotlib Axes object, optional
-       Draw the graph in the specified Matplotlib axes.
-
-    nodelist : list, optional (default G.nodes())
-       Draw only specified nodes
-
-    edgelist : list, optional (default=G.edges())
-       Draw only specified edges
-
-    node_size : scalar or array, optional (default=300)
-       Size of nodes.  If an array is specified it must be the
-       same length as nodelist.
-
-    node_color : color string, or array of floats, (default='r')
-       Node color. Can be a single color format string,
-       or a  sequence of colors with the same length as nodelist.
-       If numeric values are specified they will be mapped to
-       colors using the cmap and vmin,vmax parameters.  See
-       matplotlib.scatter for more details.
-
-    node_shape :  string, optional (default='o')
-       The shape of the node.  Specification is as matplotlib.scatter
-       marker, one of 'so^>v<dph8'.
-
-    alpha : float, optional (default=1.0)
-       The node transparency
-
-    cmap : Matplotlib colormap, optional (default=None)
-       Colormap for mapping intensities of nodes
-
-    vmin,vmax : float, optional (default=None)
-       Minimum and maximum for node colormap scaling
-
-    linewidths : [None | scalar | sequence]
-       Line width of symbol border (default =1.0)
-
-    width : float, optional (default=1.0)
-       Line width of edges
-
-    edge_color : color string, or array of floats (default='r')
-       Edge color. Can be a single color format string,
-       or a sequence of colors with the same length as edgelist.
-       If numeric values are specified they will be mapped to
-       colors using the edge_cmap and edge_vmin,edge_vmax parameters.
-
-    edge_ cmap : Matplotlib colormap, optional (default=None)
-       Colormap for mapping intensities of edges
-
-    edge_vmin,edge_vmax : floats, optional (default=None)
-       Minimum and maximum for edge colormap scaling
-
-    style : string, optional (default='solid')
-       Edge line style (solid|dashed|dotted,dashdot)
-
-    labels : dictionary, optional (default=None)
-       Node labels in a dictionary keyed by node of text labels
-
-    font_size : int, optional (default=12)
-       Font size for text labels
-
-    font_color : string, optional (default='k' black)
-       Font color string
-
-    font_weight : string, optional (default='normal')
-       Font weight
-
-    font_family : string, optional (default='sans-serif')
-       Font family
-
-    label : string, optional
-        Label for graph legend
-
-    Examples
-    --------
-    >>> G=nx.dodecahedral_graph()
-    >>> nx.draw(G)
-    >>> nx.draw(G,pos=nx.spring_layout(G)) # use spring layout
-
-    >>> import matplotlib.pyplot as plt
-    >>> limits=plt.axis('off') # turn of axis
-
-    Also see the NetworkX drawing examples at
-    http://networkx.lanl.gov/gallery.html
-
-    See Also
-    --------
-    draw()
-    draw_networkx_nodes()
-    draw_networkx_edges()
-    draw_networkx_labels()
-    draw_networkx_edge_labels()
-    """
-    try:
-        import matplotlib.pyplot as plt
-    except ImportError:
-        raise ImportError("Matplotlib required for draw()")
-    except RuntimeError:
-        print("Matplotlib unable to open display")
-        raise
-
-    if pos is None:
-        pos=nx.drawing.spring_layout(G) # default to spring layout
-
-    node_collection=draw_networkx_nodes(G, pos, **kwds)
-    edge_collection=draw_networkx_edges(G, pos, **kwds)
-    if with_labels:
-        draw_networkx_labels(G, pos, **kwds)
-    plt.draw_if_interactive()
-
-def draw_networkx_nodes(G, pos,
-                        nodelist=None,
-                        node_size=300,
-                        node_color='r',
-                        node_shape='o',
-                        alpha=1.0,
-                        cmap=None,
-                        vmin=None,
-                        vmax=None,
-                        ax=None,
-                        linewidths=None,
-                        label = None,
-                        **kwds):
-    """Draw the nodes of the graph G.
-
-    This draws only the nodes of the graph G.
-
-    Parameters
-    ----------
-    G : graph
-       A networkx graph
-
-    pos : dictionary
-       A dictionary with nodes as keys and positions as values.
-       If not specified a spring layout positioning will be computed.
-       See networkx.layout for functions that compute node positions.
-
-    ax : Matplotlib Axes object, optional
-       Draw the graph in the specified Matplotlib axes.
-
-    nodelist : list, optional
-       Draw only specified nodes (default G.nodes())
-
-    node_size : scalar or array
-       Size of nodes (default=300).  If an array is specified it must be the
-       same length as nodelist.
-
-    node_color : color string, or array of floats
-       Node color. Can be a single color format string (default='r'),
-       or a  sequence of colors with the same length as nodelist.
-       If numeric values are specified they will be mapped to
-       colors using the cmap and vmin,vmax parameters.  See
-       matplotlib.scatter for more details.
-
-    node_shape :  string
-       The shape of the node.  Specification is as matplotlib.scatter
-       marker, one of 'so^>v<dph8' (default='o').
-
-    alpha : float
-       The node transparency (default=1.0)
-
-    cmap : Matplotlib colormap
-       Colormap for mapping intensities of nodes (default=None)
-
-    vmin,vmax : floats
-       Minimum and maximum for node colormap scaling (default=None)
-
-    linewidths : [None | scalar | sequence]
-       Line width of symbol border (default =1.0)
-
-    label : [None| string]
-       Label for legend
-
-    Examples
-    --------
-    >>> G=nx.dodecahedral_graph()
-    >>> nodes=nx.draw_networkx_nodes(G,pos=nx.spring_layout(G))
-
-    Also see the NetworkX drawing examples at
-    http://networkx.lanl.gov/gallery.html
-
-    See Also
-    --------
-    draw()
-    draw_networkx()
-    draw_networkx_edges()
-    draw_networkx_labels()
-    draw_networkx_edge_labels()
-    """
-    try:
-        import matplotlib.pyplot as plt
-        import numpy
-    except ImportError:
-        raise ImportError("Matplotlib required for draw()")
-    except RuntimeError:
-        print("Matplotlib unable to open display")
-        raise
-
-
-    if ax is None:
-        ax=plt.gca()
-
-    if nodelist is None:
-        nodelist=G.nodes()
-
-    if not nodelist or len(nodelist)==0:  # empty nodelist, no drawing
-        return None
-
-    try:
-        xy=numpy.asarray([pos[v] for v in nodelist])
-    except KeyError as e:
-        raise nx.NetworkXError('Node %s has no position.'%e)
-    except ValueError:
-        raise nx.NetworkXError('Bad value in node positions.')
-
-
-
-    node_collection=ax.scatter(xy[:,0], xy[:,1],
-                               s=node_size,
-                               c=node_color,
-                               marker=node_shape,
-                               cmap=cmap,
-                               vmin=vmin,
-                               vmax=vmax,
-                               alpha=alpha,
-                               linewidths=linewidths,
-                               label=label)
-
-    node_collection.set_zorder(2)
-    return node_collection
-
-
-def draw_networkx_edges(G, pos,
-                        edgelist=None,
-                        width=1.0,
-                        edge_color='k',
-                        style='solid',
-                        alpha=None,
-                        edge_cmap=None,
-                        edge_vmin=None,
-                        edge_vmax=None,
-                        ax=None,
-                        arrows=True,
-                        label=None,
-                        **kwds):
-    """Draw the edges of the graph G.
-
-    This draws only the edges of the graph G.
-
-    Parameters
-    ----------
-    G : graph
-       A networkx graph
-
-    pos : dictionary
-       A dictionary with nodes as keys and positions as values.
-       If not specified a spring layout positioning will be computed.
-       See networkx.layout for functions that compute node positions.
-
-    edgelist : collection of edge tuples
-       Draw only specified edges(default=G.edges())
-
-    width : float
-       Line width of edges (default =1.0)
-
-    edge_color : color string, or array of floats
-       Edge color. Can be a single color format string (default='r'),
-       or a sequence of colors with the same length as edgelist.
-       If numeric values are specified they will be mapped to
-       colors using the edge_cmap and edge_vmin,edge_vmax parameters.
-
-    style : string
-       Edge line style (default='solid') (solid|dashed|dotted,dashdot)
-
-    alpha : float
-       The edge transparency (default=1.0)
-
-    edge_ cmap : Matplotlib colormap
-       Colormap for mapping intensities of edges (default=None)
-
-    edge_vmin,edge_vmax : floats
-       Minimum and maximum for edge colormap scaling (default=None)
-
-    ax : Matplotlib Axes object, optional
-       Draw the graph in the specified Matplotlib axes.
-
-    arrows : bool, optional (default=True)
-       For directed graphs, if True draw arrowheads.
-
-    label : [None| string]
-       Label for legend
-
-    Notes
-    -----
-    For directed graphs, "arrows" (actually just thicker stubs) are drawn
-    at the head end.  Arrows can be turned off with keyword arrows=False.
-    Yes, it is ugly but drawing proper arrows with Matplotlib this
-    way is tricky.
-
-    Examples
-    --------
-    >>> G=nx.dodecahedral_graph()
-    >>> edges=nx.draw_networkx_edges(G,pos=nx.spring_layout(G))
-
-    Also see the NetworkX drawing examples at
-    http://networkx.lanl.gov/gallery.html
-
-    See Also
-    --------
-    draw()
-    draw_networkx()
-    draw_networkx_nodes()
-    draw_networkx_labels()
-    draw_networkx_edge_labels()
-    """
-    try:
-        import matplotlib
-        import matplotlib.pyplot as plt
-        import matplotlib.cbook as cb
-        from matplotlib.colors import colorConverter,Colormap
-        from matplotlib.collections import LineCollection
-        import numpy
-    except ImportError:
-        raise ImportError("Matplotlib required for draw()")
-    except RuntimeError:
-        print("Matplotlib unable to open display")
-        raise
-
-    if ax is None:
-        ax=plt.gca()
-
-    if edgelist is None:
-        edgelist=G.edges()
-
-    if not edgelist or len(edgelist)==0: # no edges!
-        return None
-
-    # set edge positions
-    edge_pos=numpy.asarray([(pos[e[0]],pos[e[1]]) for e in edgelist])
-
-    if not cb.iterable(width):
-        lw = (width,)
-    else:
-        lw = width
-
-    if not cb.is_string_like(edge_color) \
-           and cb.iterable(edge_color) \
-           and len(edge_color)==len(edge_pos):
-        if numpy.alltrue([cb.is_string_like(c)
-                         for c in edge_color]):
-            # (should check ALL elements)
-            # list of color letters such as ['k','r','k',...]
-            edge_colors = tuple([colorConverter.to_rgba(c,alpha)
-                                 for c in edge_color])
-        elif numpy.alltrue([not cb.is_string_like(c)
-                           for c in edge_color]):
-            # If color specs are given as (rgb) or (rgba) tuples, we're OK
-            if numpy.alltrue([cb.iterable(c) and len(c) in (3,4)
-                             for c in edge_color]):
-                edge_colors = tuple(edge_color)
-            else:
-                # numbers (which are going to be mapped with a colormap)
-                edge_colors = None
-        else:
-            raise ValueError('edge_color must consist of either color names or numbers')
-    else:
-        if cb.is_string_like(edge_color) or len(edge_color)==1:
-            edge_colors = ( colorConverter.to_rgba(edge_color, alpha), )
-        else:
-            raise ValueError('edge_color must be a single color or list of exactly m colors where m is the number or edges')
-
-    edge_collection = LineCollection(edge_pos,
-                                     colors       = edge_colors,
-                                     linewidths   = lw,
-                                     antialiaseds = (1,),
-                                     linestyle    = style,
-                                     transOffset = ax.transData,
-                                     )
-
-
-    edge_collection.set_zorder(1) # edges go behind nodes
-    edge_collection.set_label(label)
-    ax.add_collection(edge_collection)
-
-    # Note: there was a bug in mpl regarding the handling of alpha values for
-    # each line in a LineCollection.  It was fixed in matplotlib in r7184 and
-    # r7189 (June 6 2009).  We should then not set the alpha value globally,
-    # since the user can instead provide per-edge alphas now.  Only set it
-    # globally if provided as a scalar.
-    if cb.is_numlike(alpha):
-        edge_collection.set_alpha(alpha)
-
-    if edge_colors is None:
-        if edge_cmap is not None:
-            assert(isinstance(edge_cmap, Colormap))
-        edge_collection.set_array(numpy.asarray(edge_color))
-        edge_collection.set_cmap(edge_cmap)
-        if edge_vmin is not None or edge_vmax is not None:
-            edge_collection.set_clim(edge_vmin, edge_vmax)
-        else:
-            edge_collection.autoscale()
-
-    arrow_collection=None
-
-    if G.is_directed() and arrows:
-
-        # a directed graph hack
-        # draw thick line segments at head end of edge
-        # waiting for someone else to implement arrows that will work
-        arrow_colors = edge_colors
-        a_pos=[]
-        p=1.0-0.25 # make head segment 25 percent of edge length
-        for src,dst in edge_pos:
-            x1,y1=src
-            x2,y2=dst
-            dx=x2-x1 # x offset
-            dy=y2-y1 # y offset
-            d=numpy.sqrt(float(dx**2+dy**2)) # length of edge
-            if d==0: # source and target at same position
-                continue
-            if dx==0: # vertical edge
-                xa=x2
-                ya=dy*p+y1
-            if dy==0: # horizontal edge
-                ya=y2
-                xa=dx*p+x1
-            else:
-                theta=numpy.arctan2(dy,dx)
-                xa=p*d*numpy.cos(theta)+x1
-                ya=p*d*numpy.sin(theta)+y1
-
-            a_pos.append(((xa,ya),(x2,y2)))
-
-        arrow_collection = LineCollection(a_pos,
-                                colors       = arrow_colors,
-                                linewidths   = [4*ww for ww in lw],
-                                antialiaseds = (1,),
-                                transOffset = ax.transData,
-                                )
-
-        arrow_collection.set_zorder(1) # edges go behind nodes
-        arrow_collection.set_label(label)
-        ax.add_collection(arrow_collection)
-
-
-    # update view
-    minx = numpy.amin(numpy.ravel(edge_pos[:,:,0]))
-    maxx = numpy.amax(numpy.ravel(edge_pos[:,:,0]))
-    miny = numpy.amin(numpy.ravel(edge_pos[:,:,1]))
-    maxy = numpy.amax(numpy.ravel(edge_pos[:,:,1]))
-
-    w = maxx-minx
-    h = maxy-miny
-    padx, pady = 0.05*w, 0.05*h
-    corners = (minx-padx, miny-pady), (maxx+padx, maxy+pady)
-    ax.update_datalim( corners)
-    ax.autoscale_view()
-
-#    if arrow_collection:
-
-    return edge_collection
-
-
-def draw_networkx_labels(G, pos,
-                         labels=None,
-                         font_size=12,
-                         font_color='k',
-                         font_family='sans-serif',
-                         font_weight='normal',
-                         alpha=1.0,
-                         ax=None,
-                         **kwds):
-    """Draw node labels on the graph G.
-
-    Parameters
-    ----------
-    G : graph
-       A networkx graph
-
-    pos : dictionary, optional
-       A dictionary with nodes as keys and positions as values.
-       If not specified a spring layout positioning will be computed.
-       See networkx.layout for functions that compute node positions.
-
-    labels : dictionary, optional (default=None)
-       Node labels in a dictionary keyed by node of text labels
-
-    font_size : int
-       Font size for text labels (default=12)
-
-    font_color : string
-       Font color string (default='k' black)
-
-    font_family : string
-       Font family (default='sans-serif')
-
-    font_weight : string
-       Font weight (default='normal')
-
-    alpha : float
-       The text transparency (default=1.0)
-
-    ax : Matplotlib Axes object, optional
-       Draw the graph in the specified Matplotlib axes.
-
-
-    Examples
-    --------
-    >>> G=nx.dodecahedral_graph()
-    >>> labels=nx.draw_networkx_labels(G,pos=nx.spring_layout(G))
-
-    Also see the NetworkX drawing examples at
-    http://networkx.lanl.gov/gallery.html
-
-
-    See Also
-    --------
-    draw()
-    draw_networkx()
-    draw_networkx_nodes()
-    draw_networkx_edges()
-    draw_networkx_edge_labels()
-    """
-    try:
-        import matplotlib.pyplot as plt
-        import matplotlib.cbook as cb
-    except ImportError:
-        raise ImportError("Matplotlib required for draw()")
-    except RuntimeError:
-        print("Matplotlib unable to open display")
-        raise
-
-    if ax is None:
-        ax=plt.gca()
-
-    if labels is None:
-        labels=dict( (n,n) for n in G.nodes())
-
-    # set optional alignment
-    horizontalalignment=kwds.get('horizontalalignment','center')
-    verticalalignment=kwds.get('verticalalignment','center')
-
-    text_items={}  # there is no text collection so we'll fake one
-    for n, label in labels.items():
-        (x,y)=pos[n]
-        if not cb.is_string_like(label):
-            label=str(label) # this will cause "1" and 1 to be labeled the same
-        t=ax.text(x, y,
-                  label,
-                  size=font_size,
-                  color=font_color,
-                  family=font_family,
-                  weight=font_weight,
-                  horizontalalignment=horizontalalignment,
-                  verticalalignment=verticalalignment,
-                  transform = ax.transData,
-                  clip_on=True,
-                  )
-        text_items[n]=t
-
-    return text_items
-
-def draw_networkx_edge_labels(G, pos,
-                              edge_labels=None,
-                              label_pos=0.5,
-                              font_size=10,
-                              font_color='k',
-                              font_family='sans-serif',
-                              font_weight='normal',
-                              alpha=1.0,
-                              bbox=None,
-                              ax=None,
-                              rotate=True,
-                              **kwds):
-    """Draw edge labels.
-
-    Parameters
-    ----------
-    G : graph
-       A networkx graph
-
-    pos : dictionary, optional
-       A dictionary with nodes as keys and positions as values.
-       If not specified a spring layout positioning will be computed.
-       See networkx.layout for functions that compute node positions.
-
-    ax : Matplotlib Axes object, optional
-       Draw the graph in the specified Matplotlib axes.
-
-    alpha : float
-       The text transparency (default=1.0)
-
-    edge_labels : dictionary
-       Edge labels in a dictionary keyed by edge two-tuple of text
-       labels (default=None). Only labels for the keys in the dictionary
-       are drawn.
-
-    label_pos : float
-       Position of edge label along edge (0=head, 0.5=center, 1=tail)
-
-    font_size : int
-       Font size for text labels (default=12)
-
-    font_color : string
-       Font color string (default='k' black)
-
-    font_weight : string
-       Font weight (default='normal')
-
-    font_family : string
-       Font family (default='sans-serif')
-
-    bbox : Matplotlib bbox
-       Specify text box shape and colors.
-
-    clip_on : bool
-       Turn on clipping at axis boundaries (default=True)
-
-    Examples
-    --------
-    >>> G=nx.dodecahedral_graph()
-    >>> edge_labels=nx.draw_networkx_edge_labels(G,pos=nx.spring_layout(G))
-
-    Also see the NetworkX drawing examples at
-    http://networkx.lanl.gov/gallery.html
-
-    See Also
-    --------
-    draw()
-    draw_networkx()
-    draw_networkx_nodes()
-    draw_networkx_edges()
-    draw_networkx_labels()
-    """
-    try:
-        import matplotlib.pyplot as plt
-        import matplotlib.cbook as cb
-        import numpy
-    except ImportError:
-        raise ImportError("Matplotlib required for draw()")
-    except RuntimeError:
-        print("Matplotlib unable to open display")
-        raise
-
-    if ax is None:
-        ax=plt.gca()
-    if edge_labels is None:
-        labels=dict( ((u,v), d) for u,v,d in G.edges(data=True) )
-    else:
-        labels = edge_labels
-    text_items={}
-    for (n1,n2), label in labels.items():
-        (x1,y1)=pos[n1]
-        (x2,y2)=pos[n2]
-        (x,y) = (x1 * label_pos + x2 * (1.0 - label_pos),
-                 y1 * label_pos + y2 * (1.0 - label_pos))
-
-        if rotate:
-            angle=numpy.arctan2(y2-y1,x2-x1)/(2.0*numpy.pi)*360 # degrees
-            # make label orientation "right-side-up"
-            if angle > 90:
-                angle-=180
-            if angle < - 90:
-                angle+=180
-            # transform data coordinate angle to screen coordinate angle
-            xy=numpy.array((x,y))
-            trans_angle=ax.transData.transform_angles(numpy.array((angle,)),
-                                                      xy.reshape((1,2)))[0]
-        else:
-            trans_angle=0.0
-        # use default box of white with white border
-        if bbox is None:
-            bbox = dict(boxstyle='round',
-                        ec=(1.0, 1.0, 1.0),
-                        fc=(1.0, 1.0, 1.0),
-                        )
-        if not cb.is_string_like(label):
-            label=str(label) # this will cause "1" and 1 to be labeled the same
-
-        # set optional alignment
-        horizontalalignment=kwds.get('horizontalalignment','center')
-        verticalalignment=kwds.get('verticalalignment','center')
-
-        t=ax.text(x, y,
-                  label,
-                  size=font_size,
-                  color=font_color,
-                  family=font_family,
-                  weight=font_weight,
-                  horizontalalignment=horizontalalignment,
-                  verticalalignment=verticalalignment,
-                  rotation=trans_angle,
-                  transform = ax.transData,
-                  bbox = bbox,
-                  zorder = 1,
-                  clip_on=True,
-                  )
-        text_items[(n1,n2)]=t
-
-    return text_items
-
-def draw_circular(G, **kwargs):
-    """Draw the graph G with a circular layout."""
-    draw(G,circular_layout(G),**kwargs)
-
-def draw_random(G, **kwargs):
-    """Draw the graph G with a random layout."""
-    draw(G,random_layout(G),**kwargs)
-
-def draw_spectral(G, **kwargs):
-    """Draw the graph G with a spectral layout."""
-    draw(G,spectral_layout(G),**kwargs)
-
-def draw_spring(G, **kwargs):
-    """Draw the graph G with a spring layout."""
-    draw(G,spring_layout(G),**kwargs)
-
-def draw_shell(G, **kwargs):
-    """Draw networkx graph with shell layout."""
-    nlist = kwargs.get('nlist', None)
-    if nlist != None:
-        del(kwargs['nlist'])
-    draw(G,shell_layout(G,nlist=nlist),**kwargs)
-
-def draw_graphviz(G, prog="neato", **kwargs):
-    """Draw networkx graph with graphviz layout."""
-    pos=nx.drawing.graphviz_layout(G,prog)
-    draw(G,pos,**kwargs)
-
-def draw_nx(G,pos,**kwds):
-    """For backward compatibility; use draw or draw_networkx."""
-    draw(G,pos,**kwds)
-
-# fixture for nose tests
-def setup_module(module):
-    from nose import SkipTest
-    try:
-        import matplotlib as mpl
-        mpl.use('PS',warn=False)
-        import matplotlib.pyplot as plt
-    except:
-        raise SkipTest("matplotlib not available")
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/drawing/tests/test_agraph.py b/lib/python2.7/site-packages/setoolsgui/networkx/drawing/tests/test_agraph.py
deleted file mode 100644
index b2f28a3..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/drawing/tests/test_agraph.py
+++ /dev/null
@@ -1,75 +0,0 @@
-"""Unit tests for PyGraphviz intefaace.
-"""
-import os
-import tempfile
-
-from nose import SkipTest
-from nose.tools import assert_true,assert_equal
-
-import networkx as nx
-
-class TestAGraph(object):
-    @classmethod
-    def setupClass(cls):
-        global pygraphviz
-        try:
-            import pygraphviz
-        except ImportError:
-            raise SkipTest('PyGraphviz not available.')
-
-    def build_graph(self, G):
-        G.add_edge('A','B')
-        G.add_edge('A','C')
-        G.add_edge('A','C')
-        G.add_edge('B','C')
-        G.add_edge('A','D')
-        G.add_node('E')
-        return G
-
-    def assert_equal(self, G1, G2):
-        assert_true( sorted(G1.nodes())==sorted(G2.nodes()) )
-        assert_true( sorted(G1.edges())==sorted(G2.edges()) )
-
-
-    def agraph_checks(self, G):
-        G = self.build_graph(G)
-        A=nx.to_agraph(G)
-        H=nx.from_agraph(A)
-        self.assert_equal(G, H)
-
-        fname=tempfile.mktemp()
-        nx.drawing.nx_agraph.write_dot(H,fname)
-        Hin=nx.drawing.nx_agraph.read_dot(fname)
-        os.unlink(fname)
-        self.assert_equal(H,Hin)
-
-
-        (fd,fname)=tempfile.mkstemp()
-        fh=open(fname,'w')
-        nx.drawing.nx_agraph.write_dot(H,fh)
-        fh.close()
-
-        fh=open(fname,'r')
-        Hin=nx.drawing.nx_agraph.read_dot(fh)
-        fh.close()
-        os.unlink(fname)
-        self.assert_equal(H,Hin)
-
-    def test_from_agraph_name(self):
-        G=nx.Graph(name='test')
-        A=nx.to_agraph(G)
-        H=nx.from_agraph(A)
-        assert_equal(G.name,'test')
-
-
-    def testUndirected(self):
-        self.agraph_checks(nx.Graph())
-
-    def testDirected(self):
-        self.agraph_checks(nx.DiGraph())
-
-    def testMultiUndirected(self):
-        self.agraph_checks(nx.MultiGraph())
-
-    def testMultiDirected(self):
-        self.agraph_checks(nx.MultiDiGraph())
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/drawing/tests/test_layout.py b/lib/python2.7/site-packages/setoolsgui/networkx/drawing/tests/test_layout.py
deleted file mode 100644
index 0327782..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/drawing/tests/test_layout.py
+++ /dev/null
@@ -1,61 +0,0 @@
-"""Unit tests for layout functions."""
-import sys
-from nose import SkipTest
-from nose.tools import assert_equal
-import networkx as nx
-
-class TestLayout(object):
-    numpy=1 # nosetests attribute, use nosetests -a 'not numpy' to skip test
-    @classmethod
-    def setupClass(cls):
-        global numpy
-        try:
-            import numpy
-        except ImportError:
-            raise SkipTest('numpy not available.')
-
-
-    def setUp(self):
-        self.Gi=nx.grid_2d_graph(5,5)
-        self.Gs=nx.Graph()
-        self.Gs.add_path('abcdef')
-        self.bigG=nx.grid_2d_graph(25,25) #bigger than 500 nodes for sparse
-
-    def test_smoke_int(self):
-        G=self.Gi
-        vpos=nx.random_layout(G)
-        vpos=nx.circular_layout(G)
-        vpos=nx.spring_layout(G)
-        vpos=nx.fruchterman_reingold_layout(G)
-        vpos=nx.spectral_layout(G)
-        vpos=nx.spectral_layout(self.bigG)
-        vpos=nx.shell_layout(G)
-
-    def test_smoke_string(self):
-        G=self.Gs
-        vpos=nx.random_layout(G)
-        vpos=nx.circular_layout(G)
-        vpos=nx.spring_layout(G)
-        vpos=nx.fruchterman_reingold_layout(G)
-        vpos=nx.spectral_layout(G)
-        vpos=nx.shell_layout(G)
-
-
-    def test_adjacency_interface_numpy(self):
-        A=nx.to_numpy_matrix(self.Gs)
-        pos=nx.drawing.layout._fruchterman_reingold(A)
-        pos=nx.drawing.layout._fruchterman_reingold(A,dim=3)
-        assert_equal(pos.shape,(6,3))
-
-    def test_adjacency_interface_scipy(self):
-        try:
-            import scipy
-        except ImportError:
-            raise SkipTest('scipy not available.')
-
-        A=nx.to_scipy_sparse_matrix(self.Gs,dtype='f')
-        pos=nx.drawing.layout._sparse_fruchterman_reingold(A)
-        pos=nx.drawing.layout._sparse_spectral(A)
-
-        pos=nx.drawing.layout._sparse_fruchterman_reingold(A,dim=3)
-        assert_equal(pos.shape,(6,3))
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/drawing/tests/test_pydot.py b/lib/python2.7/site-packages/setoolsgui/networkx/drawing/tests/test_pydot.py
deleted file mode 100644
index 9cdffee..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/drawing/tests/test_pydot.py
+++ /dev/null
@@ -1,62 +0,0 @@
-"""
-    Unit tests for pydot drawing functions.
-"""
-import os
-import tempfile
-
-from nose import SkipTest
-from nose.tools import assert_true
-
-import networkx as nx
-
-class TestPydot(object):
-    @classmethod
-    def setupClass(cls):
-        global pydot
-        try:
-            import pydot
-            import dot_parser
-        except ImportError:
-            raise SkipTest('pydot not available.')
-
-    def build_graph(self, G):
-        G.add_edge('A','B')
-        G.add_edge('A','C')
-        G.add_edge('B','C')
-        G.add_edge('A','D')
-        G.add_node('E')
-        return G, nx.to_pydot(G)
-
-    def assert_equal(self, G1, G2):
-        assert_true( sorted(G1.nodes())==sorted(G2.nodes()) )
-        assert_true( sorted(G1.edges())==sorted(G2.edges()) )
-
-    def pydot_checks(self, G):
-        H, P = self.build_graph(G)
-        G2 = H.__class__(nx.from_pydot(P))
-        self.assert_equal(H, G2)
-
-        fname = tempfile.mktemp()
-        assert_true( P.write_raw(fname) )
-
-        Pin = pydot.graph_from_dot_file(fname)
-
-        n1 = sorted([p.get_name() for p in P.get_node_list()])
-        n2 = sorted([p.get_name() for p in Pin.get_node_list()])
-        assert_true( n1 == n2 )
-
-        e1=[(e.get_source(),e.get_destination()) for e in P.get_edge_list()]
-        e2=[(e.get_source(),e.get_destination()) for e in Pin.get_edge_list()]
-        assert_true( sorted(e1)==sorted(e2) )
-
-        Hin = nx.drawing.nx_pydot.read_dot(fname)
-        Hin = H.__class__(Hin)
-        self.assert_equal(H, Hin)
-#        os.unlink(fname)
-
-
-    def testUndirected(self):
-        self.pydot_checks(nx.Graph())
-
-    def testDirected(self):
-        self.pydot_checks(nx.DiGraph())
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/drawing/tests/test_pylab.py b/lib/python2.7/site-packages/setoolsgui/networkx/drawing/tests/test_pylab.py
deleted file mode 100644
index 9c55590..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/drawing/tests/test_pylab.py
+++ /dev/null
@@ -1,40 +0,0 @@
-"""
-    Unit tests for matplotlib drawing functions.
-"""
-
-import os
-
-from nose import SkipTest
-
-import networkx as nx
-
-class TestPylab(object):
-    @classmethod
-    def setupClass(cls):
-        global plt
-        try:
-            import matplotlib as mpl
-            mpl.use('PS',warn=False)
-            import matplotlib.pyplot as plt
-        except ImportError:
-            raise SkipTest('matplotlib not available.')
-        except RuntimeError:
-            raise SkipTest('matplotlib not available.')
-
-    def setUp(self):
-        self.G=nx.barbell_graph(5,10)
-
-
-    def test_draw(self):
-        N=self.G
-        nx.draw_spring(N)
-        plt.savefig("test.ps")
-        nx.draw_random(N)
-        plt.savefig("test.ps")
-        nx.draw_circular(N)
-        plt.savefig("test.ps")
-        nx.draw_spectral(N)
-        plt.savefig("test.ps")
-        nx.draw_spring(N.to_directed())
-        plt.savefig("test.ps")
-        os.unlink('test.ps')
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/exception.py b/lib/python2.7/site-packages/setoolsgui/networkx/exception.py
deleted file mode 100644
index 0267038..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/exception.py
+++ /dev/null
@@ -1,50 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-**********
-Exceptions
-**********
-
-Base exceptions and errors for NetworkX.
-
-"""
-__author__ = """Aric Hagberg (hagberg@lanl.gov)\nPieter Swart (swart@lanl.gov)\nDan Schult(dschult@colgate.edu)\nLoïc Séguin-C. <loicseguin@gmail.com>"""
-#    Copyright (C) 2004-2011 by
-#    Aric Hagberg <hagberg@lanl.gov>
-#    Dan Schult <dschult@colgate.edu>
-#    Pieter Swart <swart@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-#
-
-# Exception handling
-
-# the root of all Exceptions
-class NetworkXException(Exception):
-    """Base class for exceptions in NetworkX."""
-
-class NetworkXError(NetworkXException):
-    """Exception for a serious error in NetworkX"""
-
-class NetworkXPointlessConcept(NetworkXException):
-    """Harary, F. and Read, R. "Is the Null Graph a Pointless Concept?"
-In Graphs and Combinatorics Conference, George Washington University.
-New York: Springer-Verlag, 1973.
-"""
-
-class NetworkXAlgorithmError(NetworkXException):
-    """Exception for unexpected termination of algorithms."""
-
-class NetworkXUnfeasible(NetworkXAlgorithmError):
-    """Exception raised by algorithms trying to solve a problem
-    instance that has no feasible solution."""
-
-class NetworkXNoPath(NetworkXUnfeasible):
-    """Exception for algorithms that should return a path when running
-    on graphs where such a path does not exist."""
-
-class NetworkXUnbounded(NetworkXAlgorithmError):
-    """Exception raised by algorithms trying to solve a maximization
-    or a minimization problem instance that is unbounded."""
-
-class NetworkXNotImplemented(NetworkXException):
-    """Exception raised by algorithms not implemented for a type of graph."""
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/external/__init__.py b/lib/python2.7/site-packages/setoolsgui/networkx/external/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/external/__init__.py
+++ /dev/null
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/external/decorator/__init__.py b/lib/python2.7/site-packages/setoolsgui/networkx/external/decorator/__init__.py
deleted file mode 100644
index 154bfd6..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/external/decorator/__init__.py
+++ /dev/null
@@ -1,8 +0,0 @@
-"""
-    Hack for including decorator-3.3.1 in NetworkX.
-"""
-import sys
-if sys.version >= '3':
-    from .decorator3._decorator3 import *
-else:
-    from .decorator2._decorator2 import *
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/external/decorator/decorator2/__init__.py b/lib/python2.7/site-packages/setoolsgui/networkx/external/decorator/decorator2/__init__.py
deleted file mode 100644
index 792d600..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/external/decorator/decorator2/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-#
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/external/decorator/decorator2/_decorator2.py b/lib/python2.7/site-packages/setoolsgui/networkx/external/decorator/decorator2/_decorator2.py
deleted file mode 100644
index 2e8c123..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/external/decorator/decorator2/_decorator2.py
+++ /dev/null
@@ -1,210 +0,0 @@
-##########################     LICENCE     ###############################
-##
-##   Copyright (c) 2005-2011, Michele Simionato
-##   All rights reserved.
-##
-##   Redistributions of source code must retain the above copyright
-##   notice, this list of conditions and the following disclaimer.
-##   Redistributions in bytecode form must reproduce the above copyright
-##   notice, this list of conditions and the following disclaimer in
-##   the documentation and/or other materials provided with the
-##   distribution.
-
-##   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-##   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-##   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-##   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-##   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-##   INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-##   BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
-##   OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-##   ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-##   TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
-##   USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
-##   DAMAGE.
-
-"""
-Decorator module, see http://pypi.python.org/pypi/decorator
-for the documentation.
-"""
-
-__version__ = '3.3.2'
-
-__all__ = ["decorator", "FunctionMaker", "partial"]
-
-import sys, re, inspect
-
-try:
-    from functools import partial
-except ImportError: # for Python version < 2.5
-    class partial(object):
-        "A simple replacement of functools.partial"
-        def __init__(self, func, *args, **kw):
-            self.func = func
-            self.args = args
-            self.keywords = kw
-        def __call__(self, *otherargs, **otherkw):
-            kw = self.keywords.copy()
-            kw.update(otherkw)
-            return self.func(*(self.args + otherargs), **kw)
-
-if sys.version >= '3':
-    from inspect import getfullargspec
-else:
-    class getfullargspec(object):
-        "A quick and dirty replacement for getfullargspec for Python 2.X"
-        def __init__(self, f):
-            self.args, self.varargs, self.varkw, self.defaults = \
-                inspect.getargspec(f)
-            self.kwonlyargs = []
-            self.kwonlydefaults = None
-            self.annotations = getattr(f, '__annotations__', {})
-        def __iter__(self):
-            yield self.args
-            yield self.varargs
-            yield self.varkw
-            yield self.defaults
-
-DEF = re.compile('\s*def\s*([_\w][_\w\d]*)\s*\(')
-
-# basic functionality
-class FunctionMaker(object):
-    """
-    An object with the ability to create functions with a given signature.
-    It has attributes name, doc, module, signature, defaults, dict and
-    methods update and make.
-    """
-    def __init__(self, func=None, name=None, signature=None,
-                 defaults=None, doc=None, module=None, funcdict=None):
-        self.shortsignature = signature
-        if func:
-            # func can be a class or a callable, but not an instance method
-            self.name = func.__name__
-            if self.name == '<lambda>': # small hack for lambda functions
-                self.name = '_lambda_'
-            self.doc = func.__doc__
-            self.module = func.__module__
-            if inspect.isfunction(func):
-                argspec = getfullargspec(func)
-                for a in ('args', 'varargs', 'varkw', 'defaults', 'kwonlyargs',
-                          'kwonlydefaults', 'annotations'):
-                    setattr(self, a, getattr(argspec, a))
-                for i, arg in enumerate(self.args):
-                    setattr(self, 'arg%d' % i, arg)
-                self.signature = inspect.formatargspec(
-                    formatvalue=lambda val: "", *argspec)[1:-1]
-                allargs = list(self.args)
-                if self.varargs:
-                    allargs.append('*' + self.varargs)
-                if self.varkw:
-                    allargs.append('**' + self.varkw)
-                try:
-                    self.shortsignature = ', '.join(allargs)
-                except TypeError: # exotic signature, valid only in Python 2.X
-                    self.shortsignature = self.signature
-                self.dict = func.__dict__.copy()
-        # func=None happens when decorating a caller
-        if name:
-            self.name = name
-        if signature is not None:
-            self.signature = signature
-        if defaults:
-            self.defaults = defaults
-        if doc:
-            self.doc = doc
-        if module:
-            self.module = module
-        if funcdict:
-            self.dict = funcdict
-        # check existence required attributes
-        assert hasattr(self, 'name')
-        if not hasattr(self, 'signature'):
-            raise TypeError('You are decorating a non function: %s' % func)
-
-    def update(self, func, **kw):
-        "Update the signature of func with the data in self"
-        func.__name__ = self.name
-        func.__doc__ = getattr(self, 'doc', None)
-        func.__dict__ = getattr(self, 'dict', {})
-        func.func_defaults = getattr(self, 'defaults', ())
-        func.__kwdefaults__ = getattr(self, 'kwonlydefaults', None)
-        callermodule = sys._getframe(3).f_globals.get('__name__', '?')
-        func.__module__ = getattr(self, 'module', callermodule)
-        func.__dict__.update(kw)
-
-    def make(self, src_templ, evaldict=None, addsource=False, **attrs):
-        "Make a new function from a given template and update the signature"
-        src = src_templ % vars(self) # expand name and signature
-        evaldict = evaldict or {}
-        mo = DEF.match(src)
-        if mo is None:
-            raise SyntaxError('not a valid function template\n%s' % src)
-        name = mo.group(1) # extract the function name
-        names = set([name] + [arg.strip(' *') for arg in
-                             self.shortsignature.split(',')])
-        for n in names:
-            if n in ('_func_', '_call_'):
-                raise NameError('%s is overridden in\n%s' % (n, src))
-        if not src.endswith('\n'): # add a newline just for safety
-            src += '\n' # this is needed in old versions of Python
-        try:
-            code = compile(src, '<string>', 'single')
-            # print >> sys.stderr, 'Compiling %s' % src
-            exec code in evaldict
-        except:
-            print >> sys.stderr, 'Error in generated code:'
-            print >> sys.stderr, src
-            raise
-        func = evaldict[name]
-        if addsource:
-            attrs['__source__'] = src
-        self.update(func, **attrs)
-        return func
-
-    @classmethod
-    def create(cls, obj, body, evaldict, defaults=None,
-               doc=None, module=None, addsource=True, **attrs):
-        """
-        Create a function from the strings name, signature and body.
-        evaldict is the evaluation dictionary. If addsource is true an attribute
-        __source__ is added to the result. The attributes attrs are added,
-        if any.
-        """
-        if isinstance(obj, str): # "name(signature)"
-            name, rest = obj.strip().split('(', 1)
-            signature = rest[:-1] #strip a right parens
-            func = None
-        else: # a function
-            name = None
-            signature = None
-            func = obj
-        self = cls(func, name, signature, defaults, doc, module)
-        ibody = '\n'.join('    ' + line for line in body.splitlines())
-        return self.make('def %(name)s(%(signature)s):\n' + ibody,
-                        evaldict, addsource, **attrs)
-
-def decorator(caller, func=None):
-    """
-    decorator(caller) converts a caller function into a decorator;
-    decorator(caller, func) decorates a function using a caller.
-    """
-    if func is not None: # returns a decorated function
-        evaldict = func.func_globals.copy()
-        evaldict['_call_'] = caller
-        evaldict['_func_'] = func
-        return FunctionMaker.create(
-            func, "return _call_(_func_, %(shortsignature)s)",
-            evaldict, undecorated=func, __wrapped__=func)
-    else: # returns a decorator
-        if isinstance(caller, partial):
-            return partial(decorator, caller)
-        # otherwise assume caller is a function
-        first = inspect.getargspec(caller)[0][0] # first arg
-        evaldict = caller.func_globals.copy()
-        evaldict['_call_'] = caller
-        evaldict['decorator'] = decorator
-        return FunctionMaker.create(
-            '%s(%s)' % (caller.__name__, first),
-            'return decorator(_call_, %s)' % first,
-            evaldict, undecorated=caller, __wrapped__=caller,
-            doc=caller.__doc__, module=caller.__module__)
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/generators/__init__.py b/lib/python2.7/site-packages/setoolsgui/networkx/generators/__init__.py
deleted file mode 100644
index 92edd41..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/generators/__init__.py
+++ /dev/null
@@ -1,21 +0,0 @@
-"""
-A package for generating various graphs in networkx. 
-
-"""
-from networkx.generators.atlas import *
-from networkx.generators.bipartite import *
-from networkx.generators.classic import *
-from networkx.generators.degree_seq import *
-from networkx.generators.directed import *
-from networkx.generators.ego import *
-from networkx.generators.geometric import *
-from networkx.generators.hybrid import *
-from networkx.generators.line import *
-from networkx.generators.random_graphs import *
-from networkx.generators.small import *
-from networkx.generators.stochastic import *
-from networkx.generators.social import *
-from networkx.generators.threshold import *
-from networkx.generators.intersection import *
-from networkx.generators.random_clustered import *
-
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/generators/atlas.py b/lib/python2.7/site-packages/setoolsgui/networkx/generators/atlas.py
deleted file mode 100644
index f3d9c57..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/generators/atlas.py
+++ /dev/null
@@ -1,12336 +0,0 @@
-"""
-Generators for the small graph atlas.
-
-
-See
-"An Atlas of Graphs" by Ronald C. Read and Robin J. Wilson,
-Oxford University Press, 1998.
-
-Because of its size, this module is not imported by default.
-
-"""
-#    Copyright (C) 2004-2008 by 
-#    Aric Hagberg <hagberg@lanl.gov>
-#    Dan Schult <dschult@colgate.edu>
-#    Pieter Swart <swart@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-__author__ = """Pieter Swart (swart@lanl.gov)"""
- 
-__all__ = ['graph_atlas_g']
-
-from networkx.generators.small import make_small_graph
-
-def graph_atlas_g():
-    """
-    Return the list [G0,G1,...,G1252] of graphs as named in the Graph Atlas.
-    G0,G1,...,G1252 are all graphs with up to 7 nodes.
-
-    The graphs are listed:
-      1. in increasing order of number of nodes;
-      2. for a fixed number of nodes,
-         in increasing order of the number of edges;
-      3. for fixed numbers of nodes and edges,
-         in increasing order of the degree sequence,
-         for example 111223 < 112222;
-      4. for fixed degree sequence, in increasing number of automorphisms.
-
-    Note that indexing is set up so that for
-    GAG=graph_atlas_g(), then
-    G123=GAG[123] and G[0]=empty_graph(0)
-
-    """
-
-    descr_list=[
-     ['edgelist', 'G0', 0, []],
-     ['edgelist', 'G1', 1, []],
-     ['edgelist', 'G2', 2, []],
-     ['edgelist', 'G3', 2, [[1, 2]]],
-     ['edgelist', 'G4', 3, []],
-     ['edgelist', 'G5', 3, [[2, 3]]],
-     ['edgelist', 'G6', 3, [[1, 2], [1, 3]]],
-     ['edgelist', 'G7', 3, [[1, 2], [1, 3], [2, 3]]],
-     ['edgelist', 'G8', 4, []],
-     ['edgelist', 'G9', 4, [[4, 3]]],
-     ['edgelist', 'G10', 4, [[4, 3], [4, 2]]],
-     ['edgelist', 'G11', 4, [[1, 2], [4, 3]]],
-     ['edgelist', 'G12', 4, [[4, 3], [2, 3], [4, 2]]],
-     ['edgelist', 'G13', 4, [[4, 1], [4, 2], [4, 3]]],
-     ['edgelist', 'G14', 4, [[1, 2], [2, 3], [1, 4]]],
-     ['edgelist', 'G15', 4, [[4, 3], [2, 3], [4, 2], [4, 1]]],
-     ['edgelist', 'G16', 4, [[1, 2], [2, 3], [3, 4], [1, 4]]],
-     ['edgelist', 'G17', 4, [[1, 2], [1, 3], [1, 4], [2, 3], [3, 4]]],
-     ['edgelist', 'G18', 4, [[1, 2], [2, 3], [1, 3], [4, 1], [4, 2], [4, 3]]],
-     ['edgelist', 'G19', 5, []],
-     ['edgelist', 'G20', 5, [[5, 4]]],
-     ['edgelist', 'G21', 5, [[2, 3], [1, 2]]],
-     ['edgelist', 'G22', 5, [[1, 3], [5, 4]]],
-     ['edgelist', 'G23', 5, [[2, 3], [1, 2], [3, 1]]],
-     ['edgelist', 'G24', 5, [[5, 4], [4, 3], [4, 2]]],
-     ['edgelist', 'G25', 5, [[4, 3], [5, 4], [1, 5]]],
-     ['edgelist', 'G26', 5, [[2, 3], [1, 2], [5, 4]]],
-     ['edgelist', 'G27', 5, [[5, 4], [2, 3], [4, 2], [4, 3]]],
-     ['edgelist', 'G28', 5, [[1, 4], [2, 1], [3, 2], [4, 3]]],
-     ['edgelist', 'G29', 5, [[5, 4], [5, 1], [5, 2], [5, 3]]],
-     ['edgelist', 'G30', 5, [[5, 1], [4, 2], [5, 4], [4, 3]]],
-     ['edgelist', 'G31', 5, [[3, 4], [2, 3], [1, 2], [5, 1]]],
-     ['edgelist', 'G32', 5, [[2, 3], [1, 2], [3, 1], [5, 4]]],
-     ['edgelist', 'G33', 5, [[1, 4], [3, 1], [4, 3], [2, 1], [3, 2]]],
-     ['edgelist', 'G34', 5, [[5, 3], [5, 4], [3, 4], [5, 2], [5, 1]]],
-     ['edgelist', 'G35', 5, [[1, 2], [2, 3], [3, 4], [1, 5], [1, 3]]],
-     ['edgelist', 'G36', 5, [[5, 1], [2, 3], [5, 4], [4, 3], [4, 2]]],
-     ['edgelist', 'G37', 5, [[2, 1], [5, 2], [3, 5], [4, 3], [2, 4]]],
-     ['edgelist', 'G38', 5, [[1, 2], [2, 3], [3, 4], [4, 5], [1, 5]]],
-     ['edgelist', 'G39', 5, [[2, 1], [5, 2], [5, 1], [1, 4], [2, 4], [4, 5]]],
-     ['edgelist', 'G40', 5, [[2, 1], [5, 2], [3, 5], [4, 3], [2, 4], [3, 2]]],
-     ['edgelist', 'G41', 5, [[2, 1], [5, 2], [3, 5], [4, 3], [2, 4], [4, 5]]],
-     ['edgelist', 'G42', 5, [[1, 2], [5, 4], [3, 4], [5, 3], [5, 1], [5, 2]]],
-     ['edgelist', 'G43', 5, [[1, 5], [4, 1], [5, 4], [3, 4], [2, 3], [1, 2]]],
-     ['edgelist', 'G44', 5, [[3, 2], [1, 3], [4, 1], [2, 4], [5, 2], [1, 5]]],
-     ['edgelist',
-      'G45',
-      5,
-      [[5, 1], [2, 3], [5, 4], [4, 3], [4, 2], [5, 2], [3, 5]]],
-     ['edgelist',
-      'G46',
-      5,
-      [[5, 2], [3, 5], [4, 3], [2, 4], [4, 5], [1, 4], [5, 1]]],
-     ['edgelist',
-      'G47',
-      5,
-      [[1, 2], [2, 3], [3, 4], [4, 5], [1, 5], [2, 4], [5, 2]]],
-     ['edgelist',
-      'G48',
-      5,
-      [[3, 2], [1, 3], [4, 1], [2, 4], [5, 2], [1, 5], [3, 5]]],
-     ['edgelist',
-      'G49',
-      5,
-      [[2, 1], [5, 2], [3, 5], [4, 3], [2, 4], [5, 1], [4, 5], [1, 4]]],
-     ['edgelist',
-      'G50',
-      5,
-      [[1, 2], [2, 3], [3, 4], [1, 4], [5, 1], [5, 2], [5, 3], [5, 4]]],
-     ['edgelist',
-      'G51',
-      5,
-      [[1, 2], [4, 5], [1, 4], [1, 5], [2, 3], [2, 4], [2, 5], [3, 4], [3, 5]]],
-     ['edgelist',
-      'G52',
-      5,
-      [[1, 2],
-       [1, 3],
-       [1, 4],
-       [1, 5],
-       [2, 3],
-       [2, 4],
-       [2, 5],
-       [3, 4],
-       [3, 5],
-       [4, 5]]],
-     ['edgelist', 'G53', 6, []],
-     ['edgelist', 'G54', 6, [[6, 5]]],
-     ['edgelist', 'G55', 6, [[1, 4], [6, 5]]],
-     ['edgelist', 'G56', 6, [[2, 4], [2, 3]]],
-     ['edgelist', 'G57', 6, [[2, 4], [3, 2], [4, 3]]],
-     ['edgelist', 'G58', 6, [[1, 4], [6, 1], [5, 1]]],
-     ['edgelist', 'G59', 6, [[5, 4], [6, 5], [1, 6]]],
-     ['edgelist', 'G60', 6, [[5, 4], [6, 2], [6, 3]]],
-     ['edgelist', 'G61', 6, [[2, 3], [4, 1], [6, 5]]],
-     ['edgelist', 'G62', 6, [[1, 4], [5, 1], [6, 5], [1, 6]]],
-     ['edgelist', 'G63', 6, [[4, 1], [6, 4], [5, 6], [1, 5]]],
-     ['edgelist', 'G64', 6, [[6, 2], [6, 4], [6, 3], [1, 6]]],
-     ['edgelist', 'G65', 6, [[5, 4], [4, 2], [5, 1], [4, 3]]],
-     ['edgelist', 'G66', 6, [[1, 3], [2, 4], [3, 2], [6, 4]]],
-     ['edgelist', 'G67', 6, [[2, 4], [3, 2], [4, 3], [1, 6]]],
-     ['edgelist', 'G68', 6, [[2, 3], [1, 4], [6, 1], [5, 1]]],
-     ['edgelist', 'G69', 6, [[5, 6], [2, 3], [1, 6], [4, 5]]],
-     ['edgelist', 'G70', 6, [[1, 3], [5, 1], [4, 2], [6, 4]]],
-     ['edgelist', 'G71', 6, [[4, 1], [6, 4], [5, 6], [1, 5], [6, 1]]],
-     ['edgelist', 'G72', 6, [[6, 4], [4, 2], [4, 3], [5, 4], [5, 6]]],
-     ['edgelist', 'G73', 6, [[6, 4], [6, 5], [3, 4], [4, 5], [1, 5]]],
-     ['edgelist', 'G74', 6, [[5, 4], [2, 3], [5, 1], [4, 3], [4, 2]]],
-     ['edgelist', 'G75', 6, [[2, 5], [4, 5], [5, 1], [3, 2], [4, 3]]],
-     ['edgelist', 'G76', 6, [[1, 2], [2, 3], [3, 4], [4, 5], [1, 5]]],
-     ['edgelist', 'G77', 6, [[6, 4], [6, 5], [6, 1], [6, 2], [6, 3]]],
-     ['edgelist', 'G78', 6, [[2, 5], [6, 2], [2, 1], [3, 2], [3, 4]]],
-     ['edgelist', 'G79', 6, [[1, 2], [4, 5], [1, 3], [4, 1], [6, 4]]],
-     ['edgelist', 'G80', 6, [[2, 1], [3, 2], [3, 5], [2, 4], [6, 4]]],
-     ['edgelist', 'G81', 6, [[5, 4], [1, 6], [5, 1], [4, 3], [4, 2]]],
-     ['edgelist', 'G82', 6, [[2, 3], [1, 2], [5, 6], [2, 4], [3, 4]]],
-     ['edgelist', 'G83', 6, [[1, 2], [1, 6], [3, 4], [4, 5], [5, 6]]],
-     ['edgelist', 'G84', 6, [[5, 4], [6, 2], [6, 3], [1, 4], [5, 1]]],
-     ['edgelist', 'G85', 6, [[2, 3], [4, 1], [6, 4], [5, 6], [1, 5]]],
-     ['edgelist', 'G86', 6, [[1, 4], [6, 1], [5, 6], [4, 5], [6, 4], [5, 1]]],
-     ['edgelist', 'G87', 6, [[2, 5], [3, 5], [5, 1], [3, 4], [4, 2], [4, 5]]],
-     ['edgelist', 'G88', 6, [[2, 5], [3, 5], [5, 1], [3, 2], [4, 2], [3, 4]]],
-     ['edgelist', 'G89', 6, [[3, 1], [6, 5], [5, 4], [6, 4], [5, 1], [3, 5]]],
-     ['edgelist', 'G90', 6, [[4, 3], [5, 4], [1, 5], [2, 1], [3, 2], [1, 4]]],
-     ['edgelist', 'G91', 6, [[5, 2], [4, 2], [5, 3], [4, 3], [3, 1], [2, 1]]],
-     ['edgelist', 'G92', 6, [[6, 3], [6, 4], [6, 5], [4, 5], [6, 2], [6, 1]]],
-     ['edgelist', 'G93', 6, [[5, 4], [5, 3], [5, 1], [2, 5], [4, 1], [6, 4]]],
-     ['edgelist', 'G94', 6, [[5, 4], [4, 6], [6, 5], [6, 2], [4, 3], [5, 1]]],
-     ['edgelist', 'G95', 6, [[5, 3], [2, 3], [5, 4], [5, 2], [5, 1], [1, 6]]],
-     ['edgelist', 'G96', 6, [[2, 3], [4, 2], [1, 4], [3, 1], [5, 1], [6, 1]]],
-     ['edgelist', 'G97', 6, [[3, 1], [5, 3], [2, 5], [3, 2], [4, 2], [6, 4]]],
-     ['edgelist', 'G98', 6, [[2, 3], [4, 2], [1, 4], [3, 1], [5, 1], [6, 4]]],
-     ['edgelist', 'G99', 6, [[6, 4], [3, 6], [3, 1], [5, 3], [5, 4], [4, 2]]],
-     ['edgelist', 'G100', 6, [[1, 3], [4, 5], [2, 1], [6, 4], [5, 6], [4, 1]]],
-     ['edgelist', 'G101', 6, [[2, 3], [4, 1], [6, 4], [5, 6], [1, 5], [6, 1]]],
-     ['edgelist', 'G102', 6, [[5, 4], [2, 3], [5, 1], [4, 3], [4, 2], [6, 1]]],
-     ['edgelist', 'G103', 6, [[2, 5], [3, 5], [5, 1], [1, 6], [4, 2], [3, 4]]],
-     ['edgelist', 'G104', 6, [[1, 2], [2, 3], [3, 4], [4, 5], [1, 5], [2, 6]]],
-     ['edgelist', 'G105', 6, [[1, 2], [2, 3], [3, 4], [4, 5], [5, 6], [1, 6]]],
-     ['edgelist', 'G106', 6, [[2, 4], [3, 2], [4, 3], [1, 5], [6, 1], [5, 6]]],
-     ['edgelist',
-      'G107',
-      6,
-      [[1, 2], [2, 3], [1, 3], [4, 1], [4, 2], [4, 3], [1, 6]]],
-     ['edgelist',
-      'G108',
-      6,
-      [[2, 5], [3, 5], [3, 2], [4, 2], [3, 4], [3, 1], [1, 2]]],
-     ['edgelist',
-      'G109',
-      6,
-      [[1, 2], [2, 3], [3, 4], [4, 5], [1, 5], [2, 4], [5, 2]]],
-     ['edgelist',
-      'G110',
-      6,
-      [[1, 2], [4, 3], [1, 3], [4, 1], [4, 2], [6, 2], [6, 3]]],
-     ['edgelist',
-      'G111',
-      6,
-      [[2, 5], [3, 5], [3, 4], [1, 5], [4, 2], [5, 6], [4, 5]]],
-     ['edgelist',
-      'G112',
-      6,
-      [[2, 1], [5, 2], [3, 5], [4, 3], [6, 2], [3, 6], [2, 3]]],
-     ['edgelist',
-      'G113',
-      6,
-      [[1, 5], [3, 1], [2, 3], [4, 2], [6, 4], [4, 1], [3, 4]]],
-     ['edgelist',
-      'G114',
-      6,
-      [[2, 5], [3, 5], [3, 4], [3, 2], [4, 2], [5, 6], [1, 5]]],
-     ['edgelist',
-      'G115',
-      6,
-      [[2, 1], [5, 2], [3, 5], [4, 3], [6, 2], [3, 6], [5, 6]]],
-     ['edgelist',
-      'G116',
-      6,
-      [[1, 2], [2, 3], [1, 3], [4, 1], [4, 2], [4, 3], [6, 5]]],
-     ['edgelist',
-      'G117',
-      6,
-      [[1, 6], [5, 1], [6, 5], [1, 3], [4, 1], [4, 3], [1, 2]]],
-     ['edgelist',
-      'G118',
-      6,
-      [[1, 2], [2, 3], [3, 4], [4, 5], [1, 5], [2, 6], [5, 2]]],
-     ['edgelist',
-      'G119',
-      6,
-      [[1, 2], [5, 1], [2, 5], [1, 3], [4, 1], [4, 3], [4, 6]]],
-     ['edgelist',
-      'G120',
-      6,
-      [[2, 5], [3, 5], [5, 1], [1, 6], [4, 2], [3, 4], [4, 5]]],
-     ['edgelist',
-      'G121',
-      6,
-      [[3, 1], [4, 3], [5, 4], [6, 5], [3, 6], [2, 3], [5, 2]]],
-     ['edgelist',
-      'G122',
-      6,
-      [[2, 6], [1, 2], [5, 1], [4, 5], [3, 4], [2, 3], [1, 4]]],
-     ['edgelist',
-      'G123',
-      6,
-      [[2, 5], [3, 5], [5, 1], [1, 6], [4, 2], [3, 4], [3, 2]]],
-     ['edgelist',
-      'G124',
-      6,
-      [[1, 2], [2, 3], [3, 4], [4, 5], [1, 5], [1, 3], [6, 2]]],
-     ['edgelist',
-      'G125',
-      6,
-      [[3, 1], [5, 2], [2, 3], [6, 5], [3, 6], [4, 2], [6, 4]]],
-     ['edgelist',
-      'G126',
-      6,
-      [[6, 1], [4, 6], [3, 4], [1, 3], [2, 4], [5, 2], [4, 5]]],
-     ['edgelist',
-      'G127',
-      6,
-      [[2, 4], [3, 2], [1, 3], [6, 1], [5, 6], [4, 5], [3, 4]]],
-     ['edgelist',
-      'G128',
-      6,
-      [[1, 2], [2, 3], [3, 4], [4, 5], [5, 6], [1, 6], [1, 4]]],
-     ['edgelist',
-      'G129',
-      6,
-      [[5, 4], [1, 5], [2, 1], [3, 2], [4, 3], [1, 6], [6, 4]]],
-     ['edgelist',
-      'G130',
-      6,
-      [[2, 3], [1, 2], [3, 1], [4, 1], [5, 4], [6, 5], [4, 6]]],
-     ['edgelist',
-      'G131',
-      6,
-      [[1, 2], [3, 6], [1, 3], [4, 1], [4, 2], [4, 3], [3, 2], [6, 2]]],
-     ['edgelist',
-      'G132',
-      6,
-      [[1, 2], [2, 3], [3, 4], [1, 4], [5, 1], [5, 2], [5, 3], [5, 4]]],
-     ['edgelist',
-      'G133',
-      6,
-      [[1, 2], [2, 3], [1, 3], [4, 1], [4, 2], [4, 3], [6, 1], [1, 5]]],
-     ['edgelist',
-      'G134',
-      6,
-      [[2, 3], [4, 2], [1, 4], [2, 1], [3, 1], [4, 3], [6, 4], [5, 1]]],
-     ['edgelist',
-      'G135',
-      6,
-      [[1, 2], [3, 5], [1, 3], [6, 3], [4, 2], [4, 3], [3, 2], [5, 2]]],
-     ['edgelist',
-      'G136',
-      6,
-      [[1, 2], [2, 3], [3, 4], [4, 5], [1, 5], [2, 4], [5, 2], [2, 6]]],
-     ['edgelist',
-      'G137',
-      6,
-      [[1, 2], [2, 3], [3, 4], [4, 5], [1, 5], [2, 4], [5, 2], [6, 5]]],
-     ['edgelist',
-      'G138',
-      6,
-      [[1, 2], [3, 6], [1, 3], [5, 1], [4, 2], [4, 3], [3, 2], [6, 2]]],
-     ['edgelist',
-      'G139',
-      6,
-      [[1, 2], [2, 3], [3, 4], [4, 5], [1, 5], [2, 4], [5, 2], [6, 1]]],
-     ['edgelist',
-      'G140',
-      6,
-      [[1, 2], [3, 6], [1, 3], [5, 1], [4, 2], [4, 3], [4, 1], [6, 2]]],
-     ['edgelist',
-      'G141',
-      6,
-      [[3, 1], [4, 3], [5, 4], [6, 5], [3, 6], [2, 3], [5, 2], [6, 4]]],
-     ['edgelist',
-      'G142',
-      6,
-      [[1, 2], [2, 3], [1, 3], [4, 1], [4, 2], [4, 3], [1, 6], [6, 5]]],
-     ['edgelist',
-      'G143',
-      6,
-      [[1, 2], [3, 6], [1, 3], [5, 1], [4, 2], [4, 3], [6, 2], [6, 4]]],
-     ['edgelist',
-      'G144',
-      6,
-      [[2, 5], [3, 5], [3, 4], [1, 5], [4, 2], [5, 6], [1, 6], [4, 5]]],
-     ['edgelist',
-      'G145',
-      6,
-      [[1, 2], [2, 3], [3, 4], [4, 5], [1, 5], [6, 1], [6, 3], [1, 3]]],
-     ['edgelist',
-      'G146',
-      6,
-      [[2, 6], [5, 2], [1, 5], [6, 1], [3, 6], [5, 3], [4, 5], [6, 4]]],
-     ['edgelist',
-      'G147',
-      6,
-      [[1, 2], [2, 3], [3, 4], [4, 5], [5, 6], [1, 6], [3, 5], [6, 3]]],
-     ['edgelist',
-      'G148',
-      6,
-      [[2, 4], [3, 2], [1, 3], [6, 1], [5, 6], [4, 5], [2, 5], [1, 2]]],
-     ['edgelist',
-      'G149',
-      6,
-      [[1, 2], [2, 3], [3, 4], [4, 5], [1, 5], [4, 1], [6, 3], [6, 1]]],
-     ['edgelist',
-      'G150',
-      6,
-      [[2, 5], [3, 5], [3, 4], [1, 5], [4, 2], [5, 6], [1, 6], [3, 2]]],
-     ['edgelist',
-      'G151',
-      6,
-      [[1, 2], [2, 3], [3, 4], [4, 5], [1, 5], [5, 6], [6, 4], [2, 6]]],
-     ['edgelist',
-      'G152',
-      6,
-      [[1, 2], [2, 3], [3, 4], [4, 5], [5, 6], [1, 6], [3, 5], [6, 2]]],
-     ['edgelist',
-      'G153',
-      6,
-      [[1, 2], [2, 3], [3, 4], [4, 5], [1, 5], [2, 6], [6, 3], [6, 1]]],
-     ['edgelist',
-      'G154',
-      6,
-      [[1, 2], [2, 3], [3, 4], [4, 5], [5, 6], [1, 6], [5, 2], [6, 3]]],
-     ['edgelist',
-      'G155',
-      6,
-      [[1, 2], [2, 3], [3, 4], [4, 5], [1, 5], [2, 4], [5, 2], [3, 5], [1, 4]]],
-     ['edgelist',
-      'G156',
-      6,
-      [[1, 2], [3, 6], [1, 3], [4, 1], [4, 2], [4, 3], [3, 2], [6, 2], [5, 3]]],
-     ['edgelist',
-      'G157',
-      6,
-      [[1, 2], [3, 6], [1, 3], [4, 1], [4, 2], [4, 3], [3, 2], [6, 2], [1, 5]]],
-     ['edgelist',
-      'G158',
-      6,
-      [[1, 2], [2, 3], [3, 4], [1, 4], [5, 1], [5, 2], [5, 3], [5, 4], [5, 6]]],
-     ['edgelist',
-      'G159',
-      6,
-      [[3, 1], [5, 2], [2, 3], [6, 5], [3, 6], [4, 2], [6, 4], [4, 3], [5, 4]]],
-     ['edgelist',
-      'G160',
-      6,
-      [[1, 2], [3, 6], [1, 3], [4, 1], [4, 2], [4, 3], [3, 2], [6, 2], [5, 6]]],
-     ['edgelist',
-      'G161',
-      6,
-      [[2, 6], [5, 2], [1, 5], [6, 1], [3, 6], [5, 3], [4, 5], [6, 4], [5, 6]]],
-     ['edgelist',
-      'G162',
-      6,
-      [[1, 2], [2, 3], [3, 4], [4, 5], [1, 5], [3, 6], [1, 6], [3, 1], [4, 1]]],
-     ['edgelist',
-      'G163',
-      6,
-      [[2, 4], [3, 2], [1, 3], [6, 1], [5, 6], [4, 5], [1, 5], [2, 1], [5, 2]]],
-     ['edgelist',
-      'G164',
-      6,
-      [[2, 4], [3, 2], [1, 3], [6, 1], [5, 6], [4, 5], [5, 2], [2, 1], [6, 2]]],
-     ['edgelist',
-      'G165',
-      6,
-      [[1, 2], [2, 3], [1, 3], [4, 1], [4, 2], [4, 3], [6, 5], [5, 1], [6, 1]]],
-     ['edgelist',
-      'G166',
-      6,
-      [[5, 4], [1, 5], [2, 1], [3, 2], [4, 3], [1, 6], [6, 4], [1, 4], [2, 6]]],
-     ['edgelist',
-      'G167',
-      6,
-      [[2, 4], [3, 2], [1, 3], [6, 1], [5, 6], [4, 5], [4, 3], [1, 4], [5, 1]]],
-     ['edgelist',
-      'G168',
-      6,
-      [[2, 4], [3, 2], [1, 3], [6, 1], [5, 6], [4, 5], [4, 3], [1, 4], [3, 5]]],
-     ['edgelist',
-      'G169',
-      6,
-      [[1, 2], [2, 3], [3, 4], [4, 5], [1, 5], [3, 6], [1, 6], [3, 1], [6, 2]]],
-     ['edgelist',
-      'G170',
-      6,
-      [[2, 6], [5, 2], [1, 5], [6, 1], [3, 6], [5, 3], [4, 5], [6, 4], [3, 1]]],
-     ['edgelist',
-      'G171',
-      6,
-      [[1, 2], [2, 3], [3, 4], [4, 5], [1, 5], [6, 1], [6, 5], [6, 3], [6, 4]]],
-     ['edgelist',
-      'G172',
-      6,
-      [[1, 2], [2, 3], [3, 4], [4, 5], [1, 5], [4, 1], [6, 3], [6, 1], [6, 2]]],
-     ['edgelist',
-      'G173',
-      6,
-      [[1, 2], [2, 3], [3, 4], [4, 5], [5, 6], [1, 6], [1, 4], [5, 3], [6, 3]]],
-     ['edgelist',
-      'G174',
-      6,
-      [[3, 4], [1, 3], [4, 1], [5, 4], [2, 5], [6, 2], [5, 6], [2, 1], [6, 3]]],
-     ['edgelist',
-      'G175',
-      6,
-      [[1, 2], [2, 3], [3, 4], [4, 5], [5, 6], [1, 6], [1, 4], [6, 3], [5, 2]]],
-     ['edgelist',
-      'G176',
-      6,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [1, 5],
-       [2, 4],
-       [5, 2],
-       [3, 5],
-       [1, 4],
-       [1, 3]]],
-     ['edgelist',
-      'G177',
-      6,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [1, 5],
-       [2, 4],
-       [5, 2],
-       [3, 5],
-       [1, 4],
-       [5, 6]]],
-     ['edgelist',
-      'G178',
-      6,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [1, 5],
-       [2, 4],
-       [5, 2],
-       [3, 5],
-       [1, 4],
-       [1, 6]]],
-     ['edgelist',
-      'G179',
-      6,
-      [[2, 6],
-       [5, 2],
-       [1, 5],
-       [6, 1],
-       [3, 6],
-       [5, 3],
-       [4, 5],
-       [6, 4],
-       [5, 6],
-       [2, 1]]],
-     ['edgelist',
-      'G180',
-      6,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [1, 5],
-       [2, 4],
-       [5, 2],
-       [6, 5],
-       [4, 6],
-       [2, 6]]],
-     ['edgelist',
-      'G181',
-      6,
-      [[2, 4],
-       [3, 2],
-       [1, 3],
-       [6, 1],
-       [5, 6],
-       [4, 5],
-       [4, 3],
-       [1, 4],
-       [5, 1],
-       [3, 5]]],
-     ['edgelist',
-      'G182',
-      6,
-      [[2, 4],
-       [3, 2],
-       [1, 3],
-       [6, 1],
-       [5, 6],
-       [4, 5],
-       [4, 3],
-       [1, 4],
-       [3, 5],
-       [6, 3]]],
-     ['edgelist',
-      'G183',
-      6,
-      [[2, 1],
-       [5, 2],
-       [1, 5],
-       [6, 1],
-       [5, 6],
-       [4, 5],
-       [2, 4],
-       [6, 2],
-       [3, 4],
-       [2, 3]]],
-     ['edgelist',
-      'G184',
-      6,
-      [[5, 4],
-       [1, 5],
-       [2, 1],
-       [3, 2],
-       [4, 3],
-       [1, 6],
-       [6, 4],
-       [1, 4],
-       [2, 6],
-       [6, 3]]],
-     ['edgelist',
-      'G185',
-      6,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [1, 5],
-       [3, 6],
-       [1, 6],
-       [3, 1],
-       [6, 2],
-       [5, 2]]],
-     ['edgelist',
-      'G186',
-      6,
-      [[1, 2],
-       [3, 5],
-       [1, 3],
-       [5, 6],
-       [4, 2],
-       [4, 3],
-       [5, 2],
-       [6, 2],
-       [6, 3],
-       [6, 4]]],
-     ['edgelist',
-      'G187',
-      6,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [1, 5],
-       [6, 1],
-       [6, 2],
-       [6, 3],
-       [6, 4],
-       [6, 5]]],
-     ['edgelist',
-      'G188',
-      6,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [5, 6],
-       [1, 6],
-       [3, 5],
-       [1, 3],
-       [2, 4],
-       [6, 2]]],
-     ['edgelist',
-      'G189',
-      6,
-      [[4, 5],
-       [2, 4],
-       [3, 2],
-       [1, 3],
-       [6, 1],
-       [5, 6],
-       [3, 5],
-       [6, 2],
-       [4, 3],
-       [1, 4]]],
-     ['edgelist',
-      'G190',
-      6,
-      [[2, 4],
-       [3, 2],
-       [1, 3],
-       [6, 1],
-       [5, 6],
-       [4, 5],
-       [5, 2],
-       [6, 4],
-       [3, 6],
-       [2, 1]]],
-     ['edgelist',
-      'G191',
-      6,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [1, 5],
-       [2, 4],
-       [5, 2],
-       [3, 5],
-       [1, 4],
-       [1, 3],
-       [2, 6]]],
-     ['edgelist',
-      'G192',
-      6,
-      [[1, 2],
-       [3, 5],
-       [1, 3],
-       [3, 2],
-       [4, 2],
-       [4, 3],
-       [5, 2],
-       [6, 2],
-       [6, 3],
-       [6, 4],
-       [1, 4]]],
-     ['edgelist',
-      'G193',
-      6,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [1, 5],
-       [2, 4],
-       [5, 2],
-       [3, 5],
-       [1, 4],
-       [6, 1],
-       [5, 6]]],
-     ['edgelist',
-      'G194',
-      6,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [5, 6],
-       [1, 5],
-       [2, 4],
-       [5, 2],
-       [3, 5],
-       [1, 4],
-       [6, 4],
-       [1, 3]]],
-     ['edgelist',
-      'G195',
-      6,
-      [[2, 4],
-       [3, 2],
-       [1, 3],
-       [6, 1],
-       [5, 6],
-       [4, 5],
-       [5, 2],
-       [6, 4],
-       [3, 6],
-       [2, 1],
-       [6, 2]]],
-     ['edgelist',
-      'G196',
-      6,
-      [[2, 4],
-       [5, 2],
-       [4, 5],
-       [3, 4],
-       [1, 3],
-       [5, 1],
-       [6, 5],
-       [3, 6],
-       [5, 3],
-       [1, 6],
-       [2, 6]]],
-     ['edgelist',
-      'G197',
-      6,
-      [[4, 5],
-       [2, 4],
-       [3, 2],
-       [1, 3],
-       [6, 1],
-       [5, 6],
-       [3, 5],
-       [6, 2],
-       [1, 4],
-       [2, 5],
-       [1, 2]]],
-     ['edgelist',
-      'G198',
-      6,
-      [[2, 6],
-       [5, 2],
-       [1, 5],
-       [6, 1],
-       [3, 6],
-       [5, 3],
-       [4, 5],
-       [6, 4],
-       [1, 2],
-       [3, 1],
-       [4, 3]]],
-     ['edgelist',
-      'G199',
-      6,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [5, 6],
-       [1, 6],
-       [3, 5],
-       [6, 3],
-       [2, 6],
-       [2, 5],
-       [1, 4]]],
-     ['edgelist',
-      'G200',
-      6,
-      [[1, 2],
-       [2, 3],
-       [1, 3],
-       [3, 4],
-       [5, 6],
-       [1, 5],
-       [2, 4],
-       [5, 2],
-       [3, 5],
-       [1, 4],
-       [6, 4],
-       [5, 4]]],
-     ['edgelist',
-      'G201',
-      6,
-      [[4, 3],
-       [2, 4],
-       [3, 2],
-       [1, 3],
-       [6, 1],
-       [3, 6],
-       [3, 5],
-       [6, 2],
-       [1, 4],
-       [2, 5],
-       [1, 2],
-       [1, 5]]],
-     ['edgelist',
-      'G202',
-      6,
-      [[2, 6],
-       [5, 2],
-       [1, 5],
-       [6, 1],
-       [3, 6],
-       [5, 3],
-       [4, 5],
-       [6, 4],
-       [1, 2],
-       [3, 1],
-       [4, 3],
-       [5, 6]]],
-     ['edgelist',
-      'G203',
-      6,
-      [[4, 5],
-       [2, 4],
-       [3, 2],
-       [1, 3],
-       [6, 1],
-       [5, 6],
-       [3, 5],
-       [6, 2],
-       [1, 4],
-       [2, 5],
-       [1, 2],
-       [3, 4]]],
-     ['edgelist',
-      'G204',
-      6,
-      [[1, 2],
-       [2, 3],
-       [1, 3],
-       [4, 3],
-       [4, 2],
-       [5, 1],
-       [3, 5],
-       [6, 2],
-       [1, 6],
-       [5, 6],
-       [4, 5],
-       [6, 4]]],
-     ['edgelist',
-      'G205',
-      6,
-      [[4, 5],
-       [2, 4],
-       [3, 2],
-       [1, 3],
-       [6, 1],
-       [5, 6],
-       [3, 5],
-       [6, 2],
-       [1, 4],
-       [2, 5],
-       [1, 2],
-       [3, 4],
-       [1, 5]]],
-     ['edgelist',
-      'G206',
-      6,
-      [[1, 2],
-       [2, 3],
-       [1, 3],
-       [4, 3],
-       [4, 2],
-       [5, 1],
-       [3, 5],
-       [6, 2],
-       [1, 6],
-       [5, 6],
-       [4, 5],
-       [6, 4],
-       [4, 1]]],
-     ['edgelist',
-      'G207',
-      6,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [5, 6],
-       [1, 6],
-       [3, 5],
-       [6, 3],
-       [2, 6],
-       [2, 5],
-       [2, 4],
-       [3, 1],
-       [5, 1],
-       [6, 4]]],
-     ['edgelist',
-      'G208',
-      6,
-      [[1, 2],
-       [1, 3],
-       [1, 4],
-       [1, 5],
-       [1, 6],
-       [2, 3],
-       [2, 4],
-       [2, 5],
-       [2, 6],
-       [3, 4],
-       [3, 5],
-       [3, 6],
-       [4, 5],
-       [4, 6],
-       [5, 6]]],
-     ['edgelist', 'G209', 7, []],
-     ['edgelist', 'G210', 7, [[7, 6]]],
-     ['edgelist', 'G211', 7, [[3, 4], [2, 3]]],
-     ['edgelist', 'G212', 7, [[6, 5], [7, 1]]],
-     ['edgelist', 'G213', 7, [[1, 5], [5, 3], [3, 1]]],
-     ['edgelist', 'G214', 7, [[1, 2], [1, 7], [1, 6]]],
-     ['edgelist', 'G215', 7, [[6, 5], [7, 1], [6, 7]]],
-     ['edgelist', 'G216', 7, [[4, 3], [2, 3], [6, 7]]],
-     ['edgelist', 'G217', 7, [[4, 2], [6, 7], [1, 5]]],
-     ['edgelist', 'G218', 7, [[3, 6], [7, 3], [6, 7], [2, 3]]],
-     ['edgelist', 'G219', 7, [[2, 3], [5, 2], [6, 5], [3, 6]]],
-     ['edgelist', 'G220', 7, [[2, 1], [6, 2], [2, 3], [5, 2]]],
-     ['edgelist', 'G221', 7, [[2, 1], [3, 2], [6, 3], [7, 3]]],
-     ['edgelist', 'G222', 7, [[4, 5], [3, 4], [2, 3], [1, 2]]],
-     ['edgelist', 'G223', 7, [[5, 3], [1, 5], [3, 1], [6, 7]]],
-     ['edgelist', 'G224', 7, [[1, 2], [7, 1], [1, 6], [5, 3]]],
-     ['edgelist', 'G225', 7, [[4, 2], [6, 5], [7, 6], [1, 7]]],
-     ['edgelist', 'G226', 7, [[1, 5], [4, 1], [3, 6], [7, 3]]],
-     ['edgelist', 'G227', 7, [[3, 4], [2, 3], [7, 1], [6, 5]]],
-     ['edgelist', 'G228', 7, [[1, 5], [4, 1], [2, 4], [5, 2], [2, 1]]],
-     ['edgelist', 'G229', 7, [[3, 6], [7, 3], [6, 7], [5, 3], [4, 3]]],
-     ['edgelist', 'G230', 7, [[5, 3], [5, 1], [3, 1], [6, 5], [7, 1]]],
-     ['edgelist', 'G231', 7, [[3, 6], [7, 3], [6, 7], [2, 3], [1, 2]]],
-     ['edgelist', 'G232', 7, [[5, 2], [1, 5], [4, 1], [2, 4], [3, 2]]],
-     ['edgelist', 'G233', 7, [[2, 3], [1, 2], [5, 1], [4, 5], [3, 4]]],
-     ['edgelist', 'G234', 7, [[6, 2], [6, 1], [3, 6], [4, 6], [5, 6]]],
-     ['edgelist', 'G235', 7, [[2, 6], [7, 2], [2, 1], [3, 2], [4, 3]]],
-     ['edgelist', 'G236', 7, [[2, 6], [5, 2], [3, 4], [7, 3], [3, 2]]],
-     ['edgelist', 'G237', 7, [[2, 6], [7, 2], [2, 3], [3, 4], [5, 4]]],
-     ['edgelist', 'G238', 7, [[3, 2], [4, 3], [5, 4], [6, 5], [4, 7]]],
-     ['edgelist', 'G239', 7, [[7, 6], [3, 7], [2, 3], [6, 3], [4, 5]]],
-     ['edgelist', 'G240', 7, [[5, 4], [6, 5], [7, 6], [1, 7], [2, 1]]],
-     ['edgelist', 'G241', 7, [[1, 5], [4, 1], [3, 6], [7, 3], [6, 7]]],
-     ['edgelist', 'G242', 7, [[5, 2], [6, 3], [7, 6], [4, 7], [3, 4]]],
-     ['edgelist', 'G243', 7, [[2, 5], [4, 2], [2, 1], [3, 2], [7, 6]]],
-     ['edgelist', 'G244', 7, [[1, 5], [4, 1], [2, 1], [3, 2], [7, 6]]],
-     ['edgelist', 'G245', 7, [[1, 5], [4, 1], [3, 2], [6, 3], [7, 3]]],
-     ['edgelist', 'G246', 7, [[7, 6], [4, 5], [3, 4], [2, 3], [1, 2]]],
-     ['edgelist', 'G247', 7, [[3, 4], [2, 3], [7, 1], [6, 7], [6, 5]]],
-     ['edgelist', 'G248', 7, [[1, 2], [5, 7], [6, 5], [4, 3], [7, 6]]],
-     ['edgelist', 'G249', 7, [[2, 6], [7, 2], [6, 7], [3, 6], [2, 3], [7, 3]]],
-     ['edgelist', 'G250', 7, [[2, 5], [4, 2], [3, 4], [5, 3], [2, 1], [3, 2]]],
-     ['edgelist', 'G251', 7, [[1, 5], [4, 1], [2, 4], [3, 2], [2, 5], [4, 5]]],
-     ['edgelist', 'G252', 7, [[6, 3], [5, 6], [3, 5], [4, 3], [7, 4], [3, 7]]],
-     ['edgelist', 'G253', 7, [[2, 3], [5, 2], [6, 5], [3, 6], [1, 2], [5, 1]]],
-     ['edgelist', 'G254', 7, [[2, 3], [6, 2], [5, 6], [3, 5], [1, 3], [6, 1]]],
-     ['edgelist', 'G255', 7, [[3, 6], [7, 3], [6, 7], [3, 5], [2, 3], [4, 3]]],
-     ['edgelist', 'G256', 7, [[2, 5], [4, 2], [3, 4], [2, 3], [3, 6], [7, 3]]],
-     ['edgelist', 'G257', 7, [[6, 5], [7, 6], [2, 7], [6, 2], [4, 7], [1, 2]]],
-     ['edgelist', 'G258', 7, [[7, 6], [2, 7], [6, 2], [4, 2], [1, 4], [2, 5]]],
-     ['edgelist', 'G259', 7, [[1, 5], [4, 1], [3, 4], [5, 3], [3, 6], [7, 3]]],
-     ['edgelist', 'G260', 7, [[2, 5], [4, 2], [3, 4], [2, 3], [3, 6], [7, 6]]],
-     ['edgelist', 'G261', 7, [[3, 4], [2, 3], [4, 7], [6, 5], [7, 6], [6, 3]]],
-     ['edgelist', 'G262', 7, [[3, 6], [7, 3], [6, 7], [2, 5], [4, 2], [3, 2]]],
-     ['edgelist', 'G263', 7, [[5, 6], [1, 5], [4, 1], [3, 4], [5, 3], [7, 4]]],
-     ['edgelist', 'G264', 7, [[1, 5], [4, 1], [2, 4], [7, 6], [2, 5], [2, 1]]],
-     ['edgelist', 'G265', 7, [[2, 5], [4, 2], [3, 4], [6, 3], [7, 6], [3, 7]]],
-     ['edgelist', 'G266', 7, [[7, 4], [6, 7], [5, 6], [2, 5], [3, 2], [6, 3]]],
-     ['edgelist', 'G267', 7, [[2, 1], [4, 2], [7, 4], [6, 7], [5, 6], [2, 5]]],
-     ['edgelist', 'G268', 7, [[1, 2], [2, 3], [3, 4], [4, 5], [5, 6], [1, 6]]],
-     ['edgelist', 'G269', 7, [[1, 5], [4, 1], [5, 4], [3, 6], [7, 3], [6, 7]]],
-     ['edgelist', 'G270', 7, [[7, 4], [1, 7], [7, 3], [6, 7], [7, 2], [5, 7]]],
-     ['edgelist', 'G271', 7, [[3, 5], [6, 3], [3, 4], [7, 3], [2, 3], [2, 1]]],
-     ['edgelist', 'G272', 7, [[2, 1], [3, 2], [6, 3], [2, 5], [4, 2], [7, 3]]],
-     ['edgelist', 'G273', 7, [[2, 1], [3, 2], [4, 7], [2, 4], [5, 2], [6, 5]]],
-     ['edgelist', 'G274', 7, [[2, 1], [3, 2], [6, 3], [7, 6], [2, 5], [4, 2]]],
-     ['edgelist', 'G275', 7, [[2, 1], [3, 5], [6, 3], [7, 6], [3, 7], [4, 3]]],
-     ['edgelist', 'G276', 7, [[5, 1], [2, 5], [4, 2], [3, 2], [6, 3], [7, 3]]],
-     ['edgelist', 'G277', 7, [[7, 6], [2, 3], [1, 2], [3, 1], [4, 3], [1, 5]]],
-     ['edgelist', 'G278', 7, [[1, 5], [4, 1], [2, 1], [3, 2], [6, 3], [7, 3]]],
-     ['edgelist', 'G279', 7, [[2, 1], [4, 2], [7, 4], [3, 7], [5, 2], [6, 5]]],
-     ['edgelist', 'G280', 7, [[3, 6], [7, 3], [5, 3], [2, 5], [4, 2], [1, 4]]],
-     ['edgelist', 'G281', 7, [[1, 5], [4, 1], [3, 4], [5, 3], [2, 3], [7, 6]]],
-     ['edgelist', 'G282', 7, [[1, 5], [4, 1], [3, 2], [6, 3], [7, 6], [3, 7]]],
-     ['edgelist', 'G283', 7, [[4, 5], [2, 1], [3, 2], [6, 3], [7, 6], [3, 7]]],
-     ['edgelist', 'G284', 7, [[5, 6], [1, 5], [4, 1], [7, 4], [2, 1], [3, 2]]],
-     ['edgelist', 'G285', 7, [[3, 6], [7, 3], [6, 7], [2, 5], [4, 2], [2, 1]]],
-     ['edgelist', 'G286', 7, [[5, 6], [4, 5], [3, 4], [2, 3], [1, 2], [7, 1]]],
-     ['edgelist', 'G287', 7, [[7, 5], [6, 7], [5, 6], [3, 4], [2, 3], [1, 2]]],
-     ['edgelist', 'G288', 7, [[1, 2], [5, 1], [3, 4], [6, 3], [7, 6], [4, 7]]],
-     ['edgelist', 'G289', 7, [[2, 3], [1, 2], [5, 1], [4, 5], [3, 4], [7, 6]]],
-     ['edgelist',
-      'G290',
-      7,
-      [[2, 5], [4, 2], [3, 4], [5, 3], [2, 1], [3, 2], [4, 5]]],
-     ['edgelist',
-      'G291',
-      7,
-      [[2, 3], [6, 2], [5, 6], [3, 5], [1, 3], [6, 1], [6, 3]]],
-     ['edgelist',
-      'G292',
-      7,
-      [[1, 2], [2, 3], [3, 4], [4, 5], [1, 5], [2, 4], [5, 2]]],
-     ['edgelist',
-      'G293',
-      7,
-      [[2, 3], [6, 2], [5, 6], [3, 5], [1, 3], [6, 1], [2, 1]]],
-     ['edgelist',
-      'G294',
-      7,
-      [[1, 5], [4, 1], [3, 4], [5, 3], [3, 6], [7, 3], [3, 1]]],
-     ['edgelist',
-      'G295',
-      7,
-      [[2, 5], [4, 2], [3, 4], [5, 3], [2, 1], [3, 2], [3, 7]]],
-     ['edgelist',
-      'G296',
-      7,
-      [[2, 5], [4, 2], [3, 4], [5, 3], [2, 1], [4, 5], [7, 4]]],
-     ['edgelist',
-      'G297',
-      7,
-      [[1, 5], [4, 1], [3, 4], [5, 3], [3, 6], [7, 3], [4, 5]]],
-     ['edgelist',
-      'G298',
-      7,
-      [[1, 5], [4, 1], [2, 4], [4, 7], [2, 5], [2, 1], [6, 5]]],
-     ['edgelist',
-      'G299',
-      7,
-      [[1, 5], [4, 1], [2, 4], [7, 6], [2, 5], [2, 1], [4, 5]]],
-     ['edgelist',
-      'G300',
-      7,
-      [[6, 3], [5, 6], [3, 5], [4, 3], [7, 4], [3, 7], [3, 2]]],
-     ['edgelist',
-      'G301',
-      7,
-      [[1, 2], [2, 3], [3, 4], [4, 5], [1, 5], [1, 3], [3, 6]]],
-     ['edgelist',
-      'G302',
-      7,
-      [[6, 3], [5, 6], [3, 5], [4, 3], [7, 4], [3, 7], [4, 2]]],
-     ['edgelist',
-      'G303',
-      7,
-      [[2, 5], [4, 2], [3, 4], [5, 3], [3, 1], [3, 2], [7, 1]]],
-     ['edgelist',
-      'G304',
-      7,
-      [[2, 3], [6, 2], [5, 6], [3, 5], [1, 3], [6, 1], [4, 6]]],
-     ['edgelist',
-      'G305',
-      7,
-      [[1, 2], [2, 3], [3, 4], [4, 5], [1, 5], [1, 3], [4, 6]]],
-     ['edgelist',
-      'G306',
-      7,
-      [[1, 2], [2, 3], [3, 4], [4, 5], [1, 5], [1, 3], [2, 6]]],
-     ['edgelist',
-      'G307',
-      7,
-      [[4, 3], [5, 4], [4, 6], [3, 5], [6, 3], [7, 2], [7, 5]]],
-     ['edgelist',
-      'G308',
-      7,
-      [[2, 3], [6, 2], [5, 6], [3, 5], [1, 3], [6, 1], [1, 4]]],
-     ['edgelist',
-      'G309',
-      7,
-      [[4, 5], [2, 4], [3, 2], [7, 3], [6, 7], [2, 6], [5, 2]]],
-     ['edgelist',
-      'G310',
-      7,
-      [[1, 2], [5, 1], [2, 5], [3, 2], [4, 3], [6, 4], [5, 6]]],
-     ['edgelist',
-      'G311',
-      7,
-      [[7, 4], [6, 7], [2, 6], [3, 2], [4, 3], [5, 3], [6, 5]]],
-     ['edgelist',
-      'G312',
-      7,
-      [[2, 3], [5, 2], [6, 5], [7, 6], [4, 7], [3, 4], [6, 3]]],
-     ['edgelist',
-      'G313',
-      7,
-      [[5, 2], [4, 5], [2, 4], [3, 2], [7, 3], [6, 7], [3, 6]]],
-     ['edgelist',
-      'G314',
-      7,
-      [[4, 1], [7, 4], [1, 7], [2, 1], [1, 3], [6, 1], [1, 5]]],
-     ['edgelist',
-      'G315',
-      7,
-      [[2, 6], [7, 2], [2, 3], [4, 2], [5, 4], [2, 5], [5, 1]]],
-     ['edgelist',
-      'G316',
-      7,
-      [[6, 1], [7, 6], [1, 7], [6, 3], [2, 6], [7, 4], [5, 7]]],
-     ['edgelist',
-      'G317',
-      7,
-      [[5, 2], [1, 5], [2, 1], [3, 2], [1, 4], [7, 1], [5, 6]]],
-     ['edgelist',
-      'G318',
-      7,
-      [[6, 3], [7, 6], [3, 7], [3, 5], [4, 3], [2, 1], [3, 2]]],
-     ['edgelist',
-      'G319',
-      7,
-      [[5, 2], [1, 5], [4, 1], [2, 4], [3, 2], [2, 6], [7, 2]]],
-     ['edgelist',
-      'G320',
-      7,
-      [[2, 1], [5, 2], [1, 5], [6, 5], [3, 2], [4, 3], [7, 2]]],
-     ['edgelist',
-      'G321',
-      7,
-      [[1, 2], [5, 1], [2, 5], [3, 2], [4, 3], [6, 5], [7, 5]]],
-     ['edgelist',
-      'G322',
-      7,
-      [[3, 4], [6, 3], [7, 6], [4, 7], [2, 3], [5, 6], [1, 6]]],
-     ['edgelist',
-      'G323',
-      7,
-      [[1, 5], [4, 1], [2, 4], [5, 2], [2, 1], [3, 2], [7, 6]]],
-     ['edgelist',
-      'G324',
-      7,
-      [[3, 6], [7, 3], [6, 7], [5, 3], [2, 3], [1, 2], [4, 2]]],
-     ['edgelist',
-      'G325',
-      7,
-      [[3, 6], [7, 3], [5, 3], [2, 5], [4, 2], [3, 4], [1, 2]]],
-     ['edgelist',
-      'G326',
-      7,
-      [[7, 3], [6, 7], [3, 6], [2, 3], [1, 2], [5, 2], [4, 2]]],
-     ['edgelist',
-      'G327',
-      7,
-      [[1, 5], [4, 1], [2, 4], [5, 2], [6, 5], [3, 2], [7, 4]]],
-     ['edgelist',
-      'G328',
-      7,
-      [[3, 6], [7, 3], [6, 7], [5, 6], [4, 7], [2, 3], [1, 2]]],
-     ['edgelist',
-      'G329',
-      7,
-      [[3, 6], [7, 3], [2, 5], [2, 3], [1, 2], [5, 1], [1, 4]]],
-     ['edgelist',
-      'G330',
-      7,
-      [[7, 6], [2, 3], [5, 2], [1, 5], [4, 1], [2, 4], [4, 5]]],
-     ['edgelist',
-      'G331',
-      7,
-      [[5, 2], [1, 5], [2, 1], [4, 7], [3, 4], [1, 3], [6, 1]]],
-     ['edgelist',
-      'G332',
-      7,
-      [[5, 2], [1, 5], [4, 1], [2, 4], [3, 2], [6, 3], [7, 2]]],
-     ['edgelist',
-      'G333',
-      7,
-      [[5, 2], [1, 5], [2, 1], [3, 4], [1, 3], [6, 1], [7, 6]]],
-     ['edgelist',
-      'G334',
-      7,
-      [[1, 2], [6, 1], [7, 6], [4, 7], [3, 4], [1, 3], [5, 1]]],
-     ['edgelist',
-      'G335',
-      7,
-      [[2, 1], [5, 2], [3, 5], [4, 3], [5, 4], [1, 5], [7, 6]]],
-     ['edgelist',
-      'G336',
-      7,
-      [[4, 7], [3, 4], [2, 3], [1, 2], [5, 1], [2, 5], [6, 5]]],
-     ['edgelist',
-      'G337',
-      7,
-      [[2, 1], [6, 2], [7, 6], [3, 7], [2, 3], [4, 3], [5, 4]]],
-     ['edgelist',
-      'G338',
-      7,
-      [[3, 4], [2, 3], [1, 2], [5, 1], [6, 5], [7, 6], [5, 2]]],
-     ['edgelist',
-      'G339',
-      7,
-      [[6, 3], [7, 6], [3, 7], [2, 3], [5, 2], [1, 5], [4, 2]]],
-     ['edgelist',
-      'G340',
-      7,
-      [[3, 4], [2, 3], [1, 2], [5, 1], [6, 5], [7, 6], [6, 3]]],
-     ['edgelist',
-      'G341',
-      7,
-      [[2, 5], [1, 2], [3, 1], [4, 3], [6, 4], [1, 6], [7, 4]]],
-     ['edgelist',
-      'G342',
-      7,
-      [[3, 2], [4, 3], [7, 4], [6, 7], [1, 6], [3, 1], [6, 5]]],
-     ['edgelist',
-      'G343',
-      7,
-      [[6, 3], [7, 6], [3, 7], [2, 3], [1, 2], [5, 1], [4, 1]]],
-     ['edgelist',
-      'G344',
-      7,
-      [[5, 2], [1, 5], [4, 1], [2, 4], [3, 2], [6, 3], [7, 3]]],
-     ['edgelist',
-      'G345',
-      7,
-      [[2, 1], [3, 2], [6, 3], [5, 6], [1, 5], [5, 2], [7, 4]]],
-     ['edgelist',
-      'G346',
-      7,
-      [[3, 6], [7, 3], [1, 5], [4, 1], [2, 4], [5, 2], [2, 1]]],
-     ['edgelist',
-      'G347',
-      7,
-      [[7, 6], [1, 5], [4, 1], [2, 4], [5, 2], [3, 5], [4, 3]]],
-     ['edgelist',
-      'G348',
-      7,
-      [[3, 2], [6, 3], [5, 6], [1, 5], [4, 1], [7, 4], [3, 7]]],
-     ['edgelist',
-      'G349',
-      7,
-      [[5, 1], [4, 5], [2, 4], [3, 2], [6, 3], [7, 6], [3, 7]]],
-     ['edgelist',
-      'G350',
-      7,
-      [[7, 6], [3, 7], [2, 3], [5, 2], [1, 5], [4, 1], [2, 4]]],
-     ['edgelist',
-      'G351',
-      7,
-      [[5, 2], [1, 5], [3, 1], [4, 3], [7, 4], [6, 7], [1, 6]]],
-     ['edgelist',
-      'G352',
-      7,
-      [[1, 5], [4, 1], [5, 4], [3, 2], [6, 3], [7, 6], [3, 7]]],
-     ['edgelist',
-      'G353',
-      7,
-      [[1, 2], [2, 3], [3, 4], [4, 5], [5, 6], [6, 7], [1, 7]]],
-     ['edgelist',
-      'G354',
-      7,
-      [[2, 1], [5, 2], [1, 5], [6, 3], [7, 6], [4, 7], [3, 4]]],
-     ['edgelist',
-      'G355',
-      7,
-      [[1, 2], [5, 1], [6, 5], [3, 6], [2, 3], [6, 2], [5, 2], [3, 5]]],
-     ['edgelist',
-      'G356',
-      7,
-      [[5, 2], [6, 5], [3, 6], [2, 3], [1, 2], [6, 1], [1, 5], [3, 1]]],
-     ['edgelist',
-      'G357',
-      7,
-      [[1, 5], [4, 1], [2, 4], [5, 2], [2, 1], [4, 5], [6, 2], [7, 2]]],
-     ['edgelist',
-      'G358',
-      7,
-      [[5, 2], [6, 5], [3, 6], [2, 3], [6, 2], [7, 6], [3, 5], [4, 3]]],
-     ['edgelist',
-      'G359',
-      7,
-      [[2, 4], [1, 2], [5, 1], [3, 5], [2, 3], [5, 2], [6, 5], [2, 6]]],
-     ['edgelist',
-      'G360',
-      7,
-      [[3, 1], [4, 3], [7, 4], [6, 7], [1, 6], [4, 1], [1, 7], [5, 1]]],
-     ['edgelist',
-      'G361',
-      7,
-      [[2, 1], [3, 2], [6, 3], [5, 6], [1, 5], [3, 1], [6, 1], [7, 6]]],
-     ['edgelist',
-      'G362',
-      7,
-      [[2, 1], [3, 2], [4, 3], [2, 4], [5, 4], [3, 5], [6, 3], [4, 6]]],
-     ['edgelist',
-      'G363',
-      7,
-      [[3, 1], [4, 3], [7, 4], [6, 7], [1, 6], [4, 1], [7, 1], [5, 6]]],
-     ['edgelist',
-      'G364',
-      7,
-      [[2, 1], [3, 2], [5, 4], [2, 6], [5, 2], [3, 5], [6, 3], [4, 6]]],
-     ['edgelist',
-      'G365',
-      7,
-      [[4, 6], [3, 2], [5, 4], [2, 6], [5, 2], [3, 5], [6, 3], [5, 7]]],
-     ['edgelist',
-      'G366',
-      7,
-      [[1, 5], [4, 1], [2, 4], [5, 2], [2, 1], [4, 5], [3, 2], [6, 3]]],
-     ['edgelist',
-      'G367',
-      7,
-      [[4, 6], [3, 2], [5, 4], [2, 6], [5, 2], [3, 5], [6, 3], [1, 4]]],
-     ['edgelist',
-      'G368',
-      7,
-      [[5, 1], [3, 5], [1, 3], [4, 1], [3, 4], [6, 3], [7, 6], [3, 7]]],
-     ['edgelist',
-      'G369',
-      7,
-      [[4, 3], [7, 4], [6, 7], [3, 6], [1, 3], [6, 1], [5, 6], [3, 5]]],
-     ['edgelist',
-      'G370',
-      7,
-      [[1, 6], [5, 1], [3, 5], [6, 3], [2, 6], [5, 2], [4, 5], [6, 4]]],
-     ['edgelist',
-      'G371',
-      7,
-      [[3, 4], [2, 3], [5, 2], [6, 5], [2, 6], [6, 3], [7, 6], [4, 7]]],
-     ['edgelist',
-      'G372',
-      7,
-      [[6, 3], [5, 6], [1, 5], [4, 1], [7, 4], [3, 7], [5, 3], [4, 3]]],
-     ['edgelist',
-      'G373',
-      7,
-      [[1, 5], [4, 1], [2, 4], [5, 2], [3, 5], [4, 3], [6, 5], [3, 6]]],
-     ['edgelist',
-      'G374',
-      7,
-      [[6, 7], [3, 6], [7, 3], [4, 3], [5, 4], [1, 5], [4, 1], [3, 5]]],
-     ['edgelist',
-      'G375',
-      7,
-      [[2, 1], [6, 1], [4, 3], [2, 4], [6, 3], [7, 2], [7, 3], [7, 6]]],
-     ['edgelist',
-      'G376',
-      7,
-      [[6, 5], [7, 6], [4, 7], [1, 4], [5, 1], [3, 5], [4, 3], [1, 3]]],
-     ['edgelist',
-      'G377',
-      7,
-      [[1, 2], [2, 3], [3, 4], [4, 5], [5, 6], [1, 6], [5, 3], [2, 6]]],
-     ['edgelist',
-      'G378',
-      7,
-      [[6, 1], [7, 3], [1, 7], [2, 1], [3, 2], [6, 3], [5, 6], [5, 7]]],
-     ['edgelist',
-      'G379',
-      7,
-      [[1, 5], [4, 1], [2, 4], [5, 2], [2, 1], [3, 2], [2, 6], [7, 2]]],
-     ['edgelist',
-      'G380',
-      7,
-      [[1, 3], [5, 1], [2, 5], [1, 2], [4, 1], [2, 4], [6, 2], [7, 2]]],
-     ['edgelist',
-      'G381',
-      7,
-      [[5, 3], [1, 5], [4, 1], [2, 4], [5, 2], [2, 1], [2, 6], [7, 2]]],
-     ['edgelist',
-      'G382',
-      7,
-      [[1, 5], [4, 1], [5, 4], [2, 5], [4, 2], [2, 6], [3, 2], [7, 2]]],
-     ['edgelist',
-      'G383',
-      7,
-      [[3, 2], [1, 3], [4, 1], [6, 4], [3, 6], [4, 3], [5, 4], [7, 6]]],
-     ['edgelist',
-      'G384',
-      7,
-      [[5, 3], [1, 5], [4, 1], [2, 4], [5, 2], [4, 5], [2, 6], [7, 2]]],
-     ['edgelist',
-      'G385',
-      7,
-      [[3, 2], [1, 3], [4, 1], [6, 4], [3, 6], [7, 6], [5, 4], [6, 1]]],
-     ['edgelist',
-      'G386',
-      7,
-      [[2, 1], [3, 2], [4, 3], [2, 4], [5, 3], [4, 5], [5, 6], [7, 5]]],
-     ['edgelist',
-      'G387',
-      7,
-      [[7, 6], [2, 3], [5, 2], [1, 5], [4, 1], [2, 4], [1, 2], [4, 5]]],
-     ['edgelist',
-      'G388',
-      7,
-      [[1, 2], [7, 6], [3, 4], [7, 5], [7, 4], [7, 3], [7, 1], [7, 2]]],
-     ['edgelist',
-      'G389',
-      7,
-      [[7, 5], [2, 3], [3, 4], [7, 6], [5, 6], [7, 3], [7, 1], [7, 2]]],
-     ['edgelist',
-      'G390',
-      7,
-      [[1, 2], [2, 3], [3, 4], [7, 6], [7, 5], [7, 4], [7, 1], [7, 3]]],
-     ['edgelist',
-      'G391',
-      7,
-      [[1, 5], [4, 1], [2, 4], [5, 2], [2, 1], [7, 2], [6, 2], [3, 6]]],
-     ['edgelist',
-      'G392',
-      7,
-      [[4, 1], [3, 4], [5, 3], [1, 5], [2, 1], [3, 2], [6, 3], [7, 3]]],
-     ['edgelist',
-      'G393',
-      7,
-      [[3, 2], [4, 3], [7, 4], [6, 7], [1, 6], [3, 1], [6, 3], [5, 6]]],
-     ['edgelist',
-      'G394',
-      7,
-      [[2, 1], [3, 2], [4, 3], [5, 4], [6, 3], [2, 6], [7, 2], [3, 7]]],
-     ['edgelist',
-      'G395',
-      7,
-      [[3, 6], [5, 3], [2, 5], [4, 2], [1, 4], [2, 1], [3, 2], [7, 3]]],
-     ['edgelist',
-      'G396',
-      7,
-      [[5, 6], [1, 5], [4, 1], [3, 4], [5, 3], [2, 5], [4, 2], [7, 4]]],
-     ['edgelist',
-      'G397',
-      7,
-      [[1, 2], [5, 1], [2, 5], [3, 2], [5, 3], [6, 5], [2, 6], [7, 4]]],
-     ['edgelist',
-      'G398',
-      7,
-      [[1, 2], [3, 1], [4, 3], [5, 4], [2, 5], [3, 2], [2, 7], [6, 1]]],
-     ['edgelist',
-      'G399',
-      7,
-      [[5, 6], [1, 5], [2, 1], [5, 2], [4, 1], [2, 4], [7, 2], [3, 7]]],
-     ['edgelist',
-      'G400',
-      7,
-      [[3, 6], [5, 3], [1, 5], [2, 1], [5, 2], [4, 1], [2, 4], [7, 2]]],
-     ['edgelist',
-      'G401',
-      7,
-      [[2, 7], [3, 2], [1, 3], [2, 1], [5, 2], [4, 5], [3, 4], [5, 6]]],
-     ['edgelist',
-      'G402',
-      7,
-      [[1, 2], [3, 1], [4, 3], [5, 4], [2, 5], [3, 2], [2, 7], [6, 4]]],
-     ['edgelist',
-      'G403',
-      7,
-      [[1, 5], [4, 1], [5, 4], [2, 5], [4, 2], [6, 2], [7, 3], [2, 7]]],
-     ['edgelist',
-      'G404',
-      7,
-      [[3, 4], [2, 3], [1, 2], [6, 1], [5, 6], [1, 5], [3, 1], [7, 6]]],
-     ['edgelist',
-      'G405',
-      7,
-      [[5, 6], [1, 5], [4, 1], [2, 4], [5, 2], [3, 5], [4, 3], [7, 3]]],
-     ['edgelist',
-      'G406',
-      7,
-      [[3, 4], [2, 3], [1, 2], [5, 1], [6, 5], [5, 2], [3, 7], [6, 3]]],
-     ['edgelist',
-      'G407',
-      7,
-      [[1, 2], [2, 3], [3, 4], [7, 4], [5, 6], [7, 3], [7, 1], [7, 2]]],
-     ['edgelist',
-      'G408',
-      7,
-      [[5, 2], [1, 5], [4, 1], [2, 4], [1, 2], [3, 2], [6, 3], [7, 3]]],
-     ['edgelist',
-      'G409',
-      7,
-      [[1, 2], [2, 3], [3, 4], [7, 6], [5, 6], [7, 3], [7, 5], [7, 2]]],
-     ['edgelist',
-      'G410',
-      7,
-      [[1, 2], [5, 1], [1, 3], [6, 1], [7, 6], [4, 7], [3, 4], [6, 3]]],
-     ['edgelist',
-      'G411',
-      7,
-      [[1, 5], [4, 1], [3, 4], [5, 3], [2, 5], [4, 2], [3, 6], [7, 3]]],
-     ['edgelist',
-      'G412',
-      7,
-      [[5, 6], [4, 5], [2, 4], [3, 2], [7, 3], [5, 7], [4, 3], [1, 2]]],
-     ['edgelist',
-      'G413',
-      7,
-      [[2, 1], [3, 7], [4, 3], [5, 4], [6, 3], [2, 6], [7, 2], [7, 6]]],
-     ['edgelist',
-      'G414',
-      7,
-      [[3, 4], [2, 3], [1, 2], [5, 1], [6, 5], [7, 6], [6, 3], [5, 2]]],
-     ['edgelist',
-      'G415',
-      7,
-      [[5, 2], [1, 5], [4, 1], [2, 4], [4, 5], [3, 2], [3, 6], [7, 3]]],
-     ['edgelist',
-      'G416',
-      7,
-      [[1, 7], [5, 1], [2, 5], [4, 2], [1, 4], [3, 5], [4, 3], [6, 3]]],
-     ['edgelist',
-      'G417',
-      7,
-      [[1, 5], [4, 1], [2, 4], [5, 2], [3, 5], [4, 3], [2, 1], [7, 6]]],
-     ['edgelist',
-      'G418',
-      7,
-      [[1, 2], [5, 1], [4, 3], [7, 4], [6, 7], [3, 6], [7, 3], [4, 6]]],
-     ['edgelist',
-      'G419',
-      7,
-      [[6, 3], [7, 6], [3, 7], [5, 3], [1, 5], [4, 1], [3, 4], [2, 3]]],
-     ['edgelist',
-      'G420',
-      7,
-      [[3, 1], [2, 3], [1, 2], [6, 1], [5, 6], [1, 5], [7, 1], [4, 7]]],
-     ['edgelist',
-      'G421',
-      7,
-      [[1, 2], [3, 1], [4, 3], [3, 2], [2, 5], [6, 5], [6, 4], [2, 7]]],
-     ['edgelist',
-      'G422',
-      7,
-      [[2, 7], [3, 2], [1, 3], [2, 1], [5, 2], [4, 5], [3, 4], [6, 7]]],
-     ['edgelist',
-      'G423',
-      7,
-      [[7, 2], [1, 7], [2, 1], [6, 2], [1, 6], [3, 2], [4, 3], [5, 4]]],
-     ['edgelist',
-      'G424',
-      7,
-      [[7, 6], [3, 7], [2, 3], [5, 2], [4, 5], [1, 4], [5, 1], [3, 5]]],
-     ['edgelist',
-      'G425',
-      7,
-      [[2, 7], [1, 2], [6, 1], [2, 6], [4, 1], [5, 4], [3, 5], [1, 3]]],
-     ['edgelist',
-      'G426',
-      7,
-      [[3, 7], [5, 3], [1, 5], [2, 1], [5, 2], [4, 5], [6, 4], [3, 6]]],
-     ['edgelist',
-      'G427',
-      7,
-      [[2, 1], [3, 2], [7, 3], [6, 7], [2, 6], [5, 2], [4, 5], [3, 4]]],
-     ['edgelist',
-      'G428',
-      7,
-      [[7, 2], [5, 4], [2, 1], [6, 2], [4, 3], [3, 2], [5, 7], [6, 5]]],
-     ['edgelist',
-      'G429',
-      7,
-      [[5, 3], [1, 5], [2, 1], [5, 2], [4, 5], [7, 4], [6, 7], [4, 6]]],
-     ['edgelist',
-      'G430',
-      7,
-      [[5, 2], [3, 5], [1, 3], [7, 1], [4, 7], [1, 4], [6, 1], [5, 6]]],
-     ['edgelist',
-      'G431',
-      7,
-      [[6, 7], [5, 6], [1, 5], [4, 1], [3, 4], [5, 3], [2, 5], [4, 2]]],
-     ['edgelist',
-      'G432',
-      7,
-      [[7, 4], [6, 7], [5, 6], [1, 5], [2, 1], [3, 2], [6, 3], [5, 2]]],
-     ['edgelist',
-      'G433',
-      7,
-      [[1, 2], [3, 1], [4, 3], [3, 2], [2, 5], [6, 5], [6, 4], [5, 7]]],
-     ['edgelist',
-      'G434',
-      7,
-      [[5, 1], [4, 5], [3, 4], [7, 3], [6, 7], [2, 6], [5, 2], [3, 2]]],
-     ['edgelist',
-      'G435',
-      7,
-      [[7, 2], [1, 7], [5, 4], [6, 2], [1, 6], [3, 2], [4, 3], [6, 7]]],
-     ['edgelist',
-      'G436',
-      7,
-      [[7, 3], [6, 7], [4, 6], [7, 4], [5, 4], [1, 5], [2, 1], [5, 2]]],
-     ['edgelist',
-      'G437',
-      7,
-      [[1, 2], [2, 3], [3, 4], [4, 5], [5, 6], [1, 6], [1, 7], [6, 2]]],
-     ['edgelist',
-      'G438',
-      7,
-      [[1, 2], [2, 3], [3, 4], [4, 5], [5, 6], [1, 6], [1, 7], [5, 3]]],
-     ['edgelist',
-      'G439',
-      7,
-      [[1, 2], [3, 1], [4, 3], [5, 4], [2, 5], [3, 2], [6, 7], [1, 6]]],
-     ['edgelist',
-      'G440',
-      7,
-      [[5, 1], [3, 5], [4, 3], [7, 4], [6, 7], [5, 6], [2, 3], [6, 2]]],
-     ['edgelist',
-      'G441',
-      7,
-      [[6, 2], [3, 5], [4, 3], [1, 4], [6, 1], [5, 6], [2, 3], [1, 7]]],
-     ['edgelist',
-      'G442',
-      7,
-      [[6, 7], [3, 6], [5, 3], [1, 5], [4, 1], [3, 4], [2, 5], [4, 2]]],
-     ['edgelist',
-      'G443',
-      7,
-      [[1, 5], [2, 1], [5, 2], [4, 5], [6, 4], [7, 6], [3, 7], [5, 3]]],
-     ['edgelist',
-      'G444',
-      7,
-      [[1, 2], [7, 6], [3, 4], [4, 5], [7, 5], [1, 6], [7, 3], [7, 2]]],
-     ['edgelist',
-      'G445',
-      7,
-      [[2, 3], [1, 2], [5, 1], [6, 5], [3, 6], [4, 3], [7, 4], [6, 7]]],
-     ['edgelist',
-      'G446',
-      7,
-      [[1, 2], [2, 3], [3, 4], [4, 5], [5, 6], [1, 6], [3, 7], [2, 7]]],
-     ['edgelist',
-      'G447',
-      7,
-      [[7, 3], [6, 7], [3, 6], [2, 3], [5, 2], [1, 5], [4, 1], [2, 4]]],
-     ['edgelist',
-      'G448',
-      7,
-      [[1, 2], [2, 3], [3, 4], [4, 5], [5, 6], [1, 6], [7, 6], [7, 2]]],
-     ['edgelist',
-      'G449',
-      7,
-      [[1, 2], [2, 3], [3, 4], [4, 5], [5, 6], [1, 6], [7, 1], [7, 4]]],
-     ['edgelist',
-      'G450',
-      7,
-      [[1, 5], [2, 1], [4, 3], [2, 5], [3, 6], [6, 4], [7, 5], [7, 4]]],
-     ['edgelist',
-      'G451',
-      7,
-      [[1, 5], [4, 1], [2, 4], [5, 2], [2, 1], [7, 3], [6, 7], [3, 6]]],
-     ['edgelist',
-      'G452',
-      7,
-      [[1, 2], [2, 3], [3, 4], [4, 5], [1, 5], [2, 4], [5, 2], [3, 5], [1, 4]]],
-     ['edgelist',
-      'G453',
-      7,
-      [[1, 2], [3, 6], [1, 3], [4, 1], [4, 2], [4, 3], [3, 2], [6, 2], [5, 3]]],
-     ['edgelist',
-      'G454',
-      7,
-      [[1, 2], [3, 6], [1, 3], [4, 1], [4, 2], [4, 3], [3, 2], [6, 2], [1, 5]]],
-     ['edgelist',
-      'G455',
-      7,
-      [[1, 2], [2, 3], [3, 4], [1, 4], [5, 1], [5, 2], [5, 3], [5, 4], [5, 6]]],
-     ['edgelist',
-      'G456',
-      7,
-      [[3, 1], [5, 2], [2, 3], [6, 5], [3, 6], [4, 2], [6, 4], [4, 3], [5, 4]]],
-     ['edgelist',
-      'G457',
-      7,
-      [[1, 2], [3, 6], [1, 3], [4, 1], [4, 2], [4, 3], [3, 2], [6, 2], [5, 6]]],
-     ['edgelist',
-      'G458',
-      7,
-      [[2, 6], [5, 2], [1, 5], [6, 1], [3, 6], [5, 3], [4, 5], [6, 4], [5, 6]]],
-     ['edgelist',
-      'G459',
-      7,
-      [[1, 2], [2, 3], [3, 4], [4, 5], [1, 5], [3, 6], [1, 6], [3, 1], [4, 1]]],
-     ['edgelist',
-      'G460',
-      7,
-      [[2, 4], [3, 2], [1, 3], [6, 1], [5, 6], [4, 5], [1, 5], [2, 1], [5, 2]]],
-     ['edgelist',
-      'G461',
-      7,
-      [[2, 4], [3, 2], [1, 3], [6, 1], [5, 6], [4, 5], [5, 2], [2, 1], [6, 2]]],
-     ['edgelist',
-      'G462',
-      7,
-      [[1, 2], [2, 3], [1, 3], [4, 1], [4, 2], [4, 3], [6, 5], [5, 1], [6, 1]]],
-     ['edgelist',
-      'G463',
-      7,
-      [[5, 4], [1, 5], [2, 1], [3, 2], [4, 3], [1, 6], [6, 4], [1, 4], [2, 6]]],
-     ['edgelist',
-      'G464',
-      7,
-      [[2, 4], [3, 2], [1, 3], [6, 1], [5, 6], [4, 5], [4, 3], [1, 4], [5, 1]]],
-     ['edgelist',
-      'G465',
-      7,
-      [[2, 4], [3, 2], [1, 3], [6, 1], [5, 6], [4, 5], [4, 3], [1, 4], [3, 5]]],
-     ['edgelist',
-      'G466',
-      7,
-      [[1, 2], [2, 3], [3, 4], [4, 5], [1, 5], [3, 6], [1, 6], [3, 1], [6, 2]]],
-     ['edgelist',
-      'G467',
-      7,
-      [[2, 6], [5, 2], [1, 5], [6, 1], [3, 6], [5, 3], [4, 5], [6, 4], [3, 1]]],
-     ['edgelist',
-      'G468',
-      7,
-      [[1, 2], [2, 3], [3, 4], [4, 5], [1, 5], [6, 1], [6, 5], [6, 3], [6, 4]]],
-     ['edgelist',
-      'G469',
-      7,
-      [[1, 2], [2, 3], [3, 4], [4, 5], [1, 5], [4, 1], [6, 3], [6, 1], [6, 2]]],
-     ['edgelist',
-      'G470',
-      7,
-      [[1, 2], [2, 3], [3, 4], [4, 5], [5, 6], [1, 6], [1, 4], [5, 3], [6, 3]]],
-     ['edgelist',
-      'G471',
-      7,
-      [[3, 4], [1, 3], [4, 1], [5, 4], [2, 5], [6, 2], [5, 6], [2, 1], [6, 3]]],
-     ['edgelist',
-      'G472',
-      7,
-      [[1, 2], [2, 3], [3, 4], [4, 5], [5, 6], [1, 6], [1, 4], [6, 3], [5, 2]]],
-     ['edgelist',
-      'G473',
-      7,
-      [[1, 2], [2, 3], [1, 3], [4, 1], [4, 2], [4, 3], [6, 1], [1, 5], [1, 7]]],
-     ['edgelist',
-      'G474',
-      7,
-      [[1, 2], [2, 3], [1, 3], [4, 1], [4, 2], [4, 3], [6, 1], [1, 5], [3, 7]]],
-     ['edgelist',
-      'G475',
-      7,
-      [[2, 3], [4, 2], [1, 4], [2, 1], [3, 1], [4, 3], [6, 4], [5, 1], [2, 7]]],
-     ['edgelist',
-      'G476',
-      7,
-      [[1, 2], [3, 5], [1, 3], [4, 2], [4, 3], [3, 2], [5, 2], [6, 3], [3, 7]]],
-     ['edgelist',
-      'G477',
-      7,
-      [[1, 2], [3, 5], [1, 3], [6, 3], [4, 2], [4, 3], [3, 2], [5, 2], [2, 7]]],
-     ['edgelist',
-      'G478',
-      7,
-      [[1, 2], [2, 3], [3, 4], [4, 5], [1, 5], [2, 4], [5, 2], [2, 6], [2, 7]]],
-     ['edgelist',
-      'G479',
-      7,
-      [[1, 2], [2, 3], [3, 4], [4, 5], [1, 5], [2, 4], [5, 2], [2, 6], [5, 7]]],
-     ['edgelist',
-      'G480',
-      7,
-      [[1, 2], [3, 6], [1, 3], [5, 1], [4, 2], [4, 3], [3, 2], [6, 2], [2, 7]]],
-     ['edgelist',
-      'G481',
-      7,
-      [[1, 2], [2, 3], [3, 4], [4, 5], [1, 5], [2, 4], [5, 2], [6, 5], [5, 7]]],
-     ['edgelist',
-      'G482',
-      7,
-      [[1, 2], [2, 3], [3, 4], [4, 5], [1, 5], [2, 4], [5, 2], [6, 5], [4, 7]]],
-     ['edgelist',
-      'G483',
-      7,
-      [[1, 2], [3, 6], [1, 3], [5, 1], [4, 2], [4, 3], [3, 2], [6, 2], [1, 7]]],
-     ['edgelist',
-      'G484',
-      7,
-      [[1, 2], [2, 3], [3, 4], [4, 5], [1, 5], [2, 4], [5, 2], [6, 1], [2, 7]]],
-     ['edgelist',
-      'G485',
-      7,
-      [[3, 1], [4, 3], [5, 4], [6, 5], [3, 6], [2, 3], [5, 2], [6, 4], [3, 7]]],
-     ['edgelist',
-      'G486',
-      7,
-      [[1, 2], [3, 6], [1, 3], [5, 1], [4, 2], [4, 3], [4, 1], [6, 2], [1, 7]]],
-     ['edgelist',
-      'G487',
-      7,
-      [[1, 2], [2, 3], [1, 3], [4, 1], [4, 2], [4, 3], [6, 1], [1, 5], [6, 7]]],
-     ['edgelist',
-      'G488',
-      7,
-      [[1, 2], [2, 3], [3, 4], [4, 5], [1, 5], [2, 4], [5, 2], [6, 1], [5, 7]]],
-     ['edgelist',
-      'G489',
-      7,
-      [[1, 2], [2, 3], [3, 4], [4, 5], [1, 5], [2, 4], [5, 2], [6, 5], [3, 7]]],
-     ['edgelist',
-      'G490',
-      7,
-      [[3, 1], [4, 3], [5, 4], [6, 5], [3, 6], [2, 3], [5, 2], [6, 4], [6, 7]]],
-     ['edgelist',
-      'G491',
-      7,
-      [[2, 3], [4, 2], [1, 4], [2, 1], [3, 1], [4, 3], [5, 1], [7, 6], [7, 4]]],
-     ['edgelist',
-      'G492',
-      7,
-      [[1, 2], [2, 3], [3, 4], [4, 5], [1, 5], [2, 4], [5, 2], [6, 1], [1, 7]]],
-     ['edgelist',
-      'G493',
-      7,
-      [[1, 2], [2, 3], [3, 4], [4, 5], [1, 5], [4, 7], [6, 5], [1, 4], [3, 5]]],
-     ['edgelist',
-      'G494',
-      7,
-      [[1, 2], [3, 6], [1, 3], [5, 1], [4, 2], [4, 3], [3, 2], [6, 2], [6, 7]]],
-     ['edgelist',
-      'G495',
-      7,
-      [[3, 1], [4, 3], [5, 4], [6, 5], [3, 6], [2, 3], [5, 2], [6, 4], [5, 7]]],
-     ['edgelist',
-      'G496',
-      7,
-      [[1, 2], [3, 6], [1, 3], [4, 1], [4, 2], [4, 3], [3, 2], [6, 2], [5, 7]]],
-     ['edgelist',
-      'G497',
-      7,
-      [[1, 2], [2, 3], [3, 4], [4, 5], [1, 5], [2, 4], [5, 2], [6, 1], [3, 7]]],
-     ['edgelist',
-      'G498',
-      7,
-      [[1, 2], [3, 6], [1, 3], [5, 1], [4, 2], [4, 3], [4, 1], [6, 2], [6, 7]]],
-     ['edgelist',
-      'G499',
-      7,
-      [[1, 2], [3, 6], [1, 3], [6, 5], [4, 2], [4, 3], [4, 1], [6, 2], [3, 7]]],
-     ['edgelist',
-      'G500',
-      7,
-      [[1, 2], [3, 6], [1, 3], [5, 1], [4, 2], [4, 3], [6, 2], [6, 4], [1, 7]]],
-     ['edgelist',
-      'G501',
-      7,
-      [[1, 2], [2, 3], [1, 3], [4, 1], [4, 2], [4, 3], [1, 6], [6, 5], [6, 7]]],
-     ['edgelist',
-      'G502',
-      7,
-      [[1, 2], [2, 3], [3, 4], [1, 4], [5, 1], [5, 2], [5, 3], [5, 4], [6, 7]]],
-     ['edgelist',
-      'G503',
-      7,
-      [[2, 5], [3, 5], [3, 4], [1, 5], [4, 2], [5, 6], [1, 6], [4, 5], [5, 7]]],
-     ['edgelist',
-      'G504',
-      7,
-      [[1, 2], [2, 3], [3, 4], [4, 5], [1, 5], [6, 1], [6, 3], [1, 3], [1, 7]]],
-     ['edgelist',
-      'G505',
-      7,
-      [[2, 5], [3, 5], [3, 4], [1, 5], [4, 2], [5, 6], [1, 6], [4, 5], [4, 7]]],
-     ['edgelist',
-      'G506',
-      7,
-      [[1, 2], [3, 5], [1, 3], [6, 3], [4, 2], [4, 3], [3, 2], [5, 2], [6, 7]]],
-     ['edgelist',
-      'G507',
-      7,
-      [[2, 6], [5, 2], [1, 5], [6, 1], [3, 6], [5, 3], [4, 5], [6, 4], [5, 7]]],
-     ['edgelist',
-      'G508',
-      7,
-      [[1, 2], [2, 3], [3, 4], [4, 5], [5, 6], [1, 6], [3, 5], [6, 3], [3, 7]]],
-     ['edgelist',
-      'G509',
-      7,
-      [[1, 2], [2, 3], [3, 4], [4, 5], [1, 5], [2, 4], [5, 2], [7, 6], [7, 2]]],
-     ['edgelist',
-      'G510',
-      7,
-      [[2, 5], [3, 5], [3, 4], [1, 5], [4, 2], [5, 6], [1, 6], [4, 5], [3, 7]]],
-     ['edgelist',
-      'G511',
-      7,
-      [[2, 5], [3, 5], [3, 4], [1, 5], [4, 2], [5, 6], [1, 6], [4, 5], [1, 7]]],
-     ['edgelist',
-      'G512',
-      7,
-      [[2, 4], [3, 2], [1, 3], [6, 1], [7, 6], [4, 7], [2, 7], [1, 2], [2, 5]]],
-     ['edgelist',
-      'G513',
-      7,
-      [[1, 2], [2, 3], [3, 4], [4, 5], [1, 5], [4, 1], [6, 3], [6, 1], [1, 7]]],
-     ['edgelist',
-      'G514',
-      7,
-      [[2, 5], [3, 5], [3, 4], [1, 5], [4, 2], [5, 6], [1, 6], [3, 2], [5, 7]]],
-     ['edgelist',
-      'G515',
-      7,
-      [[1, 2], [2, 3], [3, 4], [4, 5], [1, 5], [2, 4], [5, 2], [6, 5], [6, 7]]],
-     ['edgelist',
-      'G516',
-      7,
-      [[1, 2], [2, 3], [3, 4], [4, 5], [5, 6], [1, 6], [3, 5], [6, 3], [5, 7]]],
-     ['edgelist',
-      'G517',
-      7,
-      [[1, 2], [2, 3], [3, 4], [4, 5], [5, 6], [1, 6], [3, 5], [6, 3], [6, 7]]],
-     ['edgelist',
-      'G518',
-      7,
-      [[2, 4], [3, 2], [1, 3], [6, 1], [7, 6], [4, 7], [2, 7], [1, 2], [1, 5]]],
-     ['edgelist',
-      'G519',
-      7,
-      [[1, 2], [2, 3], [3, 4], [4, 5], [1, 5], [6, 1], [6, 3], [1, 3], [2, 7]]],
-     ['edgelist',
-      'G520',
-      7,
-      [[1, 2], [2, 3], [3, 4], [4, 5], [1, 5], [6, 1], [6, 3], [1, 3], [5, 7]]],
-     ['edgelist',
-      'G521',
-      7,
-      [[2, 5], [3, 5], [3, 4], [1, 5], [4, 2], [5, 6], [1, 6], [3, 2], [3, 7]]],
-     ['edgelist',
-      'G522',
-      7,
-      [[1, 2], [2, 3], [3, 4], [4, 5], [1, 5], [4, 1], [6, 3], [6, 1], [4, 7]]],
-     ['edgelist',
-      'G523',
-      7,
-      [[1, 2], [2, 3], [3, 4], [4, 5], [1, 5], [4, 1], [6, 3], [6, 1], [3, 7]]],
-     ['edgelist',
-      'G524',
-      7,
-      [[1, 2], [3, 6], [1, 3], [6, 2], [4, 2], [4, 3], [3, 2], [7, 1], [7, 5]]],
-     ['edgelist',
-      'G525',
-      7,
-      [[2, 6], [5, 2], [1, 5], [6, 1], [3, 6], [5, 3], [4, 5], [6, 4], [2, 7]]],
-     ['edgelist',
-      'G526',
-      7,
-      [[1, 2], [2, 3], [3, 4], [4, 5], [1, 5], [2, 4], [5, 2], [6, 1], [6, 7]]],
-     ['edgelist',
-      'G527',
-      7,
-      [[1, 2], [2, 3], [3, 4], [4, 5], [5, 6], [1, 6], [3, 5], [6, 3], [2, 7]]],
-     ['edgelist',
-      'G528',
-      7,
-      [[1, 2], [2, 3], [3, 4], [4, 5], [5, 6], [1, 6], [3, 5], [6, 3], [1, 7]]],
-     ['edgelist',
-      'G529',
-      7,
-      [[1, 2], [2, 3], [3, 4], [4, 5], [5, 6], [1, 6], [3, 5], [6, 3], [4, 7]]],
-     ['edgelist',
-      'G530',
-      7,
-      [[2, 4], [3, 2], [1, 3], [6, 1], [7, 6], [4, 7], [2, 7], [1, 2], [3, 5]]],
-     ['edgelist',
-      'G531',
-      7,
-      [[1, 2], [2, 3], [3, 4], [4, 5], [1, 5], [5, 6], [6, 4], [2, 6], [4, 7]]],
-     ['edgelist',
-      'G532',
-      7,
-      [[1, 2], [2, 3], [3, 4], [4, 5], [1, 5], [4, 1], [6, 3], [6, 1], [2, 7]]],
-     ['edgelist',
-      'G533',
-      7,
-      [[1, 2], [2, 3], [3, 4], [4, 5], [5, 6], [1, 6], [3, 5], [6, 2], [5, 7]]],
-     ['edgelist',
-      'G534',
-      7,
-      [[1, 2], [3, 6], [1, 3], [6, 2], [4, 2], [4, 3], [4, 1], [7, 5], [7, 1]]],
-     ['edgelist',
-      'G535',
-      7,
-      [[1, 2], [2, 3], [3, 4], [4, 5], [1, 5], [2, 6], [6, 3], [6, 1], [2, 7]]],
-     ['edgelist',
-      'G536',
-      7,
-      [[2, 5], [3, 5], [3, 4], [1, 5], [4, 2], [5, 6], [1, 6], [3, 2], [7, 1]]],
-     ['edgelist',
-      'G537',
-      7,
-      [[6, 4], [4, 3], [5, 4], [6, 5], [3, 6], [2, 3], [5, 2], [7, 1], [7, 3]]],
-     ['edgelist',
-      'G538',
-      7,
-      [[1, 2], [2, 3], [3, 4], [4, 5], [1, 5], [2, 6], [6, 3], [6, 1], [1, 7]]],
-     ['edgelist',
-      'G539',
-      7,
-      [[1, 2], [2, 3], [3, 4], [4, 5], [1, 5], [5, 6], [6, 4], [2, 6], [6, 7]]],
-     ['edgelist',
-      'G540',
-      7,
-      [[1, 2], [2, 3], [3, 4], [4, 5], [1, 5], [4, 1], [6, 3], [6, 1], [5, 7]]],
-     ['edgelist',
-      'G541',
-      7,
-      [[2, 4], [3, 2], [1, 3], [6, 1], [7, 6], [4, 7], [2, 7], [1, 2], [6, 5]]],
-     ['edgelist',
-      'G542',
-      7,
-      [[1, 2], [2, 3], [3, 4], [4, 5], [5, 6], [1, 6], [5, 2], [6, 3], [6, 7]]],
-     ['edgelist',
-      'G543',
-      7,
-      [[1, 2], [2, 3], [3, 4], [4, 5], [1, 5], [5, 6], [6, 4], [2, 6], [2, 7]]],
-     ['edgelist',
-      'G544',
-      7,
-      [[2, 5], [3, 5], [3, 4], [1, 5], [4, 2], [5, 6], [1, 6], [3, 2], [4, 7]]],
-     ['edgelist',
-      'G545',
-      7,
-      [[1, 2], [2, 3], [1, 3], [4, 1], [4, 2], [4, 3], [1, 6], [6, 5], [5, 7]]],
-     ['edgelist',
-      'G546',
-      7,
-      [[1, 2], [2, 3], [3, 4], [4, 5], [1, 5], [5, 6], [6, 4], [2, 6], [1, 7]]],
-     ['edgelist',
-      'G547',
-      7,
-      [[1, 2], [2, 3], [3, 4], [4, 5], [1, 5], [2, 6], [6, 3], [6, 1], [5, 7]]],
-     ['edgelist',
-      'G548',
-      7,
-      [[1, 2], [2, 3], [3, 4], [4, 5], [5, 6], [1, 6], [3, 5], [6, 2], [1, 7]]],
-     ['edgelist',
-      'G549',
-      7,
-      [[1, 2], [3, 6], [1, 3], [6, 4], [4, 2], [4, 3], [6, 2], [7, 5], [7, 1]]],
-     ['edgelist',
-      'G550',
-      7,
-      [[1, 2], [2, 3], [3, 4], [4, 5], [5, 6], [1, 6], [5, 2], [6, 3], [1, 7]]],
-     ['edgelist',
-      'G551',
-      7,
-      [[7, 4], [2, 3], [7, 6], [4, 5], [7, 5], [1, 6], [7, 1], [7, 2], [7, 3]]],
-     ['edgelist',
-      'G552',
-      7,
-      [[1, 2], [3, 1], [4, 3], [5, 4], [2, 5], [3, 2], [7, 3], [6, 7], [3, 6]]],
-     ['edgelist',
-      'G553',
-      7,
-      [[2, 5], [3, 5], [3, 4], [1, 5], [4, 2], [5, 6], [4, 5], [7, 6], [7, 1]]],
-     ['edgelist',
-      'G554',
-      7,
-      [[2, 5], [3, 5], [3, 4], [1, 5], [4, 2], [5, 6], [1, 6], [7, 5], [7, 4]]],
-     ['edgelist',
-      'G555',
-      7,
-      [[5, 2], [6, 5], [7, 6], [4, 7], [3, 4], [2, 3], [6, 3], [1, 6], [3, 1]]],
-     ['edgelist',
-      'G556',
-      7,
-      [[5, 2], [4, 2], [3, 4], [5, 1], [6, 1], [6, 3], [6, 5], [7, 5], [6, 7]]],
-     ['edgelist',
-      'G557',
-      7,
-      [[2, 1], [3, 2], [7, 3], [4, 7], [6, 4], [5, 6], [4, 5], [3, 4], [1, 3]]],
-     ['edgelist',
-      'G558',
-      7,
-      [[1, 3], [6, 1], [2, 6], [3, 2], [5, 3], [6, 5], [7, 6], [4, 7], [3, 4]]],
-     ['edgelist',
-      'G559',
-      7,
-      [[1, 2], [2, 3], [3, 4], [4, 5], [5, 6], [6, 7], [1, 7], [2, 4], [5, 2]]],
-     ['edgelist',
-      'G560',
-      7,
-      [[1, 2], [2, 3], [3, 4], [4, 5], [1, 5], [6, 5], [6, 2], [7, 2], [1, 7]]],
-     ['edgelist',
-      'G561',
-      7,
-      [[1, 5], [2, 1], [5, 2], [4, 5], [3, 4], [7, 3], [6, 7], [2, 6], [3, 2]]],
-     ['edgelist',
-      'G562',
-      7,
-      [[1, 2], [3, 1], [4, 3], [5, 4], [2, 5], [3, 2], [6, 4], [7, 6], [4, 7]]],
-     ['edgelist',
-      'G563',
-      7,
-      [[7, 6], [4, 7], [3, 4], [1, 5], [1, 6], [2, 1], [3, 1], [2, 3], [6, 5]]],
-     ['edgelist',
-      'G564',
-      7,
-      [[1, 2], [2, 3], [3, 4], [4, 5], [1, 5], [6, 4], [6, 2], [7, 2], [1, 7]]],
-     ['edgelist',
-      'G565',
-      7,
-      [[6, 3], [7, 6], [4, 7], [3, 4], [1, 3], [5, 1], [6, 5], [2, 6], [1, 2]]],
-     ['edgelist',
-      'G566',
-      7,
-      [[3, 5], [2, 3], [5, 2], [6, 5], [1, 6], [2, 1], [7, 5], [4, 7], [3, 4]]],
-     ['edgelist',
-      'G567',
-      7,
-      [[7, 3], [6, 7], [3, 6], [2, 3], [1, 2], [5, 1], [2, 5], [4, 2], [1, 4]]],
-     ['edgelist',
-      'G568',
-      7,
-      [[1, 6], [7, 1], [2, 7], [5, 2], [3, 5], [4, 3], [2, 4], [6, 2], [7, 6]]],
-     ['edgelist',
-      'G569',
-      7,
-      [[7, 6], [4, 7], [3, 4], [6, 3], [1, 6], [2, 1], [5, 2], [1, 5], [3, 1]]],
-     ['edgelist',
-      'G570',
-      7,
-      [[1, 5], [4, 1], [2, 4], [5, 2], [3, 5], [7, 3], [6, 7], [3, 6], [4, 3]]],
-     ['edgelist',
-      'G571',
-      7,
-      [[2, 1], [5, 2], [6, 5], [1, 6], [7, 1], [4, 7], [3, 4], [1, 3], [4, 5]]],
-     ['edgelist',
-      'G572',
-      7,
-      [[1, 2], [2, 3], [3, 4], [4, 5], [5, 6], [1, 6], [7, 1], [7, 2], [7, 4]]],
-     ['edgelist',
-      'G573',
-      7,
-      [[1, 2], [2, 3], [3, 4], [1, 4], [5, 2], [6, 5], [6, 4], [7, 1], [7, 5]]],
-     ['edgelist',
-      'G574',
-      7,
-      [[1, 2], [5, 1], [2, 5], [3, 2], [6, 3], [5, 6], [7, 6], [4, 7], [3, 4]]],
-     ['edgelist',
-      'G575',
-      7,
-      [[2, 1], [7, 4], [1, 5], [6, 1], [4, 6], [6, 7], [2, 3], [2, 5], [7, 3]]],
-     ['edgelist',
-      'G576',
-      7,
-      [[7, 3], [6, 7], [3, 6], [2, 3], [1, 4], [5, 1], [2, 5], [4, 2], [4, 5]]],
-     ['edgelist',
-      'G577',
-      7,
-      [[1, 2], [2, 3], [3, 4], [4, 5], [5, 6], [1, 6], [7, 2], [6, 7], [7, 1]]],
-     ['edgelist',
-      'G578',
-      7,
-      [[1, 5], [2, 1], [3, 2], [4, 3], [1, 4], [3, 5], [6, 5], [7, 6], [4, 7]]],
-     ['edgelist',
-      'G579',
-      7,
-      [[1, 2], [2, 3], [3, 4], [4, 5], [5, 6], [1, 6], [5, 3], [7, 2], [6, 7]]],
-     ['edgelist',
-      'G580',
-      7,
-      [[1, 2], [2, 3], [3, 4], [4, 5], [1, 5], [6, 4], [6, 5], [7, 2], [7, 6]]],
-     ['edgelist',
-      'G581',
-      7,
-      [[1, 2], [2, 3], [3, 4], [4, 5], [5, 6], [1, 6], [7, 1], [7, 5], [7, 3]]],
-     ['edgelist',
-      'G582',
-      7,
-      [[1, 5], [4, 1], [5, 4], [7, 2], [6, 7], [2, 6], [3, 2], [6, 3], [7, 3]]],
-     ['edgelist',
-      'G583',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [1, 5],
-       [2, 4],
-       [5, 2],
-       [3, 5],
-       [1, 4],
-       [1, 3]]],
-     ['edgelist',
-      'G584',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [1, 5],
-       [2, 4],
-       [5, 2],
-       [3, 5],
-       [1, 4],
-       [6, 5]]],
-     ['edgelist',
-      'G585',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [1, 5],
-       [2, 4],
-       [5, 2],
-       [3, 5],
-       [1, 4],
-       [6, 1]]],
-     ['edgelist',
-      'G586',
-      7,
-      [[2, 6],
-       [5, 2],
-       [1, 5],
-       [6, 1],
-       [3, 6],
-       [5, 3],
-       [4, 5],
-       [6, 4],
-       [5, 6],
-       [2, 1]]],
-     ['edgelist',
-      'G587',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [1, 5],
-       [2, 4],
-       [5, 2],
-       [6, 5],
-       [4, 6],
-       [2, 6]]],
-     ['edgelist',
-      'G588',
-      7,
-      [[2, 4],
-       [3, 2],
-       [1, 3],
-       [6, 1],
-       [5, 6],
-       [4, 5],
-       [4, 3],
-       [1, 4],
-       [5, 1],
-       [3, 5]]],
-     ['edgelist',
-      'G589',
-      7,
-      [[2, 1],
-       [5, 2],
-       [1, 5],
-       [6, 1],
-       [5, 6],
-       [4, 5],
-       [2, 4],
-       [6, 2],
-       [3, 4],
-       [2, 3]]],
-     ['edgelist',
-      'G590',
-      7,
-      [[2, 4],
-       [3, 2],
-       [1, 3],
-       [6, 1],
-       [5, 6],
-       [4, 5],
-       [4, 3],
-       [1, 4],
-       [3, 5],
-       [6, 3]]],
-     ['edgelist',
-      'G591',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [1, 5],
-       [3, 6],
-       [1, 6],
-       [3, 1],
-       [6, 2],
-       [5, 2]]],
-     ['edgelist',
-      'G592',
-      7,
-      [[5, 4],
-       [1, 5],
-       [2, 1],
-       [3, 2],
-       [4, 3],
-       [1, 6],
-       [6, 4],
-       [1, 4],
-       [2, 6],
-       [6, 3]]],
-     ['edgelist',
-      'G593',
-      7,
-      [[1, 2],
-       [3, 5],
-       [1, 3],
-       [5, 6],
-       [4, 2],
-       [4, 3],
-       [5, 2],
-       [6, 2],
-       [6, 3],
-       [6, 4]]],
-     ['edgelist',
-      'G594',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [1, 5],
-       [6, 1],
-       [6, 2],
-       [6, 3],
-       [6, 4],
-       [6, 5]]],
-     ['edgelist',
-      'G595',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [5, 6],
-       [1, 6],
-       [3, 5],
-       [1, 3],
-       [2, 4],
-       [6, 2]]],
-     ['edgelist',
-      'G596',
-      7,
-      [[1, 2],
-       [2, 3],
-       [4, 5],
-       [1, 3],
-       [4, 1],
-       [3, 5],
-       [6, 3],
-       [2, 6],
-       [5, 2],
-       [4, 6]]],
-     ['edgelist',
-      'G597',
-      7,
-      [[2, 4],
-       [3, 2],
-       [1, 3],
-       [6, 1],
-       [5, 6],
-       [4, 5],
-       [5, 2],
-       [6, 4],
-       [3, 6],
-       [2, 1]]],
-     ['edgelist',
-      'G598',
-      7,
-      [[1, 2],
-       [3, 6],
-       [1, 3],
-       [4, 1],
-       [4, 2],
-       [4, 3],
-       [3, 2],
-       [6, 2],
-       [5, 3],
-       [3, 7]]],
-     ['edgelist',
-      'G599',
-      7,
-      [[1, 2],
-       [3, 6],
-       [1, 3],
-       [4, 1],
-       [4, 2],
-       [4, 3],
-       [3, 2],
-       [6, 2],
-       [5, 3],
-       [2, 7]]],
-     ['edgelist',
-      'G600',
-      7,
-      [[1, 2],
-       [3, 6],
-       [1, 3],
-       [4, 1],
-       [4, 2],
-       [4, 3],
-       [3, 2],
-       [6, 2],
-       [1, 5],
-       [2, 7]]],
-     ['edgelist',
-      'G601',
-      7,
-      [[1, 2],
-       [3, 6],
-       [1, 3],
-       [4, 1],
-       [4, 2],
-       [4, 3],
-       [3, 2],
-       [6, 2],
-       [1, 5],
-       [1, 7]]],
-     ['edgelist',
-      'G602',
-      7,
-      [[1, 2],
-       [3, 6],
-       [1, 3],
-       [4, 1],
-       [4, 2],
-       [4, 3],
-       [3, 2],
-       [6, 2],
-       [1, 5],
-       [4, 7]]],
-     ['edgelist',
-      'G603',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [1, 4],
-       [5, 1],
-       [5, 2],
-       [5, 3],
-       [5, 4],
-       [5, 6],
-       [5, 7]]],
-     ['edgelist',
-      'G604',
-      7,
-      [[3, 1],
-       [5, 2],
-       [2, 3],
-       [6, 5],
-       [3, 6],
-       [4, 2],
-       [6, 4],
-       [4, 3],
-       [5, 4],
-       [4, 7]]],
-     ['edgelist',
-      'G605',
-      7,
-      [[1, 2],
-       [3, 6],
-       [1, 3],
-       [4, 1],
-       [4, 2],
-       [4, 3],
-       [3, 2],
-       [6, 2],
-       [5, 6],
-       [3, 7]]],
-     ['edgelist',
-      'G606',
-      7,
-      [[3, 1],
-       [5, 2],
-       [2, 3],
-       [6, 5],
-       [3, 6],
-       [4, 2],
-       [6, 4],
-       [4, 3],
-       [5, 4],
-       [3, 7]]],
-     ['edgelist',
-      'G607',
-      7,
-      [[3, 4],
-       [2, 3],
-       [5, 2],
-       [6, 5],
-       [3, 6],
-       [1, 3],
-       [5, 1],
-       [1, 2],
-       [6, 1],
-       [7, 6]]],
-     ['edgelist',
-      'G608',
-      7,
-      [[1, 2],
-       [3, 6],
-       [1, 3],
-       [4, 1],
-       [4, 2],
-       [4, 3],
-       [3, 2],
-       [6, 2],
-       [1, 5],
-       [6, 7]]],
-     ['edgelist',
-      'G609',
-      7,
-      [[3, 1],
-       [5, 2],
-       [2, 3],
-       [6, 5],
-       [3, 6],
-       [4, 2],
-       [6, 4],
-       [4, 3],
-       [5, 4],
-       [5, 7]]],
-     ['edgelist',
-      'G610',
-      7,
-      [[1, 2],
-       [3, 6],
-       [1, 3],
-       [4, 1],
-       [4, 2],
-       [4, 3],
-       [3, 2],
-       [6, 2],
-       [5, 6],
-       [7, 6]]],
-     ['edgelist',
-      'G611',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [1, 5],
-       [2, 4],
-       [5, 2],
-       [3, 5],
-       [1, 4],
-       [6, 7]]],
-     ['edgelist',
-      'G612',
-      7,
-      [[2, 6],
-       [5, 2],
-       [1, 5],
-       [6, 1],
-       [3, 6],
-       [5, 3],
-       [4, 5],
-       [6, 4],
-       [5, 6],
-       [7, 6]]],
-     ['edgelist',
-      'G613',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [1, 5],
-       [3, 6],
-       [1, 6],
-       [3, 1],
-       [4, 1],
-       [1, 7]]],
-     ['edgelist',
-      'G614',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [1, 5],
-       [3, 6],
-       [1, 6],
-       [3, 1],
-       [4, 1],
-       [3, 7]]],
-     ['edgelist',
-      'G615',
-      7,
-      [[2, 6],
-       [5, 2],
-       [1, 5],
-       [6, 1],
-       [3, 6],
-       [5, 3],
-       [4, 5],
-       [6, 4],
-       [5, 6],
-       [2, 7]]],
-     ['edgelist',
-      'G616',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [1, 5],
-       [3, 6],
-       [1, 6],
-       [3, 1],
-       [4, 1],
-       [4, 7]]],
-     ['edgelist',
-      'G617',
-      7,
-      [[2, 4],
-       [3, 2],
-       [1, 3],
-       [6, 1],
-       [5, 6],
-       [4, 5],
-       [1, 5],
-       [2, 1],
-       [5, 2],
-       [1, 7]]],
-     ['edgelist',
-      'G618',
-      7,
-      [[2, 4],
-       [3, 2],
-       [1, 3],
-       [6, 1],
-       [5, 6],
-       [4, 5],
-       [5, 2],
-       [2, 1],
-       [6, 2],
-       [2, 7]]],
-     ['edgelist',
-      'G619',
-      7,
-      [[1, 2],
-       [2, 3],
-       [1, 3],
-       [4, 1],
-       [4, 2],
-       [4, 3],
-       [6, 5],
-       [5, 1],
-       [6, 1],
-       [1, 7]]],
-     ['edgelist',
-      'G620',
-      7,
-      [[5, 4],
-       [1, 5],
-       [2, 1],
-       [3, 2],
-       [4, 3],
-       [1, 6],
-       [6, 4],
-       [1, 4],
-       [2, 6],
-       [4, 7]]],
-     ['edgelist',
-      'G621',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [1, 5],
-       [3, 6],
-       [1, 6],
-       [3, 1],
-       [4, 1],
-       [6, 7]]],
-     ['edgelist',
-      'G622',
-      7,
-      [[2, 4],
-       [3, 2],
-       [1, 3],
-       [6, 1],
-       [5, 6],
-       [4, 5],
-       [4, 3],
-       [1, 4],
-       [5, 1],
-       [4, 7]]],
-     ['edgelist',
-      'G623',
-      7,
-      [[2, 4],
-       [3, 2],
-       [1, 3],
-       [6, 1],
-       [5, 6],
-       [4, 5],
-       [5, 2],
-       [2, 1],
-       [6, 2],
-       [1, 7]]],
-     ['edgelist',
-      'G624',
-      7,
-      [[2, 6],
-       [5, 2],
-       [1, 5],
-       [6, 1],
-       [3, 6],
-       [5, 3],
-       [3, 1],
-       [6, 4],
-       [3, 4],
-       [7, 3]]],
-     ['edgelist',
-      'G625',
-      7,
-      [[1, 2],
-       [3, 6],
-       [1, 3],
-       [4, 1],
-       [4, 2],
-       [4, 3],
-       [3, 2],
-       [6, 2],
-       [7, 5],
-       [7, 3]]],
-     ['edgelist',
-      'G626',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [1, 5],
-       [3, 6],
-       [1, 6],
-       [3, 1],
-       [6, 2],
-       [3, 7]]],
-     ['edgelist',
-      'G627',
-      7,
-      [[2, 4],
-       [3, 2],
-       [1, 3],
-       [6, 1],
-       [5, 6],
-       [4, 5],
-       [5, 2],
-       [2, 1],
-       [6, 2],
-       [6, 7]]],
-     ['edgelist',
-      'G628',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [1, 5],
-       [3, 6],
-       [1, 6],
-       [3, 1],
-       [4, 1],
-       [5, 7]]],
-     ['edgelist',
-      'G629',
-      7,
-      [[2, 4],
-       [3, 2],
-       [1, 3],
-       [6, 1],
-       [5, 6],
-       [4, 5],
-       [4, 3],
-       [1, 4],
-       [3, 5],
-       [4, 7]]],
-     ['edgelist',
-      'G630',
-      7,
-      [[1, 2],
-       [2, 3],
-       [1, 3],
-       [4, 1],
-       [4, 2],
-       [4, 3],
-       [6, 5],
-       [5, 1],
-       [6, 1],
-       [3, 7]]],
-     ['edgelist',
-      'G631',
-      7,
-      [[2, 6],
-       [5, 2],
-       [1, 5],
-       [6, 1],
-       [3, 6],
-       [5, 3],
-       [4, 5],
-       [6, 4],
-       [3, 1],
-       [6, 7]]],
-     ['edgelist',
-      'G632',
-      7,
-      [[2, 4],
-       [3, 2],
-       [1, 3],
-       [6, 1],
-       [5, 6],
-       [4, 5],
-       [4, 3],
-       [1, 4],
-       [5, 1],
-       [3, 7]]],
-     ['edgelist',
-      'G633',
-      7,
-      [[2, 6],
-       [5, 2],
-       [1, 5],
-       [6, 1],
-       [3, 6],
-       [5, 3],
-       [3, 1],
-       [6, 4],
-       [3, 4],
-       [1, 7]]],
-     ['edgelist',
-      'G634',
-      7,
-      [[5, 4],
-       [1, 5],
-       [2, 1],
-       [3, 2],
-       [4, 3],
-       [1, 6],
-       [6, 4],
-       [1, 4],
-       [2, 6],
-       [2, 7]]],
-     ['edgelist',
-      'G635',
-      7,
-      [[2, 4],
-       [3, 2],
-       [1, 3],
-       [6, 1],
-       [5, 6],
-       [4, 5],
-       [4, 3],
-       [1, 4],
-       [3, 5],
-       [5, 7]]],
-     ['edgelist',
-      'G636',
-      7,
-      [[1, 2],
-       [3, 6],
-       [1, 3],
-       [4, 1],
-       [4, 2],
-       [4, 3],
-       [3, 2],
-       [6, 2],
-       [7, 5],
-       [7, 1]]],
-     ['edgelist',
-      'G637',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [1, 5],
-       [3, 6],
-       [1, 6],
-       [3, 1],
-       [6, 2],
-       [6, 7]]],
-     ['edgelist',
-      'G638',
-      7,
-      [[2, 4],
-       [3, 2],
-       [1, 3],
-       [6, 1],
-       [5, 6],
-       [4, 5],
-       [1, 5],
-       [2, 1],
-       [5, 2],
-       [6, 7]]],
-     ['edgelist',
-      'G639',
-      7,
-      [[2, 6],
-       [5, 2],
-       [1, 5],
-       [6, 1],
-       [3, 6],
-       [5, 3],
-       [4, 5],
-       [6, 4],
-       [3, 1],
-       [1, 7]]],
-     ['edgelist',
-      'G640',
-      7,
-      [[2, 4],
-       [3, 2],
-       [1, 3],
-       [6, 1],
-       [5, 6],
-       [4, 5],
-       [5, 2],
-       [2, 1],
-       [6, 2],
-       [3, 7]]],
-     ['edgelist',
-      'G641',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [5, 6],
-       [1, 6],
-       [1, 4],
-       [5, 3],
-       [6, 3],
-       [3, 7]]],
-     ['edgelist',
-      'G642',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [1, 5],
-       [6, 1],
-       [6, 5],
-       [6, 3],
-       [6, 4],
-       [6, 7]]],
-     ['edgelist',
-      'G643',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [1, 5],
-       [4, 1],
-       [6, 3],
-       [6, 1],
-       [6, 2],
-       [1, 7]]],
-     ['edgelist',
-      'G644',
-      7,
-      [[1, 2],
-       [2, 3],
-       [1, 3],
-       [4, 1],
-       [4, 2],
-       [4, 3],
-       [6, 5],
-       [5, 1],
-       [6, 1],
-       [6, 7]]],
-     ['edgelist',
-      'G645',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [1, 4],
-       [5, 1],
-       [5, 2],
-       [5, 3],
-       [5, 4],
-       [7, 6],
-       [7, 5]]],
-     ['edgelist',
-      'G646',
-      7,
-      [[2, 4],
-       [3, 2],
-       [1, 3],
-       [6, 1],
-       [5, 6],
-       [4, 5],
-       [4, 3],
-       [1, 4],
-       [5, 1],
-       [2, 7]]],
-     ['edgelist',
-      'G647',
-      7,
-      [[5, 4],
-       [1, 5],
-       [2, 1],
-       [3, 2],
-       [4, 3],
-       [1, 6],
-       [6, 4],
-       [1, 4],
-       [2, 6],
-       [5, 7]]],
-     ['edgelist',
-      'G648',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [1, 5],
-       [6, 1],
-       [6, 5],
-       [6, 3],
-       [6, 4],
-       [5, 7]]],
-     ['edgelist',
-      'G649',
-      7,
-      [[5, 4],
-       [1, 5],
-       [2, 1],
-       [3, 2],
-       [4, 3],
-       [1, 6],
-       [6, 4],
-       [1, 4],
-       [2, 6],
-       [3, 7]]],
-     ['edgelist',
-      'G650',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [1, 5],
-       [6, 1],
-       [6, 5],
-       [6, 3],
-       [6, 4],
-       [1, 7]]],
-     ['edgelist',
-      'G651',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [5, 6],
-       [1, 6],
-       [1, 4],
-       [5, 3],
-       [6, 3],
-       [6, 7]]],
-     ['edgelist',
-      'G652',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [1, 5],
-       [4, 1],
-       [6, 3],
-       [6, 1],
-       [6, 2],
-       [2, 7]]],
-     ['edgelist',
-      'G653',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [1, 5],
-       [3, 6],
-       [1, 6],
-       [3, 1],
-       [6, 2],
-       [4, 7]]],
-     ['edgelist',
-      'G654',
-      7,
-      [[5, 4],
-       [5, 2],
-       [2, 3],
-       [6, 5],
-       [3, 6],
-       [4, 2],
-       [6, 4],
-       [4, 3],
-       [7, 1],
-       [7, 3]]],
-     ['edgelist',
-      'G655',
-      7,
-      [[2, 1],
-       [3, 2],
-       [4, 3],
-       [5, 4],
-       [6, 5],
-       [2, 6],
-       [7, 2],
-       [5, 7],
-       [3, 7],
-       [6, 3]]],
-     ['edgelist',
-      'G656',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [5, 6],
-       [1, 6],
-       [1, 4],
-       [5, 3],
-       [6, 3],
-       [1, 7]]],
-     ['edgelist',
-      'G657',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [1, 5],
-       [4, 1],
-       [6, 3],
-       [6, 1],
-       [6, 2],
-       [4, 7]]],
-     ['edgelist',
-      'G658',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [1, 5],
-       [4, 1],
-       [6, 3],
-       [6, 1],
-       [6, 2],
-       [3, 7]]],
-     ['edgelist',
-      'G659',
-      7,
-      [[1, 2],
-       [3, 6],
-       [1, 3],
-       [4, 1],
-       [4, 2],
-       [4, 3],
-       [3, 2],
-       [6, 2],
-       [7, 6],
-       [7, 5]]],
-     ['edgelist',
-      'G660',
-      7,
-      [[2, 4],
-       [3, 2],
-       [1, 3],
-       [6, 1],
-       [5, 6],
-       [4, 5],
-       [4, 3],
-       [1, 4],
-       [3, 5],
-       [2, 7]]],
-     ['edgelist',
-      'G661',
-      7,
-      [[2, 4],
-       [3, 2],
-       [1, 3],
-       [6, 1],
-       [5, 6],
-       [4, 5],
-       [4, 3],
-       [1, 4],
-       [3, 5],
-       [6, 7]]],
-     ['edgelist',
-      'G662',
-      7,
-      [[2, 6],
-       [5, 2],
-       [1, 5],
-       [6, 1],
-       [3, 6],
-       [5, 3],
-       [4, 5],
-       [6, 4],
-       [3, 1],
-       [2, 7]]],
-     ['edgelist',
-      'G663',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [1, 5],
-       [6, 1],
-       [6, 5],
-       [6, 3],
-       [6, 4],
-       [2, 7]]],
-     ['edgelist',
-      'G664',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [5, 6],
-       [1, 6],
-       [1, 4],
-       [5, 3],
-       [6, 3],
-       [2, 7]]],
-     ['edgelist',
-      'G665',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [1, 5],
-       [4, 1],
-       [6, 3],
-       [6, 1],
-       [6, 2],
-       [5, 7]]],
-     ['edgelist',
-      'G666',
-      7,
-      [[3, 4],
-       [1, 3],
-       [4, 1],
-       [5, 4],
-       [2, 5],
-       [6, 2],
-       [5, 6],
-       [2, 1],
-       [6, 3],
-       [5, 7]]],
-     ['edgelist',
-      'G667',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [5, 6],
-       [1, 6],
-       [1, 4],
-       [6, 3],
-       [5, 2],
-       [1, 7]]],
-     ['edgelist',
-      'G668',
-      7,
-      [[5, 1],
-       [2, 5],
-       [4, 2],
-       [3, 4],
-       [2, 3],
-       [7, 2],
-       [1, 7],
-       [6, 1],
-       [2, 6],
-       [1, 2]]],
-     ['edgelist',
-      'G669',
-      7,
-      [[4, 3],
-       [7, 4],
-       [6, 7],
-       [1, 6],
-       [3, 1],
-       [6, 3],
-       [2, 6],
-       [3, 2],
-       [5, 3],
-       [6, 5]]],
-     ['edgelist',
-      'G670',
-      7,
-      [[3, 1],
-       [2, 3],
-       [4, 2],
-       [1, 4],
-       [7, 1],
-       [2, 7],
-       [6, 2],
-       [1, 6],
-       [5, 1],
-       [2, 5]]],
-     ['edgelist',
-      'G671',
-      7,
-      [[7, 5],
-       [2, 3],
-       [7, 6],
-       [4, 5],
-       [5, 6],
-       [1, 6],
-       [7, 1],
-       [7, 2],
-       [7, 3],
-       [7, 4]]],
-     ['edgelist',
-      'G672',
-      7,
-      [[1, 2],
-       [7, 6],
-       [3, 4],
-       [4, 5],
-       [7, 5],
-       [1, 6],
-       [7, 1],
-       [7, 2],
-       [7, 3],
-       [7, 4]]],
-     ['edgelist',
-      'G673',
-      7,
-      [[1, 2],
-       [3, 1],
-       [4, 3],
-       [5, 4],
-       [2, 5],
-       [3, 2],
-       [1, 6],
-       [6, 3],
-       [7, 2],
-       [3, 7]]],
-     ['edgelist',
-      'G674',
-      7,
-      [[1, 2],
-       [3, 1],
-       [4, 3],
-       [5, 4],
-       [2, 5],
-       [3, 2],
-       [6, 1],
-       [6, 3],
-       [7, 3],
-       [1, 7]]],
-     ['edgelist',
-      'G675',
-      7,
-      [[7, 5],
-       [2, 3],
-       [7, 6],
-       [4, 5],
-       [5, 6],
-       [1, 6],
-       [7, 4],
-       [7, 2],
-       [7, 3],
-       [1, 5]]],
-     ['edgelist',
-      'G676',
-      7,
-      [[2, 1],
-       [3, 2],
-       [1, 3],
-       [4, 3],
-       [5, 4],
-       [3, 5],
-       [6, 3],
-       [5, 6],
-       [7, 5],
-       [2, 7]]],
-     ['edgelist',
-      'G677',
-      7,
-      [[1, 2],
-       [1, 4],
-       [1, 5],
-       [1, 6],
-       [1, 7],
-       [2, 3],
-       [2, 4],
-       [2, 5],
-       [3, 6],
-       [3, 7]]],
-     ['edgelist',
-      'G678',
-      7,
-      [[1, 3],
-       [6, 1],
-       [5, 6],
-       [3, 5],
-       [2, 3],
-       [6, 2],
-       [7, 6],
-       [4, 7],
-       [3, 4],
-       [3, 7]]],
-     ['edgelist',
-      'G679',
-      7,
-      [[1, 2],
-       [3, 1],
-       [4, 3],
-       [5, 4],
-       [2, 5],
-       [3, 2],
-       [6, 2],
-       [1, 6],
-       [7, 1],
-       [3, 7]]],
-     ['edgelist',
-      'G680',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [5, 6],
-       [1, 6],
-       [7, 3],
-       [7, 5],
-       [1, 3],
-       [5, 1]]],
-     ['edgelist',
-      'G681',
-      7,
-      [[1, 5],
-       [4, 1],
-       [3, 4],
-       [6, 3],
-       [7, 6],
-       [3, 7],
-       [5, 3],
-       [2, 5],
-       [4, 2],
-       [5, 4]]],
-     ['edgelist',
-      'G682',
-      7,
-      [[2, 7],
-       [3, 2],
-       [1, 3],
-       [2, 1],
-       [5, 2],
-       [4, 5],
-       [3, 4],
-       [6, 7],
-       [5, 6],
-       [4, 2]]],
-     ['edgelist',
-      'G683',
-      7,
-      [[7, 6],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [5, 6],
-       [1, 6],
-       [7, 1],
-       [7, 2],
-       [7, 3],
-       [7, 5]]],
-     ['edgelist',
-      'G684',
-      7,
-      [[1, 2],
-       [7, 6],
-       [3, 4],
-       [4, 5],
-       [7, 5],
-       [1, 6],
-       [7, 1],
-       [7, 2],
-       [7, 3],
-       [6, 4]]],
-     ['edgelist',
-      'G685',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [6, 5],
-       [1, 5],
-       [6, 1],
-       [6, 4],
-       [6, 3],
-       [7, 6],
-       [7, 2]]],
-     ['edgelist',
-      'G686',
-      7,
-      [[1, 4],
-       [3, 1],
-       [2, 3],
-       [4, 2],
-       [5, 4],
-       [3, 5],
-       [1, 5],
-       [7, 1],
-       [6, 7],
-       [1, 6]]],
-     ['edgelist',
-      'G687',
-      7,
-      [[1, 4],
-       [3, 1],
-       [2, 3],
-       [4, 2],
-       [5, 4],
-       [1, 6],
-       [1, 5],
-       [7, 1],
-       [6, 7],
-       [2, 5]]],
-     ['edgelist',
-      'G688',
-      7,
-      [[1, 2],
-       [7, 6],
-       [3, 4],
-       [4, 5],
-       [7, 5],
-       [1, 6],
-       [7, 1],
-       [7, 2],
-       [7, 3],
-       [5, 3]]],
-     ['edgelist',
-      'G689',
-      7,
-      [[2, 3],
-       [6, 2],
-       [7, 6],
-       [3, 7],
-       [2, 7],
-       [6, 3],
-       [5, 2],
-       [1, 5],
-       [4, 1],
-       [2, 4]]],
-     ['edgelist',
-      'G690',
-      7,
-      [[5, 3],
-       [7, 3],
-       [6, 4],
-       [5, 2],
-       [3, 1],
-       [7, 4],
-       [6, 3],
-       [1, 2],
-       [1, 5],
-       [7, 1]]],
-     ['edgelist',
-      'G691',
-      7,
-      [[5, 3],
-       [4, 7],
-       [6, 4],
-       [6, 2],
-       [3, 1],
-       [7, 1],
-       [6, 3],
-       [2, 5],
-       [1, 5],
-       [6, 5]]],
-     ['edgelist',
-      'G692',
-      7,
-      [[5, 1],
-       [6, 5],
-       [5, 2],
-       [3, 2],
-       [4, 3],
-       [1, 4],
-       [4, 5],
-       [6, 4],
-       [7, 2],
-       [7, 6]]],
-     ['edgelist',
-      'G693',
-      7,
-      [[1, 5],
-       [2, 1],
-       [3, 2],
-       [5, 3],
-       [4, 5],
-       [6, 4],
-       [5, 6],
-       [6, 3],
-       [7, 4],
-       [3, 7]]],
-     ['edgelist',
-      'G694',
-      7,
-      [[2, 7],
-       [3, 2],
-       [1, 3],
-       [2, 1],
-       [5, 2],
-       [4, 5],
-       [3, 4],
-       [6, 7],
-       [5, 6],
-       [5, 7]]],
-     ['edgelist',
-      'G695',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [5, 6],
-       [1, 6],
-       [7, 4],
-       [7, 2],
-       [7, 6],
-       [6, 2]]],
-     ['edgelist',
-      'G696',
-      7,
-      [[2, 1],
-       [5, 2],
-       [1, 5],
-       [3, 1],
-       [4, 3],
-       [7, 4],
-       [6, 7],
-       [1, 6],
-       [6, 3],
-       [7, 3]]],
-     ['edgelist',
-      'G697',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [1, 5],
-       [6, 4],
-       [6, 2],
-       [6, 5],
-       [7, 2],
-       [6, 7]]],
-     ['edgelist',
-      'G698',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [5, 6],
-       [1, 6],
-       [3, 5],
-       [5, 2],
-       [7, 2],
-       [7, 6]]],
-     ['edgelist',
-      'G699',
-      7,
-      [[1, 2],
-       [3, 1],
-       [4, 3],
-       [5, 4],
-       [2, 5],
-       [3, 2],
-       [6, 4],
-       [3, 6],
-       [7, 2],
-       [5, 7]]],
-     ['edgelist',
-      'G700',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [1, 5],
-       [6, 3],
-       [6, 5],
-       [7, 6],
-       [7, 1],
-       [1, 3]]],
-     ['edgelist',
-      'G701',
-      7,
-      [[3, 1],
-       [6, 3],
-       [2, 6],
-       [1, 2],
-       [4, 1],
-       [6, 4],
-       [7, 6],
-       [5, 7],
-       [1, 5],
-       [5, 4]]],
-     ['edgelist',
-      'G702',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [5, 6],
-       [1, 6],
-       [5, 3],
-       [2, 6],
-       [7, 3],
-       [7, 6]]],
-     ['edgelist',
-      'G703',
-      7,
-      [[6, 1],
-       [7, 6],
-       [3, 7],
-       [4, 3],
-       [1, 4],
-       [5, 1],
-       [3, 5],
-       [5, 4],
-       [2, 5],
-       [4, 2]]],
-     ['edgelist',
-      'G704',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [1, 5],
-       [7, 4],
-       [6, 7],
-       [4, 6],
-       [5, 6],
-       [5, 7]]],
-     ['edgelist',
-      'G705',
-      7,
-      [[6, 3],
-       [3, 2],
-       [4, 3],
-       [5, 4],
-       [2, 5],
-       [6, 1],
-       [7, 2],
-       [7, 1],
-       [2, 6],
-       [3, 7]]],
-     ['edgelist',
-      'G706',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [5, 6],
-       [1, 6],
-       [7, 3],
-       [7, 5],
-       [5, 3],
-       [6, 2]]],
-     ['edgelist',
-      'G707',
-      7,
-      [[5, 3],
-       [3, 4],
-       [5, 2],
-       [1, 2],
-       [4, 1],
-       [7, 5],
-       [1, 7],
-       [6, 1],
-       [5, 6],
-       [2, 6]]],
-     ['edgelist',
-      'G708',
-      7,
-      [[3, 2],
-       [6, 3],
-       [4, 6],
-       [1, 4],
-       [5, 1],
-       [7, 5],
-       [4, 7],
-       [2, 4],
-       [5, 2],
-       [6, 5]]],
-     ['edgelist',
-      'G709',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [1, 5],
-       [6, 1],
-       [6, 2],
-       [6, 3],
-       [7, 6],
-       [7, 4]]],
-     ['edgelist',
-      'G710',
-      7,
-      [[1, 2],
-       [5, 1],
-       [2, 5],
-       [3, 2],
-       [6, 3],
-       [5, 6],
-       [7, 6],
-       [4, 7],
-       [3, 4],
-       [6, 4]]],
-     ['edgelist',
-      'G711',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [5, 6],
-       [1, 6],
-       [7, 6],
-       [7, 2],
-       [7, 3],
-       [5, 3]]],
-     ['edgelist',
-      'G712',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [1, 5],
-       [6, 1],
-       [6, 4],
-       [6, 3],
-       [7, 6],
-       [7, 5]]],
-     ['edgelist',
-      'G713',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [5, 6],
-       [1, 6],
-       [7, 1],
-       [7, 4],
-       [7, 3],
-       [5, 1]]],
-     ['edgelist',
-      'G714',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [5, 6],
-       [1, 6],
-       [7, 1],
-       [7, 5],
-       [7, 6],
-       [7, 4]]],
-     ['edgelist',
-      'G715',
-      7,
-      [[1, 6],
-       [7, 1],
-       [2, 7],
-       [1, 2],
-       [2, 6],
-       [3, 2],
-       [4, 3],
-       [5, 4],
-       [7, 5],
-       [5, 6]]],
-     ['edgelist',
-      'G716',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [5, 6],
-       [1, 6],
-       [7, 1],
-       [7, 6],
-       [7, 5],
-       [3, 1]]],
-     ['edgelist',
-      'G717',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [5, 6],
-       [1, 6],
-       [7, 1],
-       [7, 2],
-       [7, 6],
-       [7, 4]]],
-     ['edgelist',
-      'G718',
-      7,
-      [[3, 2],
-       [3, 1],
-       [4, 3],
-       [5, 4],
-       [2, 5],
-       [6, 2],
-       [6, 1],
-       [7, 1],
-       [2, 7],
-       [7, 6]]],
-     ['edgelist',
-      'G719',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [1, 5],
-       [6, 4],
-       [6, 2],
-       [7, 2],
-       [7, 5],
-       [7, 6]]],
-     ['edgelist',
-      'G720',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [5, 6],
-       [1, 6],
-       [6, 3],
-       [5, 2],
-       [7, 1],
-       [6, 7]]],
-     ['edgelist',
-      'G721',
-      7,
-      [[4, 2],
-       [1, 4],
-       [6, 1],
-       [2, 6],
-       [3, 2],
-       [7, 3],
-       [1, 7],
-       [1, 5],
-       [5, 3],
-       [5, 7]]],
-     ['edgelist',
-      'G722',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [5, 6],
-       [1, 6],
-       [7, 5],
-       [7, 2],
-       [7, 3],
-       [7, 6]]],
-     ['edgelist',
-      'G723',
-      7,
-      [[1, 4],
-       [3, 1],
-       [2, 3],
-       [4, 2],
-       [5, 4],
-       [3, 5],
-       [6, 5],
-       [6, 1],
-       [7, 5],
-       [7, 2]]],
-     ['edgelist',
-      'G724',
-      7,
-      [[1, 2],
-       [7, 6],
-       [3, 4],
-       [4, 5],
-       [7, 5],
-       [1, 6],
-       [7, 3],
-       [7, 2],
-       [5, 3],
-       [6, 2]]],
-     ['edgelist',
-      'G725',
-      7,
-      [[6, 3],
-       [7, 6],
-       [3, 7],
-       [5, 3],
-       [1, 5],
-       [4, 1],
-       [3, 4],
-       [2, 1],
-       [2, 4],
-       [5, 2]]],
-     ['edgelist',
-      'G726',
-      7,
-      [[4, 5],
-       [2, 4],
-       [5, 2],
-       [1, 5],
-       [4, 1],
-       [2, 1],
-       [3, 2],
-       [6, 3],
-       [7, 6],
-       [3, 7]]],
-     ['edgelist',
-      'G727',
-      7,
-      [[6, 7],
-       [3, 6],
-       [7, 3],
-       [4, 7],
-       [1, 4],
-       [5, 1],
-       [6, 5],
-       [2, 5],
-       [4, 2],
-       [3, 2]]],
-     ['edgelist',
-      'G728',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [5, 6],
-       [1, 6],
-       [7, 1],
-       [7, 2],
-       [7, 6],
-       [5, 3]]],
-     ['edgelist',
-      'G729',
-      7,
-      [[2, 1],
-       [3, 2],
-       [4, 3],
-       [1, 4],
-       [6, 1],
-       [2, 6],
-       [5, 6],
-       [7, 5],
-       [4, 7],
-       [3, 7]]],
-     ['edgelist',
-      'G730',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [5, 6],
-       [1, 6],
-       [5, 2],
-       [3, 6],
-       [7, 1],
-       [4, 7]]],
-     ['edgelist',
-      'G731',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [1, 5],
-       [2, 4],
-       [5, 2],
-       [3, 5],
-       [1, 4],
-       [1, 3],
-       [2, 6]]],
-     ['edgelist',
-      'G732',
-      7,
-      [[1, 2],
-       [3, 5],
-       [1, 3],
-       [3, 2],
-       [4, 2],
-       [4, 3],
-       [5, 2],
-       [6, 2],
-       [6, 3],
-       [6, 4],
-       [1, 4]]],
-     ['edgelist',
-      'G733',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [1, 5],
-       [2, 4],
-       [5, 2],
-       [3, 5],
-       [1, 4],
-       [6, 1],
-       [5, 6]]],
-     ['edgelist',
-      'G734',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [5, 6],
-       [1, 5],
-       [2, 4],
-       [5, 2],
-       [3, 5],
-       [1, 4],
-       [6, 4],
-       [1, 3]]],
-     ['edgelist',
-      'G735',
-      7,
-      [[2, 4],
-       [3, 2],
-       [1, 3],
-       [6, 1],
-       [5, 6],
-       [4, 5],
-       [6, 4],
-       [3, 6],
-       [2, 1],
-       [5, 2],
-       [6, 2]]],
-     ['edgelist',
-      'G736',
-      7,
-      [[2, 5],
-       [2, 6],
-       [2, 7],
-       [3, 4],
-       [3, 6],
-       [3, 7],
-       [4, 5],
-       [4, 7],
-       [5, 6],
-       [5, 7],
-       [6, 7]]],
-     ['edgelist',
-      'G737',
-      7,
-      [[4, 7],
-       [2, 4],
-       [3, 2],
-       [1, 3],
-       [6, 1],
-       [7, 6],
-       [3, 7],
-       [6, 2],
-       [1, 4],
-       [2, 7],
-       [1, 2]]],
-     ['edgelist',
-      'G738',
-      7,
-      [[2, 6],
-       [5, 2],
-       [1, 5],
-       [6, 1],
-       [3, 6],
-       [5, 3],
-       [4, 5],
-       [6, 4],
-       [1, 2],
-       [3, 1],
-       [4, 3]]],
-     ['edgelist',
-      'G739',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [5, 6],
-       [1, 6],
-       [3, 5],
-       [6, 3],
-       [2, 6],
-       [2, 5],
-       [1, 4]]],
-     ['edgelist',
-      'G740',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [1, 5],
-       [2, 4],
-       [5, 2],
-       [3, 5],
-       [1, 4],
-       [6, 5],
-       [7, 5]]],
-     ['edgelist',
-      'G741',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [1, 5],
-       [2, 4],
-       [5, 2],
-       [3, 5],
-       [1, 4],
-       [6, 4],
-       [7, 5]]],
-     ['edgelist',
-      'G742',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [1, 5],
-       [2, 4],
-       [5, 2],
-       [3, 5],
-       [1, 4],
-       [6, 3],
-       [5, 7]]],
-     ['edgelist',
-      'G743',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [1, 5],
-       [2, 4],
-       [5, 2],
-       [3, 5],
-       [1, 4],
-       [3, 6],
-       [7, 3]]],
-     ['edgelist',
-      'G744',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [1, 5],
-       [2, 4],
-       [5, 2],
-       [3, 5],
-       [1, 4],
-       [6, 3],
-       [1, 7]]],
-     ['edgelist',
-      'G745',
-      7,
-      [[1, 2],
-       [1, 3],
-       [1, 4],
-       [1, 5],
-       [2, 3],
-       [2, 4],
-       [2, 5],
-       [3, 4],
-       [3, 5],
-       [4, 5],
-       [7, 6]]],
-     ['edgelist',
-      'G746',
-      7,
-      [[2, 6],
-       [5, 2],
-       [1, 5],
-       [6, 1],
-       [3, 6],
-       [5, 3],
-       [4, 5],
-       [6, 4],
-       [5, 6],
-       [2, 1],
-       [5, 7]]],
-     ['edgelist',
-      'G747',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [1, 5],
-       [2, 4],
-       [5, 2],
-       [6, 5],
-       [4, 6],
-       [2, 6],
-       [2, 7]]],
-     ['edgelist',
-      'G748',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [1, 5],
-       [2, 4],
-       [5, 2],
-       [6, 5],
-       [4, 6],
-       [2, 6],
-       [7, 5]]],
-     ['edgelist',
-      'G749',
-      7,
-      [[2, 6],
-       [5, 2],
-       [1, 5],
-       [6, 1],
-       [3, 6],
-       [5, 3],
-       [4, 5],
-       [6, 4],
-       [5, 6],
-       [2, 1],
-       [2, 7]]],
-     ['edgelist',
-      'G750',
-      7,
-      [[2, 4],
-       [3, 2],
-       [1, 3],
-       [6, 1],
-       [5, 6],
-       [4, 5],
-       [4, 3],
-       [1, 4],
-       [5, 1],
-       [3, 5],
-       [3, 7]]],
-     ['edgelist',
-      'G751',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [1, 5],
-       [2, 4],
-       [5, 2],
-       [6, 5],
-       [4, 6],
-       [2, 6],
-       [6, 7]]],
-     ['edgelist',
-      'G752',
-      7,
-      [[2, 4],
-       [3, 2],
-       [1, 3],
-       [6, 1],
-       [5, 6],
-       [4, 5],
-       [4, 3],
-       [1, 4],
-       [3, 5],
-       [6, 3],
-       [3, 7]]],
-     ['edgelist',
-      'G753',
-      7,
-      [[2, 1],
-       [5, 2],
-       [1, 5],
-       [6, 1],
-       [5, 6],
-       [4, 5],
-       [2, 4],
-       [6, 2],
-       [3, 4],
-       [2, 3],
-       [7, 2]]],
-     ['edgelist',
-      'G754',
-      7,
-      [[2, 4],
-       [3, 2],
-       [1, 3],
-       [6, 1],
-       [5, 6],
-       [4, 5],
-       [4, 3],
-       [1, 4],
-       [3, 5],
-       [6, 3],
-       [4, 7]]],
-     ['edgelist',
-      'G755',
-      7,
-      [[2, 1],
-       [5, 2],
-       [1, 5],
-       [6, 1],
-       [5, 6],
-       [4, 5],
-       [2, 4],
-       [6, 2],
-       [3, 4],
-       [2, 3],
-       [7, 5]]],
-     ['edgelist',
-      'G756',
-      7,
-      [[1, 5],
-       [2, 6],
-       [2, 7],
-       [3, 4],
-       [3, 6],
-       [3, 7],
-       [4, 6],
-       [4, 7],
-       [5, 6],
-       [5, 7],
-       [6, 7]]],
-     ['edgelist',
-      'G757',
-      7,
-      [[5, 4],
-       [1, 5],
-       [2, 1],
-       [3, 2],
-       [4, 3],
-       [1, 6],
-       [6, 4],
-       [1, 4],
-       [2, 6],
-       [6, 3],
-       [1, 7]]],
-     ['edgelist',
-      'G758',
-      7,
-      [[2, 4],
-       [3, 2],
-       [1, 3],
-       [6, 1],
-       [5, 6],
-       [4, 5],
-       [4, 3],
-       [1, 4],
-       [3, 5],
-       [6, 3],
-       [1, 7]]],
-     ['edgelist',
-      'G759',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [1, 5],
-       [3, 6],
-       [1, 6],
-       [3, 1],
-       [6, 2],
-       [5, 2],
-       [2, 7]]],
-     ['edgelist',
-      'G760',
-      7,
-      [[2, 1],
-       [5, 2],
-       [1, 5],
-       [6, 1],
-       [5, 6],
-       [4, 5],
-       [2, 4],
-       [6, 2],
-       [3, 4],
-       [2, 3],
-       [6, 7]]],
-     ['edgelist',
-      'G761',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [1, 5],
-       [2, 4],
-       [5, 2],
-       [6, 5],
-       [4, 6],
-       [2, 6],
-       [1, 7]]],
-     ['edgelist',
-      'G762',
-      7,
-      [[1, 2],
-       [3, 5],
-       [1, 3],
-       [5, 6],
-       [4, 2],
-       [4, 3],
-       [5, 2],
-       [6, 2],
-       [6, 3],
-       [6, 4],
-       [3, 7]]],
-     ['edgelist',
-      'G763',
-      7,
-      [[2, 1],
-       [5, 2],
-       [1, 5],
-       [6, 1],
-       [5, 6],
-       [4, 5],
-       [2, 4],
-       [6, 2],
-       [3, 4],
-       [2, 3],
-       [4, 7]]],
-     ['edgelist',
-      'G764',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [1, 5],
-       [3, 6],
-       [1, 6],
-       [3, 1],
-       [6, 2],
-       [5, 2],
-       [3, 7]]],
-     ['edgelist',
-      'G765',
-      7,
-      [[2, 4],
-       [3, 2],
-       [1, 3],
-       [6, 1],
-       [5, 6],
-       [4, 5],
-       [4, 3],
-       [1, 4],
-       [3, 5],
-       [6, 3],
-       [6, 7]]],
-     ['edgelist',
-      'G766',
-      7,
-      [[5, 4],
-       [1, 5],
-       [2, 1],
-       [3, 2],
-       [4, 3],
-       [1, 6],
-       [6, 4],
-       [1, 4],
-       [2, 6],
-       [6, 3],
-       [6, 7]]],
-     ['edgelist',
-      'G767',
-      7,
-      [[1, 2],
-       [3, 5],
-       [1, 3],
-       [5, 6],
-       [4, 2],
-       [4, 3],
-       [5, 2],
-       [6, 2],
-       [6, 3],
-       [6, 4],
-       [6, 7]]],
-     ['edgelist',
-      'G768',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [1, 5],
-       [2, 4],
-       [5, 2],
-       [3, 5],
-       [1, 4],
-       [6, 5],
-       [6, 7]]],
-     ['edgelist',
-      'G769',
-      7,
-      [[5, 4],
-       [1, 5],
-       [2, 1],
-       [3, 2],
-       [4, 3],
-       [1, 6],
-       [6, 4],
-       [1, 4],
-       [2, 6],
-       [6, 3],
-       [2, 7]]],
-     ['edgelist',
-      'G770',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [1, 5],
-       [3, 6],
-       [1, 6],
-       [3, 1],
-       [6, 2],
-       [5, 2],
-       [5, 7]]],
-     ['edgelist',
-      'G771',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [1, 5],
-       [3, 6],
-       [1, 6],
-       [3, 1],
-       [6, 2],
-       [5, 2],
-       [6, 7]]],
-     ['edgelist',
-      'G772',
-      7,
-      [[1, 2],
-       [3, 5],
-       [1, 3],
-       [5, 6],
-       [4, 2],
-       [4, 3],
-       [5, 2],
-       [6, 2],
-       [6, 3],
-       [6, 4],
-       [5, 7]]],
-     ['edgelist',
-      'G773',
-      7,
-      [[2, 4],
-       [3, 2],
-       [1, 3],
-       [6, 1],
-       [5, 6],
-       [4, 5],
-       [4, 3],
-       [1, 4],
-       [5, 1],
-       [3, 5],
-       [2, 7]]],
-     ['edgelist',
-      'G774',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [1, 5],
-       [2, 4],
-       [5, 2],
-       [3, 5],
-       [1, 4],
-       [7, 6],
-       [7, 3]]],
-     ['edgelist',
-      'G775',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [1, 5],
-       [6, 1],
-       [6, 2],
-       [6, 3],
-       [6, 4],
-       [6, 5],
-       [6, 7]]],
-     ['edgelist',
-      'G776',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [5, 6],
-       [1, 6],
-       [3, 5],
-       [1, 3],
-       [2, 4],
-       [6, 2],
-       [2, 7]]],
-     ['edgelist',
-      'G777',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [1, 5],
-       [6, 1],
-       [6, 2],
-       [6, 3],
-       [6, 4],
-       [6, 5],
-       [2, 7]]],
-     ['edgelist',
-      'G778',
-      7,
-      [[2, 1],
-       [5, 2],
-       [1, 5],
-       [6, 1],
-       [5, 6],
-       [4, 5],
-       [2, 4],
-       [6, 2],
-       [3, 4],
-       [2, 3],
-       [3, 7]]],
-     ['edgelist',
-      'G779',
-      7,
-      [[2, 4],
-       [3, 2],
-       [1, 3],
-       [6, 1],
-       [5, 6],
-       [4, 5],
-       [4, 3],
-       [1, 4],
-       [3, 5],
-       [6, 3],
-       [2, 7]]],
-     ['edgelist',
-      'G780',
-      7,
-      [[1, 7],
-       [2, 5],
-       [2, 6],
-       [2, 7],
-       [3, 5],
-       [3, 6],
-       [3, 7],
-       [4, 5],
-       [4, 6],
-       [4, 7],
-       [6, 7]]],
-     ['edgelist',
-      'G781',
-      7,
-      [[2, 4],
-       [3, 2],
-       [1, 3],
-       [6, 1],
-       [5, 6],
-       [4, 5],
-       [5, 2],
-       [6, 4],
-       [3, 6],
-       [2, 1],
-       [2, 7]]],
-     ['edgelist',
-      'G782',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [5, 6],
-       [1, 6],
-       [3, 5],
-       [1, 3],
-       [2, 4],
-       [6, 2],
-       [6, 7]]],
-     ['edgelist',
-      'G783',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [5, 6],
-       [1, 6],
-       [3, 5],
-       [1, 3],
-       [2, 4],
-       [6, 2],
-       [7, 4]]],
-     ['edgelist',
-      'G784',
-      7,
-      [[5, 4],
-       [1, 5],
-       [2, 1],
-       [3, 2],
-       [4, 3],
-       [1, 6],
-       [6, 4],
-       [1, 4],
-       [2, 6],
-       [6, 3],
-       [5, 7]]],
-     ['edgelist',
-      'G785',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [1, 5],
-       [3, 6],
-       [1, 6],
-       [3, 1],
-       [6, 2],
-       [5, 2],
-       [7, 4]]],
-     ['edgelist',
-      'G786',
-      7,
-      [[4, 5],
-       [2, 4],
-       [3, 2],
-       [1, 3],
-       [6, 1],
-       [5, 6],
-       [3, 5],
-       [6, 2],
-       [4, 3],
-       [1, 4],
-       [2, 7]]],
-     ['edgelist',
-      'G787',
-      7,
-      [[2, 4],
-       [3, 2],
-       [1, 3],
-       [6, 1],
-       [5, 6],
-       [4, 5],
-       [5, 2],
-       [6, 4],
-       [3, 6],
-       [2, 1],
-       [7, 3]]],
-     ['edgelist',
-      'G788',
-      7,
-      [[1, 2],
-       [3, 5],
-       [1, 3],
-       [5, 6],
-       [4, 2],
-       [4, 3],
-       [5, 2],
-       [6, 2],
-       [6, 3],
-       [6, 4],
-       [1, 7]]],
-     ['edgelist',
-      'G789',
-      7,
-      [[1, 7],
-       [2, 5],
-       [2, 6],
-       [2, 7],
-       [3, 5],
-       [3, 6],
-       [3, 7],
-       [4, 5],
-       [4, 6],
-       [4, 7],
-       [5, 6]]],
-     ['edgelist',
-      'G790',
-      7,
-      [[7, 6],
-       [1, 7],
-       [6, 1],
-       [2, 6],
-       [7, 2],
-       [3, 7],
-       [6, 3],
-       [4, 6],
-       [7, 4],
-       [5, 7],
-       [6, 5]]],
-     ['edgelist',
-      'G791',
-      7,
-      [[1, 2],
-       [3, 1],
-       [4, 3],
-       [5, 4],
-       [2, 5],
-       [3, 2],
-       [6, 2],
-       [3, 6],
-       [7, 3],
-       [2, 7],
-       [4, 2]]],
-     ['edgelist',
-      'G792',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [1, 5],
-       [6, 2],
-       [4, 6],
-       [7, 2],
-       [5, 7],
-       [2, 5],
-       [4, 2]]],
-     ['edgelist',
-      'G793',
-      7,
-      [[2, 5],
-       [3, 4],
-       [5, 3],
-       [1, 7],
-       [5, 6],
-       [7, 6],
-       [4, 2],
-       [7, 5],
-       [4, 1],
-       [4, 7],
-       [5, 4]]],
-     ['edgelist',
-      'G794',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [5, 6],
-       [1, 6],
-       [5, 3],
-       [7, 5],
-       [3, 7],
-       [6, 3],
-       [1, 3]]],
-     ['edgelist',
-      'G795',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [5, 6],
-       [1, 6],
-       [5, 1],
-       [4, 1],
-       [3, 1],
-       [7, 1],
-       [4, 7]]],
-     ['edgelist',
-      'G796',
-      7,
-      [[1, 2],
-       [3, 1],
-       [6, 3],
-       [7, 6],
-       [3, 7],
-       [2, 3],
-       [5, 2],
-       [3, 5],
-       [4, 3],
-       [5, 4],
-       [4, 2]]],
-     ['edgelist',
-      'G797',
-      7,
-      [[5, 6],
-       [2, 5],
-       [3, 2],
-       [4, 3],
-       [7, 4],
-       [6, 7],
-       [3, 6],
-       [5, 3],
-       [4, 6],
-       [1, 6],
-       [3, 1]]],
-     ['edgelist',
-      'G798',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [1, 5],
-       [5, 3],
-       [6, 3],
-       [6, 1],
-       [7, 3],
-       [5, 7],
-       [6, 5]]],
-     ['edgelist',
-      'G799',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [1, 5],
-       [7, 2],
-       [3, 7],
-       [1, 3],
-       [7, 1],
-       [6, 3],
-       [1, 6]]],
-     ['edgelist',
-      'G800',
-      7,
-      [[1, 6],
-       [7, 1],
-       [2, 7],
-       [6, 2],
-       [3, 6],
-       [7, 3],
-       [5, 4],
-       [4, 3],
-       [5, 6],
-       [7, 5],
-       [7, 6]]],
-     ['edgelist',
-      'G801',
-      7,
-      [[1, 6],
-       [7, 1],
-       [2, 7],
-       [6, 2],
-       [3, 6],
-       [7, 3],
-       [4, 7],
-       [6, 4],
-       [5, 6],
-       [7, 5],
-       [5, 4]]],
-     ['edgelist',
-      'G802',
-      7,
-      [[1, 6],
-       [1, 7],
-       [2, 3],
-       [2, 7],
-       [3, 5],
-       [4, 5],
-       [4, 6],
-       [4, 7],
-       [5, 6],
-       [5, 7],
-       [6, 7]]],
-     ['edgelist',
-      'G803',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [1, 5],
-       [1, 3],
-       [3, 5],
-       [6, 3],
-       [5, 6],
-       [7, 6],
-       [7, 1]]],
-     ['edgelist',
-      'G804',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [5, 6],
-       [6, 7],
-       [1, 7],
-       [5, 3],
-       [1, 5],
-       [3, 1],
-       [7, 5]]],
-     ['edgelist',
-      'G805',
-      7,
-      [[1, 2],
-       [3, 1],
-       [4, 3],
-       [5, 4],
-       [2, 5],
-       [6, 2],
-       [6, 3],
-       [7, 2],
-       [3, 7],
-       [5, 3],
-       [6, 5]]],
-     ['edgelist',
-      'G806',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [5, 6],
-       [1, 6],
-       [6, 2],
-       [3, 6],
-       [5, 3],
-       [7, 3],
-       [5, 7]]],
-     ['edgelist',
-      'G807',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [5, 6],
-       [1, 6],
-       [7, 1],
-       [7, 5],
-       [7, 3],
-       [1, 3],
-       [5, 1]]],
-     ['edgelist',
-      'G808',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [1, 5],
-       [4, 2],
-       [6, 4],
-       [5, 6],
-       [2, 5],
-       [7, 6],
-       [7, 2]]],
-     ['edgelist',
-      'G809',
-      7,
-      [[1, 5],
-       [4, 1],
-       [5, 4],
-       [3, 5],
-       [4, 3],
-       [2, 4],
-       [3, 2],
-       [5, 2],
-       [6, 3],
-       [7, 6],
-       [3, 7]]],
-     ['edgelist',
-      'G810',
-      7,
-      [[1, 6],
-       [1, 7],
-       [2, 5],
-       [2, 7],
-       [3, 4],
-       [3, 6],
-       [4, 5],
-       [4, 6],
-       [4, 7],
-       [5, 6],
-       [5, 7]]],
-     ['edgelist',
-      'G811',
-      7,
-      [[1, 2],
-       [5, 1],
-       [6, 5],
-       [7, 6],
-       [4, 7],
-       [3, 4],
-       [2, 3],
-       [5, 2],
-       [3, 5],
-       [6, 3],
-       [2, 6]]],
-     ['edgelist',
-      'G812',
-      7,
-      [[1, 5],
-       [4, 1],
-       [5, 4],
-       [3, 5],
-       [7, 3],
-       [2, 7],
-       [6, 2],
-       [3, 6],
-       [4, 3],
-       [2, 4],
-       [5, 2]]],
-     ['edgelist',
-      'G813',
-      7,
-      [[1, 2],
-       [7, 6],
-       [3, 4],
-       [4, 5],
-       [5, 6],
-       [1, 6],
-       [7, 1],
-       [7, 2],
-       [7, 3],
-       [7, 4],
-       [7, 5]]],
-     ['edgelist',
-      'G814',
-      7,
-      [[5, 2],
-       [1, 5],
-       [2, 1],
-       [4, 2],
-       [1, 4],
-       [6, 2],
-       [7, 6],
-       [2, 7],
-       [3, 2],
-       [6, 3],
-       [7, 3]]],
-     ['edgelist',
-      'G815',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [1, 4],
-       [5, 1],
-       [5, 2],
-       [5, 3],
-       [5, 4],
-       [6, 5],
-       [7, 6],
-       [5, 7]]],
-     ['edgelist',
-      'G816',
-      7,
-      [[2, 1],
-       [3, 2],
-       [4, 3],
-       [5, 4],
-       [1, 5],
-       [3, 1],
-       [6, 3],
-       [7, 6],
-       [4, 7],
-       [7, 1],
-       [1, 6]]],
-     ['edgelist',
-      'G817',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [5, 6],
-       [1, 6],
-       [1, 3],
-       [5, 1],
-       [7, 5],
-       [1, 7],
-       [4, 7]]],
-     ['edgelist',
-      'G818',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [1, 5],
-       [3, 1],
-       [6, 3],
-       [7, 6],
-       [5, 7],
-       [1, 6],
-       [7, 1]]],
-     ['edgelist',
-      'G819',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [5, 6],
-       [1, 6],
-       [7, 1],
-       [3, 7],
-       [4, 7],
-       [1, 4],
-       [5, 1]]],
-     ['edgelist',
-      'G820',
-      7,
-      [[5, 7],
-       [6, 5],
-       [7, 6],
-       [4, 7],
-       [6, 4],
-       [3, 6],
-       [4, 3],
-       [6, 1],
-       [7, 1],
-       [2, 1],
-       [3, 2]]],
-     ['edgelist',
-      'G821',
-      7,
-      [[3, 1],
-       [5, 3],
-       [6, 5],
-       [4, 6],
-       [2, 4],
-       [1, 2],
-       [3, 2],
-       [4, 3],
-       [7, 4],
-       [6, 7],
-       [5, 4]]],
-     ['edgelist',
-      'G822',
-      7,
-      [[5, 4],
-       [5, 3],
-       [2, 5],
-       [4, 2],
-       [1, 4],
-       [2, 1],
-       [4, 3],
-       [4, 6],
-       [3, 6],
-       [7, 1],
-       [5, 7]]],
-     ['edgelist',
-      'G823',
-      7,
-      [[1, 2],
-       [1, 3],
-       [3, 4],
-       [6, 2],
-       [2, 4],
-       [6, 3],
-       [7, 4],
-       [7, 1],
-       [6, 4],
-       [5, 6],
-       [4, 5]]],
-     ['edgelist',
-      'G824',
-      7,
-      [[5, 1],
-       [2, 5],
-       [7, 2],
-       [1, 7],
-       [4, 1],
-       [2, 4],
-       [6, 2],
-       [1, 6],
-       [7, 6],
-       [3, 4],
-       [1, 3]]],
-     ['edgelist',
-      'G825',
-      7,
-      [[1, 2],
-       [6, 1],
-       [5, 6],
-       [2, 5],
-       [3, 2],
-       [4, 3],
-       [5, 4],
-       [5, 3],
-       [7, 5],
-       [3, 7],
-       [4, 7]]],
-     ['edgelist',
-      'G826',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [5, 6],
-       [1, 6],
-       [6, 2],
-       [4, 6],
-       [7, 4],
-       [5, 7],
-       [6, 7]]],
-     ['edgelist',
-      'G827',
-      7,
-      [[7, 4],
-       [6, 7],
-       [3, 6],
-       [4, 3],
-       [6, 4],
-       [5, 6],
-       [3, 5],
-       [2, 3],
-       [6, 2],
-       [1, 2],
-       [5, 1]]],
-     ['edgelist',
-      'G828',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [1, 4],
-       [5, 1],
-       [5, 2],
-       [5, 3],
-       [5, 4],
-       [6, 2],
-       [7, 6],
-       [5, 7]]],
-     ['edgelist',
-      'G829',
-      7,
-      [[1, 5],
-       [4, 1],
-       [3, 4],
-       [6, 3],
-       [7, 6],
-       [3, 7],
-       [5, 3],
-       [2, 5],
-       [4, 2],
-       [2, 1],
-       [3, 2]]],
-     ['edgelist',
-      'G830',
-      7,
-      [[6, 1],
-       [1, 2],
-       [4, 1],
-       [6, 4],
-       [3, 6],
-       [7, 3],
-       [5, 7],
-       [6, 5],
-       [2, 6],
-       [7, 2],
-       [4, 7]]],
-     ['edgelist',
-      'G831',
-      7,
-      [[1, 2],
-       [3, 1],
-       [4, 3],
-       [5, 4],
-       [2, 5],
-       [3, 2],
-       [6, 2],
-       [3, 6],
-       [7, 5],
-       [7, 3],
-       [4, 7]]],
-     ['edgelist',
-      'G832',
-      7,
-      [[4, 3],
-       [7, 4],
-       [6, 7],
-       [1, 6],
-       [3, 1],
-       [2, 3],
-       [1, 2],
-       [6, 2],
-       [3, 6],
-       [5, 3],
-       [7, 5]]],
-     ['edgelist',
-      'G833',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [1, 5],
-       [5, 2],
-       [6, 4],
-       [6, 2],
-       [7, 5],
-       [7, 6],
-       [4, 7]]],
-     ['edgelist',
-      'G834',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [1, 5],
-       [6, 1],
-       [6, 4],
-       [7, 1],
-       [7, 3],
-       [7, 4],
-       [6, 7]]],
-     ['edgelist',
-      'G835',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [5, 6],
-       [1, 6],
-       [6, 2],
-       [7, 6],
-       [5, 7],
-       [4, 7],
-       [2, 7]]],
-     ['edgelist',
-      'G836',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [5, 6],
-       [1, 6],
-       [6, 2],
-       [7, 6],
-       [2, 7],
-       [3, 7],
-       [5, 3]]],
-     ['edgelist',
-      'G837',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [1, 4],
-       [5, 1],
-       [5, 4],
-       [5, 3],
-       [7, 2],
-       [7, 5],
-       [6, 3],
-       [4, 6]]],
-     ['edgelist',
-      'G838',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [5, 6],
-       [1, 6],
-       [6, 2],
-       [7, 2],
-       [5, 7],
-       [7, 6],
-       [3, 7]]],
-     ['edgelist',
-      'G839',
-      7,
-      [[1, 4],
-       [1, 7],
-       [2, 3],
-       [2, 6],
-       [3, 5],
-       [3, 7],
-       [4, 5],
-       [4, 6],
-       [5, 6],
-       [5, 7],
-       [6, 7]]],
-     ['edgelist',
-      'G840',
-      7,
-      [[6, 2],
-       [7, 6],
-       [5, 7],
-       [4, 5],
-       [3, 4],
-       [1, 3],
-       [2, 1],
-       [6, 1],
-       [7, 1],
-       [3, 7],
-       [5, 3]]],
-     ['edgelist',
-      'G841',
-      7,
-      [[2, 1],
-       [3, 2],
-       [4, 3],
-       [5, 4],
-       [1, 5],
-       [6, 3],
-       [4, 6],
-       [7, 1],
-       [7, 6],
-       [7, 3],
-       [4, 7]]],
-     ['edgelist',
-      'G842',
-      7,
-      [[1, 4],
-       [5, 1],
-       [3, 5],
-       [4, 3],
-       [2, 4],
-       [5, 2],
-       [6, 2],
-       [7, 1],
-       [7, 2],
-       [6, 4],
-       [5, 6]]],
-     ['edgelist',
-      'G843',
-      7,
-      [[1, 6],
-       [1, 7],
-       [2, 4],
-       [2, 5],
-       [3, 4],
-       [3, 6],
-       [3, 7],
-       [4, 5],
-       [5, 6],
-       [5, 7],
-       [6, 7]]],
-     ['edgelist',
-      'G844',
-      7,
-      [[1, 3],
-       [2, 1],
-       [3, 2],
-       [1, 4],
-       [4, 2],
-       [6, 5],
-       [6, 4],
-       [7, 5],
-       [7, 3],
-       [7, 1],
-       [2, 7]]],
-     ['edgelist',
-      'G845',
-      7,
-      [[5, 2],
-       [6, 5],
-       [3, 6],
-       [2, 3],
-       [1, 2],
-       [6, 1],
-       [7, 6],
-       [4, 7],
-       [3, 4],
-       [1, 3],
-       [5, 1]]],
-     ['edgelist',
-      'G846',
-      7,
-      [[1, 2],
-       [3, 1],
-       [4, 3],
-       [5, 4],
-       [2, 5],
-       [7, 2],
-       [7, 3],
-       [6, 2],
-       [4, 6],
-       [6, 3],
-       [5, 6]]],
-     ['edgelist',
-      'G847',
-      7,
-      [[1, 6],
-       [1, 7],
-       [2, 5],
-       [2, 7],
-       [3, 5],
-       [3, 6],
-       [3, 7],
-       [4, 5],
-       [4, 6],
-       [4, 7],
-       [5, 6]]],
-     ['edgelist',
-      'G848',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [5, 6],
-       [1, 6],
-       [7, 4],
-       [7, 5],
-       [7, 3],
-       [3, 1],
-       [5, 1]]],
-     ['edgelist',
-      'G849',
-      7,
-      [[1, 3],
-       [2, 1],
-       [3, 2],
-       [1, 4],
-       [4, 2],
-       [6, 5],
-       [6, 4],
-       [7, 5],
-       [7, 3],
-       [5, 1],
-       [2, 5]]],
-     ['edgelist',
-      'G850',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [1, 5],
-       [6, 1],
-       [6, 2],
-       [6, 3],
-       [7, 3],
-       [1, 7],
-       [2, 7]]],
-     ['edgelist',
-      'G851',
-      7,
-      [[1, 4],
-       [5, 1],
-       [2, 5],
-       [4, 2],
-       [5, 4],
-       [1, 2],
-       [3, 5],
-       [7, 3],
-       [6, 7],
-       [3, 6],
-       [2, 3]]],
-     ['edgelist',
-      'G852',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [1, 5],
-       [6, 1],
-       [6, 5],
-       [6, 3],
-       [6, 4],
-       [7, 2],
-       [7, 6]]],
-     ['edgelist',
-      'G853',
-      7,
-      [[5, 2],
-       [6, 5],
-       [3, 6],
-       [2, 3],
-       [1, 2],
-       [5, 1],
-       [6, 1],
-       [7, 6],
-       [4, 7],
-       [3, 4],
-       [6, 4]]],
-     ['edgelist',
-      'G854',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [1, 4],
-       [5, 1],
-       [5, 4],
-       [5, 3],
-       [6, 2],
-       [6, 5],
-       [7, 6],
-       [5, 7]]],
-     ['edgelist',
-      'G855',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [6, 5],
-       [1, 5],
-       [6, 1],
-       [6, 2],
-       [6, 3],
-       [6, 4],
-       [7, 4],
-       [7, 5]]],
-     ['edgelist',
-      'G856',
-      7,
-      [[1, 5],
-       [4, 1],
-       [2, 4],
-       [5, 2],
-       [4, 5],
-       [6, 2],
-       [7, 6],
-       [2, 7],
-       [3, 2],
-       [6, 3],
-       [7, 3]]],
-     ['edgelist',
-      'G857',
-      7,
-      [[5, 2],
-       [1, 5],
-       [4, 1],
-       [3, 6],
-       [6, 5],
-       [7, 6],
-       [3, 7],
-       [2, 3],
-       [4, 2],
-       [7, 4],
-       [3, 4]]],
-     ['edgelist',
-      'G858',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [1, 4],
-       [5, 1],
-       [5, 3],
-       [6, 5],
-       [6, 4],
-       [7, 1],
-       [7, 6],
-       [4, 7]]],
-     ['edgelist',
-      'G859',
-      7,
-      [[6, 3],
-       [3, 5],
-       [6, 4],
-       [5, 2],
-       [6, 5],
-       [1, 2],
-       [4, 1],
-       [1, 3],
-       [7, 3],
-       [7, 4],
-       [1, 7]]],
-     ['edgelist',
-      'G860',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [1, 5],
-       [6, 1],
-       [6, 5],
-       [6, 3],
-       [6, 4],
-       [7, 2],
-       [1, 7]]],
-     ['edgelist',
-      'G861',
-      7,
-      [[1, 4],
-       [1, 5],
-       [2, 3],
-       [2, 6],
-       [2, 7],
-       [3, 5],
-       [3, 7],
-       [4, 6],
-       [4, 7],
-       [5, 6],
-       [6, 7]]],
-     ['edgelist',
-      'G862',
-      7,
-      [[5, 1],
-       [4, 5],
-       [6, 4],
-       [1, 6],
-       [2, 1],
-       [3, 2],
-       [4, 3],
-       [5, 2],
-       [6, 3],
-       [7, 5],
-       [6, 7]]],
-     ['edgelist',
-      'G863',
-      7,
-      [[3, 4],
-       [5, 3],
-       [1, 5],
-       [6, 1],
-       [2, 6],
-       [5, 2],
-       [4, 5],
-       [6, 4],
-       [2, 1],
-       [7, 6],
-       [7, 3]]],
-     ['edgelist',
-      'G864',
-      7,
-      [[5, 2],
-       [1, 5],
-       [4, 1],
-       [5, 4],
-       [6, 5],
-       [7, 6],
-       [3, 7],
-       [2, 3],
-       [4, 2],
-       [7, 4],
-       [3, 6]]],
-     ['edgelist',
-      'G865',
-      7,
-      [[1, 4],
-       [5, 1],
-       [3, 5],
-       [4, 3],
-       [2, 4],
-       [1, 2],
-       [7, 1],
-       [6, 7],
-       [3, 6],
-       [2, 6],
-       [5, 2]]],
-     ['edgelist',
-      'G866',
-      7,
-      [[1, 4],
-       [1, 5],
-       [2, 5],
-       [2, 6],
-       [2, 7],
-       [3, 4],
-       [3, 6],
-       [3, 7],
-       [4, 7],
-       [5, 6],
-       [6, 7]]],
-     ['edgelist',
-      'G867',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [1, 4],
-       [5, 1],
-       [5, 4],
-       [5, 3],
-       [6, 2],
-       [6, 5],
-       [7, 2],
-       [6, 7]]],
-     ['edgelist',
-      'G868',
-      7,
-      [[5, 2],
-       [6, 5],
-       [7, 6],
-       [4, 7],
-       [3, 4],
-       [2, 3],
-       [1, 2],
-       [6, 1],
-       [5, 1],
-       [6, 3],
-       [7, 3]]],
-     ['edgelist',
-      'G869',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [1, 5],
-       [5, 3],
-       [4, 6],
-       [5, 6],
-       [4, 1],
-       [7, 6],
-       [7, 2]]],
-     ['edgelist',
-      'G870',
-      7,
-      [[1, 5],
-       [2, 1],
-       [5, 2],
-       [4, 5],
-       [3, 4],
-       [2, 3],
-       [7, 2],
-       [6, 7],
-       [4, 6],
-       [6, 5],
-       [3, 7]]],
-     ['edgelist',
-      'G871',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [5, 6],
-       [1, 6],
-       [6, 2],
-       [5, 3],
-       [7, 3],
-       [4, 7],
-       [5, 7]]],
-     ['edgelist',
-      'G872',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [5, 6],
-       [1, 6],
-       [7, 3],
-       [2, 7],
-       [6, 3],
-       [5, 2],
-       [1, 4]]],
-     ['edgelist',
-      'G873',
-      7,
-      [[1, 4],
-       [1, 5],
-       [2, 3],
-       [2, 6],
-       [2, 7],
-       [3, 6],
-       [3, 7],
-       [4, 6],
-       [4, 7],
-       [5, 6],
-       [5, 7]]],
-     ['edgelist',
-      'G874',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [6, 5],
-       [1, 5],
-       [6, 4],
-       [6, 2],
-       [7, 4],
-       [7, 5],
-       [5, 3],
-       [1, 4]]],
-     ['edgelist',
-      'G875',
-      7,
-      [[1, 5],
-       [1, 6],
-       [1, 7],
-       [2, 4],
-       [2, 6],
-       [2, 7],
-       [3, 4],
-       [3, 5],
-       [3, 7],
-       [4, 7],
-       [5, 6]]],
-     ['edgelist',
-      'G876',
-      7,
-      [[5, 4],
-       [3, 5],
-       [4, 3],
-       [1, 4],
-       [3, 2],
-       [6, 5],
-       [6, 1],
-       [7, 5],
-       [7, 2],
-       [2, 6],
-       [1, 7]]],
-     ['edgelist',
-      'G877',
-      7,
-      [[7, 5],
-       [4, 7],
-       [2, 4],
-       [5, 2],
-       [1, 5],
-       [3, 1],
-       [4, 3],
-       [1, 2],
-       [6, 1],
-       [7, 6],
-       [6, 3]]],
-     ['edgelist',
-      'G878',
-      7,
-      [[7, 2],
-       [3, 7],
-       [2, 3],
-       [1, 2],
-       [4, 1],
-       [5, 4],
-       [6, 5],
-       [4, 6],
-       [3, 1],
-       [5, 1],
-       [6, 7]]],
-     ['edgelist',
-      'G879',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [5, 6],
-       [1, 5],
-       [2, 4],
-       [5, 2],
-       [3, 5],
-       [1, 4],
-       [6, 4],
-       [5, 4],
-       [1, 3]]],
-     ['edgelist',
-      'G880',
-      7,
-      [[4, 7],
-       [2, 4],
-       [3, 2],
-       [1, 3],
-       [6, 1],
-       [7, 6],
-       [3, 7],
-       [6, 2],
-       [1, 4],
-       [2, 7],
-       [1, 2],
-       [1, 7]]],
-     ['edgelist',
-      'G881',
-      7,
-      [[2, 4],
-       [3, 2],
-       [1, 3],
-       [6, 1],
-       [5, 6],
-       [4, 5],
-       [6, 4],
-       [3, 6],
-       [2, 1],
-       [5, 2],
-       [6, 2],
-       [3, 5]]],
-     ['edgelist',
-      'G882',
-      7,
-      [[4, 5],
-       [2, 4],
-       [3, 2],
-       [1, 3],
-       [6, 1],
-       [5, 6],
-       [3, 5],
-       [6, 2],
-       [1, 4],
-       [2, 5],
-       [1, 2],
-       [3, 4]]],
-     ['edgelist',
-      'G883',
-      7,
-      [[1, 2],
-       [2, 3],
-       [1, 3],
-       [4, 3],
-       [4, 2],
-       [5, 1],
-       [3, 5],
-       [6, 2],
-       [1, 6],
-       [5, 6],
-       [4, 5],
-       [6, 4]]],
-     ['edgelist',
-      'G884',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [1, 5],
-       [2, 4],
-       [5, 2],
-       [3, 5],
-       [1, 4],
-       [1, 3],
-       [2, 6],
-       [7, 2]]],
-     ['edgelist',
-      'G885',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [1, 5],
-       [2, 4],
-       [5, 2],
-       [3, 5],
-       [1, 4],
-       [1, 3],
-       [5, 7],
-       [6, 4]]],
-     ['edgelist',
-      'G886',
-      7,
-      [[1, 2],
-       [3, 5],
-       [1, 3],
-       [3, 2],
-       [4, 2],
-       [4, 3],
-       [5, 2],
-       [6, 2],
-       [6, 3],
-       [6, 4],
-       [1, 4],
-       [2, 7]]],
-     ['edgelist',
-      'G887',
-      7,
-      [[1, 2],
-       [3, 5],
-       [1, 3],
-       [3, 2],
-       [4, 2],
-       [4, 3],
-       [5, 2],
-       [6, 2],
-       [6, 3],
-       [6, 4],
-       [1, 4],
-       [4, 7]]],
-     ['edgelist',
-      'G888',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [1, 5],
-       [2, 4],
-       [5, 2],
-       [3, 5],
-       [1, 4],
-       [6, 1],
-       [5, 6],
-       [5, 7]]],
-     ['edgelist',
-      'G889',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [1, 5],
-       [2, 4],
-       [5, 2],
-       [3, 5],
-       [1, 4],
-       [6, 1],
-       [5, 6],
-       [7, 2]]],
-     ['edgelist',
-      'G890',
-      7,
-      [[1, 2],
-       [3, 5],
-       [1, 3],
-       [3, 2],
-       [4, 2],
-       [4, 3],
-       [5, 2],
-       [6, 2],
-       [6, 3],
-       [6, 4],
-       [1, 4],
-       [1, 7]]],
-     ['edgelist',
-      'G891',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [1, 5],
-       [2, 4],
-       [5, 2],
-       [3, 5],
-       [1, 4],
-       [6, 1],
-       [5, 6],
-       [1, 7]]],
-     ['edgelist',
-      'G892',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [1, 5],
-       [2, 4],
-       [5, 2],
-       [3, 5],
-       [1, 4],
-       [6, 1],
-       [5, 6],
-       [3, 7]]],
-     ['edgelist',
-      'G893',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [5, 6],
-       [1, 5],
-       [2, 4],
-       [5, 2],
-       [3, 5],
-       [1, 4],
-       [6, 4],
-       [1, 3],
-       [2, 7]]],
-     ['edgelist',
-      'G894',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [5, 6],
-       [1, 5],
-       [2, 4],
-       [5, 2],
-       [3, 5],
-       [1, 4],
-       [6, 4],
-       [1, 3],
-       [5, 7]]],
-     ['edgelist',
-      'G895',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [1, 5],
-       [2, 4],
-       [5, 2],
-       [3, 5],
-       [1, 4],
-       [1, 3],
-       [7, 2],
-       [7, 6]]],
-     ['edgelist',
-      'G896',
-      7,
-      [[2, 4],
-       [3, 2],
-       [1, 3],
-       [6, 1],
-       [5, 6],
-       [4, 5],
-       [6, 2],
-       [6, 4],
-       [3, 6],
-       [2, 1],
-       [5, 2],
-       [2, 7]]],
-     ['edgelist',
-      'G897',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [5, 6],
-       [1, 6],
-       [3, 5],
-       [6, 3],
-       [2, 6],
-       [4, 6],
-       [1, 4],
-       [6, 7]]],
-     ['edgelist',
-      'G898',
-      7,
-      [[4, 7],
-       [2, 4],
-       [3, 2],
-       [1, 3],
-       [6, 1],
-       [7, 6],
-       [3, 7],
-       [6, 2],
-       [1, 4],
-       [2, 7],
-       [1, 2],
-       [2, 5]]],
-     ['edgelist',
-      'G899',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [5, 6],
-       [1, 6],
-       [3, 5],
-       [6, 3],
-       [2, 6],
-       [4, 6],
-       [1, 4],
-       [4, 7]]],
-     ['edgelist',
-      'G900',
-      7,
-      [[1, 2],
-       [3, 5],
-       [1, 3],
-       [3, 2],
-       [4, 2],
-       [4, 3],
-       [5, 2],
-       [6, 2],
-       [6, 3],
-       [6, 4],
-       [1, 4],
-       [5, 7]]],
-     ['edgelist',
-      'G901',
-      7,
-      [[2, 4],
-       [3, 2],
-       [1, 3],
-       [6, 1],
-       [5, 6],
-       [4, 5],
-       [6, 2],
-       [6, 4],
-       [3, 6],
-       [2, 1],
-       [5, 2],
-       [3, 7]]],
-     ['edgelist',
-      'G902',
-      7,
-      [[4, 7],
-       [2, 4],
-       [3, 2],
-       [1, 3],
-       [6, 1],
-       [7, 6],
-       [3, 7],
-       [6, 2],
-       [1, 4],
-       [2, 7],
-       [1, 2],
-       [1, 5]]],
-     ['edgelist',
-      'G903',
-      7,
-      [[2, 4],
-       [5, 2],
-       [4, 5],
-       [3, 4],
-       [1, 3],
-       [5, 1],
-       [6, 5],
-       [3, 6],
-       [5, 3],
-       [1, 6],
-       [2, 6],
-       [4, 7]]],
-     ['edgelist',
-      'G904',
-      7,
-      [[2, 4],
-       [5, 2],
-       [4, 5],
-       [3, 4],
-       [1, 3],
-       [5, 1],
-       [6, 5],
-       [3, 6],
-       [5, 3],
-       [1, 6],
-       [2, 6],
-       [1, 7]]],
-     ['edgelist',
-      'G905',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [1, 5],
-       [2, 4],
-       [5, 2],
-       [3, 5],
-       [1, 4],
-       [6, 1],
-       [5, 6],
-       [6, 7]]],
-     ['edgelist',
-      'G906',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [5, 6],
-       [1, 6],
-       [3, 5],
-       [6, 3],
-       [2, 6],
-       [2, 5],
-       [1, 4],
-       [6, 7]]],
-     ['edgelist',
-      'G907',
-      7,
-      [[2, 6],
-       [5, 2],
-       [1, 5],
-       [6, 1],
-       [3, 6],
-       [5, 3],
-       [4, 5],
-       [6, 4],
-       [1, 2],
-       [3, 1],
-       [4, 3],
-       [5, 7]]],
-     ['edgelist',
-      'G908',
-      7,
-      [[2, 6],
-       [5, 2],
-       [1, 5],
-       [6, 1],
-       [3, 6],
-       [5, 3],
-       [4, 5],
-       [6, 4],
-       [1, 2],
-       [3, 1],
-       [4, 3],
-       [1, 7]]],
-     ['edgelist',
-      'G909',
-      7,
-      [[4, 7],
-       [2, 4],
-       [3, 2],
-       [1, 3],
-       [6, 1],
-       [7, 6],
-       [3, 7],
-       [6, 2],
-       [1, 4],
-       [2, 7],
-       [1, 2],
-       [5, 6]]],
-     ['edgelist',
-      'G910',
-      7,
-      [[2, 6],
-       [5, 2],
-       [1, 5],
-       [6, 1],
-       [3, 6],
-       [5, 3],
-       [4, 5],
-       [6, 4],
-       [1, 2],
-       [3, 1],
-       [4, 3],
-       [4, 7]]],
-     ['edgelist',
-      'G911',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [5, 6],
-       [1, 6],
-       [3, 5],
-       [6, 3],
-       [2, 6],
-       [2, 5],
-       [1, 4],
-       [1, 7]]],
-     ['edgelist',
-      'G912',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [5, 6],
-       [1, 5],
-       [2, 4],
-       [5, 2],
-       [3, 5],
-       [1, 4],
-       [6, 4],
-       [1, 3],
-       [6, 7]]],
-     ['edgelist',
-      'G913',
-      7,
-      [[1, 4],
-       [7, 1],
-       [6, 7],
-       [4, 6],
-       [2, 4],
-       [7, 2],
-       [5, 7],
-       [4, 5],
-       [3, 4],
-       [7, 3],
-       [4, 7],
-       [6, 5]]],
-     ['edgelist',
-      'G914',
-      7,
-      [[1, 2],
-       [5, 1],
-       [6, 5],
-       [2, 6],
-       [5, 2],
-       [3, 5],
-       [2, 3],
-       [7, 2],
-       [5, 7],
-       [3, 7],
-       [4, 3],
-       [5, 4]]],
-     ['edgelist',
-      'G915',
-      7,
-      [[5, 2],
-       [4, 3],
-       [4, 1],
-       [5, 3],
-       [6, 2],
-       [6, 1],
-       [4, 6],
-       [5, 4],
-       [6, 5],
-       [7, 6],
-       [4, 7],
-       [5, 7]]],
-     ['edgelist',
-      'G916',
-      7,
-      [[1, 2],
-       [2, 3],
-       [1, 3],
-       [4, 1],
-       [4, 2],
-       [4, 3],
-       [5, 3],
-       [4, 5],
-       [6, 4],
-       [1, 6],
-       [7, 4],
-       [2, 7]]],
-     ['edgelist',
-      'G917',
-      7,
-      [[1, 2],
-       [2, 3],
-       [1, 3],
-       [4, 1],
-       [4, 2],
-       [4, 3],
-       [7, 4],
-       [1, 7],
-       [6, 1],
-       [2, 6],
-       [5, 2],
-       [3, 5]]],
-     ['edgelist',
-      'G918',
-      7,
-      [[7, 3],
-       [6, 7],
-       [4, 6],
-       [3, 4],
-       [2, 3],
-       [5, 2],
-       [6, 5],
-       [3, 6],
-       [5, 3],
-       [1, 5],
-       [2, 1],
-       [6, 2]]],
-     ['edgelist',
-      'G919',
-      7,
-      [[6, 5],
-       [7, 6],
-       [4, 7],
-       [5, 4],
-       [1, 5],
-       [4, 1],
-       [2, 4],
-       [1, 2],
-       [5, 2],
-       [4, 6],
-       [3, 4],
-       [5, 3]]],
-     ['edgelist',
-      'G920',
-      7,
-      [[1, 5],
-       [4, 1],
-       [3, 4],
-       [5, 3],
-       [2, 5],
-       [4, 2],
-       [2, 1],
-       [3, 2],
-       [6, 1],
-       [2, 6],
-       [7, 2],
-       [1, 7]]],
-     ['edgelist',
-      'G921',
-      7,
-      [[2, 3],
-       [1, 2],
-       [3, 1],
-       [4, 3],
-       [1, 4],
-       [2, 4],
-       [5, 3],
-       [1, 5],
-       [6, 5],
-       [3, 6],
-       [7, 3],
-       [2, 7]]],
-     ['edgelist',
-      'G922',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [1, 4],
-       [5, 1],
-       [5, 2],
-       [5, 3],
-       [5, 4],
-       [6, 3],
-       [5, 6],
-       [7, 5],
-       [4, 7]]],
-     ['edgelist',
-      'G923',
-      7,
-      [[1, 5],
-       [4, 1],
-       [3, 4],
-       [5, 3],
-       [2, 5],
-       [4, 2],
-       [2, 1],
-       [3, 2],
-       [6, 1],
-       [2, 6],
-       [7, 2],
-       [3, 7]]],
-     ['edgelist',
-      'G924',
-      7,
-      [[2, 3],
-       [1, 2],
-       [3, 1],
-       [4, 3],
-       [1, 4],
-       [2, 4],
-       [5, 3],
-       [1, 5],
-       [7, 5],
-       [3, 7],
-       [6, 3],
-       [5, 6]]],
-     ['edgelist',
-      'G925',
-      7,
-      [[2, 1],
-       [3, 2],
-       [1, 3],
-       [4, 1],
-       [5, 4],
-       [1, 5],
-       [6, 1],
-       [4, 6],
-       [5, 6],
-       [7, 5],
-       [4, 7],
-       [7, 1]]],
-     ['edgelist',
-      'G926',
-      7,
-      [[1, 2],
-       [2, 3],
-       [1, 3],
-       [4, 1],
-       [4, 2],
-       [4, 3],
-       [5, 2],
-       [1, 5],
-       [6, 1],
-       [3, 6],
-       [7, 6],
-       [3, 7]]],
-     ['edgelist',
-      'G927',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [1, 4],
-       [5, 1],
-       [5, 2],
-       [5, 3],
-       [5, 4],
-       [7, 5],
-       [1, 7],
-       [6, 1],
-       [4, 6]]],
-     ['edgelist',
-      'G928',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [1, 4],
-       [5, 1],
-       [5, 2],
-       [5, 3],
-       [2, 6],
-       [7, 2],
-       [1, 7],
-       [6, 1],
-       [5, 6]]],
-     ['edgelist',
-      'G929',
-      7,
-      [[1, 5],
-       [4, 1],
-       [3, 4],
-       [5, 3],
-       [2, 5],
-       [4, 2],
-       [2, 1],
-       [3, 2],
-       [7, 2],
-       [1, 7],
-       [6, 1],
-       [3, 6]]],
-     ['edgelist',
-      'G930',
-      7,
-      [[6, 5],
-       [4, 6],
-       [5, 4],
-       [7, 5],
-       [4, 7],
-       [3, 4],
-       [5, 3],
-       [1, 5],
-       [4, 1],
-       [2, 1],
-       [3, 2],
-       [7, 3]]],
-     ['edgelist',
-      'G931',
-      7,
-      [[5, 2],
-       [4, 3],
-       [4, 1],
-       [5, 3],
-       [6, 2],
-       [6, 1],
-       [4, 6],
-       [5, 4],
-       [6, 5],
-       [7, 6],
-       [1, 7],
-       [4, 7]]],
-     ['edgelist',
-      'G932',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [1, 4],
-       [5, 1],
-       [5, 2],
-       [5, 3],
-       [5, 4],
-       [7, 2],
-       [1, 7],
-       [6, 1],
-       [2, 6]]],
-     ['edgelist',
-      'G933',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [1, 4],
-       [5, 1],
-       [5, 2],
-       [5, 3],
-       [5, 4],
-       [4, 2],
-       [6, 2],
-       [7, 6],
-       [5, 7]]],
-     ['edgelist',
-      'G934',
-      7,
-      [[1, 5],
-       [4, 1],
-       [3, 4],
-       [5, 3],
-       [2, 5],
-       [4, 2],
-       [2, 1],
-       [3, 2],
-       [6, 5],
-       [4, 6],
-       [7, 4],
-       [5, 7]]],
-     ['edgelist',
-      'G935',
-      7,
-      [[2, 1],
-       [3, 2],
-       [4, 3],
-       [1, 4],
-       [5, 4],
-       [2, 5],
-       [5, 1],
-       [6, 5],
-       [1, 6],
-       [4, 6],
-       [7, 1],
-       [2, 7]]],
-     ['edgelist',
-      'G936',
-      7,
-      [[1, 5],
-       [4, 1],
-       [3, 4],
-       [5, 3],
-       [2, 5],
-       [4, 2],
-       [2, 1],
-       [3, 2],
-       [7, 3],
-       [5, 7],
-       [6, 1],
-       [2, 6]]],
-     ['edgelist',
-      'G937',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [1, 4],
-       [5, 1],
-       [5, 2],
-       [5, 3],
-       [6, 5],
-       [3, 6],
-       [2, 6],
-       [7, 2],
-       [6, 7]]],
-     ['edgelist',
-      'G938',
-      7,
-      [[1, 3],
-       [2, 1],
-       [3, 2],
-       [1, 4],
-       [4, 2],
-       [5, 3],
-       [6, 4],
-       [7, 2],
-       [7, 5],
-       [5, 1],
-       [4, 5],
-       [2, 6]]],
-     ['edgelist',
-      'G939',
-      7,
-      [[1, 2],
-       [2, 3],
-       [1, 3],
-       [4, 1],
-       [4, 3],
-       [5, 4],
-       [5, 2],
-       [1, 5],
-       [6, 3],
-       [6, 5],
-       [7, 1],
-       [4, 7]]],
-     ['edgelist',
-      'G940',
-      7,
-      [[6, 1],
-       [3, 6],
-       [7, 3],
-       [4, 7],
-       [3, 4],
-       [2, 3],
-       [1, 2],
-       [5, 1],
-       [2, 5],
-       [6, 2],
-       [7, 6],
-       [1, 3]]],
-     ['edgelist',
-      'G941',
-      7,
-      [[1, 5],
-       [4, 1],
-       [3, 4],
-       [5, 3],
-       [2, 5],
-       [4, 2],
-       [2, 1],
-       [3, 2],
-       [7, 5],
-       [3, 7],
-       [6, 3],
-       [4, 6]]],
-     ['edgelist',
-      'G942',
-      7,
-      [[1, 3],
-       [2, 1],
-       [6, 2],
-       [4, 6],
-       [7, 4],
-       [3, 7],
-       [5, 3],
-       [4, 5],
-       [6, 5],
-       [3, 6],
-       [2, 3],
-       [5, 2]]],
-     ['edgelist',
-      'G943',
-      7,
-      [[1, 3],
-       [2, 1],
-       [3, 2],
-       [1, 4],
-       [4, 2],
-       [5, 1],
-       [2, 5],
-       [5, 3],
-       [4, 5],
-       [6, 5],
-       [7, 6],
-       [4, 7]]],
-     ['edgelist',
-      'G944',
-      7,
-      [[1, 2],
-       [2, 3],
-       [1, 3],
-       [4, 1],
-       [4, 2],
-       [4, 3],
-       [7, 2],
-       [3, 7],
-       [5, 7],
-       [4, 5],
-       [6, 4],
-       [7, 6]]],
-     ['edgelist',
-      'G945',
-      7,
-      [[1, 5],
-       [4, 1],
-       [3, 4],
-       [5, 3],
-       [2, 5],
-       [4, 2],
-       [2, 1],
-       [3, 2],
-       [6, 1],
-       [7, 6],
-       [1, 7],
-       [4, 5]]],
-     ['edgelist',
-      'G946',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [1, 4],
-       [5, 1],
-       [5, 2],
-       [5, 3],
-       [5, 4],
-       [6, 2],
-       [3, 6],
-       [7, 1],
-       [4, 7]]],
-     ['edgelist',
-      'G947',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [1, 5],
-       [6, 4],
-       [6, 2],
-       [6, 5],
-       [7, 4],
-       [5, 7],
-       [2, 7],
-       [7, 6]]],
-     ['edgelist',
-      'G948',
-      7,
-      [[1, 6],
-       [1, 7],
-       [2, 4],
-       [2, 5],
-       [3, 4],
-       [3, 5],
-       [3, 6],
-       [3, 7],
-       [4, 6],
-       [4, 7],
-       [5, 6],
-       [5, 7]]],
-     ['edgelist',
-      'G949',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [1, 5],
-       [6, 3],
-       [7, 6],
-       [1, 7],
-       [7, 3],
-       [1, 6],
-       [2, 6],
-       [7, 2]]],
-     ['edgelist',
-      'G950',
-      7,
-      [[1, 2],
-       [7, 6],
-       [3, 4],
-       [4, 5],
-       [5, 6],
-       [1, 6],
-       [7, 1],
-       [7, 2],
-       [7, 3],
-       [7, 4],
-       [7, 5],
-       [6, 2]]],
-     ['edgelist',
-      'G951',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [1, 5],
-       [6, 1],
-       [6, 2],
-       [6, 3],
-       [6, 4],
-       [6, 5],
-       [7, 2],
-       [6, 7]]],
-     ['edgelist',
-      'G952',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [1, 4],
-       [5, 1],
-       [5, 2],
-       [5, 3],
-       [5, 4],
-       [6, 2],
-       [5, 6],
-       [7, 5],
-       [6, 7]]],
-     ['edgelist',
-      'G953',
-      7,
-      [[3, 2],
-       [1, 3],
-       [6, 1],
-       [5, 6],
-       [4, 5],
-       [6, 2],
-       [6, 4],
-       [3, 6],
-       [2, 1],
-       [5, 2],
-       [7, 4],
-       [7, 2]]],
-     ['edgelist',
-      'G954',
-      7,
-      [[1, 5],
-       [1, 7],
-       [2, 4],
-       [2, 6],
-       [2, 7],
-       [3, 4],
-       [3, 6],
-       [3, 7],
-       [4, 6],
-       [5, 6],
-       [5, 7],
-       [6, 7]]],
-     ['edgelist',
-      'G955',
-      7,
-      [[1, 6],
-       [1, 7],
-       [2, 5],
-       [2, 6],
-       [2, 7],
-       [3, 4],
-       [3, 6],
-       [3, 7],
-       [4, 5],
-       [4, 7],
-       [5, 6],
-       [6, 7]]],
-     ['edgelist',
-      'G956',
-      7,
-      [[1, 2],
-       [3, 5],
-       [1, 3],
-       [3, 2],
-       [5, 7],
-       [5, 2],
-       [6, 2],
-       [6, 3],
-       [6, 4],
-       [1, 4],
-       [7, 2],
-       [3, 7]]],
-     ['edgelist',
-      'G957',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [6, 5],
-       [1, 5],
-       [6, 4],
-       [6, 2],
-       [7, 4],
-       [7, 5],
-       [5, 3],
-       [1, 4],
-       [5, 4]]],
-     ['edgelist',
-      'G958',
-      7,
-      [[2, 4],
-       [3, 2],
-       [1, 3],
-       [6, 1],
-       [5, 6],
-       [4, 5],
-       [6, 4],
-       [3, 6],
-       [2, 1],
-       [5, 2],
-       [7, 2],
-       [7, 6]]],
-     ['edgelist',
-      'G959',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [1, 4],
-       [5, 1],
-       [5, 2],
-       [5, 3],
-       [5, 4],
-       [6, 2],
-       [7, 6],
-       [1, 7],
-       [2, 7]]],
-     ['edgelist',
-      'G960',
-      7,
-      [[1, 4],
-       [5, 1],
-       [3, 5],
-       [4, 3],
-       [2, 4],
-       [5, 2],
-       [2, 1],
-       [6, 2],
-       [6, 3],
-       [7, 2],
-       [3, 7],
-       [5, 7]]],
-     ['edgelist',
-      'G961',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [1, 4],
-       [5, 3],
-       [6, 1],
-       [6, 5],
-       [5, 2],
-       [2, 7],
-       [6, 4],
-       [2, 6],
-       [7, 3]]],
-     ['edgelist',
-      'G962',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [1, 4],
-       [5, 3],
-       [6, 1],
-       [6, 5],
-       [5, 2],
-       [2, 6],
-       [6, 4],
-       [7, 2],
-       [5, 7]]],
-     ['edgelist',
-      'G963',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [1, 4],
-       [5, 3],
-       [6, 1],
-       [6, 5],
-       [5, 2],
-       [2, 6],
-       [6, 4],
-       [7, 2],
-       [1, 7]]],
-     ['edgelist',
-      'G964',
-      7,
-      [[5, 4],
-       [2, 3],
-       [1, 2],
-       [1, 4],
-       [5, 1],
-       [7, 5],
-       [5, 3],
-       [6, 5],
-       [7, 3],
-       [7, 4],
-       [4, 3],
-       [6, 2]]],
-     ['edgelist',
-      'G965',
-      7,
-      [[3, 4],
-       [5, 3],
-       [1, 5],
-       [7, 1],
-       [7, 6],
-       [5, 6],
-       [2, 4],
-       [6, 2],
-       [1, 6],
-       [7, 2],
-       [4, 7],
-       [6, 4]]],
-     ['edgelist',
-      'G966',
-      7,
-      [[1, 4],
-       [1, 6],
-       [2, 3],
-       [2, 6],
-       [2, 7],
-       [3, 5],
-       [3, 7],
-       [4, 5],
-       [4, 7],
-       [5, 6],
-       [5, 7],
-       [6, 7]]],
-     ['edgelist',
-      'G967',
-      7,
-      [[1, 4],
-       [1, 7],
-       [2, 5],
-       [2, 6],
-       [2, 7],
-       [3, 4],
-       [3, 5],
-       [3, 6],
-       [4, 7],
-       [5, 6],
-       [5, 7],
-       [6, 7]]],
-     ['edgelist',
-      'G968',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [5, 6],
-       [1, 5],
-       [5, 4],
-       [6, 4],
-       [7, 2],
-       [4, 7],
-       [7, 3],
-       [1, 7],
-       [5, 7]]],
-     ['edgelist',
-      'G969',
-      7,
-      [[1, 2],
-       [3, 5],
-       [1, 3],
-       [7, 2],
-       [4, 2],
-       [4, 3],
-       [5, 2],
-       [6, 2],
-       [6, 3],
-       [6, 4],
-       [1, 4],
-       [5, 7]]],
-     ['edgelist',
-      'G970',
-      7,
-      [[2, 4],
-       [3, 2],
-       [1, 3],
-       [6, 1],
-       [5, 6],
-       [4, 5],
-       [6, 4],
-       [3, 6],
-       [2, 1],
-       [5, 2],
-       [7, 4],
-       [2, 7]]],
-     ['edgelist',
-      'G971',
-      7,
-      [[5, 4],
-       [2, 3],
-       [6, 1],
-       [1, 4],
-       [5, 1],
-       [5, 2],
-       [5, 3],
-       [6, 2],
-       [7, 3],
-       [7, 4],
-       [4, 3],
-       [7, 5]]],
-     ['edgelist',
-      'G972',
-      7,
-      [[3, 4],
-       [5, 3],
-       [6, 5],
-       [1, 6],
-       [7, 1],
-       [2, 7],
-       [4, 2],
-       [7, 4],
-       [6, 4],
-       [2, 6],
-       [5, 1],
-       [4, 1]]],
-     ['edgelist',
-      'G973',
-      7,
-      [[1, 4],
-       [1, 6],
-       [2, 5],
-       [2, 6],
-       [2, 7],
-       [3, 5],
-       [3, 6],
-       [3, 7],
-       [4, 5],
-       [4, 7],
-       [5, 7],
-       [6, 7]]],
-     ['edgelist',
-      'G974',
-      7,
-      [[4, 3],
-       [2, 3],
-       [6, 1],
-       [1, 4],
-       [5, 1],
-       [5, 2],
-       [7, 5],
-       [6, 2],
-       [7, 3],
-       [7, 4],
-       [7, 2],
-       [1, 7]]],
-     ['edgelist',
-      'G975',
-      7,
-      [[1, 6],
-       [1, 7],
-       [2, 4],
-       [2, 5],
-       [2, 7],
-       [3, 4],
-       [3, 5],
-       [3, 7],
-       [4, 6],
-       [5, 6],
-       [5, 7],
-       [6, 7]]],
-     ['edgelist',
-      'G976',
-      7,
-      [[1, 4],
-       [1, 6],
-       [2, 3],
-       [2, 5],
-       [2, 7],
-       [3, 5],
-       [3, 7],
-       [4, 6],
-       [4, 7],
-       [5, 6],
-       [5, 7],
-       [6, 7]]],
-     ['edgelist',
-      'G977',
-      7,
-      [[1, 4],
-       [1, 7],
-       [2, 5],
-       [2, 6],
-       [2, 7],
-       [3, 5],
-       [3, 6],
-       [3, 7],
-       [4, 5],
-       [4, 6],
-       [5, 7],
-       [6, 7]]],
-     ['edgelist',
-      'G978',
-      7,
-      [[1, 6],
-       [1, 7],
-       [2, 5],
-       [2, 6],
-       [2, 7],
-       [3, 5],
-       [3, 6],
-       [3, 7],
-       [4, 5],
-       [4, 6],
-       [4, 7],
-       [5, 7]]],
-     ['edgelist',
-      'G979',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [1, 4],
-       [5, 3],
-       [6, 1],
-       [6, 5],
-       [5, 2],
-       [4, 5],
-       [6, 4],
-       [3, 7],
-       [7, 2]]],
-     ['edgelist',
-      'G980',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [1, 4],
-       [5, 3],
-       [6, 1],
-       [6, 5],
-       [5, 2],
-       [4, 5],
-       [6, 4],
-       [7, 2],
-       [7, 6]]],
-     ['edgelist',
-      'G981',
-      7,
-      [[1, 3],
-       [1, 7],
-       [2, 5],
-       [2, 6],
-       [2, 7],
-       [3, 4],
-       [3, 6],
-       [4, 5],
-       [4, 6],
-       [4, 7],
-       [5, 6],
-       [5, 7]]],
-     ['edgelist',
-      'G982',
-      7,
-      [[1, 6],
-       [1, 7],
-       [2, 4],
-       [2, 5],
-       [2, 7],
-       [3, 4],
-       [3, 5],
-       [3, 6],
-       [4, 5],
-       [4, 7],
-       [5, 6],
-       [6, 7]]],
-     ['edgelist',
-      'G983',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [1, 4],
-       [5, 2],
-       [3, 5],
-       [6, 3],
-       [1, 6],
-       [5, 4],
-       [7, 6],
-       [7, 5],
-       [4, 6]]],
-     ['edgelist',
-      'G984',
-      7,
-      [[1, 3],
-       [1, 7],
-       [2, 3],
-       [2, 5],
-       [2, 6],
-       [3, 4],
-       [4, 5],
-       [4, 6],
-       [4, 7],
-       [5, 6],
-       [5, 7],
-       [6, 7]]],
-     ['edgelist',
-      'G985',
-      7,
-      [[1, 3],
-       [1, 7],
-       [2, 4],
-       [2, 5],
-       [2, 6],
-       [3, 5],
-       [3, 6],
-       [4, 5],
-       [4, 6],
-       [4, 7],
-       [5, 7],
-       [6, 7]]],
-     ['edgelist',
-      'G986',
-      7,
-      [[1, 3],
-       [1, 7],
-       [2, 4],
-       [2, 5],
-       [2, 6],
-       [3, 6],
-       [3, 7],
-       [4, 5],
-       [4, 6],
-       [4, 7],
-       [5, 6],
-       [5, 7]]],
-     ['edgelist',
-      'G987',
-      7,
-      [[1, 6],
-       [1, 7],
-       [2, 4],
-       [2, 5],
-       [2, 7],
-       [3, 4],
-       [3, 5],
-       [3, 7],
-       [4, 5],
-       [4, 6],
-       [5, 6],
-       [6, 7]]],
-     ['edgelist',
-      'G988',
-      7,
-      [[1, 6],
-       [1, 7],
-       [2, 3],
-       [2, 6],
-       [2, 7],
-       [3, 4],
-       [3, 5],
-       [4, 5],
-       [4, 6],
-       [4, 7],
-       [5, 6],
-       [5, 7]]],
-     ['edgelist',
-      'G989',
-      7,
-      [[4, 1],
-       [3, 4],
-       [5, 3],
-       [1, 5],
-       [6, 2],
-       [6, 3],
-       [7, 2],
-       [7, 1],
-       [4, 7],
-       [6, 4],
-       [5, 6],
-       [7, 5]]],
-     ['edgelist',
-      'G990',
-      7,
-      [[1, 6],
-       [1, 7],
-       [2, 3],
-       [2, 4],
-       [2, 5],
-       [3, 4],
-       [3, 5],
-       [4, 6],
-       [4, 7],
-       [5, 6],
-       [5, 7],
-       [6, 7]]],
-     ['edgelist',
-      'G991',
-      7,
-      [[1, 2],
-       [1, 3],
-       [2, 6],
-       [2, 7],
-       [3, 4],
-       [3, 5],
-       [4, 5],
-       [4, 6],
-       [4, 7],
-       [5, 6],
-       [5, 7],
-       [6, 7]]],
-     ['edgelist',
-      'G992',
-      7,
-      [[4, 1],
-       [3, 4],
-       [5, 3],
-       [1, 5],
-       [6, 2],
-       [6, 3],
-       [7, 2],
-       [7, 1],
-       [4, 7],
-       [6, 4],
-       [7, 5],
-       [2, 4]]],
-     ['edgelist',
-      'G993',
-      7,
-      [[1, 5],
-       [1, 6],
-       [1, 7],
-       [2, 4],
-       [2, 6],
-       [2, 7],
-       [3, 4],
-       [3, 5],
-       [3, 6],
-       [4, 7],
-       [5, 7],
-       [6, 7]]],
-     ['edgelist',
-      'G994',
-      7,
-      [[3, 4],
-       [5, 3],
-       [6, 3],
-       [5, 2],
-       [7, 1],
-       [4, 1],
-       [4, 2],
-       [7, 4],
-       [6, 7],
-       [2, 6],
-       [5, 1],
-       [4, 5]]],
-     ['edgelist',
-      'G995',
-      7,
-      [[3, 4],
-       [5, 3],
-       [5, 2],
-       [3, 6],
-       [7, 1],
-       [7, 5],
-       [4, 2],
-       [7, 4],
-       [1, 4],
-       [2, 6],
-       [5, 1],
-       [6, 4]]],
-     ['edgelist',
-      'G996',
-      7,
-      [[1, 5],
-       [1, 6],
-       [1, 7],
-       [2, 3],
-       [2, 4],
-       [2, 7],
-       [3, 4],
-       [3, 7],
-       [4, 6],
-       [5, 6],
-       [5, 7],
-       [6, 7]]],
-     ['edgelist',
-      'G997',
-      7,
-      [[4, 1],
-       [3, 4],
-       [5, 3],
-       [1, 5],
-       [6, 2],
-       [6, 3],
-       [7, 2],
-       [7, 1],
-       [4, 7],
-       [2, 4],
-       [7, 5],
-       [6, 5]]],
-     ['edgelist',
-      'G998',
-      7,
-      [[7, 4],
-       [2, 3],
-       [3, 4],
-       [1, 4],
-       [5, 3],
-       [6, 1],
-       [1, 7],
-       [5, 2],
-       [4, 5],
-       [7, 6],
-       [6, 2],
-       [1, 5]]],
-     ['edgelist',
-      'G999',
-      7,
-      [[1, 4],
-       [1, 6],
-       [1, 7],
-       [2, 3],
-       [2, 6],
-       [2, 7],
-       [3, 5],
-       [3, 7],
-       [4, 5],
-       [4, 6],
-       [5, 6],
-       [5, 7]]],
-     ['edgelist',
-      'G1000',
-      7,
-      [[1, 4],
-       [1, 6],
-       [1, 7],
-       [2, 3],
-       [2, 5],
-       [2, 7],
-       [3, 4],
-       [3, 6],
-       [4, 5],
-       [5, 6],
-       [5, 7],
-       [6, 7]]],
-     ['edgelist',
-      'G1001',
-      7,
-      [[1, 4],
-       [1, 6],
-       [1, 7],
-       [2, 3],
-       [2, 6],
-       [2, 7],
-       [3, 4],
-       [3, 5],
-       [4, 5],
-       [5, 6],
-       [5, 7],
-       [6, 7]]],
-     ['edgelist',
-      'G1002',
-      7,
-      [[1, 5],
-       [4, 1],
-       [2, 4],
-       [5, 2],
-       [2, 1],
-       [5, 6],
-       [3, 5],
-       [7, 3],
-       [6, 7],
-       [3, 6],
-       [4, 3],
-       [7, 4]]],
-     ['edgelist',
-      'G1003',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [1, 4],
-       [5, 1],
-       [5, 2],
-       [6, 3],
-       [6, 5],
-       [7, 5],
-       [7, 4],
-       [7, 3],
-       [6, 4]]],
-     ['edgelist',
-      'G1004',
-      7,
-      [[1, 5],
-       [1, 6],
-       [1, 7],
-       [2, 4],
-       [2, 6],
-       [2, 7],
-       [3, 4],
-       [3, 6],
-       [3, 7],
-       [4, 5],
-       [5, 6],
-       [5, 7]]],
-     ['edgelist',
-      'G1005',
-      7,
-      [[4, 1],
-       [5, 3],
-       [4, 2],
-       [5, 1],
-       [6, 3],
-       [6, 2],
-       [5, 4],
-       [6, 5],
-       [4, 6],
-       [7, 2],
-       [1, 7],
-       [3, 7]]],
-     ['edgelist',
-      'G1006',
-      7,
-      [[2, 1],
-       [5, 2],
-       [1, 5],
-       [6, 1],
-       [7, 6],
-       [2, 7],
-       [4, 5],
-       [6, 4],
-       [3, 4],
-       [6, 3],
-       [7, 4],
-       [3, 7]]],
-     ['edgelist',
-      'G1007',
-      7,
-      [[1, 2],
-       [3, 1],
-       [3, 4],
-       [4, 5],
-       [1, 5],
-       [1, 6],
-       [7, 2],
-       [5, 7],
-       [7, 6],
-       [3, 7],
-       [4, 2],
-       [6, 4]]],
-     ['edgelist',
-      'G1008',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [5, 6],
-       [1, 6],
-       [7, 1],
-       [7, 2],
-       [7, 3],
-       [7, 4],
-       [7, 5],
-       [7, 6]]],
-     ['edgelist',
-      'G1009',
-      7,
-      [[4, 7],
-       [2, 3],
-       [1, 7],
-       [1, 4],
-       [5, 1],
-       [5, 2],
-       [5, 3],
-       [5, 4],
-       [6, 2],
-       [3, 6],
-       [5, 6],
-       [7, 5]]],
-     ['edgelist',
-      'G1010',
-      7,
-      [[2, 5],
-       [2, 6],
-       [2, 7],
-       [3, 4],
-       [3, 5],
-       [3, 6],
-       [3, 7],
-       [4, 5],
-       [4, 6],
-       [4, 7],
-       [5, 6],
-       [5, 7],
-       [6, 7]]],
-     ['edgelist',
-      'G1011',
-      7,
-      [[2, 4],
-       [2, 5],
-       [2, 6],
-       [2, 7],
-       [3, 4],
-       [3, 5],
-       [3, 6],
-       [3, 7],
-       [4, 6],
-       [4, 7],
-       [5, 6],
-       [5, 7],
-       [6, 7]]],
-     ['edgelist',
-      'G1012',
-      7,
-      [[1, 7],
-       [2, 5],
-       [2, 6],
-       [3, 4],
-       [3, 5],
-       [3, 6],
-       [3, 7],
-       [4, 5],
-       [4, 6],
-       [4, 7],
-       [5, 6],
-       [5, 7],
-       [6, 7]]],
-     ['edgelist',
-      'G1013',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [5, 6],
-       [1, 5],
-       [2, 4],
-       [5, 2],
-       [3, 5],
-       [1, 4],
-       [6, 4],
-       [5, 4],
-       [1, 3],
-       [7, 5]]],
-     ['edgelist',
-      'G1014',
-      7,
-      [[4, 5],
-       [2, 4],
-       [3, 2],
-       [1, 3],
-       [6, 1],
-       [5, 6],
-       [3, 5],
-       [6, 2],
-       [1, 4],
-       [2, 5],
-       [1, 2],
-       [1, 5],
-       [2, 7]]],
-     ['edgelist',
-      'G1015',
-      7,
-      [[1, 2],
-       [1, 3],
-       [1, 4],
-       [1, 5],
-       [1, 6],
-       [1, 7],
-       [3, 4],
-       [3, 5],
-       [3, 6],
-       [3, 7],
-       [4, 7],
-       [5, 6],
-       [6, 7]]],
-     ['edgelist',
-      'G1016',
-      7,
-      [[1, 7],
-       [2, 5],
-       [2, 6],
-       [2, 7],
-       [3, 4],
-       [3, 5],
-       [3, 6],
-       [4, 5],
-       [4, 6],
-       [4, 7],
-       [5, 6],
-       [5, 7],
-       [6, 7]]],
-     ['edgelist',
-      'G1017',
-      7,
-      [[1, 4],
-       [2, 5],
-       [2, 6],
-       [2, 7],
-       [3, 5],
-       [3, 6],
-       [3, 7],
-       [4, 5],
-       [4, 6],
-       [4, 7],
-       [5, 6],
-       [5, 7],
-       [6, 7]]],
-     ['edgelist',
-      'G1018',
-      7,
-      [[1, 2],
-       [1, 3],
-       [1, 4],
-       [1, 5],
-       [1, 6],
-       [1, 7],
-       [3, 6],
-       [3, 7],
-       [4, 5],
-       [4, 6],
-       [4, 7],
-       [5, 6],
-       [5, 7]]],
-     ['edgelist',
-      'G1019',
-      7,
-      [[1, 7],
-       [2, 5],
-       [2, 6],
-       [2, 7],
-       [3, 4],
-       [3, 5],
-       [3, 6],
-       [3, 7],
-       [4, 5],
-       [4, 6],
-       [4, 7],
-       [5, 6],
-       [6, 7]]],
-     ['edgelist',
-      'G1020',
-      7,
-      [[1, 7],
-       [2, 4],
-       [2, 5],
-       [2, 6],
-       [3, 4],
-       [3, 5],
-       [3, 6],
-       [3, 7],
-       [4, 6],
-       [4, 7],
-       [5, 6],
-       [5, 7],
-       [6, 7]]],
-     ['edgelist',
-      'G1021',
-      7,
-      [[2, 6],
-       [5, 2],
-       [1, 5],
-       [6, 1],
-       [3, 6],
-       [5, 3],
-       [4, 5],
-       [6, 4],
-       [1, 2],
-       [3, 1],
-       [4, 3],
-       [5, 6],
-       [2, 7]]],
-     ['edgelist',
-      'G1022',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [5, 6],
-       [1, 5],
-       [2, 4],
-       [5, 2],
-       [3, 5],
-       [1, 4],
-       [6, 4],
-       [5, 4],
-       [1, 3],
-       [6, 7]]],
-     ['edgelist',
-      'G1023',
-      7,
-      [[1, 6],
-       [2, 4],
-       [2, 5],
-       [2, 6],
-       [2, 7],
-       [3, 4],
-       [3, 5],
-       [3, 6],
-       [3, 7],
-       [4, 5],
-       [4, 7],
-       [5, 7],
-       [6, 7]]],
-     ['edgelist',
-      'G1024',
-      7,
-      [[1, 7],
-       [2, 4],
-       [2, 5],
-       [2, 6],
-       [2, 7],
-       [3, 4],
-       [3, 5],
-       [3, 6],
-       [3, 7],
-       [4, 6],
-       [4, 7],
-       [5, 6],
-       [5, 7]]],
-     ['edgelist',
-      'G1025',
-      7,
-      [[6, 7],
-       [1, 6],
-       [7, 1],
-       [5, 7],
-       [6, 5],
-       [2, 6],
-       [7, 2],
-       [4, 7],
-       [6, 4],
-       [3, 6],
-       [7, 3],
-       [2, 1],
-       [3, 2]]],
-     ['edgelist',
-      'G1026',
-      7,
-      [[1, 2],
-       [1, 3],
-       [1, 4],
-       [1, 5],
-       [1, 6],
-       [1, 7],
-       [2, 3],
-       [2, 4],
-       [2, 5],
-       [2, 6],
-       [3, 4],
-       [3, 5],
-       [3, 7]]],
-     ['edgelist',
-      'G1027',
-      7,
-      [[4, 5],
-       [1, 4],
-       [5, 1],
-       [2, 5],
-       [4, 2],
-       [3, 4],
-       [5, 3],
-       [2, 1],
-       [3, 2],
-       [7, 1],
-       [4, 7],
-       [6, 4],
-       [5, 6]]],
-     ['edgelist',
-      'G1028',
-      7,
-      [[4, 5],
-       [1, 4],
-       [5, 1],
-       [2, 5],
-       [4, 2],
-       [3, 4],
-       [5, 3],
-       [2, 1],
-       [3, 2],
-       [7, 1],
-       [4, 7],
-       [6, 4],
-       [1, 6]]],
-     ['edgelist',
-      'G1029',
-      7,
-      [[4, 5],
-       [1, 4],
-       [5, 1],
-       [2, 5],
-       [4, 2],
-       [3, 4],
-       [5, 3],
-       [2, 1],
-       [3, 2],
-       [7, 5],
-       [1, 7],
-       [6, 1],
-       [4, 6]]],
-     ['edgelist',
-      'G1030',
-      7,
-      [[1, 6],
-       [1, 7],
-       [2, 4],
-       [2, 5],
-       [3, 5],
-       [3, 6],
-       [3, 7],
-       [4, 5],
-       [4, 6],
-       [4, 7],
-       [5, 6],
-       [5, 7],
-       [6, 7]]],
-     ['edgelist',
-      'G1031',
-      7,
-      [[1, 2],
-       [1, 3],
-       [1, 4],
-       [1, 5],
-       [1, 6],
-       [1, 7],
-       [2, 3],
-       [2, 4],
-       [2, 5],
-       [3, 4],
-       [3, 5],
-       [4, 6],
-       [5, 7]]],
-     ['edgelist',
-      'G1032',
-      7,
-      [[1, 2],
-       [1, 3],
-       [1, 4],
-       [1, 5],
-       [2, 3],
-       [2, 4],
-       [2, 5],
-       [3, 4],
-       [3, 5],
-       [4, 5],
-       [6, 2],
-       [7, 6],
-       [2, 7]]],
-     ['edgelist',
-      'G1033',
-      7,
-      [[1, 5],
-       [1, 7],
-       [2, 4],
-       [2, 6],
-       [3, 4],
-       [3, 5],
-       [3, 6],
-       [3, 7],
-       [4, 6],
-       [4, 7],
-       [5, 6],
-       [5, 7],
-       [6, 7]]],
-     ['edgelist',
-      'G1034',
-      7,
-      [[1, 6],
-       [1, 7],
-       [2, 5],
-       [2, 7],
-       [3, 4],
-       [3, 5],
-       [3, 6],
-       [3, 7],
-       [4, 5],
-       [4, 6],
-       [4, 7],
-       [5, 6],
-       [6, 7]]],
-     ['edgelist',
-      'G1035',
-      7,
-      [[1, 6],
-       [1, 7],
-       [2, 4],
-       [2, 5],
-       [3, 4],
-       [3, 5],
-       [3, 6],
-       [3, 7],
-       [4, 6],
-       [4, 7],
-       [5, 6],
-       [5, 7],
-       [6, 7]]],
-     ['edgelist',
-      'G1036',
-      7,
-      [[1, 2],
-       [1, 3],
-       [1, 4],
-       [1, 5],
-       [2, 3],
-       [2, 4],
-       [2, 5],
-       [3, 4],
-       [3, 5],
-       [4, 5],
-       [6, 4],
-       [7, 6],
-       [5, 7]]],
-     ['edgelist',
-      'G1037',
-      7,
-      [[1, 6],
-       [1, 7],
-       [2, 6],
-       [2, 7],
-       [3, 4],
-       [3, 5],
-       [3, 6],
-       [3, 7],
-       [4, 5],
-       [4, 6],
-       [4, 7],
-       [5, 6],
-       [5, 7]]],
-     ['edgelist',
-      'G1038',
-      7,
-      [[2, 4],
-       [3, 2],
-       [1, 3],
-       [6, 1],
-       [5, 6],
-       [4, 5],
-       [6, 4],
-       [3, 6],
-       [2, 1],
-       [5, 2],
-       [7, 2],
-       [7, 6],
-       [6, 2]]],
-     ['edgelist',
-      'G1039',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [1, 4],
-       [5, 1],
-       [5, 2],
-       [5, 3],
-       [5, 4],
-       [6, 5],
-       [1, 6],
-       [7, 1],
-       [4, 7],
-       [7, 5]]],
-     ['edgelist',
-      'G1040',
-      7,
-      [[2, 4],
-       [3, 2],
-       [1, 3],
-       [6, 1],
-       [5, 6],
-       [4, 5],
-       [6, 4],
-       [3, 6],
-       [2, 1],
-       [5, 2],
-       [7, 2],
-       [6, 2],
-       [3, 7]]],
-     ['edgelist',
-      'G1041',
-      7,
-      [[1, 2],
-       [1, 3],
-       [1, 4],
-       [1, 5],
-       [1, 6],
-       [1, 7],
-       [2, 3],
-       [2, 4],
-       [2, 5],
-       [2, 6],
-       [3, 4],
-       [3, 5],
-       [6, 7]]],
-     ['edgelist',
-      'G1042',
-      7,
-      [[2, 1],
-       [3, 2],
-       [5, 3],
-       [2, 5],
-       [4, 2],
-       [1, 4],
-       [3, 4],
-       [6, 3],
-       [2, 6],
-       [1, 6],
-       [7, 1],
-       [2, 7],
-       [3, 7]]],
-     ['edgelist',
-      'G1043',
-      7,
-      [[3, 6],
-       [7, 3],
-       [6, 7],
-       [5, 6],
-       [4, 5],
-       [1, 4],
-       [5, 1],
-       [2, 5],
-       [4, 2],
-       [7, 4],
-       [3, 2],
-       [5, 3],
-       [4, 3]]],
-     ['edgelist',
-      'G1044',
-      7,
-      [[1, 4],
-       [1, 7],
-       [2, 5],
-       [2, 6],
-       [2, 7],
-       [3, 5],
-       [3, 6],
-       [3, 7],
-       [4, 5],
-       [4, 6],
-       [5, 6],
-       [5, 7],
-       [6, 7]]],
-     ['edgelist',
-      'G1045',
-      7,
-      [[3, 5],
-       [4, 3],
-       [2, 4],
-       [5, 2],
-       [1, 5],
-       [4, 1],
-       [7, 4],
-       [2, 7],
-       [6, 2],
-       [5, 6],
-       [7, 5],
-       [4, 6],
-       [2, 3]]],
-     ['edgelist',
-      'G1046',
-      7,
-      [[1, 2],
-       [1, 3],
-       [1, 4],
-       [1, 5],
-       [1, 6],
-       [1, 7],
-       [2, 3],
-       [2, 4],
-       [2, 5],
-       [3, 5],
-       [3, 6],
-       [4, 6],
-       [4, 7]]],
-     ['edgelist',
-      'G1047',
-      7,
-      [[1, 2],
-       [1, 3],
-       [1, 4],
-       [1, 5],
-       [1, 6],
-       [1, 7],
-       [2, 3],
-       [2, 4],
-       [2, 5],
-       [3, 4],
-       [3, 5],
-       [4, 6],
-       [6, 7]]],
-     ['edgelist',
-      'G1048',
-      7,
-      [[1, 2],
-       [1, 3],
-       [1, 4],
-       [1, 5],
-       [1, 6],
-       [1, 7],
-       [2, 3],
-       [2, 4],
-       [2, 5],
-       [3, 4],
-       [3, 6],
-       [4, 7],
-       [5, 6]]],
-     ['edgelist',
-      'G1049',
-      7,
-      [[1, 2],
-       [1, 3],
-       [1, 4],
-       [1, 5],
-       [1, 6],
-       [1, 7],
-       [2, 3],
-       [2, 4],
-       [2, 7],
-       [3, 5],
-       [3, 6],
-       [4, 5],
-       [4, 6]]],
-     ['edgelist',
-      'G1050',
-      7,
-      [[1, 3],
-       [1, 7],
-       [2, 5],
-       [2, 6],
-       [2, 7],
-       [3, 4],
-       [3, 6],
-       [4, 5],
-       [4, 6],
-       [4, 7],
-       [5, 6],
-       [5, 7],
-       [6, 7]]],
-     ['edgelist',
-      'G1051',
-      7,
-      [[3, 6],
-       [2, 3],
-       [6, 2],
-       [5, 6],
-       [4, 5],
-       [1, 4],
-       [5, 1],
-       [4, 3],
-       [5, 3],
-       [2, 4],
-       [7, 4],
-       [3, 7],
-       [2, 7]]],
-     ['edgelist',
-      'G1052',
-      7,
-      [[1, 5],
-       [1, 7],
-       [2, 5],
-       [2, 6],
-       [2, 7],
-       [3, 4],
-       [3, 6],
-       [3, 7],
-       [4, 5],
-       [4, 6],
-       [4, 7],
-       [5, 6],
-       [6, 7]]],
-     ['edgelist',
-      'G1053',
-      7,
-      [[2, 4],
-       [3, 2],
-       [1, 3],
-       [6, 1],
-       [5, 6],
-       [4, 5],
-       [6, 4],
-       [3, 6],
-       [2, 1],
-       [5, 2],
-       [1, 5],
-       [7, 2],
-       [5, 7]]],
-     ['edgelist',
-      'G1054',
-      7,
-      [[3, 4],
-       [1, 3],
-       [4, 1],
-       [5, 4],
-       [2, 5],
-       [6, 2],
-       [5, 6],
-       [2, 1],
-       [6, 3],
-       [6, 1],
-       [7, 6],
-       [2, 7],
-       [5, 1]]],
-     ['edgelist',
-      'G1055',
-      7,
-      [[1, 2],
-       [2, 3],
-       [1, 3],
-       [4, 1],
-       [2, 4],
-       [4, 3],
-       [5, 1],
-       [3, 6],
-       [4, 5],
-       [6, 4],
-       [1, 6],
-       [7, 5],
-       [7, 2]]],
-     ['edgelist',
-      'G1056',
-      7,
-      [[3, 4],
-       [1, 3],
-       [4, 1],
-       [5, 4],
-       [2, 5],
-       [6, 2],
-       [5, 6],
-       [2, 1],
-       [6, 3],
-       [7, 3],
-       [6, 7],
-       [1, 6],
-       [2, 3]]],
-     ['edgelist',
-      'G1057',
-      7,
-      [[6, 5],
-       [7, 3],
-       [7, 5],
-       [5, 4],
-       [6, 1],
-       [4, 2],
-       [4, 3],
-       [7, 4],
-       [6, 7],
-       [5, 1],
-       [2, 5],
-       [6, 2],
-       [1, 4]]],
-     ['edgelist',
-      'G1058',
-      7,
-      [[1, 3],
-       [1, 7],
-       [2, 4],
-       [2, 5],
-       [2, 6],
-       [3, 6],
-       [3, 7],
-       [4, 5],
-       [4, 6],
-       [4, 7],
-       [5, 6],
-       [5, 7],
-       [6, 7]]],
-     ['edgelist',
-      'G1059',
-      7,
-      [[2, 6],
-       [5, 2],
-       [1, 5],
-       [6, 1],
-       [3, 6],
-       [5, 3],
-       [4, 5],
-       [6, 4],
-       [1, 2],
-       [3, 1],
-       [4, 3],
-       [7, 6],
-       [7, 5]]],
-     ['edgelist',
-      'G1060',
-      7,
-      [[2, 4],
-       [3, 2],
-       [1, 3],
-       [6, 1],
-       [5, 6],
-       [4, 5],
-       [6, 4],
-       [3, 6],
-       [2, 1],
-       [5, 2],
-       [1, 5],
-       [1, 7],
-       [5, 7]]],
-     ['edgelist',
-      'G1061',
-      7,
-      [[1, 5],
-       [4, 1],
-       [3, 4],
-       [5, 3],
-       [2, 5],
-       [4, 2],
-       [2, 1],
-       [6, 1],
-       [5, 6],
-       [2, 6],
-       [7, 2],
-       [1, 7],
-       [4, 7]]],
-     ['edgelist',
-      'G1062',
-      7,
-      [[1, 6],
-       [1, 7],
-       [2, 3],
-       [2, 6],
-       [2, 7],
-       [3, 4],
-       [3, 5],
-       [4, 5],
-       [4, 6],
-       [4, 7],
-       [5, 6],
-       [5, 7],
-       [6, 7]]],
-     ['edgelist',
-      'G1063',
-      7,
-      [[2, 4],
-       [3, 2],
-       [1, 3],
-       [6, 1],
-       [5, 6],
-       [4, 5],
-       [5, 2],
-       [6, 4],
-       [3, 6],
-       [2, 1],
-       [7, 4],
-       [5, 7],
-       [6, 2]]],
-     ['edgelist',
-      'G1064',
-      7,
-      [[6, 3],
-       [1, 3],
-       [4, 1],
-       [5, 4],
-       [2, 5],
-       [6, 2],
-       [5, 6],
-       [2, 1],
-       [7, 3],
-       [7, 4],
-       [2, 3],
-       [4, 2],
-       [5, 1]]],
-     ['edgelist',
-      'G1065',
-      7,
-      [[2, 1],
-       [3, 2],
-       [1, 3],
-       [1, 4],
-       [4, 3],
-       [7, 3],
-       [2, 7],
-       [6, 2],
-       [7, 6],
-       [5, 7],
-       [6, 5],
-       [1, 6],
-       [5, 1]]],
-     ['edgelist',
-      'G1066',
-      7,
-      [[1, 6],
-       [1, 7],
-       [2, 5],
-       [2, 6],
-       [2, 7],
-       [3, 4],
-       [3, 5],
-       [3, 6],
-       [3, 7],
-       [4, 5],
-       [4, 6],
-       [4, 7],
-       [5, 7]]],
-     ['edgelist',
-      'G1067',
-      7,
-      [[1, 6],
-       [1, 7],
-       [2, 4],
-       [2, 5],
-       [2, 7],
-       [3, 4],
-       [3, 5],
-       [3, 6],
-       [3, 7],
-       [4, 6],
-       [4, 7],
-       [5, 6],
-       [5, 7]]],
-     ['edgelist',
-      'G1068',
-      7,
-      [[1, 2],
-       [2, 3],
-       [5, 2],
-       [4, 2],
-       [1, 5],
-       [3, 4],
-       [1, 4],
-       [3, 1],
-       [6, 1],
-       [7, 6],
-       [5, 7],
-       [4, 6],
-       [5, 3]]],
-     ['edgelist',
-      'G1069',
-      7,
-      [[1, 6],
-       [1, 7],
-       [2, 3],
-       [2, 4],
-       [2, 5],
-       [3, 5],
-       [3, 6],
-       [3, 7],
-       [4, 5],
-       [4, 6],
-       [4, 7],
-       [5, 7],
-       [6, 7]]],
-     ['edgelist',
-      'G1070',
-      7,
-      [[4, 5],
-       [2, 4],
-       [3, 2],
-       [1, 3],
-       [6, 1],
-       [5, 6],
-       [3, 5],
-       [6, 2],
-       [1, 4],
-       [1, 5],
-       [3, 4],
-       [7, 6],
-       [1, 7]]],
-     ['edgelist',
-      'G1071',
-      7,
-      [[6, 3],
-       [1, 3],
-       [4, 1],
-       [5, 4],
-       [2, 5],
-       [6, 2],
-       [5, 6],
-       [2, 1],
-       [7, 3],
-       [7, 4],
-       [3, 4],
-       [6, 1],
-       [5, 1]]],
-     ['edgelist',
-      'G1072',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [6, 5],
-       [1, 5],
-       [6, 1],
-       [6, 2],
-       [6, 3],
-       [6, 4],
-       [7, 4],
-       [7, 5],
-       [5, 3],
-       [1, 4]]],
-     ['edgelist',
-      'G1073',
-      7,
-      [[1, 2],
-       [1, 7],
-       [2, 5],
-       [2, 6],
-       [3, 4],
-       [3, 5],
-       [3, 6],
-       [3, 7],
-       [4, 5],
-       [4, 6],
-       [4, 7],
-       [5, 7],
-       [6, 7]]],
-     ['edgelist',
-      'G1074',
-      7,
-      [[1, 2],
-       [1, 7],
-       [2, 6],
-       [2, 7],
-       [3, 4],
-       [3, 5],
-       [3, 6],
-       [3, 7],
-       [4, 5],
-       [4, 6],
-       [4, 7],
-       [5, 6],
-       [5, 7]]],
-     ['edgelist',
-      'G1075',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [1, 5],
-       [7, 3],
-       [1, 7],
-       [6, 1],
-       [3, 6],
-       [6, 4],
-       [5, 6],
-       [7, 5],
-       [4, 7]]],
-     ['edgelist',
-      'G1076',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [1, 5],
-       [7, 6],
-       [1, 7],
-       [1, 3],
-       [3, 6],
-       [6, 4],
-       [5, 6],
-       [7, 5],
-       [4, 7]]],
-     ['edgelist',
-      'G1077',
-      7,
-      [[4, 5],
-       [1, 4],
-       [5, 1],
-       [4, 7],
-       [4, 2],
-       [3, 4],
-       [5, 3],
-       [2, 1],
-       [3, 2],
-       [6, 3],
-       [4, 6],
-       [7, 3],
-       [6, 7]]],
-     ['edgelist',
-      'G1078',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [1, 5],
-       [6, 1],
-       [6, 2],
-       [6, 3],
-       [6, 4],
-       [6, 5],
-       [7, 6],
-       [4, 7],
-       [5, 7]]],
-     ['edgelist',
-      'G1079',
-      7,
-      [[2, 1],
-       [3, 2],
-       [7, 1],
-       [2, 5],
-       [4, 2],
-       [1, 4],
-       [3, 4],
-       [2, 7],
-       [2, 6],
-       [3, 7],
-       [5, 4],
-       [6, 5],
-       [7, 6]]],
-     ['edgelist',
-      'G1080',
-      7,
-      [[1, 2],
-       [1, 3],
-       [1, 4],
-       [1, 5],
-       [1, 6],
-       [1, 7],
-       [2, 3],
-       [2, 4],
-       [2, 5],
-       [3, 6],
-       [3, 7],
-       [4, 6],
-       [5, 7]]],
-     ['edgelist',
-      'G1081',
-      7,
-      [[1, 7],
-       [2, 3],
-       [3, 4],
-       [1, 4],
-       [5, 3],
-       [6, 1],
-       [7, 4],
-       [5, 2],
-       [4, 5],
-       [7, 6],
-       [2, 6],
-       [4, 6],
-       [2, 4]]],
-     ['edgelist',
-      'G1082',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [1, 4],
-       [5, 1],
-       [5, 2],
-       [7, 5],
-       [5, 4],
-       [6, 5],
-       [6, 3],
-       [7, 1],
-       [4, 7],
-       [4, 6]]],
-     ['edgelist',
-      'G1083',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 7],
-       [1, 5],
-       [7, 6],
-       [1, 7],
-       [7, 5],
-       [3, 6],
-       [6, 4],
-       [5, 6],
-       [2, 6],
-       [7, 2]]],
-     ['edgelist',
-      'G1084',
-      7,
-      [[1, 5],
-       [1, 6],
-       [1, 7],
-       [2, 5],
-       [2, 6],
-       [2, 7],
-       [3, 4],
-       [3, 6],
-       [3, 7],
-       [4, 5],
-       [4, 7],
-       [5, 6],
-       [6, 7]]],
-     ['edgelist',
-      'G1085',
-      7,
-      [[1, 5],
-       [1, 6],
-       [1, 7],
-       [2, 4],
-       [2, 6],
-       [2, 7],
-       [3, 4],
-       [3, 6],
-       [3, 7],
-       [4, 5],
-       [5, 6],
-       [5, 7],
-       [6, 7]]],
-     ['edgelist',
-      'G1086',
-      7,
-      [[3, 4],
-       [6, 3],
-       [7, 6],
-       [4, 7],
-       [5, 4],
-       [6, 5],
-       [1, 6],
-       [3, 1],
-       [2, 3],
-       [1, 2],
-       [6, 2],
-       [5, 3],
-       [7, 5]]],
-     ['edgelist',
-      'G1087',
-      7,
-      [[3, 2],
-       [1, 6],
-       [7, 1],
-       [5, 7],
-       [6, 5],
-       [2, 6],
-       [7, 2],
-       [4, 7],
-       [6, 4],
-       [3, 6],
-       [7, 3],
-       [2, 1],
-       [4, 5]]],
-     ['edgelist',
-      'G1088',
-      7,
-      [[1, 2],
-       [3, 1],
-       [3, 4],
-       [4, 5],
-       [1, 5],
-       [1, 6],
-       [7, 2],
-       [5, 7],
-       [7, 6],
-       [3, 7],
-       [4, 2],
-       [6, 4],
-       [7, 1]]],
-     ['edgelist',
-      'G1089',
-      7,
-      [[1, 5],
-       [1, 6],
-       [1, 7],
-       [2, 3],
-       [2, 6],
-       [2, 7],
-       [3, 4],
-       [3, 7],
-       [4, 5],
-       [4, 6],
-       [4, 7],
-       [5, 6],
-       [5, 7]]],
-     ['edgelist',
-      'G1090',
-      7,
-      [[3, 4],
-       [1, 3],
-       [4, 1],
-       [5, 4],
-       [5, 7],
-       [6, 2],
-       [5, 6],
-       [4, 2],
-       [6, 3],
-       [7, 1],
-       [7, 2],
-       [3, 2],
-       [5, 2]]],
-     ['edgelist',
-      'G1091',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [1, 4],
-       [5, 1],
-       [5, 2],
-       [5, 4],
-       [6, 5],
-       [6, 3],
-       [6, 2],
-       [7, 6],
-       [2, 7],
-       [3, 7]]],
-     ['edgelist',
-      'G1092',
-      7,
-      [[1, 5],
-       [1, 6],
-       [1, 7],
-       [2, 5],
-       [2, 6],
-       [2, 7],
-       [3, 4],
-       [3, 6],
-       [3, 7],
-       [4, 5],
-       [4, 6],
-       [4, 7],
-       [5, 7]]],
-     ['edgelist',
-      'G1093',
-      7,
-      [[4, 1],
-       [3, 4],
-       [5, 3],
-       [1, 5],
-       [6, 2],
-       [6, 3],
-       [7, 2],
-       [7, 1],
-       [4, 7],
-       [2, 4],
-       [7, 5],
-       [6, 5],
-       [6, 4]]],
-     ['edgelist',
-      'G1094',
-      7,
-      [[1, 5],
-       [1, 6],
-       [1, 7],
-       [2, 3],
-       [2, 5],
-       [2, 6],
-       [3, 4],
-       [3, 7],
-       [4, 5],
-       [4, 6],
-       [4, 7],
-       [5, 7],
-       [6, 7]]],
-     ['edgelist',
-      'G1095',
-      7,
-      [[1, 5],
-       [1, 6],
-       [1, 7],
-       [2, 4],
-       [2, 6],
-       [2, 7],
-       [3, 4],
-       [3, 5],
-       [3, 6],
-       [4, 5],
-       [4, 7],
-       [5, 7],
-       [6, 7]]],
-     ['edgelist',
-      'G1096',
-      7,
-      [[1, 3],
-       [1, 6],
-       [1, 7],
-       [2, 3],
-       [2, 5],
-       [2, 7],
-       [3, 4],
-       [4, 5],
-       [4, 6],
-       [4, 7],
-       [5, 6],
-       [5, 7],
-       [6, 7]]],
-     ['edgelist',
-      'G1097',
-      7,
-      [[4, 5],
-       [6, 1],
-       [4, 6],
-       [1, 7],
-       [7, 5],
-       [3, 4],
-       [5, 3],
-       [2, 1],
-       [3, 2],
-       [2, 7],
-       [6, 2],
-       [3, 6],
-       [7, 3]]],
-     ['edgelist',
-      'G1098',
-      7,
-      [[1, 3],
-       [1, 6],
-       [1, 7],
-       [2, 3],
-       [2, 4],
-       [2, 5],
-       [3, 7],
-       [4, 5],
-       [4, 6],
-       [4, 7],
-       [5, 6],
-       [5, 7],
-       [6, 7]]],
-     ['edgelist',
-      'G1099',
-      7,
-      [[4, 1],
-       [3, 4],
-       [5, 3],
-       [1, 5],
-       [6, 4],
-       [6, 3],
-       [6, 5],
-       [2, 4],
-       [2, 1],
-       [5, 2],
-       [7, 1],
-       [4, 7],
-       [2, 7]]],
-     ['edgelist',
-      'G1100',
-      7,
-      [[3, 4],
-       [1, 3],
-       [4, 1],
-       [5, 4],
-       [2, 5],
-       [6, 2],
-       [5, 6],
-       [7, 1],
-       [2, 7],
-       [7, 4],
-       [5, 7],
-       [2, 3],
-       [6, 1]]],
-     ['edgelist',
-      'G1101',
-      7,
-      [[1, 5],
-       [1, 6],
-       [1, 7],
-       [2, 3],
-       [2, 4],
-       [2, 7],
-       [3, 4],
-       [3, 6],
-       [3, 7],
-       [4, 5],
-       [4, 6],
-       [5, 6],
-       [5, 7]]],
-     ['edgelist',
-      'G1102',
-      7,
-      [[1, 5],
-       [1, 6],
-       [1, 7],
-       [2, 3],
-       [2, 4],
-       [2, 7],
-       [3, 5],
-       [3, 6],
-       [3, 7],
-       [4, 5],
-       [4, 6],
-       [4, 7],
-       [5, 6]]],
-     ['edgelist',
-      'G1103',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [1, 4],
-       [5, 1],
-       [5, 2],
-       [6, 4],
-       [6, 5],
-       [7, 5],
-       [7, 3],
-       [7, 6],
-       [6, 3],
-       [4, 7]]],
-     ['edgelist',
-      'G1104',
-      7,
-      [[1, 2],
-       [1, 6],
-       [1, 7],
-       [2, 4],
-       [2, 5],
-       [3, 4],
-       [3, 5],
-       [3, 6],
-       [3, 7],
-       [4, 5],
-       [4, 7],
-       [5, 6],
-       [6, 7]]],
-     ['edgelist',
-      'G1105',
-      7,
-      [[1, 2],
-       [1, 6],
-       [1, 7],
-       [2, 4],
-       [2, 5],
-       [3, 4],
-       [3, 5],
-       [3, 6],
-       [3, 7],
-       [4, 6],
-       [4, 7],
-       [5, 6],
-       [5, 7]]],
-     ['edgelist',
-      'G1106',
-      7,
-      [[1, 2],
-       [3, 1],
-       [3, 4],
-       [4, 5],
-       [1, 5],
-       [1, 6],
-       [7, 2],
-       [5, 7],
-       [7, 6],
-       [3, 7],
-       [4, 2],
-       [6, 4],
-       [3, 2]]],
-     ['edgelist',
-      'G1107',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [5, 6],
-       [1, 6],
-       [3, 5],
-       [6, 3],
-       [2, 6],
-       [2, 5],
-       [2, 4],
-       [3, 1],
-       [5, 1],
-       [6, 4]]],
-     ['edgelist',
-      'G1108',
-      7,
-      [[4, 5],
-       [2, 4],
-       [3, 2],
-       [1, 3],
-       [6, 1],
-       [5, 6],
-       [3, 5],
-       [6, 2],
-       [1, 4],
-       [2, 5],
-       [1, 2],
-       [3, 4],
-       [1, 5],
-       [2, 7]]],
-     ['edgelist',
-      'G1109',
-      7,
-      [[1, 7],
-       [2, 4],
-       [2, 5],
-       [2, 6],
-       [3, 4],
-       [3, 5],
-       [3, 6],
-       [3, 7],
-       [4, 5],
-       [4, 6],
-       [4, 7],
-       [5, 6],
-       [5, 7],
-       [6, 7]]],
-     ['edgelist',
-      'G1110',
-      7,
-      [[1, 2],
-       [1, 3],
-       [1, 4],
-       [1, 5],
-       [1, 6],
-       [1, 7],
-       [3, 5],
-       [3, 6],
-       [3, 7],
-       [4, 5],
-       [4, 6],
-       [4, 7],
-       [5, 7],
-       [6, 7]]],
-     ['edgelist',
-      'G1111',
-      7,
-      [[1, 7],
-       [2, 4],
-       [2, 5],
-       [2, 6],
-       [2, 7],
-       [3, 4],
-       [3, 5],
-       [3, 6],
-       [3, 7],
-       [4, 5],
-       [4, 6],
-       [5, 6],
-       [5, 7],
-       [6, 7]]],
-     ['edgelist',
-      'G1112',
-      7,
-      [[1, 4],
-       [2, 3],
-       [2, 5],
-       [2, 6],
-       [2, 7],
-       [3, 5],
-       [3, 6],
-       [3, 7],
-       [4, 5],
-       [4, 6],
-       [4, 7],
-       [5, 6],
-       [5, 7],
-       [6, 7]]],
-     ['edgelist',
-      'G1113',
-      7,
-      [[1, 2],
-       [1, 3],
-       [1, 4],
-       [1, 5],
-       [2, 3],
-       [2, 4],
-       [2, 5],
-       [3, 4],
-       [3, 5],
-       [4, 5],
-       [4, 7],
-       [6, 4],
-       [5, 6],
-       [7, 5]]],
-     ['edgelist',
-      'G1114',
-      7,
-      [[1, 2],
-       [1, 3],
-       [1, 4],
-       [1, 5],
-       [2, 3],
-       [2, 4],
-       [2, 5],
-       [3, 4],
-       [3, 5],
-       [4, 5],
-       [7, 3],
-       [2, 7],
-       [6, 2],
-       [1, 6]]],
-     ['edgelist',
-      'G1115',
-      7,
-      [[1, 2],
-       [1, 3],
-       [1, 4],
-       [1, 5],
-       [2, 3],
-       [2, 4],
-       [2, 5],
-       [3, 4],
-       [3, 5],
-       [4, 5],
-       [6, 3],
-       [4, 6],
-       [7, 5],
-       [1, 7]]],
-     ['edgelist',
-      'G1116',
-      7,
-      [[4, 5],
-       [2, 4],
-       [3, 2],
-       [1, 3],
-       [6, 1],
-       [5, 6],
-       [3, 5],
-       [6, 2],
-       [1, 4],
-       [2, 5],
-       [1, 2],
-       [1, 5],
-       [7, 5],
-       [1, 7]]],
-     ['edgelist',
-      'G1117',
-      7,
-      [[1, 2],
-       [1, 3],
-       [1, 4],
-       [1, 5],
-       [1, 6],
-       [1, 7],
-       [2, 3],
-       [2, 4],
-       [2, 5],
-       [2, 6],
-       [2, 7],
-       [4, 5],
-       [4, 6],
-       [5, 7]]],
-     ['edgelist',
-      'G1118',
-      7,
-      [[1, 2],
-       [1, 3],
-       [1, 4],
-       [1, 5],
-       [1, 6],
-       [1, 7],
-       [2, 7],
-       [3, 6],
-       [3, 7],
-       [4, 5],
-       [4, 6],
-       [5, 6],
-       [5, 7],
-       [6, 7]]],
-     ['edgelist',
-      'G1119',
-      7,
-      [[1, 2],
-       [1, 3],
-       [1, 4],
-       [1, 5],
-       [1, 6],
-       [1, 7],
-       [2, 5],
-       [3, 6],
-       [3, 7],
-       [4, 6],
-       [4, 7],
-       [5, 6],
-       [5, 7],
-       [6, 7]]],
-     ['edgelist',
-      'G1120',
-      7,
-      [[4, 5],
-       [2, 4],
-       [3, 2],
-       [1, 3],
-       [6, 1],
-       [5, 6],
-       [1, 2],
-       [6, 2],
-       [1, 5],
-       [2, 5],
-       [6, 4],
-       [3, 6],
-       [7, 5],
-       [1, 7]]],
-     ['edgelist',
-      'G1121',
-      7,
-      [[2, 4],
-       [3, 2],
-       [1, 3],
-       [6, 1],
-       [5, 6],
-       [4, 5],
-       [6, 4],
-       [3, 6],
-       [2, 1],
-       [5, 2],
-       [7, 2],
-       [6, 2],
-       [3, 7],
-       [1, 5]]],
-     ['edgelist',
-      'G1122',
-      7,
-      [[1, 2],
-       [1, 3],
-       [1, 4],
-       [1, 5],
-       [1, 6],
-       [1, 7],
-       [2, 7],
-       [3, 6],
-       [3, 7],
-       [4, 5],
-       [4, 6],
-       [4, 7],
-       [5, 6],
-       [5, 7]]],
-     ['edgelist',
-      'G1123',
-      7,
-      [[3, 4],
-       [5, 3],
-       [7, 4],
-       [5, 1],
-       [7, 1],
-       [4, 5],
-       [4, 2],
-       [6, 5],
-       [6, 1],
-       [1, 4],
-       [2, 6],
-       [6, 4],
-       [7, 5],
-       [7, 2]]],
-     ['edgelist',
-      'G1124',
-      7,
-      [[1, 2],
-       [1, 3],
-       [1, 4],
-       [1, 5],
-       [2, 3],
-       [2, 4],
-       [2, 5],
-       [3, 4],
-       [3, 5],
-       [4, 5],
-       [6, 4],
-       [7, 6],
-       [5, 7],
-       [6, 5]]],
-     ['edgelist',
-      'G1125',
-      7,
-      [[4, 2],
-       [2, 5],
-       [3, 4],
-       [4, 5],
-       [1, 5],
-       [2, 6],
-       [1, 2],
-       [1, 3],
-       [3, 6],
-       [6, 4],
-       [5, 6],
-       [2, 3],
-       [7, 3],
-       [6, 7]]],
-     ['edgelist',
-      'G1126',
-      7,
-      [[1, 4],
-       [1, 7],
-       [2, 5],
-       [2, 6],
-       [2, 7],
-       [3, 4],
-       [3, 5],
-       [3, 6],
-       [3, 7],
-       [4, 5],
-       [4, 6],
-       [5, 6],
-       [5, 7],
-       [6, 7]]],
-     ['edgelist',
-      'G1127',
-      7,
-      [[1, 4],
-       [1, 7],
-       [2, 3],
-       [2, 5],
-       [2, 6],
-       [3, 5],
-       [3, 6],
-       [3, 7],
-       [4, 5],
-       [4, 6],
-       [4, 7],
-       [5, 6],
-       [5, 7],
-       [6, 7]]],
-     ['edgelist',
-      'G1128',
-      7,
-      [[1, 6],
-       [1, 7],
-       [2, 5],
-       [2, 6],
-       [2, 7],
-       [3, 4],
-       [3, 5],
-       [3, 6],
-       [3, 7],
-       [4, 5],
-       [4, 6],
-       [4, 7],
-       [5, 6],
-       [5, 7]]],
-     ['edgelist',
-      'G1129',
-      7,
-      [[1, 2],
-       [1, 7],
-       [2, 5],
-       [2, 6],
-       [3, 4],
-       [3, 5],
-       [3, 6],
-       [3, 7],
-       [4, 5],
-       [4, 6],
-       [4, 7],
-       [5, 6],
-       [5, 7],
-       [6, 7]]],
-     ['edgelist',
-      'G1130',
-      7,
-      [[1, 6],
-       [1, 7],
-       [2, 3],
-       [2, 4],
-       [2, 5],
-       [3, 5],
-       [3, 6],
-       [3, 7],
-       [4, 5],
-       [4, 6],
-       [4, 7],
-       [5, 6],
-       [5, 7],
-       [6, 7]]],
-     ['edgelist',
-      'G1131',
-      7,
-      [[1, 2],
-       [1, 3],
-       [1, 4],
-       [1, 5],
-       [2, 3],
-       [2, 4],
-       [2, 5],
-       [3, 4],
-       [3, 5],
-       [5, 7],
-       [6, 3],
-       [2, 6],
-       [1, 6],
-       [7, 4]]],
-     ['edgelist',
-      'G1132',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [1, 5],
-       [6, 1],
-       [6, 2],
-       [6, 3],
-       [6, 4],
-       [6, 5],
-       [5, 3],
-       [4, 1],
-       [7, 2],
-       [6, 7]]],
-     ['edgelist',
-      'G1133',
-      7,
-      [[1, 5],
-       [1, 7],
-       [2, 3],
-       [2, 4],
-       [2, 6],
-       [2, 7],
-       [3, 4],
-       [3, 6],
-       [3, 7],
-       [4, 5],
-       [4, 6],
-       [5, 6],
-       [5, 7],
-       [6, 7]]],
-     ['edgelist',
-      'G1134',
-      7,
-      [[1, 5],
-       [1, 7],
-       [2, 4],
-       [2, 5],
-       [2, 6],
-       [2, 7],
-       [3, 4],
-       [3, 5],
-       [3, 6],
-       [3, 7],
-       [4, 6],
-       [4, 7],
-       [5, 6],
-       [6, 7]]],
-     ['edgelist',
-      'G1135',
-      7,
-      [[1, 6],
-       [1, 7],
-       [2, 4],
-       [2, 5],
-       [2, 6],
-       [2, 7],
-       [3, 4],
-       [3, 5],
-       [3, 6],
-       [3, 7],
-       [4, 5],
-       [4, 7],
-       [5, 6],
-       [6, 7]]],
-     ['edgelist',
-      'G1136',
-      7,
-      [[3, 4],
-       [1, 3],
-       [4, 1],
-       [5, 4],
-       [2, 5],
-       [6, 2],
-       [2, 3],
-       [6, 3],
-       [5, 1],
-       [4, 2],
-       [6, 1],
-       [7, 6],
-       [7, 5],
-       [1, 2]]],
-     ['edgelist',
-      'G1137',
-      7,
-      [[3, 4],
-       [1, 3],
-       [4, 1],
-       [5, 4],
-       [2, 5],
-       [6, 2],
-       [5, 6],
-       [6, 3],
-       [7, 1],
-       [7, 2],
-       [6, 1],
-       [2, 3],
-       [4, 2],
-       [5, 1]]],
-     ['edgelist',
-      'G1138',
-      7,
-      [[6, 7],
-       [1, 6],
-       [7, 1],
-       [5, 7],
-       [6, 5],
-       [2, 6],
-       [7, 2],
-       [4, 7],
-       [6, 4],
-       [3, 6],
-       [7, 3],
-       [2, 1],
-       [3, 2],
-       [4, 5]]],
-     ['edgelist',
-      'G1139',
-      7,
-      [[1, 2],
-       [1, 3],
-       [1, 4],
-       [1, 5],
-       [1, 6],
-       [1, 7],
-       [2, 6],
-       [2, 7],
-       [3, 6],
-       [3, 7],
-       [4, 5],
-       [4, 7],
-       [5, 6],
-       [6, 7]]],
-     ['edgelist',
-      'G1140',
-      7,
-      [[1, 2],
-       [3, 1],
-       [3, 4],
-       [4, 5],
-       [1, 5],
-       [1, 6],
-       [7, 2],
-       [5, 7],
-       [7, 6],
-       [3, 7],
-       [4, 2],
-       [6, 4],
-       [7, 1],
-       [4, 7]]],
-     ['edgelist',
-      'G1141',
-      7,
-      [[4, 2],
-       [5, 3],
-       [5, 6],
-       [5, 1],
-       [2, 5],
-       [1, 4],
-       [6, 1],
-       [6, 3],
-       [7, 2],
-       [4, 7],
-       [7, 1],
-       [6, 7],
-       [7, 3],
-       [5, 7]]],
-     ['edgelist',
-      'G1142',
-      7,
-      [[1, 5],
-       [4, 1],
-       [3, 4],
-       [5, 3],
-       [2, 5],
-       [4, 2],
-       [2, 1],
-       [3, 2],
-       [6, 5],
-       [2, 6],
-       [7, 2],
-       [4, 7],
-       [1, 6],
-       [7, 1]]],
-     ['edgelist',
-      'G1143',
-      7,
-      [[4, 5],
-       [5, 3],
-       [2, 6],
-       [5, 1],
-       [2, 5],
-       [6, 4],
-       [4, 1],
-       [6, 3],
-       [7, 5],
-       [1, 7],
-       [4, 7],
-       [3, 7],
-       [6, 7],
-       [2, 7]]],
-     ['edgelist',
-      'G1144',
-      7,
-      [[1, 2],
-       [1, 3],
-       [1, 4],
-       [1, 5],
-       [1, 6],
-       [1, 7],
-       [2, 5],
-       [2, 6],
-       [3, 4],
-       [3, 7],
-       [4, 7],
-       [5, 6],
-       [5, 7],
-       [6, 7]]],
-     ['edgelist',
-      'G1145',
-      7,
-      [[3, 4],
-       [5, 3],
-       [7, 4],
-       [5, 1],
-       [5, 6],
-       [4, 5],
-       [4, 2],
-       [6, 3],
-       [2, 7],
-       [6, 7],
-       [7, 1],
-       [6, 4],
-       [7, 5],
-       [1, 2]]],
-     ['edgelist',
-      'G1146',
-      7,
-      [[1, 5],
-       [1, 6],
-       [1, 7],
-       [2, 4],
-       [2, 6],
-       [2, 7],
-       [3, 4],
-       [3, 5],
-       [3, 7],
-       [4, 5],
-       [4, 6],
-       [5, 6],
-       [5, 7],
-       [6, 7]]],
-     ['edgelist',
-      'G1147',
-      7,
-      [[1, 5],
-       [1, 6],
-       [1, 7],
-       [2, 3],
-       [2, 6],
-       [2, 7],
-       [3, 4],
-       [3, 5],
-       [4, 5],
-       [4, 6],
-       [4, 7],
-       [5, 6],
-       [5, 7],
-       [6, 7]]],
-     ['edgelist',
-      'G1148',
-      7,
-      [[3, 4],
-       [5, 3],
-       [7, 4],
-       [5, 1],
-       [2, 5],
-       [7, 1],
-       [4, 2],
-       [6, 3],
-       [5, 6],
-       [6, 7],
-       [2, 6],
-       [6, 4],
-       [7, 5],
-       [4, 1]]],
-     ['edgelist',
-      'G1149',
-      7,
-      [[4, 2],
-       [5, 3],
-       [1, 4],
-       [5, 1],
-       [2, 5],
-       [6, 4],
-       [6, 1],
-       [6, 3],
-       [7, 5],
-       [2, 7],
-       [7, 4],
-       [1, 7],
-       [7, 6],
-       [3, 7]]],
-     ['edgelist',
-      'G1150',
-      7,
-      [[1, 2],
-       [5, 3],
-       [4, 1],
-       [5, 1],
-       [5, 6],
-       [6, 4],
-       [2, 4],
-       [6, 3],
-       [7, 5],
-       [3, 7],
-       [7, 6],
-       [4, 7],
-       [7, 2],
-       [1, 7]]],
-     ['edgelist',
-      'G1151',
-      7,
-      [[1, 2],
-       [1, 3],
-       [1, 4],
-       [1, 5],
-       [1, 6],
-       [1, 7],
-       [2, 3],
-       [2, 7],
-       [3, 6],
-       [4, 5],
-       [4, 6],
-       [4, 7],
-       [5, 6],
-       [5, 7]]],
-     ['edgelist',
-      'G1152',
-      7,
-      [[1, 2],
-       [1, 3],
-       [1, 4],
-       [1, 5],
-       [1, 6],
-       [1, 7],
-       [2, 6],
-       [2, 7],
-       [3, 4],
-       [3, 5],
-       [4, 6],
-       [4, 7],
-       [5, 6],
-       [5, 7]]],
-     ['edgelist',
-      'G1153',
-      7,
-      [[3, 4],
-       [5, 3],
-       [7, 4],
-       [5, 1],
-       [2, 5],
-       [7, 2],
-       [4, 2],
-       [6, 3],
-       [6, 1],
-       [6, 7],
-       [5, 6],
-       [6, 4],
-       [7, 1],
-       [4, 1]]],
-     ['edgelist',
-      'G1154',
-      7,
-      [[3, 4],
-       [5, 3],
-       [4, 1],
-       [5, 1],
-       [5, 6],
-       [4, 5],
-       [4, 2],
-       [6, 3],
-       [1, 2],
-       [6, 7],
-       [7, 1],
-       [6, 4],
-       [7, 5],
-       [2, 7]]],
-     ['edgelist',
-      'G1155',
-      7,
-      [[1, 5],
-       [1, 6],
-       [1, 7],
-       [2, 4],
-       [2, 6],
-       [2, 7],
-       [3, 4],
-       [3, 5],
-       [3, 6],
-       [3, 7],
-       [4, 5],
-       [4, 7],
-       [5, 6],
-       [6, 7]]],
-     ['edgelist',
-      'G1156',
-      7,
-      [[1, 4],
-       [1, 5],
-       [1, 7],
-       [2, 3],
-       [2, 5],
-       [2, 6],
-       [3, 4],
-       [3, 6],
-       [3, 7],
-       [4, 6],
-       [4, 7],
-       [5, 6],
-       [5, 7],
-       [6, 7]]],
-     ['edgelist',
-      'G1157',
-      7,
-      [[1, 5],
-       [1, 6],
-       [1, 7],
-       [2, 3],
-       [2, 4],
-       [2, 7],
-       [3, 5],
-       [3, 6],
-       [3, 7],
-       [4, 5],
-       [4, 6],
-       [4, 7],
-       [5, 6],
-       [6, 7]]],
-     ['edgelist',
-      'G1158',
-      7,
-      [[1, 2],
-       [1, 6],
-       [1, 7],
-       [2, 5],
-       [2, 7],
-       [3, 4],
-       [3, 5],
-       [3, 6],
-       [3, 7],
-       [4, 5],
-       [4, 6],
-       [4, 7],
-       [5, 6],
-       [6, 7]]],
-     ['edgelist',
-      'G1159',
-      7,
-      [[1, 2],
-       [1, 5],
-       [1, 7],
-       [2, 4],
-       [2, 6],
-       [3, 4],
-       [3, 5],
-       [3, 6],
-       [3, 7],
-       [4, 6],
-       [4, 7],
-       [5, 6],
-       [5, 7],
-       [6, 7]]],
-     ['edgelist',
-      'G1160',
-      7,
-      [[3, 4],
-       [5, 3],
-       [7, 4],
-       [5, 1],
-       [2, 5],
-       [5, 6],
-       [4, 2],
-       [6, 3],
-       [6, 1],
-       [7, 2],
-       [1, 7],
-       [6, 4],
-       [7, 5],
-       [4, 1]]],
-     ['edgelist',
-      'G1161',
-      7,
-      [[1, 2],
-       [1, 6],
-       [1, 7],
-       [2, 4],
-       [2, 5],
-       [3, 4],
-       [3, 5],
-       [3, 6],
-       [3, 7],
-       [4, 6],
-       [4, 7],
-       [5, 6],
-       [5, 7],
-       [6, 7]]],
-     ['edgelist',
-      'G1162',
-      7,
-      [[1, 5],
-       [1, 6],
-       [1, 7],
-       [2, 3],
-       [2, 4],
-       [2, 5],
-       [3, 4],
-       [3, 6],
-       [3, 7],
-       [4, 6],
-       [4, 7],
-       [5, 6],
-       [5, 7],
-       [6, 7]]],
-     ['edgelist',
-      'G1163',
-      7,
-      [[1, 5],
-       [1, 6],
-       [1, 7],
-       [2, 5],
-       [2, 6],
-       [2, 7],
-       [3, 4],
-       [3, 5],
-       [3, 6],
-       [3, 7],
-       [4, 5],
-       [4, 6],
-       [4, 7],
-       [6, 7]]],
-     ['edgelist',
-      'G1164',
-      7,
-      [[3, 4],
-       [5, 3],
-       [7, 4],
-       [5, 1],
-       [5, 6],
-       [4, 6],
-       [4, 2],
-       [6, 3],
-       [4, 1],
-       [2, 5],
-       [7, 1],
-       [2, 7],
-       [7, 5],
-       [1, 2]]],
-     ['edgelist',
-      'G1165',
-      7,
-      [[1, 5],
-       [1, 6],
-       [1, 7],
-       [2, 4],
-       [2, 5],
-       [2, 6],
-       [2, 7],
-       [3, 4],
-       [3, 5],
-       [3, 6],
-       [3, 7],
-       [4, 6],
-       [4, 7],
-       [5, 7]]],
-     ['edgelist',
-      'G1166',
-      7,
-      [[1, 5],
-       [1, 6],
-       [1, 7],
-       [2, 3],
-       [2, 4],
-       [2, 6],
-       [2, 7],
-       [3, 4],
-       [3, 6],
-       [3, 7],
-       [4, 5],
-       [4, 7],
-       [5, 6],
-       [5, 7]]],
-     ['edgelist',
-      'G1167',
-      7,
-      [[1, 5],
-       [1, 6],
-       [1, 7],
-       [2, 3],
-       [2, 4],
-       [2, 6],
-       [2, 7],
-       [3, 4],
-       [3, 5],
-       [3, 7],
-       [4, 5],
-       [4, 6],
-       [5, 7],
-       [6, 7]]],
-     ['edgelist',
-      'G1168',
-      7,
-      [[1, 4],
-       [1, 5],
-       [1, 6],
-       [2, 3],
-       [2, 5],
-       [2, 6],
-       [2, 7],
-       [3, 4],
-       [3, 6],
-       [3, 7],
-       [4, 5],
-       [4, 7],
-       [5, 7],
-       [6, 7]]],
-     ['edgelist',
-      'G1169',
-      7,
-      [[1, 4],
-       [1, 5],
-       [1, 6],
-       [2, 4],
-       [2, 5],
-       [2, 6],
-       [2, 7],
-       [3, 4],
-       [3, 5],
-       [3, 6],
-       [3, 7],
-       [4, 7],
-       [5, 7],
-       [6, 7]]],
-     ['edgelist',
-      'G1170',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [5, 6],
-       [6, 7],
-       [1, 7],
-       [1, 3],
-       [6, 1],
-       [4, 6],
-       [2, 4],
-       [7, 2],
-       [5, 7],
-       [3, 5]]],
-     ['edgelist',
-      'G1171',
-      7,
-      [[1, 4],
-       [1, 5],
-       [1, 6],
-       [1, 7],
-       [2, 4],
-       [2, 5],
-       [2, 6],
-       [2, 7],
-       [3, 4],
-       [3, 5],
-       [3, 6],
-       [3, 7],
-       [4, 7],
-       [5, 6]]],
-     ['edgelist',
-      'G1172',
-      7,
-      [[1, 2],
-       [1, 3],
-       [1, 4],
-       [1, 5],
-       [1, 6],
-       [2, 3],
-       [2, 4],
-       [2, 5],
-       [2, 6],
-       [3, 4],
-       [3, 5],
-       [3, 6],
-       [4, 5],
-       [4, 6],
-       [5, 6]]],
-     ['edgelist',
-      'G1173',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [5, 6],
-       [1, 6],
-       [3, 5],
-       [6, 3],
-       [2, 6],
-       [2, 5],
-       [2, 4],
-       [3, 1],
-       [5, 1],
-       [6, 4],
-       [2, 7]]],
-     ['edgelist',
-      'G1174',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [5, 6],
-       [1, 6],
-       [3, 5],
-       [6, 3],
-       [2, 6],
-       [2, 5],
-       [2, 4],
-       [3, 1],
-       [5, 1],
-       [6, 4],
-       [1, 7]]],
-     ['edgelist',
-      'G1175',
-      7,
-      [[1, 2],
-       [1, 3],
-       [1, 4],
-       [1, 5],
-       [1, 6],
-       [1, 7],
-       [2, 3],
-       [2, 4],
-       [2, 5],
-       [2, 6],
-       [2, 7],
-       [4, 5],
-       [4, 6],
-       [4, 7],
-       [6, 7]]],
-     ['edgelist',
-      'G1176',
-      7,
-      [[1, 2],
-       [1, 3],
-       [1, 4],
-       [1, 5],
-       [1, 6],
-       [1, 7],
-       [2, 6],
-       [2, 7],
-       [3, 5],
-       [4, 5],
-       [4, 6],
-       [4, 7],
-       [5, 6],
-       [5, 7],
-       [6, 7]]],
-     ['edgelist',
-      'G1177',
-      7,
-      [[4, 5],
-       [5, 6],
-       [1, 4],
-       [1, 5],
-       [1, 6],
-       [1, 7],
-       [4, 7],
-       [5, 7],
-       [6, 7],
-       [2, 6],
-       [4, 6],
-       [3, 4],
-       [3, 5],
-       [2, 7],
-       [1, 2]]],
-     ['edgelist',
-      'G1178',
-      7,
-      [[4, 5],
-       [5, 6],
-       [1, 4],
-       [1, 5],
-       [1, 6],
-       [1, 7],
-       [4, 7],
-       [2, 4],
-       [2, 5],
-       [2, 6],
-       [4, 6],
-       [3, 4],
-       [3, 5],
-       [7, 2],
-       [5, 7]]],
-     ['edgelist',
-      'G1179',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [1, 4],
-       [5, 1],
-       [5, 2],
-       [5, 3],
-       [5, 4],
-       [6, 2],
-       [1, 6],
-       [6, 3],
-       [4, 6],
-       [5, 6],
-       [7, 2],
-       [6, 7]]],
-     ['edgelist',
-      'G1180',
-      7,
-      [[5, 4],
-       [5, 6],
-       [6, 4],
-       [1, 2],
-       [1, 6],
-       [1, 4],
-       [3, 5],
-       [2, 6],
-       [2, 4],
-       [7, 6],
-       [4, 7],
-       [7, 1],
-       [2, 7],
-       [7, 3],
-       [5, 7]]],
-     ['edgelist',
-      'G1181',
-      7,
-      [[4, 5],
-       [5, 6],
-       [6, 7],
-       [1, 5],
-       [1, 6],
-       [1, 7],
-       [4, 7],
-       [2, 4],
-       [5, 7],
-       [2, 6],
-       [4, 6],
-       [3, 4],
-       [3, 5],
-       [2, 7],
-       [1, 2]]],
-     ['edgelist',
-      'G1182',
-      7,
-      [[1, 3],
-       [1, 7],
-       [2, 4],
-       [2, 5],
-       [2, 6],
-       [2, 7],
-       [3, 4],
-       [3, 5],
-       [3, 6],
-       [4, 5],
-       [4, 6],
-       [4, 7],
-       [5, 6],
-       [5, 7],
-       [6, 7]]],
-     ['edgelist',
-      'G1183',
-      7,
-      [[7, 2],
-       [5, 6],
-       [1, 4],
-       [1, 5],
-       [1, 6],
-       [1, 7],
-       [4, 7],
-       [2, 4],
-       [2, 5],
-       [2, 6],
-       [4, 6],
-       [3, 4],
-       [3, 5],
-       [6, 7],
-       [5, 7]]],
-     ['edgelist',
-      'G1184',
-      7,
-      [[4, 5],
-       [5, 6],
-       [1, 4],
-       [1, 5],
-       [1, 6],
-       [5, 7],
-       [4, 7],
-       [2, 4],
-       [2, 5],
-       [2, 6],
-       [4, 6],
-       [3, 4],
-       [3, 5],
-       [6, 7],
-       [6, 3]]],
-     ['edgelist',
-      'G1185',
-      7,
-      [[4, 5],
-       [5, 6],
-       [1, 4],
-       [1, 5],
-       [7, 1],
-       [5, 7],
-       [4, 7],
-       [2, 4],
-       [2, 5],
-       [2, 6],
-       [4, 6],
-       [3, 4],
-       [3, 5],
-       [6, 7],
-       [6, 3]]],
-     ['edgelist',
-      'G1186',
-      7,
-      [[1, 2],
-       [2, 3],
-       [1, 3],
-       [4, 1],
-       [2, 4],
-       [3, 4],
-       [6, 2],
-       [4, 6],
-       [5, 4],
-       [3, 5],
-       [7, 3],
-       [4, 7],
-       [7, 2],
-       [1, 6],
-       [5, 1]]],
-     ['edgelist',
-      'G1187',
-      7,
-      [[1, 2],
-       [3, 1],
-       [4, 3],
-       [5, 4],
-       [2, 5],
-       [4, 2],
-       [5, 3],
-       [1, 5],
-       [4, 1],
-       [7, 4],
-       [5, 7],
-       [6, 5],
-       [4, 6],
-       [7, 3],
-       [6, 2]]],
-     ['edgelist',
-      'G1188',
-      7,
-      [[1, 2],
-       [1, 3],
-       [1, 4],
-       [1, 5],
-       [2, 3],
-       [2, 4],
-       [2, 5],
-       [3, 4],
-       [3, 5],
-       [4, 5],
-       [6, 4],
-       [5, 6],
-       [7, 5],
-       [6, 7],
-       [7, 4]]],
-     ['edgelist',
-      'G1189',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [1, 4],
-       [5, 1],
-       [5, 4],
-       [5, 3],
-       [7, 2],
-       [3, 7],
-       [6, 3],
-       [5, 6],
-       [7, 5],
-       [1, 7],
-       [7, 6],
-       [4, 7]]],
-     ['edgelist',
-      'G1190',
-      7,
-      [[1, 2],
-       [6, 4],
-       [2, 4],
-       [1, 5],
-       [4, 1],
-       [5, 4],
-       [3, 5],
-       [6, 3],
-       [5, 6],
-       [7, 5],
-       [3, 7],
-       [7, 6],
-       [4, 7],
-       [7, 2],
-       [1, 7]]],
-     ['edgelist',
-      'G1191',
-      7,
-      [[6, 3],
-       [5, 6],
-       [4, 2],
-       [1, 5],
-       [1, 6],
-       [1, 4],
-       [3, 5],
-       [2, 6],
-       [2, 5],
-       [7, 4],
-       [2, 7],
-       [7, 1],
-       [6, 7],
-       [7, 3],
-       [5, 7]]],
-     ['edgelist',
-      'G1192',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [5, 6],
-       [1, 6],
-       [1, 4],
-       [3, 1],
-       [4, 2],
-       [7, 5],
-       [6, 7],
-       [7, 4],
-       [1, 7],
-       [7, 3],
-       [2, 7]]],
-     ['edgelist',
-      'G1193',
-      7,
-      [[6, 3],
-       [4, 1],
-       [6, 4],
-       [1, 5],
-       [1, 6],
-       [5, 4],
-       [3, 5],
-       [2, 6],
-       [2, 5],
-       [7, 5],
-       [3, 7],
-       [7, 1],
-       [6, 7],
-       [7, 4],
-       [2, 7]]],
-     ['edgelist',
-      'G1194',
-      7,
-      [[1, 5],
-       [1, 6],
-       [1, 7],
-       [2, 3],
-       [2, 4],
-       [2, 7],
-       [3, 4],
-       [3, 5],
-       [3, 6],
-       [4, 5],
-       [4, 6],
-       [4, 7],
-       [5, 6],
-       [5, 7],
-       [6, 7]]],
-     ['edgelist',
-      'G1195',
-      7,
-      [[7, 2],
-       [5, 6],
-       [1, 4],
-       [1, 5],
-       [1, 6],
-       [5, 7],
-       [4, 7],
-       [2, 4],
-       [2, 5],
-       [1, 7],
-       [4, 6],
-       [3, 4],
-       [3, 5],
-       [6, 7],
-       [6, 3]]],
-     ['edgelist',
-      'G1196',
-      7,
-      [[4, 5],
-       [1, 2],
-       [1, 4],
-       [1, 5],
-       [1, 6],
-       [5, 7],
-       [4, 7],
-       [2, 4],
-       [2, 5],
-       [7, 1],
-       [2, 7],
-       [3, 4],
-       [3, 5],
-       [6, 7],
-       [6, 3]]],
-     ['edgelist',
-      'G1197',
-      7,
-      [[1, 2],
-       [1, 3],
-       [1, 4],
-       [1, 5],
-       [1, 6],
-       [1, 7],
-       [2, 6],
-       [2, 7],
-       [3, 5],
-       [3, 6],
-       [3, 7],
-       [4, 5],
-       [4, 6],
-       [4, 7],
-       [5, 7]]],
-     ['edgelist',
-      'G1198',
-      7,
-      [[6, 3],
-       [5, 6],
-       [6, 4],
-       [1, 5],
-       [1, 2],
-       [2, 4],
-       [3, 5],
-       [4, 1],
-       [2, 5],
-       [7, 5],
-       [2, 7],
-       [7, 1],
-       [4, 7],
-       [7, 3],
-       [6, 7]]],
-     ['edgelist',
-      'G1199',
-      7,
-      [[6, 1],
-       [5, 4],
-       [6, 4],
-       [6, 3],
-       [1, 2],
-       [2, 4],
-       [3, 5],
-       [4, 1],
-       [2, 5],
-       [7, 3],
-       [6, 7],
-       [7, 5],
-       [4, 7],
-       [7, 1],
-       [2, 7]]],
-     ['edgelist',
-      'G1200',
-      7,
-      [[4, 5],
-       [5, 6],
-       [1, 4],
-       [5, 7],
-       [1, 2],
-       [2, 7],
-       [4, 7],
-       [2, 4],
-       [2, 5],
-       [7, 1],
-       [1, 6],
-       [3, 4],
-       [3, 5],
-       [6, 7],
-       [6, 3]]],
-     ['edgelist',
-      'G1201',
-      7,
-      [[1, 3],
-       [1, 4],
-       [1, 7],
-       [2, 4],
-       [2, 5],
-       [2, 6],
-       [2, 7],
-       [3, 5],
-       [3, 6],
-       [3, 7],
-       [4, 5],
-       [4, 6],
-       [5, 6],
-       [5, 7],
-       [6, 7]]],
-     ['edgelist',
-      'G1202',
-      7,
-      [[1, 5],
-       [1, 6],
-       [1, 7],
-       [2, 4],
-       [2, 5],
-       [2, 6],
-       [2, 7],
-       [3, 4],
-       [3, 5],
-       [3, 6],
-       [3, 7],
-       [4, 6],
-       [4, 7],
-       [5, 6],
-       [5, 7]]],
-     ['edgelist',
-      'G1203',
-      7,
-      [[4, 5],
-       [6, 1],
-       [1, 4],
-       [1, 5],
-       [5, 7],
-       [2, 7],
-       [4, 7],
-       [2, 4],
-       [2, 5],
-       [7, 1],
-       [2, 6],
-       [3, 4],
-       [3, 5],
-       [6, 7],
-       [6, 3]]],
-     ['edgelist',
-      'G1204',
-      7,
-      [[7, 5],
-       [6, 3],
-       [1, 4],
-       [1, 5],
-       [3, 5],
-       [2, 7],
-       [4, 7],
-       [2, 4],
-       [2, 5],
-       [7, 1],
-       [4, 6],
-       [3, 4],
-       [1, 2],
-       [6, 7],
-       [5, 6]]],
-     ['edgelist',
-      'G1205',
-      7,
-      [[1, 5],
-       [1, 6],
-       [1, 7],
-       [2, 3],
-       [2, 4],
-       [2, 6],
-       [2, 7],
-       [3, 4],
-       [3, 5],
-       [3, 7],
-       [4, 5],
-       [4, 6],
-       [5, 6],
-       [5, 7],
-       [6, 7]]],
-     ['edgelist',
-      'G1206',
-      7,
-      [[1, 2],
-       [1, 3],
-       [1, 4],
-       [2, 5],
-       [2, 6],
-       [2, 7],
-       [3, 5],
-       [3, 6],
-       [3, 7],
-       [4, 5],
-       [4, 6],
-       [4, 7],
-       [5, 6],
-       [5, 7],
-       [6, 7]]],
-     ['edgelist',
-      'G1207',
-      7,
-      [[3, 4],
-       [1, 3],
-       [4, 1],
-       [5, 4],
-       [2, 5],
-       [6, 2],
-       [5, 6],
-       [2, 1],
-       [6, 3],
-       [7, 3],
-       [6, 7],
-       [7, 2],
-       [1, 7],
-       [7, 5],
-       [4, 7]]],
-     ['edgelist',
-      'G1208',
-      7,
-      [[4, 1],
-       [4, 6],
-       [4, 5],
-       [3, 1],
-       [3, 6],
-       [3, 5],
-       [2, 5],
-       [2, 6],
-       [2, 1],
-       [7, 1],
-       [2, 7],
-       [7, 6],
-       [4, 7],
-       [7, 5],
-       [3, 7]]],
-     ['edgelist',
-      'G1209',
-      7,
-      [[1, 4],
-       [1, 5],
-       [1, 6],
-       [1, 7],
-       [2, 3],
-       [2, 5],
-       [2, 6],
-       [2, 7],
-       [3, 4],
-       [3, 6],
-       [3, 7],
-       [4, 5],
-       [4, 7],
-       [5, 6],
-       [6, 7]]],
-     ['edgelist',
-      'G1210',
-      7,
-      [[4, 5],
-       [7, 3],
-       [1, 4],
-       [1, 5],
-       [6, 1],
-       [2, 7],
-       [4, 7],
-       [2, 4],
-       [2, 5],
-       [7, 1],
-       [5, 6],
-       [3, 4],
-       [3, 5],
-       [6, 2],
-       [6, 3]]],
-     ['edgelist',
-      'G1211',
-      7,
-      [[4, 5],
-       [7, 3],
-       [1, 4],
-       [1, 5],
-       [6, 1],
-       [6, 7],
-       [4, 7],
-       [2, 4],
-       [2, 5],
-       [1, 2],
-       [5, 7],
-       [3, 4],
-       [3, 5],
-       [6, 2],
-       [6, 3]]],
-     ['edgelist',
-      'G1212',
-      7,
-      [[1, 2],
-       [2, 3],
-       [3, 4],
-       [4, 5],
-       [1, 5],
-       [7, 3],
-       [2, 7],
-       [7, 1],
-       [5, 7],
-       [6, 5],
-       [1, 6],
-       [4, 6],
-       [7, 4],
-       [6, 3],
-       [2, 6]]],
-     ['edgelist',
-      'G1213',
-      7,
-      [[1, 2],
-       [1, 3],
-       [1, 4],
-       [1, 5],
-       [1, 6],
-       [2, 3],
-       [2, 4],
-       [2, 5],
-       [2, 6],
-       [3, 4],
-       [3, 5],
-       [3, 6],
-       [4, 5],
-       [4, 6],
-       [5, 6],
-       [3, 7]]],
-     ['edgelist',
-      'G1214',
-      7,
-      [[4, 1],
-       [5, 2],
-       [5, 4],
-       [2, 4],
-       [5, 1],
-       [3, 6],
-       [7, 3],
-       [6, 7],
-       [2, 6],
-       [5, 6],
-       [4, 6],
-       [1, 6],
-       [1, 7],
-       [4, 7],
-       [5, 7],
-       [7, 2]]],
-     ['edgelist',
-      'G1215',
-      7,
-      [[1, 2],
-       [1, 3],
-       [1, 4],
-       [1, 5],
-       [1, 6],
-       [1, 7],
-       [2, 7],
-       [3, 4],
-       [3, 5],
-       [3, 6],
-       [4, 5],
-       [4, 6],
-       [4, 7],
-       [5, 6],
-       [5, 7],
-       [6, 7]]],
-     ['edgelist',
-      'G1216',
-      7,
-      [[1, 6],
-       [1, 7],
-       [2, 3],
-       [2, 4],
-       [2, 5],
-       [2, 6],
-       [2, 7],
-       [3, 4],
-       [3, 5],
-       [3, 6],
-       [3, 7],
-       [4, 5],
-       [4, 6],
-       [4, 7],
-       [5, 6],
-       [5, 7]]],
-     ['edgelist',
-      'G1217',
-      7,
-      [[4, 5],
-       [6, 2],
-       [1, 4],
-       [1, 5],
-       [6, 1],
-       [5, 7],
-       [4, 7],
-       [2, 4],
-       [2, 5],
-       [7, 1],
-       [4, 6],
-       [3, 4],
-       [3, 5],
-       [6, 7],
-       [5, 6],
-       [3, 6]]],
-     ['edgelist',
-      'G1218',
-      7,
-      [[3, 5],
-       [4, 2],
-       [4, 1],
-       [5, 4],
-       [5, 1],
-       [6, 3],
-       [5, 6],
-       [6, 1],
-       [4, 6],
-       [6, 2],
-       [7, 6],
-       [2, 7],
-       [4, 7],
-       [7, 1],
-       [5, 7],
-       [7, 3]]],
-     ['edgelist',
-      'G1219',
-      7,
-      [[1, 2],
-       [1, 3],
-       [1, 4],
-       [1, 5],
-       [1, 6],
-       [1, 7],
-       [2, 6],
-       [2, 7],
-       [3, 4],
-       [3, 5],
-       [4, 5],
-       [4, 6],
-       [4, 7],
-       [5, 6],
-       [5, 7],
-       [6, 7]]],
-     ['edgelist',
-      'G1220',
-      7,
-      [[3, 5],
-       [5, 2],
-       [4, 1],
-       [4, 2],
-       [5, 1],
-       [6, 3],
-       [5, 6],
-       [6, 1],
-       [4, 6],
-       [7, 6],
-       [2, 6],
-       [7, 2],
-       [4, 7],
-       [5, 7],
-       [7, 3],
-       [7, 1]]],
-     ['edgelist',
-      'G1221',
-      7,
-      [[1, 2],
-       [1, 4],
-       [1, 6],
-       [1, 7],
-       [2, 4],
-       [2, 6],
-       [2, 7],
-       [3, 5],
-       [3, 6],
-       [3, 7],
-       [4, 5],
-       [4, 6],
-       [4, 7],
-       [5, 6],
-       [5, 7],
-       [6, 7]]],
-     ['edgelist',
-      'G1222',
-      7,
-      [[3, 6],
-       [1, 2],
-       [5, 6],
-       [2, 4],
-       [6, 1],
-       [5, 4],
-       [6, 4],
-       [3, 5],
-       [2, 5],
-       [4, 1],
-       [7, 4],
-       [3, 7],
-       [7, 5],
-       [6, 7],
-       [7, 2],
-       [1, 7]]],
-     ['edgelist',
-      'G1223',
-      7,
-      [[1, 2],
-       [1, 3],
-       [1, 4],
-       [1, 5],
-       [1, 6],
-       [1, 7],
-       [2, 4],
-       [2, 7],
-       [3, 5],
-       [3, 6],
-       [3, 7],
-       [4, 5],
-       [4, 6],
-       [5, 6],
-       [5, 7],
-       [6, 7]]],
-     ['edgelist',
-      'G1224',
-      7,
-      [[3, 6],
-       [6, 2],
-       [4, 2],
-       [1, 5],
-       [6, 1],
-       [5, 4],
-       [6, 4],
-       [3, 5],
-       [2, 5],
-       [4, 1],
-       [7, 3],
-       [5, 7],
-       [6, 7],
-       [7, 2],
-       [1, 7],
-       [4, 7]]],
-     ['edgelist',
-      'G1225',
-      7,
-      [[2, 7],
-       [1, 2],
-       [1, 4],
-       [1, 5],
-       [6, 1],
-       [5, 7],
-       [4, 7],
-       [2, 4],
-       [2, 5],
-       [7, 1],
-       [4, 6],
-       [3, 4],
-       [3, 5],
-       [6, 7],
-       [5, 6],
-       [3, 6]]],
-     ['edgelist',
-      'G1226',
-      7,
-      [[4, 5],
-       [6, 2],
-       [1, 4],
-       [1, 5],
-       [6, 1],
-       [5, 7],
-       [4, 7],
-       [2, 4],
-       [2, 5],
-       [7, 1],
-       [2, 7],
-       [3, 4],
-       [3, 5],
-       [6, 7],
-       [1, 2],
-       [3, 6]]],
-     ['edgelist',
-      'G1227',
-      7,
-      [[1, 2],
-       [1, 3],
-       [1, 4],
-       [1, 5],
-       [1, 6],
-       [1, 7],
-       [2, 3],
-       [2, 4],
-       [2, 5],
-       [2, 6],
-       [2, 7],
-       [3, 6],
-       [3, 7],
-       [4, 5],
-       [4, 7],
-       [5, 6]]],
-     ['edgelist',
-      'G1228',
-      7,
-      [[1, 2],
-       [1, 3],
-       [1, 4],
-       [1, 5],
-       [1, 6],
-       [1, 7],
-       [2, 5],
-       [2, 6],
-       [2, 7],
-       [3, 4],
-       [3, 6],
-       [3, 7],
-       [4, 5],
-       [4, 7],
-       [5, 6],
-       [6, 7]]],
-     ['edgelist',
-      'G1229',
-      7,
-      [[1, 2],
-       [1, 3],
-       [1, 4],
-       [1, 5],
-       [1, 6],
-       [1, 7],
-       [2, 5],
-       [2, 6],
-       [2, 7],
-       [3, 5],
-       [3, 6],
-       [3, 7],
-       [4, 5],
-       [4, 6],
-       [4, 7],
-       [6, 7]]],
-     ['edgelist',
-      'G1230',
-      7,
-      [[3, 6],
-       [6, 2],
-       [4, 6],
-       [1, 5],
-       [1, 2],
-       [5, 4],
-       [4, 3],
-       [3, 5],
-       [2, 5],
-       [1, 6],
-       [7, 5],
-       [3, 7],
-       [7, 4],
-       [6, 7],
-       [7, 2],
-       [1, 7]]],
-     ['edgelist',
-      'G1231',
-      7,
-      [[6, 7],
-       [6, 2],
-       [1, 4],
-       [1, 5],
-       [1, 2],
-       [5, 7],
-       [4, 7],
-       [2, 4],
-       [2, 5],
-       [7, 1],
-       [4, 6],
-       [3, 4],
-       [3, 5],
-       [7, 3],
-       [5, 6],
-       [3, 6]]],
-     ['edgelist',
-      'G1232',
-      7,
-      [[4, 5],
-       [6, 2],
-       [1, 4],
-       [1, 5],
-       [1, 2],
-       [5, 7],
-       [4, 7],
-       [2, 4],
-       [2, 5],
-       [7, 1],
-       [6, 1],
-       [3, 4],
-       [3, 5],
-       [7, 3],
-       [7, 6],
-       [3, 6]]],
-     ['edgelist',
-      'G1233',
-      7,
-      [[6, 1],
-       [6, 2],
-       [1, 4],
-       [1, 5],
-       [7, 2],
-       [5, 7],
-       [4, 7],
-       [2, 4],
-       [2, 5],
-       [7, 1],
-       [4, 6],
-       [3, 4],
-       [3, 5],
-       [7, 3],
-       [5, 6],
-       [3, 6]]],
-     ['edgelist',
-      'G1234',
-      7,
-      [[1, 2],
-       [1, 3],
-       [1, 4],
-       [1, 5],
-       [1, 6],
-       [2, 3],
-       [2, 4],
-       [2, 5],
-       [2, 6],
-       [3, 4],
-       [3, 5],
-       [3, 6],
-       [4, 5],
-       [4, 6],
-       [5, 6],
-       [7, 3],
-       [2, 7]]],
-     ['edgelist',
-      'G1235',
-      7,
-      [[1, 2],
-       [1, 3],
-       [1, 4],
-       [1, 5],
-       [1, 6],
-       [1, 7],
-       [2, 3],
-       [2, 4],
-       [2, 5],
-       [2, 6],
-       [2, 7],
-       [3, 4],
-       [3, 5],
-       [3, 6],
-       [3, 7],
-       [5, 6],
-       [5, 7]]],
-     ['edgelist',
-      'G1236',
-      7,
-      [[5, 1],
-       [5, 4],
-       [1, 2],
-       [4, 1],
-       [3, 5],
-       [4, 2],
-       [6, 4],
-       [5, 6],
-       [6, 3],
-       [7, 6],
-       [6, 1],
-       [2, 6],
-       [7, 2],
-       [1, 7],
-       [7, 5],
-       [3, 7],
-       [4, 7]]],
-     ['edgelist',
-      'G1237',
-      7,
-      [[1, 2],
-       [6, 2],
-       [6, 4],
-       [1, 5],
-       [6, 1],
-       [5, 4],
-       [4, 2],
-       [3, 6],
-       [2, 5],
-       [4, 1],
-       [3, 5],
-       [7, 3],
-       [6, 7],
-       [7, 4],
-       [2, 7],
-       [7, 1],
-       [5, 7]]],
-     ['edgelist',
-      'G1238',
-      7,
-      [[4, 5],
-       [6, 2],
-       [1, 4],
-       [1, 5],
-       [5, 6],
-       [5, 7],
-       [4, 7],
-       [2, 4],
-       [2, 5],
-       [1, 2],
-       [4, 6],
-       [3, 4],
-       [3, 5],
-       [3, 6],
-       [6, 1],
-       [6, 7],
-       [7, 3]]],
-     ['edgelist',
-      'G1239',
-      7,
-      [[4, 3],
-       [5, 2],
-       [1, 2],
-       [4, 1],
-       [3, 5],
-       [5, 4],
-       [6, 2],
-       [5, 6],
-       [6, 3],
-       [1, 6],
-       [6, 4],
-       [7, 6],
-       [3, 7],
-       [7, 4],
-       [1, 7],
-       [2, 7],
-       [5, 7]]],
-     ['edgelist',
-      'G1240',
-      7,
-      [[4, 3],
-       [5, 2],
-       [5, 1],
-       [4, 1],
-       [3, 5],
-       [4, 2],
-       [6, 3],
-       [5, 6],
-       [6, 1],
-       [4, 6],
-       [6, 2],
-       [7, 6],
-       [3, 7],
-       [7, 1],
-       [4, 7],
-       [7, 5],
-       [2, 7]]],
-     ['edgelist',
-      'G1241',
-      7,
-      [[4, 3],
-       [6, 2],
-       [6, 1],
-       [1, 5],
-       [1, 2],
-       [5, 4],
-       [6, 4],
-       [3, 6],
-       [2, 5],
-       [4, 1],
-       [3, 5],
-       [7, 5],
-       [6, 7],
-       [7, 3],
-       [4, 7],
-       [7, 1],
-       [2, 7]]],
-     ['edgelist',
-      'G1242',
-      7,
-      [[4, 3],
-       [6, 2],
-       [6, 1],
-       [1, 5],
-       [5, 6],
-       [1, 2],
-       [4, 2],
-       [3, 6],
-       [2, 5],
-       [4, 1],
-       [3, 5],
-       [7, 1],
-       [4, 7],
-       [7, 2],
-       [6, 7],
-       [7, 3],
-       [5, 7]]],
-     ['edgelist',
-      'G1243',
-      7,
-      [[1, 4],
-       [1, 5],
-       [1, 6],
-       [1, 7],
-       [2, 3],
-       [2, 4],
-       [2, 5],
-       [2, 6],
-       [2, 7],
-       [3, 4],
-       [3, 5],
-       [3, 6],
-       [3, 7],
-       [4, 6],
-       [4, 7],
-       [5, 6],
-       [5, 7]]],
-     ['edgelist',
-      'G1244',
-      7,
-      [[1, 2],
-       [1, 3],
-       [1, 4],
-       [1, 5],
-       [1, 6],
-       [2, 3],
-       [2, 4],
-       [2, 5],
-       [2, 6],
-       [3, 4],
-       [3, 5],
-       [3, 6],
-       [4, 5],
-       [4, 6],
-       [5, 6],
-       [7, 2],
-       [1, 7],
-       [6, 7]]],
-     ['edgelist',
-      'G1245',
-      7,
-      [[1, 2],
-       [1, 3],
-       [1, 4],
-       [1, 5],
-       [1, 6],
-       [1, 7],
-       [2, 3],
-       [2, 4],
-       [2, 5],
-       [2, 6],
-       [2, 7],
-       [3, 4],
-       [3, 5],
-       [3, 6],
-       [3, 7],
-       [4, 5],
-       [4, 6],
-       [4, 7]]],
-     ['edgelist',
-      'G1246',
-      7,
-      [[1, 2],
-       [1, 3],
-       [1, 4],
-       [1, 5],
-       [1, 6],
-       [1, 7],
-       [2, 3],
-       [2, 5],
-       [2, 6],
-       [3, 4],
-       [3, 5],
-       [3, 6],
-       [3, 7],
-       [4, 5],
-       [4, 7],
-       [5, 6],
-       [5, 7],
-       [6, 7]]],
-     ['edgelist',
-      'G1247',
-      7,
-      [[1, 2],
-       [1, 3],
-       [1, 4],
-       [1, 6],
-       [1, 7],
-       [2, 3],
-       [2, 4],
-       [2, 5],
-       [2, 6],
-       [2, 7],
-       [3, 4],
-       [3, 5],
-       [4, 5],
-       [4, 6],
-       [4, 7],
-       [5, 6],
-       [5, 7],
-       [6, 7]]],
-     ['edgelist',
-      'G1248',
-      7,
-      [[5, 1],
-       [5, 6],
-       [4, 1],
-       [4, 6],
-       [3, 1],
-       [3, 6],
-       [2, 4],
-       [2, 5],
-       [2, 6],
-       [2, 1],
-       [3, 4],
-       [3, 5],
-       [7, 1],
-       [6, 7],
-       [7, 2],
-       [3, 7],
-       [7, 5],
-       [4, 7]]],
-     ['edgelist',
-      'G1249',
-      7,
-      [[1, 2],
-       [1, 3],
-       [1, 4],
-       [1, 5],
-       [1, 6],
-       [1, 7],
-       [2, 3],
-       [2, 4],
-       [2, 5],
-       [2, 6],
-       [2, 7],
-       [3, 4],
-       [3, 5],
-       [4, 5],
-       [4, 6],
-       [4, 7],
-       [5, 6],
-       [5, 7],
-       [6, 7]]],
-     ['edgelist',
-      'G1250',
-      7,
-      [[1, 2],
-       [1, 3],
-       [1, 4],
-       [1, 6],
-       [1, 7],
-       [2, 3],
-       [2, 4],
-       [2, 5],
-       [2, 6],
-       [2, 7],
-       [3, 4],
-       [3, 5],
-       [3, 6],
-       [3, 7],
-       [4, 5],
-       [4, 7],
-       [5, 6],
-       [5, 7],
-       [6, 7]]],
-     ['edgelist',
-      'G1251',
-      7,
-      [[1, 2],
-       [1, 3],
-       [1, 4],
-       [1, 6],
-       [1, 7],
-       [2, 3],
-       [2, 4],
-       [2, 5],
-       [2, 6],
-       [2, 7],
-       [3, 4],
-       [3, 5],
-       [3, 6],
-       [3, 7],
-       [4, 5],
-       [4, 6],
-       [4, 7],
-       [5, 6],
-       [5, 7],
-       [6, 7]]],
-     ['edgelist',
-      'G1252',
-      7,
-      [[1, 2],
-       [1, 3],
-       [1, 4],
-       [1, 5],
-       [1, 6],
-       [1, 7],
-       [2, 3],
-       [2, 4],
-       [2, 5],
-       [2, 6],
-       [2, 7],
-       [3, 4],
-       [3, 5],
-       [3, 6],
-       [3, 7],
-       [4, 5],
-       [4, 6],
-       [4, 7],
-       [5, 6],
-       [5, 7],
-       [6, 7]]]]
-
-    GAG=[]
-
-    for i in range(1253):
-        g=make_small_graph(descr_list[i])
-        GAG.append(g)
-
-    return GAG
-
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/generators/bipartite.py b/lib/python2.7/site-packages/setoolsgui/networkx/generators/bipartite.py
deleted file mode 100644
index 435ed0d..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/generators/bipartite.py
+++ /dev/null
@@ -1,529 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-Generators and functions for bipartite graphs.
-
-"""
-#    Copyright (C) 2006-2011 by 
-#    Aric Hagberg <hagberg@lanl.gov>
-#    Dan Schult <dschult@colgate.edu>
-#    Pieter Swart <swart@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-import math
-import random
-import networkx 
-from functools import reduce
-import networkx as nx
-__author__ = """\n""".join(['Aric Hagberg (hagberg@lanl.gov)',
-                            'Pieter Swart (swart@lanl.gov)',
-                            'Dan Schult(dschult@colgate.edu)'])
-__all__=['bipartite_configuration_model',
-         'bipartite_havel_hakimi_graph',
-         'bipartite_reverse_havel_hakimi_graph',
-         'bipartite_alternating_havel_hakimi_graph',
-         'bipartite_preferential_attachment_graph',
-         'bipartite_random_graph',
-         'bipartite_gnmk_random_graph',
-         ]
-
-
-def bipartite_configuration_model(aseq, bseq, create_using=None, seed=None):
-    """Return a random bipartite graph from two given degree sequences.
-
-    Parameters
-    ----------
-    aseq : list or iterator
-       Degree sequence for node set A.
-    bseq : list or iterator
-       Degree sequence for node set B.
-    create_using : NetworkX graph instance, optional
-       Return graph of this type.
-    seed : integer, optional
-       Seed for random number generator. 
-
-    Nodes from the set A are connected to nodes in the set B by
-    choosing randomly from the possible free stubs, one in A and
-    one in B.
-
-    Notes
-    -----
-    The sum of the two sequences must be equal: sum(aseq)=sum(bseq)
-    If no graph type is specified use MultiGraph with parallel edges.
-    If you want a graph with no parallel edges use create_using=Graph()
-    but then the resulting degree sequences might not be exact.
-
-    The nodes are assigned the attribute 'bipartite' with the value 0 or 1
-    to indicate which bipartite set the node belongs to.
-    """
-    if create_using is None:
-        create_using=networkx.MultiGraph()
-    elif create_using.is_directed():
-        raise networkx.NetworkXError(\
-                "Directed Graph not supported")
-        
-
-    G=networkx.empty_graph(0,create_using)
-
-    if not seed is None:
-        random.seed(seed)    
-
-    # length and sum of each sequence
-    lena=len(aseq)
-    lenb=len(bseq)
-    suma=sum(aseq)
-    sumb=sum(bseq)
-
-    if not suma==sumb:
-        raise networkx.NetworkXError(\
-              'invalid degree sequences, sum(aseq)!=sum(bseq),%s,%s'\
-              %(suma,sumb))
-
-    G=_add_nodes_with_bipartite_label(G,lena,lenb)
-                       
-    if max(aseq)==0: return G  # done if no edges
-
-    # build lists of degree-repeated vertex numbers
-    stubs=[]
-    stubs.extend([[v]*aseq[v] for v in range(0,lena)])  
-    astubs=[]
-    astubs=[x for subseq in stubs for x in subseq]
-
-    stubs=[]
-    stubs.extend([[v]*bseq[v-lena] for v in range(lena,lena+lenb)])  
-    bstubs=[]
-    bstubs=[x for subseq in stubs for x in subseq]
-
-    # shuffle lists
-    random.shuffle(astubs)
-    random.shuffle(bstubs)
-
-    G.add_edges_from([[astubs[i],bstubs[i]] for i in range(suma)])
-
-    G.name="bipartite_configuration_model"
-    return G
-
-
-def bipartite_havel_hakimi_graph(aseq, bseq, create_using=None):
-    """Return a bipartite graph from two given degree sequences using a 
-    Havel-Hakimi style construction.
-
-    Nodes from the set A are connected to nodes in the set B by
-    connecting the highest degree nodes in set A to the highest degree
-    nodes in set B until all stubs are connected.
-
-    Parameters
-    ----------
-    aseq : list or iterator
-       Degree sequence for node set A.
-    bseq : list or iterator
-       Degree sequence for node set B.
-    create_using : NetworkX graph instance, optional
-       Return graph of this type.
-
-    Notes
-    -----
-    The sum of the two sequences must be equal: sum(aseq)=sum(bseq)
-    If no graph type is specified use MultiGraph with parallel edges.
-    If you want a graph with no parallel edges use create_using=Graph()
-    but then the resulting degree sequences might not be exact.
-
-    The nodes are assigned the attribute 'bipartite' with the value 0 or 1
-    to indicate which bipartite set the node belongs to.
-    """
-    if create_using is None:
-        create_using=networkx.MultiGraph()
-    elif create_using.is_directed():
-        raise networkx.NetworkXError(\
-                "Directed Graph not supported")
-
-    G=networkx.empty_graph(0,create_using)
-
-    # length of the each sequence
-    naseq=len(aseq)
-    nbseq=len(bseq)
-
-    suma=sum(aseq)
-    sumb=sum(bseq)
-
-    if not suma==sumb:
-        raise networkx.NetworkXError(\
-              'invalid degree sequences, sum(aseq)!=sum(bseq),%s,%s'\
-              %(suma,sumb))
-
-    G=_add_nodes_with_bipartite_label(G,naseq,nbseq)
-
-    if max(aseq)==0: return G  # done if no edges
-
-    # build list of degree-repeated vertex numbers
-    astubs=[[aseq[v],v] for v in range(0,naseq)]  
-    bstubs=[[bseq[v-naseq],v] for v in range(naseq,naseq+nbseq)]  
-    astubs.sort()
-    while astubs:
-        (degree,u)=astubs.pop() # take of largest degree node in the a set
-        if degree==0: break # done, all are zero
-        # connect the source to largest degree nodes in the b set
-        bstubs.sort()
-        for target in bstubs[-degree:]:
-            v=target[1]
-            G.add_edge(u,v)
-            target[0] -= 1  # note this updates bstubs too.
-            if target[0]==0:
-                bstubs.remove(target)
-
-    G.name="bipartite_havel_hakimi_graph"
-    return G
-
-def bipartite_reverse_havel_hakimi_graph(aseq, bseq, create_using=None):
-    """Return a bipartite graph from two given degree sequences using a
-    Havel-Hakimi style construction.
-
-    Nodes from set A are connected to nodes in the set B by connecting
-    the highest degree nodes in set A to the lowest degree nodes in
-    set B until all stubs are connected.
-
-    Parameters
-    ----------
-    aseq : list or iterator
-       Degree sequence for node set A.
-    bseq : list or iterator
-       Degree sequence for node set B.
-    create_using : NetworkX graph instance, optional
-       Return graph of this type.
-
-
-    Notes
-    -----
-    The sum of the two sequences must be equal: sum(aseq)=sum(bseq)
-    If no graph type is specified use MultiGraph with parallel edges.
-    If you want a graph with no parallel edges use create_using=Graph()
-    but then the resulting degree sequences might not be exact.
-
-    The nodes are assigned the attribute 'bipartite' with the value 0 or 1
-    to indicate which bipartite set the node belongs to.
-    """
-    if create_using is None:
-        create_using=networkx.MultiGraph()
-    elif create_using.is_directed():
-        raise networkx.NetworkXError(\
-                "Directed Graph not supported")
-
-    G=networkx.empty_graph(0,create_using)
-
-
-    # length of the each sequence
-    lena=len(aseq)
-    lenb=len(bseq)
-    suma=sum(aseq)
-    sumb=sum(bseq)
-
-    if not suma==sumb:
-        raise networkx.NetworkXError(\
-              'invalid degree sequences, sum(aseq)!=sum(bseq),%s,%s'\
-              %(suma,sumb))
-
-    G=_add_nodes_with_bipartite_label(G,lena,lenb)
-
-    if max(aseq)==0: return G  # done if no edges
-
-    # build list of degree-repeated vertex numbers
-    astubs=[[aseq[v],v] for v in range(0,lena)]  
-    bstubs=[[bseq[v-lena],v] for v in range(lena,lena+lenb)]  
-    astubs.sort()
-    bstubs.sort()
-    while astubs:
-        (degree,u)=astubs.pop() # take of largest degree node in the a set
-        if degree==0: break # done, all are zero
-        # connect the source to the smallest degree nodes in the b set
-        for target in bstubs[0:degree]:
-            v=target[1]
-            G.add_edge(u,v)
-            target[0] -= 1  # note this updates bstubs too.
-            if target[0]==0:
-                bstubs.remove(target)
-
-    G.name="bipartite_reverse_havel_hakimi_graph"
-    return G
-
-
-def bipartite_alternating_havel_hakimi_graph(aseq, bseq,create_using=None):
-    """Return a bipartite graph from two given degree sequences using 
-    an alternating Havel-Hakimi style construction.
-
-    Nodes from the set A are connected to nodes in the set B by
-    connecting the highest degree nodes in set A to alternatively the
-    highest and the lowest degree nodes in set B until all stubs are
-    connected.
-
-    Parameters
-    ----------
-    aseq : list or iterator
-       Degree sequence for node set A.
-    bseq : list or iterator
-       Degree sequence for node set B.
-    create_using : NetworkX graph instance, optional
-       Return graph of this type.
-
-
-    Notes
-    -----
-    The sum of the two sequences must be equal: sum(aseq)=sum(bseq)
-    If no graph type is specified use MultiGraph with parallel edges.
-    If you want a graph with no parallel edges use create_using=Graph()
-    but then the resulting degree sequences might not be exact.
-
-    The nodes are assigned the attribute 'bipartite' with the value 0 or 1
-    to indicate which bipartite set the node belongs to.
-    """
-    if create_using is None:
-        create_using=networkx.MultiGraph()
-    elif create_using.is_directed():
-        raise networkx.NetworkXError(\
-                "Directed Graph not supported")
-
-    G=networkx.empty_graph(0,create_using)
-
-    # length of the each sequence
-    naseq=len(aseq)
-    nbseq=len(bseq)
-    suma=sum(aseq)
-    sumb=sum(bseq)
-
-    if not suma==sumb:
-        raise networkx.NetworkXError(\
-              'invalid degree sequences, sum(aseq)!=sum(bseq),%s,%s'\
-              %(suma,sumb))
-
-    G=_add_nodes_with_bipartite_label(G,naseq,nbseq)
-
-    if max(aseq)==0: return G  # done if no edges
-    # build list of degree-repeated vertex numbers
-    astubs=[[aseq[v],v] for v in range(0,naseq)]  
-    bstubs=[[bseq[v-naseq],v] for v in range(naseq,naseq+nbseq)]  
-    while astubs:
-        astubs.sort()
-        (degree,u)=astubs.pop() # take of largest degree node in the a set
-        if degree==0: break # done, all are zero
-        bstubs.sort()
-        small=bstubs[0:degree // 2]  # add these low degree targets     
-        large=bstubs[(-degree+degree // 2):] # and these high degree targets
-        stubs=[x for z in zip(large,small) for x in z] # combine, sorry
-        if len(stubs)<len(small)+len(large): # check for zip truncation
-            stubs.append(large.pop())
-        for target in stubs:
-            v=target[1]
-            G.add_edge(u,v)
-            target[0] -= 1  # note this updates bstubs too.
-            if target[0]==0:
-                bstubs.remove(target)
-
-    G.name="bipartite_alternating_havel_hakimi_graph"
-    return G
-
-def bipartite_preferential_attachment_graph(aseq,p,create_using=None,seed=None):
-    """Create a bipartite graph with a preferential attachment model from 
-    a given single degree sequence.
-
-    Parameters
-    ----------
-    aseq : list or iterator
-       Degree sequence for node set A.
-    p :  float
-       Probability that a new bottom node is added.
-    create_using : NetworkX graph instance, optional
-       Return graph of this type.
-    seed : integer, optional
-       Seed for random number generator. 
-
-    References
-    ----------
-    .. [1] Jean-Loup Guillaume and Matthieu Latapy,
-       Bipartite structure of all complex networks,
-       Inf. Process. Lett. 90, 2004, pg. 215-221
-       http://dx.doi.org/10.1016/j.ipl.2004.03.007
-    """
-    if create_using is None:
-        create_using=networkx.MultiGraph()
-    elif create_using.is_directed():
-        raise networkx.NetworkXError(\
-                "Directed Graph not supported")
-
-    if p > 1: 
-        raise networkx.NetworkXError("probability %s > 1"%(p))
-
-    G=networkx.empty_graph(0,create_using)
-
-    if not seed is None:
-        random.seed(seed)    
-
-    naseq=len(aseq)
-    G=_add_nodes_with_bipartite_label(G,naseq,0)
-    vv=[ [v]*aseq[v] for v in range(0,naseq)]
-    while vv:
-        while vv[0]:
-            source=vv[0][0]
-            vv[0].remove(source)
-            if random.random() < p or G.number_of_nodes() == naseq:
-                target=G.number_of_nodes()
-                G.add_node(target,bipartite=1)
-                G.add_edge(source,target)
-            else:
-                bb=[ [b]*G.degree(b) for b in range(naseq,G.number_of_nodes())]
-                # flatten the list of lists into a list.
-                bbstubs=reduce(lambda x,y: x+y, bb) 
-                # choose preferentially a bottom node.
-                target=random.choice(bbstubs) 
-                G.add_node(target,bipartite=1)
-                G.add_edge(source,target)
-        vv.remove(vv[0])
-    G.name="bipartite_preferential_attachment_model"
-    return G
-
-
-
-def bipartite_random_graph(n, m, p, seed=None, directed=False):
-    """Return a bipartite random graph.
-
-    This is a bipartite version of the binomial (ErdÅ‘s-Rényi) graph.
-
-    Parameters
-    ----------
-    n : int
-        The number of nodes in the first bipartite set.
-    m : int
-        The number of nodes in the second bipartite set.
-    p : float
-        Probability for edge creation.
-    seed : int, optional
-        Seed for random number generator (default=None). 
-    directed : bool, optional (default=False)
-        If True return a directed graph 
-      
-    Notes
-    -----
-    The bipartite random graph algorithm chooses each of the n*m (undirected) 
-    or 2*nm (directed) possible edges with probability p.
-
-    This algorithm is O(n+m) where m is the expected number of edges.
-    
-    The nodes are assigned the attribute 'bipartite' with the value 0 or 1
-    to indicate which bipartite set the node belongs to.
-
-    See Also
-    --------
-    gnp_random_graph, bipartite_configuration_model
-
-    References
-    ----------
-    .. [1] Vladimir Batagelj and Ulrik Brandes, 
-       "Efficient generation of large random networks",
-       Phys. Rev. E, 71, 036113, 2005.
-    """
-    G=nx.Graph()
-    G=_add_nodes_with_bipartite_label(G,n,m)
-    if directed:
-        G=nx.DiGraph(G)
-    G.name="fast_gnp_random_graph(%s,%s,%s)"%(n,m,p)
-
-    if not seed is None:
-        random.seed(seed)
-
-    if p <= 0:
-        return G
-    if p >= 1:
-        return nx.complete_bipartite_graph(n,m)
-        
-    lp = math.log(1.0 - p)  
-
-    v = 0 
-    w = -1
-    while v < n:
-        lr = math.log(1.0 - random.random())
-        w = w + 1 + int(lr/lp)
-        while w >= m and v < n:
-            w = w - m
-            v = v + 1
-        if v < n:
-            G.add_edge(v, n+w)
-
-    if directed:
-        # use the same algorithm to 
-        # add edges from the "m" to "n" set
-        v = 0 
-        w = -1
-        while v < n:
-            lr = math.log(1.0 - random.random())
-            w = w + 1 + int(lr/lp)
-            while  w>= m and v < n:
-                w = w - m
-                v = v + 1
-            if v < n:
-                G.add_edge(n+w, v)
-
-    return G
-
-def bipartite_gnmk_random_graph(n, m, k, seed=None, directed=False):
-    """Return a random bipartite graph G_{n,m,k}.
-
-    Produces a bipartite graph chosen randomly out of the set of all graphs
-    with n top nodes, m bottom nodes, and k edges.
-
-    Parameters
-    ----------
-    n : int
-        The number of nodes in the first bipartite set.
-    m : int
-        The number of nodes in the second bipartite set.
-    k : int
-        The number of edges
-    seed : int, optional
-        Seed for random number generator (default=None). 
-    directed : bool, optional (default=False)
-        If True return a directed graph 
-        
-    Examples
-    --------
-    G = nx.bipartite_gnmk_random_graph(10,20,50)
-
-    See Also
-    --------
-    gnm_random_graph
-
-    Notes
-    -----
-    If k > m * n then a complete bipartite graph is returned.
-
-    This graph is a bipartite version of the `G_{nm}` random graph model.
-    """
-    G = networkx.Graph()
-    G=_add_nodes_with_bipartite_label(G,n,m)
-    if directed:
-        G=nx.DiGraph(G)
-    G.name="bipartite_gnm_random_graph(%s,%s,%s)"%(n,m,k)
-    if seed is not None:
-        random.seed(seed)
-    if n == 1 or m == 1:
-        return G
-    max_edges = n*m # max_edges for bipartite networks
-    if k >= max_edges: # Maybe we should raise an exception here
-        return networkx.complete_bipartite_graph(n, m, create_using=G)
-
-    top = [n for n,d in G.nodes(data=True) if d['bipartite']==0]
-    bottom = list(set(G) - set(top))
-    edge_count = 0
-    while edge_count < k:
-        # generate random edge,u,v
-        u = random.choice(top)
-        v = random.choice(bottom)
-        if v in G[u]:
-            continue
-        else:
-            G.add_edge(u,v)
-            edge_count += 1
-    return G
-
-def _add_nodes_with_bipartite_label(G, lena, lenb):
-    G.add_nodes_from(range(0,lena+lenb))
-    b=dict(zip(range(0,lena),[0]*lena))
-    b.update(dict(zip(range(lena,lena+lenb),[1]*lenb)))
-    nx.set_node_attributes(G,'bipartite',b)
-    return G
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/generators/classic.py b/lib/python2.7/site-packages/setoolsgui/networkx/generators/classic.py
deleted file mode 100644
index f8ca43b..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/generators/classic.py
+++ /dev/null
@@ -1,508 +0,0 @@
-"""
-Generators for some classic graphs.
-
-The typical graph generator is called as follows:
-
->>> G=nx.complete_graph(100)
-
-returning the complete graph on n nodes labeled 0,..,99
-as a simple graph. Except for empty_graph, all the generators 
-in this module return a Graph class (i.e. a simple, undirected graph).
-
-"""
-#    Copyright (C) 2004-2010 by 
-#    Aric Hagberg <hagberg@lanl.gov>
-#    Dan Schult <dschult@colgate.edu>
-#    Pieter Swart <swart@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-import itertools
-__author__ ="""Aric Hagberg (hagberg@lanl.gov)\nPieter Swart (swart@lanl.gov)"""
-
-__all__ = [ 'balanced_tree',
-            'barbell_graph',
-            'complete_graph',
-            'complete_bipartite_graph',
-            'circular_ladder_graph',
-            'cycle_graph',
-            'dorogovtsev_goltsev_mendes_graph',
-            'empty_graph',
-            'full_rary_tree',
-            'grid_graph',
-            'grid_2d_graph',
-            'hypercube_graph',
-            'ladder_graph',
-            'lollipop_graph',
-            'null_graph',
-            'path_graph',
-            'star_graph',
-            'trivial_graph',
-            'wheel_graph']
-
-
-#-------------------------------------------------------------------
-#   Some Classic Graphs
-#-------------------------------------------------------------------
-import networkx as nx
-from networkx.utils import is_list_of_ints, flatten
-
-def _tree_edges(n,r):
-    # helper function for trees
-    # yields edges in rooted tree at 0 with n nodes and branching ratio r
-    nodes=iter(range(n))
-    parents=[next(nodes)] # stack of max length r
-    while parents:
-        source=parents.pop(0)
-        for i in range(r):
-            try:
-                target=next(nodes)
-                parents.append(target)
-                yield source,target
-            except StopIteration:
-                break
-
-def full_rary_tree(r, n, create_using=None):
-    """Creates a full r-ary tree of n vertices. 
-
-    Sometimes called a k-ary, n-ary, or m-ary tree.  "... all non-leaf
-    vertices have exactly r children and all levels are full except
-    for some rightmost position of the bottom level (if a leaf at the
-    bottom level is missing, then so are all of the leaves to its
-    right." [1]_
-
-    Parameters
-    ----------
-    r : int
-        branching factor of the tree
-    n : int
-        Number of nodes in the tree
-    create_using : NetworkX graph type, optional
-        Use specified type to construct graph (default = networkx.Graph)    
-
-    Returns
-    -------
-    G : networkx Graph
-        An r-ary tree with n nodes
-
-    References
-    ----------
-    .. [1] An introduction to data structures and algorithms,
-           James Andrew Storer,  Birkhauser Boston 2001, (page 225).
-    """
-    G=nx.empty_graph(n,create_using)
-    G.add_edges_from(_tree_edges(n,r))
-    return G
-
-def balanced_tree(r, h, create_using=None):
-    """Return the perfectly balanced r-tree of height h.
-
-    Parameters
-    ----------
-    r : int
-        Branching factor of the tree
-    h : int
-        Height of the tree
-    create_using : NetworkX graph type, optional
-        Use specified type to construct graph (default = networkx.Graph)    
-
-    Returns
-    -------
-    G : networkx Graph
-        A tree with n nodes
-
-    Notes
-    -----
-    This is the rooted tree where all leaves are at distance h from
-    the root. The root has degree r and all other internal nodes have
-    degree r+1.
-
-    Node labels are the integers 0 (the root) up to  number_of_nodes - 1.
-
-    Also refered to as a complete r-ary tree.
-    """
-    # number of nodes is n=1+r+..+r^h
-    if r==1:
-        n=2
-    else:
-        n = int((1-r**(h+1))/(1-r)) # sum of geometric series r!=1
-    G=nx.empty_graph(n,create_using)
-    G.add_edges_from(_tree_edges(n,r))
-    return G
-
-    return nx.full_rary_tree(r,n,create_using)
-
-def barbell_graph(m1,m2,create_using=None):
-    """Return the Barbell Graph: two complete graphs connected by a path.
-
-    For m1 > 1 and m2 >= 0.
-
-    Two identical complete graphs K_{m1} form the left and right bells,
-    and are connected by a path P_{m2}.
-
-    The 2*m1+m2  nodes are numbered
-        0,...,m1-1 for the left barbell,
-        m1,...,m1+m2-1 for the path,
-        and m1+m2,...,2*m1+m2-1 for the right barbell.
-
-    The 3 subgraphs are joined via the edges (m1-1,m1) and (m1+m2-1,m1+m2).
-    If m2=0, this is merely two complete graphs joined together.
-
-    This graph is an extremal example in David Aldous
-    and Jim Fill's etext on Random Walks on Graphs.
-
-    """
-    if create_using is not None and create_using.is_directed():
-        raise nx.NetworkXError("Directed Graph not supported")
-    if m1<2:
-        raise nx.NetworkXError(\
-              "Invalid graph description, m1 should be >=2")
-    if m2<0:
-        raise nx.NetworkXError(\
-              "Invalid graph description, m2 should be >=0")
-
-    # left barbell
-    G=complete_graph(m1,create_using)
-    G.name="barbell_graph(%d,%d)"%(m1,m2)
-    
-    # connecting path
-    G.add_nodes_from([v for v in range(m1,m1+m2-1)])
-    if m2>1:
-        G.add_edges_from([(v,v+1) for v in range(m1,m1+m2-1)])
-    # right barbell
-    G.add_edges_from( (u,v) for u in range(m1+m2,2*m1+m2) for v in range(u+1,2*m1+m2))
-    # connect it up
-    G.add_edge(m1-1,m1)
-    if m2>0:
-        G.add_edge(m1+m2-1,m1+m2)
-    return G
-
-def complete_graph(n,create_using=None):
-    """ Return the complete graph K_n with n nodes. 
-    
-    Node labels are the integers 0 to n-1.
-    """
-    G=empty_graph(n,create_using)
-    G.name="complete_graph(%d)"%(n)
-    if n>1:
-        if G.is_directed():
-            edges=itertools.permutations(range(n),2)
-        else:
-            edges=itertools.combinations(range(n),2)
-        G.add_edges_from(edges)
-    return G
-
-
-def complete_bipartite_graph(n1,n2,create_using=None):
-    """Return the complete bipartite graph K_{n1_n2}.
-    
-    Composed of two partitions with n1 nodes in the first 
-    and n2 nodes in the second. Each node in the first is 
-    connected to each node in the second.
-
-    Node labels are the integers 0 to n1+n2-1
-    
-    """
-    if create_using is not None and create_using.is_directed():
-        raise nx.NetworkXError("Directed Graph not supported")
-    G=empty_graph(n1+n2,create_using)
-    G.name="complete_bipartite_graph(%d,%d)"%(n1,n2)
-    for v1 in range(n1):
-        for v2 in range(n2):
-            G.add_edge(v1,n1+v2)
-    return G
-
-def circular_ladder_graph(n,create_using=None):
-    """Return the circular ladder graph CL_n of length n.
-
-    CL_n consists of two concentric n-cycles in which
-    each of the n pairs of concentric nodes are joined by an edge.
-
-    Node labels are the integers 0 to n-1
-    
-    """
-    G=ladder_graph(n,create_using)
-    G.name="circular_ladder_graph(%d)"%n
-    G.add_edge(0,n-1)
-    G.add_edge(n,2*n-1)
-    return G
-
-def cycle_graph(n,create_using=None):
-    """Return the cycle graph C_n over n nodes.
-   
-    C_n is the n-path with two end-nodes connected.
-
-    Node labels are the integers 0 to n-1
-    If create_using is a DiGraph, the direction is in increasing order.
-    
-    """
-    G=path_graph(n,create_using)
-    G.name="cycle_graph(%d)"%n
-    if n>1: G.add_edge(n-1,0)
-    return G
-
-def dorogovtsev_goltsev_mendes_graph(n,create_using=None):
-    """Return the hierarchically constructed Dorogovtsev-Goltsev-Mendes graph.
-
-    n is the generation.
-    See: arXiv:/cond-mat/0112143 by Dorogovtsev, Goltsev and Mendes.
-    
-    """
-    if create_using is not None:
-        if create_using.is_directed():
-            raise nx.NetworkXError("Directed Graph not supported")
-        if create_using.is_multigraph():
-            raise nx.NetworkXError("Multigraph not supported")
-    G=empty_graph(0,create_using)
-    G.name="Dorogovtsev-Goltsev-Mendes Graph"
-    G.add_edge(0,1)
-    if n==0:
-        return G
-    new_node = 2         # next node to be added
-    for i in range(1,n+1): #iterate over number of generations.
-        last_generation_edges = G.edges()
-        number_of_edges_in_last_generation = len(last_generation_edges)
-        for j in range(0,number_of_edges_in_last_generation):
-            G.add_edge(new_node,last_generation_edges[j][0])
-            G.add_edge(new_node,last_generation_edges[j][1])
-            new_node += 1
-    return G
-
-def empty_graph(n=0,create_using=None):
-    """Return the empty graph with n nodes and zero edges.
-
-    Node labels are the integers 0 to n-1
-
-    For example:
-    >>> G=nx.empty_graph(10)
-    >>> G.number_of_nodes()
-    10
-    >>> G.number_of_edges()
-    0
- 
-    The variable create_using should point to a "graph"-like object that
-    will be cleaned (nodes and edges will be removed) and refitted as
-    an empty "graph" with n nodes with integer labels. This capability
-    is useful for specifying the class-nature of the resulting empty
-    "graph" (i.e. Graph, DiGraph, MyWeirdGraphClass, etc.).
-    
-    The variable create_using has two main uses:
-    Firstly, the variable create_using can be used to create an
-    empty digraph, network,etc.  For example,
-
-    >>> n=10
-    >>> G=nx.empty_graph(n,create_using=nx.DiGraph())
-
-    will create an empty digraph on n nodes.
-
-    Secondly, one can pass an existing graph (digraph, pseudograph,
-    etc.) via create_using. For example, if G is an existing graph
-    (resp. digraph, pseudograph, etc.), then empty_graph(n,create_using=G)
-    will empty G (i.e. delete all nodes and edges using G.clear() in
-    base) and then add n nodes and zero edges, and return the modified
-    graph (resp. digraph, pseudograph, etc.).
-
-    See also create_empty_copy(G).
-    
-    """
-    if create_using is None:
-        # default empty graph is a simple graph
-        G=nx.Graph()
-    else:
-        G=create_using
-        G.clear()
-
-    G.add_nodes_from(range(n))
-    G.name="empty_graph(%d)"%n 
-    return G
-
-def grid_2d_graph(m,n,periodic=False,create_using=None):
-    """ Return the 2d grid graph of mxn nodes,
-        each connected to its nearest neighbors.
-        Optional argument periodic=True will connect
-        boundary nodes via periodic boundary conditions.
-    """
-    G=empty_graph(0,create_using)
-    G.name="grid_2d_graph"
-    rows=range(m)
-    columns=range(n)
-    G.add_nodes_from( (i,j) for i in rows for j in columns )
-    G.add_edges_from( ((i,j),(i-1,j)) for i in rows for j in columns if i>0 )
-    G.add_edges_from( ((i,j),(i,j-1)) for i in rows for j in columns if j>0 )
-    if G.is_directed():
-        G.add_edges_from( ((i,j),(i+1,j)) for i in rows for j in columns if i<m-1 )
-        G.add_edges_from( ((i,j),(i,j+1)) for i in rows for j in columns if j<n-1 )
-    if periodic:
-        if n>2:
-            G.add_edges_from( ((i,0),(i,n-1)) for i in rows )
-            if G.is_directed():
-                G.add_edges_from( ((i,n-1),(i,0)) for i in rows )
-        if m>2:
-            G.add_edges_from( ((0,j),(m-1,j)) for j in columns )
-            if G.is_directed():
-                G.add_edges_from( ((m-1,j),(0,j)) for j in columns )
-        G.name="periodic_grid_2d_graph(%d,%d)"%(m,n)
-    return G
-
-
-def grid_graph(dim,periodic=False):
-    """ Return the n-dimensional grid graph.
-
-    The dimension is the length of the list 'dim' and the
-    size in each dimension is the value of the list element.
-
-    E.g. G=grid_graph(dim=[2,3]) produces a 2x3 grid graph.
-
-    If periodic=True then join grid edges with periodic boundary conditions.
-
-    """    
-    dlabel="%s"%dim
-    if dim==[]:
-        G=empty_graph(0)
-        G.name="grid_graph(%s)"%dim
-        return G
-    if not is_list_of_ints(dim):
-        raise nx.NetworkXError("dim is not a list of integers")
-    if min(dim)<=0:
-        raise nx.NetworkXError(\
-              "dim is not a list of strictly positive integers")      
-    if periodic:
-        func=cycle_graph
-    else:
-        func=path_graph
-
-    dim=list(dim)
-    current_dim=dim.pop()
-    G=func(current_dim)
-    while len(dim)>0:
-        current_dim=dim.pop() 
-        # order matters: copy before it is cleared during the creation of Gnew
-        Gold=G.copy() 
-        Gnew=func(current_dim)
-        # explicit: create_using=None 
-        # This is so that we get a new graph of Gnew's class.
-        G=nx.cartesian_product(Gnew,Gold)
-    # graph G is done but has labels of the form (1,(2,(3,1)))
-    # so relabel
-    H=nx.relabel_nodes(G, flatten)
-    H.name="grid_graph(%s)"%dlabel
-    return H
-
-def hypercube_graph(n):
-    """Return the n-dimensional hypercube.
-
-    Node labels are the integers 0 to 2**n - 1.
-
-    """
-    dim=n*[2]
-    G=grid_graph(dim)
-    G.name="hypercube_graph_(%d)"%n
-    return G
-
-def ladder_graph(n,create_using=None):
-    """Return the Ladder graph of length n.
-
-    This is two rows of n nodes, with
-    each pair connected by a single edge.
-
-    Node labels are the integers 0 to 2*n - 1.
-    
-    """
-    if create_using is not None and create_using.is_directed():
-        raise nx.NetworkXError("Directed Graph not supported")
-    G=empty_graph(2*n,create_using)
-    G.name="ladder_graph_(%d)"%n 
-    G.add_edges_from([(v,v+1) for v in range(n-1)])
-    G.add_edges_from([(v,v+1) for v in range(n,2*n-1)])
-    G.add_edges_from([(v,v+n) for v in range(n)])
-    return G
-
-def lollipop_graph(m,n,create_using=None):
-    """Return the Lollipop Graph; K_m connected to P_n.
-
-    This is the Barbell Graph without the right barbell.
-
-    For m>1 and n>=0, the complete graph K_m is connected to the 
-    path P_n.  The resulting m+n nodes are labelled 0,...,m-1 for the
-    complete graph and m,...,m+n-1 for the path. The 2 subgraphs
-    are joined via the edge (m-1,m).  If n=0, this is merely a complete 
-    graph.
-
-    Node labels are the integers 0 to number_of_nodes - 1.
-
-    (This graph is an extremal example in David Aldous and Jim
-    Fill's etext on Random Walks on Graphs.)
-    
-    """
-    if create_using is not None and create_using.is_directed():
-        raise nx.NetworkXError("Directed Graph not supported")
-    if m<2:
-        raise nx.NetworkXError(\
-              "Invalid graph description, m should be >=2")
-    if n<0:
-        raise nx.NetworkXError(\
-              "Invalid graph description, n should be >=0")
-    # the ball
-    G=complete_graph(m,create_using)
-    # the stick
-    G.add_nodes_from([v for v in range(m,m+n)])
-    if n>1:
-        G.add_edges_from([(v,v+1) for v in range(m,m+n-1)])
-    # connect ball to stick
-    if m>0: G.add_edge(m-1,m)
-    G.name="lollipop_graph(%d,%d)"%(m,n)
-    return G
-
-def null_graph(create_using=None):
-    """ Return the Null graph with no nodes or edges. 
-
-    See empty_graph for the use of create_using.
-
-    """
-    G=empty_graph(0,create_using)
-    G.name="null_graph()"
-    return G
-
-def path_graph(n,create_using=None):
-    """Return the Path graph P_n of n nodes linearly connected by n-1 edges.
-
-    Node labels are the integers 0 to n - 1.
-    If create_using is a DiGraph then the edges are directed in 
-    increasing order.
-
-    """
-    G=empty_graph(n,create_using)
-    G.name="path_graph(%d)"%n
-    G.add_edges_from([(v,v+1) for v in range(n-1)])
-    return G
-
-def star_graph(n,create_using=None):
-    """ Return the Star graph with n+1 nodes: one center node, connected to n outer nodes.
-
-   Node labels are the integers 0 to n.
-
-    """
-    G=complete_bipartite_graph(1,n,create_using)
-    G.name="star_graph(%d)"%n
-    return G
-
-def trivial_graph(create_using=None):
-    """ Return the Trivial graph with one node (with integer label 0) and no edges.
-
-    """
-    G=empty_graph(1,create_using)
-    G.name="trivial_graph()"
-    return G
-
-def wheel_graph(n,create_using=None):
-    """ Return the wheel graph: a single hub node connected to each node of the (n-1)-node cycle graph. 
-
-   Node labels are the integers 0 to n - 1.
-
-    """
-    G=star_graph(n-1,create_using)
-    G.name="wheel_graph(%d)"%n
-    G.add_edges_from([(v,v+1) for v in range(1,n-1)])
-    if n>2:
-        G.add_edge(1,n-1)
-    return G
-
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/generators/degree_seq.py b/lib/python2.7/site-packages/setoolsgui/networkx/generators/degree_seq.py
deleted file mode 100644
index c5b8f95..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/generators/degree_seq.py
+++ /dev/null
@@ -1,793 +0,0 @@
-# -*- coding: utf-8 -*-
-"""Generate graphs with a given degree sequence or expected degree sequence.
-"""
-#    Copyright (C) 2004-2013 by 
-#    Aric Hagberg <hagberg@lanl.gov>
-#    Dan Schult <dschult@colgate.edu>
-#    Pieter Swart <swart@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-import heapq
-from itertools import combinations, permutations
-import math
-from operator import itemgetter
-import random
-import networkx as nx
-from networkx.utils import random_weighted_sample
-
-__author__ = "\n".join(['Aric Hagberg <aric.hagberg@gmail.com>',
-                        'Pieter Swart <swart@lanl.gov>',
-                        'Dan Schult <dschult@colgate.edu>'
-                        'Joel Miller <joel.c.miller.research@gmail.com>',
-                        'Nathan Lemons <nlemons@gmail.com>'
-                        'Brian Cloteaux <brian.cloteaux@nist.gov>'])
-
-__all__ = ['configuration_model',
-           'directed_configuration_model',
-           'expected_degree_graph',
-           'havel_hakimi_graph',
-           'directed_havel_hakimi_graph',
-           'degree_sequence_tree',
-           'random_degree_sequence_graph']
-
-
-def configuration_model(deg_sequence,create_using=None,seed=None):
-    """Return a random graph with the given degree sequence.
-
-    The configuration model generates a random pseudograph (graph with
-    parallel edges and self loops) by randomly assigning edges to
-    match the given degree sequence.
-
-    Parameters
-    ----------
-    deg_sequence :  list of integers
-        Each list entry corresponds to the degree of a node.
-    create_using : graph, optional (default MultiGraph)
-       Return graph of this type. The instance will be cleared.
-    seed : hashable object, optional
-        Seed for random number generator.
-
-    Returns
-    -------
-    G : MultiGraph
-        A graph with the specified degree sequence.
-        Nodes are labeled starting at 0 with an index
-        corresponding to the position in deg_sequence.
-
-    Raises
-    ------
-    NetworkXError
-        If the degree sequence does not have an even sum.
-
-    See Also
-    --------
-    is_valid_degree_sequence
-
-    Notes
-    -----
-    As described by Newman [1]_.
-
-    A non-graphical degree sequence (not realizable by some simple
-    graph) is allowed since this function returns graphs with self
-    loops and parallel edges.  An exception is raised if the degree
-    sequence does not have an even sum.
-
-    This configuration model construction process can lead to
-    duplicate edges and loops.  You can remove the self-loops and
-    parallel edges (see below) which will likely result in a graph
-    that doesn't have the exact degree sequence specified.  This
-    "finite-size effect" decreases as the size of the graph increases.
-
-    References
-    ----------
-    .. [1] M.E.J. Newman, "The structure and function of complex networks",
-       SIAM REVIEW 45-2, pp 167-256, 2003.
-
-    Examples
-    --------
-    >>> from networkx.utils import powerlaw_sequence
-    >>> z=nx.utils.create_degree_sequence(100,powerlaw_sequence)
-    >>> G=nx.configuration_model(z)
-
-    To remove parallel edges:
-
-    >>> G=nx.Graph(G)
-
-    To remove self loops:
-
-    >>> G.remove_edges_from(G.selfloop_edges())
-    """
-    if not sum(deg_sequence)%2 ==0:
-        raise nx.NetworkXError('Invalid degree sequence')
-
-    if create_using is None:
-        create_using = nx.MultiGraph()
-    elif create_using.is_directed():
-        raise nx.NetworkXError("Directed Graph not supported")
-
-    if not seed is None:
-        random.seed(seed)
-
-    # start with empty N-node graph
-    N=len(deg_sequence)
-
-    # allow multiedges and selfloops
-    G=nx.empty_graph(N,create_using)
-
-    if N==0 or max(deg_sequence)==0: # done if no edges
-        return G 
-
-    # build stublist, a list of available degree-repeated stubs
-    # e.g. for deg_sequence=[3,2,1,1,1]
-    # initially, stublist=[1,1,1,2,2,3,4,5]
-    # i.e., node 1 has degree=3 and is repeated 3 times, etc.
-    stublist=[]
-    for n in G:
-        for i in range(deg_sequence[n]):
-            stublist.append(n)
-
-    # shuffle stublist and assign pairs by removing 2 elements at a time
-    random.shuffle(stublist)
-    while stublist:
-        n1 = stublist.pop()
-        n2 = stublist.pop()
-        G.add_edge(n1,n2)
-
-    G.name="configuration_model %d nodes %d edges"%(G.order(),G.size())
-    return G
-
-
-def directed_configuration_model(in_degree_sequence,
-                                 out_degree_sequence,
-                                 create_using=None,seed=None):
-    """Return a directed_random graph with the given degree sequences.
-
-    The configuration model generates a random directed pseudograph
-    (graph with parallel edges and self loops) by randomly assigning
-    edges to match the given degree sequences.
-
-    Parameters
-    ----------
-    in_degree_sequence :  list of integers
-       Each list entry corresponds to the in-degree of a node.
-    out_degree_sequence :  list of integers
-       Each list entry corresponds to the out-degree of a node.
-    create_using : graph, optional (default MultiDiGraph)
-       Return graph of this type. The instance will be cleared.
-    seed : hashable object, optional
-        Seed for random number generator.
-
-    Returns
-    -------
-    G : MultiDiGraph
-        A graph with the specified degree sequences.
-        Nodes are labeled starting at 0 with an index
-        corresponding to the position in deg_sequence.
-
-    Raises
-    ------
-    NetworkXError
-        If the degree sequences do not have the same sum.
-
-    See Also
-    --------
-    configuration_model
-
-    Notes
-    -----
-    Algorithm as described by Newman [1]_.
-
-    A non-graphical degree sequence (not realizable by some simple
-    graph) is allowed since this function returns graphs with self
-    loops and parallel edges.  An exception is raised if the degree
-    sequences does not have the same sum.
-
-    This configuration model construction process can lead to
-    duplicate edges and loops.  You can remove the self-loops and
-    parallel edges (see below) which will likely result in a graph
-    that doesn't have the exact degree sequence specified.  This
-    "finite-size effect" decreases as the size of the graph increases.
-
-    References
-    ----------
-    .. [1] Newman, M. E. J. and Strogatz, S. H. and Watts, D. J.
-       Random graphs with arbitrary degree distributions and their applications
-       Phys. Rev. E, 64, 026118 (2001)
-
-    Examples
-    --------
-    >>> D=nx.DiGraph([(0,1),(1,2),(2,3)]) # directed path graph
-    >>> din=list(D.in_degree().values())
-    >>> dout=list(D.out_degree().values())
-    >>> din.append(1)
-    >>> dout[0]=2
-    >>> D=nx.directed_configuration_model(din,dout)
-
-    To remove parallel edges:
-
-    >>> D=nx.DiGraph(D)
-
-    To remove self loops:
-
-    >>> D.remove_edges_from(D.selfloop_edges())
-    """
-    if not sum(in_degree_sequence) == sum(out_degree_sequence):
-        raise nx.NetworkXError('Invalid degree sequences. '
-                               'Sequences must have equal sums.')
-
-    if create_using is None:
-        create_using = nx.MultiDiGraph()
-
-    if not seed is None:
-        random.seed(seed)
-
-    nin=len(in_degree_sequence)
-    nout=len(out_degree_sequence)
-
-    # pad in- or out-degree sequence with zeros to match lengths
-    if nin>nout:
-        out_degree_sequence.extend((nin-nout)*[0])
-    else:
-        in_degree_sequence.extend((nout-nin)*[0])
-
-    # start with empty N-node graph
-    N=len(in_degree_sequence)
-
-    # allow multiedges and selfloops
-    G=nx.empty_graph(N,create_using)
-
-    if N==0 or max(in_degree_sequence)==0: # done if no edges
-        return G
-
-    # build stublists of available degree-repeated stubs
-    # e.g. for degree_sequence=[3,2,1,1,1]
-    # initially, stublist=[1,1,1,2,2,3,4,5]
-    # i.e., node 1 has degree=3 and is repeated 3 times, etc.
-    in_stublist=[]
-    for n in G:
-        for i in range(in_degree_sequence[n]):
-            in_stublist.append(n)
-
-    out_stublist=[]
-    for n in G:
-        for i in range(out_degree_sequence[n]):
-            out_stublist.append(n)
-
-    # shuffle stublists and assign pairs by removing 2 elements at a time
-    random.shuffle(in_stublist)
-    random.shuffle(out_stublist)
-    while in_stublist and out_stublist:
-        source = out_stublist.pop()
-        target = in_stublist.pop()
-        G.add_edge(source,target)
-
-    G.name="directed configuration_model %d nodes %d edges"%(G.order(),G.size())
-    return G
-
-
-def expected_degree_graph(w, seed=None, selfloops=True):
-    r"""Return a random graph with given expected degrees.
-
-    Given a sequence of expected degrees `W=(w_0,w_1,\ldots,w_{n-1}`)
-    of length `n` this algorithm assigns an edge between node `u` and
-    node `v` with probability
-
-    .. math::
-
-       p_{uv} = \frac{w_u w_v}{\sum_k w_k} .
-
-    Parameters
-    ----------
-    w : list
-        The list of expected degrees.
-    selfloops: bool (default=True)
-        Set to False to remove the possibility of self-loop edges.
-    seed : hashable object, optional
-        The seed for the random number generator.
-
-    Returns
-    -------
-    Graph
-
-    Examples
-    --------
-    >>> z=[10 for i in range(100)]
-    >>> G=nx.expected_degree_graph(z)
-
-    Notes
-    -----
-    The nodes have integer labels corresponding to index of expected degrees
-    input sequence.
-
-    The complexity of this algorithm is `\mathcal{O}(n+m)` where `n` is the
-    number of nodes and `m` is the expected number of edges.
-
-    The model in [1]_ includes the possibility of self-loop edges.
-    Set selfloops=False to produce a graph without self loops.
-
-    For finite graphs this model doesn't produce exactly the given
-    expected degree sequence.  Instead the expected degrees are as
-    follows.
-
-    For the case without self loops (selfloops=False),
-
-    .. math::
-
-       E[deg(u)] = \sum_{v \ne u} p_{uv}
-                = w_u \left( 1 - \frac{w_u}{\sum_k w_k} \right) .
-
-
-    NetworkX uses the standard convention that a self-loop edge counts 2
-    in the degree of a node, so with self loops (selfloops=True),
-
-    .. math::
-
-       E[deg(u)] =  \sum_{v \ne u} p_{uv}  + 2 p_{uu}
-                = w_u \left( 1 + \frac{w_u}{\sum_k w_k} \right) .
-
-    References
-    ----------
-    .. [1] Fan Chung and L. Lu, Connected components in random graphs with
-       given expected degree sequences, Ann. Combinatorics, 6,
-       pp. 125-145, 2002.
-    .. [2] Joel Miller and Aric Hagberg,
-       Efficient generation of networks with given expected degrees,
-       in Algorithms and Models for the Web-Graph (WAW 2011),
-       Alan Frieze, Paul Horn, and Paweł Prałat (Eds), LNCS 6732,
-       pp. 115-126, 2011.
-    """
-    n = len(w)
-    G=nx.empty_graph(n)
-    if n==0 or max(w)==0: # done if no edges
-        return G
-    if seed is not None:
-        random.seed(seed)
-    rho = 1/float(sum(w))
-    # sort weights, largest first
-    # preserve order of weights for integer node label mapping
-    order = sorted(enumerate(w),key=itemgetter(1),reverse=True)
-    mapping = dict((c,uv[0]) for c,uv in enumerate(order))
-    seq = [v for u,v in order]
-    last=n
-    if not selfloops:
-        last-=1
-    for u in range(last):
-        v = u
-        if not selfloops:
-            v += 1
-        factor = seq[u] * rho
-        p = seq[v]*factor
-        if p>1:
-            p = 1
-        while v<n and p>0:
-            if p != 1:
-                r = random.random()
-                v += int(math.floor(math.log(r)/math.log(1-p)))
-            if v < n:
-                q = seq[v]*factor
-                if q>1:
-                    q = 1
-                if random.random() < q/p:
-                    G.add_edge(mapping[u],mapping[v])
-                v += 1
-                p = q
-    return G
-
-def havel_hakimi_graph(deg_sequence,create_using=None):
-    """Return a simple graph with given degree sequence constructed
-    using the Havel-Hakimi algorithm.
-
-    Parameters
-    ----------
-    deg_sequence: list of integers
-        Each integer corresponds to the degree of a node (need not be sorted).
-    create_using : graph, optional (default Graph)
-        Return graph of this type. The instance will be cleared.
-        Directed graphs are not allowed.
-
-    Raises
-    ------
-    NetworkXException
-        For a non-graphical degree sequence (i.e. one
-        not realizable by some simple graph).
-
-    Notes
-    -----
-    The Havel-Hakimi algorithm constructs a simple graph by
-    successively connecting the node of highest degree to other nodes
-    of highest degree, resorting remaining nodes by degree, and
-    repeating the process. The resulting graph has a high
-    degree-associativity.  Nodes are labeled 1,.., len(deg_sequence),
-    corresponding to their position in deg_sequence.
-
-    The basic algorithm is from Hakimi [1]_ and was generalized by
-    Kleitman and Wang [2]_.
-
-    References
-    ----------
-    .. [1] Hakimi S., On Realizability of a Set of Integers as 
-       Degrees of the Vertices of a Linear Graph. I,
-       Journal of SIAM, 10(3), pp. 496-506 (1962)
-    .. [2] Kleitman D.J. and Wang D.L.
-       Algorithms for Constructing Graphs and Digraphs with Given Valences
-       and Factors  Discrete Mathematics, 6(1), pp. 79-88 (1973) 
-    """
-    if not nx.is_valid_degree_sequence(deg_sequence):
-        raise nx.NetworkXError('Invalid degree sequence')
-    if create_using is not None:
-        if create_using.is_directed():
-            raise nx.NetworkXError("Directed graphs are not supported")
-
-    p = len(deg_sequence)
-    G=nx.empty_graph(p,create_using)
-    num_degs = []
-    for i in range(p):
-        num_degs.append([])
-    dmax, dsum, n = 0, 0, 0
-    for d in deg_sequence:
-        # Process only the non-zero integers
-        if d>0:
-            num_degs[d].append(n)
-            dmax, dsum, n = max(dmax,d), dsum+d, n+1
-    # Return graph if no edges
-    if n==0:
-        return G
-
-    modstubs = [(0,0)]*(dmax+1)
-    # Successively reduce degree sequence by removing the maximum degree
-    while n > 0:
-        # Retrieve the maximum degree in the sequence
-        while len(num_degs[dmax]) == 0:
-            dmax -= 1;
-        # If there are not enough stubs to connect to, then the sequence is
-        # not graphical
-        if dmax > n-1:
-            raise nx.NetworkXError('Non-graphical integer sequence')
-
-        # Remove largest stub in list
-        source = num_degs[dmax].pop()
-        n -= 1
-        # Reduce the next dmax largest stubs
-        mslen = 0
-        k = dmax
-        for i in range(dmax):
-            while len(num_degs[k]) == 0:
-                k -= 1
-            target = num_degs[k].pop()
-            G.add_edge(source, target)
-            n -= 1
-            if k > 1:
-                modstubs[mslen] = (k-1,target)
-                mslen += 1
-        # Add back to the list any nonzero stubs that were removed
-        for i  in range(mslen):
-            (stubval, stubtarget) = modstubs[i]
-            num_degs[stubval].append(stubtarget)
-            n += 1
-
-    G.name="havel_hakimi_graph %d nodes %d edges"%(G.order(),G.size())
-    return G
-
-def directed_havel_hakimi_graph(in_deg_sequence,
-                                out_deg_sequence,
-                                create_using=None):
-    """Return a directed graph with the given degree sequences.
-
-    Parameters
-    ----------
-    in_deg_sequence :  list of integers 
-       Each list entry corresponds to the in-degree of a node.
-    out_deg_sequence : list of integers 
-       Each list entry corresponds to the out-degree of a node.
-    create_using : graph, optional (default DiGraph)
-       Return graph of this type. The instance will be cleared.
-
-    Returns
-    -------
-    G : DiGraph
-        A graph with the specified degree sequences.
-        Nodes are labeled starting at 0 with an index
-        corresponding to the position in deg_sequence
-
-    Raises
-    ------
-    NetworkXError
-        If the degree sequences are not digraphical.
-
-    See Also
-    --------
-    configuration_model
-    
-    Notes
-    -----
-    Algorithm as described by Kleitman and Wang [1]_.
-
-    References
-    ----------
-    .. [1] D.J. Kleitman and D.L. Wang
-       Algorithms for Constructing Graphs and Digraphs with Given Valences
-       and Factors Discrete Mathematics, 6(1), pp. 79-88 (1973) 
-    """
-    assert(nx.utils.is_list_of_ints(in_deg_sequence))
-    assert(nx.utils.is_list_of_ints(out_deg_sequence))
-
-    if create_using is None:
-        create_using = nx.DiGraph()
-
-    # Process the sequences and form two heaps to store degree pairs with
-    # either zero or nonzero out degrees
-    sumin, sumout, nin, nout = 0, 0, len(in_deg_sequence), len(out_deg_sequence)
-    maxn = max(nin, nout) 
-    G = nx.empty_graph(maxn,create_using)
-    if maxn==0:
-        return G
-    maxin = 0
-    stubheap, zeroheap = [ ], [ ]
-    for n in range(maxn):
-        in_deg, out_deg = 0, 0
-        if n<nout:
-            out_deg = out_deg_sequence[n]
-        if n<nin:
-            in_deg = in_deg_sequence[n]
-        if in_deg<0 or out_deg<0:
-            raise nx.NetworkXError(
-                'Invalid degree sequences. Sequence values must be positive.')
-        sumin, sumout, maxin = sumin+in_deg, sumout+out_deg, max(maxin, in_deg)
-        if in_deg > 0:
-            stubheap.append((-1*out_deg, -1*in_deg,n)) 
-        elif out_deg > 0:
-            zeroheap.append((-1*out_deg,n)) 
-    if sumin != sumout:
-        raise nx.NetworkXError(
-            'Invalid degree sequences. Sequences must have equal sums.')
-    heapq.heapify(stubheap)
-    heapq.heapify(zeroheap)
-
-    modstubs = [(0,0,0)]*(maxin+1)
-    # Successively reduce degree sequence by removing the maximum 
-    while stubheap:
-        # Remove first value in the sequence with a non-zero in degree
-        (freeout, freein, target) =  heapq.heappop(stubheap)
-        freein *= -1   
-        if freein > len(stubheap)+len(zeroheap):
-            raise nx.NetworkXError('Non-digraphical integer sequence')
-
-        # Attach arcs from the nodes with the most stubs
-        mslen = 0
-        for i in range(freein):
-            if zeroheap and (not stubheap or stubheap[0][0] > zeroheap[0][0]):
-                (stubout, stubsource) = heapq.heappop(zeroheap)
-                stubin = 0
-            else:
-                (stubout, stubin, stubsource) = heapq.heappop(stubheap)
-            if stubout == 0:
-                raise nx.NetworkXError('Non-digraphical integer sequence')
-            G.add_edge(stubsource, target)
-            # Check if source is now totally connected
-            if stubout+1<0 or stubin<0:
-                modstubs[mslen] = (stubout+1, stubin, stubsource)
-                mslen += 1
-
-        # Add the nodes back to the heaps that still have available stubs
-        for i in range(mslen):
-            stub = modstubs[i]
-            if stub[1] < 0:
-                heapq.heappush(stubheap, stub)
-            else:
-                heapq.heappush(zeroheap, (stub[0], stub[2]))
-        if freeout<0:
-            heapq.heappush(zeroheap, (freeout, target))
-
-    G.name="directed_havel_hakimi_graph %d nodes %d edges"%(G.order(),G.size())
-    return G
-
-def degree_sequence_tree(deg_sequence,create_using=None):
-    """Make a tree for the given degree sequence.
-
-    A tree has #nodes-#edges=1 so
-    the degree sequence must have
-    len(deg_sequence)-sum(deg_sequence)/2=1
-    """
-
-    if not len(deg_sequence)-sum(deg_sequence)/2.0 == 1.0:
-        raise nx.NetworkXError("Degree sequence invalid")
-    if create_using is not None and create_using.is_directed():
-        raise nx.NetworkXError("Directed Graph not supported")
-
-    # single node tree
-    if len(deg_sequence)==1:
-        G=nx.empty_graph(0,create_using)
-        return G
-
-    # all degrees greater than 1
-    deg=[s for s in deg_sequence if s>1]
-    deg.sort(reverse=True)
-
-    # make path graph as backbone
-    n=len(deg)+2
-    G=nx.path_graph(n,create_using)
-    last=n
-
-    # add the leaves
-    for source in range(1,n-1):
-        nedges=deg.pop()-2
-        for target in range(last,last+nedges):
-            G.add_edge(source, target)
-        last+=nedges
-
-    # in case we added one too many
-    if len(G.degree())>len(deg_sequence):
-        G.remove_node(0)
-    return G
-
-def random_degree_sequence_graph(sequence, seed=None, tries=10):
-    r"""Return a simple random graph with the given degree sequence.
-
-    If the maximum degree `d_m` in the sequence is `O(m^{1/4})` then the
-    algorithm produces almost uniform random graphs in `O(m d_m)` time
-    where `m` is the number of edges.
-
-    Parameters
-    ----------
-    sequence :  list of integers
-        Sequence of degrees
-    seed : hashable object, optional
-        Seed for random number generator
-    tries : int, optional
-        Maximum number of tries to create a graph
-
-    Returns
-    -------
-    G : Graph
-        A graph with the specified degree sequence.
-        Nodes are labeled starting at 0 with an index
-        corresponding to the position in the sequence.
-
-    Raises
-    ------
-    NetworkXUnfeasible
-        If the degree sequence is not graphical.
-    NetworkXError
-        If a graph is not produced in specified number of tries
-
-    See Also
-    --------
-    is_valid_degree_sequence, configuration_model
-
-    Notes
-    -----
-    The generator algorithm [1]_ is not guaranteed to produce a graph.
-
-    References
-    ----------
-    .. [1] Moshen Bayati, Jeong Han Kim, and Amin Saberi,
-       A sequential algorithm for generating random graphs.
-       Algorithmica, Volume 58, Number 4, 860-910,
-       DOI: 10.1007/s00453-009-9340-1
-
-    Examples
-    --------
-    >>> sequence = [1, 2, 2, 3]
-    >>> G = nx.random_degree_sequence_graph(sequence)
-    >>> sorted(G.degree().values())
-    [1, 2, 2, 3]
-    """
-    DSRG = DegreeSequenceRandomGraph(sequence, seed=seed)
-    for try_n in range(tries):
-        try:
-            return DSRG.generate()
-        except nx.NetworkXUnfeasible:
-            pass
-    raise nx.NetworkXError('failed to generate graph in %d tries'%tries)
-
-class DegreeSequenceRandomGraph(object):
-    # class to generate random graphs with a given degree sequence
-    # use random_degree_sequence_graph()
-    def __init__(self, degree, seed=None):
-        if not nx.is_valid_degree_sequence(degree):
-            raise nx.NetworkXUnfeasible('degree sequence is not graphical')
-        if seed is not None:
-            random.seed(seed)
-        self.degree = list(degree)
-        # node labels are integers 0,...,n-1
-        self.m = sum(self.degree)/2.0 # number of edges
-        try:
-            self.dmax = max(self.degree) # maximum degree
-        except ValueError:
-            self.dmax = 0
-
-    def generate(self):
-        # remaining_degree is mapping from int->remaining degree
-        self.remaining_degree = dict(enumerate(self.degree))
-        # add all nodes to make sure we get isolated nodes
-        self.graph = nx.Graph()
-        self.graph.add_nodes_from(self.remaining_degree)
-        # remove zero degree nodes
-        for n,d in list(self.remaining_degree.items()):
-            if d == 0:
-                del self.remaining_degree[n]
-        if len(self.remaining_degree) > 0:
-        # build graph in three phases according to how many unmatched edges
-            self.phase1()
-            self.phase2()
-            self.phase3()
-        return self.graph
-
-    def update_remaining(self, u, v, aux_graph=None):
-        # decrement remaining nodes, modify auxilliary graph if in phase3
-        if aux_graph is not None:
-            # remove edges from auxilliary graph
-            aux_graph.remove_edge(u,v)
-        if self.remaining_degree[u] == 1:
-            del self.remaining_degree[u]
-            if aux_graph is not None:
-                aux_graph.remove_node(u)
-        else:
-            self.remaining_degree[u] -= 1
-        if self.remaining_degree[v] == 1:
-            del self.remaining_degree[v]
-            if aux_graph is not None:
-                aux_graph.remove_node(v)
-        else:
-            self.remaining_degree[v] -= 1
-
-    def p(self,u,v):
-        # degree probability
-        return 1 - self.degree[u]*self.degree[v]/(4.0*self.m)
-
-    def q(self,u,v):
-        # remaining degree probability
-        norm = float(max(self.remaining_degree.values()))**2
-        return self.remaining_degree[u]*self.remaining_degree[v]/norm
-
-    def suitable_edge(self):
-        # Check if there is a suitable edge that is not in the graph
-        # True if an (arbitrary) remaining node has at least one possible 
-        # connection to another remaining node
-        nodes = iter(self.remaining_degree)
-        u = next(nodes) # one arbitrary node
-        for v in nodes: # loop over all other remaining nodes
-            if not self.graph.has_edge(u, v):
-                return True
-        return False
-
-    def phase1(self):
-        # choose node pairs from (degree) weighted distribution
-        while sum(self.remaining_degree.values()) >= 2 * self.dmax**2:
-            u,v = sorted(random_weighted_sample(self.remaining_degree, 2))
-            if self.graph.has_edge(u,v):
-                continue
-            if random.random() < self.p(u,v):  # accept edge
-                self.graph.add_edge(u,v)
-                self.update_remaining(u,v)
-
-    def phase2(self):
-        # choose remaining nodes uniformly at random and use rejection sampling
-        while len(self.remaining_degree) >= 2 * self.dmax:
-            norm = float(max(self.remaining_degree.values()))**2
-            while True:
-                u,v = sorted(random.sample(self.remaining_degree.keys(), 2))
-                if self.graph.has_edge(u,v):
-                    continue
-                if random.random() < self.q(u,v):
-                    break
-            if random.random() < self.p(u,v):  # accept edge
-                self.graph.add_edge(u,v)
-                self.update_remaining(u,v)
-
-    def phase3(self):
-        # build potential remaining edges and choose with rejection sampling
-        potential_edges = combinations(self.remaining_degree, 2)
-        # build auxilliary graph of potential edges not already in graph
-        H = nx.Graph([(u,v) for (u,v) in potential_edges
-                      if not self.graph.has_edge(u,v)])
-        while self.remaining_degree:
-            if not self.suitable_edge():
-                raise nx.NetworkXUnfeasible('no suitable edges left')
-            while True:
-                u,v = sorted(random.choice(H.edges()))
-                if random.random() < self.q(u,v):
-                    break
-            if random.random() < self.p(u,v): # accept edge
-                self.graph.add_edge(u,v)
-                self.update_remaining(u,v, aux_graph=H)
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/generators/directed.py b/lib/python2.7/site-packages/setoolsgui/networkx/generators/directed.py
deleted file mode 100644
index d1dc712..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/generators/directed.py
+++ /dev/null
@@ -1,304 +0,0 @@
-"""
-Generators for some directed graphs.
-
-gn_graph: growing network 
-gnc_graph: growing network with copying
-gnr_graph: growing network with redirection
-scale_free_graph: scale free directed graph 
-
-"""
-#    Copyright (C) 2006-2009 by 
-#    Aric Hagberg <hagberg@lanl.gov>
-#    Dan Schult <dschult@colgate.edu>
-#    Pieter Swart <swart@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-__author__ ="""Aric Hagberg (hagberg@lanl.gov)\nWillem Ligtenberg (W.P.A.Ligtenberg@tue.nl)"""
-
-__all__ = ['gn_graph', 'gnc_graph', 'gnr_graph','scale_free_graph']
-
-import random
-
-import networkx as nx
-from networkx.generators.classic import empty_graph
-from networkx.utils import discrete_sequence
-
-
-def gn_graph(n,kernel=None,create_using=None,seed=None):
-    """Return the GN digraph with n nodes.
-
-    The GN (growing network) graph is built by adding nodes one at a time with
-    a link to one previously added node.  The target node for the link is 
-    chosen with probability based on degree.  The default attachment kernel is
-    a linear function of degree.
-
-    The graph is always a (directed) tree.
-
-    Parameters
-    ----------
-    n : int
-        The number of nodes for the generated graph.
-    kernel : function
-        The attachment kernel.
-    create_using : graph, optional (default DiGraph)
-        Return graph of this type. The instance will be cleared.
-    seed : hashable object, optional
-        The seed for the random number generator.
-
-    Examples
-    --------
-    >>> D=nx.gn_graph(10)    # the GN graph
-    >>> G=D.to_undirected()  # the undirected version
-
-    To specify an attachment kernel use the kernel keyword
-
-    >>> D=nx.gn_graph(10,kernel=lambda x:x**1.5) # A_k=k^1.5
-
-    References
-    ----------
-    .. [1] P. L. Krapivsky and S. Redner,
-           Organization of Growing Random Networks,
-           Phys. Rev. E, 63, 066123, 2001.
-    """
-    if create_using is None:
-        create_using = nx.DiGraph()
-    elif not create_using.is_directed():
-        raise nx.NetworkXError("Directed Graph required in create_using")
-
-    if kernel is None:
-        kernel = lambda x: x
-
-    if seed is not None:
-        random.seed(seed)
-
-    G=empty_graph(1,create_using)
-    G.name="gn_graph(%s)"%(n)
-
-    if n==1:
-        return G
-
-    G.add_edge(1,0) # get started
-    ds=[1,1] # degree sequence
-
-    for source in range(2,n):
-        # compute distribution from kernel and degree
-        dist=[kernel(d) for d in ds] 
-        # choose target from discrete distribution 
-        target=discrete_sequence(1,distribution=dist)[0]
-        G.add_edge(source,target)
-        ds.append(1)  # the source has only one link (degree one)
-        ds[target]+=1 # add one to the target link degree
-    return G
-
-
-def gnr_graph(n,p,create_using=None,seed=None):
-    """Return the GNR digraph with n nodes and redirection probability p.
-
-    The GNR (growing network with redirection) graph is built by adding nodes 
-    one at a time with a link to one previously added node.  The previous 
-    target node is chosen uniformly at random.  With probabiliy p the link is 
-    instead "redirected" to the successor node of the target.  The graph is 
-    always a (directed) tree.
-
-    Parameters
-    ----------
-    n : int
-        The number of nodes for the generated graph.
-    p : float
-        The redirection probability.
-    create_using : graph, optional (default DiGraph)
-        Return graph of this type. The instance will be cleared.
-    seed : hashable object, optional
-        The seed for the random number generator.
-
-    Examples
-    --------
-    >>> D=nx.gnr_graph(10,0.5)  # the GNR graph
-    >>> G=D.to_undirected()  # the undirected version
-
-    References
-    ----------
-    .. [1] P. L. Krapivsky and S. Redner,
-           Organization of Growing Random Networks,
-           Phys. Rev. E, 63, 066123, 2001.
-    """
-    if create_using is None:
-        create_using = nx.DiGraph()
-    elif not create_using.is_directed():
-        raise nx.NetworkXError("Directed Graph required in create_using")
-
-    if not seed is None:
-        random.seed(seed)
-
-    G=empty_graph(1,create_using)
-    G.name="gnr_graph(%s,%s)"%(n,p)
-
-    if n==1:
-        return G
-
-    for source in range(1,n):
-        target=random.randrange(0,source)
-        if random.random() < p and target !=0:
-            target=G.successors(target)[0]
-        G.add_edge(source,target)
-
-    return G
-
-
-def gnc_graph(n,create_using=None,seed=None):
-    """Return the GNC digraph with n nodes.
-
-    The GNC (growing network with copying) graph is built by adding nodes one 
-    at a time with a links to one previously added node (chosen uniformly at 
-    random) and to all of that node's successors.
-
-    Parameters
-    ----------
-    n : int
-        The number of nodes for the generated graph.
-    create_using : graph, optional (default DiGraph)
-        Return graph of this type. The instance will be cleared.
-    seed : hashable object, optional
-        The seed for the random number generator.
-
-    References
-    ----------
-    .. [1] P. L. Krapivsky and S. Redner,
-           Network Growth by Copying,
-           Phys. Rev. E, 71, 036118, 2005k.},
-    """
-    if create_using is None:
-        create_using = nx.DiGraph()
-    elif not create_using.is_directed():
-        raise nx.NetworkXError("Directed Graph required in create_using")
-
-    if not seed is None:
-        random.seed(seed)
-
-    G=empty_graph(1,create_using)
-    G.name="gnc_graph(%s)"%(n)
-
-    if n==1:
-        return G
-
-    for source in range(1,n):
-        target=random.randrange(0,source)
-        for succ in G.successors(target):
-            G.add_edge(source,succ)
-        G.add_edge(source,target)
-
-    return G
-
-
-def scale_free_graph(n,
-                     alpha=0.41,
-                     beta=0.54,
-                     gamma=0.05,
-                     delta_in=0.2,
-                     delta_out=0,
-                     create_using=None,
-                     seed=None):
-    """Return a scale free directed graph.
-
-    Parameters
-    ----------
-    n : integer
-        Number of nodes in graph
-    alpha : float 
-        Probability for adding a new node connected to an existing node
-        chosen randomly according to the in-degree distribution.
-    beta : float
-        Probability for adding an edge between two existing nodes.
-        One existing node is chosen randomly according the in-degree 
-        distribution and the other chosen randomly according to the out-degree 
-        distribution.     
-    gamma : float
-        Probability for adding a new node conecgted to an existing node
-        chosen randomly according to the out-degree distribution.
-    delta_in : float
-        Bias for choosing ndoes from in-degree distribution.
-    delta_out : float
-        Bias for choosing ndoes from out-degree distribution.
-    create_using : graph, optional (default MultiDiGraph)
-        Use this graph instance to start the process (default=3-cycle).
-    seed : integer, optional
-        Seed for random number generator
-
-    Examples
-    --------
-    >>> G=nx.scale_free_graph(100)
-  
-    Notes
-    -----
-    The sum of alpha, beta, and gamma must be 1.
-
-    References
-    ----------  
-    .. [1] B. Bollob{\'a}s, C. Borgs, J. Chayes, and O. Riordan,
-           Directed scale-free graphs,
-           Proceedings of the fourteenth annual ACM-SIAM symposium on
-           Discrete algorithms, 132--139, 2003.
-    """
-
-    def _choose_node(G,distribution,delta):
-        cumsum=0.0
-        # normalization 
-        psum=float(sum(distribution.values()))+float(delta)*len(distribution)
-        r=random.random()
-        for i in range(0,len(distribution)):
-            cumsum+=(distribution[i]+delta)/psum
-            if r < cumsum:  
-                break
-        return i
-
-    if create_using is None:
-        # start with 3-cycle
-        G = nx.MultiDiGraph()
-        G.add_edges_from([(0,1),(1,2),(2,0)])
-    else:
-        # keep existing graph structure?
-        G = create_using
-        if not (G.is_directed() and G.is_multigraph()):
-            raise nx.NetworkXError(\
-                  "MultiDiGraph required in create_using")
-
-    if alpha <= 0:
-        raise ValueError('alpha must be >= 0.')
-    if beta <= 0:
-        raise ValueError('beta must be >= 0.')
-    if gamma <= 0:
-        raise ValueError('beta must be >= 0.')
-
-    if alpha+beta+gamma !=1.0:
-        raise ValueError('alpha+beta+gamma must equal 1.')
-        
-    G.name="directed_scale_free_graph(%s,alpha=%s,beta=%s,gamma=%s,delta_in=%s,delta_out=%s)"%(n,alpha,beta,gamma,delta_in,delta_out)
-
-    # seed random number generated (uses None as default)
-    random.seed(seed)
-
-    while len(G)<n:
-        r = random.random()
-        # random choice in alpha,beta,gamma ranges
-        if r<alpha:
-            # alpha
-            # add new node v
-            v = len(G) 
-            # choose w according to in-degree and delta_in
-            w = _choose_node(G, G.in_degree(),delta_in)
-        elif r < alpha+beta:
-            # beta
-            # choose v according to out-degree and delta_out
-            v = _choose_node(G, G.out_degree(),delta_out)
-            # choose w according to in-degree and delta_in
-            w = _choose_node(G, G.in_degree(),delta_in)
-        else:
-            # gamma
-            # choose v according to out-degree and delta_out
-            v = _choose_node(G, G.out_degree(),delta_out)
-            # add new node w
-            w = len(G) 
-        G.add_edge(v,w)
-        
-    return G
-
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/generators/ego.py b/lib/python2.7/site-packages/setoolsgui/networkx/generators/ego.py
deleted file mode 100644
index 15e5bc2..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/generators/ego.py
+++ /dev/null
@@ -1,70 +0,0 @@
-"""
-Ego graph.
-"""
-#    Copyright (C) 2010 by 
-#    Aric Hagberg <hagberg@lanl.gov>
-#    Dan Schult <dschult@colgate.edu>
-#    Pieter Swart <swart@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-__author__ = """\n""".join(['Drew Conway <drew.conway@nyu.edu>',
-                            'Aric Hagberg <hagberg@lanl.gov>'])
-__all__ = ['ego_graph']
-
-import networkx as nx
-
-def ego_graph(G,n,radius=1,center=True,undirected=False,distance=None):
-    """Returns induced subgraph of neighbors centered at node n within
-    a given radius.
-    
-    Parameters
-    ----------
-    G : graph
-      A NetworkX Graph or DiGraph
-
-    n : node 
-      A single node 
-
-    radius : number, optional
-      Include all neighbors of distance<=radius from n.
-      
-    center : bool, optional
-      If False, do not include center node in graph 
-
-    undirected : bool, optional      
-      If True use both in- and out-neighbors of directed graphs.
-
-    distance : key, optional      
-      Use specified edge data key as distance.  For example, setting
-      distance='weight' will use the edge weight to measure the
-      distance from the node n.
-
-    Notes
-    -----
-    For directed graphs D this produces the "out" neighborhood
-    or successors.  If you want the neighborhood of predecessors
-    first reverse the graph with D.reverse().  If you want both
-    directions use the keyword argument undirected=True.
-
-    Node, edge, and graph attributes are copied to the returned subgraph.
-    """
-    if undirected:
-        if distance is not None:
-            sp,_=nx.single_source_dijkstra(G.to_undirected(),
-                                           n,cutoff=radius,
-                                           weight=distance)
-        else:
-            sp=nx.single_source_shortest_path_length(G.to_undirected(),
-                                                     n,cutoff=radius)
-    else:
-        if distance is not None:
-            sp,_=nx.single_source_dijkstra(G,
-                                           n,cutoff=radius,
-                                           weight=distance)
-        else:
-            sp=nx.single_source_shortest_path_length(G,n,cutoff=radius)
-
-    H=G.subgraph(sp).copy()
-    if not center:
-        H.remove_node(n)
-    return  H
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/generators/geometric.py b/lib/python2.7/site-packages/setoolsgui/networkx/generators/geometric.py
deleted file mode 100644
index b64e0c2..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/generators/geometric.py
+++ /dev/null
@@ -1,352 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-Generators for geometric graphs.
-"""
-#    Copyright (C) 2004-2011 by 
-#    Aric Hagberg <hagberg@lanl.gov>
-#    Dan Schult <dschult@colgate.edu>
-#    Pieter Swart <swart@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-
-from __future__ import print_function
-
-__author__ = "\n".join(['Aric Hagberg (hagberg@lanl.gov)',
-                        'Dan Schult (dschult@colgate.edu)',
-                        'Ben Edwards (BJEdwards@gmail.com)'])
-
-__all__ = ['random_geometric_graph',
-           'waxman_graph',
-           'geographical_threshold_graph',
-           'navigable_small_world_graph']
-
-from bisect import bisect_left
-from functools import reduce
-from itertools import product
-import math, random, sys
-import networkx as nx
-
-#---------------------------------------------------------------------------
-#  Random Geometric Graphs
-#---------------------------------------------------------------------------
-        
-def random_geometric_graph(n, radius, dim=2, pos=None):
-    r"""Return the random geometric graph in the unit cube.
-
-    The random geometric graph model places n nodes uniformly at random 
-    in the unit cube  Two nodes `u,v` are connected with an edge if
-    `d(u,v)<=r` where `d` is the Euclidean distance and `r` is a radius 
-    threshold.
-
-    Parameters
-    ----------
-    n : int
-        Number of nodes
-    radius: float
-        Distance threshold value  
-    dim : int, optional
-        Dimension of graph
-    pos : dict, optional
-        A dictionary keyed by node with node positions as values.
-
-    Returns
-    -------
-    Graph
-      
-    Examples
-    --------
-    >>> G = nx.random_geometric_graph(20,0.1)
-
-    Notes
-    -----
-    This uses an `n^2` algorithm to build the graph.  A faster algorithm
-    is possible using k-d trees.
-
-    The pos keyword can be used to specify node positions so you can create
-    an arbitrary distribution and domain for positions.  If you need a distance
-    function other than Euclidean you'll have to hack the algorithm.
-
-    E.g to use a 2d Gaussian distribution of node positions with mean (0,0)
-    and std. dev. 2
-
-    >>> import random
-    >>> n=20
-    >>> p=dict((i,(random.gauss(0,2),random.gauss(0,2))) for i in range(n))
-    >>> G = nx.random_geometric_graph(n,0.2,pos=p)
-
-    References
-    ----------
-    .. [1] Penrose, Mathew, Random Geometric Graphs, 
-       Oxford Studies in Probability, 5, 2003.
-    """
-    G=nx.Graph()
-    G.name="Random Geometric Graph"
-    G.add_nodes_from(range(n)) 
-    if pos is None:
-        # random positions 
-        for n in G:
-            G.node[n]['pos']=[random.random() for i in range(0,dim)]
-    else:
-        nx.set_node_attributes(G,'pos',pos)
-    # connect nodes within "radius" of each other
-    # n^2 algorithm, could use a k-d tree implementation
-    nodes = G.nodes(data=True)
-    while nodes:
-        u,du = nodes.pop()
-        pu = du['pos']
-        for v,dv in nodes:
-            pv = dv['pos']
-            d = sum(((a-b)**2 for a,b in zip(pu,pv)))
-            if d <= radius**2:
-                G.add_edge(u,v)
-    return G
-
-def geographical_threshold_graph(n, theta, alpha=2, dim=2, 
-                                 pos=None, weight=None):
-    r"""Return a geographical threshold graph.
-
-    The geographical threshold graph model places n nodes uniformly at random
-    in a rectangular domain.  Each node `u` is assigned a weight `w_u`. 
-    Two nodes `u,v` are connected with an edge if
-
-    .. math::
-
-       w_u + w_v \ge \theta r^{\alpha}
-
-    where `r` is the Euclidean distance between `u` and `v`, 
-    and `\theta`, `\alpha` are parameters.
-
-    Parameters
-    ----------
-    n : int
-        Number of nodes
-    theta: float
-        Threshold value
-    alpha: float, optional
-        Exponent of distance function
-    dim : int, optional
-        Dimension of graph
-    pos : dict
-        Node positions as a dictionary of tuples keyed by node.
-    weight : dict
-        Node weights as a dictionary of numbers keyed by node.
-
-    Returns
-    -------
-    Graph
-      
-    Examples
-    --------
-    >>> G = nx.geographical_threshold_graph(20,50)
-
-    Notes
-    -----
-    If weights are not specified they are assigned to nodes by drawing randomly
-    from an the exponential distribution with rate parameter `\lambda=1`.
-    To specify a weights from a different distribution assign them to a 
-    dictionary and pass it as the weight= keyword
-
-    >>> import random
-    >>> n = 20
-    >>> w=dict((i,random.expovariate(5.0)) for i in range(n))
-    >>> G = nx.geographical_threshold_graph(20,50,weight=w)
-    
-    If node positions are not specified they are randomly assigned from the
-    uniform distribution.
-
-    References
-    ----------
-    .. [1] Masuda, N., Miwa, H., Konno, N.: 
-       Geographical threshold graphs with small-world and scale-free properties.
-       Physical Review E 71, 036108 (2005)
-    .. [2]  Milan Bradonjić, Aric Hagberg and Allon G. Percus, 
-       Giant component and connectivity in geographical threshold graphs, 
-       in Algorithms and Models for the Web-Graph (WAW 2007), 
-       Antony Bonato and Fan Chung (Eds), pp. 209--216, 2007
-    """
-    G=nx.Graph()
-    # add n nodes
-    G.add_nodes_from([v for v in range(n)])  
-    if weight is None:
-        # choose weights from exponential distribution 
-        for n in G:
-            G.node[n]['weight'] = random.expovariate(1.0)
-    else:
-        nx.set_node_attributes(G,'weight',weight)
-    if pos is None:
-        # random positions 
-        for n in G:
-            G.node[n]['pos']=[random.random() for i in range(0,dim)]
-    else:
-        nx.set_node_attributes(G,'pos',pos)
-    G.add_edges_from(geographical_threshold_edges(G, theta, alpha))
-    return G
-
-def geographical_threshold_edges(G, theta, alpha=2):
-    # generate edges for a geographical threshold graph given a graph 
-    # with positions and weights assigned as node attributes 'pos' and 'weight'.
-    nodes = G.nodes(data=True)
-    while nodes:
-        u,du = nodes.pop()
-        wu = du['weight']
-        pu = du['pos']
-        for v,dv in nodes:
-            wv = dv['weight']
-            pv = dv['pos']
-            r = math.sqrt(sum(((a-b)**2 for a,b in zip(pu,pv))))
-            if wu+wv >= theta*r**alpha:
-                yield(u,v)
-
-def waxman_graph(n, alpha=0.4, beta=0.1, L=None, domain=(0,0,1,1)):
-    r"""Return a Waxman random graph.
-
-    The Waxman random graph models place n nodes uniformly at random
-    in a rectangular domain. Two nodes u,v are connected with an edge
-    with probability
-
-    .. math::
-            p = \alpha*exp(-d/(\beta*L)).
-
-    This function implements both Waxman models.            
-
-    Waxman-1:  `L` not specified
-       The distance `d` is the Euclidean distance between the nodes u and v.
-       `L` is the maximum distance between all nodes in the graph.
-
-    Waxman-2: `L` specified
-       The distance `d` is chosen randomly in `[0,L]`.
-
-    Parameters
-    ----------
-    n : int
-        Number of nodes
-    alpha: float
-        Model parameter
-    beta: float
-        Model parameter
-    L : float, optional
-        Maximum distance between nodes.  If not specified the actual distance
-        is calculated.
-    domain : tuple of numbers, optional
-         Domain size (xmin, ymin, xmax, ymax)
-
-    Returns
-    -------
-    G: Graph
-
-    References
-    ----------
-    .. [1]  B. M. Waxman, Routing of multipoint connections. 
-       IEEE J. Select. Areas Commun. 6(9),(1988) 1617-1622. 
-    """
-    # build graph of n nodes with random positions in the unit square
-    G = nx.Graph()
-    G.add_nodes_from(range(n))
-    (xmin,ymin,xmax,ymax)=domain
-    for n in G:
-        G.node[n]['pos']=((xmin + (xmax-xmin))*random.random(),
-                          (ymin + (ymax-ymin))*random.random())
-    if L is None:
-        # find maximum distance L between two nodes
-        l = 0
-        pos = list(nx.get_node_attributes(G,'pos').values())
-        while pos:
-            x1,y1 = pos.pop()
-            for x2,y2 in pos:
-                r2 = (x1-x2)**2 + (y1-y2)**2
-                if r2 > l:
-                    l = r2
-        l=math.sqrt(l)
-    else: 
-        # user specified maximum distance
-        l = L
-
-    nodes=G.nodes()
-    if L is None:
-        # Waxman-1 model
-        # try all pairs, connect randomly based on euclidean distance
-        while nodes:
-            u = nodes.pop()
-            x1,y1 = G.node[u]['pos']
-            for v in nodes:
-                x2,y2 = G.node[v]['pos']
-                r = math.sqrt((x1-x2)**2 + (y1-y2)**2)
-                if random.random() < alpha*math.exp(-r/(beta*l)):
-                    G.add_edge(u,v)
-    else:
-        # Waxman-2 model
-        # try all pairs, connect randomly based on randomly chosen l
-        while nodes:
-            u = nodes.pop()
-            for v in nodes:
-                r = random.random()*l
-                if random.random() < alpha*math.exp(-r/(beta*l)):
-                    G.add_edge(u,v)
-    return G
-
-
-def navigable_small_world_graph(n, p=1, q=1, r=2, dim=2, seed=None):
-    r"""Return a navigable small-world graph.
-
-    A navigable small-world graph is a directed grid with additional
-    long-range connections that are chosen randomly.  From [1]_:
-
-    Begin with a set of nodes that are identified with the set of lattice
-    points in an `n \times n` square, `{(i,j): i\in {1,2,\ldots,n}, j\in {1,2,\ldots,n}}`
-    and define the lattice distance between two nodes `(i,j)` and `(k,l)` 
-    to be the number of "lattice steps" separating them: `d((i,j),(k,l)) = |k-i|+|l-j|`.  
-
-    For a universal constant `p`, the node `u` has a directed edge to every other 
-    node within lattice distance `p` (local contacts) .
-
-    For universal constants `q\ge 0` and `r\ge 0` construct directed edges from `u` to `q`
-    other nodes (long-range contacts) using independent random trials;  the i'th 
-    directed edge from `u` has endpoint `v` with probability proportional to `d(u,v)^{-r}`.
-
-    Parameters
-    ----------
-    n : int
-        The number of nodes.
-    p : int
-        The diameter of short range connections. Each node is connected
-        to every other node within lattice distance p.
-    q : int
-        The number of long-range connections for each node.
-    r : float
-        Exponent for decaying probability of connections.  The probability of 
-        connecting to a node at lattice distance d is 1/d^r.
-    dim : int
-        Dimension of grid
-    seed : int, optional
-        Seed for random number generator (default=None). 
-      
-    References
-    ----------
-    .. [1] J. Kleinberg. The small-world phenomenon: An algorithmic 
-       perspective. Proc. 32nd ACM Symposium on Theory of Computing, 2000. 
-    """
-    if (p < 1):
-        raise nx.NetworkXException("p must be >= 1")
-    if (q < 0):
-        raise nx.NetworkXException("q must be >= 0")
-    if (r < 0):
-        raise nx.NetworkXException("r must be >= 1")
-    if not seed is None:
-        random.seed(seed)
-    G = nx.DiGraph()
-    nodes = list(product(range(n),repeat=dim))
-    for p1 in nodes:
-        probs = [0]
-        for p2 in nodes:
-            if p1==p2:
-                continue
-            d = sum((abs(b-a) for a,b in zip(p1,p2)))
-            if d <= p:
-                G.add_edge(p1,p2)
-            probs.append(d**-r)
-        cdf = list(nx.utils.cumulative_sum(probs))
-        for _ in range(q):
-            target = nodes[bisect_left(cdf,random.uniform(0, cdf[-1]))]
-            G.add_edge(p1,target)
-    return G
-  
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/generators/hybrid.py b/lib/python2.7/site-packages/setoolsgui/networkx/generators/hybrid.py
deleted file mode 100644
index b4936fa..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/generators/hybrid.py
+++ /dev/null
@@ -1,116 +0,0 @@
-"""
-Hybrid 
-
-"""
-__author__ = """Aric Hagberg (hagberg@lanl.gov)\nDan Schult (dschult@colgate.edu)"""
-#    Copyright (C) 2004-2008 by 
-#    Aric Hagberg <hagberg@lanl.gov>
-#    Dan Schult <dschult@colgate.edu>
-#    Pieter Swart <swart@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-
-_all__ = ['kl_connected_subgraph', 'is_kl_connected']
-
-import copy
-import networkx as nx
-
-def kl_connected_subgraph(G,k,l,low_memory=False,same_as_graph=False):
-    """ Returns the maximum locally (k,l) connected subgraph of G.
-
-        (k,l)-connected subgraphs are presented by Fan Chung and Li
-        in "The Small World Phenomenon in hybrid power law graphs"
-        to appear in "Complex Networks" (Ed. E. Ben-Naim) Lecture
-        Notes in Physics, Springer (2004)
-
-        low_memory=True then use a slightly slower, but  lower memory version
-        same_as_graph=True then return a tuple with subgraph and
-        pflag for if G is kl-connected
-    """
-    H=copy.deepcopy(G)    # subgraph we construct by removing from G
-    
-    graphOK=True
-    deleted_some=True # hack to start off the while loop
-    while deleted_some:
-        deleted_some=False
-        for edge in H.edges():
-            (u,v)=edge
-            ### Get copy of graph needed for this search
-            if low_memory:
-                verts=set([u,v])
-                for i in range(k):
-                    [verts.update(G.neighbors(w)) for w in verts.copy()]
-                G2=G.subgraph(list(verts))
-            else:
-                G2=copy.deepcopy(G)
-            ###
-            path=[u,v]
-            cnt=0
-            accept=0
-            while path:
-                cnt += 1 # Found a path
-                if cnt>=l:
-                    accept=1
-                    break
-                # record edges along this graph
-                prev=u
-                for w in path:
-                    if prev!=w:
-                        G2.remove_edge(prev,w)
-                        prev=w
-#                path=shortest_path(G2,u,v,k) # ??? should "Cutoff" be k+1?
-                try:
-                    path=nx.shortest_path(G2,u,v) # ??? should "Cutoff" be k+1?
-                except nx.NetworkXNoPath:
-                    path = False
-            # No Other Paths
-            if accept==0:
-                H.remove_edge(u,v)
-                deleted_some=True
-                if graphOK: graphOK=False
-    # We looked through all edges and removed none of them.
-    # So, H is the maximal (k,l)-connected subgraph of G
-    if same_as_graph:
-        return (H,graphOK)
-    return H
-
-def is_kl_connected(G,k,l,low_memory=False):
-    """Returns True if G is kl connected."""
-    graphOK=True
-    for edge in G.edges():
-        (u,v)=edge
-        ### Get copy of graph needed for this search
-        if low_memory:
-            verts=set([u,v])
-            for i in range(k):
-                [verts.update(G.neighbors(w)) for w in verts.copy()]
-            G2=G.subgraph(verts)
-        else:
-            G2=copy.deepcopy(G)
-        ###
-        path=[u,v]
-        cnt=0
-        accept=0
-        while path:
-            cnt += 1 # Found a path
-            if cnt>=l:
-                accept=1
-                break
-            # record edges along this graph
-            prev=u
-            for w in path:
-                if w!=prev:
-                    G2.remove_edge(prev,w)
-                    prev=w
-#            path=shortest_path(G2,u,v,k) # ??? should "Cutoff" be k+1?
-            try:
-                path=nx.shortest_path(G2,u,v) # ??? should "Cutoff" be k+1?
-            except nx.NetworkXNoPath:
-                path = False
-        # No Other Paths
-        if accept==0:
-            graphOK=False
-            break
-    # return status
-    return graphOK
-
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/generators/intersection.py b/lib/python2.7/site-packages/setoolsgui/networkx/generators/intersection.py
deleted file mode 100644
index cc7903d..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/generators/intersection.py
+++ /dev/null
@@ -1,118 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-Generators for random intersection graphs.
-"""
-#    Copyright (C) 2011 by 
-#    Aric Hagberg <hagberg@lanl.gov>
-#    Dan Schult <dschult@colgate.edu>
-#    Pieter Swart <swart@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-import random
-import networkx as nx
-__author__ = "\n".join(['Aric Hagberg (hagberg@lanl.gov)'])
-
-__all__ = ['uniform_random_intersection_graph',
-           'k_random_intersection_graph',
-           'general_random_intersection_graph',
-           ]
-
-def uniform_random_intersection_graph(n, m, p, seed=None):
-    """Return a uniform random intersection graph.
-
-    Parameters
-    ----------
-    n : int
-        The number of nodes in the first bipartite set (nodes)
-    m : int
-        The number of nodes in the second bipartite set (attributes)
-    p : float
-        Probability of connecting nodes between bipartite sets  
-    seed : int, optional
-        Seed for random number generator (default=None). 
-
-    See Also
-    --------
-    gnp_random_graph
-
-    References
-    ----------
-    .. [1] K.B. Singer-Cohen, Random Intersection Graphs, 1995,
-       PhD thesis, Johns Hopkins University
-    .. [2] Fill, J. A., Scheinerman, E. R., and Singer-Cohen, K. B., 
-       Random intersection graphs when m = !(n): 
-       An equivalence theorem relating the evolution of the g(n, m, p)
-       and g(n, p) models. Random Struct. Algorithms 16, 2 (2000), 156–176.
-    """
-    G=nx.bipartite_random_graph(n, m, p, seed=seed)
-    return nx.projected_graph(G, range(n)) 
-
-def k_random_intersection_graph(n,m,k):
-    """Return a intersection graph with randomly chosen attribute sets for
-    each node that are of equal size (k). 
-
-    Parameters
-    ----------
-    n : int
-        The number of nodes in the first bipartite set (nodes)
-    m : int
-        The number of nodes in the second bipartite set (attributes)
-    k : float
-        Size of attribute set to assign to each node.
-    seed : int, optional
-        Seed for random number generator (default=None). 
-
-    See Also
-    --------
-    gnp_random_graph, uniform_random_intersection_graph
-
-    References
-    ----------
-    .. [1] Godehardt, E., and Jaworski, J.
-       Two models of random intersection graphs and their applications.
-       Electronic Notes in Discrete Mathematics 10 (2001), 129--132.
-    """
-    G = nx.empty_graph(n + m)
-    mset = range(n,n+m)
-    for v in range(n):
-        targets = random.sample(mset, k)
-        G.add_edges_from(zip([v]*len(targets), targets))
-    return nx.projected_graph(G, range(n))
-
-def general_random_intersection_graph(n,m,p):
-    """Return a random intersection graph with independent probabilities
-    for connections between node and attribute sets.
-
-    Parameters
-    ----------
-    n : int
-        The number of nodes in the first bipartite set (nodes)
-    m : int
-        The number of nodes in the second bipartite set (attributes)
-    p : list of floats of length m
-        Probabilities for connecting nodes to each attribute
-    seed : int, optional
-        Seed for random number generator (default=None). 
-    
-    See Also
-    --------
-    gnp_random_graph, uniform_random_intersection_graph
-
-    References
-    ----------
-    .. [1] Nikoletseas, S. E., Raptopoulos, C., and Spirakis, P. G. 
-       The existence and efficient construction of large independent sets 
-       in general random intersection graphs. In ICALP (2004), J. D´Ä±az, 
-       J. Karhum¨aki, A. Lepist¨o, and D. Sannella, Eds., vol. 3142
-       of Lecture Notes in Computer Science, Springer, pp. 1029–1040.
-    """
-    if len(p)!=m:
-        raise ValueError("Probability list p must have m elements.")
-    G = nx.empty_graph(n + m)
-    mset = range(n,n+m)
-    for u in range(n):
-        for v,q in zip(mset,p):
-            if random.random()<q:
-                G.add_edge(u,v)
-    return nx.projected_graph(G, range(n))
-
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/generators/line.py b/lib/python2.7/site-packages/setoolsgui/networkx/generators/line.py
deleted file mode 100644
index 4d6c14d..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/generators/line.py
+++ /dev/null
@@ -1,69 +0,0 @@
-"""
-Line graphs.
-
-"""
-#    Copyright (C) 2010 by 
-#    Aric Hagberg <hagberg@lanl.gov>
-#    Dan Schult <dschult@colgate.edu>
-#    Pieter Swart <swart@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-__author__ = """Aric Hagberg (hagberg@lanl.gov)\nPieter Swart (swart@lanl.gov)\nDan Schult(dschult@colgate.edu)"""
-
-__all__ = ['line_graph']
-
-import networkx as nx
-
-def line_graph(G):
-    """Return the line graph of the graph or digraph G.
-
-    The line graph of a graph G has a node for each edge 
-    in G and an edge between those nodes if the two edges
-    in G share a common node.
-
-    For DiGraphs an edge an edge represents a directed path of length 2.
-
-    The original node labels are kept as two-tuple node labels
-    in the line graph.  
-
-    Parameters
-    ----------
-    G : graph
-       A NetworkX Graph or DiGraph
-
-    Examples
-    --------    
-    >>> G=nx.star_graph(3)
-    >>> L=nx.line_graph(G)
-    >>> print(sorted(L.edges())) # makes a clique, K3
-    [((0, 1), (0, 2)), ((0, 1), (0, 3)), ((0, 3), (0, 2))]
-
-    Notes
-    -----
-    Not implemented for MultiGraph or MultiDiGraph classes.
-
-    Graph, node, and edge data are not propagated to the new graph.
-
-    """
-    if type(G) == nx.MultiGraph or type(G) == nx.MultiDiGraph:
-        raise Exception("Line graph not implemented for Multi(Di)Graphs")
-    L=G.__class__()
-    if G.is_directed():
-        for u,nlist in G.adjacency_iter():  # same as successors for digraph
-            # look for directed path of length two
-            for n in nlist:
-                nbrs=G[n] # successors 
-                for nbr in nbrs:
-                    if nbr!=u:
-                        L.add_edge((u,n),(n,nbr))
-    else:
-        for u,nlist in G.adjacency_iter():
-            # label nodes as tuple of edge endpoints in original graph
-            # "node tuple" must be in lexigraphical order
-            nodes=[tuple(sorted(n)) for n in zip([u]*len(nlist),nlist)]
-            # add clique of nodes to graph
-            while nodes:
-                u=nodes.pop()
-                L.add_edges_from((u,v) for v in nodes)
-    return L
-
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/generators/random_clustered.py b/lib/python2.7/site-packages/setoolsgui/networkx/generators/random_clustered.py
deleted file mode 100644
index fe294e6..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/generators/random_clustered.py
+++ /dev/null
@@ -1,125 +0,0 @@
-# -*- coding: utf-8 -*-
-"""Generate graphs with given degree and triangle sequence.
-"""
-#    Copyright (C) 2004-2011 by 
-#    Aric Hagberg <hagberg@lanl.gov>
-#    Dan Schult <dschult@colgate.edu>
-#    Pieter Swart <swart@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-import random
-import networkx as nx
-__author__ = "\n".join(['Aric Hagberg (hagberg@lanl.gov)',
-                        'Joel Miller (joel.c.miller.research@gmail.com)'])
-
-__all__ = ['random_clustered_graph']
-
-
-def random_clustered_graph(joint_degree_sequence, create_using=None, seed=None):
-    """Generate a random graph with the given joint degree and triangle
-    degree sequence.
-	
-    This uses a configuration model-like approach to generate a
-    random pseudograph (graph with parallel edges and self loops) by
-    randomly assigning edges to match the given indepdenent edge 
-    and triangle degree sequence.
-
-    Parameters 
-    ---------- 
-    joint_degree_sequence : list of integer pairs
-        Each list entry corresponds to the independent edge degree and
-        triangle degree of a node.
-    create_using : graph, optional (default MultiGraph)
-        Return graph of this type. The instance will be cleared.
-    seed : hashable object, optional
-        The seed for the random number generator.
-
-    Returns
-    -------
-    G : MultiGraph
-        A graph with the specified degree sequence. Nodes are labeled
-        starting at 0 with an index corresponding to the position in
-        deg_sequence.
-	
-    Raises
-    ------
-    NetworkXError
-        If the independent edge degree sequence sum is not even
-        or the triangle degree sequence sum is not divisible by 3.
-
-    Notes
-    -----
-    As described by Miller [1]_ (see also Newman [2]_ for an equivalent
-    description).
-	
-    A non-graphical degree sequence (not realizable by some simple
-    graph) is allowed since this function returns graphs with self
-    loops and parallel edges.  An exception is raised if the
-    independent degree sequence does not have an even sum or the
-    triangle degree sequence sum is not divisible by 3.
-	
-    This configuration model-like construction process can lead to
-    duplicate edges and loops.  You can remove the self-loops and
-    parallel edges (see below) which will likely result in a graph
-    that doesn't have the exact degree sequence specified.  This
-    "finite-size effect" decreases as the size of the graph increases.
-
-    References
-    ----------
-    .. [1] J. C. Miller "Percolation and Epidemics on Random Clustered Graphs."
-        Physical Review E, Rapid Communication (to appear).
-    .. [2] M.E.J. Newman, "Random clustered networks".
-        Physical Review Letters (to appear).
-	       
-    Examples
-    --------
-    >>> deg_tri=[[1,0],[1,0],[1,0],[2,0],[1,0],[2,1],[0,1],[0,1]]
-    >>> G = nx.random_clustered_graph(deg_tri)
-
-    To remove parallel edges:
-
-    >>> G=nx.Graph(G)
-	
-    To remove self loops:
-
-    >>> G.remove_edges_from(G.selfloop_edges())
-
-    """
-    if create_using is None:
-        create_using = nx.MultiGraph()
-    elif create_using.is_directed():
-        raise nx.NetworkXError("Directed Graph not supported")
-
-    if not seed is None:
-        random.seed(seed)
-
-    # In Python 3, zip() returns an iterator. Make this into a list.
-    joint_degree_sequence = list(joint_degree_sequence)
-
-    N = len(joint_degree_sequence)
-    G = nx.empty_graph(N,create_using)
-
-    ilist = []
-    tlist = []
-    for n in G:
-        degrees = joint_degree_sequence[n]
-        for icount in range(degrees[0]):
-            ilist.append(n)
-        for tcount in range(degrees[1]):
-            tlist.append(n)
-
-    if len(ilist)%2 != 0 or len(tlist)%3 != 0:
-        raise nx.NetworkXError('Invalid degree sequence')
-
-    random.shuffle(ilist)
-    random.shuffle(tlist)
-    while ilist:
-        G.add_edge(ilist.pop(),ilist.pop())
-    while tlist:
-        n1 = tlist.pop()
-        n2 = tlist.pop()
-        n3 = tlist.pop()
-        G.add_edges_from([(n1,n2),(n1,n3),(n2,n3)])
-    G.name = "random_clustered %d nodes %d edges"%(G.order(),G.size())
-    return G
-
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/generators/random_graphs.py b/lib/python2.7/site-packages/setoolsgui/networkx/generators/random_graphs.py
deleted file mode 100644
index 81c20ab..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/generators/random_graphs.py
+++ /dev/null
@@ -1,890 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-Generators for random graphs.
-
-"""
-#    Copyright (C) 2004-2011 by
-#    Aric Hagberg <hagberg@lanl.gov>
-#    Dan Schult <dschult@colgate.edu>
-#    Pieter Swart <swart@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-__author__ = "\n".join(['Aric Hagberg (hagberg@lanl.gov)',
-                        'Pieter Swart (swart@lanl.gov)',
-                        'Dan Schult (dschult@colgate.edu)'])
-import itertools
-import random
-import math
-import networkx as nx
-from networkx.generators.classic import empty_graph, path_graph, complete_graph
-
-from collections import defaultdict
-
-__all__ = ['fast_gnp_random_graph',
-           'gnp_random_graph',
-           'dense_gnm_random_graph',
-           'gnm_random_graph',
-           'erdos_renyi_graph',
-           'binomial_graph',
-           'newman_watts_strogatz_graph',
-           'watts_strogatz_graph',
-           'connected_watts_strogatz_graph',
-           'random_regular_graph',
-           'barabasi_albert_graph',
-           'powerlaw_cluster_graph',
-           'random_lobster',
-           'random_shell_graph',
-           'random_powerlaw_tree',
-           'random_powerlaw_tree_sequence']
-
-
-#-------------------------------------------------------------------------
-#  Some Famous Random Graphs
-#-------------------------------------------------------------------------
-
-
-def fast_gnp_random_graph(n, p, seed=None, directed=False):
-    """Return a random graph G_{n,p} (ErdÅ‘s-Rényi graph, binomial graph).
-
-    Parameters
-    ----------
-    n : int
-        The number of nodes.
-    p : float
-        Probability for edge creation.
-    seed : int, optional
-        Seed for random number generator (default=None).
-    directed : bool, optional (default=False)
-        If True return a directed graph
-
-    Notes
-    -----
-    The G_{n,p} graph algorithm chooses each of the [n(n-1)]/2
-    (undirected) or n(n-1) (directed) possible edges with probability p.
-
-    This algorithm is O(n+m) where m is the expected number of
-    edges m=p*n*(n-1)/2.
-
-    It should be faster than gnp_random_graph when p is small and
-    the expected number of edges is small (sparse graph).
-
-    See Also
-    --------
-    gnp_random_graph
-
-    References
-    ----------
-    .. [1] Vladimir Batagelj and Ulrik Brandes,
-       "Efficient generation of large random networks",
-       Phys. Rev. E, 71, 036113, 2005.
-    """
-    G = empty_graph(n)
-    G.name="fast_gnp_random_graph(%s,%s)"%(n,p)
-
-    if not seed is None:
-        random.seed(seed)
-
-    if p <= 0 or p >= 1:
-        return nx.gnp_random_graph(n,p,directed=directed)
-
-    v = 1  # Nodes in graph are from 0,n-1 (this is the second node index).
-    w = -1
-    lp = math.log(1.0 - p)
-
-    if directed:
-        G=nx.DiGraph(G)
-        while v < n:
-            lr = math.log(1.0 - random.random())
-            w = w + 1 + int(lr/lp)
-            if v == w: # avoid self loops
-                w = w + 1
-            while  w >= n and v < n:
-                w = w - n
-                v = v + 1
-                if v == w: # avoid self loops
-                    w = w + 1
-            if v < n:
-                G.add_edge(v, w)
-    else:
-        while v < n:
-            lr = math.log(1.0 - random.random())
-            w = w + 1 + int(lr/lp)
-            while w >= v and v < n:
-                w = w - v
-                v = v + 1
-            if v < n:
-                G.add_edge(v, w)
-    return G
-
-
-def gnp_random_graph(n, p, seed=None, directed=False):
-    """Return a random graph G_{n,p} (ErdÅ‘s-Rényi graph, binomial graph).
-
-    Chooses each of the possible edges with probability p.
-
-    This is also called binomial_graph and erdos_renyi_graph.
-
-    Parameters
-    ----------
-    n : int
-        The number of nodes.
-    p : float
-        Probability for edge creation.
-    seed : int, optional
-        Seed for random number generator (default=None).
-    directed : bool, optional (default=False)
-        If True return a directed graph
-
-    See Also
-    --------
-    fast_gnp_random_graph
-
-    Notes
-    -----
-    This is an O(n^2) algorithm.  For sparse graphs (small p) see
-    fast_gnp_random_graph for a faster algorithm.
-
-    References
-    ----------
-    .. [1] P. ErdÅ‘s and A. Rényi, On Random Graphs, Publ. Math. 6, 290 (1959).
-    .. [2] E. N. Gilbert, Random Graphs, Ann. Math. Stat., 30, 1141 (1959).
-    """
-    if directed:
-        G=nx.DiGraph()
-    else:
-        G=nx.Graph()
-    G.add_nodes_from(range(n))
-    G.name="gnp_random_graph(%s,%s)"%(n,p)
-    if p<=0:
-        return G
-    if p>=1:
-        return complete_graph(n,create_using=G)
-
-    if not seed is None:
-        random.seed(seed)
-
-    if G.is_directed():
-        edges=itertools.permutations(range(n),2)
-    else:
-        edges=itertools.combinations(range(n),2)
-
-    for e in edges:
-        if random.random() < p:
-            G.add_edge(*e)
-    return G
-
-
-# add some aliases to common names
-binomial_graph=gnp_random_graph
-erdos_renyi_graph=gnp_random_graph
-
-def dense_gnm_random_graph(n, m, seed=None):
-    """Return the random graph G_{n,m}.
-
-    Gives a graph picked randomly out of the set of all graphs
-    with n nodes and m edges.
-    This algorithm should be faster than gnm_random_graph for dense graphs.
-
-    Parameters
-    ----------
-    n : int
-        The number of nodes.
-    m : int
-        The number of edges.
-    seed : int, optional
-        Seed for random number generator (default=None).
-
-    See Also
-    --------
-    gnm_random_graph()
-
-    Notes
-    -----
-    Algorithm by Keith M. Briggs Mar 31, 2006.
-    Inspired by Knuth's Algorithm S (Selection sampling technique),
-    in section 3.4.2 of [1]_.
-
-    References
-    ----------
-    .. [1] Donald E. Knuth, The Art of Computer Programming,
-        Volume 2/Seminumerical algorithms, Third Edition, Addison-Wesley, 1997.
-    """
-    mmax=n*(n-1)/2
-    if m>=mmax:
-        G=complete_graph(n)
-    else:
-        G=empty_graph(n)
-    G.name="dense_gnm_random_graph(%s,%s)"%(n,m)
-
-    if n==1 or m>=mmax:
-        return G
-
-    if seed is not None:
-        random.seed(seed)
-
-    u=0
-    v=1
-    t=0
-    k=0
-    while True:
-        if random.randrange(mmax-t)<m-k:
-            G.add_edge(u,v)
-            k+=1
-            if k==m: return G
-        t+=1
-        v+=1
-        if v==n: # go to next row of adjacency matrix
-            u+=1
-            v=u+1
-
-def gnm_random_graph(n, m, seed=None, directed=False):
-    """Return the random graph G_{n,m}.
-
-    Produces a graph picked randomly out of the set of all graphs
-    with n nodes and m edges.
-
-    Parameters
-    ----------
-    n : int
-        The number of nodes.
-    m : int
-        The number of edges.
-    seed : int, optional
-        Seed for random number generator (default=None).
-    directed : bool, optional (default=False)
-        If True return a directed graph
-    """
-    if directed:
-        G=nx.DiGraph()
-    else:
-        G=nx.Graph()
-    G.add_nodes_from(range(n))
-    G.name="gnm_random_graph(%s,%s)"%(n,m)
-
-    if seed is not None:
-        random.seed(seed)
-
-    if n==1:
-        return G
-    max_edges=n*(n-1)
-    if not directed:
-        max_edges/=2.0
-    if m>=max_edges:
-        return complete_graph(n,create_using=G)
-
-    nlist=G.nodes()
-    edge_count=0
-    while edge_count < m:
-        # generate random edge,u,v
-        u = random.choice(nlist)
-        v = random.choice(nlist)
-        if u==v or G.has_edge(u,v):
-            continue
-        else:
-            G.add_edge(u,v)
-            edge_count=edge_count+1
-    return G
-
-
-def newman_watts_strogatz_graph(n, k, p, seed=None):
-    """Return a Newman-Watts-Strogatz small world graph.
-
-    Parameters
-    ----------
-    n : int
-        The number of nodes
-    k : int
-        Each node is connected to k nearest neighbors in ring topology
-    p : float
-        The probability of adding a new edge for each edge
-    seed : int, optional
-       seed for random number generator (default=None)
-
-    Notes
-    -----
-    First create a ring over n nodes.  Then each node in the ring is
-    connected with its k nearest neighbors (k-1 neighbors if k is odd).
-    Then shortcuts are created by adding new edges as follows:
-    for each edge u-v in the underlying "n-ring with k nearest neighbors"
-    with probability p add a new edge u-w with randomly-chosen existing
-    node w.  In contrast with watts_strogatz_graph(), no edges are removed.
-
-    See Also
-    --------
-    watts_strogatz_graph()
-
-    References
-    ----------
-    .. [1] M. E. J. Newman and D. J. Watts,
-       Renormalization group analysis of the small-world network model,
-       Physics Letters A, 263, 341, 1999.
-       http://dx.doi.org/10.1016/S0375-9601(99)00757-4
-    """
-    if seed is not None:
-        random.seed(seed)
-    if k>=n:
-        raise nx.NetworkXError("k>=n, choose smaller k or larger n")
-    G=empty_graph(n)
-    G.name="newman_watts_strogatz_graph(%s,%s,%s)"%(n,k,p)
-    nlist = G.nodes()
-    fromv = nlist
-    # connect the k/2 neighbors
-    for j in range(1, k // 2+1):
-        tov = fromv[j:] + fromv[0:j] # the first j are now last
-        for i in range(len(fromv)):
-            G.add_edge(fromv[i], tov[i])
-    # for each edge u-v, with probability p, randomly select existing
-    # node w and add new edge u-w
-    e = G.edges()
-    for (u, v) in e:
-        if random.random() < p:
-            w = random.choice(nlist)
-            # no self-loops and reject if edge u-w exists
-            # is that the correct NWS model?
-            while w == u or G.has_edge(u, w):
-                w = random.choice(nlist)
-                if G.degree(u) >= n-1:
-                    break # skip this rewiring
-            else:
-                G.add_edge(u,w)
-    return G
-
-
-def watts_strogatz_graph(n, k, p, seed=None):
-    """Return a Watts-Strogatz small-world graph.
-
-
-    Parameters
-    ----------
-    n : int
-        The number of nodes
-    k : int
-        Each node is connected to k nearest neighbors in ring topology
-    p : float
-        The probability of rewiring each edge
-    seed : int, optional
-        Seed for random number generator (default=None)
-
-    See Also
-    --------
-    newman_watts_strogatz_graph()
-    connected_watts_strogatz_graph()
-
-    Notes
-    -----
-    First create a ring over n nodes.  Then each node in the ring is
-    connected with its k nearest neighbors (k-1 neighbors if k is odd).
-    Then shortcuts are created by replacing some edges as follows:
-    for each edge u-v in the underlying "n-ring with k nearest neighbors"
-    with probability p replace it with a new edge u-w with uniformly
-    random choice of existing node w.
-
-    In contrast with newman_watts_strogatz_graph(), the random
-    rewiring does not increase the number of edges. The rewired graph
-    is not guaranteed to be connected as in  connected_watts_strogatz_graph().
-
-    References
-    ----------
-    .. [1] Duncan J. Watts and Steven H. Strogatz,
-       Collective dynamics of small-world networks,
-       Nature, 393, pp. 440--442, 1998.
-    """
-    if k>=n:
-        raise nx.NetworkXError("k>=n, choose smaller k or larger n")
-    if seed is not None:
-        random.seed(seed)
-
-    G = nx.Graph()
-    G.name="watts_strogatz_graph(%s,%s,%s)"%(n,k,p)
-    nodes = list(range(n)) # nodes are labeled 0 to n-1
-    # connect each node to k/2 neighbors
-    for j in range(1, k // 2+1):
-        targets = nodes[j:] + nodes[0:j] # first j nodes are now last in list
-        G.add_edges_from(zip(nodes,targets))
-    # rewire edges from each node
-    # loop over all nodes in order (label) and neighbors in order (distance)
-    # no self loops or multiple edges allowed
-    for j in range(1, k // 2+1): # outer loop is neighbors
-        targets = nodes[j:] + nodes[0:j] # first j nodes are now last in list
-        # inner loop in node order
-        for u,v in zip(nodes,targets):
-            if random.random() < p:
-                w = random.choice(nodes)
-                # Enforce no self-loops or multiple edges
-                while w == u or G.has_edge(u, w):
-                    w = random.choice(nodes)
-                    if G.degree(u) >= n-1:
-                        break # skip this rewiring
-                else:
-                    G.remove_edge(u,v)
-                    G.add_edge(u,w)
-    return G
-
-def connected_watts_strogatz_graph(n, k, p, tries=100, seed=None):
-    """Return a connected Watts-Strogatz small-world graph.
-
-    Attempt to generate a connected realization by repeated
-    generation of Watts-Strogatz small-world graphs.
-    An exception is raised if the maximum number of tries is exceeded.
-
-    Parameters
-    ----------
-    n : int
-        The number of nodes
-    k : int
-        Each node is connected to k nearest neighbors in ring topology
-    p : float
-        The probability of rewiring each edge
-    tries : int
-        Number of attempts to generate a connected graph.
-    seed : int, optional
-         The seed for random number generator.
-
-    See Also
-    --------
-    newman_watts_strogatz_graph()
-    watts_strogatz_graph()
-
-    """
-    G = watts_strogatz_graph(n, k, p, seed)
-    t=1
-    while not nx.is_connected(G):
-        G = watts_strogatz_graph(n, k, p, seed)
-        t=t+1
-        if t>tries:
-            raise nx.NetworkXError("Maximum number of tries exceeded")
-    return G
-
-
-def random_regular_graph(d, n, seed=None):
-    """Return a random regular graph of n nodes each with degree d.
-
-    The resulting graph G has no self-loops or parallel edges.
-
-    Parameters
-    ----------
-    d : int
-      Degree
-    n : integer
-      Number of nodes. The value of n*d must be even.
-    seed : hashable object
-        The seed for random number generator.
-
-    Notes
-    -----
-    The nodes are numbered form 0 to n-1.
-
-    Kim and Vu's paper [2]_ shows that this algorithm samples in an
-    asymptotically uniform way from the space of random graphs when
-    d = O(n**(1/3-epsilon)).
-
-    References
-    ----------
-    .. [1] A. Steger and N. Wormald,
-       Generating random regular graphs quickly,
-       Probability and Computing 8 (1999), 377-396, 1999.
-       http://citeseer.ist.psu.edu/steger99generating.html
-
-    .. [2] Jeong Han Kim and Van H. Vu,
-       Generating random regular graphs,
-       Proceedings of the thirty-fifth ACM symposium on Theory of computing,
-       San Diego, CA, USA, pp 213--222, 2003.
-       http://portal.acm.org/citation.cfm?id=780542.780576
-    """
-    if (n * d) % 2 != 0:
-        raise nx.NetworkXError("n * d must be even")
-
-    if not 0 <= d < n:
-        raise nx.NetworkXError("the 0 <= d < n inequality must be satisfied")
-
-    if seed is not None:
-        random.seed(seed)
-
-    def _suitable(edges, potential_edges):
-    # Helper subroutine to check if there are suitable edges remaining
-    # If False, the generation of the graph has failed
-        if not potential_edges:
-            return True
-        for s1 in potential_edges:
-            for s2 in potential_edges:
-                # Two iterators on the same dictionary are guaranteed
-                # to visit it in the same order if there are no
-                # intervening modifications.
-                if s1 == s2:
-                    # Only need to consider s1-s2 pair one time
-                    break
-                if s1 > s2:
-                    s1, s2 = s2, s1
-                if (s1, s2) not in edges:
-                    return True
-        return False
-
-    def _try_creation():
-        # Attempt to create an edge set
-
-        edges = set()
-        stubs = list(range(n)) * d
-
-        while stubs:
-            potential_edges = defaultdict(lambda: 0)
-            random.shuffle(stubs)
-            stubiter = iter(stubs)
-            for s1, s2 in zip(stubiter, stubiter):
-                if s1 > s2:
-                    s1, s2 = s2, s1
-                if s1 != s2 and ((s1, s2) not in edges):
-                    edges.add((s1, s2))
-                else:
-                    potential_edges[s1] += 1
-                    potential_edges[s2] += 1
-
-            if not _suitable(edges, potential_edges):
-                return None # failed to find suitable edge set
-
-            stubs = [node for node, potential in potential_edges.items()
-                     for _ in range(potential)]
-        return edges
-
-    # Even though a suitable edge set exists,
-    # the generation of such a set is not guaranteed.
-    # Try repeatedly to find one.
-    edges = _try_creation()
-    while edges is None:
-        edges = _try_creation()
-
-    G = nx.Graph()
-    G.name = "random_regular_graph(%s, %s)" % (d, n)
-    G.add_edges_from(edges)
-
-    return G
-
-def _random_subset(seq,m):
-    """ Return m unique elements from seq.
-
-    This differs from random.sample which can return repeated
-    elements if seq holds repeated elements.
-    """
-    targets=set()
-    while len(targets)<m:
-        x=random.choice(seq)
-        targets.add(x)
-    return targets
-
-def barabasi_albert_graph(n, m, seed=None):
-    """Return random graph using Barabási-Albert preferential attachment model.
-
-    A graph of n nodes is grown by attaching new nodes each with m
-    edges that are preferentially attached to existing nodes with high
-    degree.
-
-    Parameters
-    ----------
-    n : int
-        Number of nodes
-    m : int
-        Number of edges to attach from a new node to existing nodes
-    seed : int, optional
-        Seed for random number generator (default=None).
-
-    Returns
-    -------
-    G : Graph
-
-    Notes
-    -----
-    The initialization is a graph with with m nodes and no edges.
-
-    References
-    ----------
-    .. [1] A. L. Barabási and R. Albert "Emergence of scaling in
-       random networks", Science 286, pp 509-512, 1999.
-    """
-
-    if m < 1 or  m >=n:
-        raise nx.NetworkXError(\
-              "Barabási-Albert network must have m>=1 and m<n, m=%d,n=%d"%(m,n))
-    if seed is not None:
-        random.seed(seed)
-
-    # Add m initial nodes (m0 in barabasi-speak)
-    G=empty_graph(m)
-    G.name="barabasi_albert_graph(%s,%s)"%(n,m)
-    # Target nodes for new edges
-    targets=list(range(m))
-    # List of existing nodes, with nodes repeated once for each adjacent edge
-    repeated_nodes=[]
-    # Start adding the other n-m nodes. The first node is m.
-    source=m
-    while source<n:
-        # Add edges to m nodes from the source.
-        G.add_edges_from(zip([source]*m,targets))
-        # Add one node to the list for each new edge just created.
-        repeated_nodes.extend(targets)
-        # And the new node "source" has m edges to add to the list.
-        repeated_nodes.extend([source]*m)
-        # Now choose m unique nodes from the existing nodes
-        # Pick uniformly from repeated_nodes (preferential attachement)
-        targets = _random_subset(repeated_nodes,m)
-        source += 1
-    return G
-
-def powerlaw_cluster_graph(n, m, p, seed=None):
-    """Holme and Kim algorithm for growing graphs with powerlaw
-    degree distribution and approximate average clustering.
-
-    Parameters
-    ----------
-    n : int
-        the number of nodes
-    m : int
-        the number of random edges to add for each new node
-    p : float,
-        Probability of adding a triangle after adding a random edge
-    seed : int, optional
-        Seed for random number generator (default=None).
-
-    Notes
-    -----
-    The average clustering has a hard time getting above
-    a certain cutoff that depends on m.  This cutoff is often quite low.
-    Note that the transitivity (fraction of triangles to possible
-    triangles) seems to go down with network size.
-
-    It is essentially the Barabási-Albert (B-A) growth model with an
-    extra step that each random edge is followed by a chance of
-    making an edge to one of its neighbors too (and thus a triangle).
-
-    This algorithm improves on B-A in the sense that it enables a
-    higher average clustering to be attained if desired.
-
-    It seems possible to have a disconnected graph with this algorithm
-    since the initial m nodes may not be all linked to a new node
-    on the first iteration like the B-A model.
-
-    References
-    ----------
-    .. [1] P. Holme and B. J. Kim,
-       "Growing scale-free networks with tunable clustering",
-       Phys. Rev. E, 65, 026107, 2002.
-    """
-
-    if m < 1 or n < m:
-        raise nx.NetworkXError(\
-              "NetworkXError must have m>1 and m<n, m=%d,n=%d"%(m,n))
-
-    if p > 1 or p < 0:
-        raise nx.NetworkXError(\
-              "NetworkXError p must be in [0,1], p=%f"%(p))
-    if seed is not None:
-        random.seed(seed)
-
-    G=empty_graph(m) # add m initial nodes (m0 in barabasi-speak)
-    G.name="Powerlaw-Cluster Graph"
-    repeated_nodes=G.nodes()  # list of existing nodes to sample from
-                           # with nodes repeated once for each adjacent edge
-    source=m               # next node is m
-    while source<n:        # Now add the other n-1 nodes
-        possible_targets = _random_subset(repeated_nodes,m)
-        # do one preferential attachment for new node
-        target=possible_targets.pop()
-        G.add_edge(source,target)
-        repeated_nodes.append(target) # add one node to list for each new link
-        count=1
-        while count<m:  # add m-1 more new links
-            if random.random()<p: # clustering step: add triangle
-                neighborhood=[nbr for nbr in G.neighbors(target) \
-                               if not G.has_edge(source,nbr) \
-                               and not nbr==source]
-                if neighborhood: # if there is a neighbor without a link
-                    nbr=random.choice(neighborhood)
-                    G.add_edge(source,nbr) # add triangle
-                    repeated_nodes.append(nbr)
-                    count=count+1
-                    continue # go to top of while loop
-            # else do preferential attachment step if above fails
-            target=possible_targets.pop()
-            G.add_edge(source,target)
-            repeated_nodes.append(target)
-            count=count+1
-
-        repeated_nodes.extend([source]*m)  # add source node to list m times
-        source += 1
-    return G
-
-def random_lobster(n, p1, p2, seed=None):
-    """Return a random lobster.
-
-     A lobster is a tree that reduces to a caterpillar when pruning all
-     leaf nodes.
-
-     A caterpillar is a tree that reduces to a path graph when pruning
-     all leaf nodes (p2=0).
-
-    Parameters
-    ----------
-    n : int
-        The expected number of nodes in the backbone
-    p1 : float
-        Probability of adding an edge to the backbone
-    p2 : float
-        Probability of adding an edge one level beyond backbone
-    seed : int, optional
-        Seed for random number generator (default=None).
-    """
-    # a necessary ingredient in any self-respecting graph library
-    if seed is not None:
-        random.seed(seed)
-    llen=int(2*random.random()*n + 0.5)
-    L=path_graph(llen)
-    L.name="random_lobster(%d,%s,%s)"%(n,p1,p2)
-    # build caterpillar: add edges to path graph with probability p1
-    current_node=llen-1
-    for n in range(llen):
-        if random.random()<p1: # add fuzzy caterpillar parts
-            current_node+=1
-            L.add_edge(n,current_node)
-            if random.random()<p2: # add crunchy lobster bits
-                current_node+=1
-                L.add_edge(current_node-1,current_node)
-    return L # voila, un lobster!
-
-def random_shell_graph(constructor, seed=None):
-    """Return a random shell graph for the constructor given.
-
-    Parameters
-    ----------
-    constructor: a list of three-tuples
-        (n,m,d) for each shell starting at the center shell.
-    n : int
-        The number of nodes in the shell
-    m : int
-        The number or edges in the shell
-    d : float
-        The ratio of inter-shell (next) edges to intra-shell edges.
-        d=0 means no intra shell edges, d=1 for the last shell
-    seed : int, optional
-        Seed for random number generator (default=None).
-
-    Examples
-    --------
-    >>> constructor=[(10,20,0.8),(20,40,0.8)]
-    >>> G=nx.random_shell_graph(constructor)
-
-    """
-    G=empty_graph(0)
-    G.name="random_shell_graph(constructor)"
-
-    if seed is not None:
-        random.seed(seed)
-
-    glist=[]
-    intra_edges=[]
-    nnodes=0
-    # create gnm graphs for each shell
-    for (n,m,d) in constructor:
-        inter_edges=int(m*d)
-        intra_edges.append(m-inter_edges)
-        g=nx.convert_node_labels_to_integers(
-            gnm_random_graph(n,inter_edges),
-            first_label=nnodes)
-        glist.append(g)
-        nnodes+=n
-        G=nx.operators.union(G,g)
-
-    # connect the shells randomly
-    for gi in range(len(glist)-1):
-        nlist1=glist[gi].nodes()
-        nlist2=glist[gi+1].nodes()
-        total_edges=intra_edges[gi]
-        edge_count=0
-        while edge_count < total_edges:
-            u = random.choice(nlist1)
-            v = random.choice(nlist2)
-            if u==v or G.has_edge(u,v):
-                continue
-            else:
-                G.add_edge(u,v)
-                edge_count=edge_count+1
-    return G
-
-
-def random_powerlaw_tree(n, gamma=3, seed=None, tries=100):
-    """Return a tree with a powerlaw degree distribution.
-
-    Parameters
-    ----------
-    n : int,
-        The number of nodes
-    gamma : float
-        Exponent of the power-law
-    seed : int, optional
-        Seed for random number generator (default=None).
-    tries : int
-        Number of attempts to adjust sequence to make a tree
-
-    Notes
-    -----
-    A trial powerlaw degree sequence is chosen and then elements are
-    swapped with new elements from a powerlaw distribution until
-    the sequence makes a tree (#edges=#nodes-1).
-
-    """
-    from networkx.generators.degree_seq import degree_sequence_tree
-    try:
-        s=random_powerlaw_tree_sequence(n,
-                                        gamma=gamma,
-                                        seed=seed,
-                                        tries=tries)
-    except:
-        raise nx.NetworkXError(\
-              "Exceeded max (%d) attempts for a valid tree sequence."%tries)
-    G=degree_sequence_tree(s)
-    G.name="random_powerlaw_tree(%s,%s)"%(n,gamma)
-    return G
-
-
-def random_powerlaw_tree_sequence(n, gamma=3, seed=None, tries=100):
-    """ Return a degree sequence for a tree with a powerlaw distribution.
-
-    Parameters
-    ----------
-    n : int,
-        The number of nodes
-    gamma : float
-        Exponent of the power-law
-    seed : int, optional
-        Seed for random number generator (default=None).
-    tries : int
-        Number of attempts to adjust sequence to make a tree
-
-    Notes
-    -----
-    A trial powerlaw degree sequence is chosen and then elements are
-    swapped with new elements from a powerlaw distribution until
-    the sequence makes a tree (#edges=#nodes-1).
-
-
-    """
-    if seed is not None:
-        random.seed(seed)
-
-    # get trial sequence
-    z=nx.utils.powerlaw_sequence(n,exponent=gamma)
-    # round to integer values in the range [0,n]
-    zseq=[min(n, max( int(round(s)),0 )) for s in z]
-
-    # another sequence to swap values from
-    z=nx.utils.powerlaw_sequence(tries,exponent=gamma)
-    # round to integer values in the range [0,n]
-    swap=[min(n, max( int(round(s)),0 )) for s in z]
-
-    for deg in swap:
-        if n-sum(zseq)/2.0 == 1.0: # is a tree, return sequence
-            return zseq
-        index=random.randint(0,n-1)
-        zseq[index]=swap.pop()
-
-    raise nx.NetworkXError(\
-          "Exceeded max (%d) attempts for a valid tree sequence."%tries)
-    return False
-
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/generators/small.py b/lib/python2.7/site-packages/setoolsgui/networkx/generators/small.py
deleted file mode 100644
index f41f8d0..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/generators/small.py
+++ /dev/null
@@ -1,412 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-Various small and named graphs, together with some compact generators.
-
-"""
-__author__ ="""Aric Hagberg (hagberg@lanl.gov)\nPieter Swart (swart@lanl.gov)"""
-#    Copyright (C) 2004-2008 by 
-#    Aric Hagberg <hagberg@lanl.gov>
-#    Dan Schult <dschult@colgate.edu>
-#    Pieter Swart <swart@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-
-__all__ = ['make_small_graph',
-           'LCF_graph',
-           'bull_graph',
-           'chvatal_graph',
-           'cubical_graph',
-           'desargues_graph',
-           'diamond_graph',
-           'dodecahedral_graph',
-           'frucht_graph',
-           'heawood_graph',
-           'house_graph',
-           'house_x_graph',
-           'icosahedral_graph',
-           'krackhardt_kite_graph',
-           'moebius_kantor_graph',
-           'octahedral_graph',
-           'pappus_graph',
-           'petersen_graph',
-           'sedgewick_maze_graph',
-           'tetrahedral_graph',
-           'truncated_cube_graph',
-           'truncated_tetrahedron_graph',
-           'tutte_graph']
-
-import networkx as nx
-from networkx.generators.classic import empty_graph, cycle_graph, path_graph, complete_graph
-from networkx.exception import NetworkXError
-
-#------------------------------------------------------------------------------
-#   Tools for creating small graphs
-#------------------------------------------------------------------------------
-def make_small_undirected_graph(graph_description, create_using=None):
-    """
-    Return a small undirected graph described by graph_description.
-
-    See make_small_graph.
-    """
-    if create_using is not None and create_using.is_directed():
-        raise NetworkXError("Directed Graph not supported")
-    return make_small_graph(graph_description, create_using)
-
-def make_small_graph(graph_description, create_using=None):
-    """
-    Return the small graph described by graph_description.
-
-    graph_description is a list of the form [ltype,name,n,xlist]
-
-    Here ltype is one of "adjacencylist" or "edgelist",
-    name is the name of the graph and n the number of nodes.
-    This constructs a graph of n nodes with integer labels 0,..,n-1.
-    
-    If ltype="adjacencylist"  then xlist is an adjacency list
-    with exactly n entries, in with the j'th entry (which can be empty)
-    specifies the nodes connected to vertex j.
-    e.g. the "square" graph C_4 can be obtained by
-
-    >>> G=nx.make_small_graph(["adjacencylist","C_4",4,[[2,4],[1,3],[2,4],[1,3]]])
-
-    or, since we do not need to add edges twice,
-    
-    >>> G=nx.make_small_graph(["adjacencylist","C_4",4,[[2,4],[3],[4],[]]])
-    
-    If ltype="edgelist" then xlist is an edge list 
-    written as [[v1,w2],[v2,w2],...,[vk,wk]],
-    where vj and wj integers in the range 1,..,n
-    e.g. the "square" graph C_4 can be obtained by
- 
-    >>> G=nx.make_small_graph(["edgelist","C_4",4,[[1,2],[3,4],[2,3],[4,1]]])
-
-    Use the create_using argument to choose the graph class/type. 
-    """
-    ltype=graph_description[0]
-    name=graph_description[1]
-    n=graph_description[2]
-
-    G=empty_graph(n, create_using)
-    nodes=G.nodes()
-
-    if ltype=="adjacencylist":
-        adjlist=graph_description[3]
-        if len(adjlist) != n:
-            raise NetworkXError("invalid graph_description")
-        G.add_edges_from([(u-1,v) for v in nodes for u in adjlist[v]])
-    elif ltype=="edgelist":
-        edgelist=graph_description[3]
-        for e in edgelist:
-            v1=e[0]-1
-            v2=e[1]-1
-            if v1<0 or v1>n-1 or v2<0 or v2>n-1:
-                raise NetworkXError("invalid graph_description")
-            else:
-                G.add_edge(v1,v2)
-    G.name=name
-    return G
-
-
-def LCF_graph(n,shift_list,repeats,create_using=None):
-    """
-    Return the cubic graph specified in LCF notation.
-
-    LCF notation (LCF=Lederberg-Coxeter-Fruchte) is a compressed
-    notation used in the generation of various cubic Hamiltonian
-    graphs of high symmetry. See, for example, dodecahedral_graph,
-    desargues_graph, heawood_graph and pappus_graph below.
-    
-    n (number of nodes)
-      The starting graph is the n-cycle with nodes 0,...,n-1.
-      (The null graph is returned if n < 0.)
-
-    shift_list = [s1,s2,..,sk], a list of integer shifts mod n,
-
-    repeats
-      integer specifying the number of times that shifts in shift_list
-      are successively applied to each v_current in the n-cycle
-      to generate an edge between v_current and v_current+shift mod n.
-
-    For v1 cycling through the n-cycle a total of k*repeats
-    with shift cycling through shiftlist repeats times connect
-    v1 with v1+shift mod n
-          
-    The utility graph K_{3,3}
-
-    >>> G=nx.LCF_graph(6,[3,-3],3)
-    
-    The Heawood graph
-
-    >>> G=nx.LCF_graph(14,[5,-5],7)
-
-    See http://mathworld.wolfram.com/LCFNotation.html for a description
-    and references.
-    
-    """
-    if create_using is not None and create_using.is_directed():
-        raise NetworkXError("Directed Graph not supported")
-
-    if n <= 0:
-        return empty_graph(0, create_using)
-
-    # start with the n-cycle
-    G=cycle_graph(n, create_using)
-    G.name="LCF_graph"
-    nodes=G.nodes()
-
-    n_extra_edges=repeats*len(shift_list)    
-    # edges are added n_extra_edges times
-    # (not all of these need be new)
-    if n_extra_edges < 1:
-        return G
-
-    for i in range(n_extra_edges):
-        shift=shift_list[i%len(shift_list)] #cycle through shift_list
-        v1=nodes[i%n]                    # cycle repeatedly through nodes
-        v2=nodes[(i + shift)%n]
-        G.add_edge(v1, v2)
-    return G
-
-
-#-------------------------------------------------------------------------------
-#   Various small and named graphs
-#-------------------------------------------------------------------------------
-
-def bull_graph(create_using=None):
-    """Return the Bull graph. """
-    description=[
-        "adjacencylist",
-        "Bull Graph",
-        5,
-        [[2,3],[1,3,4],[1,2,5],[2],[3]]
-        ]
-    G=make_small_undirected_graph(description, create_using)
-    return G
-
-def chvatal_graph(create_using=None):
-    """Return the Chvátal graph."""
-    description=[
-        "adjacencylist",
-        "Chvatal Graph",
-        12,
-        [[2,5,7,10],[3,6,8],[4,7,9],[5,8,10],
-         [6,9],[11,12],[11,12],[9,12],
-         [11],[11,12],[],[]]
-        ]
-    G=make_small_undirected_graph(description, create_using)
-    return G
-
-def cubical_graph(create_using=None):
-    """Return the 3-regular Platonic Cubical graph."""
-    description=[
-        "adjacencylist",
-        "Platonic Cubical Graph",
-        8,
-        [[2,4,5],[1,3,8],[2,4,7],[1,3,6],
-         [1,6,8],[4,5,7],[3,6,8],[2,5,7]]
-        ]
-    G=make_small_undirected_graph(description, create_using)
-    return G
-
-def desargues_graph(create_using=None):
-    """ Return the Desargues graph."""
-    G=LCF_graph(20, [5,-5,9,-9], 5, create_using)
-    G.name="Desargues Graph"
-    return G
-
-def diamond_graph(create_using=None):
-    """Return the Diamond graph. """
-    description=[
-        "adjacencylist",
-        "Diamond Graph",
-        4,
-        [[2,3],[1,3,4],[1,2,4],[2,3]]
-        ]
-    G=make_small_undirected_graph(description, create_using)
-    return G
-
-def dodecahedral_graph(create_using=None):
-    """ Return the Platonic Dodecahedral graph. """
-    G=LCF_graph(20, [10,7,4,-4,-7,10,-4,7,-7,4], 2, create_using)
-    G.name="Dodecahedral Graph"
-    return G
-
-def frucht_graph(create_using=None):
-    """Return the Frucht Graph.
-
-    The Frucht Graph is the smallest cubical graph whose
-    automorphism group consists only of the identity element.
-
-    """
-    G=cycle_graph(7, create_using)
-    G.add_edges_from([[0,7],[1,7],[2,8],[3,9],[4,9],[5,10],[6,10],
-                [7,11],[8,11],[8,9],[10,11]])
-
-    G.name="Frucht Graph"
-    return G
-
-def heawood_graph(create_using=None):
-    """ Return the Heawood graph, a (3,6) cage. """
-    G=LCF_graph(14, [5,-5], 7, create_using)
-    G.name="Heawood Graph"
-    return G
-
-def house_graph(create_using=None):
-    """Return the House graph (square with triangle on top)."""
-    description=[
-        "adjacencylist",
-        "House Graph",
-        5,
-        [[2,3],[1,4],[1,4,5],[2,3,5],[3,4]]
-        ]
-    G=make_small_undirected_graph(description, create_using)
-    return G
-
-def house_x_graph(create_using=None):
-    """Return the House graph with a cross inside the house square."""
-    description=[
-        "adjacencylist",
-        "House-with-X-inside Graph",
-        5,
-        [[2,3,4],[1,3,4],[1,2,4,5],[1,2,3,5],[3,4]]
-        ]
-    G=make_small_undirected_graph(description, create_using)
-    return G
-
-def icosahedral_graph(create_using=None):
-    """Return the Platonic Icosahedral graph."""
-    description=[
-        "adjacencylist",
-        "Platonic Icosahedral Graph",
-        12,
-        [[2,6,8,9,12],[3,6,7,9],[4,7,9,10],[5,7,10,11],
-         [6,7,11,12],[7,12],[],[9,10,11,12],
-         [10],[11],[12],[]]
-        ]
-    G=make_small_undirected_graph(description, create_using)
-    return G
-    
-
-def krackhardt_kite_graph(create_using=None):
-    """
-    Return the Krackhardt Kite Social Network.
- 
-    A 10 actor social network introduced by David Krackhardt
-    to illustrate: degree, betweenness, centrality, closeness, etc. 
-    The traditional labeling is:
-    Andre=1, Beverley=2, Carol=3, Diane=4,
-    Ed=5, Fernando=6, Garth=7, Heather=8, Ike=9, Jane=10.
-    
-    """
-    description=[
-        "adjacencylist",
-        "Krackhardt Kite Social Network",
-        10,
-        [[2,3,4,6],[1,4,5,7],[1,4,6],[1,2,3,5,6,7],[2,4,7],
-         [1,3,4,7,8],[2,4,5,6,8],[6,7,9],[8,10],[9]]
-         ]
-    G=make_small_undirected_graph(description, create_using)
-    return G
-
-def moebius_kantor_graph(create_using=None):
-    """Return the Moebius-Kantor graph."""
-    G=LCF_graph(16, [5,-5], 8, create_using)
-    G.name="Moebius-Kantor Graph"
-    return G    
-
-def octahedral_graph(create_using=None):
-    """Return the Platonic Octahedral graph."""
-    description=[
-        "adjacencylist",
-        "Platonic Octahedral Graph",
-        6,
-        [[2,3,4,5],[3,4,6],[5,6],[5,6],[6],[]]
-        ]
-    G=make_small_undirected_graph(description, create_using)
-    return G
-    
-def pappus_graph():
-    """ Return the Pappus graph."""
-    G=LCF_graph(18,[5,7,-7,7,-7,-5],3)
-    G.name="Pappus Graph"
-    return G
-
-def petersen_graph(create_using=None):
-    """Return the Petersen graph."""
-    description=[
-        "adjacencylist",
-        "Petersen Graph",
-        10,
-        [[2,5,6],[1,3,7],[2,4,8],[3,5,9],[4,1,10],[1,8,9],[2,9,10],
-         [3,6,10],[4,6,7],[5,7,8]]
-        ]
-    G=make_small_undirected_graph(description, create_using)
-    return G
-
-
-def sedgewick_maze_graph(create_using=None):
-    """
-    Return a small maze with a cycle.
-
-    This is the maze used in Sedgewick,3rd Edition, Part 5, Graph
-    Algorithms, Chapter 18, e.g. Figure 18.2 and following.
-    Nodes are numbered 0,..,7
-    """ 
-    G=empty_graph(0, create_using)
-    G.add_nodes_from(range(8))
-    G.add_edges_from([[0,2],[0,7],[0,5]])
-    G.add_edges_from([[1,7],[2,6]])
-    G.add_edges_from([[3,4],[3,5]])
-    G.add_edges_from([[4,5],[4,7],[4,6]])
-    G.name="Sedgewick Maze"
-    return G
-
-def tetrahedral_graph(create_using=None):
-    """ Return the 3-regular Platonic Tetrahedral graph."""
-    G=complete_graph(4, create_using)
-    G.name="Platonic Tetrahedral graph"
-    return G
-
-def truncated_cube_graph(create_using=None):
-    """Return the skeleton of the truncated cube."""
-    description=[
-        "adjacencylist",
-        "Truncated Cube Graph",
-        24,
-        [[2,3,5],[12,15],[4,5],[7,9],
-         [6],[17,19],[8,9],[11,13],
-         [10],[18,21],[12,13],[15],
-         [14],[22,23],[16],[20,24],
-         [18,19],[21],[20],[24],
-         [22],[23],[24],[]]
-        ]
-    G=make_small_undirected_graph(description, create_using)
-    return G
-
-def truncated_tetrahedron_graph(create_using=None):
-    """Return the skeleton of the truncated Platonic tetrahedron."""
-    G=path_graph(12, create_using)
-#    G.add_edges_from([(1,3),(1,10),(2,7),(4,12),(5,12),(6,8),(9,11)])
-    G.add_edges_from([(0,2),(0,9),(1,6),(3,11),(4,11),(5,7),(8,10)])
-    G.name="Truncated Tetrahedron Graph"
-    return G
-
-def tutte_graph(create_using=None):
-    """Return the Tutte graph."""
-    description=[
-        "adjacencylist",
-        "Tutte's Graph",
-        46,
-        [[2,3,4],[5,27],[11,12],[19,20],[6,34],
-         [7,30],[8,28],[9,15],[10,39],[11,38],
-         [40],[13,40],[14,36],[15,16],[35],
-         [17,23],[18,45],[19,44],[46],[21,46],
-         [22,42],[23,24],[41],[25,28],[26,33],
-         [27,32],[34],[29],[30,33],[31],
-         [32,34],[33],[],[],[36,39],
-         [37],[38,40],[39],[],[],
-         [42,45],[43],[44,46],[45],[],[]]
-        ]
-    G=make_small_undirected_graph(description, create_using)
-    return G
-
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/generators/social.py b/lib/python2.7/site-packages/setoolsgui/networkx/generators/social.py
deleted file mode 100644
index 212dd9c..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/generators/social.py
+++ /dev/null
@@ -1,280 +0,0 @@
-"""
-Famous social networks.
-"""
-import networkx as nx
-__author__ = """\n""".join(['Jordi Torrents <jtorrents@milnou.net>',
-                            'Katy Bold <kbold@princeton.edu>',
-                            'Aric Hagberg <aric.hagberg@gmail.com)'])
-
-__all__ = ['karate_club_graph','davis_southern_women_graph',
-           'florentine_families_graph']
-
-def karate_club_graph():
-    """Return Zachary's Karate club graph.
-
-    References
-    ----------
-    .. [1] Zachary W. 
-       An information flow model for conflict and fission in small groups.
-       Journal of Anthropological Research, 33, 452-473, (1977).
-
-    .. [2] Data file from:
-       http://vlado.fmf.uni-lj.si/pub/networks/data/Ucinet/UciData.htm
-    """
-    G=nx.Graph()
-    G.add_nodes_from(range(34))
-    G.name="Zachary's Karate Club"
-
-    zacharydat="""\
-0 1 1 1 1 1 1 1 1 0 1 1 1 1 0 0 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 1 0 0
-1 0 1 1 0 0 0 1 0 0 0 0 0 1 0 0 0 1 0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0
-1 1 0 1 0 0 0 1 1 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 1 0
-1 1 1 0 0 0 0 1 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
-1 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
-1 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
-1 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
-1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
-1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1
-0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
-1 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
-1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
-1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
-1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
-0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1
-0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1
-0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
-1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
-0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1
-1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
-0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1
-1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
-0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1
-0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1 0 0 1 1
-0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 1 0 0
-0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 0 0
-0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1
-0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 1
-0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
-0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 1 1
-0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1
-1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 1 0 0 0 1 1
-0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 1 0 0 1 0 1 0 1 1 0 0 0 0 0 1 1 1 0 1
-0 0 0 0 0 0 0 0 1 1 0 0 0 1 1 1 0 0 1 1 1 0 1 1 0 0 1 1 1 1 1 1 1 0"""
-    row=0
-    for line in zacharydat.split('\n'):
-        thisrow=list(map(int,line.split(' ')))
-        for col in range(0,len(thisrow)):
-            if thisrow[col]==1:
-                G.add_edge(row,col) # col goes from 0,33
-        row+=1
-    club1 = 'Mr. Hi' 
-    club2 = 'Officer'
-    G.node[0]['club'] = club1 
-    G.node[1]['club'] = club1 
-    G.node[2]['club'] = club1 
-    G.node[3]['club'] = club1 
-    G.node[4]['club'] = club1 
-    G.node[5]['club'] = club1 
-    G.node[6]['club'] = club1 
-    G.node[7]['club'] = club1 
-    G.node[8]['club'] = club1 
-    G.node[9]['club'] = club2 
-    G.node[10]['club'] = club1 
-    G.node[11]['club'] = club1 
-    G.node[12]['club'] = club1 
-    G.node[13]['club'] = club1 
-    G.node[14]['club'] = club2 
-    G.node[15]['club'] = club2 
-    G.node[16]['club'] = club1 
-    G.node[17]['club'] = club1 
-    G.node[18]['club'] = club2 
-    G.node[19]['club'] = club1 
-    G.node[20]['club'] = club2 
-    G.node[21]['club'] = club1 
-    G.node[22]['club'] = club2 
-    G.node[23]['club'] = club2 
-    G.node[24]['club'] = club2 
-    G.node[25]['club'] = club2 
-    G.node[26]['club'] = club2 
-    G.node[27]['club'] = club2 
-    G.node[28]['club'] = club2 
-    G.node[29]['club'] = club2 
-    G.node[30]['club'] = club2 
-    G.node[31]['club'] = club2 
-    G.node[32]['club'] = club2 
-    G.node[33]['club'] = club2 
-    return G
-
-
-
-def davis_southern_women_graph():
-    """Return Davis Southern women social network.
-
-    This is a bipartite graph.
-
-    References
-    ----------
-    .. [1] A. Davis, Gardner, B. B., Gardner, M. R., 1941. Deep South.    
-        University of Chicago Press, Chicago, IL.
-    """
-    G = nx.Graph()
-    # Top nodes
-    G.add_nodes_from(["Evelyn Jefferson",
-                      "Laura Mandeville",
-                      "Theresa Anderson",
-                      "Brenda Rogers",
-                      "Charlotte McDowd",
-                      "Frances Anderson",
-                      "Eleanor Nye",
-                      "Pearl Oglethorpe",
-                      "Ruth DeSand",
-                      "Verne Sanderson",
-                      "Myra Liddel",
-                      "Katherina Rogers",
-                      "Sylvia Avondale",
-                      "Nora Fayette",
-                      "Helen Lloyd",
-                      "Dorothy Murchison",
-                      "Olivia Carleton",
-                      "Flora Price"], 
-                     bipartite=0)
-    # Bottom nodes
-    G.add_nodes_from(["E1",
-                      "E2",
-                      "E3",
-                      "E4",
-                      "E5",
-                      "E6",
-                      "E7",
-                      "E8",
-                      "E9",
-                      "E10",
-                      "E11",
-                      "E12",
-                      "E13",
-                      "E14"], 
-                     bipartite=1)
-
-    G.add_edges_from([("Evelyn Jefferson","E1"),
-                      ("Evelyn Jefferson","E2"),
-                      ("Evelyn Jefferson","E3"),
-                      ("Evelyn Jefferson","E4"),
-                      ("Evelyn Jefferson","E5"),
-                      ("Evelyn Jefferson","E6"),
-                      ("Evelyn Jefferson","E8"),
-                      ("Evelyn Jefferson","E9"),
-                      ("Laura Mandeville","E1"),
-                      ("Laura Mandeville","E2"),
-                      ("Laura Mandeville","E3"),
-                      ("Laura Mandeville","E5"),
-                      ("Laura Mandeville","E6"),
-                      ("Laura Mandeville","E7"),
-                      ("Laura Mandeville","E8"),
-                      ("Theresa Anderson","E2"),
-                      ("Theresa Anderson","E3"),
-                      ("Theresa Anderson","E4"),
-                      ("Theresa Anderson","E5"),
-                      ("Theresa Anderson","E6"),
-                      ("Theresa Anderson","E7"),
-                      ("Theresa Anderson","E8"),
-                      ("Theresa Anderson","E9"),
-                      ("Brenda Rogers","E1"),
-                      ("Brenda Rogers","E3"),
-                      ("Brenda Rogers","E4"),
-                      ("Brenda Rogers","E5"),
-                      ("Brenda Rogers","E6"),
-                      ("Brenda Rogers","E7"),
-                      ("Brenda Rogers","E8"),
-                      ("Charlotte McDowd","E3"),
-                      ("Charlotte McDowd","E4"),
-                      ("Charlotte McDowd","E5"),
-                      ("Charlotte McDowd","E7"),
-                      ("Frances Anderson","E3"),
-                      ("Frances Anderson","E5"),
-                      ("Frances Anderson","E6"),
-                      ("Frances Anderson","E8"),
-                      ("Eleanor Nye","E5"),
-                      ("Eleanor Nye","E6"),
-                      ("Eleanor Nye","E7"),
-                      ("Eleanor Nye","E8"),
-                      ("Pearl Oglethorpe","E6"),
-                      ("Pearl Oglethorpe","E8"),
-                      ("Pearl Oglethorpe","E9"),
-                      ("Ruth DeSand","E5"),
-                      ("Ruth DeSand","E7"),
-                      ("Ruth DeSand","E8"),
-                      ("Ruth DeSand","E9"),
-                      ("Verne Sanderson","E7"),
-                      ("Verne Sanderson","E8"),
-                      ("Verne Sanderson","E9"),
-                      ("Verne Sanderson","E12"),
-                      ("Myra Liddel","E8"),
-                      ("Myra Liddel","E9"),
-                      ("Myra Liddel","E10"),
-                      ("Myra Liddel","E12"),
-                      ("Katherina Rogers","E8"),
-                      ("Katherina Rogers","E9"),
-                      ("Katherina Rogers","E10"),
-                      ("Katherina Rogers","E12"),
-                      ("Katherina Rogers","E13"),
-                      ("Katherina Rogers","E14"),
-                      ("Sylvia Avondale","E7"),
-                      ("Sylvia Avondale","E8"),
-                      ("Sylvia Avondale","E9"),
-                      ("Sylvia Avondale","E10"),
-                      ("Sylvia Avondale","E12"),
-                      ("Sylvia Avondale","E13"),
-                      ("Sylvia Avondale","E14"),
-                      ("Nora Fayette","E6"),
-                      ("Nora Fayette","E7"),
-                      ("Nora Fayette","E9"),
-                      ("Nora Fayette","E10"),
-                      ("Nora Fayette","E11"),
-                      ("Nora Fayette","E12"),
-                      ("Nora Fayette","E13"),
-                      ("Nora Fayette","E14"),
-                      ("Helen Lloyd","E7"),
-                      ("Helen Lloyd","E8"),
-                      ("Helen Lloyd","E10"),
-                      ("Helen Lloyd","E11"),
-                      ("Helen Lloyd","E12"),
-                      ("Dorothy Murchison","E8"),
-                      ("Dorothy Murchison","E9"),
-                      ("Olivia Carleton","E9"),
-                      ("Olivia Carleton","E11"),
-                      ("Flora Price","E9"),
-                      ("Flora Price","E11")])
-    return G
-
-def florentine_families_graph():
-    """Return Florentine families graph.
-    
-    References
-    ----------
-    .. [1] Ronald L. Breiger and Philippa E. Pattison
-       Cumulated social roles: The duality of persons and their algebras,1
-       Social Networks, Volume 8, Issue 3, September 1986, Pages 215-256 
-    """
-    G=nx.Graph()
-    G.add_edge('Acciaiuoli','Medici')
-    G.add_edge('Castellani','Peruzzi')
-    G.add_edge('Castellani','Strozzi')
-    G.add_edge('Castellani','Barbadori')
-    G.add_edge('Medici','Barbadori')
-    G.add_edge('Medici','Ridolfi')
-    G.add_edge('Medici','Tornabuoni')
-    G.add_edge('Medici','Albizzi')
-    G.add_edge('Medici','Salviati')
-    G.add_edge('Salviati','Pazzi')
-    G.add_edge('Peruzzi','Strozzi')
-    G.add_edge('Peruzzi','Bischeri')
-    G.add_edge('Strozzi','Ridolfi')
-    G.add_edge('Strozzi','Bischeri')
-    G.add_edge('Ridolfi','Tornabuoni')
-    G.add_edge('Tornabuoni','Guadagni')
-    G.add_edge('Albizzi','Ginori')
-    G.add_edge('Albizzi','Guadagni')
-    G.add_edge('Bischeri','Guadagni')
-    G.add_edge('Guadagni','Lamberteschi')
-    return G
-
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/generators/stochastic.py b/lib/python2.7/site-packages/setoolsgui/networkx/generators/stochastic.py
deleted file mode 100644
index 5553f5f..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/generators/stochastic.py
+++ /dev/null
@@ -1,46 +0,0 @@
-"""Stocastic graph."""
-#    Copyright (C) 2010-2013 by
-#    Aric Hagberg <hagberg@lanl.gov>
-#    Dan Schult <dschult@colgate.edu>
-#    Pieter Swart <swart@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-import networkx as nx
-__author__ = "Aric Hagberg <aric.hagberg@gmail.com>"
-__all__ = ['stochastic_graph']
-
-def stochastic_graph(G, copy=True, weight='weight'):
-    """Return a right-stochastic representation of G.
-
-    A right-stochastic graph is a weighted digraph in which all of
-    the node (out) neighbors edge weights sum to 1.
-
-    Parameters
-    -----------
-    G : graph
-      A NetworkX graph
-
-    copy : boolean, optional
-      If True make a copy of the graph, otherwise modify the original graph
-
-    weight : edge attribute key (optional, default='weight')
-      Edge data key used for weight.  If no attribute is found for an edge
-      the edge weight is set to 1.
-    """
-    if type(G) == nx.MultiGraph or type(G) == nx.MultiDiGraph:
-        raise nx.NetworkXError('stochastic_graph not implemented '
-                               'for multigraphs')
-
-    if not G.is_directed():
-        raise nx.NetworkXError('stochastic_graph not implemented '
-                               'for undirected graphs')
-
-    if copy:
-        W = nx.DiGraph(G)
-    else:
-        W = G # reference original graph, no copy
-
-    degree = W.out_degree(weight=weight)
-    for (u,v,d) in W.edges(data=True):
-        d[weight] = float(d.get(weight,1.0))/degree[u]
-    return W
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/generators/tests/test_atlas.py b/lib/python2.7/site-packages/setoolsgui/networkx/generators/tests/test_atlas.py
deleted file mode 100644
index 2428385..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/generators/tests/test_atlas.py
+++ /dev/null
@@ -1,55 +0,0 @@
-from nose.tools import *
-import networkx as nx
-
-
-class TestAtlas(object):
-    def setUp(self):
-        self.GAG=nx.graph_atlas_g()
-
-    def test_sizes(self):
-        G=self.GAG[0]
-        assert_equal(G.number_of_nodes(),0)
-        assert_equal(G.number_of_edges(),0)
-
-        G=self.GAG[7]
-        assert_equal(G.number_of_nodes(),3)
-        assert_equal(G.number_of_edges(),3)
-
-    def test_names(self):
-        i=0
-        for g in self.GAG:
-            name=g.name
-            assert_equal(int(name[1:]),i)
-            i+=1
-
-    def test_monotone_nodes(self):
-        # check for monotone increasing number of nodes
-        previous=self.GAG[0]
-        for g in self.GAG:
-            assert_false(len(g)-len(previous) > 1)
-            previous=g.copy()
-
-    def test_monotone_nodes(self):
-        # check for monotone increasing number of edges
-        # (for fixed number of nodes)
-        previous=self.GAG[0]
-        for g in self.GAG:
-            if len(g)==len(previous):             
-                assert_false(g.size()-previous.size() > 1)
-            previous=g.copy()
-
-    def test_monotone_degree_sequence(self):
-        # check for monotone increasing degree sequence
-        # (for fixed number f nodes and edges)
-        # note that 111223 < 112222
-        previous=self.GAG[0]
-        for g in self.GAG:
-            if len(g)==0: 
-                continue
-            if len(g)==len(previous) & g.size()==previous.size():
-                deg_seq=sorted(g.degree().values())
-                previous_deg_seq=sorted(previous.degree().values())
-                assert_true(previous_deg_seq < deg_seq)
-                previous=g.copy()
-
-
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/generators/tests/test_bipartite.py b/lib/python2.7/site-packages/setoolsgui/networkx/generators/tests/test_bipartite.py
deleted file mode 100644
index 63d336e..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/generators/tests/test_bipartite.py
+++ /dev/null
@@ -1,176 +0,0 @@
-#!/usr/bin/env python
-
-from nose.tools import *
-from networkx import *
-from networkx.generators.bipartite import *
-
-"""Generators - Bipartite
-----------------------
-"""
-
-class TestGeneratorsBipartite():
-    def test_configuration_model(self):
-        aseq=[3,3,3,3]
-        bseq=[2,2,2,2,2]
-        assert_raises(networkx.exception.NetworkXError,
-                      bipartite_configuration_model, aseq, bseq)
-        
-        aseq=[3,3,3,3]
-        bseq=[2,2,2,2,2,2]
-        G=bipartite_configuration_model(aseq,bseq)
-        assert_equal(sorted(G.degree().values()),
-                     [2, 2, 2, 2, 2, 2, 3, 3, 3, 3])
-
-        aseq=[2,2,2,2,2,2]
-        bseq=[3,3,3,3]
-        G=bipartite_configuration_model(aseq,bseq)
-        assert_equal(sorted(G.degree().values()),
-                     [2, 2, 2, 2, 2, 2, 3, 3, 3, 3])
-
-        aseq=[2,2,2,1,1,1]
-        bseq=[3,3,3]
-        G=bipartite_configuration_model(aseq,bseq)
-        assert_equal(sorted(G.degree().values()),
-                     [1, 1, 1, 2, 2, 2, 3, 3, 3])
-
-        GU=project(Graph(G),range(len(aseq)))
-        assert_equal(GU.number_of_nodes(), 6)
-
-        GD=project(Graph(G),range(len(aseq),len(aseq)+len(bseq)))
-        assert_equal(GD.number_of_nodes(), 3)
-
-        assert_raises(networkx.exception.NetworkXError,
-                      bipartite_configuration_model, aseq, bseq,
-                      create_using=DiGraph())
-
-    def test_havel_hakimi_graph(self):
-        aseq=[3,3,3,3]
-        bseq=[2,2,2,2,2]
-        assert_raises(networkx.exception.NetworkXError,
-                      bipartite_havel_hakimi_graph, aseq, bseq)
-        
-        bseq=[2,2,2,2,2,2]
-        G=bipartite_havel_hakimi_graph(aseq,bseq)
-        assert_equal(sorted(G.degree().values()),
-                     [2, 2, 2, 2, 2, 2, 3, 3, 3, 3])
-
-        aseq=[2,2,2,2,2,2]
-        bseq=[3,3,3,3]
-        G=bipartite_havel_hakimi_graph(aseq,bseq)
-        assert_equal(sorted(G.degree().values()),
-                     [2, 2, 2, 2, 2, 2, 3, 3, 3, 3])
-
-        GU=project(Graph(G),range(len(aseq)))
-        assert_equal(GU.number_of_nodes(), 6)
-
-        GD=project(Graph(G),range(len(aseq),len(aseq)+len(bseq)))
-        assert_equal(GD.number_of_nodes(), 4)
-        assert_raises(networkx.exception.NetworkXError,
-                      bipartite_havel_hakimi_graph, aseq, bseq,
-                      create_using=DiGraph())
-            
-    def test_reverse_havel_hakimi_graph(self):
-        aseq=[3,3,3,3]
-        bseq=[2,2,2,2,2]
-        assert_raises(networkx.exception.NetworkXError,
-                      bipartite_reverse_havel_hakimi_graph, aseq, bseq)
-        
-        bseq=[2,2,2,2,2,2]
-        G=bipartite_reverse_havel_hakimi_graph(aseq,bseq)
-        assert_equal(sorted(G.degree().values()),
-                     [2, 2, 2, 2, 2, 2, 3, 3, 3, 3])
-
-        aseq=[2,2,2,2,2,2]
-        bseq=[3,3,3,3]
-        G=bipartite_reverse_havel_hakimi_graph(aseq,bseq)
-        assert_equal(sorted(G.degree().values()),
-                     [2, 2, 2, 2, 2, 2, 3, 3, 3, 3])
-
-        aseq=[2,2,2,1,1,1]
-        bseq=[3,3,3]
-        G=bipartite_reverse_havel_hakimi_graph(aseq,bseq)
-        assert_equal(sorted(G.degree().values()),
-                     [1, 1, 1, 2, 2, 2, 3, 3, 3])
-
-        GU=project(Graph(G),range(len(aseq)))
-        assert_equal(GU.number_of_nodes(), 6)
-
-        GD=project(Graph(G),range(len(aseq),len(aseq)+len(bseq)))
-        assert_equal(GD.number_of_nodes(), 3)
-        assert_raises(networkx.exception.NetworkXError,
-                      bipartite_reverse_havel_hakimi_graph, aseq, bseq,
-                      create_using=DiGraph())
-        
-    def test_alternating_havel_hakimi_graph(self):
-        aseq=[3,3,3,3]
-        bseq=[2,2,2,2,2]
-        assert_raises(networkx.exception.NetworkXError,
-                      bipartite_alternating_havel_hakimi_graph, aseq, bseq)
-        
-        bseq=[2,2,2,2,2,2]
-        G=bipartite_alternating_havel_hakimi_graph(aseq,bseq)
-        assert_equal(sorted(G.degree().values()),
-                     [2, 2, 2, 2, 2, 2, 3, 3, 3, 3])
-
-        aseq=[2,2,2,2,2,2]
-        bseq=[3,3,3,3]
-        G=bipartite_alternating_havel_hakimi_graph(aseq,bseq)
-        assert_equal(sorted(G.degree().values()),
-                     [2, 2, 2, 2, 2, 2, 3, 3, 3, 3])
-
-        aseq=[2,2,2,1,1,1]
-        bseq=[3,3,3]
-        G=bipartite_alternating_havel_hakimi_graph(aseq,bseq)
-        assert_equal(sorted(G.degree().values()),
-                     [1, 1, 1, 2, 2, 2, 3, 3, 3])
-
-        GU=project(Graph(G),range(len(aseq)))
-        assert_equal(GU.number_of_nodes(), 6)
-
-        GD=project(Graph(G),range(len(aseq),len(aseq)+len(bseq)))
-        assert_equal(GD.number_of_nodes(), 3)
-
-        assert_raises(networkx.exception.NetworkXError,
-                      bipartite_alternating_havel_hakimi_graph, aseq, bseq,
-                      create_using=DiGraph())
-        
-    def test_preferential_attachment(self):
-        aseq=[3,2,1,1]
-        G=bipartite_preferential_attachment_graph(aseq,0.5)
-        assert_raises(networkx.exception.NetworkXError,
-                      bipartite_preferential_attachment_graph, aseq, 0.5,
-                      create_using=DiGraph())
-
-    def test_bipartite_random_graph(self):
-        n=10
-        m=20
-        G=bipartite_random_graph(n,m,0.9)
-        assert_equal(len(G),30)
-        assert_true(is_bipartite(G))
-        X,Y=nx.algorithms.bipartite.sets(G)
-        assert_equal(set(range(n)),X)
-        assert_equal(set(range(n,n+m)),Y)
-
-    def test_directed_bipartite_random_graph(self):
-        n=10
-        m=20
-        G=bipartite_random_graph(n,m,0.9,directed=True)
-        assert_equal(len(G),30)
-        assert_true(is_bipartite(G))
-        X,Y=nx.algorithms.bipartite.sets(G)
-        assert_equal(set(range(n)),X)
-        assert_equal(set(range(n,n+m)),Y)
-
-    def test_bipartite_gnmk_random_graph(self):
-        n = 10
-        m = 20
-        edges = 100
-        G = bipartite_gnmk_random_graph(n, m, edges)
-        assert_equal(len(G),30)
-        assert_true(is_bipartite(G))
-        X,Y=nx.algorithms.bipartite.sets(G)
-        print(X)
-        assert_equal(set(range(n)),X)
-        assert_equal(set(range(n,n+m)),Y)
-        assert_equal(edges, len(G.edges()))
-
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/generators/tests/test_classic.py b/lib/python2.7/site-packages/setoolsgui/networkx/generators/tests/test_classic.py
deleted file mode 100644
index 96ca367..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/generators/tests/test_classic.py
+++ /dev/null
@@ -1,408 +0,0 @@
-#!/usr/bin/env python
-"""
-====================
-Generators - Classic
-====================
-
-Unit tests for various classic graph generators in generators/classic.py
-"""
-from nose.tools import *
-from networkx import *
-from networkx.algorithms.isomorphism.isomorph import graph_could_be_isomorphic
-is_isomorphic=graph_could_be_isomorphic
-
-class TestGeneratorClassic():
-    def test_balanced_tree(self):
-        # balanced_tree(r,h) is a tree with (r**(h+1)-1)/(r-1) edges
-        for r,h in [(2,2),(3,3),(6,2)]:
-            t=balanced_tree(r,h)
-            order=t.order()
-            assert_true(order==(r**(h+1)-1)/(r-1))
-            assert_true(is_connected(t)) 
-            assert_true(t.size()==order-1)
-            dh = degree_histogram(t)
-            assert_equal(dh[0],0) # no nodes of 0 
-            assert_equal(dh[1],r**h) # nodes of degree 1 are leaves
-            assert_equal(dh[r],1)  # root is degree r
-            assert_equal(dh[r+1],order-r**h-1)# everyone else is degree r+1
-            assert_equal(len(dh),r+2)
-
-    def test_balanced_tree_star(self):
-        # balanced_tree(r,1) is the r-star
-        t=balanced_tree(r=2,h=1)
-        assert_true(is_isomorphic(t,star_graph(2)))
-        t=balanced_tree(r=5,h=1)
-        assert_true(is_isomorphic(t,star_graph(5)))
-        t=balanced_tree(r=10,h=1)
-        assert_true(is_isomorphic(t,star_graph(10)))
-
-    def test_full_rary_tree(self):
-        r=2
-        n=9
-        t=full_rary_tree(r,n)
-        assert_equal(t.order(),n)
-        assert_true(is_connected(t))
-        dh = degree_histogram(t)
-        assert_equal(dh[0],0) # no nodes of 0 
-        assert_equal(dh[1],5) # nodes of degree 1 are leaves
-        assert_equal(dh[r],1)  # root is degree r
-        assert_equal(dh[r+1],9-5-1) # everyone else is degree r+1
-        assert_equal(len(dh),r+2)
-
-    def test_full_rary_tree_balanced(self):
-        t=full_rary_tree(2,15)
-        th=balanced_tree(2,3)
-        assert_true(is_isomorphic(t,th))
-
-    def test_full_rary_tree_path(self):
-        t=full_rary_tree(1,10)
-        assert_true(is_isomorphic(t,path_graph(10)))
-
-    def test_full_rary_tree_empty(self):
-        t=full_rary_tree(0,10)
-        assert_true(is_isomorphic(t,empty_graph(10)))
-        t=full_rary_tree(3,0)
-        assert_true(is_isomorphic(t,empty_graph(0)))
-
-    def test_full_rary_tree_3_20(self):
-        t=full_rary_tree(3,20)
-        assert_equal(t.order(),20)
-
-    def test_barbell_graph(self):
-        # number of nodes = 2*m1 + m2 (2 m1-complete graphs + m2-path + 2 edges)
-        # number of edges = 2*(number_of_edges(m1-complete graph) + m2 + 1
-        m1=3; m2=5
-        b=barbell_graph(m1,m2)
-        assert_true(number_of_nodes(b)==2*m1+m2)
-        assert_true(number_of_edges(b)==m1*(m1-1) + m2 + 1)
-        assert_equal(b.name, 'barbell_graph(3,5)')
-
-        m1=4; m2=10
-        b=barbell_graph(m1,m2)
-        assert_true(number_of_nodes(b)==2*m1+m2)
-        assert_true(number_of_edges(b)==m1*(m1-1) + m2 + 1)
-        assert_equal(b.name, 'barbell_graph(4,10)')
-
-        m1=3; m2=20
-        b=barbell_graph(m1,m2)
-        assert_true(number_of_nodes(b)==2*m1+m2)
-        assert_true(number_of_edges(b)==m1*(m1-1) + m2 + 1)
-        assert_equal(b.name, 'barbell_graph(3,20)')
-
-        # Raise NetworkXError if m1<2
-        m1=1; m2=20
-        assert_raises(networkx.exception.NetworkXError, barbell_graph, m1, m2)
-
-        # Raise NetworkXError if m2<0
-        m1=5; m2=-2
-        assert_raises(networkx.exception.NetworkXError, barbell_graph, m1, m2)
-
-        # barbell_graph(2,m) = path_graph(m+4)
-        m1=2; m2=5
-        b=barbell_graph(m1,m2)
-        assert_true(is_isomorphic(b, path_graph(m2+4)))
-
-        m1=2; m2=10
-        b=barbell_graph(m1,m2)
-        assert_true(is_isomorphic(b, path_graph(m2+4)))
-
-        m1=2; m2=20
-        b=barbell_graph(m1,m2)
-        assert_true(is_isomorphic(b, path_graph(m2+4)))
-
-        assert_raises(networkx.exception.NetworkXError, barbell_graph, m1, m2, 
-                      create_using=DiGraph())
-        
-        mb=barbell_graph(m1, m2, create_using=MultiGraph())
-        assert_true(mb.edges()==b.edges())
-
-    def test_complete_graph(self):
-        # complete_graph(m) is a connected graph with 
-        # m nodes and  m*(m+1)/2 edges
-        for m in [0, 1, 3, 5]:
-            g = complete_graph(m)
-            assert_true(number_of_nodes(g) == m)
-            assert_true(number_of_edges(g) == m * (m - 1) // 2)
-
-        
-        mg=complete_graph(m, create_using=MultiGraph())
-        assert_true(mg.edges()==g.edges())
-
-    def test_complete_digraph(self):
-        # complete_graph(m) is a connected graph with 
-        # m nodes and  m*(m+1)/2 edges
-        for m in [0, 1, 3, 5]:
-            g = complete_graph(m,create_using=nx.DiGraph())
-            assert_true(number_of_nodes(g) == m)
-            assert_true(number_of_edges(g) == m * (m - 1))
-
-    def test_complete_bipartite_graph(self):
-        G=complete_bipartite_graph(0,0)
-        assert_true(is_isomorphic( G, null_graph() ))
-        
-        for i in [1, 5]:
-            G=complete_bipartite_graph(i,0)
-            assert_true(is_isomorphic( G, empty_graph(i) ))
-            G=complete_bipartite_graph(0,i)
-            assert_true(is_isomorphic( G, empty_graph(i) ))
-
-        G=complete_bipartite_graph(2,2)
-        assert_true(is_isomorphic( G, cycle_graph(4) ))
-
-        G=complete_bipartite_graph(1,5)
-        assert_true(is_isomorphic( G, star_graph(5) ))
-
-        G=complete_bipartite_graph(5,1)
-        assert_true(is_isomorphic( G, star_graph(5) ))
-
-        # complete_bipartite_graph(m1,m2) is a connected graph with
-        # m1+m2 nodes and  m1*m2 edges
-        for m1, m2 in [(5, 11), (7, 3)]:
-            G=complete_bipartite_graph(m1,m2)
-            assert_equal(number_of_nodes(G), m1 + m2)
-            assert_equal(number_of_edges(G), m1 * m2)
-
-        assert_raises(networkx.exception.NetworkXError,
-                      complete_bipartite_graph, 7, 3, create_using=DiGraph())
-        
-        mG=complete_bipartite_graph(7, 3, create_using=MultiGraph())
-        assert_equal(mG.edges(), G.edges())
-
-    def test_circular_ladder_graph(self):
-        G=circular_ladder_graph(5)
-        assert_raises(networkx.exception.NetworkXError, circular_ladder_graph,
-                      5, create_using=DiGraph())
-        mG=circular_ladder_graph(5, create_using=MultiGraph())
-        assert_equal(mG.edges(), G.edges())
-
-    def test_cycle_graph(self):
-        G=cycle_graph(4)
-        assert_equal(sorted(G.edges()), [(0, 1), (0, 3), (1, 2), (2, 3)])
-        mG=cycle_graph(4, create_using=MultiGraph())
-        assert_equal(sorted(mG.edges()), [(0, 1), (0, 3), (1, 2), (2, 3)])
-        G=cycle_graph(4, create_using=DiGraph())
-        assert_false(G.has_edge(2,1))
-        assert_true(G.has_edge(1,2))
-        
-    def test_dorogovtsev_goltsev_mendes_graph(self):
-        G=dorogovtsev_goltsev_mendes_graph(0)
-        assert_equal(G.edges(), [(0, 1)])
-        assert_equal(G.nodes(), [0, 1])
-        G=dorogovtsev_goltsev_mendes_graph(1)
-        assert_equal(G.edges(), [(0, 1), (0, 2), (1, 2)])
-        assert_equal(average_clustering(G), 1.0)
-        assert_equal(list(triangles(G).values()), [1, 1, 1])
-        G=dorogovtsev_goltsev_mendes_graph(10)
-        assert_equal(number_of_nodes(G), 29526)
-        assert_equal(number_of_edges(G), 59049)
-        assert_equal(G.degree(0), 1024)
-        assert_equal(G.degree(1), 1024)
-        assert_equal(G.degree(2), 1024)
-
-        assert_raises(networkx.exception.NetworkXError,
-                      dorogovtsev_goltsev_mendes_graph, 7,
-                      create_using=DiGraph())
-        assert_raises(networkx.exception.NetworkXError,
-                      dorogovtsev_goltsev_mendes_graph, 7,
-                      create_using=MultiGraph())
-
-    def test_empty_graph(self):
-        G=empty_graph()
-        assert_equal(number_of_nodes(G), 0)
-        G=empty_graph(42)
-        assert_equal(number_of_nodes(G), 42)
-        assert_equal(number_of_edges(G), 0)
-        assert_equal(G.name, 'empty_graph(42)')
-
-        # create empty digraph
-        G=empty_graph(42,create_using=DiGraph(name="duh"))
-        assert_equal(number_of_nodes(G), 42)
-        assert_equal(number_of_edges(G), 0)
-        assert_equal(G.name, 'empty_graph(42)')
-        assert_true(isinstance(G,DiGraph))
-
-        # create empty multigraph
-        G=empty_graph(42,create_using=MultiGraph(name="duh"))
-        assert_equal(number_of_nodes(G), 42)
-        assert_equal(number_of_edges(G), 0)
-        assert_equal(G.name, 'empty_graph(42)')
-        assert_true(isinstance(G,MultiGraph))
-        
-        # create empty graph from another
-        pete=petersen_graph()
-        G=empty_graph(42,create_using=pete)
-        assert_equal(number_of_nodes(G), 42)
-        assert_equal(number_of_edges(G), 0)
-        assert_equal(G.name, 'empty_graph(42)')
-        assert_true(isinstance(G,Graph))
-        
-    def test_grid_2d_graph(self):
-        n=5;m=6
-        G=grid_2d_graph(n,m)
-        assert_equal(number_of_nodes(G), n*m)
-        assert_equal(degree_histogram(G), [0,0,4,2*(n+m)-8,(n-2)*(m-2)])
-        DG=grid_2d_graph(n,m, create_using=DiGraph())
-        assert_equal(DG.succ, G.adj)
-        assert_equal(DG.pred, G.adj)
-        MG=grid_2d_graph(n,m, create_using=MultiGraph())
-        assert_equal(MG.edges(), G.edges())
-        
-    def test_grid_graph(self):
-        """grid_graph([n,m]) is a connected simple graph with the
-        following properties:
-        number_of_nodes=n*m
-        degree_histogram=[0,0,4,2*(n+m)-8,(n-2)*(m-2)]
-        """
-        for n, m in [(3, 5), (5, 3), (4, 5), (5, 4)]:
-            dim=[n,m]
-            g=grid_graph(dim)
-            assert_equal(number_of_nodes(g), n*m)
-            assert_equal(degree_histogram(g), [0,0,4,2*(n+m)-8,(n-2)*(m-2)])
-            assert_equal(dim,[n,m])
-        
-        for n, m in [(1, 5), (5, 1)]:
-            dim=[n,m]
-            g=grid_graph(dim)
-            assert_equal(number_of_nodes(g), n*m)
-            assert_true(is_isomorphic(g,path_graph(5)))
-            assert_equal(dim,[n,m])
-
-#        mg=grid_graph([n,m], create_using=MultiGraph())
-#        assert_equal(mg.edges(), g.edges())
-
-    def test_hypercube_graph(self):
-        for n, G in [(0, null_graph()), (1, path_graph(2)),
-                     (2, cycle_graph(4)), (3, cubical_graph())]:
-            g=hypercube_graph(n)
-            assert_true(is_isomorphic(g, G))
-
-        g=hypercube_graph(4)
-        assert_equal(degree_histogram(g), [0, 0, 0, 0, 16])
-        g=hypercube_graph(5)
-        assert_equal(degree_histogram(g), [0, 0, 0, 0, 0, 32])
-        g=hypercube_graph(6)
-        assert_equal(degree_histogram(g), [0, 0, 0, 0, 0, 0, 64])
-        
-#        mg=hypercube_graph(6, create_using=MultiGraph())
-#        assert_equal(mg.edges(), g.edges())
-
-    def test_ladder_graph(self):
-        for i, G in [(0, empty_graph(0)), (1, path_graph(2)),
-                     (2, hypercube_graph(2)), (10, grid_graph([2,10]))]:
-            assert_true(is_isomorphic(ladder_graph(i), G))
-
-        assert_raises(networkx.exception.NetworkXError,
-                      ladder_graph, 2, create_using=DiGraph())
-        
-        g = ladder_graph(2)
-        mg=ladder_graph(2, create_using=MultiGraph())
-        assert_equal(mg.edges(), g.edges())
-
-    def test_lollipop_graph(self):
-        # number of nodes = m1 + m2
-        # number of edges = number_of_edges(complete_graph(m1)) + m2
-        for m1, m2 in [(3, 5), (4, 10), (3, 20)]:
-            b=lollipop_graph(m1,m2)
-            assert_equal(number_of_nodes(b), m1+m2)
-            assert_equal(number_of_edges(b), m1*(m1-1)/2 + m2)
-            assert_equal(b.name,
-                         'lollipop_graph(' + str(m1) + ',' + str(m2) + ')')
-
-        # Raise NetworkXError if m<2
-        assert_raises(networkx.exception.NetworkXError,
-                      lollipop_graph, 1, 20)
-
-        # Raise NetworkXError if n<0
-        assert_raises(networkx.exception.NetworkXError,
-                      lollipop_graph, 5, -2)
-
-        # lollipop_graph(2,m) = path_graph(m+2)
-        for m1, m2 in [(2, 5), (2, 10), (2, 20)]:
-            b=lollipop_graph(m1,m2)
-            assert_true(is_isomorphic(b, path_graph(m2+2)))
-
-        assert_raises(networkx.exception.NetworkXError,
-                      lollipop_graph, m1, m2, create_using=DiGraph())
-        
-        mb=lollipop_graph(m1, m2, create_using=MultiGraph())
-        assert_true(mb.edges(), b.edges())
-
-    def test_null_graph(self):
-        assert_equal(number_of_nodes(null_graph()), 0)
-
-    def test_path_graph(self):
-        p=path_graph(0)
-        assert_true(is_isomorphic(p, null_graph()))
-        assert_equal(p.name, 'path_graph(0)')
-
-        p=path_graph(1)
-        assert_true(is_isomorphic( p, empty_graph(1)))
-        assert_equal(p.name, 'path_graph(1)')
-
-        p=path_graph(10)
-        assert_true(is_connected(p))
-        assert_equal(sorted(list(p.degree().values())),
-                     [1, 1, 2, 2, 2, 2, 2, 2, 2, 2])
-        assert_equal(p.order()-1, p.size())
-
-        dp=path_graph(3, create_using=DiGraph())
-        assert_true(dp.has_edge(0,1))
-        assert_false(dp.has_edge(1,0))
-        
-        mp=path_graph(10, create_using=MultiGraph())
-        assert_true(mp.edges()==p.edges())
-
-    def test_periodic_grid_2d_graph(self):
-        g=grid_2d_graph(0,0, periodic=True)
-        assert_equal(g.degree(), {})
-
-        for m, n, G in [(2, 2, cycle_graph(4)), (1, 7, cycle_graph(7)),
-                     (7, 1, cycle_graph(7)), (2, 5, circular_ladder_graph(5)),
-                     (5, 2, circular_ladder_graph(5)), (2, 4, cubical_graph()),
-                     (4, 2, cubical_graph())]:
-            g=grid_2d_graph(m,n, periodic=True)
-            assert_true(is_isomorphic(g, G))
-
-        DG=grid_2d_graph(4, 2, periodic=True, create_using=DiGraph())
-        assert_equal(DG.succ,g.adj)
-        assert_equal(DG.pred,g.adj)
-        MG=grid_2d_graph(4, 2, periodic=True, create_using=MultiGraph())
-        assert_equal(MG.edges(),g.edges())
-
-    def test_star_graph(self):
-        assert_true(is_isomorphic(star_graph(0), empty_graph(1)))
-        assert_true(is_isomorphic(star_graph(1), path_graph(2)))
-        assert_true(is_isomorphic(star_graph(2), path_graph(3)))
-        
-        s=star_graph(10)
-        assert_equal(sorted(list(s.degree().values())),
-                     [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 10])
-        
-        assert_raises(networkx.exception.NetworkXError,
-                      star_graph, 10, create_using=DiGraph())
-        
-        ms=star_graph(10, create_using=MultiGraph())
-        assert_true(ms.edges()==s.edges())
-
-    def test_trivial_graph(self):
-        assert_equal(number_of_nodes(trivial_graph()), 1)
-
-    def test_wheel_graph(self):
-        for n, G in [(0, null_graph()), (1, empty_graph(1)),
-                     (2, path_graph(2)), (3, complete_graph(3)),
-                     (4, complete_graph(4))]:
-            g=wheel_graph(n)
-            assert_true(is_isomorphic( g, G))
-        
-        assert_equal(g.name, 'wheel_graph(4)')
-
-        g=wheel_graph(10)
-        assert_equal(sorted(list(g.degree().values())),
-                     [3, 3, 3, 3, 3, 3, 3, 3, 3, 9])
-        
-        assert_raises(networkx.exception.NetworkXError,
-                      wheel_graph, 10, create_using=DiGraph())
-        
-        mg=wheel_graph(10, create_using=MultiGraph())
-        assert_equal(mg.edges(), g.edges())
-        
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/generators/tests/test_degree_seq.py b/lib/python2.7/site-packages/setoolsgui/networkx/generators/tests/test_degree_seq.py
deleted file mode 100644
index 0d09855..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/generators/tests/test_degree_seq.py
+++ /dev/null
@@ -1,169 +0,0 @@
-#!/usr/bin/env python
-from nose.tools import *
-import networkx
-from networkx import *
-from networkx.generators.degree_seq import *
-from networkx.utils import uniform_sequence,powerlaw_sequence
-
-def test_configuration_model_empty():
-    # empty graph has empty degree sequence
-    deg_seq=[]
-    G=configuration_model(deg_seq)
-    assert_equal(G.degree(), {})
-
-def test_configuration_model():
-    deg_seq=[5,3,3,3,3,2,2,2,1,1,1]
-    G=configuration_model(deg_seq,seed=12345678)
-    assert_equal(sorted(G.degree().values(),reverse=True),
-                 [5, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1])
-    assert_equal(sorted(G.degree(range(len(deg_seq))).values(),
-                        reverse=True),
-                 [5, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1])
-
-    # test that fixed seed delivers the same graph
-    deg_seq=[3,3,3,3,3,3,3,3,3,3,3,3]
-    G1=configuration_model(deg_seq,seed=1000)
-    G2=configuration_model(deg_seq,seed=1000)
-    assert_true(is_isomorphic(G1,G2))
-    G1=configuration_model(deg_seq,seed=10)
-    G2=configuration_model(deg_seq,seed=10)
-    assert_true(is_isomorphic(G1,G2))
-
-@raises(NetworkXError)
-def test_configuation_raise():
-    z=[5,3,3,3,3,2,2,2,1,1,1]
-    G = configuration_model(z, create_using=DiGraph())
-
-@raises(NetworkXError)
-def test_configuation_raise_odd():
-    z=[5,3,3,3,3,2,2,2,1,1]
-    G = configuration_model(z, create_using=DiGraph())
-
-@raises(NetworkXError)
-def test_directed_configuation_raise_unequal():
-    zin = [5,3,3,3,3,2,2,2,1,1]
-    zout = [5,3,3,3,3,2,2,2,1,2]
-    G = directed_configuration_model(zin, zout)
-
-def test_directed_configuation_mode():
-    G = directed_configuration_model([],[],seed=0)
-    assert_equal(len(G),0)
-
-
-def test_expected_degree_graph_empty():
-    # empty graph has empty degree sequence
-    deg_seq=[]
-    G=expected_degree_graph(deg_seq)
-    assert_equal(G.degree(), {})
-
-
-def test_expected_degree_graph():
-    # test that fixed seed delivers the same graph
-    deg_seq=[3,3,3,3,3,3,3,3,3,3,3,3]
-    G1=expected_degree_graph(deg_seq,seed=1000)
-    G2=expected_degree_graph(deg_seq,seed=1000)
-    assert_true(is_isomorphic(G1,G2))
-
-    G1=expected_degree_graph(deg_seq,seed=10)
-    G2=expected_degree_graph(deg_seq,seed=10)
-    assert_true(is_isomorphic(G1,G2))
-
-
-def test_expected_degree_graph_selfloops():
-    deg_seq=[3,3,3,3,3,3,3,3,3,3,3,3]
-    G1=expected_degree_graph(deg_seq,seed=1000, selfloops=False)
-    G2=expected_degree_graph(deg_seq,seed=1000, selfloops=False)
-    assert_true(is_isomorphic(G1,G2))
-
-def test_expected_degree_graph_skew():
-    deg_seq=[10,2,2,2,2]
-    G1=expected_degree_graph(deg_seq,seed=1000)
-    G2=expected_degree_graph(deg_seq,seed=1000)
-    assert_true(is_isomorphic(G1,G2))
-
-
-def test_havel_hakimi_construction():
-    G = havel_hakimi_graph([])
-    assert_equal(len(G),0)
-
-    z=[1000,3,3,3,3,2,2,2,1,1,1]
-    assert_raises(networkx.exception.NetworkXError,
-                  havel_hakimi_graph, z)
-    z=["A",3,3,3,3,2,2,2,1,1,1]
-    assert_raises(networkx.exception.NetworkXError,
-                  havel_hakimi_graph, z)
-
-    z=[5,4,3,3,3,2,2,2]
-    G=havel_hakimi_graph(z)
-    G=configuration_model(z)
-    z=[6,5,4,4,2,1,1,1]
-    assert_raises(networkx.exception.NetworkXError,
-                  havel_hakimi_graph, z)
-
-    z=[10,3,3,3,3,2,2,2,2,2,2]
-
-    G=havel_hakimi_graph(z)
-
-    assert_raises(networkx.exception.NetworkXError,
-                  havel_hakimi_graph, z, create_using=DiGraph())
-
-def test_directed_havel_hakimi():
-    # Test range of valid directed degree sequences
-    n, r = 100, 10
-    p = 1.0 / r
-    for i in range(r):
-        G1 = nx.erdos_renyi_graph(n,p*(i+1),None,True)
-        din = list(G1.in_degree().values())
-        dout = list(G1.out_degree().values())
-        G2 = nx.directed_havel_hakimi_graph(din, dout)
-        assert_true(din == list(G2.in_degree().values()))
-        assert_true(dout == list(G2.out_degree().values()))
-
-    # Test non-graphical sequence
-    dout = [1000,3,3,3,3,2,2,2,1,1,1]
-    din=[103,102,102,102,102,102,102,102,102,102]
-    assert_raises(nx.exception.NetworkXError,
-                  nx.directed_havel_hakimi_graph, din, dout)
-    # Test valid sequences
-    dout=[1, 1, 1, 1, 1, 2, 2, 2, 3, 4]
-    din=[2, 2, 2, 2, 2, 2, 2, 2, 0, 2]
-    G2 = nx.directed_havel_hakimi_graph(din, dout)
-    assert_true(din == list(G2.in_degree().values()))
-    assert_true(dout == list(G2.out_degree().values()))
-    # Test unequal sums
-    din=[2, 2, 2, 2, 2, 2, 2, 2, 2, 2]
-    assert_raises(nx.exception.NetworkXError,
-                  nx.directed_havel_hakimi_graph, din, dout)
-    # Test for negative values
-    din=[2, 2, 2, 2, 2, 2, 2, 2, 2, 2, -2]
-    assert_raises(nx.exception.NetworkXError,
-                  nx.directed_havel_hakimi_graph, din, dout)
-
-def test_degree_sequence_tree():
-    z=[1, 1, 1, 1, 1, 2, 2, 2, 3, 4]
-    G=degree_sequence_tree(z)
-    assert_true(len(G.nodes())==len(z))
-    assert_true(len(G.edges())==sum(z)/2)
-
-    assert_raises(networkx.exception.NetworkXError,
-                  degree_sequence_tree, z, create_using=DiGraph())
-
-    z=[1, 1, 1, 1, 1, 1, 2, 2, 2, 3, 4]
-    assert_raises(networkx.exception.NetworkXError,
-                  degree_sequence_tree, z)
-
-def test_random_degree_sequence_graph():
-    d=[1,2,2,3]
-    G = nx.random_degree_sequence_graph(d)
-    assert_equal(d, list(G.degree().values()))
-
-def test_random_degree_sequence_graph_raise():
-    z=[1, 1, 1, 1, 1, 1, 2, 2, 2, 3, 4]
-    assert_raises(networkx.exception.NetworkXUnfeasible,
-                  random_degree_sequence_graph, z)
-
-def test_random_degree_sequence_large():
-    G = nx.fast_gnp_random_graph(100,0.1)
-    d = G.degree().values()
-    G = nx.random_degree_sequence_graph(d, seed=0)
-    assert_equal(sorted(d), sorted(list(G.degree().values())))
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/generators/tests/test_directed.py b/lib/python2.7/site-packages/setoolsgui/networkx/generators/tests/test_directed.py
deleted file mode 100644
index 45b9ab1..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/generators/tests/test_directed.py
+++ /dev/null
@@ -1,36 +0,0 @@
-#!/usr/bin/env python
-
-"""Generators - Directed Graphs
-----------------------------
-"""
-
-from nose.tools import *
-from networkx import *
-from networkx.generators.directed import *
-
-class TestGeneratorsDirected():
-    def test_smoke_test_random_graphs(self):
-        G=gn_graph(100)
-        G=gnr_graph(100,0.5)
-        G=gnc_graph(100)
-        G=scale_free_graph(100)
-
-    def test_create_using_keyword_arguments(self):
-        assert_raises(networkx.exception.NetworkXError,
-                      gn_graph, 100, create_using=Graph())
-        assert_raises(networkx.exception.NetworkXError,
-                      gnr_graph, 100, 0.5, create_using=Graph())
-        assert_raises(networkx.exception.NetworkXError,
-                      gnc_graph, 100, create_using=Graph())
-        assert_raises(networkx.exception.NetworkXError,
-                      scale_free_graph, 100, create_using=Graph())
-        G=gn_graph(100,seed=1)
-        MG=gn_graph(100,create_using=MultiDiGraph(),seed=1)
-        assert_equal(G.edges(), MG.edges())
-        G=gnr_graph(100,0.5,seed=1)
-        MG=gnr_graph(100,0.5,create_using=MultiDiGraph(),seed=1)
-        assert_equal(G.edges(), MG.edges())
-        G=gnc_graph(100,seed=1)
-        MG=gnc_graph(100,create_using=MultiDiGraph(),seed=1)
-        assert_equal(G.edges(), MG.edges())
-
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/generators/tests/test_ego.py b/lib/python2.7/site-packages/setoolsgui/networkx/generators/tests/test_ego.py
deleted file mode 100644
index da15b60..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/generators/tests/test_ego.py
+++ /dev/null
@@ -1,42 +0,0 @@
-#!/usr/bin/env python
-"""
-ego graph
----------
-"""
-
-from nose.tools import assert_true, assert_equal
-import networkx as nx
-
-class TestGeneratorEgo():
-    def test_ego(self):
-        G=nx.star_graph(3)
-        H=nx.ego_graph(G,0)
-        assert_true(nx.is_isomorphic(G,H))
-        G.add_edge(1,11)
-        G.add_edge(2,22)
-        G.add_edge(3,33)
-        H=nx.ego_graph(G,0)
-        assert_true(nx.is_isomorphic(nx.star_graph(3),H))
-        G=nx.path_graph(3)
-        H=nx.ego_graph(G,0)
-        assert_equal(H.edges(), [(0, 1)])
-        H=nx.ego_graph(G,0,undirected=True)
-        assert_equal(H.edges(), [(0, 1)])
-        H=nx.ego_graph(G,0,center=False)
-        assert_equal(H.edges(), [])
-
-
-    def test_ego_distance(self):
-        G=nx.Graph()                                                            
-        G.add_edge(0,1,weight=2,distance=1)
-        G.add_edge(1,2,weight=2,distance=2)
-        G.add_edge(2,3,weight=2,distance=1) 
-        assert_equal(sorted(nx.ego_graph(G,0,radius=3).nodes()),[0,1,2,3])
-        eg=nx.ego_graph(G,0,radius=3,distance='weight')
-        assert_equal(sorted(eg.nodes()),[0,1])
-        eg=nx.ego_graph(G,0,radius=3,distance='weight',undirected=True)
-        assert_equal(sorted(eg.nodes()),[0,1])
-        eg=nx.ego_graph(G,0,radius=3,distance='distance')
-        assert_equal(sorted(eg.nodes()),[0,1,2])
-
-
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/generators/tests/test_geometric.py b/lib/python2.7/site-packages/setoolsgui/networkx/generators/tests/test_geometric.py
deleted file mode 100644
index 5e29e25..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/generators/tests/test_geometric.py
+++ /dev/null
@@ -1,31 +0,0 @@
-#!/usr/bin/env python
-from nose.tools import *
-import networkx as nx
-
-class TestGeneratorsGeometric():
-    def test_random_geometric_graph(self):
-        G=nx.random_geometric_graph(50,0.25)
-        assert_equal(len(G),50)
-
-    def test_geographical_threshold_graph(self):
-        G=nx.geographical_threshold_graph(50,100)
-        assert_equal(len(G),50)
-
-    def test_waxman_graph(self):
-        G=nx.waxman_graph(50,0.5,0.1)
-        assert_equal(len(G),50)
-        G=nx.waxman_graph(50,0.5,0.1,L=1)
-        assert_equal(len(G),50)
-        
-    def test_naviable_small_world(self):
-        G = nx.navigable_small_world_graph(5,p=1,q=0)
-        gg = nx.grid_2d_graph(5,5).to_directed()
-        assert_true(nx.is_isomorphic(G,gg))
-
-        G = nx.navigable_small_world_graph(5,p=1,q=0,dim=3)
-        gg = nx.grid_graph([5,5,5]).to_directed()
-        assert_true(nx.is_isomorphic(G,gg))
-
-        G = nx.navigable_small_world_graph(5,p=1,q=0,dim=1)
-        gg = nx.grid_graph([5]).to_directed()
-        assert_true(nx.is_isomorphic(G,gg))
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/generators/tests/test_hybrid.py b/lib/python2.7/site-packages/setoolsgui/networkx/generators/tests/test_hybrid.py
deleted file mode 100644
index 88c7505..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/generators/tests/test_hybrid.py
+++ /dev/null
@@ -1,24 +0,0 @@
-from nose.tools import *
-import networkx as nx
-
-def test_2d_grid_graph():
-    # FC article claims 2d grid graph of size n is (3,3)-connected 
-    # and (5,9)-connected, but I don't think it is (5,9)-connected
-    G=nx.grid_2d_graph(8,8,periodic=True)
-    assert_true(nx.is_kl_connected(G,3,3))
-    assert_false(nx.is_kl_connected(G,5,9))
-    (H,graphOK)=nx.kl_connected_subgraph(G,5,9,same_as_graph=True)
-    assert_false(graphOK)
-
-def test_small_graph():
-    G=nx.Graph()
-    G.add_edge(1,2)
-    G.add_edge(1,3)
-    G.add_edge(2,3)
-    assert_true(nx.is_kl_connected(G,2,2))
-    H=nx.kl_connected_subgraph(G,2,2)
-    (H,graphOK)=nx.kl_connected_subgraph(G,2,2,
-                                         low_memory=True,
-                                         same_as_graph=True)
-    assert_true(graphOK)
-    
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/generators/tests/test_intersection.py b/lib/python2.7/site-packages/setoolsgui/networkx/generators/tests/test_intersection.py
deleted file mode 100644
index 26bbcf6..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/generators/tests/test_intersection.py
+++ /dev/null
@@ -1,19 +0,0 @@
-#!/usr/bin/env python
-from nose.tools import *
-import networkx as nx
-
-class TestIntersectionGraph():
-    def test_random_intersection_graph(self):
-        G=nx.uniform_random_intersection_graph(10,5,0.5)
-        assert_equal(len(G),10)
-
-    def test_k_random_intersection_graph(self):
-        G=nx.k_random_intersection_graph(10,5,2)
-        assert_equal(len(G),10)
-
-    def test_general_random_intersection_graph(self):
-        G=nx.general_random_intersection_graph(10,5,[0.1,0.2,0.2,0.1,0.1])
-        assert_equal(len(G),10)
-        assert_raises(ValueError, nx.general_random_intersection_graph,10,5,
-                      [0.1,0.2,0.2,0.1])
-
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/generators/tests/test_line.py b/lib/python2.7/site-packages/setoolsgui/networkx/generators/tests/test_line.py
deleted file mode 100644
index 35b71be..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/generators/tests/test_line.py
+++ /dev/null
@@ -1,30 +0,0 @@
-#!/usr/bin/env python
-
-"""line graph
-----------
-"""
-
-import networkx as nx
-from nose.tools import *
-
-
-class TestGeneratorLine():
-    def test_line(self):
-        G=nx.star_graph(5)
-        L=nx.line_graph(G)
-        assert_true(nx.is_isomorphic(L,nx.complete_graph(5)))
-        G=nx.path_graph(5)
-        L=nx.line_graph(G)
-        assert_true(nx.is_isomorphic(L,nx.path_graph(4)))
-        G=nx.cycle_graph(5)
-        L=nx.line_graph(G)
-        assert_true(nx.is_isomorphic(L,G))
-        G=nx.DiGraph()
-        G.add_edges_from([(0,1),(0,2),(0,3)])
-        L=nx.line_graph(G)
-        assert_equal(L.adj, {})
-        G=nx.DiGraph()
-        G.add_edges_from([(0,1),(1,2),(2,3)])
-        L=nx.line_graph(G)
-        assert_equal(sorted(L.edges()), [((0, 1), (1, 2)), ((1, 2), (2, 3))])
-
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/generators/tests/test_random_clustered.py b/lib/python2.7/site-packages/setoolsgui/networkx/generators/tests/test_random_clustered.py
deleted file mode 100644
index f052f2c..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/generators/tests/test_random_clustered.py
+++ /dev/null
@@ -1,28 +0,0 @@
-#!/usr/bin/env python
-from nose.tools import *
-import networkx
-
-class TestRandomClusteredGraph:
-
-    def test_valid(self):
-        node=[1,1,1,2,1,2,0,0]
-        tri=[0,0,0,0,0,1,1,1]  
-        joint_degree_sequence=zip(node,tri)
-        G = networkx.random_clustered_graph(joint_degree_sequence)
-        assert_equal(G.number_of_nodes(),8)
-        assert_equal(G.number_of_edges(),7)
-        
-    def test_valid2(self):
-        G = networkx.random_clustered_graph(\
-            [(1,2),(2,1),(1,1),(1,1),(1,1),(2,0)])        
-        assert_equal(G.number_of_nodes(),6)
-        assert_equal(G.number_of_edges(),10)
-
-    def test_invalid1(self):
-        assert_raises((TypeError,networkx.NetworkXError),
-                      networkx.random_clustered_graph,[[1,1],[2,1],[0,1]])
-
-    def test_invalid2(self):
-        assert_raises((TypeError,networkx.NetworkXError),
-                      networkx.random_clustered_graph,[[1,1],[1,2],[0,1]])
-    
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/generators/tests/test_random_graphs.py b/lib/python2.7/site-packages/setoolsgui/networkx/generators/tests/test_random_graphs.py
deleted file mode 100644
index c49d74d..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/generators/tests/test_random_graphs.py
+++ /dev/null
@@ -1,129 +0,0 @@
-#!/usr/bin/env python
-from nose.tools import *
-from networkx import *
-from networkx.generators.random_graphs import *
-
-class TestGeneratorsRandom():
-    def smoke_test_random_graph(self):
-        seed = 42
-        G=gnp_random_graph(100,0.25,seed)
-        G=binomial_graph(100,0.25,seed)
-        G=erdos_renyi_graph(100,0.25,seed)
-        G=fast_gnp_random_graph(100,0.25,seed)
-        G=gnm_random_graph(100,20,seed)
-        G=dense_gnm_random_graph(100,20,seed)
-
-        G=watts_strogatz_graph(10,2,0.25,seed)
-        assert_equal(len(G), 10)
-        assert_equal(G.number_of_edges(), 10)
-
-        G=connected_watts_strogatz_graph(10,2,0.1,seed)
-        assert_equal(len(G), 10)
-        assert_equal(G.number_of_edges(), 10)
-
-        G=watts_strogatz_graph(10,4,0.25,seed)
-        assert_equal(len(G), 10)
-        assert_equal(G.number_of_edges(), 20)
-
-        G=newman_watts_strogatz_graph(10,2,0.0,seed)
-        assert_equal(len(G), 10)
-        assert_equal(G.number_of_edges(), 10)
-
-        G=newman_watts_strogatz_graph(10,4,0.25,seed)
-        assert_equal(len(G), 10)
-        assert_true(G.number_of_edges() >= 20)
-
-        G=barabasi_albert_graph(100,1,seed)
-        G=barabasi_albert_graph(100,3,seed)
-        assert_equal(G.number_of_edges(),(97*3))
-
-        G=powerlaw_cluster_graph(100,1,1.0,seed)
-        G=powerlaw_cluster_graph(100,3,0.0,seed)
-        assert_equal(G.number_of_edges(),(97*3))
-
-        G=random_regular_graph(10,20,seed)
-
-        assert_raises(networkx.exception.NetworkXError,
-                      random_regular_graph, 3, 21)
-
-        constructor=[(10,20,0.8),(20,40,0.8)]
-        G=random_shell_graph(constructor,seed)
-
-        G=nx.random_lobster(10,0.1,0.5,seed)
-
-    def test_gnp(self):
-        G=gnp_random_graph(10,0.1)
-        assert_equal(len(G),10)
-
-        G=gnp_random_graph(10,0.1,seed=42)
-        assert_equal(len(G),10)
-
-        G=gnp_random_graph(10,1.1)
-        assert_equal(len(G),10)
-        assert_equal(len(G.edges()),45)
-
-        G=gnp_random_graph(10,1.1,directed=True)
-        assert_equal(len(G),10)
-        assert_equal(len(G.edges()),90)
-
-        G=gnp_random_graph(10,-1.1)
-        assert_equal(len(G),10)
-        assert_equal(len(G.edges()),0)
-
-        G=binomial_graph(10,0.1)
-        assert_equal(len(G),10)
-
-        G=erdos_renyi_graph(10,0.1)
-        assert_equal(len(G),10)
-
-
-    def test_fast_gnp(self):
-        G=fast_gnp_random_graph(10,0.1)
-        assert_equal(len(G),10)
-
-        G=fast_gnp_random_graph(10,0.1,seed=42)
-        assert_equal(len(G),10)
-
-        G=fast_gnp_random_graph(10,1.1)
-        assert_equal(len(G),10)
-        assert_equal(len(G.edges()),45)
-
-        G=fast_gnp_random_graph(10,-1.1)
-        assert_equal(len(G),10)
-        assert_equal(len(G.edges()),0)
-
-        G=fast_gnp_random_graph(10,0.1,directed=True)
-        assert_true(G.is_directed())
-        assert_equal(len(G),10)
-
-
-    def test_gnm(self):
-        G=gnm_random_graph(10,3)
-        assert_equal(len(G),10)
-        assert_equal(len(G.edges()),3)
-
-        G=gnm_random_graph(10,3,seed=42)
-        assert_equal(len(G),10)
-        assert_equal(len(G.edges()),3)
-
-        G=gnm_random_graph(10,100)
-        assert_equal(len(G),10)
-        assert_equal(len(G.edges()),45)
-
-        G=gnm_random_graph(10,100,directed=True)
-        assert_equal(len(G),10)
-        assert_equal(len(G.edges()),90)
-
-        G=gnm_random_graph(10,-1.1)
-        assert_equal(len(G),10)
-        assert_equal(len(G.edges()),0)
-
-    def test_watts_strogatz_big_k(self):
-        assert_raises(networkx.exception.NetworkXError,
-                watts_strogatz_graph, 10, 10, 0.25)
-        assert_raises(networkx.exception.NetworkXError,
-                newman_watts_strogatz_graph, 10, 10, 0.25)
-        # could create an infinite loop, now doesn't
-        # infinite loop used to occur when a node has degree n-1 and needs to rewire
-        watts_strogatz_graph(10, 9, 0.25, seed=0)
-        newman_watts_strogatz_graph(10, 9, 0.5, seed=0)
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/generators/tests/test_small.py b/lib/python2.7/site-packages/setoolsgui/networkx/generators/tests/test_small.py
deleted file mode 100644
index 5228d3a..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/generators/tests/test_small.py
+++ /dev/null
@@ -1,181 +0,0 @@
-#!/usr/bin/env python
-
-from nose.tools import *
-from networkx import *
-from networkx.algorithms.isomorphism.isomorph import graph_could_be_isomorphic
-is_isomorphic=graph_could_be_isomorphic
-
-"""Generators - Small
-=====================
-
-Some small graphs
-"""
-
-null=null_graph()
-
-class TestGeneratorsSmall():
-    def test_make_small_graph(self):
-        d=["adjacencylist","Bull Graph",5,[[2,3],[1,3,4],[1,2,5],[2],[3]]]
-        G=make_small_graph(d)
-        assert_true(is_isomorphic(G, bull_graph()))
-
-    def test__LCF_graph(self):
-        # If n<=0, then return the null_graph
-        G=LCF_graph(-10,[1,2],100)
-        assert_true(is_isomorphic(G,null))
-        G=LCF_graph(0,[1,2],3)
-        assert_true(is_isomorphic(G,null))
-        G=LCF_graph(0,[1,2],10)
-        assert_true(is_isomorphic(G,null))
-
-        # Test that LCF(n,[],0) == cycle_graph(n)
-        for a, b, c in [(5, [], 0), (10, [], 0), (5, [], 1), (10, [], 10)]:
-            G=LCF_graph(a, b, c)
-            assert_true(is_isomorphic(G,cycle_graph(a)))
-
-        # Generate the utility graph K_{3,3}
-        G=LCF_graph(6,[3,-3],3)
-        utility_graph=complete_bipartite_graph(3,3)
-        assert_true(is_isomorphic(G, utility_graph))
-
-    def test_properties_named_small_graphs(self):
-        G=bull_graph()
-        assert_equal(G.number_of_nodes(), 5)
-        assert_equal(G.number_of_edges(), 5)
-        assert_equal(sorted(G.degree().values()), [1, 1, 2, 3, 3])
-        assert_equal(diameter(G), 3)
-        assert_equal(radius(G), 2)
-
-        G=chvatal_graph()
-        assert_equal(G.number_of_nodes(), 12)
-        assert_equal(G.number_of_edges(), 24)
-        assert_equal(list(G.degree().values()), 12 * [4])
-        assert_equal(diameter(G), 2)
-        assert_equal(radius(G), 2)
-
-        G=cubical_graph()
-        assert_equal(G.number_of_nodes(), 8)
-        assert_equal(G.number_of_edges(), 12)
-        assert_equal(list(G.degree().values()), 8*[3])
-        assert_equal(diameter(G), 3)
-        assert_equal(radius(G), 3)
-
-        G=desargues_graph()
-        assert_equal(G.number_of_nodes(), 20)
-        assert_equal(G.number_of_edges(), 30)
-        assert_equal(list(G.degree().values()), 20*[3])
-        
-        G=diamond_graph()
-        assert_equal(G.number_of_nodes(), 4)
-        assert_equal(sorted(G.degree().values()), [2, 2, 3, 3])
-        assert_equal(diameter(G), 2)
-        assert_equal(radius(G), 1)
-
-        G=dodecahedral_graph()
-        assert_equal(G.number_of_nodes(), 20)
-        assert_equal(G.number_of_edges(), 30)
-        assert_equal(list(G.degree().values()), 20*[3])
-        assert_equal(diameter(G), 5)
-        assert_equal(radius(G), 5)
-
-        G=frucht_graph()
-        assert_equal(G.number_of_nodes(), 12)
-        assert_equal(G.number_of_edges(), 18)
-        assert_equal(list(G.degree().values()), 12*[3])
-        assert_equal(diameter(G), 4)
-        assert_equal(radius(G), 3)
-
-        G=heawood_graph()
-        assert_equal(G.number_of_nodes(), 14)
-        assert_equal(G.number_of_edges(), 21)
-        assert_equal(list(G.degree().values()), 14*[3])
-        assert_equal(diameter(G), 3)
-        assert_equal(radius(G), 3)
-
-        G=house_graph()
-        assert_equal(G.number_of_nodes(), 5)
-        assert_equal(G.number_of_edges(), 6)
-        assert_equal(sorted(G.degree().values()), [2, 2, 2, 3, 3])
-        assert_equal(diameter(G), 2)
-        assert_equal(radius(G), 2)
-
-        G=house_x_graph()
-        assert_equal(G.number_of_nodes(), 5)
-        assert_equal(G.number_of_edges(), 8)
-        assert_equal(sorted(G.degree().values()), [2, 3, 3, 4, 4])
-        assert_equal(diameter(G), 2)
-        assert_equal(radius(G), 1)
-
-        G=icosahedral_graph()
-        assert_equal(G.number_of_nodes(), 12)
-        assert_equal(G.number_of_edges(), 30)
-        assert_equal(list(G.degree().values()),
-                     [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5])
-        assert_equal(diameter(G), 3)
-        assert_equal(radius(G), 3)
-
-        G=krackhardt_kite_graph()
-        assert_equal(G.number_of_nodes(), 10)
-        assert_equal(G.number_of_edges(), 18)
-        assert_equal(sorted(G.degree().values()),
-                     [1, 2, 3, 3, 3, 4, 4, 5, 5, 6])
-
-        G=moebius_kantor_graph()
-        assert_equal(G.number_of_nodes(), 16)
-        assert_equal(G.number_of_edges(), 24)
-        assert_equal(list(G.degree().values()), 16*[3])
-        assert_equal(diameter(G), 4)
-
-        G=octahedral_graph()
-        assert_equal(G.number_of_nodes(), 6)
-        assert_equal(G.number_of_edges(), 12)
-        assert_equal(list(G.degree().values()), 6*[4])
-        assert_equal(diameter(G), 2)
-        assert_equal(radius(G), 2)
-
-        G=pappus_graph()
-        assert_equal(G.number_of_nodes(), 18)
-        assert_equal(G.number_of_edges(), 27)
-        assert_equal(list(G.degree().values()), 18*[3])
-        assert_equal(diameter(G), 4)
-
-        G=petersen_graph()
-        assert_equal(G.number_of_nodes(), 10)
-        assert_equal(G.number_of_edges(), 15)
-        assert_equal(list(G.degree().values()), 10*[3])
-        assert_equal(diameter(G), 2)
-        assert_equal(radius(G), 2)
-
-        G=sedgewick_maze_graph()
-        assert_equal(G.number_of_nodes(), 8)
-        assert_equal(G.number_of_edges(), 10)
-        assert_equal(sorted(G.degree().values()), [1, 2, 2, 2, 3, 3, 3, 4])
-
-        G=tetrahedral_graph()
-        assert_equal(G.number_of_nodes(), 4)
-        assert_equal(G.number_of_edges(), 6)
-        assert_equal(list(G.degree().values()), [3, 3, 3, 3])
-        assert_equal(diameter(G), 1)
-        assert_equal(radius(G), 1)
-
-        G=truncated_cube_graph()
-        assert_equal(G.number_of_nodes(), 24)
-        assert_equal(G.number_of_edges(), 36)
-        assert_equal(list(G.degree().values()), 24*[3])
-
-        G=truncated_tetrahedron_graph()
-        assert_equal(G.number_of_nodes(), 12)
-        assert_equal(G.number_of_edges(), 18)
-        assert_equal(list(G.degree().values()), 12*[3])
-
-        G=tutte_graph()
-        assert_equal(G.number_of_nodes(), 46)
-        assert_equal(G.number_of_edges(), 69)
-        assert_equal(list(G.degree().values()), 46*[3])
-
-        # Test create_using with directed or multigraphs on small graphs
-        assert_raises(networkx.exception.NetworkXError, tutte_graph,
-                      create_using=DiGraph())
-        MG=tutte_graph(create_using=MultiGraph())
-        assert_equal(MG.edges(), G.edges())
-
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/generators/tests/test_stochastic.py b/lib/python2.7/site-packages/setoolsgui/networkx/generators/tests/test_stochastic.py
deleted file mode 100644
index 15c6fef..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/generators/tests/test_stochastic.py
+++ /dev/null
@@ -1,33 +0,0 @@
-from nose.tools import assert_true, assert_equal, raises
-import networkx as nx
-
-def test_stochastic():
-    G=nx.DiGraph()
-    G.add_edge(0,1)
-    G.add_edge(0,2)
-    S=nx.stochastic_graph(G)
-    assert_true(nx.is_isomorphic(G,S))
-    assert_equal(sorted(S.edges(data=True)),
-                 [(0, 1, {'weight': 0.5}), 
-                  (0, 2, {'weight': 0.5})])
-    S=nx.stochastic_graph(G,copy=True)
-    assert_equal(sorted(S.edges(data=True)),
-                 [(0, 1, {'weight': 0.5}), 
-                  (0, 2, {'weight': 0.5})])
-
-def test_stochastic_ints():
-    G=nx.DiGraph()
-    G.add_edge(0,1,weight=1)
-    G.add_edge(0,2,weight=1)
-    S=nx.stochastic_graph(G)
-    assert_equal(sorted(S.edges(data=True)),
-                 [(0, 1, {'weight': 0.5}), 
-                  (0, 2, {'weight': 0.5})])
-
-@raises(nx.NetworkXError)
-def test_stochastic_graph_input():
-    S = nx.stochastic_graph(nx.Graph())
-
-@raises(nx.NetworkXError)
-def test_stochastic_multigraph_input():
-    S = nx.stochastic_graph(nx.MultiGraph())
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/generators/tests/test_threshold.py b/lib/python2.7/site-packages/setoolsgui/networkx/generators/tests/test_threshold.py
deleted file mode 100644
index 198d7cc..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/generators/tests/test_threshold.py
+++ /dev/null
@@ -1,183 +0,0 @@
-#!/usr/bin/env python
-
-"""Threshold Graphs
-================
-"""
-
-from nose.tools import *
-from nose import SkipTest
-from nose.plugins.attrib import attr
-import networkx as nx
-import networkx.generators.threshold as nxt
-from networkx.algorithms.isomorphism.isomorph import graph_could_be_isomorphic
-
-cnlti = nx.convert_node_labels_to_integers
-
-
-class TestGeneratorThreshold():
-    def test_threshold_sequence_graph_test(self):
-        G=nx.star_graph(10)
-        assert_true(nxt.is_threshold_graph(G))
-        assert_true(nxt.is_threshold_sequence(list(G.degree().values())))
-
-        G=nx.complete_graph(10)
-        assert_true(nxt.is_threshold_graph(G))
-        assert_true(nxt.is_threshold_sequence(list(G.degree().values())))
-
-        deg=[3,2,2,1,1,1]
-        assert_false(nxt.is_threshold_sequence(deg))
-
-        deg=[3,2,2,1]
-        assert_true(nxt.is_threshold_sequence(deg))
-
-        G=nx.generators.havel_hakimi_graph(deg)
-        assert_true(nxt.is_threshold_graph(G))
-
-    def test_creation_sequences(self):
-        deg=[3,2,2,1]
-        G=nx.generators.havel_hakimi_graph(deg)
-        cs0=nxt.creation_sequence(deg)
-        H0=nxt.threshold_graph(cs0)
-        assert_equal(''.join(cs0), 'ddid')
-
-        cs1=nxt.creation_sequence(deg, with_labels=True)
-        H1=nxt.threshold_graph(cs1)
-        assert_equal(cs1, [(1, 'd'), (2, 'd'), (3, 'i'), (0, 'd')])
-
-        cs2=nxt.creation_sequence(deg, compact=True)
-        H2=nxt.threshold_graph(cs2)
-        assert_equal(cs2, [2, 1, 1])
-        assert_equal(''.join(nxt.uncompact(cs2)), 'ddid')
-        assert_true(graph_could_be_isomorphic(H0,G))
-        assert_true(graph_could_be_isomorphic(H0,H1))
-        assert_true(graph_could_be_isomorphic(H0,H2))
-        
-    def test_shortest_path(self):
-        deg=[3,2,2,1]
-        G=nx.generators.havel_hakimi_graph(deg)
-        cs1=nxt.creation_sequence(deg, with_labels=True)
-        for n, m in [(3, 0), (0, 3), (0, 2), (0, 1), (1, 3),
-                     (3, 1), (1, 2), (2, 3)]:
-            assert_equal(nxt.shortest_path(cs1,n,m),
-                         nx.shortest_path(G, n, m))
-
-        spl=nxt.shortest_path_length(cs1,3)
-        spl2=nxt.shortest_path_length([ t for v,t in cs1],2)
-        assert_equal(spl, spl2)
-
-        spld={}
-        for j,pl in enumerate(spl):
-            n=cs1[j][0]
-            spld[n]=pl
-        assert_equal(spld, nx.single_source_shortest_path_length(G, 3))
-
-    def test_weights_thresholds(self):
-        wseq=[3,4,3,3,5,6,5,4,5,6]
-        cs=nxt.weights_to_creation_sequence(wseq,threshold=10)
-        wseq=nxt.creation_sequence_to_weights(cs)
-        cs2=nxt.weights_to_creation_sequence(wseq)
-        assert_equal(cs, cs2)
-        
-        wseq=nxt.creation_sequence_to_weights(nxt.uncompact([3,1,2,3,3,2,3]))
-        assert_equal(wseq,
-                     [s*0.125 for s in [4,4,4,3,5,5,2,2,2,6,6,6,1,1,7,7,7]])
-
-        wseq=nxt.creation_sequence_to_weights([3,1,2,3,3,2,3])
-        assert_equal(wseq,
-                     [s*0.125 for s in [4,4,4,3,5,5,2,2,2,6,6,6,1,1,7,7,7]])
-
-        wseq=nxt.creation_sequence_to_weights(list(enumerate('ddidiiidididi')))
-        assert_equal(wseq,
-                     [s*0.1 for s in [5,5,4,6,3,3,3,7,2,8,1,9,0]])
-
-        wseq=nxt.creation_sequence_to_weights('ddidiiidididi')
-        assert_equal(wseq,
-                     [s*0.1 for s in [5,5,4,6,3,3,3,7,2,8,1,9,0]])
-
-        wseq=nxt.creation_sequence_to_weights('ddidiiidididid')
-        ws=[s/float(12) for s in [6,6,5,7,4,4,4,8,3,9,2,10,1,11]]
-        assert_true(sum([abs(c-d) for c,d in zip(wseq,ws)]) < 1e-14)
-
-    def test_finding_routines(self):
-        G=nx.Graph({1:[2],2:[3],3:[4],4:[5],5:[6]})
-        G.add_edge(2,4)
-        G.add_edge(2,5)
-        G.add_edge(2,7)
-        G.add_edge(3,6)
-        G.add_edge(4,6)
-
-        # Alternating 4 cycle
-        assert_equal(nxt.find_alternating_4_cycle(G), [1, 2, 3, 6])
-
-        # Threshold graph
-        TG=nxt.find_threshold_graph(G)
-        assert_true(nxt.is_threshold_graph(TG))
-        assert_equal(sorted(TG.nodes()), [1, 2, 3, 4, 5, 7])
-
-        cs=nxt.creation_sequence(TG.degree(),with_labels=True)
-        assert_equal(nxt.find_creation_sequence(G), cs)
-
-    def test_fast_versions_properties_threshold_graphs(self):
-        cs='ddiiddid'
-        G=nxt.threshold_graph(cs)
-        assert_equal(nxt.density('ddiiddid'), nx.density(G))
-        assert_equal(sorted(nxt.degree_sequence(cs)),
-                     sorted(G.degree().values()))
-
-        ts=nxt.triangle_sequence(cs)
-        assert_equal(ts, list(nx.triangles(G).values()))
-        assert_equal(sum(ts) // 3, nxt.triangles(cs))
-
-        c1=nxt.cluster_sequence(cs)
-        c2=list(nx.clustering(G).values())
-        assert_almost_equal(sum([abs(c-d) for c,d in zip(c1,c2)]), 0)
-
-        b1=nx.betweenness_centrality(G).values()
-        b2=nxt.betweenness_sequence(cs)
-        assert_true(sum([abs(c-d) for c,d in zip(b1,b2)]) < 1e-14)
-
-        assert_equal(nxt.eigenvalues(cs), [0, 1, 3, 3, 5, 7, 7, 8])
-
-        # Degree Correlation
-        assert_true(abs(nxt.degree_correlation(cs)+0.593038821954) < 1e-12)
-        assert_equal(nxt.degree_correlation('diiiddi'), -0.8)
-        assert_equal(nxt.degree_correlation('did'), -1.0)
-        assert_equal(nxt.degree_correlation('ddd'), 1.0)
-        assert_equal(nxt.eigenvalues('dddiii'), [0, 0, 0, 0, 3, 3])
-        assert_equal(nxt.eigenvalues('dddiiid'), [0, 1, 1, 1, 4, 4, 7])
-
-    def test_tg_creation_routines(self):
-        s=nxt.left_d_threshold_sequence(5,7)
-        s=nxt.right_d_threshold_sequence(5,7)
-        s1=nxt.swap_d(s,1.0,1.0)
-
-        
-    @attr('numpy')
-    def test_eigenvectors(self):
-        try:
-            import numpy as N
-            eigenval=N.linalg.eigvals
-        except ImportError:
-            raise SkipTest('NumPy not available.')
-
-        cs='ddiiddid'
-        G=nxt.threshold_graph(cs)
-        (tgeval,tgevec)=nxt.eigenvectors(cs)
-        dot=N.dot
-        assert_equal([ abs(dot(lv,lv)-1.0)<1e-9 for lv in tgevec ], [True]*8)
-        lapl=nx.laplacian_matrix(G)
-#        tgev=[ dot(lv,dot(lapl,lv)) for lv in tgevec ]
-#        assert_true(sum([abs(c-d) for c,d in zip(tgev,tgeval)]) < 1e-9)
-#        tgev.sort()
-#        lev=list(eigenval(lapl))
-#        lev.sort()
-#        assert_true(sum([abs(c-d) for c,d in zip(tgev,lev)]) < 1e-9)
-
-    def test_create_using(self):
-        cs='ddiiddid'
-        G=nxt.threshold_graph(cs)
-        assert_raises(nx.exception.NetworkXError,
-                      nxt.threshold_graph, cs, create_using=nx.DiGraph())
-        MG=nxt.threshold_graph(cs,create_using=nx.MultiGraph())
-        assert_equal(MG.edges(), G.edges())
-
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/generators/threshold.py b/lib/python2.7/site-packages/setoolsgui/networkx/generators/threshold.py
deleted file mode 100644
index 68a565e..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/generators/threshold.py
+++ /dev/null
@@ -1,906 +0,0 @@
-"""
-Threshold Graphs - Creation, manipulation and identification.
-"""
-__author__ = """Aric Hagberg (hagberg@lanl.gov)\nPieter Swart (swart@lanl.gov)\nDan Schult (dschult@colgate.edu)"""
-#    Copyright (C) 2004-2008 by 
-#    Aric Hagberg <hagberg@lanl.gov>
-#    Dan Schult <dschult@colgate.edu>
-#    Pieter Swart <swart@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-#
-
-__all__=[]
-
-import random  # for swap_d 
-from math import sqrt
-import networkx
-
-def is_threshold_graph(G):
-    """
-    Returns True if G is a threshold graph.
-    """
-    return is_threshold_sequence(list(G.degree().values()))
-    
-def is_threshold_sequence(degree_sequence):
-    """
-    Returns True if the sequence is a threshold degree seqeunce.
-    
-    Uses the property that a threshold graph must be constructed by
-    adding either dominating or isolated nodes. Thus, it can be
-    deconstructed iteratively by removing a node of degree zero or a
-    node that connects to the remaining nodes.  If this deconstruction
-    failes then the sequence is not a threshold sequence.
-    """
-    ds=degree_sequence[:] # get a copy so we don't destroy original 
-    ds.sort()
-    while ds:     
-        if ds[0]==0:      # if isolated node
-            ds.pop(0)     # remove it 
-            continue
-        if ds[-1]!=len(ds)-1:  # is the largest degree node dominating?
-            return False       # no, not a threshold degree sequence
-        ds.pop()               # yes, largest is the dominating node
-        ds=[ d-1 for d in ds ] # remove it and decrement all degrees
-    return True
-
-
-def creation_sequence(degree_sequence,with_labels=False,compact=False):
-    """
-    Determines the creation sequence for the given threshold degree sequence.
-
-    The creation sequence is a list of single characters 'd'
-    or 'i': 'd' for dominating or 'i' for isolated vertices.
-    Dominating vertices are connected to all vertices present when it
-    is added.  The first node added is by convention 'd'.
-    This list can be converted to a string if desired using "".join(cs)
-
-    If with_labels==True:
-    Returns a list of 2-tuples containing the vertex number 
-    and a character 'd' or 'i' which describes the type of vertex.
-
-    If compact==True:
-    Returns the creation sequence in a compact form that is the number
-    of 'i's and 'd's alternating.
-    Examples:
-    [1,2,2,3] represents d,i,i,d,d,i,i,i
-    [3,1,2] represents d,d,d,i,d,d
-
-    Notice that the first number is the first vertex to be used for
-    construction and so is always 'd'.
-
-    with_labels and compact cannot both be True.
-
-    Returns None if the sequence is not a threshold sequence
-    """
-    if with_labels and compact:
-        raise ValueError("compact sequences cannot be labeled")
-
-    # make an indexed copy
-    if isinstance(degree_sequence,dict):   # labeled degree seqeunce
-        ds = [ [degree,label] for (label,degree) in degree_sequence.items() ]
-    else:
-        ds=[ [d,i] for i,d in enumerate(degree_sequence) ] 
-    ds.sort()
-    cs=[]  # creation sequence
-    while ds:
-        if ds[0][0]==0:     # isolated node
-            (d,v)=ds.pop(0)
-            if len(ds)>0:    # make sure we start with a d
-                cs.insert(0,(v,'i'))
-            else:
-                cs.insert(0,(v,'d'))
-            continue
-        if ds[-1][0]!=len(ds)-1:     # Not dominating node
-            return None  # not a threshold degree sequence
-        (d,v)=ds.pop()
-        cs.insert(0,(v,'d'))
-        ds=[ [d[0]-1,d[1]] for d in ds ]   # decrement due to removing node
-
-    if with_labels: return cs
-    if compact: return make_compact(cs)
-    return [ v[1] for v in cs ]   # not labeled
-
-def make_compact(creation_sequence):
-    """
-    Returns the creation sequence in a compact form
-    that is the number of 'i's and 'd's alternating.
-    Examples:
-    [1,2,2,3] represents d,i,i,d,d,i,i,i.
-    [3,1,2] represents d,d,d,i,d,d.
-    Notice that the first number is the first vertex
-    to be used for construction and so is always 'd'.
-
-    Labeled creation sequences lose their labels in the 
-    compact representation.
-    """
-    first=creation_sequence[0]
-    if isinstance(first,str):    # creation sequence
-        cs = creation_sequence[:]
-    elif isinstance(first,tuple):   # labeled creation sequence
-        cs = [ s[1] for s in creation_sequence ]
-    elif isinstance(first,int):   # compact creation sequence
-        return creation_sequence   
-    else:
-        raise TypeError("Not a valid creation sequence type")
-
-    ccs=[]
-    count=1 # count the run lengths of d's or i's.
-    for i in range(1,len(cs)):
-        if cs[i]==cs[i-1]: 
-            count+=1
-        else:
-            ccs.append(count)
-            count=1
-    ccs.append(count) # don't forget the last one
-    return ccs
-    
-def uncompact(creation_sequence):
-    """
-    Converts a compact creation sequence for a threshold
-    graph to a standard creation sequence (unlabeled).
-    If the creation_sequence is already standard, return it.
-    See creation_sequence.
-    """
-    first=creation_sequence[0]
-    if isinstance(first,str):    # creation sequence
-        return creation_sequence
-    elif isinstance(first,tuple):   # labeled creation sequence
-        return creation_sequence
-    elif isinstance(first,int):   # compact creation sequence
-        ccscopy=creation_sequence[:]
-    else:
-        raise TypeError("Not a valid creation sequence type")
-    cs = []
-    while ccscopy:
-        cs.extend(ccscopy.pop(0)*['d'])
-        if ccscopy:
-            cs.extend(ccscopy.pop(0)*['i'])
-    return cs
-
-def creation_sequence_to_weights(creation_sequence):
-    """
-    Returns a list of node weights which create the threshold
-    graph designated by the creation sequence.  The weights
-    are scaled so that the threshold is 1.0.  The order of the
-    nodes is the same as that in the creation sequence.
-    """
-    # Turn input sequence into a labeled creation sequence
-    first=creation_sequence[0]
-    if isinstance(first,str):    # creation sequence
-        if isinstance(creation_sequence,list):
-            wseq = creation_sequence[:]
-        else:
-            wseq = list(creation_sequence) # string like 'ddidid'
-    elif isinstance(first,tuple):   # labeled creation sequence
-        wseq = [ v[1] for v in creation_sequence]
-    elif isinstance(first,int):  # compact creation sequence
-        wseq = uncompact(creation_sequence)
-    else:
-        raise TypeError("Not a valid creation sequence type")
-    # pass through twice--first backwards
-    wseq.reverse()
-    w=0
-    prev='i'
-    for j,s in enumerate(wseq):
-        if s=='i':
-            wseq[j]=w
-            prev=s
-        elif prev=='i':
-            prev=s
-            w+=1
-    wseq.reverse()  # now pass through forwards
-    for j,s in enumerate(wseq):
-        if s=='d':
-            wseq[j]=w
-            prev=s
-        elif prev=='d':
-            prev=s
-            w+=1
-    # Now scale weights
-    if prev=='d': w+=1
-    wscale=1./float(w)
-    return [ ww*wscale for ww in wseq]
-    #return wseq
-
-def weights_to_creation_sequence(weights,threshold=1,with_labels=False,compact=False):
-    """
-    Returns a creation sequence for a threshold graph 
-    determined by the weights and threshold given as input.
-    If the sum of two node weights is greater than the
-    threshold value, an edge is created between these nodes.
-
-    The creation sequence is a list of single characters 'd'
-    or 'i': 'd' for dominating or 'i' for isolated vertices.
-    Dominating vertices are connected to all vertices present 
-    when it is added.  The first node added is by convention 'd'.
-
-    If with_labels==True:
-    Returns a list of 2-tuples containing the vertex number 
-    and a character 'd' or 'i' which describes the type of vertex.
-
-    If compact==True:
-    Returns the creation sequence in a compact form that is the number
-    of 'i's and 'd's alternating.
-    Examples:
-    [1,2,2,3] represents d,i,i,d,d,i,i,i
-    [3,1,2] represents d,d,d,i,d,d
-
-    Notice that the first number is the first vertex to be used for
-    construction and so is always 'd'.
-
-    with_labels and compact cannot both be True.
-    """
-    if with_labels and compact:
-        raise ValueError("compact sequences cannot be labeled")
-
-    # make an indexed copy
-    if isinstance(weights,dict):   # labeled weights
-        wseq = [ [w,label] for (label,w) in weights.items() ]
-    else:
-        wseq = [ [w,i] for i,w in enumerate(weights) ] 
-    wseq.sort()
-    cs=[]  # creation sequence
-    cutoff=threshold-wseq[-1][0]
-    while wseq:
-        if wseq[0][0]<cutoff:     # isolated node
-            (w,label)=wseq.pop(0)
-            cs.append((label,'i'))
-        else:
-            (w,label)=wseq.pop()
-            cs.append((label,'d'))
-            cutoff=threshold-wseq[-1][0]
-        if len(wseq)==1:     # make sure we start with a d
-            (w,label)=wseq.pop()
-            cs.append((label,'d'))
-    # put in correct order
-    cs.reverse()
-
-    if with_labels: return cs
-    if compact: return make_compact(cs)
-    return [ v[1] for v in cs ]   # not labeled
-
-
-# Manipulating NetworkX.Graphs in context of threshold graphs
-def threshold_graph(creation_sequence, create_using=None):
-    """
-    Create a threshold graph from the creation sequence or compact
-    creation_sequence.
-
-    The input sequence can be a 
-
-    creation sequence (e.g. ['d','i','d','d','d','i'])
-    labeled creation sequence (e.g. [(0,'d'),(2,'d'),(1,'i')])
-    compact creation sequence (e.g. [2,1,1,2,0])
-    
-    Use cs=creation_sequence(degree_sequence,labeled=True) 
-    to convert a degree sequence to a creation sequence.
-
-    Returns None if the sequence is not valid
-    """
-    # Turn input sequence into a labeled creation sequence
-    first=creation_sequence[0]
-    if isinstance(first,str):    # creation sequence
-        ci = list(enumerate(creation_sequence))
-    elif isinstance(first,tuple):   # labeled creation sequence
-        ci = creation_sequence[:]
-    elif isinstance(first,int):  # compact creation sequence
-        cs = uncompact(creation_sequence)
-        ci = list(enumerate(cs))
-    else:
-        print("not a valid creation sequence type")
-        return None
-        
-    if create_using is None:
-        G = networkx.Graph()
-    elif create_using.is_directed():
-        raise networkx.NetworkXError("Directed Graph not supported")
-    else:
-        G = create_using
-        G.clear()
-
-    G.name="Threshold Graph"
-
-    # add nodes and edges
-    # if type is 'i' just add nodea
-    # if type is a d connect to everything previous
-    while ci:
-        (v,node_type)=ci.pop(0)
-        if node_type=='d': # dominating type, connect to all existing nodes
-            for u in G.nodes(): 
-                G.add_edge(v,u) 
-        G.add_node(v)
-    return G
-
-
-
-def find_alternating_4_cycle(G):
-    """
-    Returns False if there aren't any alternating 4 cycles.
-    Otherwise returns the cycle as [a,b,c,d] where (a,b)
-    and (c,d) are edges and (a,c) and (b,d) are not.
-    """
-    for (u,v) in G.edges():
-        for w in G.nodes():
-            if not G.has_edge(u,w) and u!=w:
-                for x in G.neighbors(w):
-                    if not G.has_edge(v,x) and v!=x:
-                        return [u,v,w,x]
-    return False
-
-
-
-def find_threshold_graph(G, create_using=None):
-    """
-    Return a threshold subgraph that is close to largest in G.
-    The threshold graph will contain the largest degree node in G.
-    
-    """
-    return threshold_graph(find_creation_sequence(G),create_using)
-
-
-def find_creation_sequence(G):
-    """
-    Find a threshold subgraph that is close to largest in G.
-    Returns the labeled creation sequence of that threshold graph.  
-    """
-    cs=[]
-    # get a local pointer to the working part of the graph
-    H=G
-    while H.order()>0:
-        # get new degree sequence on subgraph
-        dsdict=H.degree()
-        ds=[ [d,v] for v,d in dsdict.items() ]
-        ds.sort()
-        # Update threshold graph nodes
-        if ds[-1][0]==0: # all are isolated
-            cs.extend( zip( dsdict, ['i']*(len(ds)-1)+['d']) )
-            break   # Done!
-        # pull off isolated nodes
-        while ds[0][0]==0:
-            (d,iso)=ds.pop(0)
-            cs.append((iso,'i'))
-        # find new biggest node
-        (d,bigv)=ds.pop()
-        # add edges of star to t_g
-        cs.append((bigv,'d'))
-        # form subgraph of neighbors of big node
-        H=H.subgraph(H.neighbors(bigv))
-    cs.reverse()
-    return cs
-    
-
-    
-### Properties of Threshold Graphs
-def triangles(creation_sequence):
-    """
-    Compute number of triangles in the threshold graph with the
-    given creation sequence.
-    """
-    # shortcut algoritm that doesn't require computing number
-    # of triangles at each node.
-    cs=creation_sequence    # alias
-    dr=cs.count("d")        # number of d's in sequence
-    ntri=dr*(dr-1)*(dr-2)/6 # number of triangles in clique of nd d's
-    # now add dr choose 2 triangles for every 'i' in sequence where
-    # dr is the number of d's to the right of the current i
-    for i,typ in enumerate(cs): 
-        if typ=="i":
-            ntri+=dr*(dr-1)/2
-        else:
-            dr-=1
-    return ntri
-
-
-def triangle_sequence(creation_sequence):
-    """
-    Return triangle sequence for the given threshold graph creation sequence.
-
-    """
-    cs=creation_sequence
-    seq=[]
-    dr=cs.count("d")     # number of d's to the right of the current pos
-    dcur=(dr-1)*(dr-2) // 2 # number of triangles through a node of clique dr
-    irun=0               # number of i's in the last run
-    drun=0               # number of d's in the last run
-    for i,sym in enumerate(cs):
-        if sym=="d":
-            drun+=1
-            tri=dcur+(dr-1)*irun    # new triangles at this d
-        else: # cs[i]="i":
-            if prevsym=="d":        # new string of i's
-                dcur+=(dr-1)*irun   # accumulate shared shortest paths
-                irun=0              # reset i run counter
-                dr-=drun            # reduce number of d's to right
-                drun=0              # reset d run counter
-            irun+=1
-            tri=dr*(dr-1) // 2      # new triangles at this i
-        seq.append(tri)
-        prevsym=sym
-    return seq
-
-def cluster_sequence(creation_sequence):
-    """
-    Return cluster sequence for the given threshold graph creation sequence.
-    """
-    triseq=triangle_sequence(creation_sequence)
-    degseq=degree_sequence(creation_sequence)
-    cseq=[]
-    for i,deg in enumerate(degseq):
-        tri=triseq[i]
-        if deg <= 1:    # isolated vertex or single pair gets cc 0
-            cseq.append(0)
-            continue
-        max_size=(deg*(deg-1)) // 2
-        cseq.append(float(tri)/float(max_size))
-    return cseq
-
-
-def degree_sequence(creation_sequence):
-    """
-    Return degree sequence for the threshold graph with the given
-    creation sequence
-    """
-    cs=creation_sequence  # alias
-    seq=[]
-    rd=cs.count("d") # number of d to the right
-    for i,sym in enumerate(cs):
-        if sym=="d":
-            rd-=1
-            seq.append(rd+i)
-        else:
-            seq.append(rd)
-    return seq            
-
-def density(creation_sequence):
-    """
-    Return the density of the graph with this creation_sequence.
-    The density is the fraction of possible edges present.
-    """
-    N=len(creation_sequence)
-    two_size=sum(degree_sequence(creation_sequence))
-    two_possible=N*(N-1)
-    den=two_size/float(two_possible)
-    return den
-
-def degree_correlation(creation_sequence):
-    """
-    Return the degree-degree correlation over all edges.
-    """
-    cs=creation_sequence
-    s1=0  # deg_i*deg_j
-    s2=0  # deg_i^2+deg_j^2
-    s3=0  # deg_i+deg_j
-    m=0   # number of edges
-    rd=cs.count("d") # number of d nodes to the right
-    rdi=[ i for i,sym in enumerate(cs) if sym=="d"] # index of "d"s
-    ds=degree_sequence(cs)
-    for i,sym in enumerate(cs):
-        if sym=="d": 
-            if i!=rdi[0]:
-                print("Logic error in degree_correlation",i,rdi)
-                raise ValueError
-            rdi.pop(0)
-        degi=ds[i]
-        for dj in rdi:
-            degj=ds[dj]
-            s1+=degj*degi
-            s2+=degi**2+degj**2
-            s3+=degi+degj
-            m+=1
-    denom=(2*m*s2-s3*s3)
-    numer=(4*m*s1-s3*s3)
-    if denom==0:
-        if numer==0: 
-            return 1
-        raise ValueError("Zero Denominator but Numerator is %s"%numer)
-    return numer/float(denom)
-
-
-def shortest_path(creation_sequence,u,v):
-    """
-    Find the shortest path between u and v in a 
-    threshold graph G with the given creation_sequence.
-
-    For an unlabeled creation_sequence, the vertices 
-    u and v must be integers in (0,len(sequence)) refering 
-    to the position of the desired vertices in the sequence.
-
-    For a labeled creation_sequence, u and v are labels of veritices.
-
-    Use cs=creation_sequence(degree_sequence,with_labels=True) 
-    to convert a degree sequence to a creation sequence.
-
-    Returns a list of vertices from u to v.
-    Example: if they are neighbors, it returns [u,v]
-    """
-    # Turn input sequence into a labeled creation sequence
-    first=creation_sequence[0]
-    if isinstance(first,str):    # creation sequence
-        cs = [(i,creation_sequence[i]) for i in range(len(creation_sequence))]
-    elif isinstance(first,tuple):   # labeled creation sequence
-        cs = creation_sequence[:]
-    elif isinstance(first,int):  # compact creation sequence
-        ci = uncompact(creation_sequence)
-        cs = [(i,ci[i]) for i in range(len(ci))]
-    else:
-        raise TypeError("Not a valid creation sequence type")
-        
-    verts=[ s[0] for s in cs ]
-    if v not in verts:
-        raise ValueError("Vertex %s not in graph from creation_sequence"%v)
-    if u not in verts:
-        raise ValueError("Vertex %s not in graph from creation_sequence"%u)
-    # Done checking
-    if u==v: return [u]
-
-    uindex=verts.index(u)
-    vindex=verts.index(v)
-    bigind=max(uindex,vindex)
-    if cs[bigind][1]=='d':
-        return [u,v]
-    # must be that cs[bigind][1]=='i'
-    cs=cs[bigind:]
-    while cs:
-        vert=cs.pop()
-        if vert[1]=='d':
-            return [u,vert[0],v]
-    # All after u are type 'i' so no connection
-    return -1
-
-def shortest_path_length(creation_sequence,i):
-    """
-    Return the shortest path length from indicated node to
-    every other node for the threshold graph with the given
-    creation sequence.
-    Node is indicated by index i in creation_sequence unless
-    creation_sequence is labeled in which case, i is taken to
-    be the label of the node.
-
-    Paths lengths in threshold graphs are at most 2.
-    Length to unreachable nodes is set to -1.
-    """
-    # Turn input sequence into a labeled creation sequence
-    first=creation_sequence[0]
-    if isinstance(first,str):    # creation sequence
-        if isinstance(creation_sequence,list):
-            cs = creation_sequence[:]
-        else:
-            cs = list(creation_sequence)
-    elif isinstance(first,tuple):   # labeled creation sequence
-        cs = [ v[1] for v in creation_sequence]
-        i = [v[0] for v in creation_sequence].index(i)
-    elif isinstance(first,int):  # compact creation sequence
-        cs = uncompact(creation_sequence)
-    else:
-        raise TypeError("Not a valid creation sequence type")
-    
-    # Compute
-    N=len(cs)
-    spl=[2]*N       # length 2 to every node
-    spl[i]=0        # except self which is 0
-    # 1 for all d's to the right
-    for j in range(i+1,N):   
-        if cs[j]=="d":
-            spl[j]=1
-    if cs[i]=='d': # 1 for all nodes to the left
-        for j in range(i):
-            spl[j]=1
-    # and -1 for any trailing i to indicate unreachable
-    for j in range(N-1,0,-1):
-        if cs[j]=="d":
-            break
-        spl[j]=-1
-    return spl
-
-
-def betweenness_sequence(creation_sequence,normalized=True):
-    """
-    Return betweenness for the threshold graph with the given creation
-    sequence.  The result is unscaled.  To scale the values
-    to the iterval [0,1] divide by (n-1)*(n-2).
-    """
-    cs=creation_sequence
-    seq=[]               # betweenness
-    lastchar='d'         # first node is always a 'd'        
-    dr=float(cs.count("d"))  # number of d's to the right of curren pos
-    irun=0               # number of i's in the last run
-    drun=0               # number of d's in the last run
-    dlast=0.0              # betweenness of last d
-    for i,c in enumerate(cs):
-        if c=='d':    #cs[i]=="d":
-            # betweennees = amt shared with eariler d's and i's
-            #             + new isolated nodes covered
-            #             + new paths to all previous nodes
-            b=dlast + (irun-1)*irun/dr + 2*irun*(i-drun-irun)/dr
-            drun+=1           # update counter
-        else:      # cs[i]="i":
-            if lastchar=='d': # if this is a new run of i's
-                dlast=b       # accumulate betweenness
-                dr-=drun      # update number of d's to the right
-                drun=0        # reset d counter
-                irun=0        # reset i counter
-            b=0      # isolated nodes have zero betweenness 
-            irun+=1  # add another i to the run   
-        seq.append(float(b))
-        lastchar=c
-
-    # normalize by the number of possible shortest paths
-    if normalized:
-        order=len(cs)
-        scale=1.0/((order-1)*(order-2))
-        seq=[ s*scale for s in seq ]
-
-    return seq
-
-
-def eigenvectors(creation_sequence):
-    """
-    Return a 2-tuple of Laplacian eigenvalues and eigenvectors 
-    for the threshold network with creation_sequence.
-    The first value is a list of eigenvalues.
-    The second value is a list of eigenvectors.
-    The lists are in the same order so corresponding eigenvectors
-    and eigenvalues are in the same position in the two lists.
-
-    Notice that the order of the eigenvalues returned by eigenvalues(cs)
-    may not correspond to the order of these eigenvectors.
-    """
-    ccs=make_compact(creation_sequence)
-    N=sum(ccs)
-    vec=[0]*N
-    val=vec[:]
-    # get number of type d nodes to the right (all for first node)
-    dr=sum(ccs[::2])
-
-    nn=ccs[0]
-    vec[0]=[1./sqrt(N)]*N
-    val[0]=0
-    e=dr
-    dr-=nn
-    type_d=True
-    i=1
-    dd=1
-    while dd<nn:
-        scale=1./sqrt(dd*dd+i)
-        vec[i]=i*[-scale]+[dd*scale]+[0]*(N-i-1)
-        val[i]=e
-        i+=1
-        dd+=1
-    if len(ccs)==1: return (val,vec)
-    for nn in ccs[1:]:
-        scale=1./sqrt(nn*i*(i+nn))
-        vec[i]=i*[-nn*scale]+nn*[i*scale]+[0]*(N-i-nn)
-        # find eigenvalue
-        type_d=not type_d
-        if type_d:
-            e=i+dr
-            dr-=nn
-        else:
-            e=dr
-        val[i]=e
-        st=i
-        i+=1
-        dd=1
-        while dd<nn:
-            scale=1./sqrt(i-st+dd*dd)
-            vec[i]=[0]*st+(i-st)*[-scale]+[dd*scale]+[0]*(N-i-1)
-            val[i]=e
-            i+=1
-            dd+=1
-    return (val,vec)
-
-def spectral_projection(u,eigenpairs):
-    """
-    Returns the coefficients of each eigenvector
-    in a projection of the vector u onto the normalized
-    eigenvectors which are contained in eigenpairs.
-
-    eigenpairs should be a list of two objects.  The
-    first is a list of eigenvalues and the second a list
-    of eigenvectors.  The eigenvectors should be lists. 
-
-    There's not a lot of error checking on lengths of 
-    arrays, etc. so be careful.
-    """
-    coeff=[]
-    evect=eigenpairs[1]
-    for ev in evect:
-        c=sum([ evv*uv for (evv,uv) in zip(ev,u)])
-        coeff.append(c)
-    return coeff
-        
-
-
-def eigenvalues(creation_sequence):
-    """
-    Return sequence of eigenvalues of the Laplacian of the threshold
-    graph for the given creation_sequence.
-
-    Based on the Ferrer's diagram method.  The spectrum is integral
-    and is the conjugate of the degree sequence.
-
-    See:: 
-
-      @Article{degree-merris-1994,
-       author = 	 {Russel Merris},
-       title = 	 {Degree maximal graphs are Laplacian integral},
-       journal = 	 {Linear Algebra Appl.},
-       year = 	 {1994},
-       volume = 	 {199},
-       pages = 	 {381--389},
-      }
-
-    """
-    degseq=degree_sequence(creation_sequence)
-    degseq.sort()
-    eiglist=[]   # zero is always one eigenvalue
-    eig=0
-    row=len(degseq)
-    bigdeg=degseq.pop()
-    while row:
-        if bigdeg<row:
-            eiglist.append(eig)
-            row-=1
-        else:
-            eig+=1
-            if degseq:
-                bigdeg=degseq.pop()
-            else:
-                bigdeg=0
-    return eiglist
-
-
-### Threshold graph creation routines
-
-def random_threshold_sequence(n,p,seed=None):
-    """
-    Create a random threshold sequence of size n.
-    A creation sequence is built by randomly choosing d's with
-    probabiliy p and i's with probability 1-p.
-
-    s=nx.random_threshold_sequence(10,0.5)
-
-    returns a threshold sequence of length 10 with equal
-    probably of an i or a d at each position.
-
-    A "random" threshold graph can be built with
-
-    G=nx.threshold_graph(s)
-
-    """
-    if not seed is None:
-        random.seed(seed)
-
-    if not (p<=1 and p>=0):
-        raise ValueError("p must be in [0,1]")
-
-    cs=['d']  # threshold sequences always start with a d
-    for i in range(1,n):
-        if random.random() < p: 
-            cs.append('d')
-        else:
-            cs.append('i')
-    return cs
-
-
-
-
-
-# maybe *_d_threshold_sequence routines should
-# be (or be called from) a single routine with a more descriptive name
-# and a keyword parameter?
-def right_d_threshold_sequence(n,m):
-    """
-    Create a skewed threshold graph with a given number
-    of vertices (n) and a given number of edges (m).
-    
-    The routine returns an unlabeled creation sequence 
-    for the threshold graph.
-
-    FIXME: describe algorithm
-
-    """
-    cs=['d']+['i']*(n-1) # create sequence with n insolated nodes
-
-    #  m <n : not enough edges, make disconnected 
-    if m < n: 
-        cs[m]='d'
-        return cs
-
-    # too many edges 
-    if m > n*(n-1)/2:
-        raise ValueError("Too many edges for this many nodes.")
-
-    # connected case m >n-1
-    ind=n-1
-    sum=n-1
-    while sum<m:
-        cs[ind]='d'
-        ind -= 1
-        sum += ind
-    ind=m-(sum-ind)
-    cs[ind]='d'
-    return cs
-
-def left_d_threshold_sequence(n,m):
-    """
-    Create a skewed threshold graph with a given number
-    of vertices (n) and a given number of edges (m).
-
-    The routine returns an unlabeled creation sequence 
-    for the threshold graph.
-
-    FIXME: describe algorithm
-
-    """
-    cs=['d']+['i']*(n-1) # create sequence with n insolated nodes
-
-    #  m <n : not enough edges, make disconnected 
-    if m < n: 
-        cs[m]='d'
-        return cs
-
-    # too many edges 
-    if m > n*(n-1)/2:
-        raise ValueError("Too many edges for this many nodes.")
-
-    # Connected case when M>N-1
-    cs[n-1]='d'
-    sum=n-1
-    ind=1
-    while sum<m:
-        cs[ind]='d'
-        sum += ind
-        ind += 1
-    if sum>m:    # be sure not to change the first vertex
-        cs[sum-m]='i'
-    return cs
-
-def swap_d(cs,p_split=1.0,p_combine=1.0,seed=None):
-    """
-    Perform a "swap" operation on a threshold sequence.
-
-    The swap preserves the number of nodes and edges
-    in the graph for the given sequence.
-    The resulting sequence is still a threshold sequence.
-
-    Perform one split and one combine operation on the
-    'd's of a creation sequence for a threshold graph.
-    This operation maintains the number of nodes and edges
-    in the graph, but shifts the edges from node to node
-    maintaining the threshold quality of the graph.
-    """
-    if not seed is None:
-        random.seed(seed)
-
-    # preprocess the creation sequence
-    dlist= [ i for (i,node_type) in enumerate(cs[1:-1]) if node_type=='d' ]
-    # split
-    if random.random()<p_split:
-        choice=random.choice(dlist)
-        split_to=random.choice(range(choice))
-        flip_side=choice-split_to
-        if split_to!=flip_side and cs[split_to]=='i' and cs[flip_side]=='i':
-            cs[choice]='i'
-            cs[split_to]='d'
-            cs[flip_side]='d'
-            dlist.remove(choice)
-            # don't add or combine may reverse this action            
-            # dlist.extend([split_to,flip_side])
-#            print >>sys.stderr,"split at %s to %s and %s"%(choice,split_to,flip_side)
-    # combine
-    if random.random()<p_combine and dlist:
-        first_choice= random.choice(dlist)
-        second_choice=random.choice(dlist)
-        target=first_choice+second_choice
-        if target >= len(cs) or cs[target]=='d' or first_choice==second_choice:
-            return cs
-        # OK to combine
-        cs[first_choice]='i'
-        cs[second_choice]='i'
-        cs[target]='d'
-#        print >>sys.stderr,"combine %s and %s to make %s."%(first_choice,second_choice,target)
-
-    return cs
-        
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/linalg/__init__.py b/lib/python2.7/site-packages/setoolsgui/networkx/linalg/__init__.py
deleted file mode 100644
index 9f63c89..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/linalg/__init__.py
+++ /dev/null
@@ -1,9 +0,0 @@
-from networkx.linalg.attrmatrix import *
-import networkx.linalg.attrmatrix
-from networkx.linalg.spectrum import *
-import networkx.linalg.spectrum
-from networkx.linalg.graphmatrix import *
-import networkx.linalg.graphmatrix
-from networkx.linalg.laplacianmatrix import *
-import networkx.linalg.laplacianmatrix
-
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/linalg/attrmatrix.py b/lib/python2.7/site-packages/setoolsgui/networkx/linalg/attrmatrix.py
deleted file mode 100644
index df193bb..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/linalg/attrmatrix.py
+++ /dev/null
@@ -1,458 +0,0 @@
-"""
-    Functions for constructing matrix-like objects from graph attributes.
-"""
-
-__all__ = ['attr_matrix', 'attr_sparse_matrix']
-
-import networkx as nx
-
-def _node_value(G, node_attr):
-    """Returns a function that returns a value from G.node[u].
-    
-    We return a function expecting a node as its sole argument. Then, in the
-    simplest scenario, the returned function will return G.node[u][node_attr].
-    However, we also handle the case when `node_attr` is None or when it is a 
-    function itself.
-
-    Parameters
-    ----------
-    G : graph
-        A NetworkX graph 
-
-    node_attr : {None, str, callable}
-        Specification of how the value of the node attribute should be obtained 
-        from the node attribute dictionary.
-
-    Returns
-    -------
-    value : function
-        A function expecting a node as its sole argument. The function will
-        returns a value from G.node[u] that depends on `edge_attr`.
-
-    """
-    if node_attr is None:
-        value = lambda u: u
-    elif not hasattr(node_attr, '__call__'):
-        # assume it is a key for the node attribute dictionary
-        value = lambda u: G.node[u][node_attr]
-    else:
-        # Advanced:  Allow users to specify something else.
-        #
-        # For example,
-        #     node_attr = lambda u: G.node[u].get('size', .5) * 3
-        #
-        value = node_attr
-
-    return value
-
-def _edge_value(G, edge_attr):
-    """Returns a function that returns a value from G[u][v].
-
-    Suppose there exists an edge between u and v.  Then we return a function
-    expecting u and v as arguments.  For Graph and DiGraph, G[u][v] is 
-    the edge attribute dictionary, and the function (essentially) returns 
-    G[u][v][edge_attr].  However, we also handle cases when `edge_attr` is None
-    and when it is a function itself. For MultiGraph and MultiDiGraph, G[u][v]
-    is a dictionary of all edges between u and v.  In this case, the returned
-    function sums the value of `edge_attr` for every edge between u and v.
-
-    Parameters
-    ----------
-    G : graph
-       A NetworkX graph 
-
-    edge_attr : {None, str, callable}
-        Specification of how the value of the edge attribute should be obtained 
-        from the edge attribute dictionary, G[u][v].  For multigraphs, G[u][v]
-        is a dictionary of all the edges between u and v.  This allows for 
-        special treatment of multiedges.
-
-    Returns
-    -------
-    value : function
-        A function expecting two nodes as parameters. The nodes should 
-        represent the from- and to- node of an edge. The function will
-        return a value from G[u][v] that depends on `edge_attr`.
-
-    """
-
-    if edge_attr is None:
-        # topological count of edges
-
-        if G.is_multigraph():
-            value = lambda u,v: len(G[u][v])
-        else:
-            value = lambda u,v: 1
-
-    elif not hasattr(edge_attr, '__call__'):
-        # assume it is a key for the edge attribute dictionary
-
-        if edge_attr == 'weight':
-            # provide a default value
-            if G.is_multigraph():
-                value = lambda u,v: sum([d.get(edge_attr, 1) for d in G[u][v].values()])
-            else:
-                value = lambda u,v: G[u][v].get(edge_attr, 1)
-        else:
-            # otherwise, the edge attribute MUST exist for each edge
-            if G.is_multigraph():
-                value = lambda u,v: sum([d[edge_attr] for d in G[u][v].values()])
-            else:
-                value = lambda u,v: G[u][v][edge_attr]
-            
-    else:
-        # Advanced:  Allow users to specify something else.
-        #
-        # Alternative default value:  
-        #     edge_attr = lambda u,v: G[u][v].get('thickness', .5)
-        #
-        # Function on an attribute:
-        #     edge_attr = lambda u,v: abs(G[u][v]['weight'])
-        #
-        # Handle Multi(Di)Graphs differently:
-        #     edge_attr = lambda u,v: numpy.prod([d['size'] for d in G[u][v].values()])
-        #
-        # Ignore multiple edges
-        #     edge_attr = lambda u,v: 1 if len(G[u][v]) else 0
-        #
-        value = edge_attr
-
-    return value
-
-def attr_matrix(G, edge_attr=None, node_attr=None, normalized=False, 
-                rc_order=None, dtype=None, order=None):
-    """Returns a NumPy matrix using attributes from G.
-
-    If only `G` is passed in, then the adjacency matrix is constructed.
-
-    Let A be a discrete set of values for the node attribute `node_attr`. Then
-    the elements of A represent the rows and columns of the constructed matrix.
-    Now, iterate through every edge e=(u,v) in `G` and consider the value
-    of the edge attribute `edge_attr`.  If ua and va are the values of the 
-    node attribute `node_attr` for u and v, respectively, then the value of
-    the edge attribute is added to the matrix element at (ua, va). 
-
-    Parameters
-    ----------
-    G : graph
-        The NetworkX graph used to construct the NumPy matrix.
-
-    edge_attr : str, optional
-        Each element of the matrix represents a running total of the
-        specified edge attribute for edges whose node attributes correspond
-        to the rows/cols of the matirx. The attribute must be present for 
-        all edges in the graph. If no attribute is specified, then we
-        just count the number of edges whose node attributes correspond
-        to the matrix element.        
-
-    node_attr : str, optional
-        Each row and column in the matrix represents a particular value
-        of the node attribute.  The attribute must be present for all nodes
-        in the graph. Note, the values of this attribute should be reliably
-        hashable. So, float values are not recommended. If no attribute is 
-        specified, then the rows and columns will be the nodes of the graph.
-
-    normalized : bool, optional
-        If True, then each row is normalized by the summation of its values.
-
-    rc_order : list, optional
-        A list of the node attribute values. This list specifies the ordering 
-        of rows and columns of the array. If no ordering is provided, then
-        the ordering will be random (and also, a return value).
-    
-    Other Parameters
-    ----------------
-    dtype : NumPy data-type, optional
-        A valid NumPy dtype used to initialize the array. Keep in mind certain
-        dtypes can yield unexpected results if the array is to be normalized.
-        The parameter is passed to numpy.zeros(). If unspecified, the NumPy
-        default is used.
-
-    order : {'C', 'F'}, optional
-        Whether to store multidimensional data in C- or Fortran-contiguous
-        (row- or column-wise) order in memory. This parameter is passed to
-        numpy.zeros(). If unspecified, the NumPy default is used.
-
-    Returns
-    -------
-    M : NumPy matrix
-        The attribute matrix.
-
-    ordering : list
-        If `rc_order` was specified, then only the matrix is returned.
-        However, if `rc_order` was None, then the ordering used to construct 
-        the matrix is returned as well.
-
-    Examples
-    --------
-    Construct an adjacency matrix:
-
-    >>> G = nx.Graph()
-    >>> G.add_edge(0,1,thickness=1,weight=3)
-    >>> G.add_edge(0,2,thickness=2)
-    >>> G.add_edge(1,2,thickness=3)
-    >>> nx.attr_matrix(G, rc_order=[0,1,2])
-    matrix([[ 0.,  1.,  1.],
-            [ 1.,  0.,  1.],
-            [ 1.,  1.,  0.]])
-
-    Alternatively, we can obtain the matrix describing edge thickness.
-
-    >>> nx.attr_matrix(G, edge_attr='thickness', rc_order=[0,1,2])
-    matrix([[ 0.,  1.,  2.],
-            [ 1.,  0.,  3.],
-            [ 2.,  3.,  0.]])
-
-    We can also color the nodes and ask for the probability distribution over
-    all edges (u,v) describing:  
-            
-        Pr(v has color Y | u has color X)
-    
-    >>> G.node[0]['color'] = 'red'
-    >>> G.node[1]['color'] = 'red'
-    >>> G.node[2]['color'] = 'blue'
-    >>> rc = ['red', 'blue']
-    >>> nx.attr_matrix(G, node_attr='color', normalized=True, rc_order=rc)
-    matrix([[ 0.33333333,  0.66666667],
-            [ 1.        ,  0.        ]])
-
-    For example, the above tells us that for all edges (u,v):
-
-        Pr( v is red  | u is red)  = 1/3
-        Pr( v is blue | u is red)  = 2/3
-
-        Pr( v is red  | u is blue) = 1
-        Pr( v is blue | u is blue) = 0
-
-    Finally, we can obtain the total weights listed by the node colors.
-
-    >>> nx.attr_matrix(G, edge_attr='weight', node_attr='color', rc_order=rc)
-    matrix([[ 3.,  2.],
-            [ 2.,  0.]])
-
-    Thus, the total weight over all edges (u,v) with u and v having colors:
-
-        (red, red)   is 3   # the sole contribution is from edge (0,1)
-        (red, blue)  is 2   # contributions from edges (0,2) and (1,2)
-        (blue, red)  is 2   # same as (red, blue) since graph is undirected
-        (blue, blue) is 0   # there are no edges with blue endpoints
-
-    """
-    try:
-        import numpy as np
-    except ImportError:
-        raise ImportError(
-          "attr_matrix() requires numpy: http://scipy.org/ ")
-
-    edge_value = _edge_value(G, edge_attr)
-    node_value = _node_value(G, node_attr)
-
-    if rc_order is None:
-        ordering = list(set([node_value(n) for n in G]))
-    else:
-        ordering = rc_order
-
-    N = len(ordering)
-    undirected = not G.is_directed()   
-    index = dict(zip(ordering, range(N)))
-    M = np.zeros((N,N), dtype=dtype, order=order)
-
-    seen = set([])
-    for u,nbrdict in G.adjacency_iter():
-        for v in nbrdict:
-            # Obtain the node attribute values.
-            i, j = index[node_value(u)], index[node_value(v)]
-            if v not in seen:
-                M[i,j] += edge_value(u,v)
-                if undirected:
-                    M[j,i] = M[i,j]
-
-        if undirected:
-            seen.add(u)    
-
-    if normalized:
-        M /= M.sum(axis=1).reshape((N,1))
-
-    M = np.asmatrix(M)
-
-    if rc_order is None:
-        return M, ordering
-    else:
-        return M
-
-def attr_sparse_matrix(G, edge_attr=None, node_attr=None, 
-                       normalized=False, rc_order=None, dtype=None):
-    """Returns a SciPy sparse matrix using attributes from G.
-
-    If only `G` is passed in, then the adjacency matrix is constructed.
-
-    Let A be a discrete set of values for the node attribute `node_attr`. Then
-    the elements of A represent the rows and columns of the constructed matrix.
-    Now, iterate through every edge e=(u,v) in `G` and consider the value
-    of the edge attribute `edge_attr`.  If ua and va are the values of the 
-    node attribute `node_attr` for u and v, respectively, then the value of
-    the edge attribute is added to the matrix element at (ua, va). 
-
-    Parameters
-    ----------
-    G : graph
-        The NetworkX graph used to construct the NumPy matrix.
-
-    edge_attr : str, optional
-        Each element of the matrix represents a running total of the
-        specified edge attribute for edges whose node attributes correspond
-        to the rows/cols of the matirx. The attribute must be present for 
-        all edges in the graph. If no attribute is specified, then we
-        just count the number of edges whose node attributes correspond
-        to the matrix element.        
-
-    node_attr : str, optional
-        Each row and column in the matrix represents a particular value
-        of the node attribute.  The attribute must be present for all nodes
-        in the graph. Note, the values of this attribute should be reliably
-        hashable. So, float values are not recommended. If no attribute is 
-        specified, then the rows and columns will be the nodes of the graph.
-
-    normalized : bool, optional
-        If True, then each row is normalized by the summation of its values.
-
-    rc_order : list, optional
-        A list of the node attribute values. This list specifies the ordering 
-        of rows and columns of the array. If no ordering is provided, then
-        the ordering will be random (and also, a return value).
-    
-    Other Parameters
-    ----------------
-    dtype : NumPy data-type, optional
-        A valid NumPy dtype used to initialize the array. Keep in mind certain
-        dtypes can yield unexpected results if the array is to be normalized.
-        The parameter is passed to numpy.zeros(). If unspecified, the NumPy
-        default is used.
-
-    Returns
-    -------
-    M : SciPy sparse matrix
-        The attribute matrix.
-
-    ordering : list
-        If `rc_order` was specified, then only the matrix is returned.
-        However, if `rc_order` was None, then the ordering used to construct 
-        the matrix is returned as well.
-
-    Examples
-    --------
-    Construct an adjacency matrix:
-
-    >>> G = nx.Graph()
-    >>> G.add_edge(0,1,thickness=1,weight=3)
-    >>> G.add_edge(0,2,thickness=2)
-    >>> G.add_edge(1,2,thickness=3)
-    >>> M = nx.attr_sparse_matrix(G, rc_order=[0,1,2])
-    >>> M.todense()
-    matrix([[ 0.,  1.,  1.],
-            [ 1.,  0.,  1.],
-            [ 1.,  1.,  0.]])
-
-    Alternatively, we can obtain the matrix describing edge thickness.
-
-    >>> M = nx.attr_sparse_matrix(G, edge_attr='thickness', rc_order=[0,1,2])
-    >>> M.todense()
-    matrix([[ 0.,  1.,  2.],
-            [ 1.,  0.,  3.],
-            [ 2.,  3.,  0.]])
-
-    We can also color the nodes and ask for the probability distribution over
-    all edges (u,v) describing:  
-            
-        Pr(v has color Y | u has color X)
-    
-    >>> G.node[0]['color'] = 'red'
-    >>> G.node[1]['color'] = 'red'
-    >>> G.node[2]['color'] = 'blue'
-    >>> rc = ['red', 'blue']
-    >>> M = nx.attr_sparse_matrix(G, node_attr='color', \
-                                  normalized=True, rc_order=rc)
-    >>> M.todense()
-    matrix([[ 0.33333333,  0.66666667],
-            [ 1.        ,  0.        ]])
-
-    For example, the above tells us that for all edges (u,v):
-
-        Pr( v is red  | u is red)  = 1/3
-        Pr( v is blue | u is red)  = 2/3
-
-        Pr( v is red  | u is blue) = 1
-        Pr( v is blue | u is blue) = 0
-
-    Finally, we can obtain the total weights listed by the node colors.
-
-    >>> M = nx.attr_sparse_matrix(G, edge_attr='weight',\
-                                  node_attr='color', rc_order=rc)
-    >>> M.todense()
-    matrix([[ 3.,  2.],
-            [ 2.,  0.]])
-
-    Thus, the total weight over all edges (u,v) with u and v having colors:
-
-        (red, red)   is 3   # the sole contribution is from edge (0,1)
-        (red, blue)  is 2   # contributions from edges (0,2) and (1,2)
-        (blue, red)  is 2   # same as (red, blue) since graph is undirected
-        (blue, blue) is 0   # there are no edges with blue endpoints
-
-    """
-    try:
-        import numpy as np
-        from scipy import sparse
-    except ImportError:
-        raise ImportError(
-          "attr_sparse_matrix() requires scipy: http://scipy.org/ ")
-
-    edge_value = _edge_value(G, edge_attr)
-    node_value = _node_value(G, node_attr)
-
-    if rc_order is None:
-        ordering = list(set([node_value(n) for n in G]))
-    else:
-        ordering = rc_order
-
-    N = len(ordering)
-    undirected = not G.is_directed()   
-    index = dict(zip(ordering, range(N)))
-    M = sparse.lil_matrix((N,N), dtype=dtype)
-
-    seen = set([])
-    for u,nbrdict in G.adjacency_iter():
-        for v in nbrdict:
-            # Obtain the node attribute values.
-            i, j = index[node_value(u)], index[node_value(v)]
-            if v not in seen:
-                M[i,j] += edge_value(u,v)
-                if undirected:
-                    M[j,i] = M[i,j]
-
-        if undirected:
-            seen.add(u)    
-
-    if normalized:
-        norms = np.asarray(M.sum(axis=1)).ravel()
-        for i,norm in enumerate(norms):
-            M[i,:] /= norm 
-
-    if rc_order is None:
-        return M, ordering
-    else:
-        return M
-
-
-# fixture for nose tests
-def setup_module(module):
-    from nose import SkipTest
-    try:
-        import numpy
-    except:
-        raise SkipTest("NumPy not available")
-    try:
-        import scipy
-    except:
-        raise SkipTest("SciPy not available")
-
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/linalg/graphmatrix.py b/lib/python2.7/site-packages/setoolsgui/networkx/linalg/graphmatrix.py
deleted file mode 100644
index c677619..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/linalg/graphmatrix.py
+++ /dev/null
@@ -1,156 +0,0 @@
-"""
-Adjacency matrix and incidence matrix of graphs.
-"""
-#    Copyright (C) 2004-2011 by 
-#    Aric Hagberg <hagberg@lanl.gov>
-#    Dan Schult <dschult@colgate.edu>
-#    Pieter Swart <swart@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-import networkx as nx
-__author__ = "\n".join(['Aric Hagberg (hagberg@lanl.gov)',
-                        'Pieter Swart (swart@lanl.gov)',
-                        'Dan Schult(dschult@colgate.edu)'])
-
-__all__ = ['incidence_matrix',
-           'adj_matrix', 'adjacency_matrix',
-           ]
-
-
-def incidence_matrix(G, nodelist=None, edgelist=None, 
-                     oriented=False, weight=None):
-    """Return incidence matrix of G.
-
-    The incidence matrix assigns each row to a node and each column to an edge.
-    For a standard incidence matrix a 1 appears wherever a row's node is 
-    incident on the column's edge.  For an oriented incidence matrix each
-    edge is assigned an orientation (arbitrarily for undirected and aligning to
-    direction for directed).  A -1 appears for the tail of an edge and 1 
-    for the head of the edge.  The elements are zero otherwise.
-    
-    Parameters
-    ----------
-    G : graph
-       A NetworkX graph 
-
-    nodelist : list, optional   (default= all nodes in G)
-       The rows are ordered according to the nodes in nodelist.
-       If nodelist is None, then the ordering is produced by G.nodes().
-
-    edgelist : list, optional (default= all edges in G) 
-       The columns are ordered according to the edges in edgelist.
-       If edgelist is None, then the ordering is produced by G.edges().
-
-    oriented: bool, optional (default=False)
-       If True, matrix elements are +1 or -1 for the head or tail node 
-       respectively of each edge.  If False, +1 occurs at both nodes.
-
-    weight : string or None, optional (default=None)
-       The edge data key used to provide each value in the matrix.
-       If None, then each edge has weight 1.  Edge weights, if used,
-       should be positive so that the orientation can provide the sign.
-
-    Returns
-    -------
-    A : NumPy matrix
-      The incidence matrix of G.
-
-    Notes
-    -----
-    For MultiGraph/MultiDiGraph, the edges in edgelist should be 
-    (u,v,key) 3-tuples.
-
-    "Networks are the best discrete model for so many problems in 
-    applied mathematics" [1]_.
-
-    References
-    ----------
-    .. [1] Gil Strang, Network applications: A = incidence matrix,
-       http://academicearth.org/lectures/network-applications-incidence-matrix
-    """
-    try:
-        import numpy as np
-    except ImportError:
-        raise ImportError(
-          "incidence_matrix() requires numpy: http://scipy.org/ ")
-    if nodelist is None:
-        nodelist = G.nodes()
-    if edgelist is None:
-        if G.is_multigraph():
-            edgelist = G.edges(keys=True)
-        else:
-            edgelist = G.edges()
-    A = np.zeros((len(nodelist),len(edgelist)))
-    node_index = dict( (node,i) for i,node in enumerate(nodelist) )
-    for ei,e in enumerate(edgelist):
-        (u,v) = e[:2]
-        if u == v: continue  # self loops give zero column
-        try:
-            ui = node_index[u]
-            vi = node_index[v]
-        except KeyError:
-            raise NetworkXError('node %s or %s in edgelist '
-                                'but not in nodelist"%(u,v)')
-        if weight is None:
-            wt = 1
-        else:
-            if G.is_multigraph():
-                ekey = e[2]
-                wt = G[u][v][ekey].get(weight,1)
-            else:
-                wt = G[u][v].get(weight,1)
-        if oriented:
-            A[ui,ei] = -wt
-            A[vi,ei] = wt
-        else:
-            A[ui,ei] = wt
-            A[vi,ei] = wt
-    return np.asmatrix(A)
-
-def adjacency_matrix(G, nodelist=None, weight='weight'):
-    """Return adjacency matrix of G.
-
-    Parameters
-    ----------
-    G : graph
-       A NetworkX graph 
-
-    nodelist : list, optional       
-       The rows and columns are ordered according to the nodes in nodelist.
-       If nodelist is None, then the ordering is produced by G.nodes().
-
-    weight : string or None, optional (default='weight')
-       The edge data key used to provide each value in the matrix.
-       If None, then each edge has weight 1.
-
-    Returns
-    -------
-    A : numpy matrix
-      Adjacency matrix representation of G.
-
-    Notes
-    -----
-    If you want a pure Python adjacency matrix representation try
-    networkx.convert.to_dict_of_dicts which will return a
-    dictionary-of-dictionaries format that can be addressed as a
-    sparse matrix.
-
-    For MultiGraph/MultiDiGraph, the edges weights are summed.
-    See to_numpy_matrix for other options.
-
-    See Also
-    --------
-    to_numpy_matrix
-    to_dict_of_dicts
-    """
-    return nx.to_numpy_matrix(G,nodelist=nodelist,weight=weight)
-
-adj_matrix=adjacency_matrix
-
-# fixture for nose tests
-def setup_module(module):
-    from nose import SkipTest
-    try:
-        import numpy
-    except:
-        raise SkipTest("NumPy not available")
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/linalg/laplacianmatrix.py b/lib/python2.7/site-packages/setoolsgui/networkx/linalg/laplacianmatrix.py
deleted file mode 100644
index ffb256c..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/linalg/laplacianmatrix.py
+++ /dev/null
@@ -1,277 +0,0 @@
-"""
-Laplacian matrix of graphs.
-"""
-#    Copyright (C) 2004-2013 by
-#    Aric Hagberg <hagberg@lanl.gov>
-#    Dan Schult <dschult@colgate.edu>
-#    Pieter Swart <swart@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-import networkx as nx
-from networkx.utils import require, not_implemented_for
-
-__author__ = "\n".join(['Aric Hagberg <aric.hagberg@gmail.com>',
-                        'Pieter Swart (swart@lanl.gov)',
-                        'Dan Schult (dschult@colgate.edu)',
-                        'Alejandro Weinstein <alejandro.weinstein@gmail.com>'])
-
-__all__ = ['laplacian_matrix',
-           'normalized_laplacian_matrix',
-           'directed_laplacian_matrix']
-
-@require('numpy')
-@not_implemented_for('directed')
-def laplacian_matrix(G, nodelist=None, weight='weight'):
-    """Return the Laplacian matrix of G.
-
-    The graph Laplacian is the matrix L = D - A, where
-    A is the adjacency matrix and D is the diagonal matrix of node degrees.
-
-    Parameters
-    ----------
-    G : graph
-       A NetworkX graph
-
-    nodelist : list, optional
-       The rows and columns are ordered according to the nodes in nodelist.
-       If nodelist is None, then the ordering is produced by G.nodes().
-
-    weight : string or None, optional (default='weight')
-       The edge data key used to compute each value in the matrix.
-       If None, then each edge has weight 1.
-
-    Returns
-    -------
-    L : NumPy matrix
-      The Laplacian matrix of G.
-
-    Notes
-    -----
-    For MultiGraph/MultiDiGraph, the edges weights are summed.
-    See to_numpy_matrix for other options.
-
-    See Also
-    --------
-    to_numpy_matrix
-    normalized_laplacian_matrix
-    """
-    import numpy as np
-    if nodelist is None:
-        nodelist = G.nodes()
-    if G.is_multigraph():
-        # this isn't the fastest way to do this...
-        A = np.asarray(nx.to_numpy_matrix(G,nodelist=nodelist,weight=weight))
-        I = np.identity(A.shape[0])
-        D = I*np.sum(A,axis=1)
-        L = D - A
-    else:
-        # Graph or DiGraph, this is faster than above
-        n = len(nodelist)
-        index = dict( (n,i) for i,n in enumerate(nodelist) )
-        L = np.zeros((n,n))
-        for ui,u in enumerate(nodelist):
-            totalwt = 0.0
-            for v,d in G[u].items():
-                try:
-                    vi = index[v]
-                except KeyError:
-                    continue
-                wt = d.get(weight,1)
-                L[ui,vi] = -wt
-                totalwt += wt
-            L[ui,ui] = totalwt
-    return np.asmatrix(L)
-
-@require('numpy')
-@not_implemented_for('directed')
-def normalized_laplacian_matrix(G, nodelist=None, weight='weight'):
-    r"""Return the normalized Laplacian matrix of G.
-
-    The normalized graph Laplacian is the matrix
-
-    .. math::
-
-        NL = D^{-1/2} L D^{-1/2}
-
-    where `L` is the graph Laplacian and `D` is the diagonal matrix of
-    node degrees.
-
-    Parameters
-    ----------
-    G : graph
-       A NetworkX graph
-
-    nodelist : list, optional
-       The rows and columns are ordered according to the nodes in nodelist.
-       If nodelist is None, then the ordering is produced by G.nodes().
-
-    weight : string or None, optional (default='weight')
-       The edge data key used to compute each value in the matrix.
-       If None, then each edge has weight 1.
-
-    Returns
-    -------
-    L : NumPy matrix
-      The normalized Laplacian matrix of G.
-
-    Notes
-    -----
-    For MultiGraph/MultiDiGraph, the edges weights are summed.
-    See to_numpy_matrix for other options.
-
-    If the Graph contains selfloops, D is defined as diag(sum(A,1)), where A is
-    the adjencency matrix [2]_.
-
-    See Also
-    --------
-    laplacian_matrix
-
-    References
-    ----------
-    .. [1] Fan Chung-Graham, Spectral Graph Theory,
-       CBMS Regional Conference Series in Mathematics, Number 92, 1997.
-    .. [2] Steve Butler, Interlacing For Weighted Graphs Using The Normalized
-       Laplacian, Electronic Journal of Linear Algebra, Volume 16, pp. 90-98,
-       March 2007.
-    """
-    import numpy as np
-    if G.is_multigraph():
-        L = laplacian_matrix(G, nodelist=nodelist, weight=weight)
-        D = np.diag(L)
-    elif G.number_of_selfloops() == 0:
-        L = laplacian_matrix(G, nodelist=nodelist, weight=weight)
-        D = np.diag(L)
-    else:
-        A = np.array(nx.adj_matrix(G))
-        D = np.sum(A, 1)
-        L = np.diag(D) - A
-
-    # Handle div by 0. It happens if there are unconnected nodes
-    with np.errstate(divide='ignore'):
-        Disqrt = np.diag(1 / np.sqrt(D))
-    Disqrt[np.isinf(Disqrt)] = 0
-    Ln = np.dot(Disqrt, np.dot(L,Disqrt))
-    return Ln
-
-###############################################################################
-# Code based on
-# https://bitbucket.org/bedwards/networkx-community/src/370bd69fc02f/networkx/algorithms/community/
-
-@require('numpy')
-@not_implemented_for('undirected')
-@not_implemented_for('multigraph')
-def directed_laplacian_matrix(G, nodelist=None, weight='weight',
-                              walk_type=None, alpha=0.95):
-    r"""Return the directed Laplacian matrix of G.
-
-    The graph directed Laplacian is the matrix
-
-    .. math::
-
-        L = I - (\Phi^{1/2} P \Phi^{-1/2} + \Phi^{-1/2} P^T \Phi^{1/2} ) / 2
-
-    where `I` is the identity matrix, `P` is the transition matrix of the
-    graph, and `\Phi` a matrix with the Perron vector of `P` in the diagonal and
-    zeros elsewhere.
-
-    Depending on the value of walk_type, `P` can be the transition matrix
-    induced by a random walk, a lazy random walk, or a random walk with
-    teleportation (PageRank).
-
-    Parameters
-    ----------
-    G : DiGraph
-       A NetworkX graph
-
-    nodelist : list, optional
-       The rows and columns are ordered according to the nodes in nodelist.
-       If nodelist is None, then the ordering is produced by G.nodes().
-
-    weight : string or None, optional (default='weight')
-       The edge data key used to compute each value in the matrix.
-       If None, then each edge has weight 1.
-
-    walk_type : string or None, optional (default=None)
-       If None, `P` is selected depending on the properties of the
-       graph. Otherwise is one of 'random', 'lazy', or 'pagerank'
-
-    alpha : real
-       (1 - alpha) is the teleportation probability used with pagerank
-
-    Returns
-    -------
-    L : NumPy array
-      Normalized Laplacian of G.
-
-    Raises
-    ------
-    NetworkXError
-        If NumPy cannot be imported
-
-    NetworkXNotImplemnted
-        If G is not a DiGraph
-
-    Notes
-    -----
-    Only implemented for DiGraphs
-
-    See Also
-    --------
-    laplacian_matrix
-
-    References
-    ----------
-    .. [1] Fan Chung (2005).
-       Laplacians and the Cheeger inequality for directed graphs.
-       Annals of Combinatorics, 9(1), 2005
-    """
-    import numpy as np
-    if walk_type is None:
-        if nx.is_strongly_connected(G):
-            if nx.is_aperiodic(G):
-                walk_type = "random"
-            else:
-                walk_type = "lazy"
-        else:
-            walk_type = "pagerank"
-
-    M = nx.to_numpy_matrix(G, nodelist=nodelist, weight=weight)
-    n, m = M.shape
-    if walk_type in ["random", "lazy"]:
-        DI = np.diagflat(1.0 / np.sum(M, axis=1))
-        if walk_type == "random":
-            P =  DI * M
-        else:
-            I = np.identity(n)
-            P = (I + DI * M) / 2.0
-    elif walk_type == "pagerank":
-        if not (0 < alpha < 1):
-            raise nx.NetworkXError('alpha must be between 0 and 1')
-        # add constant to dangling nodes' row
-        dangling = np.where(M.sum(axis=1) == 0)
-        for d in dangling[0]:
-            M[d] = 1.0 / n
-        # normalize
-        M = M / M.sum(axis=1)
-        P = alpha * M + (1 - alpha) / n
-    else:
-        raise nx.NetworkXError("walk_type must be random, lazy, or pagerank")
-
-    evals, evecs = np.linalg.eig(P.T)
-    index = evals.argsort()[-1] # index of largest eval,evec
-    # eigenvector of largest eigenvalue at ind[-1]
-    v = np.array(evecs[:,index]).flatten().real
-    p =  v / v.sum()
-    sp = np.sqrt(p)
-    Q = np.diag(sp) * P * np.diag(1.0/sp)
-    I = np.identity(len(G))
-
-    return I  - (Q + Q.T) /2.0
-
-# fixture for nose tests
-def setup_module(module):
-    from nose import SkipTest
-    try:
-        import numpy
-    except:
-        raise SkipTest("NumPy not available")
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/linalg/spectrum.py b/lib/python2.7/site-packages/setoolsgui/networkx/linalg/spectrum.py
deleted file mode 100644
index bca7288..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/linalg/spectrum.py
+++ /dev/null
@@ -1,90 +0,0 @@
-"""
-Eigenvalue spectrum of graphs.
-"""
-#    Copyright (C) 2004-2011 by 
-#    Aric Hagberg <hagberg@lanl.gov>
-#    Dan Schult <dschult@colgate.edu>
-#    Pieter Swart <swart@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-import networkx as nx
-__author__ = "\n".join(['Aric Hagberg (hagberg@lanl.gov)',
-                        'Pieter Swart (swart@lanl.gov)',
-                        'Dan Schult(dschult@colgate.edu)'])
-
-__all__ = ['laplacian_spectrum', 'adjacency_spectrum']
-
-
-def laplacian_spectrum(G, weight='weight'):
-    """Return eigenvalues of the Laplacian of G
-
-    Parameters
-    ----------
-    G : graph
-       A NetworkX graph 
-
-    weight : string or None, optional (default='weight')
-       The edge data key used to compute each value in the matrix.
-       If None, then each edge has weight 1.
-
-    Returns
-    -------
-    evals : NumPy array
-      Eigenvalues
-
-    Notes
-    -----
-    For MultiGraph/MultiDiGraph, the edges weights are summed.
-    See to_numpy_matrix for other options.
-
-    See Also
-    --------
-    laplacian_matrix
-    """
-    try:
-        import numpy as np
-    except ImportError:
-        raise ImportError(
-          "laplacian_spectrum() requires NumPy: http://scipy.org/ ")
-    return np.linalg.eigvals(nx.laplacian_matrix(G,weight=weight))
-
-def adjacency_spectrum(G, weight='weight'):
-    """Return eigenvalues of the adjacency matrix of G.
-
-    Parameters
-    ----------
-    G : graph
-       A NetworkX graph 
-
-    weight : string or None, optional (default='weight')
-       The edge data key used to compute each value in the matrix.
-       If None, then each edge has weight 1.
-
-    Returns
-    -------
-    evals : NumPy array
-      Eigenvalues
-
-    Notes
-    -----
-    For MultiGraph/MultiDiGraph, the edges weights are summed.
-    See to_numpy_matrix for other options.
-
-    See Also
-    --------
-    adjacency_matrix
-    """
-    try:
-        import numpy as np
-    except ImportError:
-        raise ImportError(
-          "adjacency_spectrum() requires NumPy: http://scipy.org/ ")
-    return np.linalg.eigvals(nx.adjacency_matrix(G,weight=weight))
-
-# fixture for nose tests
-def setup_module(module):
-    from nose import SkipTest
-    try:
-        import numpy
-    except:
-        raise SkipTest("NumPy not available")
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/linalg/tests/test_graphmatrix.py b/lib/python2.7/site-packages/setoolsgui/networkx/linalg/tests/test_graphmatrix.py
deleted file mode 100644
index bba234e..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/linalg/tests/test_graphmatrix.py
+++ /dev/null
@@ -1,89 +0,0 @@
-from nose import SkipTest
-
-import networkx as nx
-from networkx.generators.degree_seq import havel_hakimi_graph
-
-class TestGraphMatrix(object):
-    numpy=1 # nosetests attribute, use nosetests -a 'not numpy' to skip test
-    @classmethod
-    def setupClass(cls):
-        global numpy
-        global assert_equal
-        global assert_almost_equal
-        try:
-            import numpy
-            from numpy.testing import assert_equal,assert_almost_equal
-        except ImportError:
-             raise SkipTest('NumPy not available.')
-
-    def setUp(self):
-        deg=[3,2,2,1,0]
-        self.G=havel_hakimi_graph(deg)
-        self.OI=numpy.array([[-1, -1, -1, 0],
-                            [1, 0, 0, -1],
-                            [0, 1, 0, 1],
-                            [0, 0, 1, 0],
-                            [0, 0, 0, 0]])
-        self.A=numpy.array([[0, 1, 1, 1, 0],
-                            [1, 0, 1, 0, 0],
-                            [1, 1, 0, 0, 0],
-                            [1, 0, 0, 0, 0],
-                            [0, 0, 0, 0, 0]])
-        self.WG=nx.Graph( (u,v,{'weight':0.5,'other':0.3})
-                for (u,v) in self.G.edges_iter() )
-        self.WG.add_node(4)
-        self.WA=numpy.array([[0 , 0.5, 0.5, 0.5, 0],
-                            [0.5, 0  , 0.5, 0  , 0],
-                            [0.5, 0.5, 0  , 0  , 0],
-                            [0.5, 0  , 0  , 0  , 0],
-                            [0  , 0  , 0  , 0  , 0]])
-        self.MG=nx.MultiGraph(self.G)
-        self.MG2=self.MG.copy()
-        self.MG2.add_edge(0,1)
-        self.MG2A=numpy.array([[0, 2, 1, 1, 0],
-                            [2, 0, 1, 0, 0],
-                            [1, 1, 0, 0, 0],
-                            [1, 0, 0, 0, 0],
-                            [0, 0, 0, 0, 0]])
-        self.MGOI=numpy.array([[-1, -1, -1, -1, 0],
-                            [1, 1, 0, 0, -1],
-                            [0, 0, 1, 0, 1],
-                            [0, 0, 0, 1, 0],
-                            [0, 0, 0, 0, 0]])
-
-    def test_incidence_matrix(self):
-        "Conversion to incidence matrix"
-        assert_equal(nx.incidence_matrix(self.G,oriented=True),self.OI)
-        assert_equal(nx.incidence_matrix(self.G),numpy.abs(self.OI))
-        assert_equal(nx.incidence_matrix(self.MG,oriented=True),self.OI)
-        assert_equal(nx.incidence_matrix(self.MG),numpy.abs(self.OI))
-        assert_equal(nx.incidence_matrix(self.MG2,oriented=True),self.MGOI)
-        assert_equal(nx.incidence_matrix(self.MG2),numpy.abs(self.MGOI))
-        assert_equal(nx.incidence_matrix(self.WG,oriented=True),self.OI)
-        assert_equal(nx.incidence_matrix(self.WG),numpy.abs(self.OI))
-        assert_equal(nx.incidence_matrix(self.WG,oriented=True,
-                                         weight='weight'),0.5*self.OI)
-        assert_equal(nx.incidence_matrix(self.WG,weight='weight'),
-                     numpy.abs(0.5*self.OI))
-        assert_equal(nx.incidence_matrix(self.WG,oriented=True,weight='other'),
-                     0.3*self.OI)
-        WMG=nx.MultiGraph(self.WG)
-        WMG.add_edge(0,1,attr_dict={'weight':0.5,'other':0.3})
-        assert_equal(nx.incidence_matrix(WMG,weight='weight'),
-                     numpy.abs(0.5*self.MGOI))
-        assert_equal(nx.incidence_matrix(WMG,weight='weight',oriented=True),
-                     0.5*self.MGOI)
-        assert_equal(nx.incidence_matrix(WMG,weight='other',oriented=True),
-                     0.3*self.MGOI)
-
-    def test_adjacency_matrix(self):
-        "Conversion to adjacency matrix"
-        assert_equal(nx.adj_matrix(self.G),self.A)
-        assert_equal(nx.adj_matrix(self.MG),self.A)
-        assert_equal(nx.adj_matrix(self.MG2),self.MG2A)
-        assert_equal(nx.adj_matrix(self.G,nodelist=[0,1]),self.A[:2,:2])
-        assert_equal(nx.adj_matrix(self.WG),self.WA)
-        assert_equal(nx.adj_matrix(self.WG,weight=None),self.A)
-        assert_equal(nx.adj_matrix(self.MG2,weight=None),self.MG2A)
-        assert_equal(nx.adj_matrix(self.WG,weight='other'),0.6*self.WA)
-
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/linalg/tests/test_laplacian.py b/lib/python2.7/site-packages/setoolsgui/networkx/linalg/tests/test_laplacian.py
deleted file mode 100644
index 87725fe..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/linalg/tests/test_laplacian.py
+++ /dev/null
@@ -1,101 +0,0 @@
-from nose import SkipTest
-
-import networkx as nx
-from networkx.generators.degree_seq import havel_hakimi_graph
-
-class TestLaplacian(object):
-    numpy=1 # nosetests attribute, use nosetests -a 'not numpy' to skip test
-    @classmethod
-    def setupClass(cls):
-        global numpy
-        global assert_equal
-        global assert_almost_equal
-        try:
-            import numpy
-            from numpy.testing import assert_equal,assert_almost_equal
-        except ImportError:
-             raise SkipTest('NumPy not available.')
-
-    def setUp(self):
-        deg=[3,2,2,1,0]
-        self.G=havel_hakimi_graph(deg)
-        self.WG=nx.Graph( (u,v,{'weight':0.5,'other':0.3})
-                for (u,v) in self.G.edges_iter() )
-        self.WG.add_node(4)
-        self.MG=nx.MultiGraph(self.G)
-
-        # Graph with selfloops
-        self.Gsl = self.G.copy()
-        for node in self.Gsl.nodes():
-            self.Gsl.add_edge(node, node)
-
-
-    def test_laplacian(self):
-        "Graph Laplacian"
-        NL=numpy.array([[ 3, -1, -1, -1, 0],
-                        [-1,  2, -1,  0, 0],
-                        [-1, -1,  2,  0, 0],
-                        [-1,  0,  0,  1, 0],
-                        [ 0,  0,  0,  0, 0]])
-        WL=0.5*NL
-        OL=0.3*NL
-        assert_equal(nx.laplacian_matrix(self.G),NL)
-        assert_equal(nx.laplacian_matrix(self.MG),NL)
-        assert_equal(nx.laplacian_matrix(self.G,nodelist=[0,1]),
-                numpy.array([[ 1, -1],[-1, 1]]))
-        assert_equal(nx.laplacian_matrix(self.WG),WL)
-        assert_equal(nx.laplacian_matrix(self.WG,weight=None),NL)
-        assert_equal(nx.laplacian_matrix(self.WG,weight='other'),OL)
-
-    def test_normalized_laplacian(self):
-        "Generalized Graph Laplacian"
-        GL=numpy.array([[ 1.00, -0.408, -0.408, -0.577,  0.00],
-                        [-0.408,  1.00, -0.50,  0.00 , 0.00],
-                        [-0.408, -0.50,  1.00,  0.00,  0.00],
-                        [-0.577,  0.00,  0.00,  1.00,  0.00],
-                        [ 0.00,  0.00,  0.00,  0.00,  0.00]])
-        Lsl = numpy.array([[ 0.75  , -0.2887, -0.2887, -0.3536,  0.],
-                           [-0.2887,  0.6667, -0.3333,  0.    ,  0.],
-                           [-0.2887, -0.3333,  0.6667,  0.    ,  0.],
-                           [-0.3536,  0.    ,  0.    ,  0.5   ,  0.],
-                           [ 0.    ,  0.    ,  0.    ,  0.    ,  0.]])
-
-        assert_almost_equal(nx.normalized_laplacian_matrix(self.G),GL,decimal=3)
-        assert_almost_equal(nx.normalized_laplacian_matrix(self.MG),GL,decimal=3)
-        assert_almost_equal(nx.normalized_laplacian_matrix(self.WG),GL,decimal=3)
-        assert_almost_equal(nx.normalized_laplacian_matrix(self.WG,weight='other'),GL,decimal=3)
-        assert_almost_equal(nx.normalized_laplacian_matrix(self.Gsl), Lsl, decimal=3)
-
-    def test_directed_laplacian(self):
-        "Directed Laplacian"
-        # Graph used as an example in Sec. 4.1 of Langville and Meyer,
-        # "Google's PageRank and Beyond". The graph contains dangling nodes, so
-        # the pagerank random walk is selected by directed_laplacian
-        G = nx.DiGraph()
-        G.add_edges_from(((1,2), (1,3), (3,1), (3,2), (3,5), (4,5), (4,6),
-                          (5,4), (5,6), (6,4)))
-        GL = numpy.array([[ 0.9833, -0.2941, -0.3882, -0.0291, -0.0231, -0.0261],
-                          [-0.2941,  0.8333, -0.2339, -0.0536, -0.0589, -0.0554],
-                          [-0.3882, -0.2339,  0.9833, -0.0278, -0.0896, -0.0251],
-                          [-0.0291, -0.0536, -0.0278,  0.9833, -0.4878, -0.6675],
-                          [-0.0231, -0.0589, -0.0896, -0.4878,  0.9833, -0.2078],
-                          [-0.0261, -0.0554, -0.0251, -0.6675, -0.2078,  0.9833]])
-        assert_almost_equal(nx.directed_laplacian_matrix(G, alpha=0.9), GL, decimal=3)
-
-        # Make the graph strongly connected, so we can use a random and lazy walk
-        G.add_edges_from((((2,5), (6,1))))
-        GL = numpy.array([[ 1.    , -0.3062, -0.4714,  0.    ,  0.    , -0.3227],
-                          [-0.3062,  1.    , -0.1443,  0.    , -0.3162,  0.    ],
-                          [-0.4714, -0.1443,  1.    ,  0.    , -0.0913,  0.    ],
-                          [ 0.    ,  0.    ,  0.    ,  1.    , -0.5   , -0.5   ],
-                          [ 0.    , -0.3162, -0.0913, -0.5   ,  1.    , -0.25  ],
-                          [-0.3227,  0.    ,  0.    , -0.5   , -0.25  ,  1.    ]])
-        assert_almost_equal(nx.directed_laplacian_matrix(G, walk_type='random'), GL, decimal=3)
-
-        GL = numpy.array([[ 0.5   , -0.1531, -0.2357,  0.    ,  0.    , -0.1614],
-                          [-0.1531,  0.5   , -0.0722,  0.    , -0.1581,  0.    ],
-                          [-0.2357, -0.0722,  0.5   ,  0.    , -0.0456,  0.    ],
-                          [ 0.    ,  0.    ,  0.    ,  0.5   , -0.25  , -0.25  ],
-                          [ 0.    , -0.1581, -0.0456, -0.25  ,  0.5   , -0.125 ],
-                          [-0.1614,  0.    ,  0.    , -0.25  , -0.125 ,  0.5   ]])
-        assert_almost_equal(nx.directed_laplacian_matrix(G, walk_type='lazy'), GL, decimal=3)
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/linalg/tests/test_spectrum.py b/lib/python2.7/site-packages/setoolsgui/networkx/linalg/tests/test_spectrum.py
deleted file mode 100644
index a2961cb..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/linalg/tests/test_spectrum.py
+++ /dev/null
@@ -1,44 +0,0 @@
-from nose import SkipTest
-
-import networkx as nx
-from networkx.generators.degree_seq import havel_hakimi_graph
-
-class TestSpectrum(object):
-    numpy=1 # nosetests attribute, use nosetests -a 'not numpy' to skip test
-    @classmethod
-    def setupClass(cls):
-        global numpy
-        global assert_equal
-        global assert_almost_equal
-        try:
-            import numpy
-            from numpy.testing import assert_equal,assert_almost_equal
-        except ImportError:
-             raise SkipTest('NumPy not available.')
-
-    def setUp(self):
-        deg=[3,2,2,1,0]
-        self.G=havel_hakimi_graph(deg)
-        self.P=nx.path_graph(3)
-        self.WG=nx.Graph( (u,v,{'weight':0.5,'other':0.3})
-                for (u,v) in self.G.edges_iter() )
-        self.WG.add_node(4)
-
-    def test_laplacian_spectrum(self):
-        "Laplacian eigenvalues"
-        evals=numpy.array([0, 0, 1, 3, 4])
-        e=sorted(nx.laplacian_spectrum(self.G))
-        assert_almost_equal(e,evals)
-        e=sorted(nx.laplacian_spectrum(self.WG,weight=None))
-        assert_almost_equal(e,evals)
-        e=sorted(nx.laplacian_spectrum(self.WG))
-        assert_almost_equal(e,0.5*evals)
-        e=sorted(nx.laplacian_spectrum(self.WG,weight='other'))
-        assert_almost_equal(e,0.3*evals)
-
-    def test_adjacency_spectrum(self):
-        "Adjacency eigenvalues"
-        evals=numpy.array([-numpy.sqrt(2), 0, numpy.sqrt(2)])
-        e=sorted(nx.adjacency_spectrum(self.P))
-        assert_almost_equal(e,evals)
-
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/__init__.py b/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/__init__.py
deleted file mode 100644
index c806cd0..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/__init__.py
+++ /dev/null
@@ -1,16 +0,0 @@
-"""
-A package for reading and writing graphs in various formats.
-
-"""
-from networkx.readwrite.adjlist import *
-from networkx.readwrite.multiline_adjlist import *
-from networkx.readwrite.edgelist import *
-from networkx.readwrite.gpickle import *
-from networkx.readwrite.pajek import *
-from networkx.readwrite.leda import *
-from networkx.readwrite.sparsegraph6 import *
-from networkx.readwrite.nx_yaml import *
-from networkx.readwrite.gml import *
-from networkx.readwrite.graphml import *
-from networkx.readwrite.gexf import *
-from networkx.readwrite.nx_shp import *
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/adjlist.py b/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/adjlist.py
deleted file mode 100644
index 57f1e24..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/adjlist.py
+++ /dev/null
@@ -1,314 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-**************
-Adjacency List
-**************
-Read and write NetworkX graphs as adjacency lists.
-
-Adjacency list format is useful for graphs without data associated
-with nodes or edges and for nodes that can be meaningfully represented
-as strings.
-
-Format
-------
-The adjacency list format consists of lines with node labels.  The
-first label in a line is the source node.  Further labels in the line
-are considered target nodes and are added to the graph along with an edge
-between the source node and target node.
-
-The graph with edges a-b, a-c, d-e can be represented as the following
-adjacency list (anything following the # in a line is a comment)::
-
-     a b c # source target target
-     d e
-"""
-__author__ = '\n'.join(['Aric Hagberg <hagberg@lanl.gov>',
-                        'Dan Schult <dschult@colgate.edu>',
-                        'Loïc Séguin-C. <loicseguin@gmail.com>'])
-#    Copyright (C) 2004-2013 by
-#    Aric Hagberg <hagberg@lanl.gov>
-#    Dan Schult <dschult@colgate.edu>
-#    Pieter Swart <swart@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-
-__all__ = ['generate_adjlist',
-           'write_adjlist',
-           'parse_adjlist',
-           'read_adjlist']
-
-from networkx.utils import make_str, open_file
-import networkx as nx
-
-
-def generate_adjlist(G, delimiter = ' '):
-    """Generate a single line of the graph G in adjacency list format.
-
-    Parameters
-    ----------
-    G : NetworkX graph
-
-    delimiter : string, optional
-       Separator for node labels
-
-    Returns
-    -------
-    lines : string
-        Lines of data in adjlist format.
-
-    Examples
-    --------
-    >>> G = nx.lollipop_graph(4, 3)
-    >>> for line in nx.generate_adjlist(G):
-    ...     print(line)
-    0 1 2 3
-    1 2 3
-    2 3
-    3 4
-    4 5
-    5 6
-    6
-
-    See Also
-    --------
-    write_adjlist, read_adjlist
-
-    """
-    directed=G.is_directed()
-    seen=set()
-    for s,nbrs in G.adjacency_iter():
-        line = make_str(s)+delimiter
-        for t,data in nbrs.items():
-            if not directed and t in seen:
-                continue
-            if G.is_multigraph():
-                for d in data.values():
-                    line += make_str(t) + delimiter
-            else:
-                line += make_str(t) + delimiter
-        if not directed:
-            seen.add(s)
-        yield line[:-len(delimiter)]
-
-@open_file(1,mode='wb')
-def write_adjlist(G, path, comments="#", delimiter=' ', encoding = 'utf-8'):
-    """Write graph G in single-line adjacency-list format to path.
-
-
-    Parameters
-    ----------
-    G : NetworkX graph
-
-    path : string or file
-       Filename or file handle for data output.
-       Filenames ending in .gz or .bz2 will be compressed.
-
-    comments : string, optional
-       Marker for comment lines
-
-    delimiter : string, optional
-       Separator for node labels
-
-    encoding : string, optional
-       Text encoding.
-
-    Examples
-    --------
-    >>> G=nx.path_graph(4)
-    >>> nx.write_adjlist(G,"test.adjlist")
-
-    The path can be a filehandle or a string with the name of the file. If a
-    filehandle is provided, it has to be opened in 'wb' mode.
-
-    >>> fh=open("test.adjlist",'wb')
-    >>> nx.write_adjlist(G, fh)
-
-    Notes
-    -----
-    This format does not store graph, node, or edge data.
-
-    See Also
-    --------
-    read_adjlist, generate_adjlist
-    """
-    import sys
-    import time
-    pargs=comments + " ".join(sys.argv) + '\n'
-    header = (pargs
-             + comments + " GMT %s\n" % (time.asctime(time.gmtime()))
-             + comments + " %s\n" % (G.name))
-    path.write(header.encode(encoding))
-
-    for line in generate_adjlist(G, delimiter):
-        line+='\n'
-        path.write(line.encode(encoding))
-
-
-def parse_adjlist(lines, comments = '#', delimiter = None,
-                  create_using = None, nodetype = None):
-    """Parse lines of a graph adjacency list representation.
-
-    Parameters
-    ----------
-    lines : list or iterator of strings
-        Input data in adjlist format
-
-    create_using: NetworkX graph container
-       Use given NetworkX graph for holding nodes or edges.
-
-    nodetype : Python type, optional
-       Convert nodes to this type.
-
-    comments : string, optional
-       Marker for comment lines
-
-    delimiter : string, optional
-       Separator for node labels.  The default is whitespace.
-
-    create_using: NetworkX graph container
-       Use given NetworkX graph for holding nodes or edges.
-
-
-    Returns
-    -------
-    G: NetworkX graph
-        The graph corresponding to the lines in adjacency list format.
-
-    Examples
-    --------
-    >>> lines = ['1 2 5',
-    ...          '2 3 4',
-    ...          '3 5',
-    ...          '4',
-    ...          '5']
-    >>> G = nx.parse_adjlist(lines, nodetype = int)
-    >>> G.nodes()
-    [1, 2, 3, 4, 5]
-    >>> G.edges()
-    [(1, 2), (1, 5), (2, 3), (2, 4), (3, 5)]
-
-    See Also
-    --------
-    read_adjlist
-
-    """
-    if create_using is None:
-        G=nx.Graph()
-    else:
-        try:
-            G=create_using
-            G.clear()
-        except:
-            raise TypeError("Input graph is not a NetworkX graph type")
-
-    for line in lines:
-        p=line.find(comments)
-        if p>=0:
-            line = line[:p]
-        if not len(line):
-            continue
-        vlist=line.strip().split(delimiter)
-        u=vlist.pop(0)
-        # convert types
-        if nodetype is not None:
-            try:
-                u=nodetype(u)
-            except:
-                raise TypeError("Failed to convert node (%s) to type %s"\
-                                %(u,nodetype))
-        G.add_node(u)
-        if nodetype is not None:
-            try:
-                vlist=map(nodetype,vlist)
-            except:
-                raise TypeError("Failed to convert nodes (%s) to type %s"\
-                                    %(','.join(vlist),nodetype))
-        G.add_edges_from([(u, v) for v in vlist])
-    return G
-
-@open_file(0,mode='rb')
-def read_adjlist(path, comments="#", delimiter=None, create_using=None,
-                 nodetype=None, encoding = 'utf-8'):
-    """Read graph in adjacency list format from path.
-
-    Parameters
-    ----------
-    path : string or file
-       Filename or file handle to read.
-       Filenames ending in .gz or .bz2 will be uncompressed.
-
-    create_using: NetworkX graph container
-       Use given NetworkX graph for holding nodes or edges.
-
-    nodetype : Python type, optional
-       Convert nodes to this type.
-
-    comments : string, optional
-       Marker for comment lines
-
-    delimiter : string, optional
-       Separator for node labels.  The default is whitespace.
-
-    create_using: NetworkX graph container
-       Use given NetworkX graph for holding nodes or edges.
-
-
-    Returns
-    -------
-    G: NetworkX graph
-        The graph corresponding to the lines in adjacency list format.
-
-    Examples
-    --------
-    >>> G=nx.path_graph(4)
-    >>> nx.write_adjlist(G, "test.adjlist")
-    >>> G=nx.read_adjlist("test.adjlist")
-
-    The path can be a filehandle or a string with the name of the file. If a
-    filehandle is provided, it has to be opened in 'rb' mode.
-
-    >>> fh=open("test.adjlist", 'rb')
-    >>> G=nx.read_adjlist(fh)
-
-    Filenames ending in .gz or .bz2 will be compressed.
-
-    >>> nx.write_adjlist(G,"test.adjlist.gz")
-    >>> G=nx.read_adjlist("test.adjlist.gz")
-
-    The optional nodetype is a function to convert node strings to nodetype.
-
-    For example
-
-    >>> G=nx.read_adjlist("test.adjlist", nodetype=int)
-
-    will attempt to convert all nodes to integer type.
-
-    Since nodes must be hashable, the function nodetype must return hashable
-    types (e.g. int, float, str, frozenset - or tuples of those, etc.)
-
-    The optional create_using parameter is a NetworkX graph container.
-    The default is Graph(), an undirected graph.  To read the data as
-    a directed graph use
-
-    >>> G=nx.read_adjlist("test.adjlist", create_using=nx.DiGraph())
-
-    Notes
-    -----
-    This format does not store graph or node data.
-
-    See Also
-    --------
-    write_adjlist
-    """
-    lines = (line.decode(encoding) for line in path)
-    return parse_adjlist(lines,
-                         comments = comments,
-                         delimiter = delimiter,
-                         create_using = create_using,
-                         nodetype = nodetype)
-
-# fixture for nose tests
-def teardown_module(module):
-    import os
-    os.unlink('test.adjlist')
-    os.unlink('test.adjlist.gz')
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/edgelist.py b/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/edgelist.py
deleted file mode 100644
index 4a1aea9..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/edgelist.py
+++ /dev/null
@@ -1,464 +0,0 @@
-"""
-**********
-Edge Lists
-**********
-Read and write NetworkX graphs as edge lists.
-
-The multi-line adjacency list format is useful for graphs with nodes
-that can be meaningfully represented as strings.  With the edgelist
-format simple edge data can be stored but node or graph data is not.
-There is no way of representing isolated nodes unless the node has a
-self-loop edge.
-
-Format
-------
-You can read or write three formats of edge lists with these functions.
-
-Node pairs with no data::
-
- 1 2 
-
-Python dictionary as data::
-
- 1 2 {'weight':7, 'color':'green'} 
-
-Arbitrary data::
-
- 1 2 7 green
-"""
-__author__ = """Aric Hagberg (hagberg@lanl.gov)\nDan Schult (dschult@colgate.edu)"""
-#    Copyright (C) 2004-2011 by 
-#    Aric Hagberg <hagberg@lanl.gov>
-#    Dan Schult <dschult@colgate.edu>
-#    Pieter Swart <swart@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-
-__all__ = ['generate_edgelist',
-           'write_edgelist',
-           'parse_edgelist',
-           'read_edgelist',
-           'read_weighted_edgelist',
-           'write_weighted_edgelist']
-
-from networkx.utils import open_file, make_str
-import networkx as nx
-
-def generate_edgelist(G, delimiter=' ', data=True):
-    """Generate a single line of the graph G in edge list format.
-
-    Parameters
-    ----------
-    G : NetworkX graph
-    
-    delimiter : string, optional
-       Separator for node labels 
-
-    data : bool or list of keys       
-       If False generate no edge data.  If True use a dictionary 
-       representation of edge data.  If a list of keys use a list of data
-       values corresponding to the keys.
-
-    Returns
-    -------
-    lines : string
-        Lines of data in adjlist format.
-
-    Examples
-    --------
-    >>> G = nx.lollipop_graph(4, 3)
-    >>> G[1][2]['weight'] = 3
-    >>> G[3][4]['capacity'] = 12
-    >>> for line in nx.generate_edgelist(G, data=False):
-    ...     print(line)
-    0 1
-    0 2
-    0 3
-    1 2
-    1 3
-    2 3
-    3 4
-    4 5
-    5 6
-
-    >>> for line in nx.generate_edgelist(G):
-    ...     print(line)
-    0 1 {}
-    0 2 {}
-    0 3 {}
-    1 2 {'weight': 3}
-    1 3 {}
-    2 3 {}
-    3 4 {'capacity': 12}
-    4 5 {}
-    5 6 {}
-
-    >>> for line in nx.generate_edgelist(G,data=['weight']):
-    ...     print(line)
-    0 1
-    0 2
-    0 3
-    1 2 3
-    1 3
-    2 3
-    3 4
-    4 5
-    5 6
-
-    See Also
-    --------
-    write_adjlist, read_adjlist
-    """
-    if data is True or data is False:
-        for e in G.edges(data=data):
-            yield delimiter.join(map(make_str,e))
-    else:
-        for u,v,d in G.edges(data=True):
-            e=[u,v]
-            try:
-                e.extend(d[k] for k in data)
-            except KeyError:
-                pass # missing data for this edge, should warn?
-            yield delimiter.join(map(make_str,e))
-
-@open_file(1,mode='wb')
-def write_edgelist(G, path, comments="#", delimiter=' ', data=True,
-                   encoding = 'utf-8'):
-    """Write graph as a list of edges.
-
-    Parameters
-    ----------
-    G : graph
-       A NetworkX graph
-    path : file or string
-       File or filename to write. If a file is provided, it must be
-       opened in 'wb' mode. Filenames ending in .gz or .bz2 will be compressed.
-    comments : string, optional
-       The character used to indicate the start of a comment 
-    delimiter : string, optional
-       The string used to separate values.  The default is whitespace.
-    data : bool or list, optional
-       If False write no edge data.
-       If True write a string representation of the edge data dictionary..  
-       If a list (or other iterable) is provided, write the  keys specified 
-       in the list.
-    encoding: string, optional
-       Specify which encoding to use when writing file.
-
-    Examples
-    --------
-    >>> G=nx.path_graph(4)
-    >>> nx.write_edgelist(G, "test.edgelist")
-    >>> G=nx.path_graph(4)
-    >>> fh=open("test.edgelist",'wb')
-    >>> nx.write_edgelist(G, fh)
-    >>> nx.write_edgelist(G, "test.edgelist.gz")
-    >>> nx.write_edgelist(G, "test.edgelist.gz", data=False)
-
-    >>> G=nx.Graph()
-    >>> G.add_edge(1,2,weight=7,color='red')
-    >>> nx.write_edgelist(G,'test.edgelist',data=False)
-    >>> nx.write_edgelist(G,'test.edgelist',data=['color'])
-    >>> nx.write_edgelist(G,'test.edgelist',data=['color','weight'])
-    
-    See Also
-    --------
-    write_edgelist()
-    write_weighted_edgelist()
-    """
-
-    for line in generate_edgelist(G, delimiter, data):
-        line+='\n'
-        path.write(line.encode(encoding))
-
-def parse_edgelist(lines, comments='#', delimiter=None,
-                   create_using=None, nodetype=None, data=True):
-    """Parse lines of an edge list representation of a graph.
-
-
-    Returns
-    -------
-    G: NetworkX Graph
-        The graph corresponding to lines
-    data : bool or list of (label,type) tuples
-       If False generate no edge data or if True use a dictionary 
-       representation of edge data or a list tuples specifying dictionary 
-       key names and types for edge data.
-    create_using: NetworkX graph container, optional
-       Use given NetworkX graph for holding nodes or edges.
-    nodetype : Python type, optional
-       Convert nodes to this type.  
-    comments : string, optional
-       Marker for comment lines
-    delimiter : string, optional
-       Separator for node labels 
-    create_using: NetworkX graph container       
-       Use given NetworkX graph for holding nodes or edges.
-
-    Examples
-    --------
-    Edgelist with no data:
-
-    >>> lines = ["1 2",
-    ...          "2 3",
-    ...          "3 4"]
-    >>> G = nx.parse_edgelist(lines, nodetype = int)
-    >>> G.nodes()
-    [1, 2, 3, 4]
-    >>> G.edges()
-    [(1, 2), (2, 3), (3, 4)]
-
-    Edgelist with data in Python dictionary representation:
-    
-    >>> lines = ["1 2 {'weight':3}",
-    ...          "2 3 {'weight':27}",
-    ...          "3 4 {'weight':3.0}"]
-    >>> G = nx.parse_edgelist(lines, nodetype = int)
-    >>> G.nodes()
-    [1, 2, 3, 4]
-    >>> G.edges(data = True)
-    [(1, 2, {'weight': 3}), (2, 3, {'weight': 27}), (3, 4, {'weight': 3.0})]
-
-    Edgelist with data in a list:
-
-    >>> lines = ["1 2 3",
-    ...          "2 3 27",
-    ...          "3 4 3.0"]
-    >>> G = nx.parse_edgelist(lines, nodetype = int, data=(('weight',float),))
-    >>> G.nodes()
-    [1, 2, 3, 4]
-    >>> G.edges(data = True)
-    [(1, 2, {'weight': 3.0}), (2, 3, {'weight': 27.0}), (3, 4, {'weight': 3.0})]
-
-    See Also
-    --------
-    read_weighted_edgelist
-
-    """
-    from ast import literal_eval
-    if create_using is None:
-        G=nx.Graph()
-    else:
-        try:
-            G=create_using
-            G.clear()
-        except:
-            raise TypeError("create_using input is not a NetworkX graph type")
-
-    for line in lines:
-        p=line.find(comments)
-        if p>=0:
-            line = line[:p]
-        if not len(line):
-            continue
-        # split line, should have 2 or more
-        s=line.strip().split(delimiter)
-        if len(s)<2:
-            continue
-        u=s.pop(0)
-        v=s.pop(0)
-        d=s
-        if nodetype is not None:
-            try:
-                u=nodetype(u)
-                v=nodetype(v)
-            except:
-                raise TypeError("Failed to convert nodes %s,%s to type %s."
-                                %(u,v,nodetype))
-
-        if len(d)==0 or data is False:
-            # no data or data type specified
-            edgedata={}
-        elif data is True:
-            # no edge types specified
-            try: # try to evaluate as dictionary
-                edgedata=dict(literal_eval(' '.join(d)))
-            except:
-                raise TypeError(
-                    "Failed to convert edge data (%s) to dictionary."%(d))
-        else:
-            # convert edge data to dictionary with specified keys and type
-            if len(d)!=len(data):
-                raise IndexError(
-                    "Edge data %s and data_keys %s are not the same length"%
-                    (d, data))
-            edgedata={}
-            for (edge_key,edge_type),edge_value in zip(data,d):
-                try:
-                    edge_value=edge_type(edge_value)
-                except:
-                    raise TypeError(
-                        "Failed to convert %s data %s to type %s."
-                        %(edge_key, edge_value, edge_type))
-                edgedata.update({edge_key:edge_value})
-        G.add_edge(u, v, attr_dict=edgedata)
-    return G
-
-@open_file(0,mode='rb')
-def read_edgelist(path, comments="#", delimiter=None, create_using=None, 
-                  nodetype=None, data=True, edgetype=None, encoding='utf-8'):
-    """Read a graph from a list of edges.
-
-    Parameters
-    ----------
-    path : file or string
-       File or filename to write. If a file is provided, it must be
-       opened in 'rb' mode.
-       Filenames ending in .gz or .bz2 will be uncompressed.
-    comments : string, optional
-       The character used to indicate the start of a comment. 
-    delimiter : string, optional
-       The string used to separate values.  The default is whitespace.
-    create_using : Graph container, optional, 
-       Use specified container to build graph.  The default is networkx.Graph,
-       an undirected graph.
-    nodetype : int, float, str, Python type, optional
-       Convert node data from strings to specified type
-    data : bool or list of (label,type) tuples
-       Tuples specifying dictionary key names and types for edge data
-    edgetype : int, float, str, Python type, optional OBSOLETE
-       Convert edge data from strings to specified type and use as 'weight'
-    encoding: string, optional
-       Specify which encoding to use when reading file.
-
-    Returns
-    -------
-    G : graph
-       A networkx Graph or other type specified with create_using
-
-    Examples
-    --------
-    >>> nx.write_edgelist(nx.path_graph(4), "test.edgelist")
-    >>> G=nx.read_edgelist("test.edgelist")
-
-    >>> fh=open("test.edgelist", 'rb')
-    >>> G=nx.read_edgelist(fh)
-    >>> fh.close()
-
-    >>> G=nx.read_edgelist("test.edgelist", nodetype=int)
-    >>> G=nx.read_edgelist("test.edgelist",create_using=nx.DiGraph())
-
-    Edgelist with data in a list:
-
-    >>> textline = '1 2 3'
-    >>> fh = open('test.edgelist','w')
-    >>> d = fh.write(textline)
-    >>> fh.close()
-    >>> G = nx.read_edgelist('test.edgelist', nodetype=int, data=(('weight',float),))
-    >>> G.nodes()
-    [1, 2]
-    >>> G.edges(data = True)
-    [(1, 2, {'weight': 3.0})]
-
-    See parse_edgelist() for more examples of formatting.
-
-    See Also
-    --------
-    parse_edgelist
-
-    Notes
-    -----
-    Since nodes must be hashable, the function nodetype must return hashable
-    types (e.g. int, float, str, frozenset - or tuples of those, etc.) 
-    """
-    lines = (line.decode(encoding) for line in path)
-    return parse_edgelist(lines,comments=comments, delimiter=delimiter,
-                          create_using=create_using, nodetype=nodetype,
-                          data=data)
-
-
-def write_weighted_edgelist(G, path, comments="#", 
-                            delimiter=' ', encoding='utf-8'):
-    """Write graph G as a list of edges with numeric weights.
-
-    Parameters
-    ----------
-    G : graph
-       A NetworkX graph
-    path : file or string
-       File or filename to write. If a file is provided, it must be
-       opened in 'wb' mode.
-       Filenames ending in .gz or .bz2 will be compressed.
-    comments : string, optional
-       The character used to indicate the start of a comment 
-    delimiter : string, optional
-       The string used to separate values.  The default is whitespace.
-    encoding: string, optional
-       Specify which encoding to use when writing file.
-
-    Examples
-    --------
-    >>> G=nx.Graph()
-    >>> G.add_edge(1,2,weight=7)
-    >>> nx.write_weighted_edgelist(G, 'test.weighted.edgelist')
-
-    See Also
-    --------
-    read_edgelist()
-    write_edgelist()
-    write_weighted_edgelist()
-
-    """
-    write_edgelist(G,path, comments=comments, delimiter=delimiter,
-                   data=('weight',), encoding = encoding)
-    
-def read_weighted_edgelist(path, comments="#", delimiter=None,
-                           create_using=None, nodetype=None, encoding='utf-8'):
-
-    """Read a graph as list of edges with numeric weights.
-
-    Parameters
-    ----------
-    path : file or string
-       File or filename to write. If a file is provided, it must be
-       opened in 'rb' mode.
-       Filenames ending in .gz or .bz2 will be uncompressed.
-    comments : string, optional
-       The character used to indicate the start of a comment. 
-    delimiter : string, optional
-       The string used to separate values.  The default is whitespace.
-    create_using : Graph container, optional, 
-       Use specified container to build graph.  The default is networkx.Graph,
-       an undirected graph.
-    nodetype : int, float, str, Python type, optional
-       Convert node data from strings to specified type
-    encoding: string, optional
-       Specify which encoding to use when reading file.
-
-    Returns
-    -------
-    G : graph
-       A networkx Graph or other type specified with create_using
-
-    Notes
-    -----
-    Since nodes must be hashable, the function nodetype must return hashable
-    types (e.g. int, float, str, frozenset - or tuples of those, etc.) 
-
-    Example edgelist file format.
-
-    With numeric edge data:: 
-
-     # read with 
-     # >>> G=nx.read_weighted_edgelist(fh)
-     # source target data  
-     a b 1
-     a c 3.14159
-     d e 42
-    """
-    return read_edgelist(path,
-                         comments=comments,
-                         delimiter=delimiter,
-                         create_using=create_using,
-                         nodetype=nodetype,
-                         data=(('weight',float),),
-                         encoding = encoding
-                         )
-
-
-# fixture for nose tests
-def teardown_module(module):
-    import os
-    os.unlink('test.edgelist')
-    os.unlink('test.edgelist.gz')
-    os.unlink('test.weighted.edgelist')
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/gexf.py b/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/gexf.py
deleted file mode 100644
index 88503ac..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/gexf.py
+++ /dev/null
@@ -1,926 +0,0 @@
-"""
-****
-GEXF
-****
-Read and write graphs in GEXF format.
-
-GEXF (Graph Exchange XML Format) is a language for describing complex
-network structures, their associated data and dynamics.
-
-This implementation does not support mixed graphs (directed and
-undirected edges together).
-
-Format
-------
-GEXF is an XML format.  See http://gexf.net/format/schema.html for the
-specification and http://gexf.net/format/basic.html for examples.
-"""
-#    Copyright (C) 2013 by
-#    Aric Hagberg <hagberg@lanl.gov>
-#    Dan Schult <dschult@colgate.edu>
-#    Pieter Swart <swart@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-# Based on GraphML NetworkX GraphML reader
-__author__ = """\n""".join(['Aric Hagberg <aric.hagberg@gmail.com>'])
-__all__ = ['write_gexf', 'read_gexf', 'relabel_gexf_graph', 'generate_gexf']
-import itertools
-import networkx as nx
-from networkx.utils import open_file, make_str
-try:
-    from xml.etree.cElementTree import Element, ElementTree, tostring
-except ImportError:
-    try:
-        from xml.etree.ElementTree import Element, ElementTree, tostring
-    except ImportError:
-        pass
-
-@open_file(1,mode='wb')
-def write_gexf(G, path, encoding='utf-8',prettyprint=True,version='1.1draft'):
-    """Write G in GEXF format to path.
-
-    "GEXF (Graph Exchange XML Format) is a language for describing
-    complex networks structures, their associated data and dynamics" [1]_.
-
-    Parameters
-    ----------
-    G : graph
-       A NetworkX graph
-    path : file or string
-       File or file name to write.
-       File names ending in .gz or .bz2 will be compressed.
-    encoding : string (optional)
-       Encoding for text data.
-    prettyprint : bool (optional)
-       If True use line breaks and indenting in output XML.
-
-    Examples
-    --------
-    >>> G=nx.path_graph(4)
-    >>> nx.write_gexf(G, "test.gexf")
-
-    Notes
-    -----
-    This implementation does not support mixed graphs (directed and undirected
-    edges together).
-
-    The node id attribute is set to be the string of the node label.
-    If you want to specify an id use set it as node data, e.g.
-    node['a']['id']=1 to set the id of node 'a' to 1.
-
-    References
-    ----------
-    .. [1] GEXF graph format, http://gexf.net/format/
-    """
-    writer = GEXFWriter(encoding=encoding,prettyprint=prettyprint,
-                        version=version)
-    writer.add_graph(G)
-    writer.write(path)
-
-def generate_gexf(G, encoding='utf-8',prettyprint=True,version='1.1draft'):
-    """Generate lines of GEXF format representation of G"
-
-    "GEXF (Graph Exchange XML Format) is a language for describing
-    complex networks structures, their associated data and dynamics" [1]_.
-
-    Parameters
-    ----------
-    G : graph
-       A NetworkX graph
-    encoding : string (optional)
-       Encoding for text data.
-    prettyprint : bool (optional)
-       If True use line breaks and indenting in output XML.
-
-    Examples
-    --------
-    >>> G=nx.path_graph(4)
-    >>> linefeed=chr(10) # linefeed=\n
-    >>> s=linefeed.join(nx.generate_gexf(G))  # doctest: +SKIP
-    >>> for line in nx.generate_gexf(G):  # doctest: +SKIP
-    ...    print line
-
-    Notes
-    -----
-    This implementation does not support mixed graphs (directed and undirected
-    edges together).
-
-    The node id attribute is set to be the string of the node label.
-    If you want to specify an id use set it as node data, e.g.
-    node['a']['id']=1 to set the id of node 'a' to 1.
-
-    References
-    ----------
-    .. [1] GEXF graph format, http://gexf.net/format/
-    """
-    writer = GEXFWriter(encoding=encoding,prettyprint=prettyprint,
-                        version=version)
-    writer.add_graph(G)
-    for line in str(writer).splitlines():
-        yield line
-
-@open_file(0,mode='rb')
-def read_gexf(path,node_type=None,relabel=False,version='1.1draft'):
-    """Read graph in GEXF format from path.
-
-    "GEXF (Graph Exchange XML Format) is a language for describing
-    complex networks structures, their associated data and dynamics" [1]_.
-
-    Parameters
-    ----------
-    path : file or string
-       File or file name to write.
-       File names ending in .gz or .bz2 will be compressed.
-
-    node_type: Python type (default: None)
-       Convert node ids to this type if not None.
-
-    relabel : bool (default: False)
-       If True relabel the nodes to use the GEXF node "label" attribute
-       instead of the node "id" attribute as the NetworkX node label.
-
-    Returns
-    -------
-    graph: NetworkX graph
-        If no parallel edges are found a Graph or DiGraph is returned.
-        Otherwise a MultiGraph or MultiDiGraph is returned.
-
-    Notes
-    -----
-    This implementation does not support mixed graphs (directed and undirected
-    edges together).
-
-    References
-    ----------
-    .. [1] GEXF graph format, http://gexf.net/format/
-    """
-    reader = GEXFReader(node_type=node_type,version=version)
-    if relabel:
-        G=relabel_gexf_graph(reader(path))
-    else:
-        G=reader(path)
-    return G
-
-class GEXF(object):
-#    global register_namespace
-
-    versions={}
-    d={'NS_GEXF':"http://www.gexf.net/1.1draft",
-       'NS_VIZ':"http://www.gexf.net/1.1draft/viz",
-       'NS_XSI':"http://www.w3.org/2001/XMLSchema-instance",
-       'SCHEMALOCATION':' '.join(['http://www.gexf.net/1.1draft',
-                                'http://www.gexf.net/1.1draft/gexf.xsd'
-                                ]),
-       'VERSION':'1.1'
-       }
-    versions['1.1draft']=d
-    d={'NS_GEXF':"http://www.gexf.net/1.2draft",
-       'NS_VIZ':"http://www.gexf.net/1.2draft/viz",
-       'NS_XSI':"http://www.w3.org/2001/XMLSchema-instance",
-       'SCHEMALOCATION':' '.join(['http://www.gexf.net/1.2draft',
-                                'http://www.gexf.net/1.2draft/gexf.xsd'
-                                ]),
-       'VERSION':'1.2'
-       }
-    versions['1.2draft']=d
-
-
-    types=[(int,"integer"),
-           (float,"float"),
-           (float,"double"),
-           (bool,"boolean"),
-           (list,"string"),
-           (dict,"string"),
-           ]
-
-    try: # Python 3.x
-        blurb = chr(1245) # just to trigger the exception
-        types.extend([
-           (str,"liststring"),
-           (str,"anyURI"),
-           (str,"string")])
-    except ValueError: # Python 2.6+
-        types.extend([
-           (str,"liststring"),
-           (str,"anyURI"),
-           (str,"string"),
-           (unicode,"liststring"),
-           (unicode,"anyURI"),
-           (unicode,"string")])
-
-    xml_type = dict(types)
-    python_type = dict(reversed(a) for a in types)
-    convert_bool={'true':True,'false':False}
-
-#    try:
-#        register_namespace = ET.register_namespace
-#    except AttributeError:
-#        def register_namespace(prefix, uri):
-#            ET._namespace_map[uri] = prefix
-
-
-    def set_version(self,version):
-        d=self.versions.get(version)
-        if d is None:
-            raise nx.NetworkXError('Unknown GEXF version %s'%version)
-        self.NS_GEXF = d['NS_GEXF']
-        self.NS_VIZ = d['NS_VIZ']
-        self.NS_XSI = d['NS_XSI']
-        self.SCHEMALOCATION = d['NS_XSI']
-        self.VERSION=d['VERSION']
-        self.version=version
-
-#        register_namespace('viz', d['NS_VIZ'])
-
-
-class GEXFWriter(GEXF):
-    # class for writing GEXF format files
-    # use write_gexf() function
-    def __init__(self, graph=None, encoding="utf-8",
-                 mode='static',prettyprint=True,
-                 version='1.1draft'):
-        try:
-            import xml.etree.ElementTree
-        except ImportError:
-             raise ImportError('GEXF writer requires '
-                               'xml.elementtree.ElementTree')
-        self.prettyprint=prettyprint
-        self.mode=mode
-        self.encoding = encoding
-        self.set_version(version)
-        self.xml = Element("gexf",
-                           {'xmlns':self.NS_GEXF,
-                            'xmlns:xsi':self.NS_XSI,
-                            'xmlns:viz':self.NS_VIZ,
-                            'xsi:schemaLocation':self.SCHEMALOCATION,
-                            'version':self.VERSION})
-
-        # counters for edge and attribute identifiers
-        self.edge_id=itertools.count()
-        self.attr_id=itertools.count()
-        # default attributes are stored in dictionaries
-        self.attr={}
-        self.attr['node']={}
-        self.attr['edge']={}
-        self.attr['node']['dynamic']={}
-        self.attr['node']['static']={}
-        self.attr['edge']['dynamic']={}
-        self.attr['edge']['static']={}
-
-        if graph is not None:
-            self.add_graph(graph)
-
-    def __str__(self):
-        if self.prettyprint:
-            self.indent(self.xml)
-        s=tostring(self.xml).decode(self.encoding)
-        return s
-
-    def add_graph(self, G):
-        # Add a graph element to the XML
-        if G.is_directed():
-            default='directed'
-        else:
-            default='undirected'
-        graph_element = Element("graph",defaultedgetype=default,mode=self.mode)
-        self.graph_element=graph_element
-        self.add_nodes(G,graph_element)
-        self.add_edges(G,graph_element)
-        self.xml.append(graph_element)
-
-
-    def add_nodes(self, G, graph_element):
-        nodes_element = Element('nodes')
-        for node,data in G.nodes_iter(data=True):
-            node_data=data.copy()
-            node_id = make_str(node_data.pop('id', node))
-            kw={'id':node_id}
-            label = make_str(node_data.pop('label', node))
-            kw['label']=label
-            try:
-                pid=node_data.pop('pid')
-                kw['pid'] = make_str(pid)
-            except KeyError:
-                pass
-
-            # add node element with attributes
-            node_element = Element("node", **kw)
-
-            # add node element and attr subelements
-            default=G.graph.get('node_default',{})
-            node_data=self.add_parents(node_element, node_data)
-            if self.version=='1.1':
-                node_data=self.add_slices(node_element, node_data)
-            else:
-                node_data=self.add_spells(node_element, node_data)
-            node_data=self.add_viz(node_element,node_data)
-            node_data=self.add_attributes("node", node_element,
-                                          node_data, default)
-            nodes_element.append(node_element)
-        graph_element.append(nodes_element)
-
-
-    def add_edges(self, G, graph_element):
-        def edge_key_data(G):
-            # helper function to unify multigraph and graph edge iterator
-            if G.is_multigraph():
-                for u,v,key,data in G.edges_iter(data=True,keys=True):
-                    edge_data=data.copy()
-                    edge_data.update(key=key)
-                    edge_id=edge_data.pop('id',None)
-                    if edge_id is None:
-                        edge_id=next(self.edge_id)
-                    yield u,v,edge_id,edge_data
-            else:
-                for u,v,data in G.edges_iter(data=True):
-                    edge_data=data.copy()
-                    edge_id=edge_data.pop('id',None)
-                    if edge_id is None:
-                        edge_id=next(self.edge_id)
-                    yield u,v,edge_id,edge_data
-
-        edges_element = Element('edges')
-        for u,v,key,edge_data in edge_key_data(G):
-            kw={'id':make_str(key)}
-            try:
-                edge_weight=edge_data.pop('weight')
-                kw['weight']=make_str(edge_weight)
-            except KeyError:
-                pass
-            try:
-                edge_type=edge_data.pop('type')
-                kw['type']=make_str(edge_type)
-            except KeyError:
-                pass
-            source_id = make_str(G.node[u].get('id', u))
-            target_id = make_str(G.node[v].get('id', v))
-            edge_element = Element("edge",
-                                   source=source_id,target=target_id,
-                                   **kw)
-            default=G.graph.get('edge_default',{})
-            edge_data=self.add_viz(edge_element,edge_data)
-            edge_data=self.add_attributes("edge", edge_element,
-                                          edge_data, default)
-            edges_element.append(edge_element)
-        graph_element.append(edges_element)
-
-
-    def add_attributes(self, node_or_edge, xml_obj, data, default):
-        # Add attrvalues to node or edge
-        attvalues=Element('attvalues')
-        if len(data)==0:
-            return data
-        if 'start' in data or 'end' in data:
-            mode='dynamic'
-        else:
-            mode='static'
-        for k,v in data.items():
-            # rename generic multigraph key to avoid any name conflict
-            if k == 'key':
-                k='networkx_key'
-            attr_id = self.get_attr_id(make_str(k), self.xml_type[type(v)],
-                                       node_or_edge, default, mode)
-            if type(v)==list:
-                # dynamic data
-                for val,start,end in v:
-                    e=Element("attvalue")
-                    e.attrib['for']=attr_id
-                    e.attrib['value']=make_str(val)
-                    if start is not None:
-                        e.attrib['start']=make_str(start)
-                    if end is not None:
-                        e.attrib['end']=make_str(end)
-                    attvalues.append(e)
-            else:
-                # static data
-                e=Element("attvalue")
-                e.attrib['for']=attr_id
-                e.attrib['value']=make_str(v)
-                attvalues.append(e)
-        xml_obj.append(attvalues)
-        return data
-
-    def get_attr_id(self, title, attr_type, edge_or_node, default, mode):
-        # find the id of the attribute or generate a new id
-        try:
-            return self.attr[edge_or_node][mode][title]
-        except KeyError:
-            # generate new id
-            new_id=str(next(self.attr_id))
-            self.attr[edge_or_node][mode][title] = new_id
-            attr_kwargs = {"id":new_id, "title":title, "type":attr_type}
-            attribute=Element("attribute",**attr_kwargs)
-            # add subelement for data default value if present
-            default_title=default.get(title)
-            if default_title is not None:
-                default_element=Element("default")
-                default_element.text=make_str(default_title)
-                attribute.append(default_element)
-            # new insert it into the XML
-            attributes_element=None
-            for a in self.graph_element.findall("attributes"):
-                # find existing attributes element by class and mode
-                a_class=a.get('class')
-                a_mode=a.get('mode','static') # default mode is static
-                if a_class==edge_or_node and a_mode==mode:
-                    attributes_element=a
-            if attributes_element is None:
-                # create new attributes element
-                attr_kwargs = {"mode":mode,"class":edge_or_node}
-                attributes_element=Element('attributes', **attr_kwargs)
-                self.graph_element.insert(0,attributes_element)
-            attributes_element.append(attribute)
-        return new_id
-
-
-    def add_viz(self,element,node_data):
-        viz=node_data.pop('viz',False)
-        if viz:
-            color=viz.get('color')
-            if color is not None:
-                if self.VERSION=='1.1':
-                    e=Element("{%s}color"%self.NS_VIZ,
-                              r=str(color.get('r')),
-                              g=str(color.get('g')),
-                              b=str(color.get('b')),
-                              )
-                else:
-                    e=Element("{%s}color"%self.NS_VIZ,
-                              r=str(color.get('r')),
-                              g=str(color.get('g')),
-                              b=str(color.get('b')),
-                              a=str(color.get('a')),
-                              )
-                element.append(e)
-
-            size=viz.get('size')
-            if size is not None:
-                e=Element("{%s}size"%self.NS_VIZ,value=str(size))
-                element.append(e)
-
-            thickness=viz.get('thickness')
-            if thickness is not None:
-                e=Element("{%s}thickness"%self.NS_VIZ,value=str(thickness))
-                element.append(e)
-
-            shape=viz.get('shape')
-            if shape is not None:
-                if shape.startswith('http'):
-                    e=Element("{%s}shape"%self.NS_VIZ,
-                              value='image',uri=str(shape))
-                else:
-                    e=Element("{%s}shape"%self.NS_VIZ,value=str(shape))
-                element.append(e)
-
-            position=viz.get('position')
-            if position is not None:
-                e=Element("{%s}position"%self.NS_VIZ,
-                          x=str(position.get('x')),
-                          y=str(position.get('y')),
-                          z=str(position.get('z')),
-                          )
-                element.append(e)
-        return node_data
-
-    def add_parents(self,node_element,node_data):
-        parents=node_data.pop('parents',False)
-        if parents:
-            parents_element=Element('parents')
-            for p in parents:
-                e=Element('parent')
-                e.attrib['for']=str(p)
-                parents_element.append(e)
-            node_element.append(parents_element)
-        return node_data
-
-    def add_slices(self,node_element,node_data):
-        slices=node_data.pop('slices',False)
-        if slices:
-            slices_element=Element('slices')
-            for start,end in slices:
-                e=Element('slice',start=str(start),end=str(end))
-                slices_element.append(e)
-            node_element.append(slices_element)
-        return node_data
-
-
-    def add_spells(self,node_element,node_data):
-        spells=node_data.pop('spells',False)
-        if spells:
-            spells_element=Element('spells')
-            for start,end in spells:
-                e=Element('spell')
-                if start is not None:
-                    e.attrib['start']=make_str(start)
-                if end is not None:
-                    e.attrib['end']=make_str(end)
-                spells_element.append(e)
-            node_element.append(spells_element)
-        return node_data
-
-
-    def write(self, fh):
-        # Serialize graph G in GEXF to the open fh
-        if self.prettyprint:
-            self.indent(self.xml)
-        document = ElementTree(self.xml)
-        header='<?xml version="1.0" encoding="%s"?>'%self.encoding
-        fh.write(header.encode(self.encoding))
-        document.write(fh, encoding=self.encoding)
-
-
-    def indent(self, elem, level=0):
-        # in-place prettyprint formatter
-        i = "\n" + level*"  "
-        if len(elem):
-            if not elem.text or not elem.text.strip():
-                elem.text = i + "  "
-            if not elem.tail or not elem.tail.strip():
-                elem.tail = i
-            for elem in elem:
-                self.indent(elem, level+1)
-            if not elem.tail or not elem.tail.strip():
-                elem.tail = i
-        else:
-            if level and (not elem.tail or not elem.tail.strip()):
-                elem.tail = i
-
-
-class GEXFReader(GEXF):
-    # Class to read GEXF format files
-    # use read_gexf() function
-    def __init__(self, node_type=None,version='1.1draft'):
-        try:
-            import xml.etree.ElementTree
-        except ImportError:
-             raise ImportError('GEXF reader requires '
-                               'xml.elementtree.ElementTree')
-        self.node_type=node_type
-        # assume simple graph and test for multigraph on read
-        self.simple_graph=True
-        self.set_version(version)
-
-    def __call__(self, stream):
-        self.xml = ElementTree(file=stream)
-        g=self.xml.find("{%s}graph" % self.NS_GEXF)
-        if g is not None:
-            return self.make_graph(g)
-        # try all the versions
-        for version in self.versions:
-            self.set_version(version)
-            g=self.xml.find("{%s}graph" % self.NS_GEXF)
-            if g is not None:
-                return self.make_graph(g)
-        raise nx.NetworkXError("No <graph> element in GEXF file")
-
-
-    def make_graph(self, graph_xml):
-        # mode is "static" or "dynamic"
-        graph_mode = graph_xml.get("mode", "")
-        self.dynamic=(graph_mode=='dynamic')
-
-        # start with empty DiGraph or MultiDiGraph
-        edgedefault = graph_xml.get("defaultedgetype", None)
-        if edgedefault=='directed':
-            G=nx.MultiDiGraph()
-        else:
-            G=nx.MultiGraph()
-
-        # graph attributes
-        graph_start=graph_xml.get('start')
-        if graph_start is not None:
-            G.graph['start']=graph_start
-        graph_end=graph_xml.get('end')
-        if graph_end is not None:
-            G.graph['end']=graph_end
-
-        # node and edge attributes
-        attributes_elements=graph_xml.findall("{%s}attributes"%self.NS_GEXF)
-        # dictionaries to hold attributes and attribute defaults
-        node_attr={}
-        node_default={}
-        edge_attr={}
-        edge_default={}
-        for a in attributes_elements:
-            attr_class = a.get("class")
-            if attr_class=='node':
-                na,nd = self.find_gexf_attributes(a)
-                node_attr.update(na)
-                node_default.update(nd)
-                G.graph['node_default']=node_default
-            elif attr_class=='edge':
-                ea,ed = self.find_gexf_attributes(a)
-                edge_attr.update(ea)
-                edge_default.update(ed)
-                G.graph['edge_default']=edge_default
-            else:
-                raise # unknown attribute class
-
-        # Hack to handle Gephi0.7beta bug
-        # add weight attribute
-        ea={'weight':{'type': 'double', 'mode': 'static', 'title': 'weight'}}
-        ed={}
-        edge_attr.update(ea)
-        edge_default.update(ed)
-        G.graph['edge_default']=edge_default
-
-        # add nodes
-        nodes_element=graph_xml.find("{%s}nodes" % self.NS_GEXF)
-        if nodes_element is not None:
-            for node_xml in nodes_element.findall("{%s}node" % self.NS_GEXF):
-                self.add_node(G, node_xml, node_attr)
-
-        # add edges
-        edges_element=graph_xml.find("{%s}edges" % self.NS_GEXF)
-        if edges_element is not None:
-            for edge_xml in edges_element.findall("{%s}edge" % self.NS_GEXF):
-                self.add_edge(G, edge_xml, edge_attr)
-
-        # switch to Graph or DiGraph if no parallel edges were found.
-        if self.simple_graph:
-            if G.is_directed():
-                G=nx.DiGraph(G)
-            else:
-                G=nx.Graph(G)
-        return G
-
-    def add_node(self, G, node_xml, node_attr, node_pid=None):
-        # add a single node with attributes to the graph
-
-        # get attributes and subattributues for node
-        data = self.decode_attr_elements(node_attr, node_xml)
-        data = self.add_parents(data, node_xml) # add any parents
-        if self.version=='1.1':
-            data = self.add_slices(data, node_xml)  # add slices
-        else:
-            data = self.add_spells(data, node_xml)  # add spells
-        data = self.add_viz(data, node_xml) # add viz
-        data = self.add_start_end(data, node_xml) # add start/end
-
-        # find the node id and cast it to the appropriate type
-        node_id = node_xml.get("id")
-        if self.node_type is not None:
-            node_id=self.node_type(node_id)
-
-        # every node should have a label
-        node_label = node_xml.get("label")
-        data['label']=node_label
-
-        # parent node id
-        node_pid = node_xml.get("pid", node_pid)
-        if node_pid is not None:
-            data['pid']=node_pid
-
-        # check for subnodes, recursive
-        subnodes=node_xml.find("{%s}nodes" % self.NS_GEXF)
-        if subnodes is not None:
-            for node_xml in subnodes.findall("{%s}node" % self.NS_GEXF):
-                self.add_node(G, node_xml, node_attr, node_pid=node_id)
-
-        G.add_node(node_id, data)
-
-    def add_start_end(self, data, xml):
-        # start and end times
-        node_start = xml.get("start")
-        if node_start is not None:
-            data['start']=node_start
-        node_end = xml.get("end")
-        if node_end is not None:
-            data['end']=node_end
-        return data
-
-
-    def add_viz(self, data, node_xml):
-        # add viz element for node
-        viz={}
-        color=node_xml.find("{%s}color"%self.NS_VIZ)
-        if color is not None:
-            if self.VERSION=='1.1':
-                viz['color']={'r':int(color.get('r')),
-                              'g':int(color.get('g')),
-                              'b':int(color.get('b'))}
-            else:
-                viz['color']={'r':int(color.get('r')),
-                              'g':int(color.get('g')),
-                              'b':int(color.get('b')),
-                              'a':float(color.get('a', 1)),
-                              }
-
-        size=node_xml.find("{%s}size"%self.NS_VIZ)
-        if size is not None:
-            viz['size']=float(size.get('value'))
-
-        thickness=node_xml.find("{%s}thickness"%self.NS_VIZ)
-        if thickness is not None:
-            viz['thickness']=float(thickness.get('value'))
-
-        shape=node_xml.find("{%s}shape"%self.NS_VIZ)
-        if shape is not None:
-            viz['shape']=shape.get('shape')
-            if viz['shape']=='image':
-                viz['shape']=shape.get('uri')
-
-        position=node_xml.find("{%s}position"%self.NS_VIZ)
-        if position is not None:
-            viz['position']={'x':float(position.get('x',0)),
-                             'y':float(position.get('y',0)),
-                             'z':float(position.get('z',0))}
-
-        if len(viz)>0:
-            data['viz']=viz
-        return data
-
-    def add_parents(self, data, node_xml):
-        parents_element=node_xml.find("{%s}parents"%self.NS_GEXF)
-        if parents_element is not None:
-            data['parents']=[]
-            for p in parents_element.findall("{%s}parent"%self.NS_GEXF):
-                parent=p.get('for')
-                data['parents'].append(parent)
-        return data
-
-    def add_slices(self, data,  node_xml):
-        slices_element=node_xml.find("{%s}slices"%self.NS_GEXF)
-        if slices_element is not None:
-            data['slices']=[]
-            for s in slices_element.findall("{%s}slice"%self.NS_GEXF):
-                start=s.get('start')
-                end=s.get('end')
-                data['slices'].append((start,end))
-        return data
-
-    def add_spells(self, data,  node_xml):
-        spells_element=node_xml.find("{%s}spells"%self.NS_GEXF)
-        if spells_element is not None:
-            data['spells']=[]
-            for s in spells_element.findall("{%s}spell"%self.NS_GEXF):
-                start=s.get('start')
-                end=s.get('end')
-                data['spells'].append((start,end))
-        return data
-
-
-    def add_edge(self, G, edge_element, edge_attr):
-        # add an edge to the graph
-
-        # raise error if we find mixed directed and undirected edges
-        edge_direction = edge_element.get("type")
-        if G.is_directed() and edge_direction=='undirected':
-            raise nx.NetworkXError(\
-                "Undirected edge found in directed graph.")
-        if (not G.is_directed()) and edge_direction=='directed':
-            raise nx.NetworkXError(\
-                "Directed edge found in undirected graph.")
-
-        # Get source and target and recast type if required
-        source = edge_element.get("source")
-        target = edge_element.get("target")
-        if self.node_type is not None:
-            source=self.node_type(source)
-            target=self.node_type(target)
-
-        data = self.decode_attr_elements(edge_attr, edge_element)
-        data = self.add_start_end(data,edge_element)
-
-        # GEXF stores edge ids as an attribute
-        # NetworkX uses them as keys in multigraphs
-        # if networkx_key is not specified as an attribute
-        edge_id = edge_element.get("id")
-        if edge_id is not None:
-            data["id"] = edge_id
-
-        # check if there is a 'multigraph_key' and use that as edge_id
-        multigraph_key = data.pop('networkx_key',None)
-        if multigraph_key is not None:
-            edge_id=multigraph_key
-
-        weight = edge_element.get('weight')
-        if weight is not None:
-            data['weight']=float(weight)
-
-        edge_label = edge_element.get("label")
-        if edge_label is not None:
-            data['label']=edge_label
-
-
-
-        if G.has_edge(source,target):
-            # seen this edge before - this is a multigraph
-            self.simple_graph=False
-        G.add_edge(source, target, key=edge_id, **data)
-        if edge_direction=='mutual':
-            G.add_edge(target, source, key=edge_id, **data)
-
-    def decode_attr_elements(self, gexf_keys, obj_xml):
-        # Use the key information to decode the attr XML
-        attr = {}
-        # look for outer "<attvalues>" element
-        attr_element=obj_xml.find("{%s}attvalues" % self.NS_GEXF)
-        if attr_element is not None:
-            # loop over <attvalue> elements
-            for a in attr_element.findall("{%s}attvalue" % self.NS_GEXF):
-                key = a.get('for') # for is required
-                try: # should be in our gexf_keys dictionary
-                    title=gexf_keys[key]['title']
-                except KeyError:
-                    raise nx.NetworkXError("No attribute defined for=%s"%key)
-                atype=gexf_keys[key]['type']
-                value=a.get('value')
-                if atype=='boolean':
-                    value=self.convert_bool[value]
-                else:
-                    value=self.python_type[atype](value)
-                if gexf_keys[key]['mode']=='dynamic':
-                    # for dynamic graphs use list of three-tuples
-                    # [(value1,start1,end1), (value2,start2,end2), etc]
-                    start=a.get('start')
-                    end=a.get('end')
-                    if title in attr:
-                        attr[title].append((value,start,end))
-                    else:
-                        attr[title]=[(value,start,end)]
-                else:
-                    # for static graphs just assign the value
-                    attr[title] = value
-        return attr
-
-    def find_gexf_attributes(self, attributes_element):
-        # Extract all the attributes and defaults
-        attrs = {}
-        defaults = {}
-        mode=attributes_element.get('mode')
-        for k in attributes_element.findall("{%s}attribute" % self.NS_GEXF):
-            attr_id = k.get("id")
-            title=k.get('title')
-            atype=k.get('type')
-            attrs[attr_id]={'title':title,'type':atype,'mode':mode}
-            # check for the "default" subelement of key element and add
-            default=k.find("{%s}default" % self.NS_GEXF)
-            if default is not None:
-                if atype=='boolean':
-                    value=self.convert_bool[default.text]
-                else:
-                    value=self.python_type[atype](default.text)
-                defaults[title]=value
-        return attrs,defaults
-
-
-def relabel_gexf_graph(G):
-    """Relabel graph using "label" node keyword for node label.
-
-    Parameters
-    ----------
-    G : graph
-       A NetworkX graph read from GEXF data
-
-    Returns
-    -------
-    H : graph
-      A NetworkX graph with relabed nodes
-
-    Notes
-    -----
-    This function relabels the nodes in a NetworkX graph with the
-    "label" attribute.  It also handles relabeling the specific GEXF
-    node attributes "parents", and "pid".
-    """
-    # build mapping of node labels, do some error checking
-    try:
-        mapping=[(u,G.node[u]['label']) for u in G]
-    except KeyError:
-        raise nx.NetworkXError('Failed to relabel nodes: '
-                               'missing node labels found. '
-                               'Use relabel=False.')
-    x,y=zip(*mapping)
-    if len(set(y))!=len(G):
-        raise nx.NetworkXError('Failed to relabel nodes: '
-                               'duplicate node labels found. '
-                               'Use relabel=False.')
-    mapping=dict(mapping)
-    H=nx.relabel_nodes(G,mapping)
-    # relabel attributes
-    for n in G:
-        m=mapping[n]
-        H.node[m]['id']=n
-        H.node[m].pop('label')
-        if 'pid' in H.node[m]:
-            H.node[m]['pid']=mapping[G.node[n]['pid']]
-        if 'parents' in H.node[m]:
-            H.node[m]['parents']=[mapping[p] for p in G.node[n]['parents']]
-    return H
-
-# fixture for nose tests
-def setup_module(module):
-    from nose import SkipTest
-    try:
-        import xml.etree.cElementTree
-    except:
-        raise SkipTest("xml.etree.cElementTree not available")
-
-# fixture for nose tests
-def teardown_module(module):
-    import os
-    try:
-        os.unlink('test.gexf')
-    except:
-        pass
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/gml.py b/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/gml.py
deleted file mode 100644
index d248eb4..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/gml.py
+++ /dev/null
@@ -1,410 +0,0 @@
-"""
-Read graphs in GML format.
-
-"GML, the G>raph Modelling Language, is our proposal for a portable
-file format for graphs. GML's key features are portability, simple
-syntax, extensibility and flexibility. A GML file consists of a
-hierarchical key-value lists. Graphs can be annotated with arbitrary
-data structures. The idea for a common file format was born at the
-GD'95; this proposal is the outcome of many discussions. GML is the
-standard file format in the Graphlet graph editor system. It has been
-overtaken and adapted by several other systems for drawing graphs."
-
-See http://www.infosun.fim.uni-passau.de/Graphlet/GML/gml-tr.html
-
-Requires pyparsing: http://pyparsing.wikispaces.com/
-
-Format
-------
-See http://www.infosun.fim.uni-passau.de/Graphlet/GML/gml-tr.html
-for format specification.
-
-Example graphs in GML format:
-http://www-personal.umich.edu/~mejn/netdata/
-"""
-__author__ = """Aric Hagberg (hagberg@lanl.gov)"""
-#    Copyright (C) 2008-2010 by 
-#    Aric Hagberg <hagberg@lanl.gov>
-#    Dan Schult <dschult@colgate.edu>
-#    Pieter Swart <swart@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-
-__all__ = ['read_gml', 'parse_gml', 'generate_gml', 'write_gml']
-
-import networkx as nx
-from networkx.exception import NetworkXError
-from networkx.utils import is_string_like, open_file
-
-
-@open_file(0,mode='rb')
-def read_gml(path,encoding='UTF-8',relabel=False):
-    """Read graph in GML format from path.
-
-    Parameters
-    ----------
-    path : filename or filehandle
-       The filename or filehandle to read from.
-
-    encoding : string, optional
-       Text encoding. 
-
-    relabel : bool, optional       
-       If True use the GML node label attribute for node names otherwise use
-       the node id.  
-
-    Returns
-    -------
-    G : MultiGraph or MultiDiGraph
-
-    Raises
-    ------
-    ImportError
-        If the pyparsing module is not available.
-
-    See Also
-    --------
-    write_gml, parse_gml
-    
-    Notes
-    -----
-    Requires pyparsing: http://pyparsing.wikispaces.com/
-
-    References
-    ----------
-    GML specification:
-    http://www.infosun.fim.uni-passau.de/Graphlet/GML/gml-tr.html
-
-    Examples
-    --------
-    >>> G=nx.path_graph(4)
-    >>> nx.write_gml(G,'test.gml')
-    >>> H=nx.read_gml('test.gml')
-    """
-    lines=(line.decode(encoding) for line in path)
-    G=parse_gml(lines,relabel=relabel)
-    return G
-
-def parse_gml(lines, relabel=True):
-    """Parse GML graph from a string or iterable.
-
-    Parameters
-    ----------
-    lines : string or iterable
-       Data in GML format.
-
-    relabel : bool, optional       
-       If True use the GML node label attribute for node names otherwise use
-       the node id.
-
-    Returns
-    -------
-    G : MultiGraph or MultiDiGraph
-
-    Raises
-    ------
-    ImportError
-        If the pyparsing module is not available.
-
-    See Also
-    --------
-    write_gml, read_gml
-    
-    Notes
-    -----
-    This stores nested GML attributes as dictionaries in the 
-    NetworkX graph, node, and edge attribute structures.
-
-    Requires pyparsing: http://pyparsing.wikispaces.com/
-
-    References
-    ----------
-    GML specification:
-    http://www.infosun.fim.uni-passau.de/Graphlet/GML/gml-tr.html
-    """
-    try:
-        from pyparsing import ParseException
-    except ImportError:
-        try:
-            from matplotlib.pyparsing import ParseException
-        except:
-            raise ImportError('Import Error: not able to import pyparsing:', 
-                              'http://pyparsing.wikispaces.com/')
-    try:
-        data = "".join(lines)
-        gml = pyparse_gml()
-        tokens =gml.parseString(data)
-    except ParseException as err:
-        print((err.line))
-        print((" "*(err.column-1) + "^"))
-        print(err)
-        raise
-
-    # function to recursively make dicts of key/value pairs
-    def wrap(tok):
-        listtype=type(tok)
-        result={}
-        for k,v in tok:
-            if type(v)==listtype:
-                result[str(k)]=wrap(v)
-            else:
-                result[str(k)]=v
-        return result
-
-    # Set flag
-    multigraph=False
-    # but assume multigraphs to start
-    if tokens.directed==1:
-        G=nx.MultiDiGraph()
-    else:
-        G=nx.MultiGraph()
-
-    for k,v in tokens.asList():
-        if k=="node":
-            vdict=wrap(v)
-            node=vdict['id']
-            G.add_node(node,attr_dict=vdict)
-        elif k=="edge":
-            vdict=wrap(v)
-            source=vdict.pop('source')
-            target=vdict.pop('target')
-            if G.has_edge(source,target):
-                multigraph=True
-            G.add_edge(source,target,attr_dict=vdict)
-        else:
-            G.graph[k]=v
-
-    # switch to Graph or DiGraph if no parallel edges were found.
-    if not multigraph: 
-        if G.is_directed():
-            G=nx.DiGraph(G)
-        else:
-            G=nx.Graph(G)
-
-    if relabel:
-        # relabel, but check for duplicate labels first
-        mapping=[(n,d['label']) for n,d in G.node.items()]
-        x,y=zip(*mapping)
-        if len(set(y))!=len(G):
-            raise NetworkXError('Failed to relabel nodes: '
-                                'duplicate node labels found. '
-                                'Use relabel=False.')
-        G=nx.relabel_nodes(G,dict(mapping))
-    return G
-
-
-def pyparse_gml():
-    """A pyparsing tokenizer for GML graph format.
-
-    This is not intended to be called directly.
-
-    See Also
-    --------
-    write_gml, read_gml, parse_gml
-    """  
-    try:
-        from pyparsing import \
-             Literal, CaselessLiteral, Word, Forward,\
-             ZeroOrMore, Group, Dict, Optional, Combine,\
-             ParseException, restOfLine, White, alphas, alphanums, nums,\
-             OneOrMore,quotedString,removeQuotes,dblQuotedString, Regex
-    except ImportError:
-        try:
-            from matplotlib.pyparsing import \
-             Literal, CaselessLiteral, Word, Forward,\
-             ZeroOrMore, Group, Dict, Optional, Combine,\
-             ParseException, restOfLine, White, alphas, alphanums, nums,\
-             OneOrMore,quotedString,removeQuotes,dblQuotedString, Regex
-        except:
-            raise ImportError('pyparsing not found',
-                              'http://pyparsing.wikispaces.com/')
-
-    lbrack = Literal("[").suppress()
-    rbrack = Literal("]").suppress()
-    pound = ("#")
-    comment = pound + Optional( restOfLine )
-    integer = Word(nums+'-').setParseAction(lambda s,l,t:[ int(t[0])])
-    real = Regex(r"[+-]?\d+\.\d*([eE][+-]?\d+)?").setParseAction(
-        lambda s,l,t:[ float(t[0]) ])
-    dblQuotedString.setParseAction( removeQuotes )
-    key = Word(alphas,alphanums+'_')
-    value_atom = (real | integer | Word(alphanums) | dblQuotedString) 
-    value = Forward()   # to be defined later with << operator
-    keyvalue = Group(key+value)
-    value << (value_atom | Group( lbrack + ZeroOrMore(keyvalue) + rbrack ))
-    node = Group(Literal("node") + lbrack + Group(OneOrMore(keyvalue)) + rbrack)
-    edge = Group(Literal("edge") + lbrack + Group(OneOrMore(keyvalue)) + rbrack)
-
-    creator = Group(Literal("Creator")+ Optional( restOfLine ))
-    version = Group(Literal("Version")+ Optional( restOfLine ))
-    graphkey = Literal("graph").suppress()
-
-    graph = Dict (Optional(creator)+Optional(version)+\
-        graphkey + lbrack + ZeroOrMore( (node|edge|keyvalue) ) + rbrack )
-    graph.ignore(comment)
-    
-    return graph
-
-def generate_gml(G):
-    """Generate a single entry of the graph G in GML format.
-
-    Parameters
-    ----------
-    G : NetworkX graph
-
-    Returns
-    -------
-    lines: string
-       Lines in GML format.
-
-    Notes
-    -----
-    This implementation does not support all Python data types as GML
-    data.  Nodes, node attributes, edge attributes, and graph
-    attributes must be either dictionaries or single stings or
-    numbers.  If they are not an attempt is made to represent them as
-    strings.  For example, a list as edge data
-    G[1][2]['somedata']=[1,2,3], will be represented in the GML file
-    as::
-
-       edge [
-         source 1
-         target 2
-         somedata "[1, 2, 3]"
-       ]
-    """
-    # recursively make dicts into gml brackets
-    def listify(d,indent,indentlevel):
-        result='[ \n'
-        for k,v in d.items():
-            if type(v)==dict:
-                v=listify(v,indent,indentlevel+1)
-            result += (indentlevel+1)*indent + \
-                string_item(k,v,indentlevel*indent)+'\n'
-        return result+indentlevel*indent+"]"
-
-    def string_item(k,v,indent):
-        # try to make a string of the data
-        if type(v)==dict: 
-            v=listify(v,indent,2)
-        elif is_string_like(v):
-            v='"%s"'%v
-        elif type(v)==bool:
-            v=int(v)
-        return "%s %s"%(k,v)
-
-    # check for attributes or assign empty dict
-    if hasattr(G,'graph_attr'):
-        graph_attr=G.graph_attr
-    else:
-        graph_attr={}
-    if hasattr(G,'node_attr'):
-        node_attr=G.node_attr
-    else:
-        node_attr={}
-
-    indent=2*' '
-    count=iter(range(len(G)))
-    node_id={}
-
-    yield "graph ["
-    if G.is_directed():
-        yield indent+"directed 1"
-    # write graph attributes 
-    for k,v in G.graph.items():
-        if k == 'directed':
-            continue
-        yield indent+string_item(k,v,indent)
-    # write nodes
-    for n in G:
-        yield indent+"node ["
-        # get id or assign number
-        nid=G.node[n].get('id',next(count))
-        node_id[n]=nid
-        yield 2*indent+"id %s"%nid
-        label=G.node[n].get('label',n)
-        if is_string_like(label):
-            label='"%s"'%label
-        yield 2*indent+'label %s'%label
-        if n in G:
-          for k,v in G.node[n].items():
-              if k=='id' or k == 'label': continue
-              yield 2*indent+string_item(k,v,indent)
-        yield indent+"]"
-    # write edges
-    for u,v,edgedata in G.edges_iter(data=True):
-        yield indent+"edge ["
-        yield 2*indent+"source %s"%node_id[u]
-        yield 2*indent+"target %s"%node_id[v]
-        for k,v in edgedata.items():
-            if k=='source': continue
-            if k=='target': continue
-            yield 2*indent+string_item(k,v,indent)
-        yield indent+"]"
-    yield "]"
-
-@open_file(1,mode='wb')
-def write_gml(G, path):
-    """
-    Write the graph G in GML format to the file or file handle path.
-
-    Parameters
-    ----------
-    path : filename or filehandle
-       The filename or filehandle to write.  Filenames ending in
-       .gz or .gz2 will be compressed.
-
-    See Also
-    --------
-    read_gml, parse_gml
-
-    Notes
-    -----
-    GML specifications indicate that the file should only use
-    7bit ASCII text encoding.iso8859-1 (latin-1). 
-
-    This implementation does not support all Python data types as GML
-    data.  Nodes, node attributes, edge attributes, and graph
-    attributes must be either dictionaries or single stings or
-    numbers.  If they are not an attempt is made to represent them as
-    strings.  For example, a list as edge data
-    G[1][2]['somedata']=[1,2,3], will be represented in the GML file
-    as::
-
-       edge [
-         source 1
-         target 2
-         somedata "[1, 2, 3]"
-       ]
-
-    
-    Examples
-    ---------
-    >>> G=nx.path_graph(4)
-    >>> nx.write_gml(G,"test.gml")
-
-    Filenames ending in .gz or .bz2 will be compressed.
-
-    >>> nx.write_gml(G,"test.gml.gz")
-    """
-    for line in generate_gml(G):
-        line+='\n'
-        path.write(line.encode('latin-1'))
-
-
-# fixture for nose tests
-def setup_module(module):
-    from nose import SkipTest
-    try:
-        import pyparsing
-    except:
-        try:
-            import matplotlib.pyparsing
-        except:
-            raise SkipTest("pyparsing not available")
-
-# fixture for nose tests
-def teardown_module(module):
-    import os
-    os.unlink('test.gml')
-    os.unlink('test.gml.gz')
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/gpickle.py b/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/gpickle.py
deleted file mode 100644
index 688a35c..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/gpickle.py
+++ /dev/null
@@ -1,100 +0,0 @@
-"""
-**************
-Pickled Graphs
-**************
-Read and write NetworkX graphs as Python pickles.
-
-"The pickle module implements a fundamental, but powerful algorithm
-for serializing and de-serializing a Python object
-structure. "Pickling" is the process whereby a Python object hierarchy
-is converted into a byte stream, and "unpickling" is the inverse
-operation, whereby a byte stream is converted back into an object
-hierarchy." 
-
-Note that NetworkX graphs can contain any hashable Python object as
-node (not just integers and strings).  For arbitrary data types it may
-be difficult to represent the data as text.  In that case using Python
-pickles to store the graph data can be used.
-
-Format
-------
-See http://docs.python.org/library/pickle.html
-"""
-__author__ = """Aric Hagberg (hagberg@lanl.gov)\nDan Schult (dschult@colgate.edu)"""
-#    Copyright (C) 2004-2010 by 
-#    Aric Hagberg <hagberg@lanl.gov>
-#    Dan Schult <dschult@colgate.edu>
-#    Pieter Swart <swart@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-
-__all__ = ['read_gpickle', 'write_gpickle']
-
-import networkx as nx
-from networkx.utils import open_file
-
-try:
-    import cPickle as pickle
-except ImportError:
-    import pickle
-
-@open_file(1,mode='wb')
-def write_gpickle(G, path):
-    """Write graph in Python pickle format.
-
-    Pickles are a serialized byte stream of a Python object [1]_.
-    This format will preserve Python objects used as nodes or edges.
-
-    Parameters
-    ----------
-    G : graph
-       A NetworkX graph
-    path : file or string
-       File or filename to write. 
-       Filenames ending in .gz or .bz2 will be compressed.
-
-    Examples
-    --------
-    >>> G=nx.path_graph(4)
-    >>> nx.write_gpickle(G,"test.gpickle")
-
-    References
-    ----------
-    .. [1] http://docs.python.org/library/pickle.html
-    """
-    pickle.dump(G, path, pickle.HIGHEST_PROTOCOL)
-
-@open_file(0,mode='rb')
-def read_gpickle(path):
-    """Read graph object in Python pickle format.
-
-    Pickles are a serialized byte stream of a Python object [1]_.
-    This format will preserve Python objects used as nodes or edges.
-
-    Parameters
-    ----------
-    path : file or string
-       File or filename to write. 
-       Filenames ending in .gz or .bz2 will be uncompressed.
-
-    Returns
-    -------
-    G : graph
-       A NetworkX graph
-
-    Examples
-    --------
-    >>> G=nx.path_graph(4)
-    >>> nx.write_gpickle(G,"test.gpickle")
-    >>> G=nx.read_gpickle("test.gpickle")
-
-    References
-    ----------
-    .. [1] http://docs.python.org/library/pickle.html
-    """
-    return pickle.load(path)
-
-# fixture for nose tests
-def teardown_module(module):
-    import os
-    os.unlink('test.gpickle')
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/graphml.py b/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/graphml.py
deleted file mode 100644
index 7f896e0..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/graphml.py
+++ /dev/null
@@ -1,579 +0,0 @@
-"""
-*******
-GraphML
-*******
-Read and write graphs in GraphML format.
-
-This implementation does not support mixed graphs (directed and unidirected
-edges together), hyperedges, nested graphs, or ports.
-
-"GraphML is a comprehensive and easy-to-use file format for graphs. It
-consists of a language core to describe the structural properties of a
-graph and a flexible extension mechanism to add application-specific
-data. Its main features include support of
-
-    * directed, undirected, and mixed graphs,
-    * hypergraphs,
-    * hierarchical graphs,
-    * graphical representations,
-    * references to external data,
-    * application-specific attribute data, and
-    * light-weight parsers.
-
-Unlike many other file formats for graphs, GraphML does not use a
-custom syntax. Instead, it is based on XML and hence ideally suited as
-a common denominator for all kinds of services generating, archiving,
-or processing graphs."
-
-http://graphml.graphdrawing.org/
-
-Format
-------
-GraphML is an XML format.  See
-http://graphml.graphdrawing.org/specification.html for the specification and
-http://graphml.graphdrawing.org/primer/graphml-primer.html
-for examples.
-"""
-__author__ = """\n""".join(['Salim Fadhley',
-                            'Aric Hagberg (hagberg@lanl.gov)'
-                            ])
-
-__all__ = ['write_graphml', 'read_graphml', 'generate_graphml',
-           'parse_graphml', 'GraphMLWriter', 'GraphMLReader']
-
-import networkx as nx
-from networkx.utils import open_file, make_str
-import warnings
-try:
-    from xml.etree.cElementTree import Element, ElementTree, tostring, fromstring
-except ImportError:
-    try:
-        from xml.etree.ElementTree import Element, ElementTree, tostring, fromstring
-    except ImportError:
-        pass
-
-@open_file(1,mode='wb')
-def write_graphml(G, path, encoding='utf-8',prettyprint=True):
-    """Write G in GraphML XML format to path
-
-    Parameters
-    ----------
-    G : graph
-       A networkx graph
-    path : file or string
-       File or filename to write.
-       Filenames ending in .gz or .bz2 will be compressed.
-    encoding : string (optional)
-       Encoding for text data.
-    prettyprint : bool (optional)
-       If True use line breaks and indenting in output XML.
-
-    Examples
-    --------
-    >>> G=nx.path_graph(4)
-    >>> nx.write_graphml(G, "test.graphml")
-
-    Notes
-    -----
-    This implementation does not support mixed graphs (directed and unidirected
-    edges together) hyperedges, nested graphs, or ports.
-    """
-    writer = GraphMLWriter(encoding=encoding,prettyprint=prettyprint)
-    writer.add_graph_element(G)
-    writer.dump(path)
-
-def generate_graphml(G, encoding='utf-8',prettyprint=True):
-    """Generate GraphML lines for G
-
-    Parameters
-    ----------
-    G : graph
-       A networkx graph
-    encoding : string (optional)
-       Encoding for text data.
-    prettyprint : bool (optional)
-       If True use line breaks and indenting in output XML.
-
-    Examples
-    --------
-    >>> G=nx.path_graph(4)
-    >>> linefeed=chr(10) # linefeed=\n
-    >>> s=linefeed.join(nx.generate_graphml(G))  # doctest: +SKIP
-    >>> for line in nx.generate_graphml(G):  # doctest: +SKIP
-    ...    print(line)
-
-    Notes
-    -----
-    This implementation does not support mixed graphs (directed and unidirected
-    edges together) hyperedges, nested graphs, or ports.
-    """
-    writer = GraphMLWriter(encoding=encoding,prettyprint=prettyprint)
-    writer.add_graph_element(G)
-    for line in str(writer).splitlines():
-        yield line
-
-@open_file(0,mode='rb')
-def read_graphml(path,node_type=str):
-    """Read graph in GraphML format from path.
-
-    Parameters
-    ----------
-    path : file or string
-       File or filename to write.
-       Filenames ending in .gz or .bz2 will be compressed.
-
-    node_type: Python type (default: str)
-       Convert node ids to this type
-
-    Returns
-    -------
-    graph: NetworkX graph
-        If no parallel edges are found a Graph or DiGraph is returned.
-        Otherwise a MultiGraph or MultiDiGraph is returned.
-
-    Notes
-    -----
-    This implementation does not support mixed graphs (directed and unidirected
-    edges together), hypergraphs, nested graphs, or ports.
-
-    For multigraphs the GraphML edge "id" will be used as the edge
-    key.  If not specified then they "key" attribute will be used.  If
-    there is no "key" attribute a default NetworkX multigraph edge key
-    will be provided.
-
-    Files with the yEd "yfiles" extension will can be read but the graphics
-    information is discarded.
-
-    yEd compressed files ("file.graphmlz" extension) can be read by renaming
-    the file to "file.graphml.gz".
-
-    """
-    reader = GraphMLReader(node_type=node_type)
-    # need to check for multiple graphs
-    glist=list(reader(path=path))
-    return glist[0]
-
-
-def parse_graphml(graphml_string,node_type=str):
-    """Read graph in GraphML format from string.
-
-    Parameters
-    ----------
-    graphml_string : string
-       String containing graphml information
-       (e.g., contents of a graphml file).
-
-    node_type: Python type (default: str)
-       Convert node ids to this type
-
-    Returns
-    -------
-    graph: NetworkX graph
-        If no parallel edges are found a Graph or DiGraph is returned.
-        Otherwise a MultiGraph or MultiDiGraph is returned.
-
-    Examples
-    --------
-    >>> G=nx.path_graph(4)
-    >>> linefeed=chr(10) # linefeed=\n
-    >>> s=linefeed.join(nx.generate_graphml(G))
-    >>> H=nx.parse_graphml(s)
-
-    Notes
-    -----
-    This implementation does not support mixed graphs (directed and unidirected
-    edges together), hypergraphs, nested graphs, or ports.
-
-    For multigraphs the GraphML edge "id" will be used as the edge
-    key.  If not specified then they "key" attribute will be used.  If
-    there is no "key" attribute a default NetworkX multigraph edge key
-    will be provided.
-
-    """
-    reader = GraphMLReader(node_type=node_type)
-    # need to check for multiple graphs
-    glist=list(reader(string=graphml_string))
-    return glist[0]
-
-
-class GraphML(object):
-    NS_GRAPHML = "http://graphml.graphdrawing.org/xmlns"
-    NS_XSI = "http://www.w3.org/2001/XMLSchema-instance"
-    #xmlns:y="http://www.yworks.com/xml/graphml"
-    NS_Y = "http://www.yworks.com/xml/graphml"
-    SCHEMALOCATION = \
-        ' '.join(['http://graphml.graphdrawing.org/xmlns',
-                  'http://graphml.graphdrawing.org/xmlns/1.0/graphml.xsd'])
-
-    try:
-        chr(12345)     # Fails on Py!=3.
-        unicode = str  # Py3k's str is our unicode type
-        long = int     # Py3K's int is our long type
-    except ValueError:
-        # Python 2.x
-        pass
-
-    types=[(int,"integer"), # for Gephi GraphML bug
-           (str,"yfiles"),(str,"string"), (unicode,"string"),
-           (int,"int"), (long,"long"),
-           (float,"float"), (float,"double"),
-           (bool, "boolean")]
-
-    xml_type = dict(types)
-    python_type = dict(reversed(a) for a in types)
-    convert_bool={'true':True,'false':False,
-                  'True': True, 'False': False}
-
-
-
-class GraphMLWriter(GraphML):
-    def __init__(self, graph=None, encoding="utf-8",prettyprint=True):
-        try:
-            import xml.etree.ElementTree
-        except ImportError:
-             raise ImportError('GraphML writer requires '
-                               'xml.elementtree.ElementTree')
-        self.prettyprint=prettyprint
-        self.encoding = encoding
-        self.xml = Element("graphml",
-                           {'xmlns':self.NS_GRAPHML,
-                            'xmlns:xsi':self.NS_XSI,
-                            'xsi:schemaLocation':self.SCHEMALOCATION}
-                           )
-        self.keys={}
-
-        if graph is not None:
-            self.add_graph_element(graph)
-
-
-    def __str__(self):
-        if self.prettyprint:
-            self.indent(self.xml)
-        s=tostring(self.xml).decode(self.encoding)
-        return s
-
-    def get_key(self, name, attr_type, scope, default):
-        keys_key = (name, attr_type, scope)
-        try:
-            return self.keys[keys_key]
-        except KeyError:
-            new_id = "d%i" % len(list(self.keys))
-            self.keys[keys_key] = new_id
-            key_kwargs = {"id":new_id,
-                          "for":scope,
-                          "attr.name":name,
-                          "attr.type":attr_type}
-            key_element=Element("key",**key_kwargs)
-            # add subelement for data default value if present
-            if default is not None:
-                default_element=Element("default")
-                default_element.text=make_str(default)
-                key_element.append(default_element)
-            self.xml.insert(0,key_element)
-        return new_id
-
-
-    def add_data(self, name, element_type, value,
-                 scope="all",
-                 default=None):
-        """
-        Make a data element for an edge or a node. Keep a log of the
-        type in the keys table.
-        """
-        if element_type not in self.xml_type:
-            raise nx.NetworkXError('GraphML writer does not support '
-                                   '%s as data values.'%element_type)
-        key_id = self.get_key(name, self.xml_type[element_type], scope, default)
-        data_element = Element("data", key=key_id)
-        data_element.text = make_str(value)
-        return data_element
-
-    def add_attributes(self, scope, xml_obj, data, default):
-        """Appends attributes to edges or nodes.
-        """
-        for k,v in data.items():
-            default_value=default.get(k)
-            obj=self.add_data(make_str(k), type(v), make_str(v),
-                              scope=scope, default=default_value)
-            xml_obj.append(obj)
-
-    def add_nodes(self, G, graph_element):
-        for node,data in G.nodes_iter(data=True):
-            node_element = Element("node", id = make_str(node))
-            default=G.graph.get('node_default',{})
-            self.add_attributes("node", node_element, data, default)
-            graph_element.append(node_element)
-
-    def add_edges(self, G, graph_element):
-        if G.is_multigraph():
-            for u,v,key,data in G.edges_iter(data=True,keys=True):
-                edge_element = Element("edge",source=make_str(u),
-                                       target=make_str(v))
-                default=G.graph.get('edge_default',{})
-                self.add_attributes("edge", edge_element, data, default)
-                self.add_attributes("edge", edge_element,
-                                    {'key':key}, default)
-                graph_element.append(edge_element)
-        else:
-            for u,v,data in G.edges_iter(data=True):
-                edge_element = Element("edge",source=make_str(u),
-                                       target=make_str(v))
-                default=G.graph.get('edge_default',{})
-                self.add_attributes("edge", edge_element, data, default)
-                graph_element.append(edge_element)
-
-    def add_graph_element(self, G):
-        """
-        Serialize graph G in GraphML to the stream.
-        """
-        if G.is_directed():
-            default_edge_type='directed'
-        else:
-            default_edge_type='undirected'
-
-        graphid=G.graph.pop('id',None)
-        if graphid is None:
-            graph_element = Element("graph",
-                                edgedefault = default_edge_type)
-        else:
-            graph_element = Element("graph",
-                                edgedefault = default_edge_type,
-                                id=graphid)
-
-        default={}
-        data=dict((k,v) for (k,v) in  G.graph.items()
-                  if k not in ['node_default','edge_default'])
-        self.add_attributes("graph", graph_element, data, default)
-        self.add_nodes(G,graph_element)
-        self.add_edges(G,graph_element)
-        self.xml.append(graph_element)
-
-    def add_graphs(self, graph_list):
-        """
-        Add many graphs to this GraphML document.
-        """
-        for G in graph_list:
-            self.add_graph_element(G)
-
-    def dump(self, stream):
-        if self.prettyprint:
-            self.indent(self.xml)
-        document = ElementTree(self.xml)
-        header='<?xml version="1.0" encoding="%s"?>'%self.encoding
-        stream.write(header.encode(self.encoding))
-        document.write(stream, encoding=self.encoding)
-
-    def indent(self, elem, level=0):
-        # in-place prettyprint formatter
-        i = "\n" + level*"  "
-        if len(elem):
-            if not elem.text or not elem.text.strip():
-                elem.text = i + "  "
-            if not elem.tail or not elem.tail.strip():
-                elem.tail = i
-            for elem in elem:
-                self.indent(elem, level+1)
-            if not elem.tail or not elem.tail.strip():
-                elem.tail = i
-        else:
-            if level and (not elem.tail or not elem.tail.strip()):
-                elem.tail = i
-
-
-class GraphMLReader(GraphML):
-    """Read a GraphML document.  Produces NetworkX graph objects.
-    """
-    def __init__(self, node_type=str):
-        try:
-            import xml.etree.ElementTree
-        except ImportError:
-             raise ImportError('GraphML reader requires '
-                               'xml.elementtree.ElementTree')
-        self.node_type=node_type
-        self.multigraph=False # assume multigraph and test for parallel edges
-
-    def __call__(self, path=None, string=None):
-        if path is not None:
-          self.xml = ElementTree(file=path)
-        elif string is not None:
-          self.xml = fromstring(string)
-        else:
-          raise ValueError("Must specify either 'path' or 'string' as kwarg.")
-        (keys,defaults) = self.find_graphml_keys(self.xml)
-        for g in self.xml.findall("{%s}graph" % self.NS_GRAPHML):
-            yield self.make_graph(g, keys, defaults)
-
-    def make_graph(self, graph_xml, graphml_keys, defaults):
-        # set default graph type
-        edgedefault = graph_xml.get("edgedefault", None)
-        if edgedefault=='directed':
-            G=nx.MultiDiGraph()
-        else:
-            G=nx.MultiGraph()
-        # set defaults for graph attributes
-        G.graph['node_default']={}
-        G.graph['edge_default']={}
-        for key_id,value in defaults.items():
-            key_for=graphml_keys[key_id]['for']
-            name=graphml_keys[key_id]['name']
-            python_type=graphml_keys[key_id]['type']
-            if key_for=='node':
-                G.graph['node_default'].update({name:python_type(value)})
-            if key_for=='edge':
-                G.graph['edge_default'].update({name:python_type(value)})
-        # hyperedges are not supported
-        hyperedge=graph_xml.find("{%s}hyperedge" % self.NS_GRAPHML)
-        if hyperedge is not None:
-            raise nx.NetworkXError("GraphML reader does not support hyperedges")
-        # add nodes
-        for node_xml in graph_xml.findall("{%s}node" % self.NS_GRAPHML):
-            self.add_node(G, node_xml, graphml_keys)
-        # add edges
-        for edge_xml in graph_xml.findall("{%s}edge" % self.NS_GRAPHML):
-            self.add_edge(G, edge_xml, graphml_keys)
-        # add graph data
-        data = self.decode_data_elements(graphml_keys, graph_xml)
-        G.graph.update(data)
-
-        # switch to Graph or DiGraph if no parallel edges were found.
-        if not self.multigraph:
-            if G.is_directed():
-                return nx.DiGraph(G)
-            else:
-                return nx.Graph(G)
-        else:
-            return G
-
-    def add_node(self, G, node_xml, graphml_keys):
-        """Add a node to the graph.
-        """
-        # warn on finding unsupported ports tag
-        ports=node_xml.find("{%s}port" % self.NS_GRAPHML)
-        if ports is not None:
-            warnings.warn("GraphML port tag not supported.")
-        # find the node by id and cast it to the appropriate type
-        node_id = self.node_type(node_xml.get("id"))
-        # get data/attributes for node
-        data = self.decode_data_elements(graphml_keys, node_xml)
-        G.add_node(node_id, data)
-
-    def add_edge(self, G, edge_element, graphml_keys):
-        """Add an edge to the graph.
-        """
-        # warn on finding unsupported ports tag
-        ports=edge_element.find("{%s}port" % self.NS_GRAPHML)
-        if ports is not None:
-            warnings.warn("GraphML port tag not supported.")
-
-        # raise error if we find mixed directed and undirected edges
-        directed = edge_element.get("directed")
-        if G.is_directed() and directed=='false':
-            raise nx.NetworkXError(\
-                "directed=false edge found in directed graph.")
-        if (not G.is_directed()) and directed=='true':
-            raise nx.NetworkXError(\
-                "directed=true edge found in undirected graph.")
-
-        source = self.node_type(edge_element.get("source"))
-        target = self.node_type(edge_element.get("target"))
-        data = self.decode_data_elements(graphml_keys, edge_element)
-        # GraphML stores edge ids as an attribute
-        # NetworkX uses them as keys in multigraphs too if no key
-        # attribute is specified
-        edge_id = edge_element.get("id")
-        if edge_id:
-            data["id"] = edge_id
-        if G.has_edge(source,target):
-            # mark this as a multigraph
-            self.multigraph=True
-        if edge_id is None:
-            # no id specified, try using 'key' attribute as id
-            edge_id=data.pop('key',None)
-        G.add_edge(source, target, key=edge_id, **data)
-
-    def decode_data_elements(self, graphml_keys, obj_xml):
-        """Use the key information to decode the data XML if present."""
-        data = {}
-        for data_element in obj_xml.findall("{%s}data" % self.NS_GRAPHML):
-            key = data_element.get("key")
-            try:
-                data_name=graphml_keys[key]['name']
-                data_type=graphml_keys[key]['type']
-            except KeyError:
-                raise nx.NetworkXError("Bad GraphML data: no key %s"%key)
-            text=data_element.text
-            # assume anything with subelements is a yfiles extension
-            if text is not None and len(list(data_element))==0:
-                if data_type==bool:
-                    data[data_name] = self.convert_bool[text]
-                else:
-                    data[data_name] = data_type(text)
-            elif len(list(data_element)) > 0:
-                # Assume yfiles as subelements, try to extract node_label
-                node_label = None
-                for node_type in ['ShapeNode', 'SVGNode', 'ImageNode']:
-                    geometry = data_element.find("{%s}%s/{%s}Geometry" %
-                                (self.NS_Y, node_type, self.NS_Y))
-                    if geometry is not None:
-                        data['x'] = geometry.get('x')
-                        data['y'] = geometry.get('y')
-                    if node_label is None:
-                        node_label = data_element.find("{%s}%s/{%s}NodeLabel" %
-                                (self.NS_Y, node_type, self.NS_Y))
-                if node_label is not None:
-                    data['label'] = node_label.text
-
-                # check all the diffrent types of edges avaivable in yEd.
-                for e in ['PolyLineEdge', 'SplineEdge', 'QuadCurveEdge', 'BezierEdge', 'ArcEdge']:
-                	edge_label = data_element.find("{%s}%s/{%s}EdgeLabel"%
-                                               (self.NS_Y, e, (self.NS_Y)))
-                	if edge_label is not None:
-                		break
-
-                if edge_label is not None:
-                    data['label'] = edge_label.text
-        return data
-
-    def find_graphml_keys(self, graph_element):
-        """Extracts all the keys and key defaults from the xml.
-        """
-        graphml_keys = {}
-        graphml_key_defaults = {}
-        for k in graph_element.findall("{%s}key" % self.NS_GRAPHML):
-            attr_id = k.get("id")
-            attr_type=k.get('attr.type')
-            attr_name=k.get("attr.name")
-            yfiles_type=k.get("yfiles.type")
-            if yfiles_type is not None:
-                attr_name = yfiles_type
-                attr_type = 'yfiles'
-            if attr_type is None:
-                attr_type = "string"
-                warnings.warn("No key type for id %s. Using string"%attr_id)
-            if attr_name is None:
-                raise nx.NetworkXError("Unknown key for id %s in file."%attr_id)
-            graphml_keys[attr_id] = {
-                "name":attr_name,
-                "type":self.python_type[attr_type],
-                "for":k.get("for")}
-            # check for "default" subelement of key element
-            default=k.find("{%s}default" % self.NS_GRAPHML)
-            if default is not None:
-                graphml_key_defaults[attr_id]=default.text
-        return graphml_keys,graphml_key_defaults
-
-# fixture for nose tests
-def setup_module(module):
-    from nose import SkipTest
-    try:
-        import xml.etree.ElementTree
-    except:
-        raise SkipTest("xml.etree.ElementTree not available")
-
-# fixture for nose tests
-def teardown_module(module):
-    import os
-    try:
-        os.unlink('test.graphml')
-    except:
-        pass
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/json_graph/__init__.py b/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/json_graph/__init__.py
deleted file mode 100644
index ea3db6e..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/json_graph/__init__.py
+++ /dev/null
@@ -1,10 +0,0 @@
-"""
-*********
-JSON data 
-*********
-Generate and parse JSON serializable data for NetworkX graphs.
-"""
-from networkx.readwrite.json_graph.node_link import *
-from networkx.readwrite.json_graph.adjacency import *
-from networkx.readwrite.json_graph.tree import *
-from networkx.readwrite.json_graph.serialize import *
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/json_graph/adjacency.py b/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/json_graph/adjacency.py
deleted file mode 100644
index d5b0df2..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/json_graph/adjacency.py
+++ /dev/null
@@ -1,123 +0,0 @@
-#    Copyright (C) 2011-2013 by
-#    Aric Hagberg <hagberg@lanl.gov>
-#    Dan Schult <dschult@colgate.edu>
-#    Pieter Swart <swart@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-from copy import deepcopy
-from itertools import count,repeat
-import json
-import networkx as nx
-__author__ = """Aric Hagberg <aric.hagberg@gmail.com>"""
-__all__ = ['adjacency_data', 'adjacency_graph']
-
-def adjacency_data(G):
-    """Return data in adjacency format that is suitable for JSON serialization
-    and use in Javascript documents.
-
-    Parameters
-    ----------
-    G : NetworkX graph
-
-    Returns
-    -------
-    data : dict
-       A dictionary with node-link formatted data.
-
-    Examples
-    --------
-    >>> from networkx.readwrite import json_graph
-    >>> G = nx.Graph([(1,2)])
-    >>> data = json_graph.adjacency_data(G)
-
-    To serialize with json
-
-    >>> import json
-    >>> s = json.dumps(data)
-
-    Notes
-    -----
-    Graph, node, and link attributes will be written when using this format
-    but attribute keys must be strings if you want to serialize the resulting
-    data with JSON.
-
-    See Also
-    --------
-    adjacency_graph, node_link_data, tree_data
-    """
-    multigraph = G.is_multigraph()
-    data = {}
-    data['directed'] = G.is_directed()
-    data['multigraph'] = multigraph
-    data['graph'] = list(G.graph.items())
-    data['nodes'] = []
-    data['adjacency'] = []
-    for n,nbrdict in G.adjacency_iter():
-        data['nodes'].append(dict(id=n, **G.node[n]))
-        adj = []
-        if multigraph:
-            for nbr,key in nbrdict.items():
-                for k,d in key.items():
-                    adj.append(dict(id=nbr, key=k, **d))
-        else:
-            for nbr,d in nbrdict.items():
-                adj.append(dict(id=nbr, **d))
-        data['adjacency'].append(adj)
-    return data
-
-def adjacency_graph(data, directed=False, multigraph=True):
-    """Return graph from adjacency data format.
-
-    Parameters
-    ----------
-    data : dict
-        Adjacency list formatted graph data
-
-    Returns
-    -------
-    G : NetworkX graph
-       A NetworkX graph object
-
-    directed : bool
-        If True, and direction not specified in data, return a directed graph.
-
-    multigraph : bool
-        If True, and multigraph not specified in data, return a multigraph.
-
-    Examples
-    --------
-    >>> from networkx.readwrite import json_graph
-    >>> G = nx.Graph([(1,2)])
-    >>> data = json_graph.adjacency_data(G)
-    >>> H = json_graph.adjacency_graph(data)
-
-    See Also
-    --------
-    adjacency_graph, node_link_data, tree_data
-    """
-    multigraph = data.get('multigraph',multigraph)
-    directed = data.get('directed',directed)
-    if multigraph:
-        graph = nx.MultiGraph()
-    else:
-        graph = nx.Graph()
-    if directed:
-        graph = graph.to_directed()
-    graph.graph = dict(data.get('graph',[]))
-    mapping=[]
-    for d in data['nodes']:
-        node_data = d.copy()
-        node = node_data.pop('id')
-        mapping.append(node)
-        graph.add_node(node, attr_dict=node_data)
-    for i,d in enumerate(data['adjacency']):
-        source = mapping[i]
-        for tdata in d:
-            target_data = tdata.copy()
-            target = target_data.pop('id')
-            key = target_data.pop('key', None)
-            if not multigraph or key is None:
-                graph.add_edge(source,target,attr_dict=tdata)
-            else:
-                graph.add_edge(source,target,key=key, attr_dict=tdata)
-    return graph
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/json_graph/node_link.py b/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/json_graph/node_link.py
deleted file mode 100644
index 03f150f..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/json_graph/node_link.py
+++ /dev/null
@@ -1,116 +0,0 @@
-#    Copyright (C) 2011-2013 by
-#    Aric Hagberg <hagberg@lanl.gov>
-#    Dan Schult <dschult@colgate.edu>
-#    Pieter Swart <swart@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-from itertools import count,repeat
-import json
-import networkx as nx
-__author__ = """Aric Hagberg <hagberg@lanl.gov>"""
-__all__ = ['node_link_data', 'node_link_graph']
-
-def node_link_data(G):
-    """Return data in node-link format that is suitable for JSON serialization
-    and use in Javascript documents.
-
-    Parameters
-    ----------
-    G : NetworkX graph
-
-    Returns
-    -------
-    data : dict
-       A dictionary with node-link formatted data.
-
-    Examples
-    --------
-    >>> from networkx.readwrite import json_graph
-    >>> G = nx.Graph([(1,2)])
-    >>> data = json_graph.node_link_data(G)
-
-    To serialize with json
-
-    >>> import json
-    >>> s = json.dumps(data)
-
-    Notes
-    -----
-    Graph, node, and link attributes are stored in this format but keys
-    for attributes must be strings if you want to serialize with JSON.
-
-    See Also
-    --------
-    node_link_graph, adjacency_data, tree_data
-    """
-    multigraph = G.is_multigraph()
-    mapping = dict(zip(G,count()))
-    data = {}
-    data['directed'] = G.is_directed()
-    data['multigraph'] = multigraph
-    data['graph'] = list(G.graph.items())
-    data['nodes'] = [ dict(id=n, **G.node[n]) for n in G ]
-    if multigraph:
-        data['links'] = [ dict(source=mapping[u], target=mapping[v], key=k, **d)
-                          for u,v,k,d in G.edges(keys=True, data=True) ]
-    else:
-        data['links'] = [ dict(source=mapping[u], target=mapping[v], **d)
-                          for u,v,d in G.edges(data=True) ]
-
-    return data
-
-
-def node_link_graph(data, directed=False, multigraph=True):
-    """Return graph from node-link data format.
-
-    Parameters
-    ----------
-    data : dict
-        node-link formatted graph data
-
-    directed : bool
-        If True, and direction not specified in data, return a directed graph.
-
-    multigraph : bool
-        If True, and multigraph not specified in data, return a multigraph.
-
-    Returns
-    -------
-    G : NetworkX graph
-       A NetworkX graph object
-
-    Examples
-    --------
-    >>> from networkx.readwrite import json_graph
-    >>> G = nx.Graph([(1,2)])
-    >>> data = json_graph.node_link_data(G)
-    >>> H = json_graph.node_link_graph(data)
-
-    See Also
-    --------
-    node_link_data, adjacency_data, tree_data
-    """
-    multigraph = data.get('multigraph',multigraph)
-    directed = data.get('directed',directed)
-    if multigraph:
-        graph = nx.MultiGraph()
-    else:
-        graph = nx.Graph()
-    if directed:
-        graph = graph.to_directed()
-    mapping=[]
-    graph.graph = dict(data.get('graph',[]))
-    c = count()
-    for d in data['nodes']:
-        node = d.get('id',next(c))
-        mapping.append(node)
-        nodedata = dict((str(k),v) for k,v in d.items() if k!='id')
-        graph.add_node(node, **nodedata)
-    for d in data['links']:
-        link_data = d.copy()
-        source = link_data.pop('source')
-        target = link_data.pop('target')
-        edgedata = dict((str(k),v) for k,v in d.items()
-                        if k!='source' and k!='target')
-        graph.add_edge(mapping[source],mapping[target],**edgedata)
-    return graph
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/json_graph/serialize.py b/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/json_graph/serialize.py
deleted file mode 100644
index 5861836..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/json_graph/serialize.py
+++ /dev/null
@@ -1,31 +0,0 @@
-#    Copyright (C) 2011 by 
-#    Aric Hagberg <hagberg@lanl.gov>
-#    Dan Schult <dschult@colgate.edu>
-#    Pieter Swart <swart@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-from functools import partial,update_wrapper
-import json
-from networkx.readwrite.json_graph import node_link_data,node_link_graph
-__author__ = """Aric Hagberg (hagberg@lanl.gov))"""
-__all__ = ['dumps','loads','dump','load']
-
-class NXJSONEncoder(json.JSONEncoder):
-    def default(self, o):
-        return node_link_data(o)
-
-
-class NXJSONDecoder(json.JSONDecoder):
-    def decode(self, s):
-        d = json.loads(s)
-        return node_link_graph(d)
-
-# modification of json functions to serialize networkx graphs
-dumps = partial(json.dumps, cls=NXJSONEncoder)
-update_wrapper(dumps,json.dumps)
-loads = partial(json.loads, cls=NXJSONDecoder)
-update_wrapper(loads,json.loads)
-dump = partial(json.dump, cls=NXJSONEncoder)
-update_wrapper(dump,json.dump)
-load = partial(json.load, cls=NXJSONDecoder)
-update_wrapper(load,json.load)
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/json_graph/tests/test_adjacency.py b/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/json_graph/tests/test_adjacency.py
deleted file mode 100644
index f8bf214..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/json_graph/tests/test_adjacency.py
+++ /dev/null
@@ -1,52 +0,0 @@
-import json
-from nose.tools import assert_equal, assert_raises, assert_not_equal,assert_true
-import networkx as nx
-from networkx.readwrite.json_graph import *
-
-class TestAdjacency:
-
-    def test_graph(self):
-        G = nx.path_graph(4)
-        H = adjacency_graph(adjacency_data(G))
-        nx.is_isomorphic(G,H)
-
-    def test_graph_attributes(self):
-        G = nx.path_graph(4)
-        G.add_node(1,color='red')
-        G.add_edge(1,2,width=7)
-        G.graph['foo']='bar'
-        G.graph[1]='one'
-
-        H = adjacency_graph(adjacency_data(G))
-        assert_equal(H.graph['foo'],'bar')
-        assert_equal(H.node[1]['color'],'red')
-        assert_equal(H[1][2]['width'],7)
-
-        d = json.dumps(adjacency_data(G))
-        H = adjacency_graph(json.loads(d))
-        assert_equal(H.graph['foo'],'bar')
-        assert_equal(H.graph[1],'one')
-        assert_equal(H.node[1]['color'],'red')
-        assert_equal(H[1][2]['width'],7)
-
-    def test_digraph(self):
-        G = nx.DiGraph()
-        G.add_path([1,2,3])
-        H = adjacency_graph(adjacency_data(G))
-        assert_true(H.is_directed())
-        nx.is_isomorphic(G,H)
-
-    def test_multidigraph(self):
-        G = nx.MultiDiGraph()
-        G.add_path([1,2,3])
-        H = adjacency_graph(adjacency_data(G))
-        assert_true(H.is_directed())
-        assert_true(H.is_multigraph())
-
-    def test_multigraph(self):
-        G = nx.MultiGraph()
-        G.add_edge(1,2,key='first')
-        G.add_edge(1,2,key='second',color='blue')
-        H = adjacency_graph(adjacency_data(G))
-        nx.is_isomorphic(G,H)
-        assert_equal(H[1][2]['second']['color'],'blue')
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/json_graph/tests/test_node_link.py b/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/json_graph/tests/test_node_link.py
deleted file mode 100644
index 5430e0d..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/json_graph/tests/test_node_link.py
+++ /dev/null
@@ -1,44 +0,0 @@
-import json
-from nose.tools import assert_equal, assert_raises, assert_not_equal,assert_true
-import networkx as nx
-from networkx.readwrite.json_graph import *
-
-class TestNodeLink:
-
-    def test_graph(self):
-        G = nx.path_graph(4)
-        H = node_link_graph(node_link_data(G))
-        nx.is_isomorphic(G,H)
-
-    def test_graph_attributes(self):
-        G = nx.path_graph(4)
-        G.add_node(1,color='red')
-        G.add_edge(1,2,width=7)
-        G.graph[1]='one'
-        G.graph['foo']='bar'
-
-        H = node_link_graph(node_link_data(G))
-        assert_equal(H.graph['foo'],'bar')
-        assert_equal(H.node[1]['color'],'red')
-        assert_equal(H[1][2]['width'],7)
-
-        d=json.dumps(node_link_data(G))
-        H = node_link_graph(json.loads(d))
-        assert_equal(H.graph['foo'],'bar')
-        assert_equal(H.graph[1],'one')
-        assert_equal(H.node[1]['color'],'red')
-        assert_equal(H[1][2]['width'],7)
-
-    def test_digraph(self):
-        G = nx.DiGraph()
-        H = node_link_graph(node_link_data(G))
-        assert_true(H.is_directed())
-
-
-    def test_multigraph(self):
-        G = nx.MultiGraph()
-        G.add_edge(1,2,key='first')
-        G.add_edge(1,2,key='second',color='blue')
-        H = node_link_graph(node_link_data(G))
-        nx.is_isomorphic(G,H)
-        assert_equal(H[1][2]['second']['color'],'blue')
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/json_graph/tests/test_serialize.py b/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/json_graph/tests/test_serialize.py
deleted file mode 100644
index cc8d7ff..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/json_graph/tests/test_serialize.py
+++ /dev/null
@@ -1,49 +0,0 @@
-import json
-from nose.tools import assert_equal, assert_raises, assert_not_equal,assert_true
-import networkx as nx
-from networkx.readwrite.json_graph import *
-
-class TestAdjacency:
-
-    def test_graph(self):
-        G = nx.path_graph(4)
-        H = loads(dumps(G))
-        nx.is_isomorphic(G,H)
-
-    def test_graph_attributes(self):
-        G = nx.path_graph(4)
-        G.add_node(1,color='red')
-        G.add_edge(1,2,width=7)
-        G.graph['foo']='bar'
-        G.graph[1]='one'
-
-        H = loads(dumps(G))
-        assert_equal(H.graph['foo'],'bar')
-        assert_equal(H.graph[1],'one')
-        assert_equal(H.node[1]['color'],'red')
-        assert_equal(H[1][2]['width'],7)
-
-        try: 
-            from StringIO import StringIO
-        except:
-            from io import StringIO
-        io = StringIO()
-        dump(G,io)
-        io.seek(0)
-        H=load(io)
-        assert_equal(H.graph['foo'],'bar')
-        assert_equal(H.graph[1],'one')
-        assert_equal(H.node[1]['color'],'red')
-        assert_equal(H[1][2]['width'],7)
-
-
-    def test_digraph(self):
-        G = nx.DiGraph()
-        H = loads(dumps(G))
-        assert_true(H.is_directed())
-
-    def test_multidigraph(self):
-        G = nx.MultiDiGraph()
-        H = loads(dumps(G))
-        assert_true(H.is_directed())
-        assert_true(H.is_multigraph())
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/json_graph/tests/test_tree.py b/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/json_graph/tests/test_tree.py
deleted file mode 100644
index 19ba8f2..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/json_graph/tests/test_tree.py
+++ /dev/null
@@ -1,29 +0,0 @@
-import json
-from nose.tools import assert_equal, assert_raises, assert_not_equal,assert_true
-import networkx as nx
-from networkx.readwrite.json_graph import *
-
-class TestTree:
-
-    def test_graph(self):
-        G=nx.DiGraph()
-        G.add_nodes_from([1,2,3],color='red')
-        G.add_edge(1,2,foo=7)
-        G.add_edge(1,3,foo=10)
-        G.add_edge(3,4,foo=10)
-        H = tree_graph(tree_data(G,1))
-        nx.is_isomorphic(G,H)
-
-    def test_graph_attributes(self):
-        G=nx.DiGraph()
-        G.add_nodes_from([1,2,3],color='red')
-        G.add_edge(1,2,foo=7)
-        G.add_edge(1,3,foo=10)
-        G.add_edge(3,4,foo=10)
-        H = tree_graph(tree_data(G,1))
-        assert_equal(H.node[1]['color'],'red')
-
-        d = json.dumps(tree_data(G,1))
-        H = tree_graph(json.loads(d))
-        assert_equal(H.node[1]['color'],'red')
-        
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/json_graph/tree.py b/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/json_graph/tree.py
deleted file mode 100644
index d2229e9..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/json_graph/tree.py
+++ /dev/null
@@ -1,113 +0,0 @@
-#    Copyright (C) 2011 by 
-#    Aric Hagberg <hagberg@lanl.gov>
-#    Dan Schult <dschult@colgate.edu>
-#    Pieter Swart <swart@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-from itertools import count,repeat
-import json
-import networkx as nx
-__author__ = """Aric Hagberg (hagberg@lanl.gov))"""
-__all__ = ['tree_data',
-           'tree_graph']
-
-def tree_data(G, root):
-    """Return data in tree format that is suitable for JSON serialization
-    and use in Javascript documents.
-
-    Parameters
-    ----------
-    G : NetworkX graph
-       G must be an oriented tree
-
-    root : node
-       The root of the tree
-
-    Returns
-    -------
-    data : dict
-       A dictionary with node-link formatted data.
-
-    Examples
-    --------
-    >>> from networkx.readwrite import json_graph
-    >>> G = nx.DiGraph([(1,2)])
-    >>> data = json_graph.tree_data(G,root=1)
-
-    To serialize with json
-
-    >>> import json
-    >>> s = json.dumps(data)
-    
-    Notes
-    -----
-    Node attributes are stored in this format but keys 
-    for attributes must be strings if you want to serialize with JSON.
-    
-    Graph and edge attributes are not stored.
-
-    See Also
-    --------
-    tree_graph, node_link_data, node_link_data
-    """
-    if not G.number_of_nodes()==G.number_of_edges()+1:
-        raise TypeError("G is not a tree.")
-    if not G.is_directed():
-        raise TypeError("G is not directed")
-    def add_children(n, G):
-        nbrs = G[n]
-        if len(nbrs) == 0:
-            return []
-        children = []
-        for child in nbrs:
-            d = dict(id=child, **G.node[child])
-            c = add_children(child,G)
-            if c:
-                d['children'] = c
-            children.append(d)
-        return children
-    data = dict(id=root, **G.node[root])
-    data['children'] = add_children(root,G)
-    return data
-
-def tree_graph(data):
-    """Return graph from tree data format. 
-
-    Parameters
-    ----------
-    data : dict
-        Tree formatted graph data
-    
-    Returns
-    -------
-    G : NetworkX DiGraph
-
-    Examples
-    --------
-    >>> from networkx.readwrite import json_graph
-    >>> G = nx.DiGraph([(1,2)])
-    >>> data = json_graph.tree_data(G,root=1)
-    >>> H = json_graph.tree_graph(data)
-
-    See Also
-    --------
-    tree_graph, node_link_data, adjacency_data
-    """
-    graph = nx.DiGraph()
-    def add_children(parent, children):
-        for data in children:
-            child = data['id']
-            graph.add_edge(parent, child)
-            grandchildren = data.get('children',[])
-            if grandchildren:
-                add_children(child,grandchildren)
-            nodedata = dict((str(k),v) for k,v in data.items() 
-                            if k!='id' and k!='children')
-            graph.add_node(child,attr_dict=nodedata)
-    root = data['id']
-    children = data.get('children',[])
-    nodedata = dict((k,v) for k,v in data.items() 
-                    if k!='id' and k!='children')
-    graph.add_node(root, attr_dict=nodedata)
-    add_children(root, children)
-    return graph
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/leda.py b/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/leda.py
deleted file mode 100644
index a4d17db..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/leda.py
+++ /dev/null
@@ -1,106 +0,0 @@
-"""
-Read graphs in LEDA format.
-
-LEDA is a C++ class library for efficient data types and algorithms.
-
-Format
-------
-See http://www.algorithmic-solutions.info/leda_guide/graphs/leda_native_graph_fileformat.html
-
-"""
-# Original author: D. Eppstein, UC Irvine, August 12, 2003.
-# The original code at http://www.ics.uci.edu/~eppstein/PADS/ is public domain.
-__author__ = """Aric Hagberg (hagberg@lanl.gov)"""
-#    Copyright (C) 2004-2010 by 
-#    Aric Hagberg <hagberg@lanl.gov>
-#    Dan Schult <dschult@colgate.edu>
-#    Pieter Swart <swart@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-
-__all__ = ['read_leda', 'parse_leda']
-
-import networkx as nx 
-from networkx.exception import NetworkXError
-from networkx.utils import open_file, is_string_like
-
-@open_file(0,mode='rb')
-def read_leda(path, encoding='UTF-8'):
-    """Read graph in LEDA format from path.
-
-    Parameters
-    ----------
-    path : file or string
-       File or filename to read.  Filenames ending in .gz or .bz2  will be 
-       uncompressed.
-
-    Returns
-    -------
-    G : NetworkX graph
-
-    Examples
-    --------
-    G=nx.read_leda('file.leda')
- 
-    References
-    ----------
-    .. [1] http://www.algorithmic-solutions.info/leda_guide/graphs/leda_native_graph_fileformat.html
-    """
-    lines=(line.decode(encoding) for line in path)
-    G=parse_leda(lines)
-    return G
-
-
-def parse_leda(lines):
-    """Read graph in LEDA format from string or iterable.
-
-    Parameters
-    ----------
-    lines : string or iterable
-       Data in LEDA format.
-
-    Returns
-    -------
-    G : NetworkX graph
-
-    Examples
-    --------
-    G=nx.parse_leda(string)
- 
-    References
-    ----------
-    .. [1] http://www.algorithmic-solutions.info/leda_guide/graphs/leda_native_graph_fileformat.html
-    """
-    if is_string_like(lines): lines=iter(lines.split('\n'))
-    lines = iter([line.rstrip('\n') for line in lines \
-            if not (line.startswith('#') or line.startswith('\n') or line=='')])
-    for i in range(3):
-        next(lines)
-    # Graph
-    du = int(next(lines)) # -1=directed, -2=undirected
-    if du==-1:
-        G = nx.DiGraph()
-    else:
-        G = nx.Graph()
-        
-    # Nodes
-    n =int(next(lines)) # number of nodes
-    node={}
-    for i in range(1,n+1):  # LEDA counts from 1 to n
-        symbol=next(lines).rstrip().strip('|{}|  ')
-        if symbol=="": symbol=str(i) # use int if no label - could be trouble
-        node[i]=symbol
-
-    G.add_nodes_from([s for i,s in node.items()])
-	
-    # Edges
-    m = int(next(lines)) # number of edges
-    for i in range(m):
-        try:
-            s,t,reversal,label=next(lines).split()
-        except:
-            raise NetworkXError('Too few fields in LEDA.GRAPH edge %d'%(i+1))
-        # BEWARE: no handling of reversal edges
-        G.add_edge(node[int(s)],node[int(t)],label=label[2:-2])
-    return G
-
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/multiline_adjlist.py b/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/multiline_adjlist.py
deleted file mode 100644
index 30c3234..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/multiline_adjlist.py
+++ /dev/null
@@ -1,390 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-*************************
-Multi-line Adjacency List
-*************************
-Read and write NetworkX graphs as multi-line adjacency lists.
-
-The multi-line adjacency list format is useful for graphs with 
-nodes that can be meaningfully represented as strings.  With this format 
-simple edge data can be stored but node or graph data is not. 
-
-Format
-------
-The first label in a line is the source node label followed by the node degree
-d.  The next d lines are target node labels and optional edge data.
-That pattern repeats for all nodes in the graph.
-
-The graph with edges a-b, a-c, d-e can be represented as the following 
-adjacency list (anything following the # in a line is a comment):: 
-
-     # example.multiline-adjlist
-     a 2
-     b
-     c
-     d 1
-     e
-"""
-__author__ = '\n'.join(['Aric Hagberg <hagberg@lanl.gov>',
-                        'Dan Schult <dschult@colgate.edu>',
-                        'Loïc Séguin-C. <loicseguin@gmail.com>'])
-#    Copyright (C) 2004-2010 by 
-#    Aric Hagberg <hagberg@lanl.gov>
-#    Dan Schult <dschult@colgate.edu>
-#    Pieter Swart <swart@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-
-__all__ = ['generate_multiline_adjlist',
-           'write_multiline_adjlist',
-           'parse_multiline_adjlist',
-           'read_multiline_adjlist']
-
-from networkx.utils import make_str, open_file
-import networkx as nx
-
-def generate_multiline_adjlist(G, delimiter = ' '):
-    """Generate a single line of the graph G in multiline adjacency list format.
-
-    Parameters
-    ----------
-    G : NetworkX graph
-    
-    delimiter : string, optional
-       Separator for node labels 
-
-    Returns
-    -------
-    lines : string
-        Lines of data in multiline adjlist format.
-
-    Examples
-    --------
-    >>> G = nx.lollipop_graph(4, 3)
-    >>> for line in nx.generate_multiline_adjlist(G):
-    ...     print(line)    
-    0 3
-    1 {}
-    2 {}
-    3 {}
-    1 2
-    2 {}
-    3 {}
-    2 1
-    3 {}
-    3 1
-    4 {}
-    4 1
-    5 {}
-    5 1
-    6 {}
-    6 0
-
-    See Also
-    --------
-    write_multiline_adjlist, read_multiline_adjlist
-    """
-    if G.is_directed():
-        if G.is_multigraph():
-            for s,nbrs in G.adjacency_iter():
-                nbr_edges=[ (u,data) 
-                            for u,datadict in nbrs.items() 
-                            for key,data in datadict.items()]
-                deg=len(nbr_edges)
-                yield make_str(s)+delimiter+"%i"%(deg)
-                for u,d in nbr_edges:
-                    if d is None:
-                        yield make_str(u)
-                    else:
-                        yield make_str(u)+delimiter+make_str(d)
-        else: # directed single edges
-            for s,nbrs in G.adjacency_iter():
-                deg=len(nbrs)
-                yield make_str(s)+delimiter+"%i"%(deg)
-                for u,d in nbrs.items():
-                   if d is None:    
-                       yield make_str(u)
-                   else:   
-                       yield make_str(u)+delimiter+make_str(d)
-    else: # undirected
-        if G.is_multigraph():
-            seen=set()  # helper dict used to avoid duplicate edges
-            for s,nbrs in G.adjacency_iter():
-                nbr_edges=[ (u,data) 
-                            for u,datadict in nbrs.items() 
-                            if u not in seen
-                            for key,data in datadict.items()]
-                deg=len(nbr_edges)
-                yield make_str(s)+delimiter+"%i"%(deg)
-                for u,d in nbr_edges:
-                    if d is None:    
-                        yield make_str(u)
-                    else:   
-                        yield make_str(u)+delimiter+make_str(d)
-                seen.add(s)
-        else: # undirected single edges
-            seen=set()  # helper dict used to avoid duplicate edges
-            for s,nbrs in G.adjacency_iter():
-                nbr_edges=[ (u,d) for u,d in nbrs.items() if u not in seen]
-                deg=len(nbr_edges)
-                yield  make_str(s)+delimiter+"%i"%(deg)
-                for u,d in nbr_edges:
-                    if d is None:    
-                        yield make_str(u)
-                    else:   
-                        yield make_str(u)+delimiter+make_str(d)
-                seen.add(s)
-
-@open_file(1,mode='wb')
-def write_multiline_adjlist(G, path, delimiter=' ', 
-                            comments='#', encoding = 'utf-8'):
-    """ Write the graph G in multiline adjacency list format to path
-
-    Parameters
-    ----------
-    G : NetworkX graph
-    
-    comments : string, optional
-       Marker for comment lines
-
-    delimiter : string, optional
-       Separator for node labels 
-
-    encoding : string, optional
-       Text encoding. 
-
-    Examples
-    --------
-    >>> G=nx.path_graph(4)
-    >>> nx.write_multiline_adjlist(G,"test.adjlist")
-
-    The path can be a file handle or a string with the name of the file. If a
-    file handle is provided, it has to be opened in 'wb' mode.
-
-    >>> fh=open("test.adjlist",'wb')
-    >>> nx.write_multiline_adjlist(G,fh)
-
-    Filenames ending in .gz or .bz2 will be compressed.
-
-    >>> nx.write_multiline_adjlist(G,"test.adjlist.gz")
-
-    See Also
-    --------
-    read_multiline_adjlist
-    """
-    import sys
-    import time
-
-    pargs=comments+" ".join(sys.argv)
-    header = ("%s\n" % (pargs)
-             + comments + " GMT %s\n" % (time.asctime(time.gmtime()))
-             + comments + " %s\n" % (G.name))
-    path.write(header.encode(encoding))
-
-    for multiline in generate_multiline_adjlist(G, delimiter):
-        multiline+='\n'
-        path.write(multiline.encode(encoding))
-
-def parse_multiline_adjlist(lines, comments = '#', delimiter = None,
-                            create_using = None, nodetype = None,
-                            edgetype = None):
-    """Parse lines of a multiline adjacency list representation of a graph.
-
-    Parameters
-    ----------
-    lines : list or iterator of strings
-        Input data in multiline adjlist format
-
-    create_using: NetworkX graph container       
-       Use given NetworkX graph for holding nodes or edges.
-
-    nodetype : Python type, optional
-       Convert nodes to this type.  
-       
-    comments : string, optional
-       Marker for comment lines
-
-    delimiter : string, optional
-       Separator for node labels.  The default is whitespace. 
-
-    create_using: NetworkX graph container       
-       Use given NetworkX graph for holding nodes or edges.
-
-
-    Returns
-    -------
-    G: NetworkX graph
-        The graph corresponding to the lines in multiline adjacency list format.
-
-    Examples
-    --------
-    >>> lines = ['1 2',
-    ...          "2 {'weight':3, 'name': 'Frodo'}",
-    ...          "3 {}",
-    ...          "2 1",
-    ...          "5 {'weight':6, 'name': 'Saruman'}"]
-    >>> G = nx.parse_multiline_adjlist(iter(lines), nodetype = int)
-    >>> G.nodes()
-    [1, 2, 3, 5]
-    """
-    from ast import literal_eval
-    if create_using is None:
-        G=nx.Graph()
-    else:
-        try:
-            G=create_using
-            G.clear()
-        except:
-            raise TypeError("Input graph is not a networkx graph type")
-
-    for line in lines:
-        p=line.find(comments)
-        if p>=0:
-            line = line[:p]
-        if not line: continue
-        try:
-            (u,deg)=line.strip().split(delimiter)
-            deg=int(deg)
-        except:
-            raise TypeError("Failed to read node and degree on line (%s)"%line)
-        if nodetype is not None:
-            try:
-                u=nodetype(u)
-            except:
-                raise TypeError("Failed to convert node (%s) to type %s"\
-                      %(u,nodetype))
-        G.add_node(u)
-        for i in range(deg):
-            while True:
-                try:
-                    line = next(lines)
-                except StopIteration:
-                    msg = "Failed to find neighbor for node (%s)" % (u,)
-                    raise TypeError(msg)
-                p=line.find(comments)
-                if p>=0:
-                    line = line[:p]
-                if line: break
-            vlist=line.strip().split(delimiter)
-            numb=len(vlist)
-            if numb<1:
-                continue # isolated node
-            v=vlist.pop(0)
-            data=''.join(vlist)
-            if nodetype is not None:
-                try:
-                    v=nodetype(v)
-                except:
-                    raise TypeError(
-                            "Failed to convert node (%s) to type %s"\
-                                       %(v,nodetype))
-            if edgetype is not None:
-                try:
-                    edgedata={'weight':edgetype(data)}
-                except:
-                    raise TypeError(
-                            "Failed to convert edge data (%s) to type %s"\
-                                    %(data, edgetype))
-            else:
-                try: # try to evaluate 
-                    edgedata=literal_eval(data)
-                except:
-                    edgedata={}
-            G.add_edge(u,v,attr_dict=edgedata)
-
-    return G
-
-@open_file(0,mode='rb')
-def read_multiline_adjlist(path, comments="#", delimiter=None,
-                           create_using=None,
-                           nodetype=None, edgetype=None,
-                           encoding = 'utf-8'):
-    """Read graph in multi-line adjacency list format from path.
-
-    Parameters
-    ----------
-    path : string or file
-       Filename or file handle to read.
-       Filenames ending in .gz or .bz2 will be uncompressed.
-
-    create_using: NetworkX graph container       
-       Use given NetworkX graph for holding nodes or edges.
-
-    nodetype : Python type, optional
-       Convert nodes to this type.  
-       
-    edgetype : Python type, optional
-       Convert edge data to this type.
-
-    comments : string, optional
-       Marker for comment lines
-
-    delimiter : string, optional
-       Separator for node labels.  The default is whitespace. 
-
-    create_using: NetworkX graph container       
-       Use given NetworkX graph for holding nodes or edges.
-
-
-    Returns
-    -------
-    G: NetworkX graph
-
-    Examples
-    --------
-    >>> G=nx.path_graph(4)
-    >>> nx.write_multiline_adjlist(G,"test.adjlist")
-    >>> G=nx.read_multiline_adjlist("test.adjlist")
-
-    The path can be a file or a string with the name of the file. If a
-    file s provided, it has to be opened in 'rb' mode.
-
-    >>> fh=open("test.adjlist", 'rb')
-    >>> G=nx.read_multiline_adjlist(fh)
-
-    Filenames ending in .gz or .bz2 will be compressed.
-
-    >>> nx.write_multiline_adjlist(G,"test.adjlist.gz")
-    >>> G=nx.read_multiline_adjlist("test.adjlist.gz")
-
-    The optional nodetype is a function to convert node strings to nodetype.
-
-    For example
-
-    >>> G=nx.read_multiline_adjlist("test.adjlist", nodetype=int)
-
-    will attempt to convert all nodes to integer type.
-
-    The optional edgetype is a function to convert edge data strings to 
-    edgetype.  
-
-    >>> G=nx.read_multiline_adjlist("test.adjlist")
-
-    The optional create_using parameter is a NetworkX graph container.
-    The default is Graph(), an undirected graph.  To read the data as 
-    a directed graph use
-
-    >>> G=nx.read_multiline_adjlist("test.adjlist", create_using=nx.DiGraph())
-    
-    Notes
-    -----
-    This format does not store graph, node, or edge data.
-
-    See Also
-    --------
-    write_multiline_adjlist
-    """
-    lines = (line.decode(encoding) for line in path)
-    return parse_multiline_adjlist(lines, 
-                                   comments = comments,
-                                   delimiter = delimiter,
-                                   create_using = create_using,
-                                   nodetype = nodetype,
-                                   edgetype = edgetype)
-
-
-# fixture for nose tests
-def teardown_module(module):
-    import os
-    os.unlink('test.adjlist')
-    os.unlink('test.adjlist.gz')
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/nx_shp.py b/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/nx_shp.py
deleted file mode 100644
index d873ea6..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/nx_shp.py
+++ /dev/null
@@ -1,224 +0,0 @@
-"""
-*********
-Shapefile
-*********
-
-Generates a networkx.DiGraph from point and line shapefiles.
-
-"The Esri Shapefile or simply a shapefile is a popular geospatial vector
-data format for geographic information systems software. It is developed
-and regulated by Esri as a (mostly) open specification for data
-interoperability among Esri and other software products."
-See http://en.wikipedia.org/wiki/Shapefile for additional information.
-"""
-#    Copyright (C) 2004-2010 by
-#    Ben Reilly <benwreilly@gmail.com>
-#    Aric Hagberg <hagberg@lanl.gov>
-#    Dan Schult <dschult@colgate.edu>
-#    Pieter Swart <swart@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-import networkx as nx
-__author__ = """Ben Reilly (benwreilly@gmail.com)"""
-__all__ = ['read_shp', 'write_shp']
-
-
-def read_shp(path):
-    """Generates a networkx.DiGraph from shapefiles. Point geometries are
-    translated into nodes, lines into edges. Coordinate tuples are used as
-    keys. Attributes are preserved, line geometries are simplified into start
-    and end coordinates. Accepts a single shapefile or directory of many
-    shapefiles.
-
-    "The Esri Shapefile or simply a shapefile is a popular geospatial vector
-    data format for geographic information systems software [1]_."
-
-    Parameters
-    ----------
-    path : file or string
-       File, directory, or filename to read.
-
-    Returns
-    -------
-    G : NetworkX graph
-
-    Examples
-    --------
-    >>> G=nx.read_shp('test.shp') # doctest: +SKIP
-
-    References
-    ----------
-    .. [1] http://en.wikipedia.org/wiki/Shapefile
-    """
-    try:
-        from osgeo import ogr
-    except ImportError:
-        raise ImportError("read_shp requires OGR: http://www.gdal.org/")
-
-    net = nx.DiGraph()
-
-    def getfieldinfo(lyr, feature, flds):
-            f = feature
-            return [f.GetField(f.GetFieldIndex(x)) for x in flds]
-
-    def addlyr(lyr, fields):
-        for findex in xrange(lyr.GetFeatureCount()):
-            f = lyr.GetFeature(findex)
-            flddata = getfieldinfo(lyr, f, fields)
-            g = f.geometry()
-            attributes = dict(zip(fields, flddata))
-            attributes["ShpName"] = lyr.GetName()
-            if g.GetGeometryType() == 1:  # point
-                net.add_node((g.GetPoint_2D(0)), attributes)
-            if g.GetGeometryType() == 2:  # linestring
-                attributes["Wkb"] = g.ExportToWkb()
-                attributes["Wkt"] = g.ExportToWkt()
-                attributes["Json"] = g.ExportToJson()
-                last = g.GetPointCount() - 1
-                net.add_edge(g.GetPoint_2D(0), g.GetPoint_2D(last), attributes)
-
-    if isinstance(path, str):
-        shp = ogr.Open(path)
-        lyrcount = shp.GetLayerCount()  # multiple layers indicate a directory
-        for lyrindex in xrange(lyrcount):
-            lyr = shp.GetLayerByIndex(lyrindex)
-            flds = [x.GetName() for x in lyr.schema]
-            addlyr(lyr, flds)
-    return net
-
-
-def write_shp(G, outdir):
-    """Writes a networkx.DiGraph to two shapefiles, edges and nodes.
-    Nodes and edges are expected to have a Well Known Binary (Wkb) or
-    Well Known Text (Wkt) key in order to generate geometries. Also
-    acceptable are nodes with a numeric tuple key (x,y).
-
-    "The Esri Shapefile or simply a shapefile is a popular geospatial vector
-    data format for geographic information systems software [1]_."
-
-    Parameters
-    ----------
-    outdir : directory path
-       Output directory for the two shapefiles.
-
-    Returns
-    -------
-    None
-
-    Examples
-    --------
-    nx.write_shp(digraph, '/shapefiles') # doctest +SKIP
-
-    References
-    ----------
-    .. [1] http://en.wikipedia.org/wiki/Shapefile
-    """
-    try:
-        from osgeo import ogr
-    except ImportError:
-        raise ImportError("write_shp requires OGR: http://www.gdal.org/")
-    # easier to debug in python if ogr throws exceptions
-    ogr.UseExceptions()
-
-    def netgeometry(key, data):
-        if 'Wkb' in data:
-            geom = ogr.CreateGeometryFromWkb(data['Wkb'])
-        elif 'Wkt' in data:
-            geom = ogr.CreateGeometryFromWkt(data['Wkt'])
-        elif type(key[0]).__name__ == 'tuple':  # edge keys are packed tuples
-            geom = ogr.Geometry(ogr.wkbLineString)
-            _from, _to = key[0], key[1]
-            try:
-                geom.SetPoint(0, *_from)
-                geom.SetPoint(1, *_to)
-            except TypeError:
-                # assume user used tuple of int and choked ogr
-                _ffrom = [float(x) for x in _from]
-                _fto = [float(x) for x in _to]
-                geom.SetPoint(0, *_ffrom)
-                geom.SetPoint(1, *_fto)
-        else:
-            geom = ogr.Geometry(ogr.wkbPoint)
-            try:
-                geom.SetPoint(0, *key)
-            except TypeError:
-                # assume user used tuple of int and choked ogr
-                fkey = [float(x) for x in key]
-                geom.SetPoint(0, *fkey)
-
-        return geom
-
-    # Create_feature with new optional attributes arg (should be dict type)
-    def create_feature(geometry, lyr, attributes=None):
-        feature = ogr.Feature(lyr.GetLayerDefn())
-        feature.SetGeometry(g)
-        if attributes != None:
-            # Loop through attributes, assigning data to each field
-            for field, data in attributes.iter():
-                feature.SetField(field, data)
-        lyr.CreateFeature(feature)
-        feature.Destroy()
-
-    drv = ogr.GetDriverByName("ESRI Shapefile")
-    shpdir = drv.CreateDataSource(outdir)
-    # delete pre-existing output first otherwise ogr chokes
-    try:
-        shpdir.DeleteLayer("nodes")
-    except:
-        pass
-    nodes = shpdir.CreateLayer("nodes", None, ogr.wkbPoint)
-    for n in G:
-        data = G.node[n] or {}
-        g = netgeometry(n, data)
-        create_feature(g, nodes)
-    try:
-        shpdir.DeleteLayer("edges")
-    except:
-        pass
-    edges = shpdir.CreateLayer("edges", None, ogr.wkbLineString)
-
-    # New edge attribute write support merged into edge loop
-    fields = {}      # storage for field names and their data types
-    attributes = {}  # storage for attribute data (indexed by field names)
-
-    # Conversion dict between python and ogr types
-    OGRTypes = {int: ogr.OFTInteger, str: ogr.OFTString, float: ogr.OFTReal}
-
-    # Edge loop
-    for e in G.edges(data=True):
-        data = G.get_edge_data(*e)
-        g = netgeometry(e, data)
-        # Loop through attribute data in edges
-        for key, data in e[2].iter():
-            # Reject spatial data not required for attribute table
-            if (key != 'Json' and key != 'Wkt' and key != 'Wkb'
-                and key != 'ShpName'):
-                  # For all edges check/add field and data type to fields dict
-                    if key not in fields:
-                  # Field not in previous edges so add to dict
-                        if type(data) in OGRTypes:
-                            fields[key] = OGRTypes[type(data)]
-                        else:
-                            # Data type not supported, default to string (char 80)
-                            fields[key] = ogr.OFTString
-                        # Create the new field
-                        newfield = ogr.FieldDefn(key, fields[key])
-                        edges.CreateField(newfield)
-                        # Store the data from new field to dict for CreateLayer()
-                        attributes[key] = data
-                    else:
-                     # Field already exists, add data to dict for CreateLayer()
-                        attributes[key] = data
-        # Create the feature with, passing new attribute data
-        create_feature(g, edges, attributes)
-
-    nodes, edges = None, None
-
-
-# fixture for nose tests
-def setup_module(module):
-    from nose import SkipTest
-    try:
-        import ogr
-    except:
-        raise SkipTest("OGR not available")
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/nx_yaml.py b/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/nx_yaml.py
deleted file mode 100644
index 00c916f..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/nx_yaml.py
+++ /dev/null
@@ -1,109 +0,0 @@
-"""
-****
-YAML
-****
-Read and write NetworkX graphs in YAML format.
-
-"YAML is a data serialization format designed for human readability 
-and interaction with scripting languages."
-See http://www.yaml.org for documentation.
-
-Format
-------
-http://pyyaml.org/wiki/PyYAML
-
-"""
-__author__ = """Aric Hagberg (hagberg@lanl.gov)"""
-#    Copyright (C) 2004-2010 by 
-#    Aric Hagberg <hagberg@lanl.gov>
-#    Dan Schult <dschult@colgate.edu>
-#    Pieter Swart <swart@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-
-__all__ = ['read_yaml', 'write_yaml']
-
-import networkx as nx
-from networkx.utils import open_file
-
-@open_file(1,mode='w')
-def write_yaml(G, path, encoding='UTF-8', **kwds):
-    """Write graph G in YAML format to path. 
-
-    YAML is a data serialization format designed for human readability 
-    and interaction with scripting languages [1]_.
-
-    Parameters
-    ----------
-    G : graph
-       A NetworkX graph
-    path : file or string
-       File or filename to write. 
-       Filenames ending in .gz or .bz2 will be compressed.
-    encoding: string, optional
-       Specify which encoding to use when writing file.
-
-    Examples
-    --------
-    >>> G=nx.path_graph(4)
-    >>> nx.write_yaml(G,'test.yaml')
-
-    References
-    ----------
-    .. [1] http://www.yaml.org
-    """
-    try:
-        import yaml
-    except ImportError:
-        raise ImportError("write_yaml() requires PyYAML: http://pyyaml.org/")
-    yaml.dump(G, path, **kwds)
-    
-@open_file(0,mode='r')
-def read_yaml(path):
-    """Read graph in YAML format from path.
-
-    YAML is a data serialization format designed for human readability 
-    and interaction with scripting languages [1]_.
-
-    Parameters
-    ----------
-    path : file or string
-       File or filename to read.  Filenames ending in .gz or .bz2 
-       will be uncompressed.
-
-    Returns
-    -------
-    G : NetworkX graph
-
-    Examples
-    --------
-    >>> G=nx.path_graph(4)
-    >>> nx.write_yaml(G,'test.yaml')
-    >>> G=nx.read_yaml('test.yaml')
- 
-    References
-    ----------
-    .. [1] http://www.yaml.org
-
-    """
-    try:
-        import yaml
-    except ImportError:
-        raise ImportError("read_yaml() requires PyYAML: http://pyyaml.org/")
-
-    G=yaml.load(path)
-    return G
-
-
-# fixture for nose tests
-def setup_module(module):
-    from nose import SkipTest
-    try:
-        import yaml
-    except:
-        raise SkipTest("PyYAML not available")
-
-# fixture for nose tests
-def teardown_module(module):
-    import os
-    os.unlink('test.yaml')
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/p2g.py b/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/p2g.py
deleted file mode 100644
index 92dca9d..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/p2g.py
+++ /dev/null
@@ -1,107 +0,0 @@
-"""
-This module provides the following: read and write of p2g format 
-used in metabolic pathway studies.
-
-See http://www.cs.purdue.edu/homes/koyuturk/pathway/ for a description.
-
-The summary is included here:
-
-A file that describes a uniquely labeled graph (with extension ".gr")
-format looks like the following:
-
-
-name
-3 4
-a
-1 2
-b
-
-c
-0 2
-
-"name" is simply a description of what the graph corresponds to. The
-second line displays the number of nodes and number of edges,
-respectively. This sample graph contains three nodes labeled "a", "b",
-and "c". The rest of the graph contains two lines for each node. The
-first line for a node contains the node label. After the declaration
-of the node label, the out-edges of that node in the graph are
-provided. For instance, "a" is linked to nodes 1 and 2, which are
-labeled "b" and "c", while the node labeled "b" has no outgoing
-edges. Observe that node labeled "c" has an outgoing edge to
-itself. Indeed, self-loops are allowed. Node index starts from 0.
-
-"""
-#    Copyright (C) 2008-2012 by 
-#    Aric Hagberg <hagberg@lanl.gov>
-#    Dan Schult <dschult@colgate.edu>
-#    Pieter Swart <swart@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-import networkx
-from networkx.utils import is_string_like,open_file
-__author__ = '\n'.join(['Willem Ligtenberg (w.p.a.ligtenberg@tue.nl)',
-                      'Aric Hagberg (aric.hagberg@gmail.com)'])
-
-@open_file(1,mode='w')
-def write_p2g(G, path, encoding = 'utf-8'):
-    """Write NetworkX graph in p2g format.
-
-    Notes
-    -----
-    This format is meant to be used with directed graphs with
-    possible self loops.
-    """
-    path.write(("%s\n"%G.name).encode(encoding))
-    path.write(("%s %s\n"%(G.order(),G.size())).encode(encoding))
-    nodes = G.nodes()
-    # make dictionary mapping nodes to integers
-    nodenumber=dict(zip(nodes,range(len(nodes)))) 
-    for n in nodes:
-        path.write(("%s\n"%n).encode(encoding))
-        for nbr in G.neighbors(n):
-            path.write(("%s "%nodenumber[nbr]).encode(encoding))
-        path.write("\n".encode(encoding))
-
-@open_file(0,mode='r')
-def read_p2g(path, encoding='utf-8'):
-    """Read graph in p2g format from path. 
-
-    Returns
-    -------
-    MultiDiGraph
-
-    Notes
-    -----
-    If you want a DiGraph (with no self loops allowed and no edge data)
-    use D=networkx.DiGraph(read_p2g(path))
-    """
-    lines = (line.decode(encoding) for line in path)
-    G=parse_p2g(lines)
-    return G
-
-def parse_p2g(lines):
-    """Parse p2g format graph from string or iterable. 
-
-    Returns
-    -------
-    MultiDiGraph
-    """
-    description = next(lines).strip()
-    # are multiedges (parallel edges) allowed?
-    G=networkx.MultiDiGraph(name=description,selfloops=True)
-    nnodes,nedges=map(int,next(lines).split())
-    nodelabel={}
-    nbrs={}
-    # loop over the nodes keeping track of node labels and out neighbors
-    # defer adding edges until all node labels are known
-    for i in range(nnodes):
-        n=next(lines).strip()
-        nodelabel[i]=n
-        G.add_node(n)
-        nbrs[n]=map(int,next(lines).split())
-    # now we know all of the node labels so we can add the edges
-    # with the correct labels        
-    for n in G:
-        for nbr in nbrs[n]:
-            G.add_edge(n,nodelabel[nbr])
-    return G
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/pajek.py b/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/pajek.py
deleted file mode 100644
index ffc3641..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/pajek.py
+++ /dev/null
@@ -1,231 +0,0 @@
-"""
-*****
-Pajek
-*****
-Read graphs in Pajek format.
-
-This implementation handles directed and undirected graphs including
-those with self loops and parallel edges.  
-
-Format
-------
-See http://vlado.fmf.uni-lj.si/pub/networks/pajek/doc/draweps.htm
-for format information.
-"""
-#    Copyright (C) 2008-2011 by 
-#    Aric Hagberg <hagberg@lanl.gov>
-#    Dan Schult <dschult@colgate.edu>
-#    Pieter Swart <swart@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-import networkx as nx
-from networkx.utils import is_string_like, open_file, make_str
-__author__ = """Aric Hagberg (hagberg@lanl.gov)"""
-__all__ = ['read_pajek', 'parse_pajek', 'generate_pajek', 'write_pajek']
-
-def generate_pajek(G):
-    """Generate lines in Pajek graph format.
-
-    Parameters
-    ----------
-    G : graph
-       A Networkx graph
-
-    References
-    ----------
-    See http://vlado.fmf.uni-lj.si/pub/networks/pajek/doc/draweps.htm
-    for format information.
-    """
-    if G.name=='': 
-       name='NetworkX'
-    else:
-       name=G.name
-    # Apparently many Pajek format readers can't process this line
-    # So we'll leave it out for now.
-    # yield '*network %s'%name
-
-    # write nodes with attributes
-    yield '*vertices %s'%(G.order())
-    nodes = G.nodes()
-    # make dictionary mapping nodes to integers
-    nodenumber=dict(zip(nodes,range(1,len(nodes)+1))) 
-    for n in nodes:
-        na=G.node.get(n,{})
-        x=na.get('x',0.0)
-        y=na.get('y',0.0)
-        id=int(na.get('id',nodenumber[n]))
-        nodenumber[n]=id
-        shape=na.get('shape','ellipse')
-        s=' '.join(map(make_qstr,(id,n,x,y,shape)))
-        for k,v in na.items():
-            s+=' %s %s'%(make_qstr(k),make_qstr(v))
-        yield s
-
-    # write edges with attributes         
-    if G.is_directed():
-        yield '*arcs'
-    else:
-        yield '*edges'
-    for u,v,edgedata in G.edges(data=True):
-        d=edgedata.copy()
-        value=d.pop('weight',1.0) # use 1 as default edge value
-        s=' '.join(map(make_qstr,(nodenumber[u],nodenumber[v],value)))
-        for k,v in d.items():
-            s+=' %s %s'%(make_qstr(k),make_qstr(v))
-            s+=' %s %s'%(k,v)
-        yield s
-
-@open_file(1,mode='wb')
-def write_pajek(G, path, encoding='UTF-8'):
-    """Write graph in Pajek format to path.
-
-    Parameters
-    ----------
-    G : graph
-       A Networkx graph
-    path : file or string
-       File or filename to write.  
-       Filenames ending in .gz or .bz2 will be compressed.
-
-    Examples
-    --------
-    >>> G=nx.path_graph(4)
-    >>> nx.write_pajek(G, "test.net")
-
-    References
-    ----------
-    See http://vlado.fmf.uni-lj.si/pub/networks/pajek/doc/draweps.htm
-    for format information.
-    """
-    for line in generate_pajek(G):
-        line+='\n'
-        path.write(line.encode(encoding))
-
-@open_file(0,mode='rb')
-def read_pajek(path,encoding='UTF-8'):
-    """Read graph in Pajek format from path. 
-
-    Parameters
-    ----------
-    path : file or string
-       File or filename to write.  
-       Filenames ending in .gz or .bz2 will be uncompressed.
-
-    Returns
-    -------
-    G : NetworkX MultiGraph or MultiDiGraph.
-
-    Examples
-    --------
-    >>> G=nx.path_graph(4)
-    >>> nx.write_pajek(G, "test.net")
-    >>> G=nx.read_pajek("test.net")
-
-    To create a Graph instead of a MultiGraph use
-
-    >>> G1=nx.Graph(G)
-
-    References
-    ----------
-    See http://vlado.fmf.uni-lj.si/pub/networks/pajek/doc/draweps.htm
-    for format information.
-    """
-    lines = (line.decode(encoding) for line in path)
-    return parse_pajek(lines)
-
-def parse_pajek(lines):
-    """Parse Pajek format graph from string or iterable.
-
-    Parameters
-    ----------
-    lines : string or iterable
-       Data in Pajek format.
-
-    Returns
-    -------
-    G : NetworkX graph
-
-    See Also
-    --------
-    read_pajek()
-
-    """
-    import shlex
-    # multigraph=False
-    if is_string_like(lines): lines=iter(lines.split('\n'))
-    lines = iter([line.rstrip('\n') for line in lines])
-    G=nx.MultiDiGraph() # are multiedges allowed in Pajek? assume yes
-    while lines:
-        try:
-            l=next(lines)
-        except: #EOF
-            break
-        if l.lower().startswith("*network"):
-            label,name=l.split()
-            G.name=name
-        if l.lower().startswith("*vertices"):
-            nodelabels={}
-            l,nnodes=l.split()
-            for i in range(int(nnodes)):
-                splitline=shlex.split(str(next(lines)))
-                id,label=splitline[0:2]
-                G.add_node(label)
-                nodelabels[id]=label
-                G.node[label]={'id':id}
-                try: 
-                    x,y,shape=splitline[2:5]
-                    G.node[label].update({'x':float(x),
-                                          'y':float(y),
-                                          'shape':shape})
-                except:
-                    pass
-                extra_attr=zip(splitline[5::2],splitline[6::2])
-                G.node[label].update(extra_attr)
-        if l.lower().startswith("*edges") or l.lower().startswith("*arcs"):
-            if l.lower().startswith("*edge"):
-               # switch from multidigraph to multigraph
-                G=nx.MultiGraph(G)
-            if l.lower().startswith("*arcs"):
-               # switch to directed with multiple arcs for each existing edge
-                G=G.to_directed()
-            for l in lines:
-                splitline=shlex.split(str(l))
-                if len(splitline)<2:
-                    continue
-                ui,vi=splitline[0:2]
-                u=nodelabels.get(ui,ui)
-                v=nodelabels.get(vi,vi)
-                # parse the data attached to this edge and put in a dictionary 
-                edge_data={}
-                try:
-                    # there should always be a single value on the edge?
-                    w=splitline[2:3]
-                    edge_data.update({'weight':float(w[0])})
-                except:
-                    pass
-                    # if there isn't, just assign a 1
-#                    edge_data.update({'value':1})
-                extra_attr=zip(splitline[3::2],splitline[4::2])
-                edge_data.update(extra_attr)
-                # if G.has_edge(u,v):
-                #     multigraph=True
-                G.add_edge(u,v,**edge_data)
-    return G
-
-
-
-def make_qstr(t):
-    """Return the string representation of t. 
-    Add outer double-quotes if the string has a space.
-    """
-    if not is_string_like(t): 
-        t = str(t)
-    if " " in t: 
-        t=r'"%s"'%t
-    return t
-
-
-# fixture for nose tests
-def teardown_module(module):
-    import os
-    os.unlink('test.net')
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/sparsegraph6.py b/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/sparsegraph6.py
deleted file mode 100644
index 440c92a..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/sparsegraph6.py
+++ /dev/null
@@ -1,169 +0,0 @@
-"""
-**************
-SparseGraph 6
-**************
-Read graphs in graph6 and sparse6 format.
-
-Format
-------
-
-"graph6 and sparse6 are formats for storing undirected graphs in a
-compact manner, using only printable ASCII characters. Files in these
-formats have text type and contain one line per graph."
-http://cs.anu.edu.au/~bdm/data/formats.html
-
-See http://cs.anu.edu.au/~bdm/data/formats.txt for details.
-"""
-# Original author: D. Eppstein, UC Irvine, August 12, 2003.
-# The original code at http://www.ics.uci.edu/~eppstein/PADS/ is public domain.
-__author__ = """Aric Hagberg (hagberg@lanl.gov)"""
-#    Copyright (C) 2004-2010 by 
-#    Aric Hagberg <hagberg@lanl.gov>
-#    Dan Schult <dschult@colgate.edu>
-#    Pieter Swart <swart@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-
-__all__ = ['read_graph6', 'parse_graph6', 'read_graph6_list',
-           'read_sparse6', 'parse_sparse6', 'read_sparse6_list']
-
-import networkx as nx
-from networkx.exception import NetworkXError
-from networkx.utils import open_file
-	
-# graph6
-
-def read_graph6(path):
-    """Read simple undirected graphs in graph6 format from path.
-
-    Returns a single Graph.
-    """
-    return read_graph6_list(path)[0]
-	
-def parse_graph6(str):
-    """Read a simple undirected graph in graph6 format from string.
-
-    Returns a single Graph.
-    """
-    def bits():
-        """Return sequence of individual bits from 6-bit-per-value
-        list of data values."""
-        for d in data:
-            for i in [5,4,3,2,1,0]:
-                yield (d>>i)&1
-
-    if str.startswith('>>graph6<<'):
-        str = str[10:]
-    data = graph6data(str)
-    n, data = graph6n(data)
-    nd = (n*(n-1)//2 + 5) // 6
-    if len(data) != nd:
-        raise NetworkXError(\
-            'Expected %d bits but got %d in graph6' % (n*(n-1)//2, len(data)*6))
-
-    G=nx.Graph()
-    G.add_nodes_from(range(n))
-    for (i,j),b in zip([(i,j) for j in range(1,n) for i in range(j)], bits()):
-        if b: G.add_edge(i,j)
-    return G
-
-@open_file(0,mode='rt')
-def read_graph6_list(path):
-    """Read simple undirected graphs in graph6 format from path.
-
-    Returns a list of Graphs, one for each line in file.
-    """
-    glist=[]
-    for line in path:
-        line = line.strip()
-        if not len(line): continue
-        glist.append(parse_graph6(line))
-    return glist
-
-# sparse6
-
-def read_sparse6(path):
-    """Read simple undirected graphs in sparse6 format from path.
-
-    Returns a single MultiGraph."""
-    return read_sparse6_list(path)[0]
-
-@open_file(0,mode='rt')
-def read_sparse6_list(path):
-    """Read undirected graphs in sparse6 format from path.
-
-    Returns a list of MultiGraphs, one for each line in file."""
-    glist=[]
-    for line in path:
-        line = line.strip()
-        if not len(line): continue
-        glist.append(parse_sparse6(line))
-    return glist
-
-def parse_sparse6(string):
-    """Read undirected graph in sparse6 format from string.
-
-    Returns a MultiGraph.
-    """
-    if string.startswith('>>sparse6<<'):
-        string = str[10:]
-    if not string.startswith(':'):
-        raise NetworkXError('Expected colon in sparse6')
-    n, data = graph6n(graph6data(string[1:]))
-    k = 1
-    while 1<<k < n:
-        k += 1
-	
-    def parseData():
-        """Return stream of pairs b[i], x[i] for sparse6 format."""
-        chunks = iter(data)
-        d = None # partial data word
-        dLen = 0 # how many unparsed bits are left in d
-    
-        while 1:
-            if dLen < 1:
-                d = next(chunks)
-                dLen = 6
-            dLen -= 1
-            b = (d>>dLen) & 1 # grab top remaining bit
-			
-            x = d & ((1<<dLen)-1) # partially built up value of x
-            xLen = dLen		# how many bits included so far in x
-            while xLen < k:	# now grab full chunks until we have enough
-                d = next(chunks)
-                dLen = 6
-                x = (x<<6) + d
-                xLen += 6
-            x = (x >> (xLen - k)) # shift back the extra bits
-            dLen = xLen - k
-            yield b,x
-	
-    v = 0
-
-    G=nx.MultiGraph()
-    G.add_nodes_from(range(n))
-
-    for b,x in parseData():
-        if b: v += 1
-        if x >= n: break # padding with ones can cause overlarge number here
-        elif x > v: v = x
-        else:
-            G.add_edge(x,v)
-
-    return G
-
-# helper functions
-
-def graph6data(str):
-    """Convert graph6 character sequence to 6-bit integers."""
-    v = [ord(c)-63 for c in str]
-    if min(v) < 0 or max(v) > 63:
-        return None
-    return v
-	
-def graph6n(data):
-    """Read initial one or four-unit value from graph6 sequence.  
-    Return value, rest of seq."""
-    if data[0] <= 62:
-        return data[0], data[1:]
-    return (data[1]<<12) + (data[2]<<6) + data[3], data[4:]
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/tests/test_adjlist.py b/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/tests/test_adjlist.py
deleted file mode 100644
index 9b3c0f2..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/tests/test_adjlist.py
+++ /dev/null
@@ -1,283 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-    Unit tests for adjlist.
-"""
-import io
-from nose.tools import assert_equal, assert_raises, assert_not_equal
-import os
-import tempfile
-import networkx as nx
-from networkx.testing import *
-
-
-class TestAdjlist():
-
-    def setUp(self):
-        self.G=nx.Graph(name="test")
-        e=[('a','b'),('b','c'),('c','d'),('d','e'),('e','f'),('a','f')]
-        self.G.add_edges_from(e)
-        self.G.add_node('g')
-        self.DG=nx.DiGraph(self.G)
-        self.XG=nx.MultiGraph()
-        self.XG.add_weighted_edges_from([(1,2,5),(1,2,5),(1,2,1),(3,3,42)])
-        self. XDG=nx.MultiDiGraph(self.XG)
-
-    def test_read_multiline_adjlist_1(self):
-        # Unit test for https://networkx.lanl.gov/trac/ticket/252
-        s = b"""# comment line
-1 2
-# comment line
-2
-3
-"""
-        bytesIO = io.BytesIO(s)
-        G = nx.read_multiline_adjlist(bytesIO)
-        adj = {'1': {'3': {}, '2': {}}, '3': {'1': {}}, '2': {'1': {}}}
-        assert_equal(G.adj, adj)
-
-    def test_unicode(self):
-        G = nx.Graph()
-        try: # Python 3.x
-            name1 = chr(2344) + chr(123) + chr(6543)
-            name2 = chr(5543) + chr(1543) + chr(324)
-        except ValueError: # Python 2.6+
-            name1 = unichr(2344) + unichr(123) + unichr(6543)
-            name2 = unichr(5543) + unichr(1543) + unichr(324)
-        G.add_edge(name1, 'Radiohead', {name2: 3})
-        fd, fname = tempfile.mkstemp()
-        nx.write_multiline_adjlist(G, fname)
-        H = nx.read_multiline_adjlist(fname)
-        assert_equal(G.adj, H.adj)
-        os.close(fd)
-        os.unlink(fname)
-
-    def test_latin1_error(self):
-        G = nx.Graph()
-        try: # Python 3.x
-            name1 = chr(2344) + chr(123) + chr(6543)
-            name2 = chr(5543) + chr(1543) + chr(324)
-        except ValueError: # Python 2.6+
-            name1 = unichr(2344) + unichr(123) + unichr(6543)
-            name2 = unichr(5543) + unichr(1543) + unichr(324)
-        G.add_edge(name1, 'Radiohead', {name2: 3})
-        fd, fname = tempfile.mkstemp()
-        assert_raises(UnicodeEncodeError,
-                      nx.write_multiline_adjlist,
-                      G, fname, encoding = 'latin-1')
-        os.close(fd)
-        os.unlink(fname)
-
-    def test_latin1(self):
-        G = nx.Graph()
-        try: # Python 3.x
-            blurb = chr(1245) # just to trigger the exception
-            name1 = 'Bj' + chr(246) + 'rk'
-            name2 = chr(220) + 'ber'
-        except ValueError: # Python 2.6+
-            name1 = 'Bj' + unichr(246) + 'rk'
-            name2 = unichr(220) + 'ber'
-        G.add_edge(name1, 'Radiohead', {name2: 3})
-        fd, fname = tempfile.mkstemp()
-        nx.write_multiline_adjlist(G, fname, encoding = 'latin-1')
-        H = nx.read_multiline_adjlist(fname, encoding = 'latin-1')
-        assert_equal(G.adj, H.adj)
-        os.close(fd)
-        os.unlink(fname)
-
-
-
-    def test_adjlist_graph(self):
-        G=self.G
-        (fd,fname)=tempfile.mkstemp()
-        nx.write_adjlist(G,fname)
-        H=nx.read_adjlist(fname)
-        H2=nx.read_adjlist(fname)
-        assert_not_equal(H,H2) # they should be different graphs
-        assert_equal(sorted(H.nodes()),sorted(G.nodes()))
-        assert_equal(sorted(H.edges()),sorted(G.edges()))
-        os.close(fd)
-        os.unlink(fname)
-
-    def test_adjlist_digraph(self):
-        G=self.DG
-        (fd,fname)=tempfile.mkstemp()
-        nx.write_adjlist(G,fname)
-        H=nx.read_adjlist(fname,create_using=nx.DiGraph())
-        H2=nx.read_adjlist(fname,create_using=nx.DiGraph())
-        assert_not_equal(H,H2) # they should be different graphs
-        assert_equal(sorted(H.nodes()),sorted(G.nodes()))
-        assert_equal(sorted(H.edges()),sorted(G.edges()))
-        os.close(fd)
-        os.unlink(fname)
-
-
-    def test_adjlist_integers(self):
-        (fd,fname)=tempfile.mkstemp()
-        G=nx.convert_node_labels_to_integers(self.G)
-        nx.write_adjlist(G,fname)
-        H=nx.read_adjlist(fname,nodetype=int)
-        H2=nx.read_adjlist(fname,nodetype=int)
-        assert_equal(sorted(H.nodes()),sorted(G.nodes()))
-        assert_equal(sorted(H.edges()),sorted(G.edges()))
-        os.close(fd)
-        os.unlink(fname)
-
-
-    def test_adjlist_digraph(self):
-        G=self.DG
-        (fd,fname)=tempfile.mkstemp()
-        nx.write_adjlist(G,fname)
-        H=nx.read_adjlist(fname,create_using=nx.DiGraph())
-        H2=nx.read_adjlist(fname,create_using=nx.DiGraph())
-        assert_not_equal(H,H2) # they should be different graphs
-        assert_equal(sorted(H.nodes()),sorted(G.nodes()))
-        assert_equal(sorted(H.edges()),sorted(G.edges()))
-        os.close(fd)
-        os.unlink(fname)
-
-
-    def test_adjlist_multigraph(self):
-        G=self.XG
-        (fd,fname)=tempfile.mkstemp()
-        nx.write_adjlist(G,fname)
-        H=nx.read_adjlist(fname,nodetype=int,
-                          create_using=nx.MultiGraph())
-        H2=nx.read_adjlist(fname,nodetype=int,
-                           create_using=nx.MultiGraph())
-        assert_not_equal(H,H2) # they should be different graphs
-        assert_equal(sorted(H.nodes()),sorted(G.nodes()))
-        assert_equal(sorted(H.edges()),sorted(G.edges()))
-        os.close(fd)
-        os.unlink(fname)
-
-    def test_adjlist_multidigraph(self):
-        G=self.XDG
-        (fd,fname)=tempfile.mkstemp()
-        nx.write_adjlist(G,fname)
-        H=nx.read_adjlist(fname,nodetype=int,
-                          create_using=nx.MultiDiGraph())
-        H2=nx.read_adjlist(fname,nodetype=int,
-                           create_using=nx.MultiDiGraph())
-        assert_not_equal(H,H2) # they should be different graphs
-        assert_equal(sorted(H.nodes()),sorted(G.nodes()))
-        assert_equal(sorted(H.edges()),sorted(G.edges()))
-        os.close(fd)
-        os.unlink(fname)
-
-
-    def test_adjlist_delimiter(self):
-        fh=io.BytesIO()
-        G = nx.path_graph(3)
-        nx.write_adjlist(G, fh, delimiter=':')
-        fh.seek(0)
-        H = nx.read_adjlist(fh, nodetype=int, delimiter=':')
-        assert_equal(sorted(H.nodes()),sorted(G.nodes()))
-        assert_equal(sorted(H.edges()),sorted(G.edges()))
-
-
-
-
-
-
-class TestMultilineAdjlist():
-
-    def setUp(self):
-        self.G=nx.Graph(name="test")
-        e=[('a','b'),('b','c'),('c','d'),('d','e'),('e','f'),('a','f')]
-        self.G.add_edges_from(e)
-        self.G.add_node('g')
-        self.DG=nx.DiGraph(self.G)
-        self.DG.remove_edge('b','a')
-        self.DG.remove_edge('b','c')
-        self.XG=nx.MultiGraph()
-        self.XG.add_weighted_edges_from([(1,2,5),(1,2,5),(1,2,1),(3,3,42)])
-        self. XDG=nx.MultiDiGraph(self.XG)
-
-
-    def test_multiline_adjlist_graph(self):
-        G=self.G
-        (fd,fname)=tempfile.mkstemp()
-        nx.write_multiline_adjlist(G,fname)
-        H=nx.read_multiline_adjlist(fname)
-        H2=nx.read_multiline_adjlist(fname)
-        assert_not_equal(H,H2) # they should be different graphs
-        assert_equal(sorted(H.nodes()),sorted(G.nodes()))
-        assert_equal(sorted(H.edges()),sorted(G.edges()))
-        os.close(fd)
-        os.unlink(fname)
-
-
-    def test_multiline_adjlist_digraph(self):
-        G=self.DG
-        (fd,fname)=tempfile.mkstemp()
-        nx.write_multiline_adjlist(G,fname)
-        H=nx.read_multiline_adjlist(fname,create_using=nx.DiGraph())
-        H2=nx.read_multiline_adjlist(fname,create_using=nx.DiGraph())
-        assert_not_equal(H,H2) # they should be different graphs
-        assert_equal(sorted(H.nodes()),sorted(G.nodes()))
-        assert_equal(sorted(H.edges()),sorted(G.edges()))
-        os.close(fd)
-        os.unlink(fname)
-
-
-    def test_multiline_adjlist_integers(self):
-        (fd,fname)=tempfile.mkstemp()
-        G=nx.convert_node_labels_to_integers(self.G)
-        nx.write_multiline_adjlist(G,fname)
-        H=nx.read_multiline_adjlist(fname,nodetype=int)
-        H2=nx.read_multiline_adjlist(fname,nodetype=int)
-        assert_equal(sorted(H.nodes()),sorted(G.nodes()))
-        assert_equal(sorted(H.edges()),sorted(G.edges()))
-        os.close(fd)
-        os.unlink(fname)
-
-
-    def test_multiline_adjlist_digraph(self):
-        G=self.DG
-        (fd,fname)=tempfile.mkstemp()
-        nx.write_multiline_adjlist(G,fname)
-        H=nx.read_multiline_adjlist(fname,create_using=nx.DiGraph())
-        H2=nx.read_multiline_adjlist(fname,create_using=nx.DiGraph())
-        assert_not_equal(H,H2) # they should be different graphs
-        assert_equal(sorted(H.nodes()),sorted(G.nodes()))
-        assert_edges_equal(H.edges(),G.edges())
-        os.close(fd)
-        os.unlink(fname)
-
-
-    def test_multiline_adjlist_multigraph(self):
-        G=self.XG
-        (fd,fname)=tempfile.mkstemp()
-        nx.write_multiline_adjlist(G,fname)
-        H=nx.read_multiline_adjlist(fname,nodetype=int,
-                                    create_using=nx.MultiGraph())
-        H2=nx.read_multiline_adjlist(fname,nodetype=int,
-                                     create_using=nx.MultiGraph())
-        assert_not_equal(H,H2) # they should be different graphs
-        assert_equal(sorted(H.nodes()),sorted(G.nodes()))
-        assert_equal(sorted(H.edges()),sorted(G.edges()))
-        os.close(fd)
-        os.unlink(fname)
-
-    def test_multiline_adjlist_multidigraph(self):
-        G=self.XDG
-        (fd,fname)=tempfile.mkstemp()
-        nx.write_multiline_adjlist(G,fname)
-        H=nx.read_multiline_adjlist(fname,nodetype=int,
-                                    create_using=nx.MultiDiGraph())
-        H2=nx.read_multiline_adjlist(fname,nodetype=int,
-                                     create_using=nx.MultiDiGraph())
-        assert_not_equal(H,H2) # they should be different graphs
-        assert_equal(sorted(H.nodes()),sorted(G.nodes()))
-        assert_equal(sorted(H.edges()),sorted(G.edges()))
-        os.close(fd)
-        os.unlink(fname)
-
-    def test_multiline_adjlist_delimiter(self):
-        fh=io.BytesIO()
-        G = nx.path_graph(3)
-        nx.write_multiline_adjlist(G, fh, delimiter=':')
-        fh.seek(0)
-        H = nx.read_multiline_adjlist(fh, nodetype=int, delimiter=':')
-        assert_equal(sorted(H.nodes()),sorted(G.nodes()))
-        assert_equal(sorted(H.edges()),sorted(G.edges()))
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/tests/test_edgelist.py b/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/tests/test_edgelist.py
deleted file mode 100644
index be70bba..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/tests/test_edgelist.py
+++ /dev/null
@@ -1,234 +0,0 @@
-"""
-    Unit tests for edgelists.
-"""
-from nose.tools import assert_equal, assert_raises, assert_not_equal
-import networkx as nx
-import io
-import tempfile
-import os
-
-def assert_equal_edges(elist1,elist2):
-    if len(elist1[0]) == 2:
-        return assert_equal(sorted(sorted(e) for e in elist1), 
-                            sorted(sorted(e) for e in elist2))
-    else:
-        return assert_equal(sorted((sorted((u, v)), d) for u, v, d in elist1),
-                            sorted((sorted((u, v)), d) for u, v, d in elist2))
-
-class TestEdgelist:
-
-    def setUp(self):
-        self.G=nx.Graph(name="test")
-        e=[('a','b'),('b','c'),('c','d'),('d','e'),('e','f'),('a','f')]
-        self.G.add_edges_from(e)
-        self.G.add_node('g')
-        self.DG=nx.DiGraph(self.G)
-        self.XG=nx.MultiGraph()
-        self.XG.add_weighted_edges_from([(1,2,5),(1,2,5),(1,2,1),(3,3,42)])
-        self. XDG=nx.MultiDiGraph(self.XG)
-
-
-    def test_read_edgelist_1(self):
-        s = b"""\
-# comment line
-1 2
-# comment line
-2 3
-"""
-        bytesIO = io.BytesIO(s)
-        G = nx.read_edgelist(bytesIO,nodetype=int)
-        assert_equal_edges(G.edges(),[(1,2),(2,3)])
-
-    def test_read_edgelist_2(self):
-        s = b"""\
-# comment line
-1 2 2.0
-# comment line
-2 3 3.0
-"""
-        bytesIO = io.BytesIO(s)
-        G = nx.read_edgelist(bytesIO,nodetype=int,data=False)
-        assert_equal_edges(G.edges(),[(1,2),(2,3)])
-
-        bytesIO = io.BytesIO(s)
-        G = nx.read_weighted_edgelist(bytesIO,nodetype=int)
-        assert_equal_edges(G.edges(data=True),[(1,2,{'weight':2.0}),(2,3,{'weight':3.0})])
-
-    def test_read_edgelist_3(self):
-        s = b"""\
-# comment line
-1 2 {'weight':2.0}
-# comment line
-2 3 {'weight':3.0}
-"""
-        bytesIO = io.BytesIO(s)
-        G = nx.read_edgelist(bytesIO,nodetype=int,data=False)
-        assert_equal_edges(G.edges(),[(1,2),(2,3)])
-
-        bytesIO = io.BytesIO(s)
-        G = nx.read_edgelist(bytesIO,nodetype=int,data=True)
-        assert_equal_edges(G.edges(data=True),[(1,2,{'weight':2.0}),(2,3,{'weight':3.0})])
-
-    def test_write_edgelist_1(self):
-        fh=io.BytesIO()
-        G=nx.Graph()
-        G.add_edges_from([(1,2),(2,3)])
-        nx.write_edgelist(G,fh,data=False)
-        fh.seek(0)
-        assert_equal(fh.read(),b"1 2\n2 3\n")
-
-    def test_write_edgelist_2(self):
-        fh=io.BytesIO()
-        G=nx.Graph()
-        G.add_edges_from([(1,2),(2,3)])
-        nx.write_edgelist(G,fh,data=True)
-        fh.seek(0)
-        assert_equal(fh.read(),b"1 2 {}\n2 3 {}\n")
-
-    def test_write_edgelist_3(self):
-        fh=io.BytesIO()
-        G=nx.Graph()
-        G.add_edge(1,2,weight=2.0)
-        G.add_edge(2,3,weight=3.0)
-        nx.write_edgelist(G,fh,data=True)
-        fh.seek(0)
-        assert_equal(fh.read(),b"1 2 {'weight': 2.0}\n2 3 {'weight': 3.0}\n")
-
-    def test_write_edgelist_4(self):
-        fh=io.BytesIO()
-        G=nx.Graph()
-        G.add_edge(1,2,weight=2.0)
-        G.add_edge(2,3,weight=3.0)
-        nx.write_edgelist(G,fh,data=[('weight')])
-        fh.seek(0)
-        assert_equal(fh.read(),b"1 2 2.0\n2 3 3.0\n")
-
-    def test_unicode(self):
-        G = nx.Graph()
-        try: # Python 3.x
-            name1 = chr(2344) + chr(123) + chr(6543)
-            name2 = chr(5543) + chr(1543) + chr(324)
-        except ValueError: # Python 2.6+
-            name1 = unichr(2344) + unichr(123) + unichr(6543)
-            name2 = unichr(5543) + unichr(1543) + unichr(324)
-        G.add_edge(name1, 'Radiohead', attr_dict={name2: 3})
-        fd, fname = tempfile.mkstemp()
-        nx.write_edgelist(G, fname)
-        H = nx.read_edgelist(fname)
-        assert_equal(G.adj, H.adj)
-        os.close(fd)
-        os.unlink(fname)
-
-    def test_latin1_error(self):
-        G = nx.Graph()
-        try: # Python 3.x
-            name1 = chr(2344) + chr(123) + chr(6543)
-            name2 = chr(5543) + chr(1543) + chr(324)
-        except ValueError: # Python 2.6+
-            name1 = unichr(2344) + unichr(123) + unichr(6543)
-            name2 = unichr(5543) + unichr(1543) + unichr(324)
-        G.add_edge(name1, 'Radiohead', attr_dict={name2: 3})
-        fd, fname = tempfile.mkstemp()
-        assert_raises(UnicodeEncodeError,
-                      nx.write_edgelist,
-                      G, fname, encoding = 'latin-1')
-        os.close(fd)
-        os.unlink(fname)
-
-    def test_latin1(self):
-        G = nx.Graph()
-        try: # Python 3.x
-            blurb = chr(1245) # just to trigger the exception
-            name1 = 'Bj' + chr(246) + 'rk'
-            name2 = chr(220) + 'ber'
-        except ValueError: # Python 2.6+
-            name1 = 'Bj' + unichr(246) + 'rk'
-            name2 = unichr(220) + 'ber'
-        G.add_edge(name1, 'Radiohead', attr_dict={name2: 3})
-        fd, fname = tempfile.mkstemp()
-        nx.write_edgelist(G, fname, encoding = 'latin-1')
-        H = nx.read_edgelist(fname, encoding = 'latin-1')
-        assert_equal(G.adj, H.adj)
-        os.close(fd)
-        os.unlink(fname)
-
-
-    def test_edgelist_graph(self):
-        G=self.G
-        (fd,fname)=tempfile.mkstemp()
-        nx.write_edgelist(G,fname)  
-        H=nx.read_edgelist(fname)
-        H2=nx.read_edgelist(fname)
-        assert_not_equal(H,H2) # they should be different graphs
-        G.remove_node('g') # isolated nodes are not written in edgelist
-        assert_equal(sorted(H.nodes()),sorted(G.nodes()))
-        assert_equal(sorted(H.edges()),sorted(G.edges()))
-        os.close(fd)
-        os.unlink(fname)
-
-    def test_edgelist_digraph(self):
-        G=self.DG
-        (fd,fname)=tempfile.mkstemp()
-        nx.write_edgelist(G,fname) 
-        H=nx.read_edgelist(fname,create_using=nx.DiGraph())
-        H2=nx.read_edgelist(fname,create_using=nx.DiGraph())
-        assert_not_equal(H,H2) # they should be different graphs
-        G.remove_node('g') # isolated nodes are not written in edgelist
-        assert_equal(sorted(H.nodes()),sorted(G.nodes()))
-        assert_equal(sorted(H.edges()),sorted(G.edges()))
-        os.close(fd)
-        os.unlink(fname)
-
-
-    def test_edgelist_integers(self):
-        G=nx.convert_node_labels_to_integers(self.G)
-        (fd,fname)=tempfile.mkstemp()
-        nx.write_edgelist(G,fname)  
-        H=nx.read_edgelist(fname,nodetype=int)
-        # isolated nodes are not written in edgelist
-        G.remove_nodes_from(nx.isolates(G))
-        assert_equal(sorted(H.nodes()),sorted(G.nodes()))
-        assert_equal(sorted(H.edges()),sorted(G.edges()))
-        os.close(fd)
-        os.unlink(fname)
-
-
-    def test_edgelist_digraph(self):
-        G=self.DG
-        (fd,fname)=tempfile.mkstemp()
-        nx.write_edgelist(G,fname)  
-        H=nx.read_edgelist(fname,create_using=nx.DiGraph())
-        G.remove_node('g') # isolated nodes are not written in edgelist
-        H2=nx.read_edgelist(fname,create_using=nx.DiGraph())
-        assert_not_equal(H,H2) # they should be different graphs
-        assert_equal(sorted(H.nodes()),sorted(G.nodes()))
-        assert_equal(sorted(H.edges()),sorted(G.edges()))
-        os.close(fd)
-        os.unlink(fname)
-
-
-    def test_edgelist_multigraph(self):
-        G=self.XG
-        (fd,fname)=tempfile.mkstemp()
-        nx.write_edgelist(G,fname) 
-        H=nx.read_edgelist(fname,nodetype=int,create_using=nx.MultiGraph())
-        H2=nx.read_edgelist(fname,nodetype=int,create_using=nx.MultiGraph())
-        assert_not_equal(H,H2) # they should be different graphs
-        assert_equal(sorted(H.nodes()),sorted(G.nodes()))
-        assert_equal(sorted(H.edges()),sorted(G.edges()))
-        os.close(fd)
-        os.unlink(fname)
-
-    def test_edgelist_multidigraph(self):
-        G=self.XDG
-        (fd,fname)=tempfile.mkstemp()
-        nx.write_edgelist(G,fname) 
-        H=nx.read_edgelist(fname,nodetype=int,create_using=nx.MultiDiGraph())
-        H2=nx.read_edgelist(fname,nodetype=int,create_using=nx.MultiDiGraph())
-        assert_not_equal(H,H2) # they should be different graphs
-        assert_equal(sorted(H.nodes()),sorted(G.nodes()))
-        assert_equal(sorted(H.edges()),sorted(G.edges()))
-        os.close(fd)
-        os.unlink(fname)
-
-
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/tests/test_gexf.py b/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/tests/test_gexf.py
deleted file mode 100644
index bbd86ba..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/tests/test_gexf.py
+++ /dev/null
@@ -1,306 +0,0 @@
-#!/usr/bin/env python
-from nose.tools import *
-from nose import SkipTest
-import networkx as nx
-import io
-
-class TestGEXF(object):
-    @classmethod
-    def setupClass(cls):
-        try:
-            import xml.etree.ElementTree
-        except ImportError:
-            raise SkipTest('xml.etree.ElementTree not available.')
-
-    def setUp(self):
-        self.simple_directed_data="""<?xml version="1.0" encoding="UTF-8"?>
-<gexf xmlns="http://www.gexf.net/1.1draft" version="1.1">
-    <graph mode="static" defaultedgetype="directed">
-        <nodes>
-            <node id="0" label="Hello" />
-            <node id="1" label="Word" />
-        </nodes>
-        <edges>
-            <edge id="0" source="0" target="1" />
-        </edges>
-    </graph>
-</gexf>
-"""
-        self.simple_directed_graph=nx.DiGraph()
-        self.simple_directed_graph.add_node('0',label='Hello')
-        self.simple_directed_graph.add_node('1',label='World')
-        self.simple_directed_graph.add_edge('0','1',id='0')
-
-        self.simple_directed_fh = \
-            io.BytesIO(self.simple_directed_data.encode('UTF-8'))
-
-
-        self.attribute_data="""<?xml version="1.0" encoding="UTF-8"?>
-<gexf xmlns="http://www.gexf.net/1.1draft" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.gexf.net/1.1draft http://www.gexf.net/1.1draft/gexf.xsd" version="1.1">
-  <meta lastmodifieddate="2009-03-20">
-    <creator>Gephi.org</creator>
-    <description>A Web network</description>
-  </meta>
-  <graph defaultedgetype="directed">
-    <attributes class="node">
-      <attribute id="0" title="url" type="string"/>
-      <attribute id="1" title="indegree" type="integer"/>
-      <attribute id="2" title="frog" type="boolean">
-        <default>true</default>
-      </attribute>
-    </attributes>
-    <nodes>
-      <node id="0" label="Gephi">
-        <attvalues>
-          <attvalue for="0" value="http://gephi.org"/>
-          <attvalue for="1" value="1"/>
-        </attvalues>
-      </node>
-      <node id="1" label="Webatlas">
-        <attvalues>
-          <attvalue for="0" value="http://webatlas.fr"/>
-          <attvalue for="1" value="2"/>
-        </attvalues>
-      </node>
-      <node id="2" label="RTGI">
-        <attvalues>
-          <attvalue for="0" value="http://rtgi.fr"/>
-          <attvalue for="1" value="1"/>
-        </attvalues>
-      </node>
-      <node id="3" label="BarabasiLab">
-        <attvalues>
-          <attvalue for="0" value="http://barabasilab.com"/>
-          <attvalue for="1" value="1"/>
-          <attvalue for="2" value="false"/>
-        </attvalues>
-      </node>
-    </nodes>
-    <edges>
-      <edge id="0" source="0" target="1"/>
-      <edge id="1" source="0" target="2"/>
-      <edge id="2" source="1" target="0"/>
-      <edge id="3" source="2" target="1"/>
-      <edge id="4" source="0" target="3"/>
-    </edges>
-  </graph>
-</gexf>
-"""
-        self.attribute_graph=nx.DiGraph()
-        self.attribute_graph.graph['node_default']={'frog':True}
-        self.attribute_graph.add_node('0',
-                                      label='Gephi',
-                                      url='http://gephi.org',
-                                      indegree=1)
-        self.attribute_graph.add_node('1',
-                                      label='Webatlas',
-                                      url='http://webatlas.fr',
-                                      indegree=2)
-
-        self.attribute_graph.add_node('2',
-                                      label='RTGI',
-                                      url='http://rtgi.fr',
-                                      indegree=1)
-
-        self.attribute_graph.add_node('3',
-                                      label='BarabasiLab',
-                                      url='http://barabasilab.com',
-                                      indegree=1,
-                                      frog=False)
-        self.attribute_graph.add_edge('0','1',id='0')
-        self.attribute_graph.add_edge('0','2',id='1')
-        self.attribute_graph.add_edge('1','0',id='2')
-        self.attribute_graph.add_edge('2','1',id='3')
-        self.attribute_graph.add_edge('0','3',id='4')
-        self.attribute_fh = io.BytesIO(self.attribute_data.encode('UTF-8'))
-
-        self.simple_undirected_data="""<?xml version="1.0" encoding="UTF-8"?>
-<gexf xmlns="http://www.gexf.net/1.1draft" version="1.1">
-    <graph mode="static" defaultedgetype="undirected">
-        <nodes>
-            <node id="0" label="Hello" />
-            <node id="1" label="Word" />
-        </nodes>
-        <edges>
-            <edge id="0" source="0" target="1" />
-        </edges>
-    </graph>
-</gexf>
-"""
-        self.simple_undirected_graph=nx.Graph()
-        self.simple_undirected_graph.add_node('0',label='Hello')
-        self.simple_undirected_graph.add_node('1',label='World')
-        self.simple_undirected_graph.add_edge('0','1',id='0')
-
-        self.simple_undirected_fh = io.BytesIO(self.simple_undirected_data.encode('UTF-8'))
-
-
-    def test_read_simple_directed_graphml(self):
-        G=self.simple_directed_graph
-        H=nx.read_gexf(self.simple_directed_fh)
-        assert_equal(sorted(G.nodes()),sorted(H.nodes()))
-        assert_equal(sorted(G.edges()),sorted(H.edges()))
-        assert_equal(sorted(G.edges(data=True)),
-                     sorted(H.edges(data=True)))
-        self.simple_directed_fh.seek(0)
-
-    def test_write_read_simple_directed_graphml(self):
-        G=self.simple_directed_graph
-        fh=io.BytesIO()
-        nx.write_gexf(G,fh)
-        fh.seek(0)
-        H=nx.read_gexf(fh)
-        assert_equal(sorted(G.nodes()),sorted(H.nodes()))
-        assert_equal(sorted(G.edges()),sorted(H.edges()))
-        assert_equal(sorted(G.edges(data=True)),
-                     sorted(H.edges(data=True)))
-        self.simple_directed_fh.seek(0)
-
-    def test_read_simple_undirected_graphml(self):
-        G=self.simple_undirected_graph
-        H=nx.read_gexf(self.simple_undirected_fh)
-        assert_equal(sorted(G.nodes()),sorted(H.nodes()))
-        assert_equal(
-            sorted(sorted(e) for e in G.edges()),
-            sorted(sorted(e) for e in H.edges()))
-        self.simple_undirected_fh.seek(0)
-
-    def test_read_attribute_graphml(self):
-        G=self.attribute_graph
-        H=nx.read_gexf(self.attribute_fh)
-        assert_equal(sorted(G.nodes(True)),sorted(H.nodes(data=True)))
-        ge=sorted(G.edges(data=True))
-        he=sorted(H.edges(data=True))
-        for a,b in zip(ge,he):
-            assert_equal(a,b)
-        self.attribute_fh.seek(0)
-
-    def test_directed_edge_in_undirected(self):
-        s="""<?xml version="1.0" encoding="UTF-8"?>
-<gexf xmlns="http://www.gexf.net/1.1draft" version="1.1">
-    <graph mode="static" defaultedgetype="undirected">
-        <nodes>
-            <node id="0" label="Hello" />
-            <node id="1" label="Word" />
-        </nodes>
-        <edges>
-            <edge id="0" source="0" target="1" type="directed"/>
-        </edges>
-    </graph>
-</gexf>
-"""
-        fh = io.BytesIO(s.encode('UTF-8'))
-        assert_raises(nx.NetworkXError,nx.read_gexf,fh)
-
-    def test_undirected_edge_in_directed(self):
-        s="""<?xml version="1.0" encoding="UTF-8"?>
-<gexf xmlns="http://www.gexf.net/1.1draft" version="1.1">
-    <graph mode="static" defaultedgetype="directed">
-        <nodes>
-            <node id="0" label="Hello" />
-            <node id="1" label="Word" />
-        </nodes>
-        <edges>
-            <edge id="0" source="0" target="1" type="undirected"/>
-        </edges>
-    </graph>
-</gexf>
-"""
-        fh = io.BytesIO(s.encode('UTF-8'))
-        assert_raises(nx.NetworkXError,nx.read_gexf,fh)
-
-
-    def test_key_error(self):
-        s="""<?xml version="1.0" encoding="UTF-8"?>
-<gexf xmlns="http://www.gexf.net/1.1draft" version="1.1">
-    <graph mode="static" defaultedgetype="directed">
-        <nodes>
-            <node id="0" label="Hello">
-              <attvalues>
-                <attvalue for='0' value='1'/>
-              </attvalues>
-            </node>
-            <node id="1" label="Word" />
-        </nodes>
-        <edges>
-            <edge id="0" source="0" target="1" type="undirected"/>
-        </edges>
-    </graph>
-</gexf>
-"""
-        fh = io.BytesIO(s.encode('UTF-8'))
-        assert_raises(nx.NetworkXError,nx.read_gexf,fh)
-
-    def test_relabel(self):
-        s="""<?xml version="1.0" encoding="UTF-8"?>
-<gexf xmlns="http://www.gexf.net/1.1draft" version="1.1">
-    <graph mode="static" defaultedgetype="directed">
-        <nodes>
-            <node id="0" label="Hello" />
-            <node id="1" label="Word" />
-        </nodes>
-        <edges>
-            <edge id="0" source="0" target="1"/>
-        </edges>
-    </graph>
-</gexf>
-"""
-        fh = io.BytesIO(s.encode('UTF-8'))
-        G=nx.read_gexf(fh,relabel=True)
-        assert_equal(sorted(G.nodes()),["Hello","Word"])
-
-
-    def test_default_attribute(self):
-        G=nx.Graph()
-        G.add_node(1,label='1',color='green')
-        G.add_path([0,1,2,3])
-        G.add_edge(1,2,foo=3)
-        G.graph['node_default']={'color':'yellow'}
-        G.graph['edge_default']={'foo':7}
-        fh = io.BytesIO()
-        nx.write_gexf(G,fh)
-        fh.seek(0)
-        H=nx.read_gexf(fh,node_type=int)
-        assert_equal(sorted(G.nodes()),sorted(H.nodes()))
-        assert_equal(
-            sorted(sorted(e) for e in G.edges()),
-            sorted(sorted(e) for e in H.edges()))
-        assert_equal(G.graph,H.graph)
-
-    def test_serialize_ints_to_strings(self):
-        G=nx.Graph()
-        G.add_node(1,id=7,label=77)
-        fh = io.BytesIO()
-        nx.write_gexf(G,fh)
-        fh.seek(0)
-        H=nx.read_gexf(fh,node_type=int)
-        assert_equal(H.nodes(),[7])
-        assert_equal(H.node[7]['label'],'77')
-
-    def test_write_with_node_attributes(self):
-        # Addresses #673.
-        G = nx.path_graph(4)
-        for i in range(4):
-            G.node[i]['id'] = i
-            G.node[i]['label'] = i
-            G.node[i]['pid'] = i
-
-        expected = """<gexf version="1.1" xmlns="http://www.gexf.net/1.1draft" xmlns:viz="http://www.gexf.net/1.1draft/viz" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/XMLSchema-instance">
-  <graph defaultedgetype="undirected" mode="static">
-    <nodes>
-      <node id="0" label="0" pid="0" />
-      <node id="1" label="1" pid="1" />
-      <node id="2" label="2" pid="2" />
-      <node id="3" label="3" pid="3" />
-    </nodes>
-    <edges>
-      <edge id="0" source="0" target="1" />
-      <edge id="1" source="1" target="2" />
-      <edge id="2" source="2" target="3" />
-    </edges>
-  </graph>
-</gexf>"""
-        obtained = '\n'.join(nx.generate_gexf(G))
-        assert_equal( expected, obtained )
-
-
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/tests/test_gml.py b/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/tests/test_gml.py
deleted file mode 100644
index ed63bd2..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/tests/test_gml.py
+++ /dev/null
@@ -1,135 +0,0 @@
-#!/usr/bin/env python
-import io
-from nose.tools import *
-from nose import SkipTest
-import networkx
-
-class TestGraph(object):
-    @classmethod
-    def setupClass(cls):
-        global pyparsing
-        try:
-            import pyparsing
-        except ImportError:
-            try:
-                import matplotlib.pyparsing as pyparsing
-            except:
-                raise SkipTest('gml test: pyparsing not available.')
-
-    def setUp(self):
-        self.simple_data="""Creator me
-graph [
- comment "This is a sample graph"
- directed 1
- IsPlanar 1
- pos  [ x 0 y 1 ]
- node [
-   id 1
-   label "Node 1"
-   pos [ x 1 y 1 ] 
- ]
- node [
-    id 2
-    pos [ x 1 y 2 ] 
-    label "Node 2" 
-    ]
-  node [
-    id 3
-    label "Node 3"
-    pos [ x 1 y 3 ] 
-  ]
-  edge [
-    source 1
-    target 2
-    label "Edge from node 1 to node 2"
-    color [line "blue" thickness 3] 
-
-  ]
-  edge [
-    source 2
-    target 3
-    label "Edge from node 2 to node 3"
-  ]
-  edge [
-    source 3
-    target 1 label
-    "Edge from node 3 to node 1"
-  ]
-]
-"""
-    def test_parse_gml(self):
-        G=networkx.parse_gml(self.simple_data,relabel=True)
-        assert_equals(sorted(G.nodes()),\
-                          ['Node 1', 'Node 2', 'Node 3'])
-        assert_equals( [e for e in sorted(G.edges())],\
-                           [('Node 1', 'Node 2'), 
-                            ('Node 2', 'Node 3'), 
-                            ('Node 3', 'Node 1')])
-
-        assert_equals( [e for e in sorted(G.edges(data=True))],\
-                           [('Node 1', 'Node 2', 
-                             {'color': {'line': 'blue', 'thickness': 3},
-                              'label': 'Edge from node 1 to node 2'}), 
-                            ('Node 2', 'Node 3', 
-                             {'label': 'Edge from node 2 to node 3'}), 
-                            ('Node 3', 'Node 1', 
-                             {'label': 'Edge from node 3 to node 1'})])
-
-
-    def test_read_gml(self):
-        import os,tempfile
-        (fd,fname)=tempfile.mkstemp()
-        fh=open(fname,'w')
-        fh.write(self.simple_data)
-        fh.close()
-        Gin=networkx.read_gml(fname,relabel=True)
-        G=networkx.parse_gml(self.simple_data,relabel=True)
-        assert_equals( sorted(G.nodes(data=True)), sorted(Gin.nodes(data=True)))
-        assert_equals( sorted(G.edges(data=True)), sorted(Gin.edges(data=True)))
-        os.close(fd)
-        os.unlink(fname)
-
-    def test_relabel_duplicate(self):
-        data="""
-graph
-[
-	label	""
-	directed	1
-	node
-	[
-		id	0
-		label	"same"
-	]
-	node
-	[
-		id	1
-		label	"same"
-	]
-]
-"""
-        fh = io.BytesIO(data.encode('UTF-8'))
-        fh.seek(0)
-        assert_raises(networkx.NetworkXError,networkx.read_gml,fh,relabel=True)
-
-    def test_bool(self):
-        G=networkx.Graph()
-        G.add_node(1,on=True)
-        G.add_edge(1,2,on=False)
-        data = '\n'.join(list(networkx.generate_gml(G)))
-        answer ="""graph [
-  node [
-    id 0
-    label 1
-    on 1
-  ]
-  node [
-    id 1
-    label 2
-  ]
-  edge [
-    source 0
-    target 1
-    on 0
-  ]
-]"""
-        assert_equal(data,answer)
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/tests/test_gpickle.py b/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/tests/test_gpickle.py
deleted file mode 100644
index 429f753..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/tests/test_gpickle.py
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/usr/bin/env python
-from nose.tools import assert_equal
-import networkx as nx
-import os,tempfile
-
-class TestGpickle(object):
-    def setUp(self):
-        G=nx.Graph(name="test")
-        e=[('a','b'),('b','c'),('c','d'),('d','e'),('e','f'),('a','f')]
-        G.add_edges_from(e,width=10)
-        G.add_node('g',color='green')
-        G.graph['number']=1
-        self.G=G
-
-    def test_gpickle(self):
-        G=self.G
-        (fd,fname)=tempfile.mkstemp()
-        nx.write_gpickle(G,fname);  
-        Gin=nx.read_gpickle(fname);
-        assert_equal(sorted(G.nodes(data=True)),
-                     sorted(Gin.nodes(data=True)))
-        assert_equal(sorted(G.edges(data=True)),
-                     sorted(Gin.edges(data=True)))
-        assert_equal(G.graph,Gin.graph)
-        os.close(fd)
-        os.unlink(fname)
-
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/tests/test_graphml.py b/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/tests/test_graphml.py
deleted file mode 100644
index c21c89b..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/tests/test_graphml.py
+++ /dev/null
@@ -1,445 +0,0 @@
-#!/usr/bin/env python
-from nose.tools import *
-from nose import SkipTest
-import networkx as nx
-import io
-import tempfile
-import os
-
-class TestGraph(object):
-    @classmethod
-    def setupClass(cls):
-        try:
-            import xml.etree.ElementTree
-        except ImportError:
-            raise SkipTest('xml.etree.ElementTree not available.')
-
-    def setUp(self):
-        self.simple_directed_data="""<?xml version="1.0" encoding="UTF-8"?>
-<!-- This file was written by the JAVA GraphML Library.-->
-<graphml xmlns="http://graphml.graphdrawing.org/xmlns"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://graphml.graphdrawing.org/xmlns/1.0/graphml.xsd">
-  <graph id="G" edgedefault="directed">
-    <node id="n0"/>
-    <node id="n1"/>
-    <node id="n2"/>
-    <node id="n3"/>
-    <node id="n4"/>
-    <node id="n5"/>
-    <node id="n6"/>
-    <node id="n7"/>
-    <node id="n8"/>
-    <node id="n9"/>
-    <node id="n10"/>
-    <edge id="foo" source="n0" target="n2"/>
-    <edge source="n1" target="n2"/>
-    <edge source="n2" target="n3"/>
-    <edge source="n3" target="n5"/>
-    <edge source="n3" target="n4"/>
-    <edge source="n4" target="n6"/>
-    <edge source="n6" target="n5"/>
-    <edge source="n5" target="n7"/>
-    <edge source="n6" target="n8"/>
-    <edge source="n8" target="n7"/>
-    <edge source="n8" target="n9"/>
-  </graph>
-</graphml>"""
-        self.simple_directed_graph=nx.DiGraph()
-        self.simple_directed_graph.add_node('n10')
-        self.simple_directed_graph.add_edge('n0','n2',id='foo')
-        self.simple_directed_graph.add_edges_from([('n1','n2'),
-                                                   ('n2','n3'),
-                                                   ('n3','n5'),
-                                                   ('n3','n4'),
-                                                   ('n4','n6'),
-                                                   ('n6','n5'),
-                                                   ('n5','n7'),
-                                                   ('n6','n8'),
-                                                   ('n8','n7'),
-                                                   ('n8','n9'),
-                                                   ])
-
-        self.simple_directed_fh = \
-            io.BytesIO(self.simple_directed_data.encode('UTF-8'))
-
-
-        self.attribute_data="""<?xml version="1.0" encoding="UTF-8"?>
-<graphml xmlns="http://graphml.graphdrawing.org/xmlns"
-      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-      xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns
-        http://graphml.graphdrawing.org/xmlns/1.0/graphml.xsd">
-  <key id="d0" for="node" attr.name="color" attr.type="string">
-    <default>yellow</default>
-  </key>
-  <key id="d1" for="edge" attr.name="weight" attr.type="double"/>
-  <graph id="G" edgedefault="directed">
-    <node id="n0">
-      <data key="d0">green</data>
-    </node>
-    <node id="n1"/>
-    <node id="n2">
-      <data key="d0">blue</data>
-    </node>
-    <node id="n3">
-      <data key="d0">red</data>
-    </node>
-    <node id="n4"/>
-    <node id="n5">
-      <data key="d0">turquoise</data>
-    </node>
-    <edge id="e0" source="n0" target="n2">
-      <data key="d1">1.0</data>
-    </edge>
-    <edge id="e1" source="n0" target="n1">
-      <data key="d1">1.0</data>
-    </edge>
-    <edge id="e2" source="n1" target="n3">
-      <data key="d1">2.0</data>
-    </edge>
-    <edge id="e3" source="n3" target="n2"/>
-    <edge id="e4" source="n2" target="n4"/>
-    <edge id="e5" source="n3" target="n5"/>
-    <edge id="e6" source="n5" target="n4">
-      <data key="d1">1.1</data>
-    </edge>
-  </graph>
-</graphml>
-"""
-        self.attribute_graph=nx.DiGraph(id='G')
-        self.attribute_graph.graph['node_default']={'color':'yellow'}
-        self.attribute_graph.add_node('n0',color='green')
-        self.attribute_graph.add_node('n2',color='blue')
-        self.attribute_graph.add_node('n3',color='red')
-        self.attribute_graph.add_node('n4')
-        self.attribute_graph.add_node('n5',color='turquoise')
-        self.attribute_graph.add_edge('n0','n2',id='e0',weight=1.0)
-        self.attribute_graph.add_edge('n0','n1',id='e1',weight=1.0)
-        self.attribute_graph.add_edge('n1','n3',id='e2',weight=2.0)
-        self.attribute_graph.add_edge('n3','n2',id='e3')
-        self.attribute_graph.add_edge('n2','n4',id='e4')
-        self.attribute_graph.add_edge('n3','n5',id='e5')
-        self.attribute_graph.add_edge('n5','n4',id='e6',weight=1.1)
-        self.attribute_fh = io.BytesIO(self.attribute_data.encode('UTF-8'))
-
-        self.simple_undirected_data="""<?xml version="1.0" encoding="UTF-8"?>
-<graphml xmlns="http://graphml.graphdrawing.org/xmlns"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://graphml.graphdrawing.org/xmlns/1.0/graphml.xsd">
-  <graph id="G">
-    <node id="n0"/>
-    <node id="n1"/>
-    <node id="n2"/>
-    <node id="n10"/>
-    <edge id="foo" source="n0" target="n2"/>
-    <edge source="n1" target="n2"/>
-    <edge source="n2" target="n3"/>
-  </graph>
-</graphml>"""
-#    <edge source="n8" target="n10" directed="false"/>
-        self.simple_undirected_graph=nx.Graph()
-        self.simple_undirected_graph.add_node('n10')
-        self.simple_undirected_graph.add_edge('n0','n2',id='foo')
-        self.simple_undirected_graph.add_edges_from([('n1','n2'),
-                                                   ('n2','n3'),
-                                                   ])
-
-        self.simple_undirected_fh = io.BytesIO(self.simple_undirected_data.encode('UTF-8'))
-
-
-    def test_read_simple_directed_graphml(self):
-        G=self.simple_directed_graph
-        H=nx.read_graphml(self.simple_directed_fh)
-        assert_equal(sorted(G.nodes()),sorted(H.nodes()))
-        assert_equal(sorted(G.edges()),sorted(H.edges()))
-        assert_equal(sorted(G.edges(data=True)),
-                     sorted(H.edges(data=True)))
-        self.simple_directed_fh.seek(0)
-
-        I=nx.parse_graphml(self.simple_directed_data)
-        assert_equal(sorted(G.nodes()),sorted(I.nodes()))
-        assert_equal(sorted(G.edges()),sorted(I.edges()))
-        assert_equal(sorted(G.edges(data=True)),
-                     sorted(I.edges(data=True)))
-
-    def test_write_read_simple_directed_graphml(self):
-        G=self.simple_directed_graph
-        fh=io.BytesIO()
-        nx.write_graphml(G,fh)
-        fh.seek(0)
-        H=nx.read_graphml(fh)
-        assert_equal(sorted(G.nodes()),sorted(H.nodes()))
-        assert_equal(sorted(G.edges()),sorted(H.edges()))
-        assert_equal(sorted(G.edges(data=True)),
-                     sorted(H.edges(data=True)))
-        self.simple_directed_fh.seek(0)
-
-    def test_read_simple_undirected_graphml(self):
-        G=self.simple_undirected_graph
-        H=nx.read_graphml(self.simple_undirected_fh)
-        assert_equal(sorted(G.nodes()),sorted(H.nodes()))
-        assert_equal(
-            sorted(sorted(e) for e in G.edges()),
-            sorted(sorted(e) for e in H.edges()))
-        self.simple_undirected_fh.seek(0)
-
-        I=nx.parse_graphml(self.simple_undirected_data)
-        assert_equal(sorted(G.nodes()),sorted(I.nodes()))
-        assert_equal(
-            sorted(sorted(e) for e in G.edges()),
-            sorted(sorted(e) for e in I.edges()))
-
-    def test_read_attribute_graphml(self):
-        G=self.attribute_graph
-        H=nx.read_graphml(self.attribute_fh)
-        assert_equal(sorted(G.nodes(True)),sorted(H.nodes(data=True)))
-        ge=sorted(G.edges(data=True))
-        he=sorted(H.edges(data=True))
-        for a,b in zip(ge,he):
-            assert_equal(a,b)
-        self.attribute_fh.seek(0)
-
-        I=nx.parse_graphml(self.attribute_data)
-        assert_equal(sorted(G.nodes(True)),sorted(I.nodes(data=True)))
-        ge=sorted(G.edges(data=True))
-        he=sorted(I.edges(data=True))
-        for a,b in zip(ge,he):
-            assert_equal(a,b)
-
-    def test_directed_edge_in_undirected(self):
-        s="""<?xml version="1.0" encoding="UTF-8"?>
-<graphml xmlns="http://graphml.graphdrawing.org/xmlns"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://graphml.graphdrawing.org/xmlns/1.0/graphml.xsd">
-  <graph id="G">
-    <node id="n0"/>
-    <node id="n1"/>
-    <node id="n2"/>
-    <edge source="n0" target="n1"/>
-    <edge source="n1" target="n2" directed='true'/>
-  </graph>
-</graphml>"""
-        fh = io.BytesIO(s.encode('UTF-8'))
-        assert_raises(nx.NetworkXError,nx.read_graphml,fh)
-        assert_raises(nx.NetworkXError,nx.parse_graphml,s)
-
-    def test_undirected_edge_in_directed(self):
-        s="""<?xml version="1.0" encoding="UTF-8"?>
-<graphml xmlns="http://graphml.graphdrawing.org/xmlns"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://graphml.graphdrawing.org/xmlns/1.0/graphml.xsd">
-  <graph id="G" edgedefault='directed'>
-    <node id="n0"/>
-    <node id="n1"/>
-    <node id="n2"/>
-    <edge source="n0" target="n1"/>
-    <edge source="n1" target="n2" directed='false'/>
-  </graph>
-</graphml>"""
-        fh = io.BytesIO(s.encode('UTF-8'))
-        assert_raises(nx.NetworkXError,nx.read_graphml,fh)
-        assert_raises(nx.NetworkXError,nx.parse_graphml,s)
-
-    def test_key_error(self):
-        s="""<?xml version="1.0" encoding="UTF-8"?>
-<graphml xmlns="http://graphml.graphdrawing.org/xmlns"
-      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-      xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns
-        http://graphml.graphdrawing.org/xmlns/1.0/graphml.xsd">
-  <key id="d0" for="node" attr.name="color" attr.type="string">
-    <default>yellow</default>
-  </key>
-  <key id="d1" for="edge" attr.name="weight" attr.type="double"/>
-  <graph id="G" edgedefault="directed">
-    <node id="n0">
-      <data key="d0">green</data>
-    </node>
-    <node id="n1"/>
-    <node id="n2">
-      <data key="d0">blue</data>
-    </node>
-    <edge id="e0" source="n0" target="n2">
-      <data key="d2">1.0</data>
-    </edge>
-  </graph>
-</graphml>
-"""
-        fh = io.BytesIO(s.encode('UTF-8'))
-        assert_raises(nx.NetworkXError,nx.read_graphml,fh)
-        assert_raises(nx.NetworkXError,nx.parse_graphml,s)
-
-    def test_hyperedge_error(self):
-        s="""<?xml version="1.0" encoding="UTF-8"?>
-<graphml xmlns="http://graphml.graphdrawing.org/xmlns"
-      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-      xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns
-        http://graphml.graphdrawing.org/xmlns/1.0/graphml.xsd">
-  <key id="d0" for="node" attr.name="color" attr.type="string">
-    <default>yellow</default>
-  </key>
-  <key id="d1" for="edge" attr.name="weight" attr.type="double"/>
-  <graph id="G" edgedefault="directed">
-    <node id="n0">
-      <data key="d0">green</data>
-    </node>
-    <node id="n1"/>
-    <node id="n2">
-      <data key="d0">blue</data>
-    </node>
-    <hyperedge id="e0" source="n0" target="n2">
-       <endpoint node="n0"/>
-       <endpoint node="n1"/>
-       <endpoint node="n2"/>
-    </hyperedge>
-  </graph>
-</graphml>
-"""
-        fh = io.BytesIO(s.encode('UTF-8'))
-        assert_raises(nx.NetworkXError,nx.read_graphml,fh)
-        assert_raises(nx.NetworkXError,nx.parse_graphml,s)
-
-    # remove test until we get the "name" issue sorted
-    # https://networkx.lanl.gov/trac/ticket/544
-    def test_default_attribute(self):
-        G=nx.Graph()
-        G.add_node(1,label=1,color='green')
-        G.add_path([0,1,2,3])
-        G.add_edge(1,2,weight=3)
-        G.graph['node_default']={'color':'yellow'}
-        G.graph['edge_default']={'weight':7}
-        fh = io.BytesIO()
-        nx.write_graphml(G,fh)
-        fh.seek(0)
-        H=nx.read_graphml(fh,node_type=int)
-        assert_equal(sorted(G.nodes()),sorted(H.nodes()))
-        assert_equal(
-            sorted(sorted(e) for e in G.edges()),
-            sorted(sorted(e) for e in H.edges()))
-        assert_equal(G.graph,H.graph)
-
-    def test_multigraph_keys(self):
-        # test that multigraphs use edge id attributes as key
-        pass
-
-    def test_multigraph_to_graph(self):
-        # test converting multigraph to graph if no parallel edges are found
-        pass
-
-    def test_yfiles_extension(self):
-        data="""<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:y="http://www.yworks.com/xml/graphml" xmlns:yed="http://www.yworks.com/xml/yed/3" xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://www.yworks.com/xml/schema/graphml/1.1/ygraphml.xsd">
-  <!--Created by yFiles for Java 2.7-->
-  <key for="graphml" id="d0" yfiles.type="resources"/>
-  <key attr.name="url" attr.type="string" for="node" id="d1"/>
-  <key attr.name="description" attr.type="string" for="node" id="d2"/>
-  <key for="node" id="d3" yfiles.type="nodegraphics"/>
-  <key attr.name="Description" attr.type="string" for="graph" id="d4">
-    <default/>
-  </key>
-  <key attr.name="url" attr.type="string" for="edge" id="d5"/>
-  <key attr.name="description" attr.type="string" for="edge" id="d6"/>
-  <key for="edge" id="d7" yfiles.type="edgegraphics"/>
-  <graph edgedefault="directed" id="G">
-    <node id="n0">
-      <data key="d3">
-        <y:ShapeNode>
-          <y:Geometry height="30.0" width="30.0" x="125.0" y="100.0"/>
-          <y:Fill color="#FFCC00" transparent="false"/>
-          <y:BorderStyle color="#000000" type="line" width="1.0"/>
-          <y:NodeLabel alignment="center" autoSizePolicy="content" borderDistance="0.0" fontFamily="Dialog" fontSize="13" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" modelName="internal" modelPosition="c" textColor="#000000" visible="true" width="12.27099609375" x="8.864501953125" y="5.43359375">1</y:NodeLabel>
-          <y:Shape type="rectangle"/>
-        </y:ShapeNode>
-      </data>
-    </node>
-    <node id="n1">
-      <data key="d3">
-        <y:ShapeNode>
-          <y:Geometry height="30.0" width="30.0" x="183.0" y="205.0"/>
-          <y:Fill color="#FFCC00" transparent="false"/>
-          <y:BorderStyle color="#000000" type="line" width="1.0"/>
-          <y:NodeLabel alignment="center" autoSizePolicy="content" borderDistance="0.0" fontFamily="Dialog" fontSize="13" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" modelName="internal" modelPosition="c" textColor="#000000" visible="true" width="12.27099609375" x="8.864501953125" y="5.43359375">2</y:NodeLabel>
-          <y:Shape type="rectangle"/>
-        </y:ShapeNode>
-      </data>
-    </node>
-    <edge id="e0" source="n0" target="n1">
-      <data key="d7">
-        <y:PolyLineEdge>
-          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
-          <y:LineStyle color="#000000" type="line" width="1.0"/>
-          <y:Arrows source="none" target="standard"/>
-          <y:BendStyle smoothed="false"/>
-        </y:PolyLineEdge>
-      </data>
-    </edge>
-  </graph>
-  <data key="d0">
-    <y:Resources/>
-  </data>
-</graphml>
-"""
-        fh = io.BytesIO(data.encode('UTF-8'))
-        G=nx.read_graphml(fh)
-        assert_equal(G.edges(),[('n0','n1')])
-        assert_equal(G['n0']['n1']['id'],'e0')
-        assert_equal(G.node['n0']['label'],'1')
-        assert_equal(G.node['n1']['label'],'2')
-
-        H=nx.parse_graphml(data)
-        assert_equal(H.edges(),[('n0','n1')])
-        assert_equal(H['n0']['n1']['id'],'e0')
-        assert_equal(H.node['n0']['label'],'1')
-        assert_equal(H.node['n1']['label'],'2')
-
-    def test_unicode(self):
-        G = nx.Graph()
-        try: # Python 3.x
-            name1 = chr(2344) + chr(123) + chr(6543)
-            name2 = chr(5543) + chr(1543) + chr(324)
-            node_type=str
-        except ValueError: # Python 2.6+
-            name1 = unichr(2344) + unichr(123) + unichr(6543)
-            name2 = unichr(5543) + unichr(1543) + unichr(324)
-            node_type=unicode
-        G.add_edge(name1, 'Radiohead', attr_dict={'foo': name2})
-        fd, fname = tempfile.mkstemp()
-        nx.write_graphml(G, fname)
-        H = nx.read_graphml(fname,node_type=node_type)
-        assert_equal(G.adj, H.adj)
-        os.close(fd)
-        os.unlink(fname)
-
-
-    def test_bool(self):
-        s="""<?xml version="1.0" encoding="UTF-8"?>
-<graphml xmlns="http://graphml.graphdrawing.org/xmlns"
-      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-      xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns
-        http://graphml.graphdrawing.org/xmlns/1.0/graphml.xsd">
-  <key id="d0" for="node" attr.name="test" attr.type="boolean">
-    <default>false</default>
-  </key>
-  <graph id="G" edgedefault="directed">
-    <node id="n0">
-      <data key="d0">True</data>
-    </node>
-    <node id="n1"/>
-    <node id="n2">
-      <data key="d0">False</data>
-    </node>
-    <node id="n3">
-      <data key="d0">true</data>
-    </node>
-    <node id="n4">
-      <data key="d0">false</data>
-    </node>
-
-
-  </graph>
-</graphml>
-"""
-        fh = io.BytesIO(s.encode('UTF-8'))
-        G=nx.read_graphml(fh)
-        assert_equal(G.node['n0']['test'],True)
-        assert_equal(G.node['n2']['test'],False)
-
-        H=nx.parse_graphml(s)
-        assert_equal(H.node['n0']['test'],True)
-        assert_equal(H.node['n2']['test'],False)
-
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/tests/test_leda.py b/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/tests/test_leda.py
deleted file mode 100644
index 1c3614e..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/tests/test_leda.py
+++ /dev/null
@@ -1,35 +0,0 @@
-#!/usr/bin/env python
-from nose.tools import *
-import networkx as nx
-import os,tempfile
-
-class TestLEDA(object):
-
-    def test_parse_leda(self):
-        data="""#header section	  \nLEDA.GRAPH \nstring\nint\n-1\n#nodes section\n5 \n|{v1}| \n|{v2}| \n|{v3}| \n|{v4}| \n|{v5}| \n\n#edges section\n7 \n1 2 0 |{4}| \n1 3 0 |{3}| \n2 3 0 |{2}| \n3 4 0 |{3}| \n3 5 0 |{7}| \n4 5 0 |{6}| \n5 1 0 |{foo}|"""
-        G=nx.parse_leda(data)
-        G=nx.parse_leda(data.split('\n'))
-        assert_equal(sorted(G.nodes()),
-                     ['v1', 'v2', 'v3', 'v4', 'v5'])
-        assert_equal([e for e in sorted(G.edges(data=True))],
-                     [('v1', 'v2', {'label': '4'}), 
-                      ('v1', 'v3', {'label': '3'}), 
-                      ('v2', 'v3', {'label': '2'}), 
-                      ('v3', 'v4', {'label': '3'}), 
-                      ('v3', 'v5', {'label': '7'}), 
-                      ('v4', 'v5', {'label': '6'}), 
-                      ('v5', 'v1', {'label': 'foo'})])
-
-
-    def test_read_LEDA(self):
-        data="""#header section	  \nLEDA.GRAPH \nstring\nint\n-1\n#nodes section\n5 \n|{v1}| \n|{v2}| \n|{v3}| \n|{v4}| \n|{v5}| \n\n#edges section\n7 \n1 2 0 |{4}| \n1 3 0 |{3}| \n2 3 0 |{2}| \n3 4 0 |{3}| \n3 5 0 |{7}| \n4 5 0 |{6}| \n5 1 0 |{foo}|"""
-        G=nx.parse_leda(data)
-        (fd,fname)=tempfile.mkstemp()
-        fh=open(fname,'w')
-        b=fh.write(data)
-        fh.close()
-        Gin=nx.read_leda(fname)
-        assert_equal(sorted(G.nodes()),sorted(Gin.nodes()))
-        assert_equal(sorted(G.edges()),sorted(Gin.edges()))
-        os.close(fd)
-        os.unlink(fname)
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/tests/test_p2g.py b/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/tests/test_p2g.py
deleted file mode 100644
index 6bd7d4e..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/tests/test_p2g.py
+++ /dev/null
@@ -1,64 +0,0 @@
-from nose.tools import assert_equal, assert_raises, assert_not_equal
-import networkx as nx
-import io
-import tempfile
-import os
-from networkx.readwrite.p2g import *
-from networkx.testing import *
-
-
-class TestP2G:
-
-    def setUp(self):
-        self.G=nx.Graph(name="test")
-        e=[('a','b'),('b','c'),('c','d'),('d','e'),('e','f'),('a','f')]
-        self.G.add_edges_from(e)
-        self.G.add_node('g')
-        self.DG=nx.DiGraph(self.G)
-
-    def test_read_p2g(self):
-        s = b"""\
-name
-3 4
-a
-1 2
-b
-
-c
-0 2
-"""
-        bytesIO = io.BytesIO(s)
-        G = read_p2g(bytesIO)
-        assert_equal(G.name,'name')
-        assert_equal(sorted(G),['a','b','c'])
-        edges = [(str(u),str(v)) for u,v in G.edges()]
-        assert_edges_equal(G.edges(),[('a','c'),('a','b'),('c','a'),('c','c')])
-
-    def test_write_p2g(self):
-        s=b"""foo
-3 2
-1
-1 
-2
-2 
-3
-
-"""
-        fh=io.BytesIO()
-        G=nx.DiGraph()
-        G.name='foo'
-        G.add_edges_from([(1,2),(2,3)])
-        write_p2g(G,fh)
-        fh.seek(0)
-        r=fh.read()
-        assert_equal(r,s)
-
-    def test_write_read_p2g(self):
-        fh=io.BytesIO()
-        G=nx.DiGraph()
-        G.name='foo'
-        G.add_edges_from([('a','b'),('b','c')])
-        write_p2g(G,fh)
-        fh.seek(0)
-        H=read_p2g(fh)
-        assert_edges_equal(G.edges(),H.edges())
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/tests/test_pajek.py b/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/tests/test_pajek.py
deleted file mode 100644
index a2e43d0..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/tests/test_pajek.py
+++ /dev/null
@@ -1,51 +0,0 @@
-#!/usr/bin/env python
-"""
-Pajek tests
-"""
-from nose.tools import assert_equal
-from networkx import *
-import os,tempfile
-from io import open
-from networkx.testing import *
-
-class TestPajek(object):
-    def setUp(self):
-        self.data="""*network Tralala\n*vertices 4\n   1 "A1"         0.0938 0.0896   ellipse x_fact 1 y_fact 1\n   2 "Bb"         0.8188 0.2458   ellipse x_fact 1 y_fact 1\n   3 "C"          0.3688 0.7792   ellipse x_fact 1\n   4 "D2"         0.9583 0.8563   ellipse x_fact 1\n*arcs\n1 1 1  h2 0 w 3 c Blue s 3 a1 -130 k1 0.6 a2 -130 k2 0.6 ap 0.5 l "Bezier loop" lc BlueViolet fos 20 lr 58 lp 0.3 la 360\n2 1 1  h2 0 a1 120 k1 1.3 a2 -120 k2 0.3 ap 25 l "Bezier arc" lphi 270 la 180 lr 19 lp 0.5\n1 2 1  h2 0 a1 40 k1 2.8 a2 30 k2 0.8 ap 25 l "Bezier arc" lphi 90 la 0 lp 0.65\n4 2 -1  h2 0 w 1 k1 -2 k2 250 ap 25 l "Circular arc" c Red lc OrangeRed\n3 4 1  p Dashed h2 0 w 2 c OliveGreen ap 25 l "Straight arc" lc PineGreen\n1 3 1  p Dashed h2 0 w 5 k1 -1 k2 -20 ap 25 l "Oval arc" c Brown lc Black\n3 3 -1  h1 6 w 1 h2 12 k1 -2 k2 -15 ap 0.5 l "Circular loop" c Red lc OrangeRed lphi 270 la 180"""
-        self.G=nx.MultiDiGraph()
-        self.G.add_nodes_from(['A1', 'Bb', 'C', 'D2'])
-        self.G.add_edges_from([('A1', 'A1'), ('A1', 'Bb'), ('A1', 'C'), 
-                               ('Bb', 'A1'),('C', 'C'), ('C', 'D2'), 
-                               ('D2', 'Bb')])
-
-        self.G.graph['name']='Tralala'
-        (self.fd,self.fname)=tempfile.mkstemp()
-        fh=open(self.fname,'wb')
-        fh.write(self.data.encode('UTF-8'))
-        fh.close()
-
-    def tearDown(self):
-        os.close(self.fd)
-        os.unlink(self.fname)
-
-    def test_parse_pajek_simple(self):
-        # Example without node positions or shape
-        data="""*Vertices 2\n1 "1"\n2 "2"\n*Edges\n1 2\n2 1"""
-        G=parse_pajek(data)
-        assert_equal(sorted(G.nodes()), ['1', '2'])
-        assert_edges_equal(G.edges(), [('1', '2'), ('1', '2')])
-
-    def test_parse_pajek(self):
-        G=parse_pajek(self.data)
-        assert_equal(sorted(G.nodes()), ['A1', 'Bb', 'C', 'D2'])
-        assert_edges_equal(G.edges(), [('A1', 'A1'), ('A1', 'Bb'), 
-                                       ('A1', 'C'), ('Bb', 'A1'),
-                                       ('C', 'C'), ('C', 'D2'), ('D2', 'Bb')])
-
-    def test_read_pajek(self):
-        G=parse_pajek(self.data)
-        Gin=read_pajek(self.fname)
-        assert_equal(sorted(G.nodes()), sorted(Gin.nodes()))
-        assert_edges_equal(G.edges(), Gin.edges())
-        assert_equal(self.G.graph,Gin.graph)
-        for n in G.node:
-            assert_equal(G.node[n],Gin.node[n])
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/tests/test_shp.py b/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/tests/test_shp.py
deleted file mode 100644
index 91c392c..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/tests/test_shp.py
+++ /dev/null
@@ -1,140 +0,0 @@
-"""Unit tests for shp.
-"""
-
-import os
-import tempfile
-from nose import SkipTest
-from nose.tools import assert_equal
-
-import networkx as nx
-
-
-class TestShp(object):
-    @classmethod
-    def setupClass(cls):
-        global ogr
-        try:
-            from osgeo import ogr
-        except ImportError:
-            raise SkipTest('ogr not available.')
-
-    def deletetmp(self, drv, *paths):
-        for p in paths:
-            if os.path.exists(p):
-                drv.DeleteDataSource(p)
-
-    def setUp(self):
-
-        def createlayer(driver):
-            lyr = shp.CreateLayer("edges", None, ogr.wkbLineString)
-            namedef = ogr.FieldDefn("Name", ogr.OFTString)
-            namedef.SetWidth(32)
-            lyr.CreateField(namedef)
-            return lyr
-
-        drv = ogr.GetDriverByName("ESRI Shapefile")
-
-        testdir = os.path.join(tempfile.gettempdir(), 'shpdir')
-        shppath = os.path.join(tempfile.gettempdir(), 'tmpshp.shp')
-
-        self.deletetmp(drv, testdir, shppath)
-        os.mkdir(testdir)
-
-        shp = drv.CreateDataSource(shppath)
-        lyr = createlayer(shp)
-        self.names = ['a', 'b', 'c']  # edgenames
-        self.paths = (  [(1.0, 1.0), (2.0, 2.0)],
-                        [(2.0, 2.0), (3.0, 3.0)],
-                        [(0.9, 0.9), (4.0, 2.0)]
-                    )
-        for path, name in zip(self.paths, self.names):
-            feat = ogr.Feature(lyr.GetLayerDefn())
-            g = ogr.Geometry(ogr.wkbLineString)
-            map(lambda xy: g.AddPoint_2D(*xy), path)
-            feat.SetGeometry(g)
-            feat.SetField("Name", name)
-            lyr.CreateFeature(feat)
-        self.shppath = shppath
-        self.testdir = testdir
-        self.drv = drv
-
-    def testload(self):
-        expected = nx.DiGraph()
-        map(expected.add_path, self.paths)
-        G = nx.read_shp(self.shppath)
-        assert_equal(sorted(expected.node), sorted(G.node))
-        assert_equal(sorted(expected.edges()), sorted(G.edges()))
-        names = [G.get_edge_data(s, e)['Name'] for s, e in G.edges()]
-        assert_equal(self.names, sorted(names))
-
-    def checkgeom(self, lyr, expected):
-        feature = lyr.GetNextFeature()
-        actualwkt = []
-        while feature:
-            actualwkt.append(feature.GetGeometryRef().ExportToWkt())
-            feature = lyr.GetNextFeature()
-        assert_equal(sorted(expected), sorted(actualwkt))
-
-    def test_geometryexport(self):
-        expectedpoints = (
-            "POINT (1 1)",
-            "POINT (2 2)",
-            "POINT (3 3)",
-            "POINT (0.9 0.9)",
-            "POINT (4 2)"
-        )
-        expectedlines = (
-            "LINESTRING (1 1,2 2)",
-            "LINESTRING (2 2,3 3)",
-            "LINESTRING (0.9 0.9,4 2)"
-        )
-        tpath = os.path.join(tempfile.gettempdir(), 'shpdir')
-        G = nx.read_shp(self.shppath)
-        nx.write_shp(G, tpath)
-        shpdir = ogr.Open(tpath)
-        self.checkgeom(shpdir.GetLayerByName("nodes"), expectedpoints)
-        self.checkgeom(shpdir.GetLayerByName("edges"), expectedlines)
-
-    def test_attributeexport(self):
-        def testattributes(lyr, graph):
-            feature = lyr.GetNextFeature()
-            while feature:
-                coords = []
-                ref = feature.GetGeometryRef()
-                for i in xrange(ref.GetPointCount()):
-                    coords.append(ref.GetPoint_2D(i))
-                name = feature.GetFieldAsString('Name')
-                assert_equal(graph.get_edge_data(*coords)['Name'], name)
-                feature = lyr.GetNextFeature()
-
-        tpath = os.path.join(tempfile.gettempdir(), 'shpdir')
-
-        G = nx.read_shp(self.shppath)
-        nx.write_shp(G, tpath)
-        shpdir = ogr.Open(tpath)
-        edges = shpdir.GetLayerByName("edges")
-        testattributes(edges, G)
-
-    def test_wkt_export(self):
-        G = nx.DiGraph()
-        tpath = os.path.join(tempfile.gettempdir(), 'shpdir')
-        points = (
-            "POINT (0.9 0.9)",
-            "POINT (4 2)"
-        )
-        line = (
-            "LINESTRING (0.9 0.9,4 2)",
-        )
-        G.add_node(1, Wkt=points[0])
-        G.add_node(2, Wkt=points[1])
-        G.add_edge(1, 2, Wkt=line[0])
-        try:
-            nx.write_shp(G, tpath)
-        except Exception as e:
-            assert False, e
-        shpdir = ogr.Open(tpath)
-        self.checkgeom(shpdir.GetLayerByName("nodes"), points)
-        self.checkgeom(shpdir.GetLayerByName("edges"), line)
-
-    def tearDown(self):
-        self.deletetmp(self.drv, self.testdir, self.shppath)
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/tests/test_sparsegraph6.py b/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/tests/test_sparsegraph6.py
deleted file mode 100644
index fea9161..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/tests/test_sparsegraph6.py
+++ /dev/null
@@ -1,87 +0,0 @@
-#!/usr/bin/env python
-from nose.tools import *
-import networkx as nx
-import os,tempfile
-
-class TestGraph6(object):
-
-    def test_parse_graph6(self):
-        data="""DF{"""
-        G=nx.parse_graph6(data)
-        assert_equal(sorted(G.nodes()),[0, 1, 2, 3, 4])
-        assert_equal([e for e in sorted(G.edges())],
-                     [(0, 3), (0, 4), (1, 3), (1, 4), (2, 3), (2, 4), (3, 4)])
-
-    def test_read_graph6(self):
-        data="""DF{"""
-        G=nx.parse_graph6(data)
-        (fd,fname)=tempfile.mkstemp()
-        fh=open(fname,'w')
-        b=fh.write(data)
-        fh.close()
-        Gin=nx.read_graph6(fname)
-        assert_equal(sorted(G.nodes()),sorted(Gin.nodes()))
-        assert_equal(sorted(G.edges()),sorted(Gin.edges()))
-        os.close(fd)
-        os.unlink(fname)
-
-    def test_read_many_graph6(self):
-        # Read many graphs into list
-        data="""DF{\nD`{\nDqK\nD~{\n"""
-        (fd,fname)=tempfile.mkstemp()
-        fh=open(fname,'w')
-        b=fh.write(data)
-        fh.close()
-        glist=nx.read_graph6_list(fname)
-        assert_equal(len(glist),4)
-        for G in glist:
-            assert_equal(sorted(G.nodes()),[0, 1, 2, 3, 4])
-        os.close(fd)
-        os.unlink(fname)
-
-
-class TestSparseGraph6(object):
-
-    def test_parse_sparse6(self):
-        data=""":Q___eDcdFcDeFcE`GaJ`IaHbKNbLM"""
-        G=nx.parse_sparse6(data)
-        assert_equal(sorted(G.nodes()),
-                     [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 
-                      10, 11, 12, 13, 14, 15, 16, 17])
-        assert_equal([e for e in sorted(G.edges())],
-                     [(0, 1), (0, 2), (0, 3), (1, 12), (1, 14), (2, 13), 
-                      (2, 15), (3, 16), (3, 17), (4, 7), (4, 9), (4, 11), 
-                      (5, 6), (5, 8), (5, 9), (6, 10), (6, 11), (7, 8), 
-                      (7, 10), (8, 12), (9, 15), (10, 14), (11, 13), 
-                      (12, 16), (13, 17), (14, 17), (15, 16)])
-
-
-    def test_read_sparse6(self):
-        data=""":Q___eDcdFcDeFcE`GaJ`IaHbKNbLM"""
-        G=nx.parse_sparse6(data)
-        (fd,fname)=tempfile.mkstemp()
-        fh=open(fname,'w')
-        b=fh.write(data)
-        fh.close()
-        Gin=nx.read_sparse6(fname)
-        assert_equal(sorted(G.nodes()),sorted(Gin.nodes()))
-        assert_equal(sorted(G.edges()),sorted(Gin.edges()))
-        os.close(fd)
-        os.unlink(fname)
-
-    def test_read_many_graph6(self):
-        # Read many graphs into list
-        data=""":Q___eDcdFcDeFcE`GaJ`IaHbKNbLM\n:Q___dCfDEdcEgcbEGbFIaJ`JaHN`IM"""
-        (fd,fname)=tempfile.mkstemp()
-        fh=open(fname,'w')
-        b=fh.write(data)
-        fh.close()
-        glist=nx.read_sparse6_list(fname)
-        assert_equal(len(glist),2)
-        for G in glist:
-            assert_equal(sorted(G.nodes()),
-                         [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 
-                          10, 11, 12, 13, 14, 15, 16, 17])
-        os.close(fd)
-        os.unlink(fname)
-
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/tests/test_yaml.py b/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/tests/test_yaml.py
deleted file mode 100644
index ca0ff56..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/readwrite/tests/test_yaml.py
+++ /dev/null
@@ -1,53 +0,0 @@
-"""
-    Unit tests for yaml.
-"""
-
-import os,tempfile
-from nose import SkipTest
-from nose.tools import assert_equal
-
-import networkx as nx
-
-class TestYaml(object):
-    @classmethod
-    def setupClass(cls):
-        global yaml
-        try:
-            import yaml
-        except ImportError:
-            raise SkipTest('yaml not available.')
-
-    def setUp(self):
-        self.build_graphs()
-
-    def build_graphs(self):
-        self.G = nx.Graph(name="test")
-        e = [('a','b'),('b','c'),('c','d'),('d','e'),('e','f'),('a','f')]
-        self.G.add_edges_from(e)
-        self.G.add_node('g')    
-
-        self.DG = nx.DiGraph(self.G)
-
-        self.MG = nx.MultiGraph()
-        self.MG.add_weighted_edges_from([(1,2,5),(1,2,5),(1,2,1),(3,3,42)])
-
-    def assert_equal(self, G, data=False):
-        (fd, fname) = tempfile.mkstemp()
-        nx.write_yaml(G, fname)
-        Gin = nx.read_yaml(fname);
-
-        assert_equal(sorted(G.nodes()),sorted(Gin.nodes()))
-        assert_equal(G.edges(data=data),Gin.edges(data=data))
-
-        os.close(fd)
-        os.unlink(fname)
-   
-    def testUndirected(self):
-        self.assert_equal(self.G, False)
-
-    def testDirected(self):
-        self.assert_equal(self.DG, False)
-
-    def testMultiGraph(self):
-        self.assert_equal(self.MG, True)
-
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/relabel.py b/lib/python2.7/site-packages/setoolsgui/networkx/relabel.py
deleted file mode 100644
index 4ff1196..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/relabel.py
+++ /dev/null
@@ -1,205 +0,0 @@
-#    Copyright (C) 2006-2013 by
-#    Aric Hagberg <hagberg@lanl.gov>
-#    Dan Schult <dschult@colgate.edu>
-#    Pieter Swart <swart@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-import networkx as nx
-__author__ = """\n""".join(['Aric Hagberg <aric.hagberg@gmail.com>',
-                           'Pieter Swart (swart@lanl.gov)',
-                           'Dan Schult (dschult@colgate.edu)'])
-__all__ = ['convert_node_labels_to_integers', 'relabel_nodes']
-
-def relabel_nodes(G, mapping, copy=True):
-    """Relabel the nodes of the graph G.
-
-    Parameters
-    ----------
-    G : graph
-       A NetworkX graph
-
-    mapping : dictionary
-       A dictionary with the old labels as keys and new labels as values.
-       A partial mapping is allowed.
-
-    copy : bool (optional, default=True)
-       If True return a copy, or if False relabel the nodes in place.
-
-    Examples
-    --------
-    >>> G=nx.path_graph(3)  # nodes 0-1-2
-    >>> mapping={0:'a',1:'b',2:'c'}
-    >>> H=nx.relabel_nodes(G,mapping)
-    >>> print(sorted(H.nodes()))
-    ['a', 'b', 'c']
-
-    >>> G=nx.path_graph(26) # nodes 0..25
-    >>> mapping=dict(zip(G.nodes(),"abcdefghijklmnopqrstuvwxyz"))
-    >>> H=nx.relabel_nodes(G,mapping) # nodes a..z
-    >>> mapping=dict(zip(G.nodes(),range(1,27)))
-    >>> G1=nx.relabel_nodes(G,mapping) # nodes 1..26
-
-    Partial in-place mapping:
-
-    >>> G=nx.path_graph(3)  # nodes 0-1-2
-    >>> mapping={0:'a',1:'b'} # 0->'a' and 1->'b'
-    >>> G=nx.relabel_nodes(G,mapping, copy=False)
-
-    print(G.nodes())
-    [2, 'b', 'a']
-
-    Mapping as function:
-
-    >>> G=nx.path_graph(3)
-    >>> def mapping(x):
-    ...    return x**2
-    >>> H=nx.relabel_nodes(G,mapping)
-    >>> print(H.nodes())
-    [0, 1, 4]
-
-    Notes
-    -----
-    Only the nodes specified in the mapping will be relabeled.
-
-    The keyword setting copy=False modifies the graph in place.
-    This is not always possible if the mapping is circular.
-    In that case use copy=True.
-
-    See Also
-    --------
-    convert_node_labels_to_integers
-    """
-    # you can pass a function f(old_label)->new_label
-    # but we'll just make a dictionary here regardless
-    if not hasattr(mapping,"__getitem__"):
-        m = dict((n,mapping(n)) for n in G)
-    else:
-        m=mapping
-    if copy:
-        return _relabel_copy(G,m)
-    else:
-        return _relabel_inplace(G,m)
-
-
-def _relabel_inplace(G, mapping):
-    old_labels=set(mapping.keys())
-    new_labels=set(mapping.values())
-    if len(old_labels & new_labels) > 0:
-        # labels sets overlap
-        # can we topological sort and still do the relabeling?
-        D=nx.DiGraph(list(mapping.items()))
-        D.remove_edges_from(D.selfloop_edges())
-        try:
-            nodes=nx.topological_sort(D)
-        except nx.NetworkXUnfeasible:
-            raise nx.NetworkXUnfeasible('The node label sets are overlapping '
-                                        'and no ordering can resolve the '
-                                        'mapping. Use copy=True.')
-        nodes.reverse()  # reverse topological order
-    else:
-        # non-overlapping label sets
-        nodes=old_labels
-
-    multigraph = G.is_multigraph()
-    directed = G.is_directed()
-
-    for old in nodes:
-        try:
-            new=mapping[old]
-        except KeyError:
-            continue
-        try:
-            G.add_node(new,attr_dict=G.node[old])
-        except KeyError:
-            raise KeyError("Node %s is not in the graph"%old)
-        if multigraph:
-            new_edges=[(new,old == target and new or target,key,data)
-                       for (_,target,key,data)
-                       in G.edges(old,data=True,keys=True)]
-            if directed:
-                new_edges+=[(old == source and new or source,new,key,data)
-                            for (source,_,key,data)
-                            in G.in_edges(old,data=True,keys=True)]
-        else:
-            new_edges=[(new,old == target and new or target,data)
-                       for (_,target,data) in G.edges(old,data=True)]
-            if directed:
-                new_edges+=[(old == source and new or source,new,data)
-                            for (source,_,data) in G.in_edges(old,data=True)]
-        G.remove_node(old)
-        G.add_edges_from(new_edges)
-    return G
-
-def _relabel_copy(G, mapping):
-    H=G.__class__()
-    H.name="(%s)" % G.name
-    if G.is_multigraph():
-        H.add_edges_from( (mapping.get(n1,n1),mapping.get(n2,n2),k,d.copy())
-                          for (n1,n2,k,d) in G.edges_iter(keys=True,data=True))
-    else:
-        H.add_edges_from( (mapping.get(n1,n1),mapping.get(n2,n2),d.copy())
-                          for (n1,n2,d) in G.edges_iter(data=True))
-
-    H.add_nodes_from(mapping.get(n,n) for n in G)
-    H.node.update(dict((mapping.get(n,n),d.copy()) for n,d in G.node.items()))
-    H.graph.update(G.graph.copy())
-
-    return H
-
-
-def convert_node_labels_to_integers(G, first_label=0, ordering="default",
-                                    label_attribute=None):
-    """Return a copy of the graph G with the nodes relabeled with integers.
-
-    Parameters
-    ----------
-    G : graph
-       A NetworkX graph
-
-    first_label : int, optional (default=0)
-       An integer specifying the offset in numbering nodes.
-       The n new integer labels are numbered first_label, ..., n-1+first_label.
-
-    ordering : string
-       "default" : inherit node ordering from G.nodes()
-       "sorted"  : inherit node ordering from sorted(G.nodes())
-       "increasing degree" : nodes are sorted by increasing degree
-       "decreasing degree" : nodes are sorted by decreasing degree
-
-    label_attribute : string, optional (default=None)
-       Name of node attribute to store old label.  If None no attribute
-       is created.
-
-    Notes
-    -----
-    Node and edge attribute data are copied to the new (relabeled) graph.
-
-    See Also
-    --------
-    relabel_nodes
-    """
-    N = G.number_of_nodes()+first_label
-    if ordering == "default":
-        mapping = dict(zip(G.nodes(),range(first_label,N)))
-    elif ordering == "sorted":
-        nlist = G.nodes()
-        nlist.sort()
-        mapping=dict(zip(nlist,range(first_label,N)))
-    elif ordering == "increasing degree":
-        dv_pairs=[(d,n) for (n,d) in G.degree_iter()]
-        dv_pairs.sort() # in-place sort from lowest to highest degree
-        mapping = dict(zip([n for d,n in dv_pairs],range(first_label,N)))
-    elif ordering == "decreasing degree":
-        dv_pairs = [(d,n) for (n,d) in G.degree_iter()]
-        dv_pairs.sort() # in-place sort from lowest to highest degree
-        dv_pairs.reverse()
-        mapping = dict(zip([n for d,n in dv_pairs],range(first_label,N)))
-    else:
-        raise nx.NetworkXError('Unknown node ordering: %s'%ordering)
-    H = relabel_nodes(G,mapping)
-    H.name="("+G.name+")_with_int_labels"
-    # create node attribute with the old label
-    if label_attribute is not None:
-        nx.set_node_attributes(H, label_attribute,
-                               dict((v,k) for k,v in mapping.items()))
-    return H
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/release.py b/lib/python2.7/site-packages/setoolsgui/networkx/release.py
deleted file mode 100644
index 285db5f..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/release.py
+++ /dev/null
@@ -1,254 +0,0 @@
-"""Release data for NetworkX.
-
-When NetworkX is imported a number of steps are followed to determine
-the version information.
-
-   1) If the release is not a development release (dev=False), then version
-      information is read from version.py, a file containing statically
-      defined version information.  This file should exist on every
-      downloadable release of NetworkX since setup.py creates it during
-      packaging/installation.  However, version.py might not exist if one
-      is running NetworkX from the mercurial repository.  In the event that
-      version.py does not exist, then no vcs information will be available.
-
-   2) If the release is a development release, then version information
-      is read dynamically, when possible.  If no dynamic information can be
-      read, then an attempt is made to read the information from version.py.
-      If version.py does not exist, then no vcs information will be available.
-
-Clarification:
-      version.py is created only by setup.py
-
-When setup.py creates version.py, it does so before packaging/installation.
-So the created file is included in the source distribution.  When a user
-downloads a tar.gz file and extracts the files, the files will not be in a
-live version control repository.  So when the user runs setup.py to install
-NetworkX, we must make sure write_versionfile() does not overwrite the
-revision information contained in the version.py that was included in the
-tar.gz file. This is why write_versionfile() includes an early escape.
-
-"""
-
-#    Copyright (C) 2004-2011 by
-#    Aric Hagberg <hagberg@lanl.gov>
-#    Dan Schult <dschult@colgate.edu>
-#    Pieter Swart <swart@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-
-from __future__ import absolute_import
-
-import os
-import sys
-import time
-import datetime
-import subprocess
-
-basedir = os.path.abspath(os.path.split(__file__)[0])
-
-def write_versionfile():
-    """Creates a static file containing version information."""
-    versionfile = os.path.join(basedir, 'version.py')
-
-    text = '''"""
-Version information for NetworkX, created during installation.
-
-Do not add this file to the repository.
-
-"""
-
-import datetime
-
-version = %(version)r
-date = %(date)r
-
-# Was NetworkX built from a development version? If so, remember that the major
-# and minor versions reference the "target" (rather than "current") release.
-dev = %(dev)r
-
-# Format: (name, major, min, revision)
-version_info = %(version_info)r
-
-# Format: a 'datetime.datetime' instance
-date_info = %(date_info)r
-
-# Format: (vcs, vcs_tuple)
-vcs_info = %(vcs_info)r
-
-'''
-
-    # Try to update all information
-    date, date_info, version, version_info, vcs_info = get_info(dynamic=True)
-
-    def writefile():
-        fh = open(versionfile, 'w')
-        subs = {
-            'dev' : dev,
-            'version': version,
-            'version_info': version_info,
-            'date': date,
-            'date_info': date_info,
-            'vcs_info': vcs_info
-        }
-        fh.write(text % subs)
-        fh.close()
-
-    if vcs_info[0] == 'mercurial':
-        # Then, we want to update version.py.
-        writefile()
-    else:
-        if os.path.isfile(versionfile):
-            # This is *good*, and the most likely place users will be when
-            # running setup.py. We do not want to overwrite version.py.
-            # Grab the version so that setup can use it.
-            sys.path.insert(0, basedir)
-            from version import version
-            del sys.path[0]
-        else:
-            # This is *bad*.  It means the user might have a tarball that
-            # does not include version.py.  Let this error raise so we can
-            # fix the tarball.
-            ##raise Exception('version.py not found!')
-
-            # We no longer require that prepared tarballs include a version.py
-            # So we use the possibly trunctated value from get_info()
-            # Then we write a new file.
-            writefile()
-
-    return version
-
-def get_revision():
-    """Returns revision and vcs information, dynamically obtained."""
-    vcs, revision, tag = None, None, None
-
-    hgdir = os.path.join(basedir, '..', '.hg')
-    gitdir = os.path.join(basedir, '..', '.git')
-
-    if os.path.isdir(hgdir):
-        vcs = 'mercurial'
-        try:
-            p = subprocess.Popen(['hg', 'id'], 
-                                 cwd=basedir,
-                                 stdout=subprocess.PIPE)
-        except OSError:
-            # Could not run hg, even though this is a mercurial repository.
-            pass
-        else:
-            stdout = p.communicate()[0]
-            # Force strings instead of unicode.
-            x = list(map(str, stdout.decode().strip().split()))
-            
-            if len(x) == 0:
-                # Somehow stdout was empty. This can happen, for example,
-                # if you're running in a terminal which has redirected stdout.
-                # In this case, we do not use any revision/tag info.
-                pass
-            elif len(x) == 1:
-                # We don't have 'tip' or anything similar...so no tag.
-                revision = str(x[0])
-            else:
-                revision = str(x[0])
-                tag = str(x[1])
-                
-    elif os.path.isdir(gitdir):
-        vcs = 'git'
-        # For now, we are not bothering with revision and tag.
-
-    vcs_info = (vcs, (revision, tag))
-
-    return revision, vcs_info
-
-def get_info(dynamic=True):
-    ## Date information
-    date_info = datetime.datetime.now()
-    date = time.asctime(date_info.timetuple())
-
-    revision, version, version_info, vcs_info = None, None, None, None
-
-    import_failed = False
-    dynamic_failed = False
-
-    if dynamic:
-        revision, vcs_info = get_revision()
-        if revision is None:
-            dynamic_failed = True
-
-    if dynamic_failed or not dynamic:
-        # This is where most final releases of NetworkX will be.
-        # All info should come from version.py. If it does not exist, then
-        # no vcs information will be provided.
-        sys.path.insert(0, basedir)
-        try:
-            from version import date, date_info, version, version_info, vcs_info
-        except ImportError:
-            import_failed = True
-            vcs_info = (None, (None, None))
-        else:
-            revision = vcs_info[1][0]
-        del sys.path[0]
-
-    if import_failed or (dynamic and not dynamic_failed):
-        # We are here if:
-        #   we failed to determine static versioning info, or
-        #   we successfully obtained dynamic revision info
-        version = ''.join([str(major), '.', str(minor)])
-        if dev:
-            version += '.dev_' + date_info.strftime("%Y%m%d%H%M%S")
-        version_info = (name, major, minor, revision)
-
-    return date, date_info, version, version_info, vcs_info
-
-## Version information
-name = 'networkx'
-major = "1"
-minor = "8.1"
-
-
-## Declare current release as a development release.
-## Change to False before tagging a release; then change back.
-dev = False
-
-
-description = "Python package for creating and manipulating graphs and networks"
-
-long_description = \
-"""
-NetworkX is a Python package for the creation, manipulation, and
-study of the structure, dynamics, and functions of complex networks.
-
-"""
-license = 'BSD'
-authors = {'Hagberg' : ('Aric Hagberg','hagberg@lanl.gov'),
-           'Schult' : ('Dan Schult','dschult@colgate.edu'),
-           'Swart' : ('Pieter Swart','swart@lanl.gov')
-           }
-maintainer = "NetworkX Developers"
-maintainer_email = "networkx-discuss@googlegroups.com"
-url = 'http://networkx.lanl.gov/'
-download_url="http://networkx.lanl.gov/download/networkx"
-platforms = ['Linux','Mac OSX','Windows','Unix']
-keywords = ['Networks', 'Graph Theory', 'Mathematics', 'network', 'graph', 'discrete mathematics', 'math']
-classifiers = [
-        'Development Status :: 4 - Beta',
-        'Intended Audience :: Developers',
-        'Intended Audience :: Science/Research',
-        'License :: OSI Approved :: BSD License',
-        'Operating System :: OS Independent',
-        'Programming Language :: Python :: 2',
-        'Programming Language :: Python :: 2.6',
-        'Programming Language :: Python :: 2.7',
-        'Programming Language :: Python :: 3',
-        'Programming Language :: Python :: 3.1',
-        'Programming Language :: Python :: 3.2',
-        'Topic :: Software Development :: Libraries :: Python Modules',
-        'Topic :: Scientific/Engineering :: Bio-Informatics',
-        'Topic :: Scientific/Engineering :: Information Analysis',
-        'Topic :: Scientific/Engineering :: Mathematics',
-        'Topic :: Scientific/Engineering :: Physics']
-
-date, date_info, version, version_info, vcs_info = get_info()
-
-if __name__ == '__main__':
-    # Write versionfile for nightly snapshots.
-    write_versionfile()
-
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/testing/__init__.py b/lib/python2.7/site-packages/setoolsgui/networkx/testing/__init__.py
deleted file mode 100644
index db57076..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/testing/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-from networkx.testing.utils import *
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/testing/tests/test_utils.py b/lib/python2.7/site-packages/setoolsgui/networkx/testing/tests/test_utils.py
deleted file mode 100644
index 9c57649..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/testing/tests/test_utils.py
+++ /dev/null
@@ -1,108 +0,0 @@
-from nose.tools import *
-import networkx as nx
-from networkx.testing import *
-
-# thanks to numpy for this GenericTest class (numpy/testing/test_utils.py)
-class _GenericTest(object):
-    def _test_equal(self, a, b):
-        self._assert_func(a, b)
-
-    def _test_not_equal(self, a, b):
-        try:
-            self._assert_func(a, b)
-            passed = True
-        except AssertionError:
-            pass
-        else:
-            raise AssertionError("a and b are found equal but are not")
-
-
-class TestNodesEqual(_GenericTest):
-    def setUp(self):
-        self._assert_func = assert_nodes_equal
-
-    def test_nodes_equal(self):
-        a = [1,2,5,4]
-        b = [4,5,1,2]
-        self._test_equal(a,b)
-
-    def test_nodes_not_equal(self):
-        a = [1,2,5,4]
-        b = [4,5,1,3]
-        self._test_not_equal(a,b)
-
-    def test_nodes_with_data_equal(self):
-        G = nx.Graph()
-        G.add_nodes_from([1,2,3],color='red')
-        H = nx.Graph()
-        H.add_nodes_from([1,2,3],color='red')
-        self._test_equal(G.nodes(data=True), H.nodes(data=True))
-
-    def test_edges_with_data_not_equal(self):
-        G = nx.Graph()
-        G.add_nodes_from([1,2,3],color='red')
-        H = nx.Graph()
-        H.add_nodes_from([1,2,3],color='blue')
-        self._test_not_equal(G.nodes(data=True), H.nodes(data=True))
-
-
-class TestEdgesEqual(_GenericTest):
-    def setUp(self):
-        self._assert_func = assert_edges_equal
-
-    def test_edges_equal(self):
-        a = [(1,2),(5,4)]
-        b = [(4,5),(1,2)]
-        self._test_equal(a,b)
-
-    def test_edges_not_equal(self):
-        a = [(1,2),(5,4)]
-        b = [(4,5),(1,3)]
-        self._test_not_equal(a,b)
-
-    def test_edges_with_data_equal(self):
-        G = nx.MultiGraph()
-        G.add_path([0,1,2],weight=1)
-        H = nx.MultiGraph()
-        H.add_path([0,1,2],weight=1)
-        self._test_equal(G.edges(data=True, keys=True),
-                         H.edges(data=True, keys=True))
-
-    def test_edges_with_data_not_equal(self):
-        G = nx.MultiGraph()
-        G.add_path([0,1,2],weight=1)
-        H = nx.MultiGraph()
-        H.add_path([0,1,2],weight=2)
-        self._test_not_equal(G.edges(data=True, keys=True),
-                             H.edges(data=True, keys=True))
-
-class TestGraphsEqual(_GenericTest):
-    def setUp(self):
-        self._assert_func = assert_graphs_equal
-
-    def test_graphs_equal(self):
-        G = nx.path_graph(4)
-        H = nx.Graph()
-        H.add_path(range(4))
-        H.name='path_graph(4)'
-        self._test_equal(G,H)
-
-    def test_graphs_not_equal(self):
-        G = nx.path_graph(4)
-        H = nx.Graph()
-        H.add_cycle(range(4))
-        self._test_not_equal(G,H)
-
-    def test_graphs_not_equal2(self):
-        G = nx.path_graph(4)
-        H = nx.Graph()
-        H.add_path(range(3))
-        H.name='path_graph(4)'
-        self._test_not_equal(G,H)
-
-    def test_graphs_not_equal3(self):
-        G = nx.path_graph(4)
-        H = nx.Graph()
-        H.add_path(range(4))
-        H.name='path_graph(foo)'
-        self._test_not_equal(G,H)
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/testing/utils.py b/lib/python2.7/site-packages/setoolsgui/networkx/testing/utils.py
deleted file mode 100644
index 5cca7f8..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/testing/utils.py
+++ /dev/null
@@ -1,57 +0,0 @@
-import operator
-from nose.tools import *
-__all__ = ['assert_nodes_equal', 'assert_edges_equal','assert_graphs_equal']
-
-def assert_nodes_equal(nlist1, nlist2):
-    # Assumes lists are either nodes, or (node,datadict) tuples,
-    # and also that nodes are orderable/sortable.
-    try:
-        l = len(nlist1[0])
-        n1 = sorted(nlist1,key=operator.itemgetter(0))
-        n2 = sorted(nlist2,key=operator.itemgetter(0))
-        assert_equal(len(n1),len(n2))
-        for a,b in zip(n1,n2):
-            assert_equal(a,b)
-    except TypeError:
-        assert_equal(set(nlist1),set(nlist2))
-    return
-
-def assert_edges_equal(elist1, elist2):
-    # Assumes lists with u,v nodes either as
-    # edge tuples (u,v)
-    # edge tuples with data dicts (u,v,d)
-    # edge tuples with keys and data dicts (u,v,k, d)
-    # and also that nodes are orderable/sortable.
-    e1 = sorted(elist1,key=lambda x: sorted(x[0:2]))
-    e2 = sorted(elist2,key=lambda x: sorted(x[0:2]))
-    assert_equal(len(e1),len(e2))
-    if len(e1) == 0:
-        return True
-    if len(e1[0]) == 2:
-        for a,b in zip(e1,e2):
-            assert_equal(set(a[0:2]),set(b[0:2]))
-    elif len(e1[0]) == 3:
-        for a,b in zip(e1,e2):
-            assert_equal(set(a[0:2]),set(b[0:2]))
-            assert_equal(a[2],b[2])
-    elif len(e1[0]) == 4:
-        for a,b in zip(e1,e2):
-            assert_equal(set(a[0:2]),set(b[0:2]))
-            assert_equal(a[2],b[2])
-            assert_equal(a[3],b[3])
-
-
-def assert_graphs_equal(graph1, graph2):
-    if graph1.is_multigraph():
-        edges1 = graph1.edges(data=True,keys=True)
-    else:
-        edges1 = graph1.edges(data=True)
-        if graph2.is_multigraph():
-            edges2 = graph2.edges(data=True,keys=True)
-        else:
-            edges2 = graph2.edges(data=True)
-    assert_nodes_equal(graph1.nodes(data=True),
-                       graph2.nodes(data=True))
-    assert_edges_equal(edges1, edges2)
-    assert_equal(graph1.graph,graph2.graph)
-    return
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/tests/__init__.py b/lib/python2.7/site-packages/setoolsgui/networkx/tests/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/tests/__init__.py
+++ /dev/null
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/tests/benchmark.py b/lib/python2.7/site-packages/setoolsgui/networkx/tests/benchmark.py
deleted file mode 100644
index 5eb68d0..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/tests/benchmark.py
+++ /dev/null
@@ -1,248 +0,0 @@
-from timeit import Timer
-
-# This is gratefully modeled after the benchmarks found in 
-# the numpy svn repository.  http://svn.scipy.org/svn/numpy/trunk
-
-class Benchmark(object):
-    """
-    Benchmark a method or simple bit of code using different Graph classes.
-    If the test code is the same for each graph class, then you can set it 
-    during instantiation through the argument test_string.
-    The argument test_string can also be a tuple of test code and setup code.
-    The code is entered as a string valid for use with the timeit module. 
-
-    Example:
-    >>> b=Benchmark(['Graph','XGraph'])
-    >>> b['Graph']=('G.add_nodes_from(nlist)','nlist=range(100)')
-    >>> b.run()
-    """
-    def __init__(self,graph_classes,title='',test_string=None,runs=3,reps=1000):
-        self.runs = runs
-        self.reps = reps
-        self.title = title
-        self.class_tests = dict((gc,'') for gc in graph_classes)
-        # set up the test string if it is the same for all classes.
-        if test_string is not None:
-            if isinstance(test_string,tuple):
-                self['all']=test_string
-            else:
-                self['all']=(test_string,'')
-
-    def __setitem__(self,graph_class,some_strs):
-        """
-        Set a simple bit of code and setup string for the test.
-        Use this for cases where the code differs from one class to another.
-        """
-        test_str, setup_str = some_strs
-        if graph_class == 'all':
-            graph_class = self.class_tests.keys()
-        elif not isinstance(graph_class,list):
-            graph_class = [graph_class]
-
-        for GC in graph_class:
-            setup_string='import networkx as NX\nG=NX.%s.%s()\n'%\
-                          (GC.lower(),GC) + setup_str
-            self.class_tests[GC] = Timer(test_str, setup_string)
-
-
-    def run(self):
-        """Run the benchmark for each class and print results."""
-        column_len = max(len(G) for G in self.class_tests)
-
-        print('='*72)
-        if self.title:
-            print("%s: %s runs, %s reps"% (self.title,self.runs,self.reps))
-        print('='*72)
-
-        times=[]
-        for GC,timer in self.class_tests.items():
-            name = GC.ljust(column_len)
-            try:
-                t=sum(timer.repeat(self.runs,self.reps))/self.runs
-#                print "%s: %s" % (name, timer.repeat(self.runs,self.reps))
-                times.append((t,name))
-            except Exception as e:
-                print("%s: Failed to benchmark (%s)." % (name,e))
-                        
-
-        times.sort()                
-        tmin=times[0][0]                
-        for t,name in times:
-            print("%s: %5.2f %s" % (name, t/tmin*100.,t))
-        print('-'*72)
-        print()
-
-if __name__ == "__main__":
-    # set up for all routines:
-    classes=['Graph','MultiGraph','DiGraph','MultiDiGraph']
-    all_tests=['add_nodes','add_edges','remove_nodes','remove_edges',\
-            'neighbors','edges','degree','dijkstra','shortest path',\
-            'subgraph','edgedata_subgraph','laplacian']
-    # Choose which tests to run
-    tests=all_tests
-    tests=['subgraph','edgedata_subgraph']
-    #tests=all_tests[-1:]
-    N=100
-
-    if 'add_nodes' in tests:
-        title='Benchmark: Adding nodes'
-        test_string=('G.add_nodes_from(nlist)','nlist=range(%i)'%N)
-        b=Benchmark(classes,title,test_string,runs=3,reps=1000)
-        b.run()
-
-    if 'add_edges' in tests:
-        title='Benchmark: Adding edges'
-        setup='elist=[(i,i+3) for i in range(%s-3)]\nG.add_nodes_from(range(%i))'%(N,N)
-        test_string=('G.add_edges_from(elist)',setup)
-        b=Benchmark(classes,title,test_string,runs=3,reps=1000)
-        b.run()
-
-    if 'remove_nodes' in tests:
-        title='Benchmark: Adding and Deleting nodes'
-        setup='nlist=range(%i)'%N
-        test_string=('G.add_nodes_from(nlist)\nG.remove_nodes_from(nlist)',setup)
-        b=Benchmark(classes,title,test_string,runs=3,reps=1000)
-        b.run()
-
-    if 'remove_edges' in tests:
-        title='Benchmark: Adding and Deleting edges'
-        setup='elist=[(i,i+3) for i in range(%s-3)]'%N
-        test_string=('G.add_edges_from(elist)\nG.remove_edges_from(elist)',setup)
-        b=Benchmark(classes,title,test_string,runs=3,reps=1000)
-        b.run()
-
-    if 'neighbors' in tests:
-        N=500
-        p=0.3
-        title='Benchmark: reporting neighbors'
-        b=Benchmark(classes,title,runs=3,reps=1)
-        test_string='for n in G:\n for nbr in G.neighbors(n):\n  pass'
-        all_setup='H=NX.binomial_graph(%s,%s)\nfor (u,v) in H.edges_iter():\n '%(N,p)
-        setup=all_setup+'G.add_edge(u,v)\n'
-        if 'Graph' in classes: b['Graph']=(test_string,setup)
-        setup=all_setup+'G.add_edges_from([(u,v),(v,u)])'
-        if 'DiGraph' in classes: b['DiGraph']=(test_string,setup)
-        setup=all_setup+'G.add_edge(u,v)' 
-        if 'MultiGraph' in classes: b['MultiGraph']=(test_string,setup)
-        setup=all_setup+'G.add_edges_from([(u,v),(v,u)])'
-        if 'MultiDiGraph' in classes: b['MultiDiGraph']=(test_string,setup)
-        b.run()
-
-    if 'edges' in tests:
-        N=500
-        p=0.3
-        title='Benchmark: reporting edges'
-        b=Benchmark(classes,title,runs=3,reps=1)
-        test_string='for n in G:\n for e in G.edges(n):\n  pass'
-        all_setup='H=NX.binomial_graph(%s,%s)\nfor (u,v) in H.edges_iter():\n '%(N,p)
-        setup=all_setup+'G.add_edge(u,v)\n'
-        if 'Graph' in classes: b['Graph']=(test_string,setup)
-        setup=all_setup+'G.add_edges_from([(u,v),(v,u)])'
-        if 'DiGraph' in classes: b['DiGraph']=(test_string,setup)
-        setup=all_setup+'G.add_edge(u,v)' 
-        if 'MultiGraph' in classes: b['MultiGraph']=(test_string,setup)
-        setup=all_setup+'G.add_edges_from([(u,v),(v,u)])'
-        if 'MultiDiGraph' in classes: b['MultiDiGraph']=(test_string,setup)
-        b.run()
-
-    if 'degree' in tests:
-        N=500
-        p=0.3
-        title='Benchmark: reporting degree'
-        b=Benchmark(classes,title,runs=3,reps=1)
-        test_string='for d in G.degree():\n  pass'
-        all_setup='H=NX.binomial_graph(%s,%s)\nfor (u,v) in H.edges_iter():\n '%(N,p)
-        setup=all_setup+'G.add_edge(u,v)\n'
-        if 'Graph' in classes: b['Graph']=(test_string,setup)
-        setup=all_setup+'G.add_edges_from([(u,v),(v,u)])'
-        if 'DiGraph' in classes: b['DiGraph']=(test_string,setup)
-        setup=all_setup+'G.add_edge(u,v)' 
-        if 'MultiGraph' in classes: b['MultiGraph']=(test_string,setup)
-        setup=all_setup+'G.add_edges_from([(u,v),(v,u)])'
-        if 'MultiDiGraph' in classes: b['MultiDiGraph']=(test_string,setup)
-        b.run()
-
-    if 'dijkstra' in tests:
-        N=500
-        p=0.3
-        title='dijkstra single source shortest path'
-        b=Benchmark(classes,title,runs=3,reps=1)
-        test_string='p=NX.single_source_dijkstra(G,i)'
-        all_setup='i=6\nH=NX.binomial_graph(%s,%s)\nfor (u,v) in H.edges_iter():\n '%(N,p)
-        setup=all_setup+'G.add_edge(u,v)'
-        if 'Graph' in classes: b['Graph']=(test_string,setup)
-        setup=all_setup+'G.add_edges_from([(u,v),(v,u)])'
-        if 'DiGraph' in classes: b['DiGraph']=(test_string,setup)
-        setup=all_setup+'G.add_edge(u,v)' 
-        if 'MultiGraph' in classes: b['MultiGraph']=(test_string,setup)
-        setup=all_setup+'G.add_edges_from([(u,v),(v,u)])'
-        if 'MultiDiGraph' in classes: b['MultiDiGraph']=(test_string,setup)
-        b.run()
-
-    if 'shortest path' in tests:
-        N=500
-        p=0.3
-        title='single source shortest path'
-        b=Benchmark(classes,title,runs=3,reps=1)
-        test_string='p=NX.single_source_shortest_path(G,i)'
-        all_setup='i=6\nH=NX.binomial_graph(%s,%s)\nfor (u,v) in H.edges_iter():\n '%(N,p)
-        setup=all_setup+'G.add_edge(u,v)'
-        if 'Graph' in classes: b['Graph']=(test_string,setup)
-        setup=all_setup+'G.add_edges_from([(u,v),(v,u)])'
-        if 'DiGraph' in classes: b['DiGraph']=(test_string,setup)
-        setup=all_setup+'G.add_edge(u,v)' 
-        if 'MultiGraph' in classes: b['MultiGraph']=(test_string,setup)
-        setup=all_setup+'G.add_edges_from([(u,v),(v,u)])'
-        if 'MultiDiGraph' in classes: b['MultiDiGraph']=(test_string,setup)
-        b.run()
-
-    if 'subgraph' in tests:
-        N=500
-        p=0.3
-        title='subgraph method'
-        b=Benchmark(classes,title,runs=3,reps=1)
-        test_string='G.subgraph(nlist)'
-        all_setup='nlist=range(100,150)\nH=NX.binomial_graph(%s,%s)\nfor (u,v) in H.edges_iter():\n '%(N,p)
-        setup=all_setup+'G.add_edge(u,v)'
-        if 'Graph' in classes: b['Graph']=(test_string,setup)
-        setup=all_setup+'G.add_edges_from([(u,v),(v,u)])'
-        if 'DiGraph' in classes: b['DiGraph']=(test_string,setup)
-        setup=all_setup+'G.add_edge(u,v)' 
-        if 'MultiGraph' in classes: b['MultiGraph']=(test_string,setup)
-        setup=all_setup+'G.add_edges_from([(u,v),(v,u)])'
-        if 'MultiDiGraph' in classes: b['MultiDiGraph']=(test_string,setup)
-        b.run()
-
-    if 'edgedata_subgraph' in tests:
-        N=500
-        p=0.3
-        title='subgraph method with edge data present'
-        b=Benchmark(classes,title,runs=3,reps=1)
-        test_string='G.subgraph(nlist)'
-        all_setup='nlist=range(100,150)\nH=NX.binomial_graph(%s,%s)\nfor (u,v) in H.edges_iter():\n '%(N,p)
-        setup=all_setup+'G.add_edge(u,v,hi=3)'
-        if 'Graph' in classes: b['Graph']=(test_string,setup)
-        setup=all_setup+'G.add_edges_from([(u,v),(v,u)],hi=2)'
-        if 'DiGraph' in classes: b['DiGraph']=(test_string,setup)
-        setup=all_setup+'G.add_edge(u,v,hi=1)' 
-        if 'MultiGraph' in classes: b['MultiGraph']=(test_string,setup)
-        setup=all_setup+'G.add_edges_from([(u,v),(v,u)],hi=2)'
-        if 'MultiDiGraph' in classes: b['MultiDiGraph']=(test_string,setup)
-        b.run()
-
-    if 'laplacian' in tests:
-        N=500
-        p=0.3
-        title='creation of laplacian matrix'
-        b=Benchmark(classes,title,runs=3,reps=1)
-        test_string='NX.laplacian(G)'
-        all_setup='H=NX.binomial_graph(%s,%s)\nfor (u,v) in H.edges_iter():\n '%(N,p)
-        setup=all_setup+'G.add_edge(u,v)'
-        if 'Graph' in classes: b['Graph']=(test_string,setup)
-        setup=all_setup+'G.add_edges_from([(u,v),(v,u)])'
-        if 'DiGraph' in classes: b['DiGraph']=(test_string,setup)
-        setup=all_setup+'G.add_edge(u,v)' 
-        if 'MultiGraph' in classes: b['MultiGraph']=(test_string,setup)
-        setup=all_setup+'G.add_edges_from([(u,v),(v,u)])'
-        if 'MultiDiGraph' in classes: b['MultiDiGraph']=(test_string,setup)
-        b.run()
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/tests/test.py b/lib/python2.7/site-packages/setoolsgui/networkx/tests/test.py
deleted file mode 100755
index e776d32..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/tests/test.py
+++ /dev/null
@@ -1,45 +0,0 @@
-#!/usr/bin/env python
-import sys
-from os import path,getcwd
-
-def run(verbosity=1,doctest=False,numpy=True):
-    """Run NetworkX tests.
-
-    Parameters
-    ----------
-    verbosity: integer, optional
-      Level of detail in test reports.  Higher numbers provide  more detail.  
-
-    doctest: bool, optional
-      True to run doctests in code modules
-
-    numpy: bool, optional
-      True to test modules dependent on numpy
-    """
-    try:
-        import nose
-    except ImportError:
-        raise ImportError(\
-            "The nose package is needed to run the NetworkX tests.")
-
-    sys.stderr.write("Running NetworkX tests:")
-    nx_install_dir=path.join(path.dirname(__file__), path.pardir)
-    # stop if running from source directory
-    if getcwd() == path.abspath(path.join(nx_install_dir,path.pardir)):
-        raise RuntimeError("Can't run tests from source directory.\n"
-                           "Run 'nosetests' from the command line.")
-
-    argv=[' ','--verbosity=%d'%verbosity,
-          '-w',nx_install_dir,
-          '-exe']
-    if doctest:
-        argv.extend(['--with-doctest','--doctest-extension=txt'])
-    if not numpy:
-        argv.extend(['-A not numpy'])
-
-
-    nose.run(argv=argv)
-
-if __name__=="__main__":
-    run()
-
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/tests/test_convert.py b/lib/python2.7/site-packages/setoolsgui/networkx/tests/test_convert.py
deleted file mode 100644
index 38a66e2..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/tests/test_convert.py
+++ /dev/null
@@ -1,224 +0,0 @@
-#!/usr/bin/env python
-
-"""Convert
-=======
-"""
-
-from nose.tools import *
-from networkx import *
-from networkx.convert import *
-from networkx.algorithms.operators import *
-from networkx.generators.classic import barbell_graph,cycle_graph
-
-class TestConvert():
-    def edgelists_equal(self,e1,e2):
-        return sorted(sorted(e) for e in e1)==sorted(sorted(e) for e in e2)
-    
-        
-
-    def test_simple_graphs(self):
-        for dest, source in [(to_dict_of_dicts, from_dict_of_dicts),
-                             (to_dict_of_lists, from_dict_of_lists)]:
-            G=barbell_graph(10,3)
-            dod=dest(G)
-
-            # Dict of [dicts, lists]
-            GG=source(dod)
-            assert_equal(sorted(G.nodes()), sorted(GG.nodes()))
-            assert_equal(sorted(G.edges()), sorted(GG.edges()))
-            GW=to_networkx_graph(dod)
-            assert_equal(sorted(G.nodes()), sorted(GW.nodes()))
-            assert_equal(sorted(G.edges()), sorted(GW.edges()))
-            GI=Graph(dod)
-            assert_equal(sorted(G.nodes()), sorted(GI.nodes()))
-            assert_equal(sorted(G.edges()), sorted(GI.edges()))
-
-            # With nodelist keyword
-            P4=path_graph(4)
-            P3=path_graph(3)
-            dod=dest(P4,nodelist=[0,1,2])
-            Gdod=Graph(dod)
-            assert_equal(sorted(Gdod.nodes()), sorted(P3.nodes()))
-            assert_equal(sorted(Gdod.edges()), sorted(P3.edges()))
-
-    def test_digraphs(self):
-        for dest, source in [(to_dict_of_dicts, from_dict_of_dicts),
-                             (to_dict_of_lists, from_dict_of_lists)]:
-            G=cycle_graph(10)
-
-            # Dict of [dicts, lists]
-            dod=dest(G)
-            GG=source(dod)
-            assert_equal(sorted(G.nodes()), sorted(GG.nodes()))
-            assert_equal(sorted(G.edges()), sorted(GG.edges()))
-            GW=to_networkx_graph(dod)
-            assert_equal(sorted(G.nodes()), sorted(GW.nodes()))
-            assert_equal(sorted(G.edges()), sorted(GW.edges()))
-            GI=Graph(dod)
-            assert_equal(sorted(G.nodes()), sorted(GI.nodes()))
-            assert_equal(sorted(G.edges()), sorted(GI.edges()))
-
-            G=cycle_graph(10,create_using=DiGraph())
-            dod=dest(G)
-            GG=source(dod, create_using=DiGraph())
-            assert_equal(sorted(G.nodes()), sorted(GG.nodes()))
-            assert_equal(sorted(G.edges()), sorted(GG.edges()))
-            GW=to_networkx_graph(dod, create_using=DiGraph())
-            assert_equal(sorted(G.nodes()), sorted(GW.nodes()))
-            assert_equal(sorted(G.edges()), sorted(GW.edges()))
-            GI=DiGraph(dod)
-            assert_equal(sorted(G.nodes()), sorted(GI.nodes()))
-            assert_equal(sorted(G.edges()), sorted(GI.edges()))
-
-    def test_graph(self):
-        G=cycle_graph(10)
-        e=G.edges()
-        source=[u for u,v in e]
-        dest=[v for u,v in e]
-        ex=zip(source,dest,source)
-        G=Graph()
-        G.add_weighted_edges_from(ex)
-        
-        # Dict of dicts
-        dod=to_dict_of_dicts(G)
-        GG=from_dict_of_dicts(dod,create_using=Graph())
-        assert_equal(sorted(G.nodes()), sorted(GG.nodes()))
-        assert_equal(sorted(G.edges()), sorted(GG.edges()))
-        GW=to_networkx_graph(dod,create_using=Graph())
-        assert_equal(sorted(G.nodes()), sorted(GW.nodes()))
-        assert_equal(sorted(G.edges()), sorted(GW.edges()))
-        GI=Graph(dod)
-        assert_equal(sorted(G.nodes()), sorted(GI.nodes()))
-        assert_equal(sorted(G.edges()), sorted(GI.edges()))
-
-        # Dict of lists
-        dol=to_dict_of_lists(G)
-        GG=from_dict_of_lists(dol,create_using=Graph())
-        # dict of lists throws away edge data so set it to none
-        enone=[(u,v,{}) for (u,v,d) in G.edges(data=True)]
-        assert_equal(sorted(G.nodes()), sorted(GG.nodes()))
-        assert_equal(enone, sorted(GG.edges(data=True)))
-        GW=to_networkx_graph(dol,create_using=Graph())
-        assert_equal(sorted(G.nodes()), sorted(GW.nodes()))
-        assert_equal(enone, sorted(GW.edges(data=True)))
-        GI=Graph(dol)
-        assert_equal(sorted(G.nodes()), sorted(GI.nodes()))
-        assert_equal(enone, sorted(GI.edges(data=True)))
-
-
-    def test_with_multiedges_self_loops(self):
-        G=cycle_graph(10)
-        e=G.edges()
-        source,dest = list(zip(*e))
-        ex=list(zip(source,dest,source))
-        XG=Graph()
-        XG.add_weighted_edges_from(ex)
-        XGM=MultiGraph()
-        XGM.add_weighted_edges_from(ex)
-        XGM.add_edge(0,1,weight=2) # multiedge
-        XGS=Graph()
-        XGS.add_weighted_edges_from(ex)
-        XGS.add_edge(0,0,weight=100) # self loop
-
-        # Dict of dicts
-        # with self loops, OK
-        dod=to_dict_of_dicts(XGS)
-        GG=from_dict_of_dicts(dod,create_using=Graph())
-        assert_equal(sorted(XGS.nodes()), sorted(GG.nodes()))
-        assert_equal(sorted(XGS.edges()), sorted(GG.edges()))
-        GW=to_networkx_graph(dod,create_using=Graph())
-        assert_equal(sorted(XGS.nodes()), sorted(GW.nodes()))
-        assert_equal(sorted(XGS.edges()), sorted(GW.edges()))
-        GI=Graph(dod)
-        assert_equal(sorted(XGS.nodes()), sorted(GI.nodes()))
-        assert_equal(sorted(XGS.edges()), sorted(GI.edges()))
-
-        # Dict of lists
-        # with self loops, OK
-        dol=to_dict_of_lists(XGS)
-        GG=from_dict_of_lists(dol,create_using=Graph())
-        # dict of lists throws away edge data so set it to none
-        enone=[(u,v,{}) for (u,v,d) in XGS.edges(data=True)]
-        assert_equal(sorted(XGS.nodes()), sorted(GG.nodes()))
-        assert_equal(enone, sorted(GG.edges(data=True)))
-        GW=to_networkx_graph(dol,create_using=Graph())
-        assert_equal(sorted(XGS.nodes()), sorted(GW.nodes()))
-        assert_equal(enone, sorted(GW.edges(data=True)))
-        GI=Graph(dol)
-        assert_equal(sorted(XGS.nodes()), sorted(GI.nodes()))
-        assert_equal(enone, sorted(GI.edges(data=True)))
-
-        # Dict of dicts
-        # with multiedges, OK
-        dod=to_dict_of_dicts(XGM)
-        GG=from_dict_of_dicts(dod,create_using=MultiGraph(),
-                              multigraph_input=True)
-        assert_equal(sorted(XGM.nodes()), sorted(GG.nodes()))
-        assert_equal(sorted(XGM.edges()), sorted(GG.edges()))
-        GW=to_networkx_graph(dod,create_using=MultiGraph(),multigraph_input=True)
-        assert_equal(sorted(XGM.nodes()), sorted(GW.nodes()))
-        assert_equal(sorted(XGM.edges()), sorted(GW.edges()))
-        GI=MultiGraph(dod)  # convert can't tell whether to duplicate edges!
-        assert_equal(sorted(XGM.nodes()), sorted(GI.nodes()))
-        #assert_not_equal(sorted(XGM.edges()), sorted(GI.edges()))
-        assert_false(sorted(XGM.edges()) == sorted(GI.edges()))
-        GE=from_dict_of_dicts(dod,create_using=MultiGraph(),
-                              multigraph_input=False)  
-        assert_equal(sorted(XGM.nodes()), sorted(GE.nodes()))
-        assert_not_equal(sorted(XGM.edges()), sorted(GE.edges()))
-        GI=MultiGraph(XGM)
-        assert_equal(sorted(XGM.nodes()), sorted(GI.nodes()))
-        assert_equal(sorted(XGM.edges()), sorted(GI.edges()))
-        GM=MultiGraph(G)
-        assert_equal(sorted(GM.nodes()), sorted(G.nodes()))
-        assert_equal(sorted(GM.edges()), sorted(G.edges()))
-
-        # Dict of lists
-        # with multiedges, OK, but better write as DiGraph else you'll
-        # get double edges
-        dol=to_dict_of_lists(G)
-        GG=from_dict_of_lists(dol,create_using=MultiGraph())
-        assert_equal(sorted(G.nodes()), sorted(GG.nodes()))
-        assert_equal(sorted(G.edges()), sorted(GG.edges()))
-        GW=to_networkx_graph(dol,create_using=MultiGraph())
-        assert_equal(sorted(G.nodes()), sorted(GW.nodes()))
-        assert_equal(sorted(G.edges()), sorted(GW.edges()))
-        GI=MultiGraph(dol)
-        assert_equal(sorted(G.nodes()), sorted(GI.nodes()))
-        assert_equal(sorted(G.edges()), sorted(GI.edges()))
-
-    def test_edgelists(self):
-        P=path_graph(4)
-        e=[(0,1),(1,2),(2,3)]
-        G=Graph(e)
-        assert_equal(sorted(G.nodes()), sorted(P.nodes()))
-        assert_equal(sorted(G.edges()), sorted(P.edges()))
-        assert_equal(sorted(G.edges(data=True)), sorted(P.edges(data=True)))
-
-        e=[(0,1,{}),(1,2,{}),(2,3,{})]
-        G=Graph(e)
-        assert_equal(sorted(G.nodes()), sorted(P.nodes()))
-        assert_equal(sorted(G.edges()), sorted(P.edges()))
-        assert_equal(sorted(G.edges(data=True)), sorted(P.edges(data=True)))
-
-        e=((n,n+1) for n in range(3))
-        G=Graph(e)
-        assert_equal(sorted(G.nodes()), sorted(P.nodes()))
-        assert_equal(sorted(G.edges()), sorted(P.edges()))
-        assert_equal(sorted(G.edges(data=True)), sorted(P.edges(data=True)))
-
-    def test_directed_to_undirected(self):
-        edges1 = [(0, 1), (1, 2), (2, 0)]
-        edges2 = [(0, 1), (1, 2), (0, 2)]
-        assert_true(self.edgelists_equal(nx.Graph(nx.DiGraph(edges1)).edges(),edges1))
-        assert_true(self.edgelists_equal(nx.Graph(nx.DiGraph(edges2)).edges(),edges1))
-        assert_true(self.edgelists_equal(nx.MultiGraph(nx.DiGraph(edges1)).edges(),edges1))
-        assert_true(self.edgelists_equal(nx.MultiGraph(nx.DiGraph(edges2)).edges(),edges1))
-
-        assert_true(self.edgelists_equal(nx.MultiGraph(nx.MultiDiGraph(edges1)).edges(),
-                                         edges1))
-        assert_true(self.edgelists_equal(nx.MultiGraph(nx.MultiDiGraph(edges2)).edges(),
-                                         edges1))
-
-        assert_true(self.edgelists_equal(nx.Graph(nx.MultiDiGraph(edges1)).edges(),edges1))
-        assert_true(self.edgelists_equal(nx.Graph(nx.MultiDiGraph(edges2)).edges(),edges1))
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/tests/test_convert_numpy.py b/lib/python2.7/site-packages/setoolsgui/networkx/tests/test_convert_numpy.py
deleted file mode 100644
index 2a4ef96..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/tests/test_convert_numpy.py
+++ /dev/null
@@ -1,172 +0,0 @@
-from nose import SkipTest
-from nose.tools import assert_raises, assert_true, assert_equal
-
-import networkx as nx
-from networkx.generators.classic import barbell_graph,cycle_graph,path_graph
-
-class TestConvertNumpy(object):
-    numpy=1 # nosetests attribute, use nosetests -a 'not numpy' to skip test
-    @classmethod
-    def setupClass(cls):
-        global np
-        global np_assert_equal
-        try:
-            import numpy as np
-            np_assert_equal=np.testing.assert_equal
-        except ImportError:
-            raise SkipTest('NumPy not available.')
-
-    def __init__(self):
-        self.G1 = barbell_graph(10, 3)
-        self.G2 = cycle_graph(10, create_using=nx.DiGraph())
-
-        self.G3 = self.create_weighted(nx.Graph())
-        self.G4 = self.create_weighted(nx.DiGraph())
-
-    def create_weighted(self, G):
-        g = cycle_graph(4)
-        e = g.edges()
-        source = [u for u,v in e]
-        dest = [v for u,v in e]
-        weight = [s+10 for s in source]
-        ex = zip(source, dest, weight)
-        G.add_weighted_edges_from(ex)
-        return G
-
-    def assert_equal(self, G1, G2):
-        assert_true( sorted(G1.nodes())==sorted(G2.nodes()) )
-        assert_true( sorted(G1.edges())==sorted(G2.edges()) )
-
-    def identity_conversion(self, G, A, create_using):
-        GG = nx.from_numpy_matrix(A, create_using=create_using)
-        self.assert_equal(G, GG)
-        GW = nx.to_networkx_graph(A, create_using=create_using)
-        self.assert_equal(G, GW)
-        GI = create_using.__class__(A)
-        self.assert_equal(G, GI)
-
-    def test_shape(self):
-        "Conversion from non-square array."
-        A=np.array([[1,2,3],[4,5,6]])
-        assert_raises(nx.NetworkXError, nx.from_numpy_matrix, A)
-
-    def test_identity_graph_matrix(self):
-        "Conversion from graph to matrix to graph."
-        A = nx.to_numpy_matrix(self.G1)
-        self.identity_conversion(self.G1, A, nx.Graph())
-
-    def test_identity_graph_array(self):
-        "Conversion from graph to array to graph."
-        A = nx.to_numpy_matrix(self.G1)
-        A = np.asarray(A)
-        self.identity_conversion(self.G1, A, nx.Graph())
-
-    def test_identity_digraph_matrix(self):
-        """Conversion from digraph to matrix to digraph."""
-        A = nx.to_numpy_matrix(self.G2)
-        self.identity_conversion(self.G2, A, nx.DiGraph())
-
-    def test_identity_digraph_array(self):
-        """Conversion from digraph to array to digraph."""
-        A = nx.to_numpy_matrix(self.G2)
-        A = np.asarray(A)
-        self.identity_conversion(self.G2, A, nx.DiGraph())
-
-    def test_identity_weighted_graph_matrix(self):
-        """Conversion from weighted graph to matrix to weighted graph."""
-        A = nx.to_numpy_matrix(self.G3)
-        self.identity_conversion(self.G3, A, nx.Graph())
-
-    def test_identity_weighted_graph_array(self):
-        """Conversion from weighted graph to array to weighted graph."""
-        A = nx.to_numpy_matrix(self.G3)
-        A = np.asarray(A)
-        self.identity_conversion(self.G3, A, nx.Graph())
-
-    def test_identity_weighted_digraph_matrix(self):
-        """Conversion from weighted digraph to matrix to weighted digraph."""
-        A = nx.to_numpy_matrix(self.G4)
-        self.identity_conversion(self.G4, A, nx.DiGraph())
-
-    def test_identity_weighted_digraph_array(self):
-        """Conversion from weighted digraph to array to weighted digraph."""
-        A = nx.to_numpy_matrix(self.G4)
-        A = np.asarray(A)
-        self.identity_conversion(self.G4, A, nx.DiGraph())
-
-    def test_nodelist(self):
-        """Conversion from graph to matrix to graph with nodelist."""
-        P4 = path_graph(4)
-        P3 = path_graph(3)
-        nodelist = P3.nodes()
-        A = nx.to_numpy_matrix(P4, nodelist=nodelist)
-        GA = nx.Graph(A)
-        self.assert_equal(GA, P3)
-
-        # Make nodelist ambiguous by containing duplicates.
-        nodelist += [nodelist[0]]
-        assert_raises(nx.NetworkXError, nx.to_numpy_matrix, P3, nodelist=nodelist)
-
-    def test_weight_keyword(self):
-        WP4 = nx.Graph()
-        WP4.add_edges_from( (n,n+1,dict(weight=0.5,other=0.3)) for n in range(3) )
-        P4 = path_graph(4)
-        A = nx.to_numpy_matrix(P4)
-        np_assert_equal(A, nx.to_numpy_matrix(WP4,weight=None))
-        np_assert_equal(0.5*A, nx.to_numpy_matrix(WP4))
-        np_assert_equal(0.3*A, nx.to_numpy_matrix(WP4,weight='other'))
-
-    def test_from_numpy_matrix_type(self):
-        A=np.matrix([[1]])
-        G=nx.from_numpy_matrix(A)
-        assert_equal(type(G[0][0]['weight']),int)
-
-        A=np.matrix([[1]]).astype(np.float)
-        G=nx.from_numpy_matrix(A)
-        assert_equal(type(G[0][0]['weight']),float)
-
-        A=np.matrix([[1]]).astype(np.str)
-        G=nx.from_numpy_matrix(A)
-        assert_equal(type(G[0][0]['weight']),str)
-
-        A=np.matrix([[1]]).astype(np.bool)
-        G=nx.from_numpy_matrix(A)
-        assert_equal(type(G[0][0]['weight']),bool)
-
-        A=np.matrix([[1]]).astype(np.complex)
-        G=nx.from_numpy_matrix(A)
-        assert_equal(type(G[0][0]['weight']),complex)
-
-        A=np.matrix([[1]]).astype(np.object)
-        assert_raises(TypeError,nx.from_numpy_matrix,A)
-
-    def test_from_numpy_matrix_dtype(self):
-        dt=[('weight',float),('cost',int)]
-        A=np.matrix([[(1.0,2)]],dtype=dt)
-        G=nx.from_numpy_matrix(A)
-        assert_equal(type(G[0][0]['weight']),float)
-        assert_equal(type(G[0][0]['cost']),int)
-        assert_equal(G[0][0]['cost'],2)
-        assert_equal(G[0][0]['weight'],1.0)
-
-    def test_to_numpy_recarray(self):
-        G=nx.Graph()
-        G.add_edge(1,2,weight=7.0,cost=5)
-        A=nx.to_numpy_recarray(G,dtype=[('weight',float),('cost',int)])
-        assert_equal(sorted(A.dtype.names),['cost','weight'])
-        assert_equal(A.weight[0,1],7.0)
-        assert_equal(A.weight[0,0],0.0)
-        assert_equal(A.cost[0,1],5)
-        assert_equal(A.cost[0,0],0)
-
-    def test_numpy_multigraph(self):
-        G=nx.MultiGraph()
-        G.add_edge(1,2,weight=7)
-        G.add_edge(1,2,weight=70)
-        A=nx.to_numpy_matrix(G)
-        assert_equal(A[1,0],77)
-        A=nx.to_numpy_matrix(G,multigraph_weight=min)
-        assert_equal(A[1,0],7)
-        A=nx.to_numpy_matrix(G,multigraph_weight=max)
-        assert_equal(A[1,0],70)
-                         
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/tests/test_convert_scipy.py b/lib/python2.7/site-packages/setoolsgui/networkx/tests/test_convert_scipy.py
deleted file mode 100644
index f90dee7..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/tests/test_convert_scipy.py
+++ /dev/null
@@ -1,179 +0,0 @@
-from nose import SkipTest
-from nose.tools import assert_raises, assert_true, assert_equal, raises
-
-import networkx as nx
-from networkx.generators.classic import barbell_graph,cycle_graph,path_graph
-
-class TestConvertNumpy(object):
-    @classmethod
-    def setupClass(cls):
-        global np, sp, sparse, np_assert_equal
-        try:
-            import numpy as np
-            import scipy as sp
-            import scipy.sparse as sparse
-            np_assert_equal=np.testing.assert_equal
-        except ImportError:
-            raise SkipTest('SciPy sparse library not available.')
-
-    def __init__(self):
-        self.G1 = barbell_graph(10, 3)
-        self.G2 = cycle_graph(10, create_using=nx.DiGraph())
-
-        self.G3 = self.create_weighted(nx.Graph())
-        self.G4 = self.create_weighted(nx.DiGraph())
-
-    def create_weighted(self, G):
-        g = cycle_graph(4)
-        e = g.edges()
-        source = [u for u,v in e]
-        dest = [v for u,v in e]
-        weight = [s+10 for s in source]
-        ex = zip(source, dest, weight)
-        G.add_weighted_edges_from(ex)
-        return G
-
-    def assert_equal(self, G1, G2):
-        assert_true( sorted(G1.nodes())==sorted(G2.nodes()) )
-        assert_true( sorted(G1.edges())==sorted(G2.edges()) )
-
-    def identity_conversion(self, G, A, create_using):
-        GG = nx.from_scipy_sparse_matrix(A, create_using=create_using)
-        self.assert_equal(G, GG)
-
-        GW = nx.to_networkx_graph(A, create_using=create_using)
-        self.assert_equal(G, GW)
-
-        GI = create_using.__class__(A)
-        self.assert_equal(G, GI)
-
-        ACSR = A.tocsr()
-        GI = create_using.__class__(ACSR)
-        self.assert_equal(G, GI)
-
-        ACOO = A.tocoo()
-        GI = create_using.__class__(ACOO)
-        self.assert_equal(G, GI)
-
-        ACSC = A.tocsc()
-        GI = create_using.__class__(ACSC)
-        self.assert_equal(G, GI)
-
-        AD = A.todense()
-        GI = create_using.__class__(AD)
-        self.assert_equal(G, GI)
-
-        AA = A.toarray()
-        GI = create_using.__class__(AA)
-        self.assert_equal(G, GI)
-
-    def test_shape(self):
-        "Conversion from non-square sparse array."
-        A = sp.sparse.lil_matrix([[1,2,3],[4,5,6]])
-        assert_raises(nx.NetworkXError, nx.from_scipy_sparse_matrix, A)
-
-    def test_identity_graph_matrix(self):
-        "Conversion from graph to sparse matrix to graph."
-        A = nx.to_scipy_sparse_matrix(self.G1)
-        self.identity_conversion(self.G1, A, nx.Graph())
-
-    def test_identity_digraph_matrix(self):
-        "Conversion from digraph to sparse matrix to digraph."
-        A = nx.to_scipy_sparse_matrix(self.G2)
-        self.identity_conversion(self.G2, A, nx.DiGraph())
-
-    def test_identity_weighted_graph_matrix(self):
-        """Conversion from weighted graph to sparse matrix to weighted graph."""
-        A = nx.to_scipy_sparse_matrix(self.G3)
-        self.identity_conversion(self.G3, A, nx.Graph())
-
-    def test_identity_weighted_digraph_matrix(self):
-        """Conversion from weighted digraph to sparse matrix to weighted digraph."""
-        A = nx.to_scipy_sparse_matrix(self.G4)
-        self.identity_conversion(self.G4, A, nx.DiGraph())
-
-    def test_nodelist(self):
-        """Conversion from graph to sparse matrix to graph with nodelist."""
-        P4 = path_graph(4)
-        P3 = path_graph(3)
-        nodelist = P3.nodes()
-        A = nx.to_scipy_sparse_matrix(P4, nodelist=nodelist)
-        GA = nx.Graph(A)
-        self.assert_equal(GA, P3)
-
-        # Make nodelist ambiguous by containing duplicates.
-        nodelist += [nodelist[0]]
-        assert_raises(nx.NetworkXError, nx.to_numpy_matrix, P3, 
-                      nodelist=nodelist)
-
-    def test_weight_keyword(self):
-        WP4 = nx.Graph()
-        WP4.add_edges_from( (n,n+1,dict(weight=0.5,other=0.3)) 
-                            for n in range(3) )
-        P4 = path_graph(4)
-        A = nx.to_scipy_sparse_matrix(P4)
-        np_assert_equal(A.todense(),
-                        nx.to_scipy_sparse_matrix(WP4,weight=None).todense())
-        np_assert_equal(0.5*A.todense(),
-                        nx.to_scipy_sparse_matrix(WP4).todense())
-        np_assert_equal(0.3*A.todense(),
-                        nx.to_scipy_sparse_matrix(WP4,weight='other').todense())
-
-    def test_format_keyword(self):
-        WP4 = nx.Graph()
-        WP4.add_edges_from( (n,n+1,dict(weight=0.5,other=0.3))
-                            for n in range(3) )
-        P4 = path_graph(4)
-        A = nx.to_scipy_sparse_matrix(P4, format='csr')
-        np_assert_equal(A.todense(),
-                        nx.to_scipy_sparse_matrix(WP4,weight=None).todense())
-
-        A = nx.to_scipy_sparse_matrix(P4, format='csc')
-        np_assert_equal(A.todense(),
-                        nx.to_scipy_sparse_matrix(WP4,weight=None).todense())
-
-        A = nx.to_scipy_sparse_matrix(P4, format='coo')
-        np_assert_equal(A.todense(),
-                        nx.to_scipy_sparse_matrix(WP4,weight=None).todense())
-
-        A = nx.to_scipy_sparse_matrix(P4, format='bsr')
-        np_assert_equal(A.todense(),
-                        nx.to_scipy_sparse_matrix(WP4,weight=None).todense())
-
-        A = nx.to_scipy_sparse_matrix(P4, format='lil')
-        np_assert_equal(A.todense(),
-                        nx.to_scipy_sparse_matrix(WP4,weight=None).todense())
-
-        A = nx.to_scipy_sparse_matrix(P4, format='dia')
-        np_assert_equal(A.todense(),
-                        nx.to_scipy_sparse_matrix(WP4,weight=None).todense())
-
-        A = nx.to_scipy_sparse_matrix(P4, format='dok')
-        np_assert_equal(A.todense(),
-                        nx.to_scipy_sparse_matrix(WP4,weight=None).todense())
-
-    @raises(nx.NetworkXError)
-    def test_format_keyword_fail(self):
-        WP4 = nx.Graph()
-        WP4.add_edges_from( (n,n+1,dict(weight=0.5,other=0.3))
-                            for n in range(3) )
-        P4 = path_graph(4)
-        nx.to_scipy_sparse_matrix(P4, format='any_other')
-
-    @raises(nx.NetworkXError)
-    def test_null_fail(self):
-        nx.to_scipy_sparse_matrix(nx.Graph())
-
-    def test_empty(self):
-        G = nx.Graph()
-        G.add_node(1)
-        M = nx.to_scipy_sparse_matrix(G)
-        np_assert_equal(M.todense(), np.matrix([[0]]))
-
-    def test_ordering(self):
-        G = nx.DiGraph()
-        G.add_edge(1,2)
-        G.add_edge(2,3)
-        G.add_edge(3,1)
-        M = nx.to_scipy_sparse_matrix(G,nodelist=[3,2,1])
-        np_assert_equal(M.todense(), np.matrix([[0,0,1],[1,0,0],[0,1,0]]))
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/tests/test_exceptions.py b/lib/python2.7/site-packages/setoolsgui/networkx/tests/test_exceptions.py
deleted file mode 100644
index 796fdd2..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/tests/test_exceptions.py
+++ /dev/null
@@ -1,33 +0,0 @@
-from nose.tools import raises
-import networkx as nx
-
-# smoke tests for exceptions
-
-@raises(nx.NetworkXException)
-def test_raises_networkx_exception():
-    raise nx.NetworkXException
-
-@raises(nx.NetworkXError)
-def test_raises_networkx_error():
-    raise nx.NetworkXError
-
-@raises(nx.NetworkXPointlessConcept)
-def test_raises_networkx_pointless_concept():
-    raise nx.NetworkXPointlessConcept
-
-@raises(nx.NetworkXAlgorithmError)
-def test_raises_networkx_algorithm_error():
-    raise nx.NetworkXAlgorithmError
-
-@raises(nx.NetworkXUnfeasible)
-def test_raises_networkx_unfeasible():
-    raise nx.NetworkXUnfeasible
-
-@raises(nx.NetworkXNoPath)
-def test_raises_networkx_no_path():
-    raise nx.NetworkXNoPath
-
-@raises(nx.NetworkXUnbounded)
-def test_raises_networkx_unbounded():
-    raise nx.NetworkXUnbounded
-
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/tests/test_relabel.py b/lib/python2.7/site-packages/setoolsgui/networkx/tests/test_relabel.py
deleted file mode 100644
index e9dd2af..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/tests/test_relabel.py
+++ /dev/null
@@ -1,163 +0,0 @@
-#!/usr/bin/env python
-from nose.tools import *
-from networkx import *
-from networkx.convert import *
-from networkx.algorithms.operators import *
-from networkx.generators.classic import barbell_graph,cycle_graph
-from networkx.testing import *
-
-class TestRelabel():
-    def test_convert_node_labels_to_integers(self):
-        # test that empty graph converts fine for all options
-        G=empty_graph()
-        H=convert_node_labels_to_integers(G,100)
-        assert_equal(H.name, '(empty_graph(0))_with_int_labels')
-        assert_equal(H.nodes(), [])
-        assert_equal(H.edges(), [])
-
-        for opt in ["default", "sorted", "increasing degree",
-                    "decreasing degree"]:
-            G=empty_graph()
-            H=convert_node_labels_to_integers(G,100, ordering=opt)
-            assert_equal(H.name, '(empty_graph(0))_with_int_labels')
-            assert_equal(H.nodes(), [])
-            assert_equal(H.edges(), [])
-
-        G=empty_graph()
-        G.add_edges_from([('A','B'),('A','C'),('B','C'),('C','D')])
-        G.name="paw"
-        H=convert_node_labels_to_integers(G)
-        degH=H.degree().values()
-        degG=G.degree().values()
-        assert_equal(sorted(degH), sorted(degG))
-
-        H=convert_node_labels_to_integers(G,1000)
-        degH=H.degree().values()
-        degG=G.degree().values()
-        assert_equal(sorted(degH), sorted(degG))
-        assert_equal(H.nodes(), [1000, 1001, 1002, 1003])
-
-        H=convert_node_labels_to_integers(G,ordering="increasing degree")
-        degH=H.degree().values()
-        degG=G.degree().values()
-        assert_equal(sorted(degH), sorted(degG))
-        assert_equal(degree(H,0), 1)
-        assert_equal(degree(H,1), 2)
-        assert_equal(degree(H,2), 2)
-        assert_equal(degree(H,3), 3)
-
-        H=convert_node_labels_to_integers(G,ordering="decreasing degree")
-        degH=H.degree().values()
-        degG=G.degree().values()
-        assert_equal(sorted(degH), sorted(degG))
-        assert_equal(degree(H,0), 3)
-        assert_equal(degree(H,1), 2)
-        assert_equal(degree(H,2), 2)
-        assert_equal(degree(H,3), 1)
-
-        H=convert_node_labels_to_integers(G,ordering="increasing degree",
-                                          label_attribute='label')
-        degH=H.degree().values()
-        degG=G.degree().values()
-        assert_equal(sorted(degH), sorted(degG))
-        assert_equal(degree(H,0), 1)
-        assert_equal(degree(H,1), 2)
-        assert_equal(degree(H,2), 2)
-        assert_equal(degree(H,3), 3)
-
-        # check mapping
-        assert_equal(H.node[3]['label'],'C')
-        assert_equal(H.node[0]['label'],'D')
-        assert_true(H.node[1]['label']=='A' or H.node[2]['label']=='A')
-        assert_true(H.node[1]['label']=='B' or H.node[2]['label']=='B')
-
-    def test_convert_to_integers2(self):
-        G=empty_graph()
-        G.add_edges_from([('C','D'),('A','B'),('A','C'),('B','C')])
-        G.name="paw"
-        H=convert_node_labels_to_integers(G,ordering="sorted")
-        degH=H.degree().values()
-        degG=G.degree().values()
-        assert_equal(sorted(degH), sorted(degG))
-
-        H=convert_node_labels_to_integers(G,ordering="sorted",
-                                          label_attribute='label')
-        assert_equal(H.node[0]['label'],'A')
-        assert_equal(H.node[1]['label'],'B')
-        assert_equal(H.node[2]['label'],'C')
-        assert_equal(H.node[3]['label'],'D')
-
-    @raises(nx.NetworkXError)
-    def test_convert_to_integers_raise(self):
-        G = nx.Graph()
-        H=convert_node_labels_to_integers(G,ordering="increasing age")
-
-
-    def test_relabel_nodes_copy(self):
-        G=empty_graph()
-        G.add_edges_from([('A','B'),('A','C'),('B','C'),('C','D')])
-        mapping={'A':'aardvark','B':'bear','C':'cat','D':'dog'}
-        H=relabel_nodes(G,mapping)
-        assert_equal(sorted(H.nodes()), ['aardvark', 'bear', 'cat', 'dog'])
-
-    def test_relabel_nodes_function(self):
-        G=empty_graph()
-        G.add_edges_from([('A','B'),('A','C'),('B','C'),('C','D')])
-        # function mapping no longer encouraged but works
-        def mapping(n):
-            return ord(n)
-        H=relabel_nodes(G,mapping)
-        assert_equal(sorted(H.nodes()), [65, 66, 67, 68])
-
-    def test_relabel_nodes_graph(self):
-        G=Graph([('A','B'),('A','C'),('B','C'),('C','D')])
-        mapping={'A':'aardvark','B':'bear','C':'cat','D':'dog'}
-        H=relabel_nodes(G,mapping)
-        assert_equal(sorted(H.nodes()), ['aardvark', 'bear', 'cat', 'dog'])
-
-    def test_relabel_nodes_digraph(self):
-        G=DiGraph([('A','B'),('A','C'),('B','C'),('C','D')])
-        mapping={'A':'aardvark','B':'bear','C':'cat','D':'dog'}
-        H=relabel_nodes(G,mapping,copy=False)
-        assert_equal(sorted(H.nodes()), ['aardvark', 'bear', 'cat', 'dog'])
-
-    def test_relabel_nodes_multigraph(self):
-        G=MultiGraph([('a','b'),('a','b')])
-        mapping={'a':'aardvark','b':'bear'}
-        G=relabel_nodes(G,mapping,copy=False)
-        assert_equal(sorted(G.nodes()), ['aardvark', 'bear'])
-        assert_edges_equal(sorted(G.edges()),
-                           [('aardvark', 'bear'), ('aardvark', 'bear')])
-
-    def test_relabel_nodes_multidigraph(self):
-        G=MultiDiGraph([('a','b'),('a','b')])
-        mapping={'a':'aardvark','b':'bear'}
-        G=relabel_nodes(G,mapping,copy=False)
-        assert_equal(sorted(G.nodes()), ['aardvark', 'bear'])
-        assert_equal(sorted(G.edges()),
-                     [('aardvark', 'bear'), ('aardvark', 'bear')])
-
-    @raises(KeyError)
-    def test_relabel_nodes_missing(self):
-        G=Graph([('A','B'),('A','C'),('B','C'),('C','D')])
-        mapping={0:'aardvark'}
-        G=relabel_nodes(G,mapping,copy=False)
-
-
-    def test_relabel_toposort(self):
-        K5=nx.complete_graph(4)
-        G=nx.complete_graph(4)
-        G=nx.relabel_nodes(G,dict( [(i,i+1) for i in range(4)]),copy=False)
-        nx.is_isomorphic(K5,G)
-        G=nx.complete_graph(4)
-        G=nx.relabel_nodes(G,dict( [(i,i-1) for i in range(4)]),copy=False)
-        nx.is_isomorphic(K5,G)
-
-
-    def test_relabel_selfloop(self):
-        G = nx.DiGraph([(1, 1), (1, 2), (2, 3)])
-        G = nx.relabel_nodes(G, {1: 'One', 2: 'Two', 3: 'Three'}, copy=False)
-        assert_equal(sorted(G.nodes()),['One','Three','Two'])
-        G = nx.MultiDiGraph([(1, 1), (1, 2), (2, 3)])
-        G = nx.relabel_nodes(G, {1: 'One', 2: 'Two', 3: 'Three'}, copy=False)
-        assert_equal(sorted(G.nodes()),['One','Three','Two'])
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/utils/__init__.py b/lib/python2.7/site-packages/setoolsgui/networkx/utils/__init__.py
deleted file mode 100644
index d443064..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/utils/__init__.py
+++ /dev/null
@@ -1,5 +0,0 @@
-from networkx.utils.misc import *
-from networkx.utils.decorators import *
-from networkx.utils.random_sequence import *
-from networkx.utils.union_find import *
-from networkx.utils.rcm import *
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/utils/decorators.py b/lib/python2.7/site-packages/setoolsgui/networkx/utils/decorators.py
deleted file mode 100644
index def1548..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/utils/decorators.py
+++ /dev/null
@@ -1,270 +0,0 @@
-import sys
-
-from collections import defaultdict
-from os.path import splitext
-
-import networkx as nx
-from networkx.external.decorator import decorator
-from networkx.utils import is_string_like
-
-def not_implemented_for(*graph_types):
-    """Decorator to mark algorithms as not implemented
-
-    Parameters
-    ----------
-    graph_types : container of strings
-        Entries must be one of 'directed','undirected', 'multigraph', 'graph'.
-
-    Returns
-    -------
-    _require : function
-        The decorated function.
-
-    Raises
-    ------
-    NetworkXNotImplemnted
-    If any of the packages cannot be imported
-
-    Notes
-    -----
-    Multiple types are joined logically with "and".
-    For "or" use multiple @not_implemented_for() lines.
-
-    Examples
-    --------
-    Decorate functions like this::
-
-       @not_implemnted_for('directed')
-       def sp_function():
-           pass
-
-       @not_implemnted_for('directed','multigraph')
-       def sp_np_function():
-           pass
-    """
-    @decorator
-    def _not_implemented_for(f,*args,**kwargs):
-        graph = args[0]
-        terms= {'directed':graph.is_directed(),
-                'undirected':not graph.is_directed(),
-                'multigraph':graph.is_multigraph(),
-                'graph':not graph.is_multigraph()}
-        match = True
-        try:
-            for t in graph_types:
-                match = match and terms[t]
-        except KeyError:
-            raise KeyError('use one or more of ',
-                           'directed, undirected, multigraph, graph')
-        if match:
-            raise nx.NetworkXNotImplemented('not implemented for %s type'%
-                                            ' '.join(graph_types))
-        else:
-            return f(*args,**kwargs)
-    return _not_implemented_for
-
-
-def require(*packages):
-    """Decorator to check whether specific packages can be imported.
-
-    If a package cannot be imported, then NetworkXError is raised.
-    If all packages can be imported, then the original function is called.
-
-    Parameters
-    ----------
-    packages : container of strings
-        Container of module names that will be imported.
-
-    Returns
-    -------
-    _require : function
-        The decorated function.
-
-    Raises
-    ------
-    NetworkXError
-    If any of the packages cannot be imported
-
-    Examples
-    --------
-    Decorate functions like this::
-
-       @require('scipy')
-       def sp_function():
-           import scipy
-           pass
-
-       @require('numpy','scipy')
-       def sp_np_function():
-           import numpy
-           import scipy
-           pass
-    """
-    @decorator
-    def _require(f,*args,**kwargs):
-        for package in reversed(packages):
-            try:
-                __import__(package)
-            except:
-                msg = "{0} requires {1}"
-                raise nx.NetworkXError( msg.format(f.__name__, package) )
-        return f(*args,**kwargs)
-    return _require
-
-
-def _open_gz(path, mode):
-    import gzip
-    return gzip.open(path,mode=mode)
-
-def _open_bz2(path, mode):
-    import bz2
-    return bz2.BZ2File(path,mode=mode)
-
-# To handle new extensions, define a function accepting a `path` and `mode`.
-# Then add the extension to _dispatch_dict.
-_dispatch_dict = defaultdict(lambda : open)
-_dispatch_dict['.gz'] = _open_gz
-_dispatch_dict['.bz2'] = _open_bz2
-_dispatch_dict['.gzip'] = _open_gz
-
-
-def open_file(path_arg, mode='r'):
-    """Decorator to ensure clean opening and closing of files.
-
-    Parameters
-    ----------
-    path_arg : int
-        Location of the path argument in args.  Even if the argument is a
-        named positional argument (with a default value), you must specify its
-        index as a positional argument.
-    mode : str
-        String for opening mode.
-
-    Returns
-    -------
-    _open_file : function
-        Function which cleanly executes the io.
-
-    Examples
-    --------
-    Decorate functions like this::
-
-       @open_file(0,'r')
-       def read_function(pathname):
-           pass
-
-       @open_file(1,'w')
-       def write_function(G,pathname):
-           pass
-
-       @open_file(1,'w')
-       def write_function(G, pathname='graph.dot')
-           pass
-
-       @open_file('path', 'w+')
-       def another_function(arg, **kwargs):
-           path = kwargs['path']
-           pass
-    """
-    # Note that this decorator solves the problem when a path argument is
-    # specified as a string, but it does not handle the situation when the
-    # function wants to accept a default of None (and then handle it).
-    # Here is an example:
-    #
-    # @open_file('path')
-    # def some_function(arg1, arg2, path=None):
-    #    if path is None:
-    #        fobj = tempfile.NamedTemporaryFile(delete=False)
-    #        close_fobj = True
-    #    else:
-    #        # `path` could have been a string or file object or something
-    #        # similar. In any event, the decorator has given us a file object
-    #        # and it will close it for us, if it should.
-    #        fobj = path
-    #        close_fobj = False
-    #
-    #    try:
-    #        fobj.write('blah')
-    #    finally:
-    #        if close_fobj:
-    #            fobj.close()
-    #
-    # Normally, we'd want to use "with" to ensure that fobj gets closed.
-    # However, recall that the decorator will make `path` a file object for
-    # us, and using "with" would undesirably close that file object. Instead,
-    # you use a try block, as shown above. When we exit the function, fobj will
-    # be closed, if it should be, by the decorator.
-
-    @decorator
-    def _open_file(func, *args, **kwargs):
-
-        # Note that since we have used @decorator, *args, and **kwargs have
-        # already been resolved to match the function signature of func. This
-        # means default values have been propagated. For example,  the function
-        # func(x, y, a=1, b=2, **kwargs) if called as func(0,1,b=5,c=10) would
-        # have args=(0,1,1,5) and kwargs={'c':10}.
-
-        # First we parse the arguments of the decorator. The path_arg could
-        # be an positional argument or a keyword argument.  Even if it is
-        try:
-            # path_arg is a required positional argument
-            # This works precisely because we are using @decorator
-            path = args[path_arg]
-        except TypeError:
-            # path_arg is a keyword argument. It is "required" in the sense
-            # that it must exist, according to the decorator specification,
-            # It can exist in `kwargs` by a developer specified default value
-            # or it could have been explicitly set by the user.
-            try:
-                path = kwargs[path_arg]
-            except KeyError:
-                # Could not find the keyword. Thus, no default was specified
-                # in the function signature and the user did not provide it.
-                msg = 'Missing required keyword argument: {0}'
-                raise nx.NetworkXError(msg.format(path_arg))
-            else:
-                is_kwarg = True
-        except IndexError:
-            # A "required" argument was missing. This can only happen if
-            # the decorator of the function was incorrectly specified.
-            # So this probably is not a user error, but a developer error.
-            msg = "path_arg of open_file decorator is incorrect"
-            raise nx.NetworkXError(msg)
-        else:
-            is_kwarg = False
-
-        # Now we have the path_arg. There are two types of input to consider:
-        #   1) string representing a path that should be opened
-        #   2) an already opened file object
-        if is_string_like(path):
-            ext = splitext(path)[1]
-            fobj = _dispatch_dict[ext](path, mode=mode)
-            close_fobj = True
-        elif hasattr(path, 'read'):
-            # path is already a file-like object
-            fobj = path
-            close_fobj = False
-        else:
-            # could be None, in which case the algorithm will deal with it
-            fobj = path
-            close_fobj = False
-
-        # Insert file object into args or kwargs.
-        if is_kwarg:
-            new_args = args
-            kwargs[path_arg] = fobj
-        else:
-            # args is a tuple, so we must convert to list before modifying it.
-            new_args = list(args)
-            new_args[path_arg] = fobj
-
-        # Finally, we call the original function, making sure to close the fobj.
-        try:
-            result = func(*new_args, **kwargs)
-        finally:
-            if close_fobj:
-                fobj.close()
-
-        return result
-
-    return _open_file
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/utils/misc.py b/lib/python2.7/site-packages/setoolsgui/networkx/utils/misc.py
deleted file mode 100644
index a942753..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/utils/misc.py
+++ /dev/null
@@ -1,151 +0,0 @@
-"""
-Miscellaneous Helpers for NetworkX.
-
-These are not imported into the base networkx namespace but
-can be accessed, for example, as
-
->>> import networkx
->>> networkx.utils.is_string_like('spam')
-True
-"""
-#    Copyright (C) 2004-2011 by
-#    Aric Hagberg <hagberg@lanl.gov>
-#    Dan Schult <dschult@colgate.edu>
-#    Pieter Swart <swart@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-import sys
-import subprocess
-import uuid
-
-import networkx as nx
-from networkx.external.decorator import decorator
-
-__author__ = '\n'.join(['Aric Hagberg (hagberg@lanl.gov)',
-                        'Dan Schult(dschult@colgate.edu)',
-                        'Ben Edwards(bedwards@cs.unm.edu)'])
-### some cookbook stuff
-# used in deciding whether something is a bunch of nodes, edges, etc.
-# see G.add_nodes and others in Graph Class in networkx/base.py
-
-def is_string_like(obj): # from John Hunter, types-free version
-    """Check if obj is string."""
-    try:
-        obj + ''
-    except (TypeError, ValueError):
-        return False
-    return True
-
-def iterable(obj):
-    """ Return True if obj is iterable with a well-defined len()."""
-    if hasattr(obj,"__iter__"): return True
-    try:
-        len(obj)
-    except:
-        return False
-    return True
-
-def flatten(obj, result=None):
-    """ Return flattened version of (possibly nested) iterable object. """
-    if not iterable(obj) or is_string_like(obj):
-        return obj
-    if result is None:
-        result = []
-    for item in obj:
-        if not iterable(item) or is_string_like(item):
-            result.append(item)
-        else:
-            flatten(item, result)
-    return obj.__class__(result)
-
-def is_list_of_ints( intlist ):
-    """ Return True if list is a list of ints. """
-    if not isinstance(intlist,list): return False
-    for i in intlist:
-        if not isinstance(i,int): return False
-    return True
-
-def make_str(t):
-    """Return the string representation of t."""
-    if is_string_like(t): return t
-    return str(t)
-
-def cumulative_sum(numbers):
-    """Yield cumulative sum of numbers.
-
-    >>> import networkx.utils as utils
-    >>> list(utils.cumulative_sum([1,2,3,4]))
-    [1, 3, 6, 10]
-    """
-    csum = 0
-    for n in numbers:
-        csum += n
-        yield csum
-
-def generate_unique_node():
-    """ Generate a unique node label."""
-    return str(uuid.uuid1())
-
-def default_opener(filename):
-    """Opens `filename` using system's default program.
-
-    Parameters
-    ----------
-    filename : str
-        The path of the file to be opened.
-
-    """
-    cmds = {'darwin': ['open'],
-            'linux2': ['xdg-open'],
-            'win32': ['cmd.exe', '/C', 'start', '']}
-    cmd = cmds[sys.platform] + [filename]
-    subprocess.call(cmd)
-
-
-def dict_to_numpy_array(d,mapping=None):
-    """Convert a dictionary of dictionaries to a numpy array
-    with optional mapping."""
-    try:
-        return dict_to_numpy_array2(d, mapping)
-    except AttributeError:
-        return dict_to_numpy_array1(d,mapping)
-
-def dict_to_numpy_array2(d,mapping=None):
-    """Convert a dictionary of dictionaries to a 2d numpy array
-    with optional mapping."""
-    try:
-        import numpy
-    except ImportError:
-        raise ImportError(
-          "dict_to_numpy_array requires numpy : http://scipy.org/ ")
-    if mapping is None:
-        s=set(d.keys())
-        for k,v in d.items():
-            s.update(v.keys())
-        mapping=dict(zip(s,range(len(s))))
-    n=len(mapping)
-    a = numpy.zeros((n, n))
-    for k1, row in d.items():
-        for k2, value in row.items():
-            i=mapping[k1]
-            j=mapping[k2]
-            a[i,j] = value
-    return a
-
-def dict_to_numpy_array1(d,mapping=None):
-    """Convert a dictionary of numbers to a 1d numpy array
-    with optional mapping."""
-    try:
-        import numpy
-    except ImportError:
-        raise ImportError(
-          "dict_to_numpy_array requires numpy : http://scipy.org/ ")
-    if mapping is None:
-        s = set(d.keys())
-        mapping = dict(zip(s,range(len(s))))
-    n = len(mapping)
-    a = numpy.zeros(n)
-    for k1, value in d.items():
-        i = mapping[k1]
-        a[i] = value
-    return a
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/utils/random_sequence.py b/lib/python2.7/site-packages/setoolsgui/networkx/utils/random_sequence.py
deleted file mode 100644
index a2f947d..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/utils/random_sequence.py
+++ /dev/null
@@ -1,222 +0,0 @@
-"""
-Utilities for generating random numbers, random sequences, and 
-random selections.
-"""
-#    Copyright (C) 2004-2011 by 
-#    Aric Hagberg <hagberg@lanl.gov>
-#    Dan Schult <dschult@colgate.edu>
-#    Pieter Swart <swart@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-import random
-import sys
-import networkx as nx
-__author__ = '\n'.join(['Aric Hagberg (hagberg@lanl.gov)',
-                        'Dan Schult(dschult@colgate.edu)',
-                        'Ben Edwards(bedwards@cs.unm.edu)'])
-
-def create_degree_sequence(n, sfunction=None, max_tries=50, **kwds):
-    """ Attempt to create a valid degree sequence of length n using
-    specified function sfunction(n,**kwds).
-
-    Parameters
-    ----------
-    n : int
-        Length of degree sequence = number of nodes
-    sfunction: function
-        Function which returns a list of n real or integer values.
-        Called as "sfunction(n,**kwds)".
-    max_tries: int
-        Max number of attempts at creating valid degree sequence.
-
-    Notes
-    -----
-    Repeatedly create a degree sequence by calling sfunction(n,**kwds)
-    until achieving a valid degree sequence. If unsuccessful after
-    max_tries attempts, raise an exception.
-    
-    For examples of sfunctions that return sequences of random numbers,
-    see networkx.Utils.
-
-    Examples
-    --------
-    >>> from networkx.utils import uniform_sequence, create_degree_sequence
-    >>> seq=create_degree_sequence(10,uniform_sequence)
-    """
-    tries=0
-    max_deg=n
-    while tries < max_tries:
-        trialseq=sfunction(n,**kwds)
-        # round to integer values in the range [0,max_deg]
-        seq=[min(max_deg, max( int(round(s)),0 )) for s in trialseq]
-        # if graphical return, else throw away and try again
-        if nx.is_valid_degree_sequence(seq):
-            return seq
-        tries+=1
-    raise nx.NetworkXError(\
-          "Exceeded max (%d) attempts at a valid sequence."%max_tries)
-
-
-# The same helpers for choosing random sequences from distributions
-# uses Python's random module
-# http://www.python.org/doc/current/lib/module-random.html
-
-def pareto_sequence(n,exponent=1.0):
-    """
-    Return sample sequence of length n from a Pareto distribution.
-    """
-    return [random.paretovariate(exponent) for i in range(n)]
-
-
-def powerlaw_sequence(n,exponent=2.0):
-    """
-    Return sample sequence of length n from a power law distribution.
-    """
-    return [random.paretovariate(exponent-1) for i in range(n)]
-
-def zipf_rv(alpha, xmin=1, seed=None):
-    r"""Return a random value chosen from the Zipf distribution.
-
-    The return value is an integer drawn from the probability distribution
-    ::math::
-
-        p(x)=\frac{x^{-\alpha}}{\zeta(\alpha,x_{min})},
-
-    where `\zeta(\alpha,x_{min})` is the Hurwitz zeta function.        
-
-    Parameters
-    ----------
-    alpha : float 
-      Exponent value of the distribution
-    xmin : int
-      Minimum value
-    seed : int
-      Seed value for random number generator
-
-    Returns
-    -------
-    x : int
-      Random value from Zipf distribution
-
-    Raises
-    ------
-    ValueError:
-      If xmin < 1 or
-      If alpha <= 1
-
-    Notes
-    -----
-    The rejection algorithm generates random values for a the power-law
-    distribution in uniformly bounded expected time dependent on
-    parameters.  See [1] for details on its operation.
-
-    Examples
-    --------
-    >>> nx.zipf_rv(alpha=2, xmin=3, seed=42) # doctest: +SKIP
-
-    References
-    ----------
-    ..[1] Luc Devroye, Non-Uniform Random Variate Generation, 
-       Springer-Verlag, New York, 1986.
-    """
-    if xmin < 1:
-        raise ValueError("xmin < 1")
-    if alpha <= 1:
-        raise ValueError("a <= 1.0")
-    if not seed is None:
-        random.seed(seed)
-    a1 = alpha - 1.0
-    b = 2**a1
-    while True:
-        u = 1.0 - random.random() # u in (0,1]
-        v = random.random() # v in [0,1)
-        x = int(xmin*u**-(1.0/a1))
-        t = (1.0+(1.0/x))**a1
-        if v*x*(t-1.0)/(b-1.0) <= t/b:
-            break
-    return x
-
-def zipf_sequence(n, alpha=2.0, xmin=1):
-    """Return a sample sequence of length n from a Zipf distribution with
-    exponent parameter alpha and minimum value xmin.
-
-    See Also
-    --------
-    zipf_rv
-    """
-    return [ zipf_rv(alpha,xmin) for _ in range(n)]
-
-def uniform_sequence(n):
-    """
-    Return sample sequence of length n from a uniform distribution.
-    """
-    return [ random.uniform(0,n) for i in range(n)]
-
-
-def cumulative_distribution(distribution):
-    """Return normalized cumulative distribution from discrete distribution."""
-
-    cdf=[]
-    cdf.append(0.0)
-    psum=float(sum(distribution))
-    for i in range(0,len(distribution)):
-        cdf.append(cdf[i]+distribution[i]/psum)
-    return cdf        
-
-
-def discrete_sequence(n, distribution=None, cdistribution=None):
-    """
-    Return sample sequence of length n from a given discrete distribution
-    or discrete cumulative distribution. 
-
-    One of the following must be specified.  
-
-    distribution = histogram of values, will be normalized
-    
-    cdistribution = normalized discrete cumulative distribution
-
-    """
-    import bisect
-
-    if cdistribution is not None:
-        cdf=cdistribution
-    elif distribution is not None:
-        cdf=cumulative_distribution(distribution)
-    else:
-        raise nx.NetworkXError(
-                "discrete_sequence: distribution or cdistribution missing")
-        
-
-    # get a uniform random number
-    inputseq=[random.random() for i in range(n)]
-
-    # choose from CDF
-    seq=[bisect.bisect_left(cdf,s)-1 for s in inputseq]
-    return seq
-
-
-def random_weighted_sample(mapping, k):
-    """Return k items without replacement from a weighted sample.
-
-    The input is a dictionary of items with weights as values.
-    """
-    if k > len(mapping):
-        raise ValueError("sample larger than population")
-    sample = set()
-    while len(sample) < k:
-        sample.add(weighted_choice(mapping))
-    return list(sample)
-
-def weighted_choice(mapping):
-    """Return a single element from a weighted sample.
-
-    The input is a dictionary of items with weights as values.
-    """
-    # use roulette method
-    rnd = random.random() * sum(mapping.values())
-    for k, w in mapping.items():
-        rnd -= w
-        if rnd < 0:
-            return k
-
-
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/utils/rcm.py b/lib/python2.7/site-packages/setoolsgui/networkx/utils/rcm.py
deleted file mode 100644
index b21bd9b..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/utils/rcm.py
+++ /dev/null
@@ -1,150 +0,0 @@
-"""
-Cuthill-McKee ordering of graph nodes to produce sparse matrices
-"""
-#    Copyright (C) 2011 by 
-#    Aric Hagberg <hagberg@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-from operator import itemgetter
-import networkx as nx
-__author__ = """\n""".join(['Aric Hagberg <aric.hagberg@gmail.com>'])
-__all__ = ['cuthill_mckee_ordering',
-           'reverse_cuthill_mckee_ordering']
-
-def cuthill_mckee_ordering(G, start=None):
-    """Generate an ordering (permutation) of the graph nodes to make 
-    a sparse matrix.
-
-    Uses the Cuthill-McKee heuristic (based on breadth-first search) [1]_.
-
-    Parameters
-    ----------
-    G : graph
-      A NetworkX graph 
-
-    start : node, optional
-      Start algorithm and specified node.  The node should be on the 
-      periphery of the graph for best results.  
-
-    Returns
-    -------
-    nodes : generator
-       Generator of nodes in Cuthill-McKee ordering.
-
-    Examples
-    --------
-    >>> from networkx.utils import cuthill_mckee_ordering
-    >>> G = nx.path_graph(4)
-    >>> rcm = list(cuthill_mckee_ordering(G))
-    >>> A = nx.adjacency_matrix(G, nodelist=rcm) # doctest: +SKIP
-
-    See Also
-    --------
-    reverse_cuthill_mckee_ordering
-    
-    Notes
-    -----
-    The optimal solution the the bandwidth reduction is NP-complete [2]_.
-
-    References
-    ----------
-    .. [1] E. Cuthill and J. McKee.
-       Reducing the bandwidth of sparse symmetric matrices,
-       In Proc. 24th Nat. Conf. ACM, pages 157-172, 1969.
-       http://doi.acm.org/10.1145/800195.805928
-    .. [2]  Steven S. Skiena. 1997. The Algorithm Design Manual. 
-       Springer-Verlag New York, Inc., New York, NY, USA.
-    """
-    for c in nx.connected_components(G):
-        for n in connected_cuthill_mckee_ordering(G.subgraph(c), start):
-            yield n
-
-def reverse_cuthill_mckee_ordering(G, start=None):
-    """Generate an ordering (permutation) of the graph nodes to make 
-    a sparse matrix.
-
-    Uses the reverse Cuthill-McKee heuristic (based on breadth-first search) 
-    [1]_.
-
-    Parameters
-    ----------
-    G : graph
-      A NetworkX graph 
-
-    start : node, optional
-      Start algorithm and specified node.  The node should be on the 
-      periphery of the graph for best results.  
-
-    Returns
-    -------
-    nodes : generator
-       Generator of nodes in reverse Cuthill-McKee ordering.
-
-    Examples
-    --------
-    >>> from networkx.utils import reverse_cuthill_mckee_ordering
-    >>> G = nx.path_graph(4)
-    >>> rcm = list(reverse_cuthill_mckee_ordering(G))
-    >>> A = nx.adjacency_matrix(G, nodelist=rcm) # doctest: +SKIP
-
-    See Also
-    --------
-    cuthill_mckee_ordering
-    
-    Notes
-    -----
-    The optimal solution the the bandwidth reduction is NP-complete [2]_.
-
-    References
-    ----------
-    .. [1] E. Cuthill and J. McKee.
-       Reducing the bandwidth of sparse symmetric matrices,
-       In Proc. 24th Nat. Conf. ACM, pages 157-72, 1969.
-       http://doi.acm.org/10.1145/800195.805928
-    .. [2]  Steven S. Skiena. 1997. The Algorithm Design Manual. 
-       Springer-Verlag New York, Inc., New York, NY, USA.
-    """
-    return reversed(list(cuthill_mckee_ordering(G, start=start)))
-
-def connected_cuthill_mckee_ordering(G, start=None):
-    # the cuthill mckee algorithm for connected graphs
-    if start is None:
-        (_, start) = find_pseudo_peripheral_node_pair(G)
-    yield start
-    visited = set([start])
-    stack = [(start, iter(G[start]))]
-    while stack:
-        parent,children = stack[0]
-        if parent not in visited:
-            yield parent
-        try:
-            child = next(children)
-            if child not in visited:
-                yield child
-                visited.add(child)
-                # add children to stack, sorted by degree (lowest first)
-                nd = sorted(G.degree(G[child]).items(), key=itemgetter(1))
-                children = (n for n,d in nd)
-                stack.append((child,children))
-        except StopIteration:
-            stack.pop(0)
-
-def find_pseudo_peripheral_node_pair(G, start=None):
-    # helper for cuthill-mckee to find a "pseudo peripheral pair"
-    # to use as good starting node 
-    if start is None:
-        u = next(G.nodes_iter())
-    else:
-        u = start
-    lp = 0
-    v = u 
-    while True:
-        spl = nx.shortest_path_length(G, v)
-        l = max(spl.values())
-        if l <= lp: 
-            break
-        lp = l
-        farthest = [n for n,dist in spl.items() if dist==l]
-        v, deg = sorted(G.degree(farthest).items(), key=itemgetter(1))[0]
-    return u, v
-    
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/utils/tests/test_decorators.py b/lib/python2.7/site-packages/setoolsgui/networkx/utils/tests/test_decorators.py
deleted file mode 100644
index 964b2c9..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/utils/tests/test_decorators.py
+++ /dev/null
@@ -1,160 +0,0 @@
-import tempfile
-import os
-
-from nose.tools import *
-
-import networkx as nx
-from networkx.utils.decorators import open_file,require,not_implemented_for
-
-def test_not_implemented_decorator():
-    @not_implemented_for('directed')
-    def test1(G):
-        pass
-    test1(nx.Graph())
-
-@raises(KeyError)
-def test_not_implemented_decorator_key():
-    @not_implemented_for('foo')
-    def test1(G):
-        pass
-    test1(nx.Graph())
-
-@raises(nx.NetworkXNotImplemented)
-def test_not_implemented_decorator_raise():
-    @not_implemented_for('graph')
-    def test1(G):
-        pass
-    test1(nx.Graph())
-
-
-def test_require_decorator1():
-    @require('os','sys')
-    def test1():
-        import os
-        import sys
-    test1()
-
-def test_require_decorator2():
-    @require('blahhh')
-    def test2():
-        import blahhh
-    assert_raises(nx.NetworkXError, test2)
-
-class TestOpenFileDecorator(object):
-    def setUp(self):
-        self.text = ['Blah... ', 'BLAH ', 'BLAH!!!!']
-        self.fobj = tempfile.NamedTemporaryFile('wb+', delete=False)
-        self.name = self.fobj.name
-
-    def write(self, path):
-        for text in self.text:
-            path.write(text.encode('ascii'))
-
-    @open_file(1, 'r')
-    def read(self, path):
-        return path.readlines()[0]
-
-    @staticmethod
-    @open_file(0, 'wb')
-    def writer_arg0(path):
-        path.write('demo'.encode('ascii'))
-
-    @open_file(1, 'wb+')
-    def writer_arg1(self, path):
-        self.write(path)
-
-    @open_file(2, 'wb')
-    def writer_arg2default(self, x, path=None):
-        if path is None:
-            fh = tempfile.NamedTemporaryFile('wb+', delete=False)
-            close_fh = True
-        else:
-            fh = path
-            close_fh = False
-
-        try:
-            self.write(fh)
-        finally:
-            if close_fh:
-                fh.close()
-
-    @open_file(4, 'wb')
-    def writer_arg4default(self, x, y, other='hello', path=None, **kwargs):
-        if path is None:
-            fh = tempfile.NamedTemporaryFile('wb+', delete=False)
-            close_fh = True
-        else:
-            fh = path
-            close_fh = False
-
-        try:
-            self.write(fh)
-        finally:
-            if close_fh:
-                fh.close()
-
-    @open_file('path', 'wb')
-    def writer_kwarg(self, **kwargs):
-        path = kwargs.get('path', None)
-        if path is None:
-            fh = tempfile.NamedTemporaryFile('wb+', delete=False)
-            close_fh = True
-        else:
-            fh = path
-            close_fh = False
-
-        try:
-            self.write(fh)
-        finally:
-            if close_fh:
-                fh.close()
-
-    def test_writer_arg0_str(self):
-        self.writer_arg0(self.name)
-
-    def test_writer_arg0_fobj(self):
-        self.writer_arg0(self.fobj)
-
-    def test_writer_arg1_str(self):
-        self.writer_arg1(self.name)
-        assert_equal( self.read(self.name), ''.join(self.text) )
-
-    def test_writer_arg1_fobj(self):
-        self.writer_arg1(self.fobj)
-        assert_false(self.fobj.closed)
-        self.fobj.close()
-        assert_equal( self.read(self.name), ''.join(self.text) )
-
-    def test_writer_arg2default_str(self):
-        self.writer_arg2default(0, path=None)
-        self.writer_arg2default(0, path=self.name)
-        assert_equal( self.read(self.name), ''.join(self.text) )
-
-    def test_writer_arg2default_fobj(self):
-        self.writer_arg2default(0, path=self.fobj)
-        assert_false(self.fobj.closed)
-        self.fobj.close()
-        assert_equal( self.read(self.name), ''.join(self.text) )
-
-    def test_writer_arg2default_fobj(self):
-        self.writer_arg2default(0, path=None)
-
-    def test_writer_arg4default_fobj(self):
-        self.writer_arg4default(0, 1, dog='dog', other='other2')
-        self.writer_arg4default(0, 1, dog='dog', other='other2', path=self.name)
-        assert_equal( self.read(self.name), ''.join(self.text) )
-
-    def test_writer_kwarg_str(self):
-        self.writer_kwarg(path=self.name)
-        assert_equal( self.read(self.name), ''.join(self.text) )
-
-    def test_writer_kwarg_fobj(self):
-        self.writer_kwarg(path=self.fobj)
-        self.fobj.close()
-        assert_equal( self.read(self.name), ''.join(self.text) )
-
-    def test_writer_kwarg_fobj(self):
-        self.writer_kwarg(path=None)
-
-    def tearDown(self):
-        self.fobj.close()
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/utils/tests/test_misc.py b/lib/python2.7/site-packages/setoolsgui/networkx/utils/tests/test_misc.py
deleted file mode 100644
index 77b8196..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/utils/tests/test_misc.py
+++ /dev/null
@@ -1,72 +0,0 @@
-from nose.tools import *
-from nose import SkipTest
-import networkx as nx
-from networkx.utils import *
-
-def test_is_string_like():
-    assert_true(is_string_like("aaaa"))
-    assert_false(is_string_like(None))
-    assert_false(is_string_like(123))
-
-def test_iterable():
-    assert_false(iterable(None))
-    assert_false(iterable(10))
-    assert_true(iterable([1,2,3]))
-    assert_true(iterable((1,2,3)))
-    assert_true(iterable({1:"A",2:"X"}))
-    assert_true(iterable("ABC"))
-
-def test_graph_iterable():
-    K=nx.complete_graph(10)
-    assert_true(iterable(K))
-    assert_true(iterable(K.nodes_iter()))
-    assert_true(iterable(K.edges_iter()))
-
-def test_is_list_of_ints():
-    assert_true(is_list_of_ints([1,2,3,42]))
-    assert_false(is_list_of_ints([1,2,3,"kermit"]))
-
-def test_random_number_distribution():
-    # smoke test only
-    z=uniform_sequence(20)
-    z=powerlaw_sequence(20,exponent=2.5)
-    z=pareto_sequence(20,exponent=1.5)
-    z=discrete_sequence(20,distribution=[0,0,0,0,1,1,1,1,2,2,3])
-
-class TestNumpyArray(object):
-    numpy=1 # nosetests attribute, use nosetests -a 'not numpy' to skip test
-    @classmethod
-    def setupClass(cls):
-        global numpy
-        global assert_equal
-        global assert_almost_equal
-        try:
-            import numpy
-            from numpy.testing import assert_equal,assert_almost_equal
-        except ImportError:
-             raise SkipTest('NumPy not available.')
-
-    def test_dict_to_numpy_array1(self):
-        d = {'a':1,'b':2}
-        a = dict_to_numpy_array1(d)
-        assert_equal(a, numpy.array([1,2]))
-        a = dict_to_numpy_array1(d, mapping = {'b':0,'a':1})
-        assert_equal(a, numpy.array([2,1]))
-
-    def test_dict_to_numpy_array2(self):
-        d = {'a': {'a':1,'b':2},
-             'b': {'a':10,'b':20}}
-        a = dict_to_numpy_array(d)
-        assert_equal(a, numpy.array([[1,2],[10,20]]))
-        a = dict_to_numpy_array2(d, mapping = {'b':0,'a':1})
-        assert_equal(a, numpy.array([[20,10],[2,1]]))
-
-
-    def test_dict_to_numpy_array(self):
-        d = {'a': {'a':1,'b':2},
-             'b': {'a':10,'b':20}}
-        a = dict_to_numpy_array(d)
-        assert_equal(a, numpy.array([[1,2],[10,20]]))
-        d = {'a':1,'b':2}
-        a = dict_to_numpy_array1(d)
-        assert_equal(a, numpy.array([1,2]))
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/utils/tests/test_random_sequence.py b/lib/python2.7/site-packages/setoolsgui/networkx/utils/tests/test_random_sequence.py
deleted file mode 100644
index 0c3634a..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/utils/tests/test_random_sequence.py
+++ /dev/null
@@ -1,33 +0,0 @@
-#!/usr/bin/env python
-from nose.tools import *
-from networkx.utils import uniform_sequence,powerlaw_sequence,\
-    create_degree_sequence,zipf_rv,zipf_sequence,random_weighted_sample,\
-    weighted_choice
-import networkx.utils
-
-def test_degree_sequences():
-    seq=create_degree_sequence(10,uniform_sequence)
-    assert_equal(len(seq), 10)
-    seq=create_degree_sequence(10,powerlaw_sequence)
-    assert_equal(len(seq), 10)
-
-def test_zipf_rv():
-    r = zipf_rv(2.3)
-    assert_true(type(r),int)
-    assert_raises(ValueError,zipf_rv,0.5)
-    assert_raises(ValueError,zipf_rv,2,xmin=0)
-
-def test_zipf_sequence():
-    s = zipf_sequence(10)
-    assert_equal(len(s),10)
-
-def test_random_weighted_sample():
-    mapping={'a':10,'b':20}
-    s = random_weighted_sample(mapping,2)
-    assert_equal(sorted(s),sorted(mapping.keys()))
-    assert_raises(ValueError,random_weighted_sample,mapping,3)
-
-def test_random_weighted_choice():
-    mapping={'a':10,'b':0}
-    c = weighted_choice(mapping)
-    assert_equal(c,'a')
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/utils/tests/test_rcm.py b/lib/python2.7/site-packages/setoolsgui/networkx/utils/tests/test_rcm.py
deleted file mode 100644
index f267586..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/utils/tests/test_rcm.py
+++ /dev/null
@@ -1,13 +0,0 @@
-from nose.tools import *
-from networkx.utils import reverse_cuthill_mckee_ordering
-import networkx as nx
-
-def test_reverse_cuthill_mckee():
-    # example graph from 
-    # http://www.boost.org/doc/libs/1_37_0/libs/graph/example/cuthill_mckee_ordering.cpp
-    G = nx.Graph([(0,3),(0,5),(1,2),(1,4),(1,6),(1,9),(2,3),
-                  (2,4),(3,5),(3,8),(4,6),(5,6),(5,7),(6,7)])
-    rcm = list(reverse_cuthill_mckee_ordering(G,start=0))    
-    assert_equal(rcm,[9, 1, 4, 6, 7, 2, 8, 5, 3, 0])
-    rcm = list(reverse_cuthill_mckee_ordering(G))    
-    assert_equal(rcm,[0, 8, 5, 7, 3, 6, 4, 2, 1, 9])
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/utils/union_find.py b/lib/python2.7/site-packages/setoolsgui/networkx/utils/union_find.py
deleted file mode 100644
index d05dd92..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/utils/union_find.py
+++ /dev/null
@@ -1,75 +0,0 @@
-"""
-Union-find data structure.
-"""
-#    Copyright (C) 2004-2011 by 
-#    Aric Hagberg <hagberg@lanl.gov>
-#    Dan Schult <dschult@colgate.edu>
-#    Pieter Swart <swart@lanl.gov>
-#    All rights reserved.
-#    BSD license.
-import networkx as nx
-
-class UnionFind:
-    """Union-find data structure.
-
-    Each unionFind instance X maintains a family of disjoint sets of
-    hashable objects, supporting the following two methods:
-
-    - X[item] returns a name for the set containing the given item.
-      Each set is named by an arbitrarily-chosen one of its members; as
-      long as the set remains unchanged it will keep the same name. If
-      the item is not yet part of a set in X, a new singleton set is
-      created for it.
-
-    - X.union(item1, item2, ...) merges the sets containing each item
-      into a single larger set.  If any item is not yet part of a set
-      in X, it is added to X as one of the members of the merged set.
-
-      Union-find data structure. Based on Josiah Carlson's code,
-      http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/215912
-      with significant additional changes by D. Eppstein.
-      http://www.ics.uci.edu/~eppstein/PADS/UnionFind.py
-
-    """
-
-    def __init__(self):
-        """Create a new empty union-find structure."""
-        self.weights = {}
-        self.parents = {}
-
-    def __getitem__(self, object):
-        """Find and return the name of the set containing the object."""
-
-        # check for previously unknown object
-        if object not in self.parents:
-            self.parents[object] = object
-            self.weights[object] = 1
-            return object
-
-        # find path of objects leading to the root
-        path = [object]
-        root = self.parents[object]
-        while root != path[-1]:
-            path.append(root)
-            root = self.parents[root]
-
-        # compress the path and return
-        for ancestor in path:
-            self.parents[ancestor] = root
-        return root
-        
-    def __iter__(self):
-        """Iterate through all items ever found or unioned by this structure."""
-        return iter(self.parents)
-
-    def union(self, *objects):
-        """Find the sets containing the objects and merge them all."""
-        roots = [self[x] for x in objects]
-        heaviest = max([(self.weights[r],r) for r in roots])[1]
-        for r in roots:
-            if r != heaviest:
-                self.weights[heaviest] += self.weights[r]
-                self.parents[r] = heaviest
-
-
-
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/version.py b/lib/python2.7/site-packages/setoolsgui/networkx/version.py
deleted file mode 100644
index 7369f8b..0000000
--- a/lib/python2.7/site-packages/setoolsgui/networkx/version.py
+++ /dev/null
@@ -1,25 +0,0 @@
-"""
-Version information for NetworkX, created during installation.
-
-Do not add this file to the repository.
-
-"""
-
-import datetime
-
-version = '1.8.1'
-date = 'Sun Aug  4 07:56:54 2013'
-
-# Was NetworkX built from a development version? If so, remember that the major
-# and minor versions reference the "target" (rather than "current") release.
-dev = False
-
-# Format: (name, major, min, revision)
-version_info = ('networkx', '1', '8.1', None)
-
-# Format: a 'datetime.datetime' instance
-date_info = datetime.datetime(2013, 8, 4, 7, 56, 54, 416491)
-
-# Format: (vcs, vcs_tuple)
-vcs_info = (None, (None, None))
-
diff --git a/lib/python2.7/site-packages/setoolsgui/selinux/__init__.py b/lib/python2.7/site-packages/setoolsgui/selinux/__init__.py
deleted file mode 100644
index b81b031..0000000
--- a/lib/python2.7/site-packages/setoolsgui/selinux/__init__.py
+++ /dev/null
@@ -1,2445 +0,0 @@
-# This file was automatically generated by SWIG (http://www.swig.org).
-# Version 2.0.11
-#
-# Do not make changes to this file unless you know what you are doing--modify
-# the SWIG interface file instead.
-
-
-
-
-
-from sys import version_info
-if version_info >= (2,6,0):
-    def swig_import_helper():
-        from os.path import dirname
-        import imp
-        fp = None
-        try:
-            fp, pathname, description = imp.find_module('_selinux', [dirname(__file__)])
-        except ImportError:
-            import _selinux
-            return _selinux
-        if fp is not None:
-            try:
-                _mod = imp.load_module('_selinux', fp, pathname, description)
-            finally:
-                fp.close()
-            return _mod
-    _selinux = swig_import_helper()
-    del swig_import_helper
-else:
-    import _selinux
-del version_info
-try:
-    _swig_property = property
-except NameError:
-    pass # Python < 2.2 doesn't have 'property'.
-def _swig_setattr_nondynamic(self,class_type,name,value,static=1):
-    if (name == "thisown"): return self.this.own(value)
-    if (name == "this"):
-        if type(value).__name__ == 'SwigPyObject':
-            self.__dict__[name] = value
-            return
-    method = class_type.__swig_setmethods__.get(name,None)
-    if method: return method(self,value)
-    if (not static):
-        self.__dict__[name] = value
-    else:
-        raise AttributeError("You cannot add attributes to %s" % self)
-
-def _swig_setattr(self,class_type,name,value):
-    return _swig_setattr_nondynamic(self,class_type,name,value,0)
-
-def _swig_getattr(self,class_type,name):
-    if (name == "thisown"): return self.this.own()
-    method = class_type.__swig_getmethods__.get(name,None)
-    if method: return method(self)
-    raise AttributeError(name)
-
-def _swig_repr(self):
-    try: strthis = "proxy of " + self.this.__repr__()
-    except: strthis = ""
-    return "<%s.%s; %s >" % (self.__class__.__module__, self.__class__.__name__, strthis,)
-
-try:
-    _object = object
-    _newclass = 1
-except AttributeError:
-    class _object : pass
-    _newclass = 0
-
-
-import shutil, os, stat
-
-DISABLED = -1
-PERMISSIVE = 0
-ENFORCING = 1
-
-def restorecon(path, recursive=False):
-    """ Restore SELinux context on a given path """
-
-    try:
-        mode = os.lstat(path)[stat.ST_MODE]
-        status, context = matchpathcon(path, mode)
-    except OSError:
-        path = os.path.realpath(os.path.expanduser(path))
-        mode = os.lstat(path)[stat.ST_MODE]
-        status, context = matchpathcon(path, mode)
-
-    if status == 0:
-        status, oldcontext = lgetfilecon(path)
-        if context != oldcontext:
-            lsetfilecon(path, context)
-
-        if recursive:
-            for root, dirs, files in os.walk(path):
-                for name in files + dirs:
-                   restorecon(os.path.join(root, name))
-
-def chcon(path, context, recursive=False):
-    """ Set the SELinux context on a given path """
-    lsetfilecon(path, context)
-    if recursive:
-        for root, dirs, files in os.walk(path):
-            for name in files + dirs:
-               lsetfilecon(os.path.join(root,name), context)
-
-def copytree(src, dest):
-    """ An SELinux-friendly shutil.copytree method """
-    shutil.copytree(src, dest)
-    restorecon(dest, recursive=True)
-
-def install(src, dest):
-    """ An SELinux-friendly shutil.move method """
-    shutil.move(src, dest)
-    restorecon(dest, recursive=True)
-
-class security_id(_object):
-    __swig_setmethods__ = {}
-    __setattr__ = lambda self, name, value: _swig_setattr(self, security_id, name, value)
-    __swig_getmethods__ = {}
-    __getattr__ = lambda self, name: _swig_getattr(self, security_id, name)
-    __repr__ = _swig_repr
-    __swig_setmethods__["ctx"] = _selinux.security_id_ctx_set
-    __swig_getmethods__["ctx"] = _selinux.security_id_ctx_get
-    if _newclass:ctx = _swig_property(_selinux.security_id_ctx_get, _selinux.security_id_ctx_set)
-    __swig_setmethods__["refcnt"] = _selinux.security_id_refcnt_set
-    __swig_getmethods__["refcnt"] = _selinux.security_id_refcnt_get
-    if _newclass:refcnt = _swig_property(_selinux.security_id_refcnt_get, _selinux.security_id_refcnt_set)
-    def __init__(self): 
-        this = _selinux.new_security_id()
-        try: self.this.append(this)
-        except: self.this = this
-    __swig_destroy__ = _selinux.delete_security_id
-    __del__ = lambda self : None;
-security_id_swigregister = _selinux.security_id_swigregister
-security_id_swigregister(security_id)
-
-
-def avc_sid_to_context(*args):
-  return _selinux.avc_sid_to_context(*args)
-avc_sid_to_context = _selinux.avc_sid_to_context
-
-def avc_sid_to_context_raw(*args):
-  return _selinux.avc_sid_to_context_raw(*args)
-avc_sid_to_context_raw = _selinux.avc_sid_to_context_raw
-
-def avc_context_to_sid(*args):
-  return _selinux.avc_context_to_sid(*args)
-avc_context_to_sid = _selinux.avc_context_to_sid
-
-def avc_context_to_sid_raw(*args):
-  return _selinux.avc_context_to_sid_raw(*args)
-avc_context_to_sid_raw = _selinux.avc_context_to_sid_raw
-
-def sidget(*args):
-  return _selinux.sidget(*args)
-sidget = _selinux.sidget
-
-def sidput(*args):
-  return _selinux.sidput(*args)
-sidput = _selinux.sidput
-
-def avc_get_initial_sid(*args):
-  return _selinux.avc_get_initial_sid(*args)
-avc_get_initial_sid = _selinux.avc_get_initial_sid
-class avc_entry_ref(_object):
-    __swig_setmethods__ = {}
-    __setattr__ = lambda self, name, value: _swig_setattr(self, avc_entry_ref, name, value)
-    __swig_getmethods__ = {}
-    __getattr__ = lambda self, name: _swig_getattr(self, avc_entry_ref, name)
-    __repr__ = _swig_repr
-    __swig_setmethods__["ae"] = _selinux.avc_entry_ref_ae_set
-    __swig_getmethods__["ae"] = _selinux.avc_entry_ref_ae_get
-    if _newclass:ae = _swig_property(_selinux.avc_entry_ref_ae_get, _selinux.avc_entry_ref_ae_set)
-    def __init__(self): 
-        this = _selinux.new_avc_entry_ref()
-        try: self.this.append(this)
-        except: self.this = this
-    __swig_destroy__ = _selinux.delete_avc_entry_ref
-    __del__ = lambda self : None;
-avc_entry_ref_swigregister = _selinux.avc_entry_ref_swigregister
-avc_entry_ref_swigregister(avc_entry_ref)
-
-class avc_memory_callback(_object):
-    __swig_setmethods__ = {}
-    __setattr__ = lambda self, name, value: _swig_setattr(self, avc_memory_callback, name, value)
-    __swig_getmethods__ = {}
-    __getattr__ = lambda self, name: _swig_getattr(self, avc_memory_callback, name)
-    __repr__ = _swig_repr
-    __swig_setmethods__["func_malloc"] = _selinux.avc_memory_callback_func_malloc_set
-    __swig_getmethods__["func_malloc"] = _selinux.avc_memory_callback_func_malloc_get
-    if _newclass:func_malloc = _swig_property(_selinux.avc_memory_callback_func_malloc_get, _selinux.avc_memory_callback_func_malloc_set)
-    __swig_setmethods__["func_free"] = _selinux.avc_memory_callback_func_free_set
-    __swig_getmethods__["func_free"] = _selinux.avc_memory_callback_func_free_get
-    if _newclass:func_free = _swig_property(_selinux.avc_memory_callback_func_free_get, _selinux.avc_memory_callback_func_free_set)
-    def __init__(self): 
-        this = _selinux.new_avc_memory_callback()
-        try: self.this.append(this)
-        except: self.this = this
-    __swig_destroy__ = _selinux.delete_avc_memory_callback
-    __del__ = lambda self : None;
-avc_memory_callback_swigregister = _selinux.avc_memory_callback_swigregister
-avc_memory_callback_swigregister(avc_memory_callback)
-
-class avc_log_callback(_object):
-    __swig_setmethods__ = {}
-    __setattr__ = lambda self, name, value: _swig_setattr(self, avc_log_callback, name, value)
-    __swig_getmethods__ = {}
-    __getattr__ = lambda self, name: _swig_getattr(self, avc_log_callback, name)
-    __repr__ = _swig_repr
-    __swig_setmethods__["func_log"] = _selinux.avc_log_callback_func_log_set
-    __swig_getmethods__["func_log"] = _selinux.avc_log_callback_func_log_get
-    if _newclass:func_log = _swig_property(_selinux.avc_log_callback_func_log_get, _selinux.avc_log_callback_func_log_set)
-    __swig_setmethods__["func_audit"] = _selinux.avc_log_callback_func_audit_set
-    __swig_getmethods__["func_audit"] = _selinux.avc_log_callback_func_audit_get
-    if _newclass:func_audit = _swig_property(_selinux.avc_log_callback_func_audit_get, _selinux.avc_log_callback_func_audit_set)
-    def __init__(self): 
-        this = _selinux.new_avc_log_callback()
-        try: self.this.append(this)
-        except: self.this = this
-    __swig_destroy__ = _selinux.delete_avc_log_callback
-    __del__ = lambda self : None;
-avc_log_callback_swigregister = _selinux.avc_log_callback_swigregister
-avc_log_callback_swigregister(avc_log_callback)
-
-class avc_thread_callback(_object):
-    __swig_setmethods__ = {}
-    __setattr__ = lambda self, name, value: _swig_setattr(self, avc_thread_callback, name, value)
-    __swig_getmethods__ = {}
-    __getattr__ = lambda self, name: _swig_getattr(self, avc_thread_callback, name)
-    __repr__ = _swig_repr
-    __swig_setmethods__["func_create_thread"] = _selinux.avc_thread_callback_func_create_thread_set
-    __swig_getmethods__["func_create_thread"] = _selinux.avc_thread_callback_func_create_thread_get
-    if _newclass:func_create_thread = _swig_property(_selinux.avc_thread_callback_func_create_thread_get, _selinux.avc_thread_callback_func_create_thread_set)
-    __swig_setmethods__["func_stop_thread"] = _selinux.avc_thread_callback_func_stop_thread_set
-    __swig_getmethods__["func_stop_thread"] = _selinux.avc_thread_callback_func_stop_thread_get
-    if _newclass:func_stop_thread = _swig_property(_selinux.avc_thread_callback_func_stop_thread_get, _selinux.avc_thread_callback_func_stop_thread_set)
-    def __init__(self): 
-        this = _selinux.new_avc_thread_callback()
-        try: self.this.append(this)
-        except: self.this = this
-    __swig_destroy__ = _selinux.delete_avc_thread_callback
-    __del__ = lambda self : None;
-avc_thread_callback_swigregister = _selinux.avc_thread_callback_swigregister
-avc_thread_callback_swigregister(avc_thread_callback)
-
-class avc_lock_callback(_object):
-    __swig_setmethods__ = {}
-    __setattr__ = lambda self, name, value: _swig_setattr(self, avc_lock_callback, name, value)
-    __swig_getmethods__ = {}
-    __getattr__ = lambda self, name: _swig_getattr(self, avc_lock_callback, name)
-    __repr__ = _swig_repr
-    __swig_setmethods__["func_alloc_lock"] = _selinux.avc_lock_callback_func_alloc_lock_set
-    __swig_getmethods__["func_alloc_lock"] = _selinux.avc_lock_callback_func_alloc_lock_get
-    if _newclass:func_alloc_lock = _swig_property(_selinux.avc_lock_callback_func_alloc_lock_get, _selinux.avc_lock_callback_func_alloc_lock_set)
-    __swig_setmethods__["func_get_lock"] = _selinux.avc_lock_callback_func_get_lock_set
-    __swig_getmethods__["func_get_lock"] = _selinux.avc_lock_callback_func_get_lock_get
-    if _newclass:func_get_lock = _swig_property(_selinux.avc_lock_callback_func_get_lock_get, _selinux.avc_lock_callback_func_get_lock_set)
-    __swig_setmethods__["func_release_lock"] = _selinux.avc_lock_callback_func_release_lock_set
-    __swig_getmethods__["func_release_lock"] = _selinux.avc_lock_callback_func_release_lock_get
-    if _newclass:func_release_lock = _swig_property(_selinux.avc_lock_callback_func_release_lock_get, _selinux.avc_lock_callback_func_release_lock_set)
-    __swig_setmethods__["func_free_lock"] = _selinux.avc_lock_callback_func_free_lock_set
-    __swig_getmethods__["func_free_lock"] = _selinux.avc_lock_callback_func_free_lock_get
-    if _newclass:func_free_lock = _swig_property(_selinux.avc_lock_callback_func_free_lock_get, _selinux.avc_lock_callback_func_free_lock_set)
-    def __init__(self): 
-        this = _selinux.new_avc_lock_callback()
-        try: self.this.append(this)
-        except: self.this = this
-    __swig_destroy__ = _selinux.delete_avc_lock_callback
-    __del__ = lambda self : None;
-avc_lock_callback_swigregister = _selinux.avc_lock_callback_swigregister
-avc_lock_callback_swigregister(avc_lock_callback)
-
-AVC_OPT_UNUSED = _selinux.AVC_OPT_UNUSED
-AVC_OPT_SETENFORCE = _selinux.AVC_OPT_SETENFORCE
-
-def avc_init(*args):
-  return _selinux.avc_init(*args)
-avc_init = _selinux.avc_init
-
-def avc_open(*args):
-  return _selinux.avc_open(*args)
-avc_open = _selinux.avc_open
-
-def avc_cleanup():
-  return _selinux.avc_cleanup()
-avc_cleanup = _selinux.avc_cleanup
-
-def avc_reset():
-  return _selinux.avc_reset()
-avc_reset = _selinux.avc_reset
-
-def avc_destroy():
-  return _selinux.avc_destroy()
-avc_destroy = _selinux.avc_destroy
-
-def avc_has_perm_noaudit(*args):
-  return _selinux.avc_has_perm_noaudit(*args)
-avc_has_perm_noaudit = _selinux.avc_has_perm_noaudit
-
-def avc_has_perm(*args):
-  return _selinux.avc_has_perm(*args)
-avc_has_perm = _selinux.avc_has_perm
-
-def avc_audit(*args):
-  return _selinux.avc_audit(*args)
-avc_audit = _selinux.avc_audit
-
-def avc_compute_create(*args):
-  return _selinux.avc_compute_create(*args)
-avc_compute_create = _selinux.avc_compute_create
-
-def avc_compute_member(*args):
-  return _selinux.avc_compute_member(*args)
-avc_compute_member = _selinux.avc_compute_member
-AVC_CALLBACK_GRANT = _selinux.AVC_CALLBACK_GRANT
-AVC_CALLBACK_TRY_REVOKE = _selinux.AVC_CALLBACK_TRY_REVOKE
-AVC_CALLBACK_REVOKE = _selinux.AVC_CALLBACK_REVOKE
-AVC_CALLBACK_RESET = _selinux.AVC_CALLBACK_RESET
-AVC_CALLBACK_AUDITALLOW_ENABLE = _selinux.AVC_CALLBACK_AUDITALLOW_ENABLE
-AVC_CALLBACK_AUDITALLOW_DISABLE = _selinux.AVC_CALLBACK_AUDITALLOW_DISABLE
-AVC_CALLBACK_AUDITDENY_ENABLE = _selinux.AVC_CALLBACK_AUDITDENY_ENABLE
-AVC_CALLBACK_AUDITDENY_DISABLE = _selinux.AVC_CALLBACK_AUDITDENY_DISABLE
-AVC_CACHE_STATS = _selinux.AVC_CACHE_STATS
-class avc_cache_stats(_object):
-    __swig_setmethods__ = {}
-    __setattr__ = lambda self, name, value: _swig_setattr(self, avc_cache_stats, name, value)
-    __swig_getmethods__ = {}
-    __getattr__ = lambda self, name: _swig_getattr(self, avc_cache_stats, name)
-    __repr__ = _swig_repr
-    __swig_setmethods__["entry_lookups"] = _selinux.avc_cache_stats_entry_lookups_set
-    __swig_getmethods__["entry_lookups"] = _selinux.avc_cache_stats_entry_lookups_get
-    if _newclass:entry_lookups = _swig_property(_selinux.avc_cache_stats_entry_lookups_get, _selinux.avc_cache_stats_entry_lookups_set)
-    __swig_setmethods__["entry_hits"] = _selinux.avc_cache_stats_entry_hits_set
-    __swig_getmethods__["entry_hits"] = _selinux.avc_cache_stats_entry_hits_get
-    if _newclass:entry_hits = _swig_property(_selinux.avc_cache_stats_entry_hits_get, _selinux.avc_cache_stats_entry_hits_set)
-    __swig_setmethods__["entry_misses"] = _selinux.avc_cache_stats_entry_misses_set
-    __swig_getmethods__["entry_misses"] = _selinux.avc_cache_stats_entry_misses_get
-    if _newclass:entry_misses = _swig_property(_selinux.avc_cache_stats_entry_misses_get, _selinux.avc_cache_stats_entry_misses_set)
-    __swig_setmethods__["entry_discards"] = _selinux.avc_cache_stats_entry_discards_set
-    __swig_getmethods__["entry_discards"] = _selinux.avc_cache_stats_entry_discards_get
-    if _newclass:entry_discards = _swig_property(_selinux.avc_cache_stats_entry_discards_get, _selinux.avc_cache_stats_entry_discards_set)
-    __swig_setmethods__["cav_lookups"] = _selinux.avc_cache_stats_cav_lookups_set
-    __swig_getmethods__["cav_lookups"] = _selinux.avc_cache_stats_cav_lookups_get
-    if _newclass:cav_lookups = _swig_property(_selinux.avc_cache_stats_cav_lookups_get, _selinux.avc_cache_stats_cav_lookups_set)
-    __swig_setmethods__["cav_hits"] = _selinux.avc_cache_stats_cav_hits_set
-    __swig_getmethods__["cav_hits"] = _selinux.avc_cache_stats_cav_hits_get
-    if _newclass:cav_hits = _swig_property(_selinux.avc_cache_stats_cav_hits_get, _selinux.avc_cache_stats_cav_hits_set)
-    __swig_setmethods__["cav_probes"] = _selinux.avc_cache_stats_cav_probes_set
-    __swig_getmethods__["cav_probes"] = _selinux.avc_cache_stats_cav_probes_get
-    if _newclass:cav_probes = _swig_property(_selinux.avc_cache_stats_cav_probes_get, _selinux.avc_cache_stats_cav_probes_set)
-    __swig_setmethods__["cav_misses"] = _selinux.avc_cache_stats_cav_misses_set
-    __swig_getmethods__["cav_misses"] = _selinux.avc_cache_stats_cav_misses_get
-    if _newclass:cav_misses = _swig_property(_selinux.avc_cache_stats_cav_misses_get, _selinux.avc_cache_stats_cav_misses_set)
-    def __init__(self): 
-        this = _selinux.new_avc_cache_stats()
-        try: self.this.append(this)
-        except: self.this = this
-    __swig_destroy__ = _selinux.delete_avc_cache_stats
-    __del__ = lambda self : None;
-avc_cache_stats_swigregister = _selinux.avc_cache_stats_swigregister
-avc_cache_stats_swigregister(avc_cache_stats)
-
-
-def avc_av_stats():
-  return _selinux.avc_av_stats()
-avc_av_stats = _selinux.avc_av_stats
-
-def avc_sid_stats():
-  return _selinux.avc_sid_stats()
-avc_sid_stats = _selinux.avc_sid_stats
-
-def avc_netlink_open(*args):
-  return _selinux.avc_netlink_open(*args)
-avc_netlink_open = _selinux.avc_netlink_open
-
-def avc_netlink_loop():
-  return _selinux.avc_netlink_loop()
-avc_netlink_loop = _selinux.avc_netlink_loop
-
-def avc_netlink_close():
-  return _selinux.avc_netlink_close()
-avc_netlink_close = _selinux.avc_netlink_close
-
-def selinux_status_open(*args):
-  return _selinux.selinux_status_open(*args)
-selinux_status_open = _selinux.selinux_status_open
-
-def selinux_status_close():
-  return _selinux.selinux_status_close()
-selinux_status_close = _selinux.selinux_status_close
-
-def selinux_status_updated():
-  return _selinux.selinux_status_updated()
-selinux_status_updated = _selinux.selinux_status_updated
-
-def selinux_status_getenforce():
-  return _selinux.selinux_status_getenforce()
-selinux_status_getenforce = _selinux.selinux_status_getenforce
-
-def selinux_status_policyload():
-  return _selinux.selinux_status_policyload()
-selinux_status_policyload = _selinux.selinux_status_policyload
-
-def selinux_status_deny_unknown():
-  return _selinux.selinux_status_deny_unknown()
-selinux_status_deny_unknown = _selinux.selinux_status_deny_unknown
-COMMON_FILE__IOCTL = _selinux.COMMON_FILE__IOCTL
-COMMON_FILE__READ = _selinux.COMMON_FILE__READ
-COMMON_FILE__WRITE = _selinux.COMMON_FILE__WRITE
-COMMON_FILE__CREATE = _selinux.COMMON_FILE__CREATE
-COMMON_FILE__GETATTR = _selinux.COMMON_FILE__GETATTR
-COMMON_FILE__SETATTR = _selinux.COMMON_FILE__SETATTR
-COMMON_FILE__LOCK = _selinux.COMMON_FILE__LOCK
-COMMON_FILE__RELABELFROM = _selinux.COMMON_FILE__RELABELFROM
-COMMON_FILE__RELABELTO = _selinux.COMMON_FILE__RELABELTO
-COMMON_FILE__APPEND = _selinux.COMMON_FILE__APPEND
-COMMON_FILE__UNLINK = _selinux.COMMON_FILE__UNLINK
-COMMON_FILE__LINK = _selinux.COMMON_FILE__LINK
-COMMON_FILE__RENAME = _selinux.COMMON_FILE__RENAME
-COMMON_FILE__EXECUTE = _selinux.COMMON_FILE__EXECUTE
-COMMON_FILE__SWAPON = _selinux.COMMON_FILE__SWAPON
-COMMON_FILE__QUOTAON = _selinux.COMMON_FILE__QUOTAON
-COMMON_FILE__MOUNTON = _selinux.COMMON_FILE__MOUNTON
-COMMON_SOCKET__IOCTL = _selinux.COMMON_SOCKET__IOCTL
-COMMON_SOCKET__READ = _selinux.COMMON_SOCKET__READ
-COMMON_SOCKET__WRITE = _selinux.COMMON_SOCKET__WRITE
-COMMON_SOCKET__CREATE = _selinux.COMMON_SOCKET__CREATE
-COMMON_SOCKET__GETATTR = _selinux.COMMON_SOCKET__GETATTR
-COMMON_SOCKET__SETATTR = _selinux.COMMON_SOCKET__SETATTR
-COMMON_SOCKET__LOCK = _selinux.COMMON_SOCKET__LOCK
-COMMON_SOCKET__RELABELFROM = _selinux.COMMON_SOCKET__RELABELFROM
-COMMON_SOCKET__RELABELTO = _selinux.COMMON_SOCKET__RELABELTO
-COMMON_SOCKET__APPEND = _selinux.COMMON_SOCKET__APPEND
-COMMON_SOCKET__BIND = _selinux.COMMON_SOCKET__BIND
-COMMON_SOCKET__CONNECT = _selinux.COMMON_SOCKET__CONNECT
-COMMON_SOCKET__LISTEN = _selinux.COMMON_SOCKET__LISTEN
-COMMON_SOCKET__ACCEPT = _selinux.COMMON_SOCKET__ACCEPT
-COMMON_SOCKET__GETOPT = _selinux.COMMON_SOCKET__GETOPT
-COMMON_SOCKET__SETOPT = _selinux.COMMON_SOCKET__SETOPT
-COMMON_SOCKET__SHUTDOWN = _selinux.COMMON_SOCKET__SHUTDOWN
-COMMON_SOCKET__RECVFROM = _selinux.COMMON_SOCKET__RECVFROM
-COMMON_SOCKET__SENDTO = _selinux.COMMON_SOCKET__SENDTO
-COMMON_SOCKET__RECV_MSG = _selinux.COMMON_SOCKET__RECV_MSG
-COMMON_SOCKET__SEND_MSG = _selinux.COMMON_SOCKET__SEND_MSG
-COMMON_SOCKET__NAME_BIND = _selinux.COMMON_SOCKET__NAME_BIND
-COMMON_IPC__CREATE = _selinux.COMMON_IPC__CREATE
-COMMON_IPC__DESTROY = _selinux.COMMON_IPC__DESTROY
-COMMON_IPC__GETATTR = _selinux.COMMON_IPC__GETATTR
-COMMON_IPC__SETATTR = _selinux.COMMON_IPC__SETATTR
-COMMON_IPC__READ = _selinux.COMMON_IPC__READ
-COMMON_IPC__WRITE = _selinux.COMMON_IPC__WRITE
-COMMON_IPC__ASSOCIATE = _selinux.COMMON_IPC__ASSOCIATE
-COMMON_IPC__UNIX_READ = _selinux.COMMON_IPC__UNIX_READ
-COMMON_IPC__UNIX_WRITE = _selinux.COMMON_IPC__UNIX_WRITE
-COMMON_DATABASE__CREATE = _selinux.COMMON_DATABASE__CREATE
-COMMON_DATABASE__DROP = _selinux.COMMON_DATABASE__DROP
-COMMON_DATABASE__GETATTR = _selinux.COMMON_DATABASE__GETATTR
-COMMON_DATABASE__SETATTR = _selinux.COMMON_DATABASE__SETATTR
-COMMON_DATABASE__RELABELFROM = _selinux.COMMON_DATABASE__RELABELFROM
-COMMON_DATABASE__RELABELTO = _selinux.COMMON_DATABASE__RELABELTO
-FILESYSTEM__MOUNT = _selinux.FILESYSTEM__MOUNT
-FILESYSTEM__REMOUNT = _selinux.FILESYSTEM__REMOUNT
-FILESYSTEM__UNMOUNT = _selinux.FILESYSTEM__UNMOUNT
-FILESYSTEM__GETATTR = _selinux.FILESYSTEM__GETATTR
-FILESYSTEM__RELABELFROM = _selinux.FILESYSTEM__RELABELFROM
-FILESYSTEM__RELABELTO = _selinux.FILESYSTEM__RELABELTO
-FILESYSTEM__TRANSITION = _selinux.FILESYSTEM__TRANSITION
-FILESYSTEM__ASSOCIATE = _selinux.FILESYSTEM__ASSOCIATE
-FILESYSTEM__QUOTAMOD = _selinux.FILESYSTEM__QUOTAMOD
-FILESYSTEM__QUOTAGET = _selinux.FILESYSTEM__QUOTAGET
-DIR__IOCTL = _selinux.DIR__IOCTL
-DIR__READ = _selinux.DIR__READ
-DIR__WRITE = _selinux.DIR__WRITE
-DIR__CREATE = _selinux.DIR__CREATE
-DIR__GETATTR = _selinux.DIR__GETATTR
-DIR__SETATTR = _selinux.DIR__SETATTR
-DIR__LOCK = _selinux.DIR__LOCK
-DIR__RELABELFROM = _selinux.DIR__RELABELFROM
-DIR__RELABELTO = _selinux.DIR__RELABELTO
-DIR__APPEND = _selinux.DIR__APPEND
-DIR__UNLINK = _selinux.DIR__UNLINK
-DIR__LINK = _selinux.DIR__LINK
-DIR__RENAME = _selinux.DIR__RENAME
-DIR__EXECUTE = _selinux.DIR__EXECUTE
-DIR__SWAPON = _selinux.DIR__SWAPON
-DIR__QUOTAON = _selinux.DIR__QUOTAON
-DIR__MOUNTON = _selinux.DIR__MOUNTON
-DIR__ADD_NAME = _selinux.DIR__ADD_NAME
-DIR__REMOVE_NAME = _selinux.DIR__REMOVE_NAME
-DIR__REPARENT = _selinux.DIR__REPARENT
-DIR__SEARCH = _selinux.DIR__SEARCH
-DIR__RMDIR = _selinux.DIR__RMDIR
-DIR__OPEN = _selinux.DIR__OPEN
-FILE__IOCTL = _selinux.FILE__IOCTL
-FILE__READ = _selinux.FILE__READ
-FILE__WRITE = _selinux.FILE__WRITE
-FILE__CREATE = _selinux.FILE__CREATE
-FILE__GETATTR = _selinux.FILE__GETATTR
-FILE__SETATTR = _selinux.FILE__SETATTR
-FILE__LOCK = _selinux.FILE__LOCK
-FILE__RELABELFROM = _selinux.FILE__RELABELFROM
-FILE__RELABELTO = _selinux.FILE__RELABELTO
-FILE__APPEND = _selinux.FILE__APPEND
-FILE__UNLINK = _selinux.FILE__UNLINK
-FILE__LINK = _selinux.FILE__LINK
-FILE__RENAME = _selinux.FILE__RENAME
-FILE__EXECUTE = _selinux.FILE__EXECUTE
-FILE__SWAPON = _selinux.FILE__SWAPON
-FILE__QUOTAON = _selinux.FILE__QUOTAON
-FILE__MOUNTON = _selinux.FILE__MOUNTON
-FILE__EXECUTE_NO_TRANS = _selinux.FILE__EXECUTE_NO_TRANS
-FILE__ENTRYPOINT = _selinux.FILE__ENTRYPOINT
-FILE__EXECMOD = _selinux.FILE__EXECMOD
-FILE__OPEN = _selinux.FILE__OPEN
-LNK_FILE__IOCTL = _selinux.LNK_FILE__IOCTL
-LNK_FILE__READ = _selinux.LNK_FILE__READ
-LNK_FILE__WRITE = _selinux.LNK_FILE__WRITE
-LNK_FILE__CREATE = _selinux.LNK_FILE__CREATE
-LNK_FILE__GETATTR = _selinux.LNK_FILE__GETATTR
-LNK_FILE__SETATTR = _selinux.LNK_FILE__SETATTR
-LNK_FILE__LOCK = _selinux.LNK_FILE__LOCK
-LNK_FILE__RELABELFROM = _selinux.LNK_FILE__RELABELFROM
-LNK_FILE__RELABELTO = _selinux.LNK_FILE__RELABELTO
-LNK_FILE__APPEND = _selinux.LNK_FILE__APPEND
-LNK_FILE__UNLINK = _selinux.LNK_FILE__UNLINK
-LNK_FILE__LINK = _selinux.LNK_FILE__LINK
-LNK_FILE__RENAME = _selinux.LNK_FILE__RENAME
-LNK_FILE__EXECUTE = _selinux.LNK_FILE__EXECUTE
-LNK_FILE__SWAPON = _selinux.LNK_FILE__SWAPON
-LNK_FILE__QUOTAON = _selinux.LNK_FILE__QUOTAON
-LNK_FILE__MOUNTON = _selinux.LNK_FILE__MOUNTON
-CHR_FILE__IOCTL = _selinux.CHR_FILE__IOCTL
-CHR_FILE__READ = _selinux.CHR_FILE__READ
-CHR_FILE__WRITE = _selinux.CHR_FILE__WRITE
-CHR_FILE__CREATE = _selinux.CHR_FILE__CREATE
-CHR_FILE__GETATTR = _selinux.CHR_FILE__GETATTR
-CHR_FILE__SETATTR = _selinux.CHR_FILE__SETATTR
-CHR_FILE__LOCK = _selinux.CHR_FILE__LOCK
-CHR_FILE__RELABELFROM = _selinux.CHR_FILE__RELABELFROM
-CHR_FILE__RELABELTO = _selinux.CHR_FILE__RELABELTO
-CHR_FILE__APPEND = _selinux.CHR_FILE__APPEND
-CHR_FILE__UNLINK = _selinux.CHR_FILE__UNLINK
-CHR_FILE__LINK = _selinux.CHR_FILE__LINK
-CHR_FILE__RENAME = _selinux.CHR_FILE__RENAME
-CHR_FILE__EXECUTE = _selinux.CHR_FILE__EXECUTE
-CHR_FILE__SWAPON = _selinux.CHR_FILE__SWAPON
-CHR_FILE__QUOTAON = _selinux.CHR_FILE__QUOTAON
-CHR_FILE__MOUNTON = _selinux.CHR_FILE__MOUNTON
-CHR_FILE__EXECUTE_NO_TRANS = _selinux.CHR_FILE__EXECUTE_NO_TRANS
-CHR_FILE__ENTRYPOINT = _selinux.CHR_FILE__ENTRYPOINT
-CHR_FILE__EXECMOD = _selinux.CHR_FILE__EXECMOD
-CHR_FILE__OPEN = _selinux.CHR_FILE__OPEN
-BLK_FILE__IOCTL = _selinux.BLK_FILE__IOCTL
-BLK_FILE__READ = _selinux.BLK_FILE__READ
-BLK_FILE__WRITE = _selinux.BLK_FILE__WRITE
-BLK_FILE__CREATE = _selinux.BLK_FILE__CREATE
-BLK_FILE__GETATTR = _selinux.BLK_FILE__GETATTR
-BLK_FILE__SETATTR = _selinux.BLK_FILE__SETATTR
-BLK_FILE__LOCK = _selinux.BLK_FILE__LOCK
-BLK_FILE__RELABELFROM = _selinux.BLK_FILE__RELABELFROM
-BLK_FILE__RELABELTO = _selinux.BLK_FILE__RELABELTO
-BLK_FILE__APPEND = _selinux.BLK_FILE__APPEND
-BLK_FILE__UNLINK = _selinux.BLK_FILE__UNLINK
-BLK_FILE__LINK = _selinux.BLK_FILE__LINK
-BLK_FILE__RENAME = _selinux.BLK_FILE__RENAME
-BLK_FILE__EXECUTE = _selinux.BLK_FILE__EXECUTE
-BLK_FILE__SWAPON = _selinux.BLK_FILE__SWAPON
-BLK_FILE__QUOTAON = _selinux.BLK_FILE__QUOTAON
-BLK_FILE__MOUNTON = _selinux.BLK_FILE__MOUNTON
-BLK_FILE__OPEN = _selinux.BLK_FILE__OPEN
-SOCK_FILE__IOCTL = _selinux.SOCK_FILE__IOCTL
-SOCK_FILE__READ = _selinux.SOCK_FILE__READ
-SOCK_FILE__WRITE = _selinux.SOCK_FILE__WRITE
-SOCK_FILE__CREATE = _selinux.SOCK_FILE__CREATE
-SOCK_FILE__GETATTR = _selinux.SOCK_FILE__GETATTR
-SOCK_FILE__SETATTR = _selinux.SOCK_FILE__SETATTR
-SOCK_FILE__LOCK = _selinux.SOCK_FILE__LOCK
-SOCK_FILE__RELABELFROM = _selinux.SOCK_FILE__RELABELFROM
-SOCK_FILE__RELABELTO = _selinux.SOCK_FILE__RELABELTO
-SOCK_FILE__APPEND = _selinux.SOCK_FILE__APPEND
-SOCK_FILE__UNLINK = _selinux.SOCK_FILE__UNLINK
-SOCK_FILE__LINK = _selinux.SOCK_FILE__LINK
-SOCK_FILE__RENAME = _selinux.SOCK_FILE__RENAME
-SOCK_FILE__EXECUTE = _selinux.SOCK_FILE__EXECUTE
-SOCK_FILE__SWAPON = _selinux.SOCK_FILE__SWAPON
-SOCK_FILE__QUOTAON = _selinux.SOCK_FILE__QUOTAON
-SOCK_FILE__MOUNTON = _selinux.SOCK_FILE__MOUNTON
-FIFO_FILE__IOCTL = _selinux.FIFO_FILE__IOCTL
-FIFO_FILE__READ = _selinux.FIFO_FILE__READ
-FIFO_FILE__WRITE = _selinux.FIFO_FILE__WRITE
-FIFO_FILE__CREATE = _selinux.FIFO_FILE__CREATE
-FIFO_FILE__GETATTR = _selinux.FIFO_FILE__GETATTR
-FIFO_FILE__SETATTR = _selinux.FIFO_FILE__SETATTR
-FIFO_FILE__LOCK = _selinux.FIFO_FILE__LOCK
-FIFO_FILE__RELABELFROM = _selinux.FIFO_FILE__RELABELFROM
-FIFO_FILE__RELABELTO = _selinux.FIFO_FILE__RELABELTO
-FIFO_FILE__APPEND = _selinux.FIFO_FILE__APPEND
-FIFO_FILE__UNLINK = _selinux.FIFO_FILE__UNLINK
-FIFO_FILE__LINK = _selinux.FIFO_FILE__LINK
-FIFO_FILE__RENAME = _selinux.FIFO_FILE__RENAME
-FIFO_FILE__EXECUTE = _selinux.FIFO_FILE__EXECUTE
-FIFO_FILE__SWAPON = _selinux.FIFO_FILE__SWAPON
-FIFO_FILE__QUOTAON = _selinux.FIFO_FILE__QUOTAON
-FIFO_FILE__MOUNTON = _selinux.FIFO_FILE__MOUNTON
-FIFO_FILE__OPEN = _selinux.FIFO_FILE__OPEN
-FD__USE = _selinux.FD__USE
-SOCKET__IOCTL = _selinux.SOCKET__IOCTL
-SOCKET__READ = _selinux.SOCKET__READ
-SOCKET__WRITE = _selinux.SOCKET__WRITE
-SOCKET__CREATE = _selinux.SOCKET__CREATE
-SOCKET__GETATTR = _selinux.SOCKET__GETATTR
-SOCKET__SETATTR = _selinux.SOCKET__SETATTR
-SOCKET__LOCK = _selinux.SOCKET__LOCK
-SOCKET__RELABELFROM = _selinux.SOCKET__RELABELFROM
-SOCKET__RELABELTO = _selinux.SOCKET__RELABELTO
-SOCKET__APPEND = _selinux.SOCKET__APPEND
-SOCKET__BIND = _selinux.SOCKET__BIND
-SOCKET__CONNECT = _selinux.SOCKET__CONNECT
-SOCKET__LISTEN = _selinux.SOCKET__LISTEN
-SOCKET__ACCEPT = _selinux.SOCKET__ACCEPT
-SOCKET__GETOPT = _selinux.SOCKET__GETOPT
-SOCKET__SETOPT = _selinux.SOCKET__SETOPT
-SOCKET__SHUTDOWN = _selinux.SOCKET__SHUTDOWN
-SOCKET__RECVFROM = _selinux.SOCKET__RECVFROM
-SOCKET__SENDTO = _selinux.SOCKET__SENDTO
-SOCKET__RECV_MSG = _selinux.SOCKET__RECV_MSG
-SOCKET__SEND_MSG = _selinux.SOCKET__SEND_MSG
-SOCKET__NAME_BIND = _selinux.SOCKET__NAME_BIND
-TCP_SOCKET__IOCTL = _selinux.TCP_SOCKET__IOCTL
-TCP_SOCKET__READ = _selinux.TCP_SOCKET__READ
-TCP_SOCKET__WRITE = _selinux.TCP_SOCKET__WRITE
-TCP_SOCKET__CREATE = _selinux.TCP_SOCKET__CREATE
-TCP_SOCKET__GETATTR = _selinux.TCP_SOCKET__GETATTR
-TCP_SOCKET__SETATTR = _selinux.TCP_SOCKET__SETATTR
-TCP_SOCKET__LOCK = _selinux.TCP_SOCKET__LOCK
-TCP_SOCKET__RELABELFROM = _selinux.TCP_SOCKET__RELABELFROM
-TCP_SOCKET__RELABELTO = _selinux.TCP_SOCKET__RELABELTO
-TCP_SOCKET__APPEND = _selinux.TCP_SOCKET__APPEND
-TCP_SOCKET__BIND = _selinux.TCP_SOCKET__BIND
-TCP_SOCKET__CONNECT = _selinux.TCP_SOCKET__CONNECT
-TCP_SOCKET__LISTEN = _selinux.TCP_SOCKET__LISTEN
-TCP_SOCKET__ACCEPT = _selinux.TCP_SOCKET__ACCEPT
-TCP_SOCKET__GETOPT = _selinux.TCP_SOCKET__GETOPT
-TCP_SOCKET__SETOPT = _selinux.TCP_SOCKET__SETOPT
-TCP_SOCKET__SHUTDOWN = _selinux.TCP_SOCKET__SHUTDOWN
-TCP_SOCKET__RECVFROM = _selinux.TCP_SOCKET__RECVFROM
-TCP_SOCKET__SENDTO = _selinux.TCP_SOCKET__SENDTO
-TCP_SOCKET__RECV_MSG = _selinux.TCP_SOCKET__RECV_MSG
-TCP_SOCKET__SEND_MSG = _selinux.TCP_SOCKET__SEND_MSG
-TCP_SOCKET__NAME_BIND = _selinux.TCP_SOCKET__NAME_BIND
-TCP_SOCKET__CONNECTTO = _selinux.TCP_SOCKET__CONNECTTO
-TCP_SOCKET__NEWCONN = _selinux.TCP_SOCKET__NEWCONN
-TCP_SOCKET__ACCEPTFROM = _selinux.TCP_SOCKET__ACCEPTFROM
-TCP_SOCKET__NODE_BIND = _selinux.TCP_SOCKET__NODE_BIND
-TCP_SOCKET__NAME_CONNECT = _selinux.TCP_SOCKET__NAME_CONNECT
-UDP_SOCKET__IOCTL = _selinux.UDP_SOCKET__IOCTL
-UDP_SOCKET__READ = _selinux.UDP_SOCKET__READ
-UDP_SOCKET__WRITE = _selinux.UDP_SOCKET__WRITE
-UDP_SOCKET__CREATE = _selinux.UDP_SOCKET__CREATE
-UDP_SOCKET__GETATTR = _selinux.UDP_SOCKET__GETATTR
-UDP_SOCKET__SETATTR = _selinux.UDP_SOCKET__SETATTR
-UDP_SOCKET__LOCK = _selinux.UDP_SOCKET__LOCK
-UDP_SOCKET__RELABELFROM = _selinux.UDP_SOCKET__RELABELFROM
-UDP_SOCKET__RELABELTO = _selinux.UDP_SOCKET__RELABELTO
-UDP_SOCKET__APPEND = _selinux.UDP_SOCKET__APPEND
-UDP_SOCKET__BIND = _selinux.UDP_SOCKET__BIND
-UDP_SOCKET__CONNECT = _selinux.UDP_SOCKET__CONNECT
-UDP_SOCKET__LISTEN = _selinux.UDP_SOCKET__LISTEN
-UDP_SOCKET__ACCEPT = _selinux.UDP_SOCKET__ACCEPT
-UDP_SOCKET__GETOPT = _selinux.UDP_SOCKET__GETOPT
-UDP_SOCKET__SETOPT = _selinux.UDP_SOCKET__SETOPT
-UDP_SOCKET__SHUTDOWN = _selinux.UDP_SOCKET__SHUTDOWN
-UDP_SOCKET__RECVFROM = _selinux.UDP_SOCKET__RECVFROM
-UDP_SOCKET__SENDTO = _selinux.UDP_SOCKET__SENDTO
-UDP_SOCKET__RECV_MSG = _selinux.UDP_SOCKET__RECV_MSG
-UDP_SOCKET__SEND_MSG = _selinux.UDP_SOCKET__SEND_MSG
-UDP_SOCKET__NAME_BIND = _selinux.UDP_SOCKET__NAME_BIND
-UDP_SOCKET__NODE_BIND = _selinux.UDP_SOCKET__NODE_BIND
-RAWIP_SOCKET__IOCTL = _selinux.RAWIP_SOCKET__IOCTL
-RAWIP_SOCKET__READ = _selinux.RAWIP_SOCKET__READ
-RAWIP_SOCKET__WRITE = _selinux.RAWIP_SOCKET__WRITE
-RAWIP_SOCKET__CREATE = _selinux.RAWIP_SOCKET__CREATE
-RAWIP_SOCKET__GETATTR = _selinux.RAWIP_SOCKET__GETATTR
-RAWIP_SOCKET__SETATTR = _selinux.RAWIP_SOCKET__SETATTR
-RAWIP_SOCKET__LOCK = _selinux.RAWIP_SOCKET__LOCK
-RAWIP_SOCKET__RELABELFROM = _selinux.RAWIP_SOCKET__RELABELFROM
-RAWIP_SOCKET__RELABELTO = _selinux.RAWIP_SOCKET__RELABELTO
-RAWIP_SOCKET__APPEND = _selinux.RAWIP_SOCKET__APPEND
-RAWIP_SOCKET__BIND = _selinux.RAWIP_SOCKET__BIND
-RAWIP_SOCKET__CONNECT = _selinux.RAWIP_SOCKET__CONNECT
-RAWIP_SOCKET__LISTEN = _selinux.RAWIP_SOCKET__LISTEN
-RAWIP_SOCKET__ACCEPT = _selinux.RAWIP_SOCKET__ACCEPT
-RAWIP_SOCKET__GETOPT = _selinux.RAWIP_SOCKET__GETOPT
-RAWIP_SOCKET__SETOPT = _selinux.RAWIP_SOCKET__SETOPT
-RAWIP_SOCKET__SHUTDOWN = _selinux.RAWIP_SOCKET__SHUTDOWN
-RAWIP_SOCKET__RECVFROM = _selinux.RAWIP_SOCKET__RECVFROM
-RAWIP_SOCKET__SENDTO = _selinux.RAWIP_SOCKET__SENDTO
-RAWIP_SOCKET__RECV_MSG = _selinux.RAWIP_SOCKET__RECV_MSG
-RAWIP_SOCKET__SEND_MSG = _selinux.RAWIP_SOCKET__SEND_MSG
-RAWIP_SOCKET__NAME_BIND = _selinux.RAWIP_SOCKET__NAME_BIND
-RAWIP_SOCKET__NODE_BIND = _selinux.RAWIP_SOCKET__NODE_BIND
-NODE__TCP_RECV = _selinux.NODE__TCP_RECV
-NODE__TCP_SEND = _selinux.NODE__TCP_SEND
-NODE__UDP_RECV = _selinux.NODE__UDP_RECV
-NODE__UDP_SEND = _selinux.NODE__UDP_SEND
-NODE__RAWIP_RECV = _selinux.NODE__RAWIP_RECV
-NODE__RAWIP_SEND = _selinux.NODE__RAWIP_SEND
-NODE__ENFORCE_DEST = _selinux.NODE__ENFORCE_DEST
-NODE__DCCP_RECV = _selinux.NODE__DCCP_RECV
-NODE__DCCP_SEND = _selinux.NODE__DCCP_SEND
-NODE__RECVFROM = _selinux.NODE__RECVFROM
-NODE__SENDTO = _selinux.NODE__SENDTO
-NETIF__TCP_RECV = _selinux.NETIF__TCP_RECV
-NETIF__TCP_SEND = _selinux.NETIF__TCP_SEND
-NETIF__UDP_RECV = _selinux.NETIF__UDP_RECV
-NETIF__UDP_SEND = _selinux.NETIF__UDP_SEND
-NETIF__RAWIP_RECV = _selinux.NETIF__RAWIP_RECV
-NETIF__RAWIP_SEND = _selinux.NETIF__RAWIP_SEND
-NETIF__DCCP_RECV = _selinux.NETIF__DCCP_RECV
-NETIF__DCCP_SEND = _selinux.NETIF__DCCP_SEND
-NETIF__INGRESS = _selinux.NETIF__INGRESS
-NETIF__EGRESS = _selinux.NETIF__EGRESS
-NETLINK_SOCKET__IOCTL = _selinux.NETLINK_SOCKET__IOCTL
-NETLINK_SOCKET__READ = _selinux.NETLINK_SOCKET__READ
-NETLINK_SOCKET__WRITE = _selinux.NETLINK_SOCKET__WRITE
-NETLINK_SOCKET__CREATE = _selinux.NETLINK_SOCKET__CREATE
-NETLINK_SOCKET__GETATTR = _selinux.NETLINK_SOCKET__GETATTR
-NETLINK_SOCKET__SETATTR = _selinux.NETLINK_SOCKET__SETATTR
-NETLINK_SOCKET__LOCK = _selinux.NETLINK_SOCKET__LOCK
-NETLINK_SOCKET__RELABELFROM = _selinux.NETLINK_SOCKET__RELABELFROM
-NETLINK_SOCKET__RELABELTO = _selinux.NETLINK_SOCKET__RELABELTO
-NETLINK_SOCKET__APPEND = _selinux.NETLINK_SOCKET__APPEND
-NETLINK_SOCKET__BIND = _selinux.NETLINK_SOCKET__BIND
-NETLINK_SOCKET__CONNECT = _selinux.NETLINK_SOCKET__CONNECT
-NETLINK_SOCKET__LISTEN = _selinux.NETLINK_SOCKET__LISTEN
-NETLINK_SOCKET__ACCEPT = _selinux.NETLINK_SOCKET__ACCEPT
-NETLINK_SOCKET__GETOPT = _selinux.NETLINK_SOCKET__GETOPT
-NETLINK_SOCKET__SETOPT = _selinux.NETLINK_SOCKET__SETOPT
-NETLINK_SOCKET__SHUTDOWN = _selinux.NETLINK_SOCKET__SHUTDOWN
-NETLINK_SOCKET__RECVFROM = _selinux.NETLINK_SOCKET__RECVFROM
-NETLINK_SOCKET__SENDTO = _selinux.NETLINK_SOCKET__SENDTO
-NETLINK_SOCKET__RECV_MSG = _selinux.NETLINK_SOCKET__RECV_MSG
-NETLINK_SOCKET__SEND_MSG = _selinux.NETLINK_SOCKET__SEND_MSG
-NETLINK_SOCKET__NAME_BIND = _selinux.NETLINK_SOCKET__NAME_BIND
-PACKET_SOCKET__IOCTL = _selinux.PACKET_SOCKET__IOCTL
-PACKET_SOCKET__READ = _selinux.PACKET_SOCKET__READ
-PACKET_SOCKET__WRITE = _selinux.PACKET_SOCKET__WRITE
-PACKET_SOCKET__CREATE = _selinux.PACKET_SOCKET__CREATE
-PACKET_SOCKET__GETATTR = _selinux.PACKET_SOCKET__GETATTR
-PACKET_SOCKET__SETATTR = _selinux.PACKET_SOCKET__SETATTR
-PACKET_SOCKET__LOCK = _selinux.PACKET_SOCKET__LOCK
-PACKET_SOCKET__RELABELFROM = _selinux.PACKET_SOCKET__RELABELFROM
-PACKET_SOCKET__RELABELTO = _selinux.PACKET_SOCKET__RELABELTO
-PACKET_SOCKET__APPEND = _selinux.PACKET_SOCKET__APPEND
-PACKET_SOCKET__BIND = _selinux.PACKET_SOCKET__BIND
-PACKET_SOCKET__CONNECT = _selinux.PACKET_SOCKET__CONNECT
-PACKET_SOCKET__LISTEN = _selinux.PACKET_SOCKET__LISTEN
-PACKET_SOCKET__ACCEPT = _selinux.PACKET_SOCKET__ACCEPT
-PACKET_SOCKET__GETOPT = _selinux.PACKET_SOCKET__GETOPT
-PACKET_SOCKET__SETOPT = _selinux.PACKET_SOCKET__SETOPT
-PACKET_SOCKET__SHUTDOWN = _selinux.PACKET_SOCKET__SHUTDOWN
-PACKET_SOCKET__RECVFROM = _selinux.PACKET_SOCKET__RECVFROM
-PACKET_SOCKET__SENDTO = _selinux.PACKET_SOCKET__SENDTO
-PACKET_SOCKET__RECV_MSG = _selinux.PACKET_SOCKET__RECV_MSG
-PACKET_SOCKET__SEND_MSG = _selinux.PACKET_SOCKET__SEND_MSG
-PACKET_SOCKET__NAME_BIND = _selinux.PACKET_SOCKET__NAME_BIND
-KEY_SOCKET__IOCTL = _selinux.KEY_SOCKET__IOCTL
-KEY_SOCKET__READ = _selinux.KEY_SOCKET__READ
-KEY_SOCKET__WRITE = _selinux.KEY_SOCKET__WRITE
-KEY_SOCKET__CREATE = _selinux.KEY_SOCKET__CREATE
-KEY_SOCKET__GETATTR = _selinux.KEY_SOCKET__GETATTR
-KEY_SOCKET__SETATTR = _selinux.KEY_SOCKET__SETATTR
-KEY_SOCKET__LOCK = _selinux.KEY_SOCKET__LOCK
-KEY_SOCKET__RELABELFROM = _selinux.KEY_SOCKET__RELABELFROM
-KEY_SOCKET__RELABELTO = _selinux.KEY_SOCKET__RELABELTO
-KEY_SOCKET__APPEND = _selinux.KEY_SOCKET__APPEND
-KEY_SOCKET__BIND = _selinux.KEY_SOCKET__BIND
-KEY_SOCKET__CONNECT = _selinux.KEY_SOCKET__CONNECT
-KEY_SOCKET__LISTEN = _selinux.KEY_SOCKET__LISTEN
-KEY_SOCKET__ACCEPT = _selinux.KEY_SOCKET__ACCEPT
-KEY_SOCKET__GETOPT = _selinux.KEY_SOCKET__GETOPT
-KEY_SOCKET__SETOPT = _selinux.KEY_SOCKET__SETOPT
-KEY_SOCKET__SHUTDOWN = _selinux.KEY_SOCKET__SHUTDOWN
-KEY_SOCKET__RECVFROM = _selinux.KEY_SOCKET__RECVFROM
-KEY_SOCKET__SENDTO = _selinux.KEY_SOCKET__SENDTO
-KEY_SOCKET__RECV_MSG = _selinux.KEY_SOCKET__RECV_MSG
-KEY_SOCKET__SEND_MSG = _selinux.KEY_SOCKET__SEND_MSG
-KEY_SOCKET__NAME_BIND = _selinux.KEY_SOCKET__NAME_BIND
-UNIX_STREAM_SOCKET__IOCTL = _selinux.UNIX_STREAM_SOCKET__IOCTL
-UNIX_STREAM_SOCKET__READ = _selinux.UNIX_STREAM_SOCKET__READ
-UNIX_STREAM_SOCKET__WRITE = _selinux.UNIX_STREAM_SOCKET__WRITE
-UNIX_STREAM_SOCKET__CREATE = _selinux.UNIX_STREAM_SOCKET__CREATE
-UNIX_STREAM_SOCKET__GETATTR = _selinux.UNIX_STREAM_SOCKET__GETATTR
-UNIX_STREAM_SOCKET__SETATTR = _selinux.UNIX_STREAM_SOCKET__SETATTR
-UNIX_STREAM_SOCKET__LOCK = _selinux.UNIX_STREAM_SOCKET__LOCK
-UNIX_STREAM_SOCKET__RELABELFROM = _selinux.UNIX_STREAM_SOCKET__RELABELFROM
-UNIX_STREAM_SOCKET__RELABELTO = _selinux.UNIX_STREAM_SOCKET__RELABELTO
-UNIX_STREAM_SOCKET__APPEND = _selinux.UNIX_STREAM_SOCKET__APPEND
-UNIX_STREAM_SOCKET__BIND = _selinux.UNIX_STREAM_SOCKET__BIND
-UNIX_STREAM_SOCKET__CONNECT = _selinux.UNIX_STREAM_SOCKET__CONNECT
-UNIX_STREAM_SOCKET__LISTEN = _selinux.UNIX_STREAM_SOCKET__LISTEN
-UNIX_STREAM_SOCKET__ACCEPT = _selinux.UNIX_STREAM_SOCKET__ACCEPT
-UNIX_STREAM_SOCKET__GETOPT = _selinux.UNIX_STREAM_SOCKET__GETOPT
-UNIX_STREAM_SOCKET__SETOPT = _selinux.UNIX_STREAM_SOCKET__SETOPT
-UNIX_STREAM_SOCKET__SHUTDOWN = _selinux.UNIX_STREAM_SOCKET__SHUTDOWN
-UNIX_STREAM_SOCKET__RECVFROM = _selinux.UNIX_STREAM_SOCKET__RECVFROM
-UNIX_STREAM_SOCKET__SENDTO = _selinux.UNIX_STREAM_SOCKET__SENDTO
-UNIX_STREAM_SOCKET__RECV_MSG = _selinux.UNIX_STREAM_SOCKET__RECV_MSG
-UNIX_STREAM_SOCKET__SEND_MSG = _selinux.UNIX_STREAM_SOCKET__SEND_MSG
-UNIX_STREAM_SOCKET__NAME_BIND = _selinux.UNIX_STREAM_SOCKET__NAME_BIND
-UNIX_STREAM_SOCKET__CONNECTTO = _selinux.UNIX_STREAM_SOCKET__CONNECTTO
-UNIX_STREAM_SOCKET__NEWCONN = _selinux.UNIX_STREAM_SOCKET__NEWCONN
-UNIX_STREAM_SOCKET__ACCEPTFROM = _selinux.UNIX_STREAM_SOCKET__ACCEPTFROM
-UNIX_DGRAM_SOCKET__IOCTL = _selinux.UNIX_DGRAM_SOCKET__IOCTL
-UNIX_DGRAM_SOCKET__READ = _selinux.UNIX_DGRAM_SOCKET__READ
-UNIX_DGRAM_SOCKET__WRITE = _selinux.UNIX_DGRAM_SOCKET__WRITE
-UNIX_DGRAM_SOCKET__CREATE = _selinux.UNIX_DGRAM_SOCKET__CREATE
-UNIX_DGRAM_SOCKET__GETATTR = _selinux.UNIX_DGRAM_SOCKET__GETATTR
-UNIX_DGRAM_SOCKET__SETATTR = _selinux.UNIX_DGRAM_SOCKET__SETATTR
-UNIX_DGRAM_SOCKET__LOCK = _selinux.UNIX_DGRAM_SOCKET__LOCK
-UNIX_DGRAM_SOCKET__RELABELFROM = _selinux.UNIX_DGRAM_SOCKET__RELABELFROM
-UNIX_DGRAM_SOCKET__RELABELTO = _selinux.UNIX_DGRAM_SOCKET__RELABELTO
-UNIX_DGRAM_SOCKET__APPEND = _selinux.UNIX_DGRAM_SOCKET__APPEND
-UNIX_DGRAM_SOCKET__BIND = _selinux.UNIX_DGRAM_SOCKET__BIND
-UNIX_DGRAM_SOCKET__CONNECT = _selinux.UNIX_DGRAM_SOCKET__CONNECT
-UNIX_DGRAM_SOCKET__LISTEN = _selinux.UNIX_DGRAM_SOCKET__LISTEN
-UNIX_DGRAM_SOCKET__ACCEPT = _selinux.UNIX_DGRAM_SOCKET__ACCEPT
-UNIX_DGRAM_SOCKET__GETOPT = _selinux.UNIX_DGRAM_SOCKET__GETOPT
-UNIX_DGRAM_SOCKET__SETOPT = _selinux.UNIX_DGRAM_SOCKET__SETOPT
-UNIX_DGRAM_SOCKET__SHUTDOWN = _selinux.UNIX_DGRAM_SOCKET__SHUTDOWN
-UNIX_DGRAM_SOCKET__RECVFROM = _selinux.UNIX_DGRAM_SOCKET__RECVFROM
-UNIX_DGRAM_SOCKET__SENDTO = _selinux.UNIX_DGRAM_SOCKET__SENDTO
-UNIX_DGRAM_SOCKET__RECV_MSG = _selinux.UNIX_DGRAM_SOCKET__RECV_MSG
-UNIX_DGRAM_SOCKET__SEND_MSG = _selinux.UNIX_DGRAM_SOCKET__SEND_MSG
-UNIX_DGRAM_SOCKET__NAME_BIND = _selinux.UNIX_DGRAM_SOCKET__NAME_BIND
-PROCESS__FORK = _selinux.PROCESS__FORK
-PROCESS__TRANSITION = _selinux.PROCESS__TRANSITION
-PROCESS__SIGCHLD = _selinux.PROCESS__SIGCHLD
-PROCESS__SIGKILL = _selinux.PROCESS__SIGKILL
-PROCESS__SIGSTOP = _selinux.PROCESS__SIGSTOP
-PROCESS__SIGNULL = _selinux.PROCESS__SIGNULL
-PROCESS__SIGNAL = _selinux.PROCESS__SIGNAL
-PROCESS__PTRACE = _selinux.PROCESS__PTRACE
-PROCESS__GETSCHED = _selinux.PROCESS__GETSCHED
-PROCESS__SETSCHED = _selinux.PROCESS__SETSCHED
-PROCESS__GETSESSION = _selinux.PROCESS__GETSESSION
-PROCESS__GETPGID = _selinux.PROCESS__GETPGID
-PROCESS__SETPGID = _selinux.PROCESS__SETPGID
-PROCESS__GETCAP = _selinux.PROCESS__GETCAP
-PROCESS__SETCAP = _selinux.PROCESS__SETCAP
-PROCESS__SHARE = _selinux.PROCESS__SHARE
-PROCESS__GETATTR = _selinux.PROCESS__GETATTR
-PROCESS__SETEXEC = _selinux.PROCESS__SETEXEC
-PROCESS__SETFSCREATE = _selinux.PROCESS__SETFSCREATE
-PROCESS__NOATSECURE = _selinux.PROCESS__NOATSECURE
-PROCESS__SIGINH = _selinux.PROCESS__SIGINH
-PROCESS__SETRLIMIT = _selinux.PROCESS__SETRLIMIT
-PROCESS__RLIMITINH = _selinux.PROCESS__RLIMITINH
-PROCESS__DYNTRANSITION = _selinux.PROCESS__DYNTRANSITION
-PROCESS__SETCURRENT = _selinux.PROCESS__SETCURRENT
-PROCESS__EXECMEM = _selinux.PROCESS__EXECMEM
-PROCESS__EXECSTACK = _selinux.PROCESS__EXECSTACK
-PROCESS__EXECHEAP = _selinux.PROCESS__EXECHEAP
-PROCESS__SETKEYCREATE = _selinux.PROCESS__SETKEYCREATE
-PROCESS__SETSOCKCREATE = _selinux.PROCESS__SETSOCKCREATE
-IPC__CREATE = _selinux.IPC__CREATE
-IPC__DESTROY = _selinux.IPC__DESTROY
-IPC__GETATTR = _selinux.IPC__GETATTR
-IPC__SETATTR = _selinux.IPC__SETATTR
-IPC__READ = _selinux.IPC__READ
-IPC__WRITE = _selinux.IPC__WRITE
-IPC__ASSOCIATE = _selinux.IPC__ASSOCIATE
-IPC__UNIX_READ = _selinux.IPC__UNIX_READ
-IPC__UNIX_WRITE = _selinux.IPC__UNIX_WRITE
-SEM__CREATE = _selinux.SEM__CREATE
-SEM__DESTROY = _selinux.SEM__DESTROY
-SEM__GETATTR = _selinux.SEM__GETATTR
-SEM__SETATTR = _selinux.SEM__SETATTR
-SEM__READ = _selinux.SEM__READ
-SEM__WRITE = _selinux.SEM__WRITE
-SEM__ASSOCIATE = _selinux.SEM__ASSOCIATE
-SEM__UNIX_READ = _selinux.SEM__UNIX_READ
-SEM__UNIX_WRITE = _selinux.SEM__UNIX_WRITE
-MSGQ__CREATE = _selinux.MSGQ__CREATE
-MSGQ__DESTROY = _selinux.MSGQ__DESTROY
-MSGQ__GETATTR = _selinux.MSGQ__GETATTR
-MSGQ__SETATTR = _selinux.MSGQ__SETATTR
-MSGQ__READ = _selinux.MSGQ__READ
-MSGQ__WRITE = _selinux.MSGQ__WRITE
-MSGQ__ASSOCIATE = _selinux.MSGQ__ASSOCIATE
-MSGQ__UNIX_READ = _selinux.MSGQ__UNIX_READ
-MSGQ__UNIX_WRITE = _selinux.MSGQ__UNIX_WRITE
-MSGQ__ENQUEUE = _selinux.MSGQ__ENQUEUE
-MSG__SEND = _selinux.MSG__SEND
-MSG__RECEIVE = _selinux.MSG__RECEIVE
-SHM__CREATE = _selinux.SHM__CREATE
-SHM__DESTROY = _selinux.SHM__DESTROY
-SHM__GETATTR = _selinux.SHM__GETATTR
-SHM__SETATTR = _selinux.SHM__SETATTR
-SHM__READ = _selinux.SHM__READ
-SHM__WRITE = _selinux.SHM__WRITE
-SHM__ASSOCIATE = _selinux.SHM__ASSOCIATE
-SHM__UNIX_READ = _selinux.SHM__UNIX_READ
-SHM__UNIX_WRITE = _selinux.SHM__UNIX_WRITE
-SHM__LOCK = _selinux.SHM__LOCK
-SECURITY__COMPUTE_AV = _selinux.SECURITY__COMPUTE_AV
-SECURITY__COMPUTE_CREATE = _selinux.SECURITY__COMPUTE_CREATE
-SECURITY__COMPUTE_MEMBER = _selinux.SECURITY__COMPUTE_MEMBER
-SECURITY__CHECK_CONTEXT = _selinux.SECURITY__CHECK_CONTEXT
-SECURITY__LOAD_POLICY = _selinux.SECURITY__LOAD_POLICY
-SECURITY__COMPUTE_RELABEL = _selinux.SECURITY__COMPUTE_RELABEL
-SECURITY__COMPUTE_USER = _selinux.SECURITY__COMPUTE_USER
-SECURITY__SETENFORCE = _selinux.SECURITY__SETENFORCE
-SECURITY__SETBOOL = _selinux.SECURITY__SETBOOL
-SECURITY__SETSECPARAM = _selinux.SECURITY__SETSECPARAM
-SECURITY__SETCHECKREQPROT = _selinux.SECURITY__SETCHECKREQPROT
-SYSTEM__IPC_INFO = _selinux.SYSTEM__IPC_INFO
-SYSTEM__SYSLOG_READ = _selinux.SYSTEM__SYSLOG_READ
-SYSTEM__SYSLOG_MOD = _selinux.SYSTEM__SYSLOG_MOD
-SYSTEM__SYSLOG_CONSOLE = _selinux.SYSTEM__SYSLOG_CONSOLE
-CAPABILITY__CHOWN = _selinux.CAPABILITY__CHOWN
-CAPABILITY__DAC_OVERRIDE = _selinux.CAPABILITY__DAC_OVERRIDE
-CAPABILITY__DAC_READ_SEARCH = _selinux.CAPABILITY__DAC_READ_SEARCH
-CAPABILITY__FOWNER = _selinux.CAPABILITY__FOWNER
-CAPABILITY__FSETID = _selinux.CAPABILITY__FSETID
-CAPABILITY__KILL = _selinux.CAPABILITY__KILL
-CAPABILITY__SETGID = _selinux.CAPABILITY__SETGID
-CAPABILITY__SETUID = _selinux.CAPABILITY__SETUID
-CAPABILITY__SETPCAP = _selinux.CAPABILITY__SETPCAP
-CAPABILITY__LINUX_IMMUTABLE = _selinux.CAPABILITY__LINUX_IMMUTABLE
-CAPABILITY__NET_BIND_SERVICE = _selinux.CAPABILITY__NET_BIND_SERVICE
-CAPABILITY__NET_BROADCAST = _selinux.CAPABILITY__NET_BROADCAST
-CAPABILITY__NET_ADMIN = _selinux.CAPABILITY__NET_ADMIN
-CAPABILITY__NET_RAW = _selinux.CAPABILITY__NET_RAW
-CAPABILITY__IPC_LOCK = _selinux.CAPABILITY__IPC_LOCK
-CAPABILITY__IPC_OWNER = _selinux.CAPABILITY__IPC_OWNER
-CAPABILITY__SYS_MODULE = _selinux.CAPABILITY__SYS_MODULE
-CAPABILITY__SYS_RAWIO = _selinux.CAPABILITY__SYS_RAWIO
-CAPABILITY__SYS_CHROOT = _selinux.CAPABILITY__SYS_CHROOT
-CAPABILITY__SYS_PTRACE = _selinux.CAPABILITY__SYS_PTRACE
-CAPABILITY__SYS_PACCT = _selinux.CAPABILITY__SYS_PACCT
-CAPABILITY__SYS_ADMIN = _selinux.CAPABILITY__SYS_ADMIN
-CAPABILITY__SYS_BOOT = _selinux.CAPABILITY__SYS_BOOT
-CAPABILITY__SYS_NICE = _selinux.CAPABILITY__SYS_NICE
-CAPABILITY__SYS_RESOURCE = _selinux.CAPABILITY__SYS_RESOURCE
-CAPABILITY__SYS_TIME = _selinux.CAPABILITY__SYS_TIME
-CAPABILITY__SYS_TTY_CONFIG = _selinux.CAPABILITY__SYS_TTY_CONFIG
-CAPABILITY__MKNOD = _selinux.CAPABILITY__MKNOD
-CAPABILITY__LEASE = _selinux.CAPABILITY__LEASE
-CAPABILITY__AUDIT_WRITE = _selinux.CAPABILITY__AUDIT_WRITE
-CAPABILITY__AUDIT_CONTROL = _selinux.CAPABILITY__AUDIT_CONTROL
-CAPABILITY__SETFCAP = _selinux.CAPABILITY__SETFCAP
-CAPABILITY2__MAC_OVERRIDE = _selinux.CAPABILITY2__MAC_OVERRIDE
-CAPABILITY2__MAC_ADMIN = _selinux.CAPABILITY2__MAC_ADMIN
-PASSWD__PASSWD = _selinux.PASSWD__PASSWD
-PASSWD__CHFN = _selinux.PASSWD__CHFN
-PASSWD__CHSH = _selinux.PASSWD__CHSH
-PASSWD__ROOTOK = _selinux.PASSWD__ROOTOK
-PASSWD__CRONTAB = _selinux.PASSWD__CRONTAB
-X_DRAWABLE__CREATE = _selinux.X_DRAWABLE__CREATE
-X_DRAWABLE__DESTROY = _selinux.X_DRAWABLE__DESTROY
-X_DRAWABLE__READ = _selinux.X_DRAWABLE__READ
-X_DRAWABLE__WRITE = _selinux.X_DRAWABLE__WRITE
-X_DRAWABLE__BLEND = _selinux.X_DRAWABLE__BLEND
-X_DRAWABLE__GETATTR = _selinux.X_DRAWABLE__GETATTR
-X_DRAWABLE__SETATTR = _selinux.X_DRAWABLE__SETATTR
-X_DRAWABLE__LIST_CHILD = _selinux.X_DRAWABLE__LIST_CHILD
-X_DRAWABLE__ADD_CHILD = _selinux.X_DRAWABLE__ADD_CHILD
-X_DRAWABLE__REMOVE_CHILD = _selinux.X_DRAWABLE__REMOVE_CHILD
-X_DRAWABLE__LIST_PROPERTY = _selinux.X_DRAWABLE__LIST_PROPERTY
-X_DRAWABLE__GET_PROPERTY = _selinux.X_DRAWABLE__GET_PROPERTY
-X_DRAWABLE__SET_PROPERTY = _selinux.X_DRAWABLE__SET_PROPERTY
-X_DRAWABLE__MANAGE = _selinux.X_DRAWABLE__MANAGE
-X_DRAWABLE__OVERRIDE = _selinux.X_DRAWABLE__OVERRIDE
-X_DRAWABLE__SHOW = _selinux.X_DRAWABLE__SHOW
-X_DRAWABLE__HIDE = _selinux.X_DRAWABLE__HIDE
-X_DRAWABLE__SEND = _selinux.X_DRAWABLE__SEND
-X_DRAWABLE__RECEIVE = _selinux.X_DRAWABLE__RECEIVE
-X_SCREEN__GETATTR = _selinux.X_SCREEN__GETATTR
-X_SCREEN__SETATTR = _selinux.X_SCREEN__SETATTR
-X_SCREEN__HIDE_CURSOR = _selinux.X_SCREEN__HIDE_CURSOR
-X_SCREEN__SHOW_CURSOR = _selinux.X_SCREEN__SHOW_CURSOR
-X_SCREEN__SAVER_GETATTR = _selinux.X_SCREEN__SAVER_GETATTR
-X_SCREEN__SAVER_SETATTR = _selinux.X_SCREEN__SAVER_SETATTR
-X_SCREEN__SAVER_HIDE = _selinux.X_SCREEN__SAVER_HIDE
-X_SCREEN__SAVER_SHOW = _selinux.X_SCREEN__SAVER_SHOW
-X_GC__CREATE = _selinux.X_GC__CREATE
-X_GC__DESTROY = _selinux.X_GC__DESTROY
-X_GC__GETATTR = _selinux.X_GC__GETATTR
-X_GC__SETATTR = _selinux.X_GC__SETATTR
-X_GC__USE = _selinux.X_GC__USE
-X_FONT__CREATE = _selinux.X_FONT__CREATE
-X_FONT__DESTROY = _selinux.X_FONT__DESTROY
-X_FONT__GETATTR = _selinux.X_FONT__GETATTR
-X_FONT__ADD_GLYPH = _selinux.X_FONT__ADD_GLYPH
-X_FONT__REMOVE_GLYPH = _selinux.X_FONT__REMOVE_GLYPH
-X_FONT__USE = _selinux.X_FONT__USE
-X_COLORMAP__CREATE = _selinux.X_COLORMAP__CREATE
-X_COLORMAP__DESTROY = _selinux.X_COLORMAP__DESTROY
-X_COLORMAP__READ = _selinux.X_COLORMAP__READ
-X_COLORMAP__WRITE = _selinux.X_COLORMAP__WRITE
-X_COLORMAP__GETATTR = _selinux.X_COLORMAP__GETATTR
-X_COLORMAP__ADD_COLOR = _selinux.X_COLORMAP__ADD_COLOR
-X_COLORMAP__REMOVE_COLOR = _selinux.X_COLORMAP__REMOVE_COLOR
-X_COLORMAP__INSTALL = _selinux.X_COLORMAP__INSTALL
-X_COLORMAP__UNINSTALL = _selinux.X_COLORMAP__UNINSTALL
-X_COLORMAP__USE = _selinux.X_COLORMAP__USE
-X_PROPERTY__CREATE = _selinux.X_PROPERTY__CREATE
-X_PROPERTY__DESTROY = _selinux.X_PROPERTY__DESTROY
-X_PROPERTY__READ = _selinux.X_PROPERTY__READ
-X_PROPERTY__WRITE = _selinux.X_PROPERTY__WRITE
-X_PROPERTY__APPEND = _selinux.X_PROPERTY__APPEND
-X_PROPERTY__GETATTR = _selinux.X_PROPERTY__GETATTR
-X_PROPERTY__SETATTR = _selinux.X_PROPERTY__SETATTR
-X_SELECTION__READ = _selinux.X_SELECTION__READ
-X_SELECTION__WRITE = _selinux.X_SELECTION__WRITE
-X_SELECTION__GETATTR = _selinux.X_SELECTION__GETATTR
-X_SELECTION__SETATTR = _selinux.X_SELECTION__SETATTR
-X_CURSOR__CREATE = _selinux.X_CURSOR__CREATE
-X_CURSOR__DESTROY = _selinux.X_CURSOR__DESTROY
-X_CURSOR__READ = _selinux.X_CURSOR__READ
-X_CURSOR__WRITE = _selinux.X_CURSOR__WRITE
-X_CURSOR__GETATTR = _selinux.X_CURSOR__GETATTR
-X_CURSOR__SETATTR = _selinux.X_CURSOR__SETATTR
-X_CURSOR__USE = _selinux.X_CURSOR__USE
-X_CLIENT__DESTROY = _selinux.X_CLIENT__DESTROY
-X_CLIENT__GETATTR = _selinux.X_CLIENT__GETATTR
-X_CLIENT__SETATTR = _selinux.X_CLIENT__SETATTR
-X_CLIENT__MANAGE = _selinux.X_CLIENT__MANAGE
-X_DEVICE__GETATTR = _selinux.X_DEVICE__GETATTR
-X_DEVICE__SETATTR = _selinux.X_DEVICE__SETATTR
-X_DEVICE__USE = _selinux.X_DEVICE__USE
-X_DEVICE__READ = _selinux.X_DEVICE__READ
-X_DEVICE__WRITE = _selinux.X_DEVICE__WRITE
-X_DEVICE__GETFOCUS = _selinux.X_DEVICE__GETFOCUS
-X_DEVICE__SETFOCUS = _selinux.X_DEVICE__SETFOCUS
-X_DEVICE__BELL = _selinux.X_DEVICE__BELL
-X_DEVICE__FORCE_CURSOR = _selinux.X_DEVICE__FORCE_CURSOR
-X_DEVICE__FREEZE = _selinux.X_DEVICE__FREEZE
-X_DEVICE__GRAB = _selinux.X_DEVICE__GRAB
-X_DEVICE__MANAGE = _selinux.X_DEVICE__MANAGE
-X_SERVER__GETATTR = _selinux.X_SERVER__GETATTR
-X_SERVER__SETATTR = _selinux.X_SERVER__SETATTR
-X_SERVER__RECORD = _selinux.X_SERVER__RECORD
-X_SERVER__DEBUG = _selinux.X_SERVER__DEBUG
-X_SERVER__GRAB = _selinux.X_SERVER__GRAB
-X_SERVER__MANAGE = _selinux.X_SERVER__MANAGE
-X_EXTENSION__QUERY = _selinux.X_EXTENSION__QUERY
-X_EXTENSION__USE = _selinux.X_EXTENSION__USE
-X_RESOURCE__READ = _selinux.X_RESOURCE__READ
-X_RESOURCE__WRITE = _selinux.X_RESOURCE__WRITE
-X_EVENT__SEND = _selinux.X_EVENT__SEND
-X_EVENT__RECEIVE = _selinux.X_EVENT__RECEIVE
-X_SYNTHETIC_EVENT__SEND = _selinux.X_SYNTHETIC_EVENT__SEND
-X_SYNTHETIC_EVENT__RECEIVE = _selinux.X_SYNTHETIC_EVENT__RECEIVE
-NETLINK_ROUTE_SOCKET__IOCTL = _selinux.NETLINK_ROUTE_SOCKET__IOCTL
-NETLINK_ROUTE_SOCKET__READ = _selinux.NETLINK_ROUTE_SOCKET__READ
-NETLINK_ROUTE_SOCKET__WRITE = _selinux.NETLINK_ROUTE_SOCKET__WRITE
-NETLINK_ROUTE_SOCKET__CREATE = _selinux.NETLINK_ROUTE_SOCKET__CREATE
-NETLINK_ROUTE_SOCKET__GETATTR = _selinux.NETLINK_ROUTE_SOCKET__GETATTR
-NETLINK_ROUTE_SOCKET__SETATTR = _selinux.NETLINK_ROUTE_SOCKET__SETATTR
-NETLINK_ROUTE_SOCKET__LOCK = _selinux.NETLINK_ROUTE_SOCKET__LOCK
-NETLINK_ROUTE_SOCKET__RELABELFROM = _selinux.NETLINK_ROUTE_SOCKET__RELABELFROM
-NETLINK_ROUTE_SOCKET__RELABELTO = _selinux.NETLINK_ROUTE_SOCKET__RELABELTO
-NETLINK_ROUTE_SOCKET__APPEND = _selinux.NETLINK_ROUTE_SOCKET__APPEND
-NETLINK_ROUTE_SOCKET__BIND = _selinux.NETLINK_ROUTE_SOCKET__BIND
-NETLINK_ROUTE_SOCKET__CONNECT = _selinux.NETLINK_ROUTE_SOCKET__CONNECT
-NETLINK_ROUTE_SOCKET__LISTEN = _selinux.NETLINK_ROUTE_SOCKET__LISTEN
-NETLINK_ROUTE_SOCKET__ACCEPT = _selinux.NETLINK_ROUTE_SOCKET__ACCEPT
-NETLINK_ROUTE_SOCKET__GETOPT = _selinux.NETLINK_ROUTE_SOCKET__GETOPT
-NETLINK_ROUTE_SOCKET__SETOPT = _selinux.NETLINK_ROUTE_SOCKET__SETOPT
-NETLINK_ROUTE_SOCKET__SHUTDOWN = _selinux.NETLINK_ROUTE_SOCKET__SHUTDOWN
-NETLINK_ROUTE_SOCKET__RECVFROM = _selinux.NETLINK_ROUTE_SOCKET__RECVFROM
-NETLINK_ROUTE_SOCKET__SENDTO = _selinux.NETLINK_ROUTE_SOCKET__SENDTO
-NETLINK_ROUTE_SOCKET__RECV_MSG = _selinux.NETLINK_ROUTE_SOCKET__RECV_MSG
-NETLINK_ROUTE_SOCKET__SEND_MSG = _selinux.NETLINK_ROUTE_SOCKET__SEND_MSG
-NETLINK_ROUTE_SOCKET__NAME_BIND = _selinux.NETLINK_ROUTE_SOCKET__NAME_BIND
-NETLINK_ROUTE_SOCKET__NLMSG_READ = _selinux.NETLINK_ROUTE_SOCKET__NLMSG_READ
-NETLINK_ROUTE_SOCKET__NLMSG_WRITE = _selinux.NETLINK_ROUTE_SOCKET__NLMSG_WRITE
-NETLINK_FIREWALL_SOCKET__IOCTL = _selinux.NETLINK_FIREWALL_SOCKET__IOCTL
-NETLINK_FIREWALL_SOCKET__READ = _selinux.NETLINK_FIREWALL_SOCKET__READ
-NETLINK_FIREWALL_SOCKET__WRITE = _selinux.NETLINK_FIREWALL_SOCKET__WRITE
-NETLINK_FIREWALL_SOCKET__CREATE = _selinux.NETLINK_FIREWALL_SOCKET__CREATE
-NETLINK_FIREWALL_SOCKET__GETATTR = _selinux.NETLINK_FIREWALL_SOCKET__GETATTR
-NETLINK_FIREWALL_SOCKET__SETATTR = _selinux.NETLINK_FIREWALL_SOCKET__SETATTR
-NETLINK_FIREWALL_SOCKET__LOCK = _selinux.NETLINK_FIREWALL_SOCKET__LOCK
-NETLINK_FIREWALL_SOCKET__RELABELFROM = _selinux.NETLINK_FIREWALL_SOCKET__RELABELFROM
-NETLINK_FIREWALL_SOCKET__RELABELTO = _selinux.NETLINK_FIREWALL_SOCKET__RELABELTO
-NETLINK_FIREWALL_SOCKET__APPEND = _selinux.NETLINK_FIREWALL_SOCKET__APPEND
-NETLINK_FIREWALL_SOCKET__BIND = _selinux.NETLINK_FIREWALL_SOCKET__BIND
-NETLINK_FIREWALL_SOCKET__CONNECT = _selinux.NETLINK_FIREWALL_SOCKET__CONNECT
-NETLINK_FIREWALL_SOCKET__LISTEN = _selinux.NETLINK_FIREWALL_SOCKET__LISTEN
-NETLINK_FIREWALL_SOCKET__ACCEPT = _selinux.NETLINK_FIREWALL_SOCKET__ACCEPT
-NETLINK_FIREWALL_SOCKET__GETOPT = _selinux.NETLINK_FIREWALL_SOCKET__GETOPT
-NETLINK_FIREWALL_SOCKET__SETOPT = _selinux.NETLINK_FIREWALL_SOCKET__SETOPT
-NETLINK_FIREWALL_SOCKET__SHUTDOWN = _selinux.NETLINK_FIREWALL_SOCKET__SHUTDOWN
-NETLINK_FIREWALL_SOCKET__RECVFROM = _selinux.NETLINK_FIREWALL_SOCKET__RECVFROM
-NETLINK_FIREWALL_SOCKET__SENDTO = _selinux.NETLINK_FIREWALL_SOCKET__SENDTO
-NETLINK_FIREWALL_SOCKET__RECV_MSG = _selinux.NETLINK_FIREWALL_SOCKET__RECV_MSG
-NETLINK_FIREWALL_SOCKET__SEND_MSG = _selinux.NETLINK_FIREWALL_SOCKET__SEND_MSG
-NETLINK_FIREWALL_SOCKET__NAME_BIND = _selinux.NETLINK_FIREWALL_SOCKET__NAME_BIND
-NETLINK_FIREWALL_SOCKET__NLMSG_READ = _selinux.NETLINK_FIREWALL_SOCKET__NLMSG_READ
-NETLINK_FIREWALL_SOCKET__NLMSG_WRITE = _selinux.NETLINK_FIREWALL_SOCKET__NLMSG_WRITE
-NETLINK_TCPDIAG_SOCKET__IOCTL = _selinux.NETLINK_TCPDIAG_SOCKET__IOCTL
-NETLINK_TCPDIAG_SOCKET__READ = _selinux.NETLINK_TCPDIAG_SOCKET__READ
-NETLINK_TCPDIAG_SOCKET__WRITE = _selinux.NETLINK_TCPDIAG_SOCKET__WRITE
-NETLINK_TCPDIAG_SOCKET__CREATE = _selinux.NETLINK_TCPDIAG_SOCKET__CREATE
-NETLINK_TCPDIAG_SOCKET__GETATTR = _selinux.NETLINK_TCPDIAG_SOCKET__GETATTR
-NETLINK_TCPDIAG_SOCKET__SETATTR = _selinux.NETLINK_TCPDIAG_SOCKET__SETATTR
-NETLINK_TCPDIAG_SOCKET__LOCK = _selinux.NETLINK_TCPDIAG_SOCKET__LOCK
-NETLINK_TCPDIAG_SOCKET__RELABELFROM = _selinux.NETLINK_TCPDIAG_SOCKET__RELABELFROM
-NETLINK_TCPDIAG_SOCKET__RELABELTO = _selinux.NETLINK_TCPDIAG_SOCKET__RELABELTO
-NETLINK_TCPDIAG_SOCKET__APPEND = _selinux.NETLINK_TCPDIAG_SOCKET__APPEND
-NETLINK_TCPDIAG_SOCKET__BIND = _selinux.NETLINK_TCPDIAG_SOCKET__BIND
-NETLINK_TCPDIAG_SOCKET__CONNECT = _selinux.NETLINK_TCPDIAG_SOCKET__CONNECT
-NETLINK_TCPDIAG_SOCKET__LISTEN = _selinux.NETLINK_TCPDIAG_SOCKET__LISTEN
-NETLINK_TCPDIAG_SOCKET__ACCEPT = _selinux.NETLINK_TCPDIAG_SOCKET__ACCEPT
-NETLINK_TCPDIAG_SOCKET__GETOPT = _selinux.NETLINK_TCPDIAG_SOCKET__GETOPT
-NETLINK_TCPDIAG_SOCKET__SETOPT = _selinux.NETLINK_TCPDIAG_SOCKET__SETOPT
-NETLINK_TCPDIAG_SOCKET__SHUTDOWN = _selinux.NETLINK_TCPDIAG_SOCKET__SHUTDOWN
-NETLINK_TCPDIAG_SOCKET__RECVFROM = _selinux.NETLINK_TCPDIAG_SOCKET__RECVFROM
-NETLINK_TCPDIAG_SOCKET__SENDTO = _selinux.NETLINK_TCPDIAG_SOCKET__SENDTO
-NETLINK_TCPDIAG_SOCKET__RECV_MSG = _selinux.NETLINK_TCPDIAG_SOCKET__RECV_MSG
-NETLINK_TCPDIAG_SOCKET__SEND_MSG = _selinux.NETLINK_TCPDIAG_SOCKET__SEND_MSG
-NETLINK_TCPDIAG_SOCKET__NAME_BIND = _selinux.NETLINK_TCPDIAG_SOCKET__NAME_BIND
-NETLINK_TCPDIAG_SOCKET__NLMSG_READ = _selinux.NETLINK_TCPDIAG_SOCKET__NLMSG_READ
-NETLINK_TCPDIAG_SOCKET__NLMSG_WRITE = _selinux.NETLINK_TCPDIAG_SOCKET__NLMSG_WRITE
-NETLINK_NFLOG_SOCKET__IOCTL = _selinux.NETLINK_NFLOG_SOCKET__IOCTL
-NETLINK_NFLOG_SOCKET__READ = _selinux.NETLINK_NFLOG_SOCKET__READ
-NETLINK_NFLOG_SOCKET__WRITE = _selinux.NETLINK_NFLOG_SOCKET__WRITE
-NETLINK_NFLOG_SOCKET__CREATE = _selinux.NETLINK_NFLOG_SOCKET__CREATE
-NETLINK_NFLOG_SOCKET__GETATTR = _selinux.NETLINK_NFLOG_SOCKET__GETATTR
-NETLINK_NFLOG_SOCKET__SETATTR = _selinux.NETLINK_NFLOG_SOCKET__SETATTR
-NETLINK_NFLOG_SOCKET__LOCK = _selinux.NETLINK_NFLOG_SOCKET__LOCK
-NETLINK_NFLOG_SOCKET__RELABELFROM = _selinux.NETLINK_NFLOG_SOCKET__RELABELFROM
-NETLINK_NFLOG_SOCKET__RELABELTO = _selinux.NETLINK_NFLOG_SOCKET__RELABELTO
-NETLINK_NFLOG_SOCKET__APPEND = _selinux.NETLINK_NFLOG_SOCKET__APPEND
-NETLINK_NFLOG_SOCKET__BIND = _selinux.NETLINK_NFLOG_SOCKET__BIND
-NETLINK_NFLOG_SOCKET__CONNECT = _selinux.NETLINK_NFLOG_SOCKET__CONNECT
-NETLINK_NFLOG_SOCKET__LISTEN = _selinux.NETLINK_NFLOG_SOCKET__LISTEN
-NETLINK_NFLOG_SOCKET__ACCEPT = _selinux.NETLINK_NFLOG_SOCKET__ACCEPT
-NETLINK_NFLOG_SOCKET__GETOPT = _selinux.NETLINK_NFLOG_SOCKET__GETOPT
-NETLINK_NFLOG_SOCKET__SETOPT = _selinux.NETLINK_NFLOG_SOCKET__SETOPT
-NETLINK_NFLOG_SOCKET__SHUTDOWN = _selinux.NETLINK_NFLOG_SOCKET__SHUTDOWN
-NETLINK_NFLOG_SOCKET__RECVFROM = _selinux.NETLINK_NFLOG_SOCKET__RECVFROM
-NETLINK_NFLOG_SOCKET__SENDTO = _selinux.NETLINK_NFLOG_SOCKET__SENDTO
-NETLINK_NFLOG_SOCKET__RECV_MSG = _selinux.NETLINK_NFLOG_SOCKET__RECV_MSG
-NETLINK_NFLOG_SOCKET__SEND_MSG = _selinux.NETLINK_NFLOG_SOCKET__SEND_MSG
-NETLINK_NFLOG_SOCKET__NAME_BIND = _selinux.NETLINK_NFLOG_SOCKET__NAME_BIND
-NETLINK_XFRM_SOCKET__IOCTL = _selinux.NETLINK_XFRM_SOCKET__IOCTL
-NETLINK_XFRM_SOCKET__READ = _selinux.NETLINK_XFRM_SOCKET__READ
-NETLINK_XFRM_SOCKET__WRITE = _selinux.NETLINK_XFRM_SOCKET__WRITE
-NETLINK_XFRM_SOCKET__CREATE = _selinux.NETLINK_XFRM_SOCKET__CREATE
-NETLINK_XFRM_SOCKET__GETATTR = _selinux.NETLINK_XFRM_SOCKET__GETATTR
-NETLINK_XFRM_SOCKET__SETATTR = _selinux.NETLINK_XFRM_SOCKET__SETATTR
-NETLINK_XFRM_SOCKET__LOCK = _selinux.NETLINK_XFRM_SOCKET__LOCK
-NETLINK_XFRM_SOCKET__RELABELFROM = _selinux.NETLINK_XFRM_SOCKET__RELABELFROM
-NETLINK_XFRM_SOCKET__RELABELTO = _selinux.NETLINK_XFRM_SOCKET__RELABELTO
-NETLINK_XFRM_SOCKET__APPEND = _selinux.NETLINK_XFRM_SOCKET__APPEND
-NETLINK_XFRM_SOCKET__BIND = _selinux.NETLINK_XFRM_SOCKET__BIND
-NETLINK_XFRM_SOCKET__CONNECT = _selinux.NETLINK_XFRM_SOCKET__CONNECT
-NETLINK_XFRM_SOCKET__LISTEN = _selinux.NETLINK_XFRM_SOCKET__LISTEN
-NETLINK_XFRM_SOCKET__ACCEPT = _selinux.NETLINK_XFRM_SOCKET__ACCEPT
-NETLINK_XFRM_SOCKET__GETOPT = _selinux.NETLINK_XFRM_SOCKET__GETOPT
-NETLINK_XFRM_SOCKET__SETOPT = _selinux.NETLINK_XFRM_SOCKET__SETOPT
-NETLINK_XFRM_SOCKET__SHUTDOWN = _selinux.NETLINK_XFRM_SOCKET__SHUTDOWN
-NETLINK_XFRM_SOCKET__RECVFROM = _selinux.NETLINK_XFRM_SOCKET__RECVFROM
-NETLINK_XFRM_SOCKET__SENDTO = _selinux.NETLINK_XFRM_SOCKET__SENDTO
-NETLINK_XFRM_SOCKET__RECV_MSG = _selinux.NETLINK_XFRM_SOCKET__RECV_MSG
-NETLINK_XFRM_SOCKET__SEND_MSG = _selinux.NETLINK_XFRM_SOCKET__SEND_MSG
-NETLINK_XFRM_SOCKET__NAME_BIND = _selinux.NETLINK_XFRM_SOCKET__NAME_BIND
-NETLINK_XFRM_SOCKET__NLMSG_READ = _selinux.NETLINK_XFRM_SOCKET__NLMSG_READ
-NETLINK_XFRM_SOCKET__NLMSG_WRITE = _selinux.NETLINK_XFRM_SOCKET__NLMSG_WRITE
-NETLINK_SELINUX_SOCKET__IOCTL = _selinux.NETLINK_SELINUX_SOCKET__IOCTL
-NETLINK_SELINUX_SOCKET__READ = _selinux.NETLINK_SELINUX_SOCKET__READ
-NETLINK_SELINUX_SOCKET__WRITE = _selinux.NETLINK_SELINUX_SOCKET__WRITE
-NETLINK_SELINUX_SOCKET__CREATE = _selinux.NETLINK_SELINUX_SOCKET__CREATE
-NETLINK_SELINUX_SOCKET__GETATTR = _selinux.NETLINK_SELINUX_SOCKET__GETATTR
-NETLINK_SELINUX_SOCKET__SETATTR = _selinux.NETLINK_SELINUX_SOCKET__SETATTR
-NETLINK_SELINUX_SOCKET__LOCK = _selinux.NETLINK_SELINUX_SOCKET__LOCK
-NETLINK_SELINUX_SOCKET__RELABELFROM = _selinux.NETLINK_SELINUX_SOCKET__RELABELFROM
-NETLINK_SELINUX_SOCKET__RELABELTO = _selinux.NETLINK_SELINUX_SOCKET__RELABELTO
-NETLINK_SELINUX_SOCKET__APPEND = _selinux.NETLINK_SELINUX_SOCKET__APPEND
-NETLINK_SELINUX_SOCKET__BIND = _selinux.NETLINK_SELINUX_SOCKET__BIND
-NETLINK_SELINUX_SOCKET__CONNECT = _selinux.NETLINK_SELINUX_SOCKET__CONNECT
-NETLINK_SELINUX_SOCKET__LISTEN = _selinux.NETLINK_SELINUX_SOCKET__LISTEN
-NETLINK_SELINUX_SOCKET__ACCEPT = _selinux.NETLINK_SELINUX_SOCKET__ACCEPT
-NETLINK_SELINUX_SOCKET__GETOPT = _selinux.NETLINK_SELINUX_SOCKET__GETOPT
-NETLINK_SELINUX_SOCKET__SETOPT = _selinux.NETLINK_SELINUX_SOCKET__SETOPT
-NETLINK_SELINUX_SOCKET__SHUTDOWN = _selinux.NETLINK_SELINUX_SOCKET__SHUTDOWN
-NETLINK_SELINUX_SOCKET__RECVFROM = _selinux.NETLINK_SELINUX_SOCKET__RECVFROM
-NETLINK_SELINUX_SOCKET__SENDTO = _selinux.NETLINK_SELINUX_SOCKET__SENDTO
-NETLINK_SELINUX_SOCKET__RECV_MSG = _selinux.NETLINK_SELINUX_SOCKET__RECV_MSG
-NETLINK_SELINUX_SOCKET__SEND_MSG = _selinux.NETLINK_SELINUX_SOCKET__SEND_MSG
-NETLINK_SELINUX_SOCKET__NAME_BIND = _selinux.NETLINK_SELINUX_SOCKET__NAME_BIND
-NETLINK_AUDIT_SOCKET__IOCTL = _selinux.NETLINK_AUDIT_SOCKET__IOCTL
-NETLINK_AUDIT_SOCKET__READ = _selinux.NETLINK_AUDIT_SOCKET__READ
-NETLINK_AUDIT_SOCKET__WRITE = _selinux.NETLINK_AUDIT_SOCKET__WRITE
-NETLINK_AUDIT_SOCKET__CREATE = _selinux.NETLINK_AUDIT_SOCKET__CREATE
-NETLINK_AUDIT_SOCKET__GETATTR = _selinux.NETLINK_AUDIT_SOCKET__GETATTR
-NETLINK_AUDIT_SOCKET__SETATTR = _selinux.NETLINK_AUDIT_SOCKET__SETATTR
-NETLINK_AUDIT_SOCKET__LOCK = _selinux.NETLINK_AUDIT_SOCKET__LOCK
-NETLINK_AUDIT_SOCKET__RELABELFROM = _selinux.NETLINK_AUDIT_SOCKET__RELABELFROM
-NETLINK_AUDIT_SOCKET__RELABELTO = _selinux.NETLINK_AUDIT_SOCKET__RELABELTO
-NETLINK_AUDIT_SOCKET__APPEND = _selinux.NETLINK_AUDIT_SOCKET__APPEND
-NETLINK_AUDIT_SOCKET__BIND = _selinux.NETLINK_AUDIT_SOCKET__BIND
-NETLINK_AUDIT_SOCKET__CONNECT = _selinux.NETLINK_AUDIT_SOCKET__CONNECT
-NETLINK_AUDIT_SOCKET__LISTEN = _selinux.NETLINK_AUDIT_SOCKET__LISTEN
-NETLINK_AUDIT_SOCKET__ACCEPT = _selinux.NETLINK_AUDIT_SOCKET__ACCEPT
-NETLINK_AUDIT_SOCKET__GETOPT = _selinux.NETLINK_AUDIT_SOCKET__GETOPT
-NETLINK_AUDIT_SOCKET__SETOPT = _selinux.NETLINK_AUDIT_SOCKET__SETOPT
-NETLINK_AUDIT_SOCKET__SHUTDOWN = _selinux.NETLINK_AUDIT_SOCKET__SHUTDOWN
-NETLINK_AUDIT_SOCKET__RECVFROM = _selinux.NETLINK_AUDIT_SOCKET__RECVFROM
-NETLINK_AUDIT_SOCKET__SENDTO = _selinux.NETLINK_AUDIT_SOCKET__SENDTO
-NETLINK_AUDIT_SOCKET__RECV_MSG = _selinux.NETLINK_AUDIT_SOCKET__RECV_MSG
-NETLINK_AUDIT_SOCKET__SEND_MSG = _selinux.NETLINK_AUDIT_SOCKET__SEND_MSG
-NETLINK_AUDIT_SOCKET__NAME_BIND = _selinux.NETLINK_AUDIT_SOCKET__NAME_BIND
-NETLINK_AUDIT_SOCKET__NLMSG_READ = _selinux.NETLINK_AUDIT_SOCKET__NLMSG_READ
-NETLINK_AUDIT_SOCKET__NLMSG_WRITE = _selinux.NETLINK_AUDIT_SOCKET__NLMSG_WRITE
-NETLINK_AUDIT_SOCKET__NLMSG_RELAY = _selinux.NETLINK_AUDIT_SOCKET__NLMSG_RELAY
-NETLINK_AUDIT_SOCKET__NLMSG_READPRIV = _selinux.NETLINK_AUDIT_SOCKET__NLMSG_READPRIV
-NETLINK_AUDIT_SOCKET__NLMSG_TTY_AUDIT = _selinux.NETLINK_AUDIT_SOCKET__NLMSG_TTY_AUDIT
-NETLINK_IP6FW_SOCKET__IOCTL = _selinux.NETLINK_IP6FW_SOCKET__IOCTL
-NETLINK_IP6FW_SOCKET__READ = _selinux.NETLINK_IP6FW_SOCKET__READ
-NETLINK_IP6FW_SOCKET__WRITE = _selinux.NETLINK_IP6FW_SOCKET__WRITE
-NETLINK_IP6FW_SOCKET__CREATE = _selinux.NETLINK_IP6FW_SOCKET__CREATE
-NETLINK_IP6FW_SOCKET__GETATTR = _selinux.NETLINK_IP6FW_SOCKET__GETATTR
-NETLINK_IP6FW_SOCKET__SETATTR = _selinux.NETLINK_IP6FW_SOCKET__SETATTR
-NETLINK_IP6FW_SOCKET__LOCK = _selinux.NETLINK_IP6FW_SOCKET__LOCK
-NETLINK_IP6FW_SOCKET__RELABELFROM = _selinux.NETLINK_IP6FW_SOCKET__RELABELFROM
-NETLINK_IP6FW_SOCKET__RELABELTO = _selinux.NETLINK_IP6FW_SOCKET__RELABELTO
-NETLINK_IP6FW_SOCKET__APPEND = _selinux.NETLINK_IP6FW_SOCKET__APPEND
-NETLINK_IP6FW_SOCKET__BIND = _selinux.NETLINK_IP6FW_SOCKET__BIND
-NETLINK_IP6FW_SOCKET__CONNECT = _selinux.NETLINK_IP6FW_SOCKET__CONNECT
-NETLINK_IP6FW_SOCKET__LISTEN = _selinux.NETLINK_IP6FW_SOCKET__LISTEN
-NETLINK_IP6FW_SOCKET__ACCEPT = _selinux.NETLINK_IP6FW_SOCKET__ACCEPT
-NETLINK_IP6FW_SOCKET__GETOPT = _selinux.NETLINK_IP6FW_SOCKET__GETOPT
-NETLINK_IP6FW_SOCKET__SETOPT = _selinux.NETLINK_IP6FW_SOCKET__SETOPT
-NETLINK_IP6FW_SOCKET__SHUTDOWN = _selinux.NETLINK_IP6FW_SOCKET__SHUTDOWN
-NETLINK_IP6FW_SOCKET__RECVFROM = _selinux.NETLINK_IP6FW_SOCKET__RECVFROM
-NETLINK_IP6FW_SOCKET__SENDTO = _selinux.NETLINK_IP6FW_SOCKET__SENDTO
-NETLINK_IP6FW_SOCKET__RECV_MSG = _selinux.NETLINK_IP6FW_SOCKET__RECV_MSG
-NETLINK_IP6FW_SOCKET__SEND_MSG = _selinux.NETLINK_IP6FW_SOCKET__SEND_MSG
-NETLINK_IP6FW_SOCKET__NAME_BIND = _selinux.NETLINK_IP6FW_SOCKET__NAME_BIND
-NETLINK_IP6FW_SOCKET__NLMSG_READ = _selinux.NETLINK_IP6FW_SOCKET__NLMSG_READ
-NETLINK_IP6FW_SOCKET__NLMSG_WRITE = _selinux.NETLINK_IP6FW_SOCKET__NLMSG_WRITE
-NETLINK_DNRT_SOCKET__IOCTL = _selinux.NETLINK_DNRT_SOCKET__IOCTL
-NETLINK_DNRT_SOCKET__READ = _selinux.NETLINK_DNRT_SOCKET__READ
-NETLINK_DNRT_SOCKET__WRITE = _selinux.NETLINK_DNRT_SOCKET__WRITE
-NETLINK_DNRT_SOCKET__CREATE = _selinux.NETLINK_DNRT_SOCKET__CREATE
-NETLINK_DNRT_SOCKET__GETATTR = _selinux.NETLINK_DNRT_SOCKET__GETATTR
-NETLINK_DNRT_SOCKET__SETATTR = _selinux.NETLINK_DNRT_SOCKET__SETATTR
-NETLINK_DNRT_SOCKET__LOCK = _selinux.NETLINK_DNRT_SOCKET__LOCK
-NETLINK_DNRT_SOCKET__RELABELFROM = _selinux.NETLINK_DNRT_SOCKET__RELABELFROM
-NETLINK_DNRT_SOCKET__RELABELTO = _selinux.NETLINK_DNRT_SOCKET__RELABELTO
-NETLINK_DNRT_SOCKET__APPEND = _selinux.NETLINK_DNRT_SOCKET__APPEND
-NETLINK_DNRT_SOCKET__BIND = _selinux.NETLINK_DNRT_SOCKET__BIND
-NETLINK_DNRT_SOCKET__CONNECT = _selinux.NETLINK_DNRT_SOCKET__CONNECT
-NETLINK_DNRT_SOCKET__LISTEN = _selinux.NETLINK_DNRT_SOCKET__LISTEN
-NETLINK_DNRT_SOCKET__ACCEPT = _selinux.NETLINK_DNRT_SOCKET__ACCEPT
-NETLINK_DNRT_SOCKET__GETOPT = _selinux.NETLINK_DNRT_SOCKET__GETOPT
-NETLINK_DNRT_SOCKET__SETOPT = _selinux.NETLINK_DNRT_SOCKET__SETOPT
-NETLINK_DNRT_SOCKET__SHUTDOWN = _selinux.NETLINK_DNRT_SOCKET__SHUTDOWN
-NETLINK_DNRT_SOCKET__RECVFROM = _selinux.NETLINK_DNRT_SOCKET__RECVFROM
-NETLINK_DNRT_SOCKET__SENDTO = _selinux.NETLINK_DNRT_SOCKET__SENDTO
-NETLINK_DNRT_SOCKET__RECV_MSG = _selinux.NETLINK_DNRT_SOCKET__RECV_MSG
-NETLINK_DNRT_SOCKET__SEND_MSG = _selinux.NETLINK_DNRT_SOCKET__SEND_MSG
-NETLINK_DNRT_SOCKET__NAME_BIND = _selinux.NETLINK_DNRT_SOCKET__NAME_BIND
-DBUS__ACQUIRE_SVC = _selinux.DBUS__ACQUIRE_SVC
-DBUS__SEND_MSG = _selinux.DBUS__SEND_MSG
-NSCD__GETPWD = _selinux.NSCD__GETPWD
-NSCD__GETGRP = _selinux.NSCD__GETGRP
-NSCD__GETHOST = _selinux.NSCD__GETHOST
-NSCD__GETSTAT = _selinux.NSCD__GETSTAT
-NSCD__ADMIN = _selinux.NSCD__ADMIN
-NSCD__SHMEMPWD = _selinux.NSCD__SHMEMPWD
-NSCD__SHMEMGRP = _selinux.NSCD__SHMEMGRP
-NSCD__SHMEMHOST = _selinux.NSCD__SHMEMHOST
-NSCD__GETSERV = _selinux.NSCD__GETSERV
-NSCD__SHMEMSERV = _selinux.NSCD__SHMEMSERV
-ASSOCIATION__SENDTO = _selinux.ASSOCIATION__SENDTO
-ASSOCIATION__RECVFROM = _selinux.ASSOCIATION__RECVFROM
-ASSOCIATION__SETCONTEXT = _selinux.ASSOCIATION__SETCONTEXT
-ASSOCIATION__POLMATCH = _selinux.ASSOCIATION__POLMATCH
-NETLINK_KOBJECT_UEVENT_SOCKET__IOCTL = _selinux.NETLINK_KOBJECT_UEVENT_SOCKET__IOCTL
-NETLINK_KOBJECT_UEVENT_SOCKET__READ = _selinux.NETLINK_KOBJECT_UEVENT_SOCKET__READ
-NETLINK_KOBJECT_UEVENT_SOCKET__WRITE = _selinux.NETLINK_KOBJECT_UEVENT_SOCKET__WRITE
-NETLINK_KOBJECT_UEVENT_SOCKET__CREATE = _selinux.NETLINK_KOBJECT_UEVENT_SOCKET__CREATE
-NETLINK_KOBJECT_UEVENT_SOCKET__GETATTR = _selinux.NETLINK_KOBJECT_UEVENT_SOCKET__GETATTR
-NETLINK_KOBJECT_UEVENT_SOCKET__SETATTR = _selinux.NETLINK_KOBJECT_UEVENT_SOCKET__SETATTR
-NETLINK_KOBJECT_UEVENT_SOCKET__LOCK = _selinux.NETLINK_KOBJECT_UEVENT_SOCKET__LOCK
-NETLINK_KOBJECT_UEVENT_SOCKET__RELABELFROM = _selinux.NETLINK_KOBJECT_UEVENT_SOCKET__RELABELFROM
-NETLINK_KOBJECT_UEVENT_SOCKET__RELABELTO = _selinux.NETLINK_KOBJECT_UEVENT_SOCKET__RELABELTO
-NETLINK_KOBJECT_UEVENT_SOCKET__APPEND = _selinux.NETLINK_KOBJECT_UEVENT_SOCKET__APPEND
-NETLINK_KOBJECT_UEVENT_SOCKET__BIND = _selinux.NETLINK_KOBJECT_UEVENT_SOCKET__BIND
-NETLINK_KOBJECT_UEVENT_SOCKET__CONNECT = _selinux.NETLINK_KOBJECT_UEVENT_SOCKET__CONNECT
-NETLINK_KOBJECT_UEVENT_SOCKET__LISTEN = _selinux.NETLINK_KOBJECT_UEVENT_SOCKET__LISTEN
-NETLINK_KOBJECT_UEVENT_SOCKET__ACCEPT = _selinux.NETLINK_KOBJECT_UEVENT_SOCKET__ACCEPT
-NETLINK_KOBJECT_UEVENT_SOCKET__GETOPT = _selinux.NETLINK_KOBJECT_UEVENT_SOCKET__GETOPT
-NETLINK_KOBJECT_UEVENT_SOCKET__SETOPT = _selinux.NETLINK_KOBJECT_UEVENT_SOCKET__SETOPT
-NETLINK_KOBJECT_UEVENT_SOCKET__SHUTDOWN = _selinux.NETLINK_KOBJECT_UEVENT_SOCKET__SHUTDOWN
-NETLINK_KOBJECT_UEVENT_SOCKET__RECVFROM = _selinux.NETLINK_KOBJECT_UEVENT_SOCKET__RECVFROM
-NETLINK_KOBJECT_UEVENT_SOCKET__SENDTO = _selinux.NETLINK_KOBJECT_UEVENT_SOCKET__SENDTO
-NETLINK_KOBJECT_UEVENT_SOCKET__RECV_MSG = _selinux.NETLINK_KOBJECT_UEVENT_SOCKET__RECV_MSG
-NETLINK_KOBJECT_UEVENT_SOCKET__SEND_MSG = _selinux.NETLINK_KOBJECT_UEVENT_SOCKET__SEND_MSG
-NETLINK_KOBJECT_UEVENT_SOCKET__NAME_BIND = _selinux.NETLINK_KOBJECT_UEVENT_SOCKET__NAME_BIND
-APPLETALK_SOCKET__IOCTL = _selinux.APPLETALK_SOCKET__IOCTL
-APPLETALK_SOCKET__READ = _selinux.APPLETALK_SOCKET__READ
-APPLETALK_SOCKET__WRITE = _selinux.APPLETALK_SOCKET__WRITE
-APPLETALK_SOCKET__CREATE = _selinux.APPLETALK_SOCKET__CREATE
-APPLETALK_SOCKET__GETATTR = _selinux.APPLETALK_SOCKET__GETATTR
-APPLETALK_SOCKET__SETATTR = _selinux.APPLETALK_SOCKET__SETATTR
-APPLETALK_SOCKET__LOCK = _selinux.APPLETALK_SOCKET__LOCK
-APPLETALK_SOCKET__RELABELFROM = _selinux.APPLETALK_SOCKET__RELABELFROM
-APPLETALK_SOCKET__RELABELTO = _selinux.APPLETALK_SOCKET__RELABELTO
-APPLETALK_SOCKET__APPEND = _selinux.APPLETALK_SOCKET__APPEND
-APPLETALK_SOCKET__BIND = _selinux.APPLETALK_SOCKET__BIND
-APPLETALK_SOCKET__CONNECT = _selinux.APPLETALK_SOCKET__CONNECT
-APPLETALK_SOCKET__LISTEN = _selinux.APPLETALK_SOCKET__LISTEN
-APPLETALK_SOCKET__ACCEPT = _selinux.APPLETALK_SOCKET__ACCEPT
-APPLETALK_SOCKET__GETOPT = _selinux.APPLETALK_SOCKET__GETOPT
-APPLETALK_SOCKET__SETOPT = _selinux.APPLETALK_SOCKET__SETOPT
-APPLETALK_SOCKET__SHUTDOWN = _selinux.APPLETALK_SOCKET__SHUTDOWN
-APPLETALK_SOCKET__RECVFROM = _selinux.APPLETALK_SOCKET__RECVFROM
-APPLETALK_SOCKET__SENDTO = _selinux.APPLETALK_SOCKET__SENDTO
-APPLETALK_SOCKET__RECV_MSG = _selinux.APPLETALK_SOCKET__RECV_MSG
-APPLETALK_SOCKET__SEND_MSG = _selinux.APPLETALK_SOCKET__SEND_MSG
-APPLETALK_SOCKET__NAME_BIND = _selinux.APPLETALK_SOCKET__NAME_BIND
-PACKET__SEND = _selinux.PACKET__SEND
-PACKET__RECV = _selinux.PACKET__RECV
-PACKET__RELABELTO = _selinux.PACKET__RELABELTO
-PACKET__FLOW_IN = _selinux.PACKET__FLOW_IN
-PACKET__FLOW_OUT = _selinux.PACKET__FLOW_OUT
-PACKET__FORWARD_IN = _selinux.PACKET__FORWARD_IN
-PACKET__FORWARD_OUT = _selinux.PACKET__FORWARD_OUT
-KEY__VIEW = _selinux.KEY__VIEW
-KEY__READ = _selinux.KEY__READ
-KEY__WRITE = _selinux.KEY__WRITE
-KEY__SEARCH = _selinux.KEY__SEARCH
-KEY__LINK = _selinux.KEY__LINK
-KEY__SETATTR = _selinux.KEY__SETATTR
-KEY__CREATE = _selinux.KEY__CREATE
-CONTEXT__TRANSLATE = _selinux.CONTEXT__TRANSLATE
-CONTEXT__CONTAINS = _selinux.CONTEXT__CONTAINS
-DCCP_SOCKET__IOCTL = _selinux.DCCP_SOCKET__IOCTL
-DCCP_SOCKET__READ = _selinux.DCCP_SOCKET__READ
-DCCP_SOCKET__WRITE = _selinux.DCCP_SOCKET__WRITE
-DCCP_SOCKET__CREATE = _selinux.DCCP_SOCKET__CREATE
-DCCP_SOCKET__GETATTR = _selinux.DCCP_SOCKET__GETATTR
-DCCP_SOCKET__SETATTR = _selinux.DCCP_SOCKET__SETATTR
-DCCP_SOCKET__LOCK = _selinux.DCCP_SOCKET__LOCK
-DCCP_SOCKET__RELABELFROM = _selinux.DCCP_SOCKET__RELABELFROM
-DCCP_SOCKET__RELABELTO = _selinux.DCCP_SOCKET__RELABELTO
-DCCP_SOCKET__APPEND = _selinux.DCCP_SOCKET__APPEND
-DCCP_SOCKET__BIND = _selinux.DCCP_SOCKET__BIND
-DCCP_SOCKET__CONNECT = _selinux.DCCP_SOCKET__CONNECT
-DCCP_SOCKET__LISTEN = _selinux.DCCP_SOCKET__LISTEN
-DCCP_SOCKET__ACCEPT = _selinux.DCCP_SOCKET__ACCEPT
-DCCP_SOCKET__GETOPT = _selinux.DCCP_SOCKET__GETOPT
-DCCP_SOCKET__SETOPT = _selinux.DCCP_SOCKET__SETOPT
-DCCP_SOCKET__SHUTDOWN = _selinux.DCCP_SOCKET__SHUTDOWN
-DCCP_SOCKET__RECVFROM = _selinux.DCCP_SOCKET__RECVFROM
-DCCP_SOCKET__SENDTO = _selinux.DCCP_SOCKET__SENDTO
-DCCP_SOCKET__RECV_MSG = _selinux.DCCP_SOCKET__RECV_MSG
-DCCP_SOCKET__SEND_MSG = _selinux.DCCP_SOCKET__SEND_MSG
-DCCP_SOCKET__NAME_BIND = _selinux.DCCP_SOCKET__NAME_BIND
-DCCP_SOCKET__NODE_BIND = _selinux.DCCP_SOCKET__NODE_BIND
-DCCP_SOCKET__NAME_CONNECT = _selinux.DCCP_SOCKET__NAME_CONNECT
-MEMPROTECT__MMAP_ZERO = _selinux.MEMPROTECT__MMAP_ZERO
-DB_DATABASE__CREATE = _selinux.DB_DATABASE__CREATE
-DB_DATABASE__DROP = _selinux.DB_DATABASE__DROP
-DB_DATABASE__GETATTR = _selinux.DB_DATABASE__GETATTR
-DB_DATABASE__SETATTR = _selinux.DB_DATABASE__SETATTR
-DB_DATABASE__RELABELFROM = _selinux.DB_DATABASE__RELABELFROM
-DB_DATABASE__RELABELTO = _selinux.DB_DATABASE__RELABELTO
-DB_DATABASE__ACCESS = _selinux.DB_DATABASE__ACCESS
-DB_DATABASE__INSTALL_MODULE = _selinux.DB_DATABASE__INSTALL_MODULE
-DB_DATABASE__LOAD_MODULE = _selinux.DB_DATABASE__LOAD_MODULE
-DB_DATABASE__GET_PARAM = _selinux.DB_DATABASE__GET_PARAM
-DB_DATABASE__SET_PARAM = _selinux.DB_DATABASE__SET_PARAM
-DB_TABLE__CREATE = _selinux.DB_TABLE__CREATE
-DB_TABLE__DROP = _selinux.DB_TABLE__DROP
-DB_TABLE__GETATTR = _selinux.DB_TABLE__GETATTR
-DB_TABLE__SETATTR = _selinux.DB_TABLE__SETATTR
-DB_TABLE__RELABELFROM = _selinux.DB_TABLE__RELABELFROM
-DB_TABLE__RELABELTO = _selinux.DB_TABLE__RELABELTO
-DB_TABLE__USE = _selinux.DB_TABLE__USE
-DB_TABLE__SELECT = _selinux.DB_TABLE__SELECT
-DB_TABLE__UPDATE = _selinux.DB_TABLE__UPDATE
-DB_TABLE__INSERT = _selinux.DB_TABLE__INSERT
-DB_TABLE__DELETE = _selinux.DB_TABLE__DELETE
-DB_TABLE__LOCK = _selinux.DB_TABLE__LOCK
-DB_PROCEDURE__CREATE = _selinux.DB_PROCEDURE__CREATE
-DB_PROCEDURE__DROP = _selinux.DB_PROCEDURE__DROP
-DB_PROCEDURE__GETATTR = _selinux.DB_PROCEDURE__GETATTR
-DB_PROCEDURE__SETATTR = _selinux.DB_PROCEDURE__SETATTR
-DB_PROCEDURE__RELABELFROM = _selinux.DB_PROCEDURE__RELABELFROM
-DB_PROCEDURE__RELABELTO = _selinux.DB_PROCEDURE__RELABELTO
-DB_PROCEDURE__EXECUTE = _selinux.DB_PROCEDURE__EXECUTE
-DB_PROCEDURE__ENTRYPOINT = _selinux.DB_PROCEDURE__ENTRYPOINT
-DB_COLUMN__CREATE = _selinux.DB_COLUMN__CREATE
-DB_COLUMN__DROP = _selinux.DB_COLUMN__DROP
-DB_COLUMN__GETATTR = _selinux.DB_COLUMN__GETATTR
-DB_COLUMN__SETATTR = _selinux.DB_COLUMN__SETATTR
-DB_COLUMN__RELABELFROM = _selinux.DB_COLUMN__RELABELFROM
-DB_COLUMN__RELABELTO = _selinux.DB_COLUMN__RELABELTO
-DB_COLUMN__USE = _selinux.DB_COLUMN__USE
-DB_COLUMN__SELECT = _selinux.DB_COLUMN__SELECT
-DB_COLUMN__UPDATE = _selinux.DB_COLUMN__UPDATE
-DB_COLUMN__INSERT = _selinux.DB_COLUMN__INSERT
-DB_TUPLE__RELABELFROM = _selinux.DB_TUPLE__RELABELFROM
-DB_TUPLE__RELABELTO = _selinux.DB_TUPLE__RELABELTO
-DB_TUPLE__USE = _selinux.DB_TUPLE__USE
-DB_TUPLE__SELECT = _selinux.DB_TUPLE__SELECT
-DB_TUPLE__UPDATE = _selinux.DB_TUPLE__UPDATE
-DB_TUPLE__INSERT = _selinux.DB_TUPLE__INSERT
-DB_TUPLE__DELETE = _selinux.DB_TUPLE__DELETE
-DB_BLOB__CREATE = _selinux.DB_BLOB__CREATE
-DB_BLOB__DROP = _selinux.DB_BLOB__DROP
-DB_BLOB__GETATTR = _selinux.DB_BLOB__GETATTR
-DB_BLOB__SETATTR = _selinux.DB_BLOB__SETATTR
-DB_BLOB__RELABELFROM = _selinux.DB_BLOB__RELABELFROM
-DB_BLOB__RELABELTO = _selinux.DB_BLOB__RELABELTO
-DB_BLOB__READ = _selinux.DB_BLOB__READ
-DB_BLOB__WRITE = _selinux.DB_BLOB__WRITE
-DB_BLOB__IMPORT = _selinux.DB_BLOB__IMPORT
-DB_BLOB__EXPORT = _selinux.DB_BLOB__EXPORT
-PEER__RECV = _selinux.PEER__RECV
-X_APPLICATION_DATA__PASTE = _selinux.X_APPLICATION_DATA__PASTE
-X_APPLICATION_DATA__PASTE_AFTER_CONFIRM = _selinux.X_APPLICATION_DATA__PASTE_AFTER_CONFIRM
-X_APPLICATION_DATA__COPY = _selinux.X_APPLICATION_DATA__COPY
-class context_s_t(_object):
-    __swig_setmethods__ = {}
-    __setattr__ = lambda self, name, value: _swig_setattr(self, context_s_t, name, value)
-    __swig_getmethods__ = {}
-    __getattr__ = lambda self, name: _swig_getattr(self, context_s_t, name)
-    __repr__ = _swig_repr
-    __swig_setmethods__["ptr"] = _selinux.context_s_t_ptr_set
-    __swig_getmethods__["ptr"] = _selinux.context_s_t_ptr_get
-    if _newclass:ptr = _swig_property(_selinux.context_s_t_ptr_get, _selinux.context_s_t_ptr_set)
-    def __init__(self): 
-        this = _selinux.new_context_s_t()
-        try: self.this.append(this)
-        except: self.this = this
-    __swig_destroy__ = _selinux.delete_context_s_t
-    __del__ = lambda self : None;
-context_s_t_swigregister = _selinux.context_s_t_swigregister
-context_s_t_swigregister(context_s_t)
-
-
-def context_new(*args):
-  return _selinux.context_new(*args)
-context_new = _selinux.context_new
-
-def context_str(*args):
-  return _selinux.context_str(*args)
-context_str = _selinux.context_str
-
-def context_free(*args):
-  return _selinux.context_free(*args)
-context_free = _selinux.context_free
-
-def context_type_get(*args):
-  return _selinux.context_type_get(*args)
-context_type_get = _selinux.context_type_get
-
-def context_range_get(*args):
-  return _selinux.context_range_get(*args)
-context_range_get = _selinux.context_range_get
-
-def context_role_get(*args):
-  return _selinux.context_role_get(*args)
-context_role_get = _selinux.context_role_get
-
-def context_user_get(*args):
-  return _selinux.context_user_get(*args)
-context_user_get = _selinux.context_user_get
-
-def context_type_set(*args):
-  return _selinux.context_type_set(*args)
-context_type_set = _selinux.context_type_set
-
-def context_range_set(*args):
-  return _selinux.context_range_set(*args)
-context_range_set = _selinux.context_range_set
-
-def context_role_set(*args):
-  return _selinux.context_role_set(*args)
-context_role_set = _selinux.context_role_set
-
-def context_user_set(*args):
-  return _selinux.context_user_set(*args)
-context_user_set = _selinux.context_user_set
-SECCLASS_SECURITY = _selinux.SECCLASS_SECURITY
-SECCLASS_PROCESS = _selinux.SECCLASS_PROCESS
-SECCLASS_SYSTEM = _selinux.SECCLASS_SYSTEM
-SECCLASS_CAPABILITY = _selinux.SECCLASS_CAPABILITY
-SECCLASS_FILESYSTEM = _selinux.SECCLASS_FILESYSTEM
-SECCLASS_FILE = _selinux.SECCLASS_FILE
-SECCLASS_DIR = _selinux.SECCLASS_DIR
-SECCLASS_FD = _selinux.SECCLASS_FD
-SECCLASS_LNK_FILE = _selinux.SECCLASS_LNK_FILE
-SECCLASS_CHR_FILE = _selinux.SECCLASS_CHR_FILE
-SECCLASS_BLK_FILE = _selinux.SECCLASS_BLK_FILE
-SECCLASS_SOCK_FILE = _selinux.SECCLASS_SOCK_FILE
-SECCLASS_FIFO_FILE = _selinux.SECCLASS_FIFO_FILE
-SECCLASS_SOCKET = _selinux.SECCLASS_SOCKET
-SECCLASS_TCP_SOCKET = _selinux.SECCLASS_TCP_SOCKET
-SECCLASS_UDP_SOCKET = _selinux.SECCLASS_UDP_SOCKET
-SECCLASS_RAWIP_SOCKET = _selinux.SECCLASS_RAWIP_SOCKET
-SECCLASS_NODE = _selinux.SECCLASS_NODE
-SECCLASS_NETIF = _selinux.SECCLASS_NETIF
-SECCLASS_NETLINK_SOCKET = _selinux.SECCLASS_NETLINK_SOCKET
-SECCLASS_PACKET_SOCKET = _selinux.SECCLASS_PACKET_SOCKET
-SECCLASS_KEY_SOCKET = _selinux.SECCLASS_KEY_SOCKET
-SECCLASS_UNIX_STREAM_SOCKET = _selinux.SECCLASS_UNIX_STREAM_SOCKET
-SECCLASS_UNIX_DGRAM_SOCKET = _selinux.SECCLASS_UNIX_DGRAM_SOCKET
-SECCLASS_SEM = _selinux.SECCLASS_SEM
-SECCLASS_MSG = _selinux.SECCLASS_MSG
-SECCLASS_MSGQ = _selinux.SECCLASS_MSGQ
-SECCLASS_SHM = _selinux.SECCLASS_SHM
-SECCLASS_IPC = _selinux.SECCLASS_IPC
-SECCLASS_PASSWD = _selinux.SECCLASS_PASSWD
-SECCLASS_X_DRAWABLE = _selinux.SECCLASS_X_DRAWABLE
-SECCLASS_X_SCREEN = _selinux.SECCLASS_X_SCREEN
-SECCLASS_X_GC = _selinux.SECCLASS_X_GC
-SECCLASS_X_FONT = _selinux.SECCLASS_X_FONT
-SECCLASS_X_COLORMAP = _selinux.SECCLASS_X_COLORMAP
-SECCLASS_X_PROPERTY = _selinux.SECCLASS_X_PROPERTY
-SECCLASS_X_SELECTION = _selinux.SECCLASS_X_SELECTION
-SECCLASS_X_CURSOR = _selinux.SECCLASS_X_CURSOR
-SECCLASS_X_CLIENT = _selinux.SECCLASS_X_CLIENT
-SECCLASS_X_DEVICE = _selinux.SECCLASS_X_DEVICE
-SECCLASS_X_SERVER = _selinux.SECCLASS_X_SERVER
-SECCLASS_X_EXTENSION = _selinux.SECCLASS_X_EXTENSION
-SECCLASS_NETLINK_ROUTE_SOCKET = _selinux.SECCLASS_NETLINK_ROUTE_SOCKET
-SECCLASS_NETLINK_FIREWALL_SOCKET = _selinux.SECCLASS_NETLINK_FIREWALL_SOCKET
-SECCLASS_NETLINK_TCPDIAG_SOCKET = _selinux.SECCLASS_NETLINK_TCPDIAG_SOCKET
-SECCLASS_NETLINK_NFLOG_SOCKET = _selinux.SECCLASS_NETLINK_NFLOG_SOCKET
-SECCLASS_NETLINK_XFRM_SOCKET = _selinux.SECCLASS_NETLINK_XFRM_SOCKET
-SECCLASS_NETLINK_SELINUX_SOCKET = _selinux.SECCLASS_NETLINK_SELINUX_SOCKET
-SECCLASS_NETLINK_AUDIT_SOCKET = _selinux.SECCLASS_NETLINK_AUDIT_SOCKET
-SECCLASS_NETLINK_IP6FW_SOCKET = _selinux.SECCLASS_NETLINK_IP6FW_SOCKET
-SECCLASS_NETLINK_DNRT_SOCKET = _selinux.SECCLASS_NETLINK_DNRT_SOCKET
-SECCLASS_DBUS = _selinux.SECCLASS_DBUS
-SECCLASS_NSCD = _selinux.SECCLASS_NSCD
-SECCLASS_ASSOCIATION = _selinux.SECCLASS_ASSOCIATION
-SECCLASS_NETLINK_KOBJECT_UEVENT_SOCKET = _selinux.SECCLASS_NETLINK_KOBJECT_UEVENT_SOCKET
-SECCLASS_APPLETALK_SOCKET = _selinux.SECCLASS_APPLETALK_SOCKET
-SECCLASS_PACKET = _selinux.SECCLASS_PACKET
-SECCLASS_KEY = _selinux.SECCLASS_KEY
-SECCLASS_CONTEXT = _selinux.SECCLASS_CONTEXT
-SECCLASS_DCCP_SOCKET = _selinux.SECCLASS_DCCP_SOCKET
-SECCLASS_MEMPROTECT = _selinux.SECCLASS_MEMPROTECT
-SECCLASS_DB_DATABASE = _selinux.SECCLASS_DB_DATABASE
-SECCLASS_DB_TABLE = _selinux.SECCLASS_DB_TABLE
-SECCLASS_DB_PROCEDURE = _selinux.SECCLASS_DB_PROCEDURE
-SECCLASS_DB_COLUMN = _selinux.SECCLASS_DB_COLUMN
-SECCLASS_DB_TUPLE = _selinux.SECCLASS_DB_TUPLE
-SECCLASS_DB_BLOB = _selinux.SECCLASS_DB_BLOB
-SECCLASS_PEER = _selinux.SECCLASS_PEER
-SECCLASS_CAPABILITY2 = _selinux.SECCLASS_CAPABILITY2
-SECCLASS_X_RESOURCE = _selinux.SECCLASS_X_RESOURCE
-SECCLASS_X_EVENT = _selinux.SECCLASS_X_EVENT
-SECCLASS_X_SYNTHETIC_EVENT = _selinux.SECCLASS_X_SYNTHETIC_EVENT
-SECCLASS_X_APPLICATION_DATA = _selinux.SECCLASS_X_APPLICATION_DATA
-SECINITSID_KERNEL = _selinux.SECINITSID_KERNEL
-SECINITSID_SECURITY = _selinux.SECINITSID_SECURITY
-SECINITSID_UNLABELED = _selinux.SECINITSID_UNLABELED
-SECINITSID_FS = _selinux.SECINITSID_FS
-SECINITSID_FILE = _selinux.SECINITSID_FILE
-SECINITSID_FILE_LABELS = _selinux.SECINITSID_FILE_LABELS
-SECINITSID_INIT = _selinux.SECINITSID_INIT
-SECINITSID_ANY_SOCKET = _selinux.SECINITSID_ANY_SOCKET
-SECINITSID_PORT = _selinux.SECINITSID_PORT
-SECINITSID_NETIF = _selinux.SECINITSID_NETIF
-SECINITSID_NETMSG = _selinux.SECINITSID_NETMSG
-SECINITSID_NODE = _selinux.SECINITSID_NODE
-SECINITSID_IGMP_PACKET = _selinux.SECINITSID_IGMP_PACKET
-SECINITSID_ICMP_SOCKET = _selinux.SECINITSID_ICMP_SOCKET
-SECINITSID_TCP_SOCKET = _selinux.SECINITSID_TCP_SOCKET
-SECINITSID_SYSCTL_MODPROBE = _selinux.SECINITSID_SYSCTL_MODPROBE
-SECINITSID_SYSCTL = _selinux.SECINITSID_SYSCTL
-SECINITSID_SYSCTL_FS = _selinux.SECINITSID_SYSCTL_FS
-SECINITSID_SYSCTL_KERNEL = _selinux.SECINITSID_SYSCTL_KERNEL
-SECINITSID_SYSCTL_NET = _selinux.SECINITSID_SYSCTL_NET
-SECINITSID_SYSCTL_NET_UNIX = _selinux.SECINITSID_SYSCTL_NET_UNIX
-SECINITSID_SYSCTL_VM = _selinux.SECINITSID_SYSCTL_VM
-SECINITSID_SYSCTL_DEV = _selinux.SECINITSID_SYSCTL_DEV
-SECINITSID_KMOD = _selinux.SECINITSID_KMOD
-SECINITSID_POLICY = _selinux.SECINITSID_POLICY
-SECINITSID_SCMP_PACKET = _selinux.SECINITSID_SCMP_PACKET
-SECINITSID_DEVNULL = _selinux.SECINITSID_DEVNULL
-SECINITSID_NUM = _selinux.SECINITSID_NUM
-SELINUX_DEFAULTUSER = _selinux.SELINUX_DEFAULTUSER
-
-def get_ordered_context_list(*args):
-  return _selinux.get_ordered_context_list(*args)
-get_ordered_context_list = _selinux.get_ordered_context_list
-
-def get_ordered_context_list_with_level(*args):
-  return _selinux.get_ordered_context_list_with_level(*args)
-get_ordered_context_list_with_level = _selinux.get_ordered_context_list_with_level
-
-def get_default_context(*args):
-  return _selinux.get_default_context(*args)
-get_default_context = _selinux.get_default_context
-
-def get_default_context_with_level(*args):
-  return _selinux.get_default_context_with_level(*args)
-get_default_context_with_level = _selinux.get_default_context_with_level
-
-def get_default_context_with_role(*args):
-  return _selinux.get_default_context_with_role(*args)
-get_default_context_with_role = _selinux.get_default_context_with_role
-
-def get_default_context_with_rolelevel(*args):
-  return _selinux.get_default_context_with_rolelevel(*args)
-get_default_context_with_rolelevel = _selinux.get_default_context_with_rolelevel
-
-def query_user_context():
-  return _selinux.query_user_context()
-query_user_context = _selinux.query_user_context
-
-def manual_user_enter_context(*args):
-  return _selinux.manual_user_enter_context(*args)
-manual_user_enter_context = _selinux.manual_user_enter_context
-
-def selinux_default_type_path():
-  return _selinux.selinux_default_type_path()
-selinux_default_type_path = _selinux.selinux_default_type_path
-
-def get_default_type(*args):
-  return _selinux.get_default_type(*args)
-get_default_type = _selinux.get_default_type
-SELABEL_CTX_FILE = _selinux.SELABEL_CTX_FILE
-SELABEL_CTX_MEDIA = _selinux.SELABEL_CTX_MEDIA
-SELABEL_CTX_X = _selinux.SELABEL_CTX_X
-SELABEL_CTX_DB = _selinux.SELABEL_CTX_DB
-SELABEL_CTX_ANDROID_PROP = _selinux.SELABEL_CTX_ANDROID_PROP
-SELABEL_OPT_UNUSED = _selinux.SELABEL_OPT_UNUSED
-SELABEL_OPT_VALIDATE = _selinux.SELABEL_OPT_VALIDATE
-SELABEL_OPT_BASEONLY = _selinux.SELABEL_OPT_BASEONLY
-SELABEL_OPT_PATH = _selinux.SELABEL_OPT_PATH
-SELABEL_OPT_SUBSET = _selinux.SELABEL_OPT_SUBSET
-SELABEL_NOPT = _selinux.SELABEL_NOPT
-
-def selabel_open(*args):
-  return _selinux.selabel_open(*args)
-selabel_open = _selinux.selabel_open
-
-def selabel_close(*args):
-  return _selinux.selabel_close(*args)
-selabel_close = _selinux.selabel_close
-
-def selabel_lookup(*args):
-  return _selinux.selabel_lookup(*args)
-selabel_lookup = _selinux.selabel_lookup
-
-def selabel_lookup_raw(*args):
-  return _selinux.selabel_lookup_raw(*args)
-selabel_lookup_raw = _selinux.selabel_lookup_raw
-
-def selabel_partial_match(*args):
-  return _selinux.selabel_partial_match(*args)
-selabel_partial_match = _selinux.selabel_partial_match
-
-def selabel_lookup_best_match(*args):
-  return _selinux.selabel_lookup_best_match(*args)
-selabel_lookup_best_match = _selinux.selabel_lookup_best_match
-
-def selabel_lookup_best_match_raw(*args):
-  return _selinux.selabel_lookup_best_match_raw(*args)
-selabel_lookup_best_match_raw = _selinux.selabel_lookup_best_match_raw
-
-def selabel_stats(*args):
-  return _selinux.selabel_stats(*args)
-selabel_stats = _selinux.selabel_stats
-SELABEL_X_PROP = _selinux.SELABEL_X_PROP
-SELABEL_X_EXT = _selinux.SELABEL_X_EXT
-SELABEL_X_CLIENT = _selinux.SELABEL_X_CLIENT
-SELABEL_X_EVENT = _selinux.SELABEL_X_EVENT
-SELABEL_X_SELN = _selinux.SELABEL_X_SELN
-SELABEL_X_POLYPROP = _selinux.SELABEL_X_POLYPROP
-SELABEL_X_POLYSELN = _selinux.SELABEL_X_POLYSELN
-SELABEL_DB_DATABASE = _selinux.SELABEL_DB_DATABASE
-SELABEL_DB_SCHEMA = _selinux.SELABEL_DB_SCHEMA
-SELABEL_DB_TABLE = _selinux.SELABEL_DB_TABLE
-SELABEL_DB_COLUMN = _selinux.SELABEL_DB_COLUMN
-SELABEL_DB_SEQUENCE = _selinux.SELABEL_DB_SEQUENCE
-SELABEL_DB_VIEW = _selinux.SELABEL_DB_VIEW
-SELABEL_DB_PROCEDURE = _selinux.SELABEL_DB_PROCEDURE
-SELABEL_DB_BLOB = _selinux.SELABEL_DB_BLOB
-SELABEL_DB_TUPLE = _selinux.SELABEL_DB_TUPLE
-SELABEL_DB_LANGUAGE = _selinux.SELABEL_DB_LANGUAGE
-SELABEL_DB_EXCEPTION = _selinux.SELABEL_DB_EXCEPTION
-SELABEL_DB_DATATYPE = _selinux.SELABEL_DB_DATATYPE
-
-def is_selinux_enabled():
-  return _selinux.is_selinux_enabled()
-is_selinux_enabled = _selinux.is_selinux_enabled
-
-def is_selinux_mls_enabled():
-  return _selinux.is_selinux_mls_enabled()
-is_selinux_mls_enabled = _selinux.is_selinux_mls_enabled
-
-def getcon():
-  return _selinux.getcon()
-getcon = _selinux.getcon
-
-def getcon_raw():
-  return _selinux.getcon_raw()
-getcon_raw = _selinux.getcon_raw
-
-def setcon(*args):
-  return _selinux.setcon(*args)
-setcon = _selinux.setcon
-
-def setcon_raw(*args):
-  return _selinux.setcon_raw(*args)
-setcon_raw = _selinux.setcon_raw
-
-def getpidcon(*args):
-  return _selinux.getpidcon(*args)
-getpidcon = _selinux.getpidcon
-
-def getpidcon_raw(*args):
-  return _selinux.getpidcon_raw(*args)
-getpidcon_raw = _selinux.getpidcon_raw
-
-def getprevcon():
-  return _selinux.getprevcon()
-getprevcon = _selinux.getprevcon
-
-def getprevcon_raw():
-  return _selinux.getprevcon_raw()
-getprevcon_raw = _selinux.getprevcon_raw
-
-def getexeccon():
-  return _selinux.getexeccon()
-getexeccon = _selinux.getexeccon
-
-def getexeccon_raw():
-  return _selinux.getexeccon_raw()
-getexeccon_raw = _selinux.getexeccon_raw
-
-def setexeccon(*args):
-  return _selinux.setexeccon(*args)
-setexeccon = _selinux.setexeccon
-
-def setexeccon_raw(*args):
-  return _selinux.setexeccon_raw(*args)
-setexeccon_raw = _selinux.setexeccon_raw
-
-def getfscreatecon():
-  return _selinux.getfscreatecon()
-getfscreatecon = _selinux.getfscreatecon
-
-def getfscreatecon_raw():
-  return _selinux.getfscreatecon_raw()
-getfscreatecon_raw = _selinux.getfscreatecon_raw
-
-def setfscreatecon(*args):
-  return _selinux.setfscreatecon(*args)
-setfscreatecon = _selinux.setfscreatecon
-
-def setfscreatecon_raw(*args):
-  return _selinux.setfscreatecon_raw(*args)
-setfscreatecon_raw = _selinux.setfscreatecon_raw
-
-def getkeycreatecon():
-  return _selinux.getkeycreatecon()
-getkeycreatecon = _selinux.getkeycreatecon
-
-def getkeycreatecon_raw():
-  return _selinux.getkeycreatecon_raw()
-getkeycreatecon_raw = _selinux.getkeycreatecon_raw
-
-def setkeycreatecon(*args):
-  return _selinux.setkeycreatecon(*args)
-setkeycreatecon = _selinux.setkeycreatecon
-
-def setkeycreatecon_raw(*args):
-  return _selinux.setkeycreatecon_raw(*args)
-setkeycreatecon_raw = _selinux.setkeycreatecon_raw
-
-def getsockcreatecon():
-  return _selinux.getsockcreatecon()
-getsockcreatecon = _selinux.getsockcreatecon
-
-def getsockcreatecon_raw():
-  return _selinux.getsockcreatecon_raw()
-getsockcreatecon_raw = _selinux.getsockcreatecon_raw
-
-def setsockcreatecon(*args):
-  return _selinux.setsockcreatecon(*args)
-setsockcreatecon = _selinux.setsockcreatecon
-
-def setsockcreatecon_raw(*args):
-  return _selinux.setsockcreatecon_raw(*args)
-setsockcreatecon_raw = _selinux.setsockcreatecon_raw
-
-def getfilecon(*args):
-  return _selinux.getfilecon(*args)
-getfilecon = _selinux.getfilecon
-
-def getfilecon_raw(*args):
-  return _selinux.getfilecon_raw(*args)
-getfilecon_raw = _selinux.getfilecon_raw
-
-def lgetfilecon(*args):
-  return _selinux.lgetfilecon(*args)
-lgetfilecon = _selinux.lgetfilecon
-
-def lgetfilecon_raw(*args):
-  return _selinux.lgetfilecon_raw(*args)
-lgetfilecon_raw = _selinux.lgetfilecon_raw
-
-def fgetfilecon(*args):
-  return _selinux.fgetfilecon(*args)
-fgetfilecon = _selinux.fgetfilecon
-
-def fgetfilecon_raw(*args):
-  return _selinux.fgetfilecon_raw(*args)
-fgetfilecon_raw = _selinux.fgetfilecon_raw
-
-def setfilecon(*args):
-  return _selinux.setfilecon(*args)
-setfilecon = _selinux.setfilecon
-
-def setfilecon_raw(*args):
-  return _selinux.setfilecon_raw(*args)
-setfilecon_raw = _selinux.setfilecon_raw
-
-def lsetfilecon(*args):
-  return _selinux.lsetfilecon(*args)
-lsetfilecon = _selinux.lsetfilecon
-
-def lsetfilecon_raw(*args):
-  return _selinux.lsetfilecon_raw(*args)
-lsetfilecon_raw = _selinux.lsetfilecon_raw
-
-def fsetfilecon(*args):
-  return _selinux.fsetfilecon(*args)
-fsetfilecon = _selinux.fsetfilecon
-
-def fsetfilecon_raw(*args):
-  return _selinux.fsetfilecon_raw(*args)
-fsetfilecon_raw = _selinux.fsetfilecon_raw
-
-def getpeercon(*args):
-  return _selinux.getpeercon(*args)
-getpeercon = _selinux.getpeercon
-
-def getpeercon_raw(*args):
-  return _selinux.getpeercon_raw(*args)
-getpeercon_raw = _selinux.getpeercon_raw
-class av_decision(_object):
-    __swig_setmethods__ = {}
-    __setattr__ = lambda self, name, value: _swig_setattr(self, av_decision, name, value)
-    __swig_getmethods__ = {}
-    __getattr__ = lambda self, name: _swig_getattr(self, av_decision, name)
-    __repr__ = _swig_repr
-    __swig_setmethods__["allowed"] = _selinux.av_decision_allowed_set
-    __swig_getmethods__["allowed"] = _selinux.av_decision_allowed_get
-    if _newclass:allowed = _swig_property(_selinux.av_decision_allowed_get, _selinux.av_decision_allowed_set)
-    __swig_setmethods__["decided"] = _selinux.av_decision_decided_set
-    __swig_getmethods__["decided"] = _selinux.av_decision_decided_get
-    if _newclass:decided = _swig_property(_selinux.av_decision_decided_get, _selinux.av_decision_decided_set)
-    __swig_setmethods__["auditallow"] = _selinux.av_decision_auditallow_set
-    __swig_getmethods__["auditallow"] = _selinux.av_decision_auditallow_get
-    if _newclass:auditallow = _swig_property(_selinux.av_decision_auditallow_get, _selinux.av_decision_auditallow_set)
-    __swig_setmethods__["auditdeny"] = _selinux.av_decision_auditdeny_set
-    __swig_getmethods__["auditdeny"] = _selinux.av_decision_auditdeny_get
-    if _newclass:auditdeny = _swig_property(_selinux.av_decision_auditdeny_get, _selinux.av_decision_auditdeny_set)
-    __swig_setmethods__["seqno"] = _selinux.av_decision_seqno_set
-    __swig_getmethods__["seqno"] = _selinux.av_decision_seqno_get
-    if _newclass:seqno = _swig_property(_selinux.av_decision_seqno_get, _selinux.av_decision_seqno_set)
-    __swig_setmethods__["flags"] = _selinux.av_decision_flags_set
-    __swig_getmethods__["flags"] = _selinux.av_decision_flags_get
-    if _newclass:flags = _swig_property(_selinux.av_decision_flags_get, _selinux.av_decision_flags_set)
-    def __init__(self): 
-        this = _selinux.new_av_decision()
-        try: self.this.append(this)
-        except: self.this = this
-    __swig_destroy__ = _selinux.delete_av_decision
-    __del__ = lambda self : None;
-av_decision_swigregister = _selinux.av_decision_swigregister
-av_decision_swigregister(av_decision)
-
-SELINUX_AVD_FLAGS_PERMISSIVE = _selinux.SELINUX_AVD_FLAGS_PERMISSIVE
-class selinux_opt(_object):
-    __swig_setmethods__ = {}
-    __setattr__ = lambda self, name, value: _swig_setattr(self, selinux_opt, name, value)
-    __swig_getmethods__ = {}
-    __getattr__ = lambda self, name: _swig_getattr(self, selinux_opt, name)
-    __repr__ = _swig_repr
-    __swig_setmethods__["type"] = _selinux.selinux_opt_type_set
-    __swig_getmethods__["type"] = _selinux.selinux_opt_type_get
-    if _newclass:type = _swig_property(_selinux.selinux_opt_type_get, _selinux.selinux_opt_type_set)
-    __swig_setmethods__["value"] = _selinux.selinux_opt_value_set
-    __swig_getmethods__["value"] = _selinux.selinux_opt_value_get
-    if _newclass:value = _swig_property(_selinux.selinux_opt_value_get, _selinux.selinux_opt_value_set)
-    def __init__(self): 
-        this = _selinux.new_selinux_opt()
-        try: self.this.append(this)
-        except: self.this = this
-    __swig_destroy__ = _selinux.delete_selinux_opt
-    __del__ = lambda self : None;
-selinux_opt_swigregister = _selinux.selinux_opt_swigregister
-selinux_opt_swigregister(selinux_opt)
-
-class selinux_callback(_object):
-    __swig_setmethods__ = {}
-    __setattr__ = lambda self, name, value: _swig_setattr(self, selinux_callback, name, value)
-    __swig_getmethods__ = {}
-    __getattr__ = lambda self, name: _swig_getattr(self, selinux_callback, name)
-    __repr__ = _swig_repr
-    __swig_setmethods__["func_log"] = _selinux.selinux_callback_func_log_set
-    __swig_getmethods__["func_log"] = _selinux.selinux_callback_func_log_get
-    if _newclass:func_log = _swig_property(_selinux.selinux_callback_func_log_get, _selinux.selinux_callback_func_log_set)
-    __swig_setmethods__["func_audit"] = _selinux.selinux_callback_func_audit_set
-    __swig_getmethods__["func_audit"] = _selinux.selinux_callback_func_audit_get
-    if _newclass:func_audit = _swig_property(_selinux.selinux_callback_func_audit_get, _selinux.selinux_callback_func_audit_set)
-    __swig_setmethods__["func_validate"] = _selinux.selinux_callback_func_validate_set
-    __swig_getmethods__["func_validate"] = _selinux.selinux_callback_func_validate_get
-    if _newclass:func_validate = _swig_property(_selinux.selinux_callback_func_validate_get, _selinux.selinux_callback_func_validate_set)
-    __swig_setmethods__["func_setenforce"] = _selinux.selinux_callback_func_setenforce_set
-    __swig_getmethods__["func_setenforce"] = _selinux.selinux_callback_func_setenforce_get
-    if _newclass:func_setenforce = _swig_property(_selinux.selinux_callback_func_setenforce_get, _selinux.selinux_callback_func_setenforce_set)
-    __swig_setmethods__["func_policyload"] = _selinux.selinux_callback_func_policyload_set
-    __swig_getmethods__["func_policyload"] = _selinux.selinux_callback_func_policyload_get
-    if _newclass:func_policyload = _swig_property(_selinux.selinux_callback_func_policyload_get, _selinux.selinux_callback_func_policyload_set)
-    def __init__(self): 
-        this = _selinux.new_selinux_callback()
-        try: self.this.append(this)
-        except: self.this = this
-    __swig_destroy__ = _selinux.delete_selinux_callback
-    __del__ = lambda self : None;
-selinux_callback_swigregister = _selinux.selinux_callback_swigregister
-selinux_callback_swigregister(selinux_callback)
-
-SELINUX_CB_LOG = _selinux.SELINUX_CB_LOG
-SELINUX_CB_AUDIT = _selinux.SELINUX_CB_AUDIT
-SELINUX_CB_VALIDATE = _selinux.SELINUX_CB_VALIDATE
-SELINUX_CB_SETENFORCE = _selinux.SELINUX_CB_SETENFORCE
-SELINUX_CB_POLICYLOAD = _selinux.SELINUX_CB_POLICYLOAD
-
-def selinux_get_callback(*args):
-  return _selinux.selinux_get_callback(*args)
-selinux_get_callback = _selinux.selinux_get_callback
-
-def selinux_set_callback(*args):
-  return _selinux.selinux_set_callback(*args)
-selinux_set_callback = _selinux.selinux_set_callback
-SELINUX_ERROR = _selinux.SELINUX_ERROR
-SELINUX_WARNING = _selinux.SELINUX_WARNING
-SELINUX_INFO = _selinux.SELINUX_INFO
-SELINUX_AVC = _selinux.SELINUX_AVC
-SELINUX_TRANS_DIR = _selinux.SELINUX_TRANS_DIR
-
-def security_compute_av(*args):
-  return _selinux.security_compute_av(*args)
-security_compute_av = _selinux.security_compute_av
-
-def security_compute_av_raw(*args):
-  return _selinux.security_compute_av_raw(*args)
-security_compute_av_raw = _selinux.security_compute_av_raw
-
-def security_compute_av_flags(*args):
-  return _selinux.security_compute_av_flags(*args)
-security_compute_av_flags = _selinux.security_compute_av_flags
-
-def security_compute_av_flags_raw(*args):
-  return _selinux.security_compute_av_flags_raw(*args)
-security_compute_av_flags_raw = _selinux.security_compute_av_flags_raw
-
-def security_compute_create(*args):
-  return _selinux.security_compute_create(*args)
-security_compute_create = _selinux.security_compute_create
-
-def security_compute_create_raw(*args):
-  return _selinux.security_compute_create_raw(*args)
-security_compute_create_raw = _selinux.security_compute_create_raw
-
-def security_compute_create_name(*args):
-  return _selinux.security_compute_create_name(*args)
-security_compute_create_name = _selinux.security_compute_create_name
-
-def security_compute_create_name_raw(*args):
-  return _selinux.security_compute_create_name_raw(*args)
-security_compute_create_name_raw = _selinux.security_compute_create_name_raw
-
-def security_compute_relabel(*args):
-  return _selinux.security_compute_relabel(*args)
-security_compute_relabel = _selinux.security_compute_relabel
-
-def security_compute_relabel_raw(*args):
-  return _selinux.security_compute_relabel_raw(*args)
-security_compute_relabel_raw = _selinux.security_compute_relabel_raw
-
-def security_compute_member(*args):
-  return _selinux.security_compute_member(*args)
-security_compute_member = _selinux.security_compute_member
-
-def security_compute_member_raw(*args):
-  return _selinux.security_compute_member_raw(*args)
-security_compute_member_raw = _selinux.security_compute_member_raw
-
-def security_compute_user(*args):
-  return _selinux.security_compute_user(*args)
-security_compute_user = _selinux.security_compute_user
-
-def security_compute_user_raw(*args):
-  return _selinux.security_compute_user_raw(*args)
-security_compute_user_raw = _selinux.security_compute_user_raw
-
-def security_load_policy(*args):
-  return _selinux.security_load_policy(*args)
-security_load_policy = _selinux.security_load_policy
-
-def security_get_initial_context(*args):
-  return _selinux.security_get_initial_context(*args)
-security_get_initial_context = _selinux.security_get_initial_context
-
-def security_get_initial_context_raw(*args):
-  return _selinux.security_get_initial_context_raw(*args)
-security_get_initial_context_raw = _selinux.security_get_initial_context_raw
-
-def selinux_mkload_policy(*args):
-  return _selinux.selinux_mkload_policy(*args)
-selinux_mkload_policy = _selinux.selinux_mkload_policy
-
-def selinux_init_load_policy():
-  return _selinux.selinux_init_load_policy()
-selinux_init_load_policy = _selinux.selinux_init_load_policy
-class SELboolean(_object):
-    __swig_setmethods__ = {}
-    __setattr__ = lambda self, name, value: _swig_setattr(self, SELboolean, name, value)
-    __swig_getmethods__ = {}
-    __getattr__ = lambda self, name: _swig_getattr(self, SELboolean, name)
-    __repr__ = _swig_repr
-    __swig_setmethods__["name"] = _selinux.SELboolean_name_set
-    __swig_getmethods__["name"] = _selinux.SELboolean_name_get
-    if _newclass:name = _swig_property(_selinux.SELboolean_name_get, _selinux.SELboolean_name_set)
-    __swig_setmethods__["value"] = _selinux.SELboolean_value_set
-    __swig_getmethods__["value"] = _selinux.SELboolean_value_get
-    if _newclass:value = _swig_property(_selinux.SELboolean_value_get, _selinux.SELboolean_value_set)
-    def __init__(self): 
-        this = _selinux.new_SELboolean()
-        try: self.this.append(this)
-        except: self.this = this
-    __swig_destroy__ = _selinux.delete_SELboolean
-    __del__ = lambda self : None;
-SELboolean_swigregister = _selinux.SELboolean_swigregister
-SELboolean_swigregister(SELboolean)
-
-
-def security_set_boolean_list(*args):
-  return _selinux.security_set_boolean_list(*args)
-security_set_boolean_list = _selinux.security_set_boolean_list
-
-def security_load_booleans(*args):
-  return _selinux.security_load_booleans(*args)
-security_load_booleans = _selinux.security_load_booleans
-
-def security_check_context(*args):
-  return _selinux.security_check_context(*args)
-security_check_context = _selinux.security_check_context
-
-def security_check_context_raw(*args):
-  return _selinux.security_check_context_raw(*args)
-security_check_context_raw = _selinux.security_check_context_raw
-
-def security_canonicalize_context(*args):
-  return _selinux.security_canonicalize_context(*args)
-security_canonicalize_context = _selinux.security_canonicalize_context
-
-def security_canonicalize_context_raw(*args):
-  return _selinux.security_canonicalize_context_raw(*args)
-security_canonicalize_context_raw = _selinux.security_canonicalize_context_raw
-
-def security_getenforce():
-  return _selinux.security_getenforce()
-security_getenforce = _selinux.security_getenforce
-
-def security_setenforce(*args):
-  return _selinux.security_setenforce(*args)
-security_setenforce = _selinux.security_setenforce
-
-def security_deny_unknown():
-  return _selinux.security_deny_unknown()
-security_deny_unknown = _selinux.security_deny_unknown
-
-def security_disable():
-  return _selinux.security_disable()
-security_disable = _selinux.security_disable
-
-def security_policyvers():
-  return _selinux.security_policyvers()
-security_policyvers = _selinux.security_policyvers
-
-def security_get_boolean_names():
-  return _selinux.security_get_boolean_names()
-security_get_boolean_names = _selinux.security_get_boolean_names
-
-def security_get_boolean_pending(*args):
-  return _selinux.security_get_boolean_pending(*args)
-security_get_boolean_pending = _selinux.security_get_boolean_pending
-
-def security_get_boolean_active(*args):
-  return _selinux.security_get_boolean_active(*args)
-security_get_boolean_active = _selinux.security_get_boolean_active
-
-def security_set_boolean(*args):
-  return _selinux.security_set_boolean(*args)
-security_set_boolean = _selinux.security_set_boolean
-
-def security_commit_booleans():
-  return _selinux.security_commit_booleans()
-security_commit_booleans = _selinux.security_commit_booleans
-class security_class_mapping(_object):
-    __swig_setmethods__ = {}
-    __setattr__ = lambda self, name, value: _swig_setattr(self, security_class_mapping, name, value)
-    __swig_getmethods__ = {}
-    __getattr__ = lambda self, name: _swig_getattr(self, security_class_mapping, name)
-    __repr__ = _swig_repr
-    __swig_setmethods__["name"] = _selinux.security_class_mapping_name_set
-    __swig_getmethods__["name"] = _selinux.security_class_mapping_name_get
-    if _newclass:name = _swig_property(_selinux.security_class_mapping_name_get, _selinux.security_class_mapping_name_set)
-    __swig_setmethods__["perms"] = _selinux.security_class_mapping_perms_set
-    __swig_getmethods__["perms"] = _selinux.security_class_mapping_perms_get
-    if _newclass:perms = _swig_property(_selinux.security_class_mapping_perms_get, _selinux.security_class_mapping_perms_set)
-    def __init__(self): 
-        this = _selinux.new_security_class_mapping()
-        try: self.this.append(this)
-        except: self.this = this
-    __swig_destroy__ = _selinux.delete_security_class_mapping
-    __del__ = lambda self : None;
-security_class_mapping_swigregister = _selinux.security_class_mapping_swigregister
-security_class_mapping_swigregister(security_class_mapping)
-
-
-def selinux_set_mapping(*args):
-  return _selinux.selinux_set_mapping(*args)
-selinux_set_mapping = _selinux.selinux_set_mapping
-
-def mode_to_security_class(*args):
-  return _selinux.mode_to_security_class(*args)
-mode_to_security_class = _selinux.mode_to_security_class
-
-def string_to_security_class(*args):
-  return _selinux.string_to_security_class(*args)
-string_to_security_class = _selinux.string_to_security_class
-
-def security_class_to_string(*args):
-  return _selinux.security_class_to_string(*args)
-security_class_to_string = _selinux.security_class_to_string
-
-def security_av_perm_to_string(*args):
-  return _selinux.security_av_perm_to_string(*args)
-security_av_perm_to_string = _selinux.security_av_perm_to_string
-
-def string_to_av_perm(*args):
-  return _selinux.string_to_av_perm(*args)
-string_to_av_perm = _selinux.string_to_av_perm
-
-def security_av_string(*args):
-  return _selinux.security_av_string(*args)
-security_av_string = _selinux.security_av_string
-
-def print_access_vector(*args):
-  return _selinux.print_access_vector(*args)
-print_access_vector = _selinux.print_access_vector
-MATCHPATHCON_BASEONLY = _selinux.MATCHPATHCON_BASEONLY
-MATCHPATHCON_NOTRANS = _selinux.MATCHPATHCON_NOTRANS
-MATCHPATHCON_VALIDATE = _selinux.MATCHPATHCON_VALIDATE
-
-def set_matchpathcon_flags(*args):
-  return _selinux.set_matchpathcon_flags(*args)
-set_matchpathcon_flags = _selinux.set_matchpathcon_flags
-
-def matchpathcon_init(*args):
-  return _selinux.matchpathcon_init(*args)
-matchpathcon_init = _selinux.matchpathcon_init
-
-def matchpathcon_init_prefix(*args):
-  return _selinux.matchpathcon_init_prefix(*args)
-matchpathcon_init_prefix = _selinux.matchpathcon_init_prefix
-
-def matchpathcon_fini():
-  return _selinux.matchpathcon_fini()
-matchpathcon_fini = _selinux.matchpathcon_fini
-
-def realpath_not_final(*args):
-  return _selinux.realpath_not_final(*args)
-realpath_not_final = _selinux.realpath_not_final
-
-def matchpathcon(*args):
-  return _selinux.matchpathcon(*args)
-matchpathcon = _selinux.matchpathcon
-
-def matchpathcon_index(*args):
-  return _selinux.matchpathcon_index(*args)
-matchpathcon_index = _selinux.matchpathcon_index
-
-def matchpathcon_filespec_add(*args):
-  return _selinux.matchpathcon_filespec_add(*args)
-matchpathcon_filespec_add = _selinux.matchpathcon_filespec_add
-
-def matchpathcon_filespec_destroy():
-  return _selinux.matchpathcon_filespec_destroy()
-matchpathcon_filespec_destroy = _selinux.matchpathcon_filespec_destroy
-
-def matchpathcon_filespec_eval():
-  return _selinux.matchpathcon_filespec_eval()
-matchpathcon_filespec_eval = _selinux.matchpathcon_filespec_eval
-
-def matchpathcon_checkmatches(*args):
-  return _selinux.matchpathcon_checkmatches(*args)
-matchpathcon_checkmatches = _selinux.matchpathcon_checkmatches
-
-def matchmediacon(*args):
-  return _selinux.matchmediacon(*args)
-matchmediacon = _selinux.matchmediacon
-
-def selinux_getenforcemode():
-  return _selinux.selinux_getenforcemode()
-selinux_getenforcemode = _selinux.selinux_getenforcemode
-
-def selinux_boolean_sub(*args):
-  return _selinux.selinux_boolean_sub(*args)
-selinux_boolean_sub = _selinux.selinux_boolean_sub
-
-def selinux_getpolicytype():
-  return _selinux.selinux_getpolicytype()
-selinux_getpolicytype = _selinux.selinux_getpolicytype
-
-def selinux_policy_root():
-  return _selinux.selinux_policy_root()
-selinux_policy_root = _selinux.selinux_policy_root
-
-def selinux_set_policy_root(*args):
-  return _selinux.selinux_set_policy_root(*args)
-selinux_set_policy_root = _selinux.selinux_set_policy_root
-
-def selinux_current_policy_path():
-  return _selinux.selinux_current_policy_path()
-selinux_current_policy_path = _selinux.selinux_current_policy_path
-
-def selinux_binary_policy_path():
-  return _selinux.selinux_binary_policy_path()
-selinux_binary_policy_path = _selinux.selinux_binary_policy_path
-
-def selinux_failsafe_context_path():
-  return _selinux.selinux_failsafe_context_path()
-selinux_failsafe_context_path = _selinux.selinux_failsafe_context_path
-
-def selinux_removable_context_path():
-  return _selinux.selinux_removable_context_path()
-selinux_removable_context_path = _selinux.selinux_removable_context_path
-
-def selinux_default_context_path():
-  return _selinux.selinux_default_context_path()
-selinux_default_context_path = _selinux.selinux_default_context_path
-
-def selinux_user_contexts_path():
-  return _selinux.selinux_user_contexts_path()
-selinux_user_contexts_path = _selinux.selinux_user_contexts_path
-
-def selinux_file_context_path():
-  return _selinux.selinux_file_context_path()
-selinux_file_context_path = _selinux.selinux_file_context_path
-
-def selinux_file_context_homedir_path():
-  return _selinux.selinux_file_context_homedir_path()
-selinux_file_context_homedir_path = _selinux.selinux_file_context_homedir_path
-
-def selinux_file_context_local_path():
-  return _selinux.selinux_file_context_local_path()
-selinux_file_context_local_path = _selinux.selinux_file_context_local_path
-
-def selinux_file_context_subs_path():
-  return _selinux.selinux_file_context_subs_path()
-selinux_file_context_subs_path = _selinux.selinux_file_context_subs_path
-
-def selinux_file_context_subs_dist_path():
-  return _selinux.selinux_file_context_subs_dist_path()
-selinux_file_context_subs_dist_path = _selinux.selinux_file_context_subs_dist_path
-
-def selinux_homedir_context_path():
-  return _selinux.selinux_homedir_context_path()
-selinux_homedir_context_path = _selinux.selinux_homedir_context_path
-
-def selinux_media_context_path():
-  return _selinux.selinux_media_context_path()
-selinux_media_context_path = _selinux.selinux_media_context_path
-
-def selinux_virtual_domain_context_path():
-  return _selinux.selinux_virtual_domain_context_path()
-selinux_virtual_domain_context_path = _selinux.selinux_virtual_domain_context_path
-
-def selinux_virtual_image_context_path():
-  return _selinux.selinux_virtual_image_context_path()
-selinux_virtual_image_context_path = _selinux.selinux_virtual_image_context_path
-
-def selinux_lxc_contexts_path():
-  return _selinux.selinux_lxc_contexts_path()
-selinux_lxc_contexts_path = _selinux.selinux_lxc_contexts_path
-
-def selinux_x_context_path():
-  return _selinux.selinux_x_context_path()
-selinux_x_context_path = _selinux.selinux_x_context_path
-
-def selinux_sepgsql_context_path():
-  return _selinux.selinux_sepgsql_context_path()
-selinux_sepgsql_context_path = _selinux.selinux_sepgsql_context_path
-
-def selinux_systemd_contexts_path():
-  return _selinux.selinux_systemd_contexts_path()
-selinux_systemd_contexts_path = _selinux.selinux_systemd_contexts_path
-
-def selinux_contexts_path():
-  return _selinux.selinux_contexts_path()
-selinux_contexts_path = _selinux.selinux_contexts_path
-
-def selinux_securetty_types_path():
-  return _selinux.selinux_securetty_types_path()
-selinux_securetty_types_path = _selinux.selinux_securetty_types_path
-
-def selinux_booleans_subs_path():
-  return _selinux.selinux_booleans_subs_path()
-selinux_booleans_subs_path = _selinux.selinux_booleans_subs_path
-
-def selinux_booleans_path():
-  return _selinux.selinux_booleans_path()
-selinux_booleans_path = _selinux.selinux_booleans_path
-
-def selinux_customizable_types_path():
-  return _selinux.selinux_customizable_types_path()
-selinux_customizable_types_path = _selinux.selinux_customizable_types_path
-
-def selinux_users_path():
-  return _selinux.selinux_users_path()
-selinux_users_path = _selinux.selinux_users_path
-
-def selinux_usersconf_path():
-  return _selinux.selinux_usersconf_path()
-selinux_usersconf_path = _selinux.selinux_usersconf_path
-
-def selinux_translations_path():
-  return _selinux.selinux_translations_path()
-selinux_translations_path = _selinux.selinux_translations_path
-
-def selinux_colors_path():
-  return _selinux.selinux_colors_path()
-selinux_colors_path = _selinux.selinux_colors_path
-
-def selinux_netfilter_context_path():
-  return _selinux.selinux_netfilter_context_path()
-selinux_netfilter_context_path = _selinux.selinux_netfilter_context_path
-
-def selinux_path():
-  return _selinux.selinux_path()
-selinux_path = _selinux.selinux_path
-
-def selinux_check_access(*args):
-  return _selinux.selinux_check_access(*args)
-selinux_check_access = _selinux.selinux_check_access
-
-def selinux_check_passwd_access(*args):
-  return _selinux.selinux_check_passwd_access(*args)
-selinux_check_passwd_access = _selinux.selinux_check_passwd_access
-
-def checkPasswdAccess(*args):
-  return _selinux.checkPasswdAccess(*args)
-checkPasswdAccess = _selinux.checkPasswdAccess
-
-def selinux_check_securetty_context(*args):
-  return _selinux.selinux_check_securetty_context(*args)
-selinux_check_securetty_context = _selinux.selinux_check_securetty_context
-
-def set_selinuxmnt(*args):
-  return _selinux.set_selinuxmnt(*args)
-set_selinuxmnt = _selinux.set_selinuxmnt
-
-def selinuxfs_exists():
-  return _selinux.selinuxfs_exists()
-selinuxfs_exists = _selinux.selinuxfs_exists
-
-def fini_selinuxmnt():
-  return _selinux.fini_selinuxmnt()
-fini_selinuxmnt = _selinux.fini_selinuxmnt
-
-def setexecfilecon(*args):
-  return _selinux.setexecfilecon(*args)
-setexecfilecon = _selinux.setexecfilecon
-
-def rpm_execcon(*args):
-  return _selinux.rpm_execcon(*args)
-rpm_execcon = _selinux.rpm_execcon
-
-def is_context_customizable(*args):
-  return _selinux.is_context_customizable(*args)
-is_context_customizable = _selinux.is_context_customizable
-
-def selinux_trans_to_raw_context(*args):
-  return _selinux.selinux_trans_to_raw_context(*args)
-selinux_trans_to_raw_context = _selinux.selinux_trans_to_raw_context
-
-def selinux_raw_to_trans_context(*args):
-  return _selinux.selinux_raw_to_trans_context(*args)
-selinux_raw_to_trans_context = _selinux.selinux_raw_to_trans_context
-
-def selinux_raw_context_to_color(*args):
-  return _selinux.selinux_raw_context_to_color(*args)
-selinux_raw_context_to_color = _selinux.selinux_raw_context_to_color
-
-def getseuserbyname(*args):
-  return _selinux.getseuserbyname(*args)
-getseuserbyname = _selinux.getseuserbyname
-
-def getseuser(*args):
-  return _selinux.getseuser(*args)
-getseuser = _selinux.getseuser
-
-def selinux_file_context_cmp(*args):
-  return _selinux.selinux_file_context_cmp(*args)
-selinux_file_context_cmp = _selinux.selinux_file_context_cmp
-
-def selinux_file_context_verify(*args):
-  return _selinux.selinux_file_context_verify(*args)
-selinux_file_context_verify = _selinux.selinux_file_context_verify
-
-def selinux_lsetfilecon_default(*args):
-  return _selinux.selinux_lsetfilecon_default(*args)
-selinux_lsetfilecon_default = _selinux.selinux_lsetfilecon_default
-
-def selinux_reset_config():
-  return _selinux.selinux_reset_config()
-selinux_reset_config = _selinux.selinux_reset_config
-# This file is compatible with both classic and new-style classes.
-
-
diff --git a/lib/python2.7/site-packages/setoolsgui/selinux/_selinux.so b/lib/python2.7/site-packages/setoolsgui/selinux/_selinux.so
deleted file mode 100755
index f4a045f..0000000
--- a/lib/python2.7/site-packages/setoolsgui/selinux/_selinux.so
+++ /dev/null
Binary files differ
diff --git a/lib/python2.7/site-packages/setoolsgui/selinux/audit2why.so b/lib/python2.7/site-packages/setoolsgui/selinux/audit2why.so
deleted file mode 100755
index e7daaab..0000000
--- a/lib/python2.7/site-packages/setoolsgui/selinux/audit2why.so
+++ /dev/null
Binary files differ
diff --git a/lib/python2.7/site-packages/setoolsgui/sepolgen/__init__.py b/lib/python2.7/site-packages/setoolsgui/sepolgen/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/lib/python2.7/site-packages/setoolsgui/sepolgen/__init__.py
+++ /dev/null
diff --git a/lib/python2.7/site-packages/setoolsgui/sepolgen/access.py b/lib/python2.7/site-packages/setoolsgui/sepolgen/access.py
deleted file mode 100644
index cf13210..0000000
--- a/lib/python2.7/site-packages/setoolsgui/sepolgen/access.py
+++ /dev/null
@@ -1,331 +0,0 @@
-# Authors: Karl MacMillan <kmacmillan@mentalrootkit.com>
-#
-# Copyright (C) 2006 Red Hat 
-# see file 'COPYING' for use and warranty information
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License as
-# published by the Free Software Foundation; version 2 only
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-#
-
-"""
-Classes representing basic access.
-
-SELinux - at the most basic level - represents access as
-the 4-tuple subject (type or context), target (type or context),
-object class, permission. The policy language elaborates this basic
-access to faciliate more concise rules (e.g., allow rules can have multiple
-source or target types - see refpolicy for more information).
-
-This module has objects for representing the most basic access (AccessVector)
-and sets of that access (AccessVectorSet). These objects are used in Madison
-in a variety of ways, but they are the fundamental representation of access.
-"""
-
-import refpolicy
-from selinux import audit2why
-
-def is_idparam(id):
-    """Determine if an id is a paramater in the form $N, where N is
-    an integer.
-
-    Returns:
-      True if the id is a paramater
-      False if the id is not a paramater
-    """
-    if len(id) > 1 and id[0] == '$':
-        try:
-            int(id[1:])
-        except ValueError:
-            return False
-        return True
-    else:
-        return False
-
-class AccessVector:
-    """
-    An access vector is the basic unit of access in SELinux.
-
-    Access vectors are the most basic representation of access within
-    SELinux. It represents the access a source type has to a target
-    type in terms of an object class and a set of permissions.
-
-    Access vectors are distinct from AVRules in that they can only
-    store a single source type, target type, and object class. The
-    simplicity of AccessVectors makes them useful for storing access
-    in a form that is easy to search and compare.
-
-    The source, target, and object are stored as string. No checking
-    done to verify that the strings are valid SELinux identifiers.
-    Identifiers in the form $N (where N is an integer) are reserved as
-    interface parameters and are treated as wild cards in many
-    circumstances.
-
-    Properties:
-     .src_type - The source type allowed access. [String or None]
-     .tgt_type - The target type to which access is allowed. [String or None]
-     .obj_class - The object class to which access is allowed. [String or None]
-     .perms - The permissions allowed to the object class. [IdSet]
-     .audit_msgs - The audit messages that generated this access vector [List of strings]
-    """
-    def __init__(self, init_list=None):
-        if init_list:
-            self.from_list(init_list)
-        else:
-            self.src_type = None
-            self.tgt_type = None
-            self.obj_class = None
-            self.perms = refpolicy.IdSet()
-            self.audit_msgs = []
-            self.type = audit2why.TERULE
-            self.data = []
-
-        # The direction of the information flow represented by this
-        # access vector - used for matching
-        self.info_flow_dir = None
-
-    def from_list(self, list):
-        """Initialize an access vector from a list.
-
-        Initialize an access vector from a list treating the list as
-        positional arguments - i.e., 0 = src_type, 1 = tgt_type, etc.
-        All of the list elements 3 and greater are treated as perms.
-        For example, the list ['foo_t', 'bar_t', 'file', 'read', 'write']
-        would create an access vector list with the source type 'foo_t',
-        target type 'bar_t', object class 'file', and permissions 'read'
-        and 'write'.
-
-        This format is useful for very simple storage to strings or disc
-        (see to_list) and for initializing access vectors.
-        """
-        if len(list) < 4:
-            raise ValueError("List must contain at least four elements %s" % str(list))
-        self.src_type = list[0]
-        self.tgt_type = list[1]
-        self.obj_class = list[2]
-        self.perms = refpolicy.IdSet(list[3:])
-
-    def to_list(self):
-        """
-        Convert an access vector to a list.
-
-        Convert an access vector to a list treating the list as positional
-        values. See from_list for more information on how an access vector
-        is represented in a list.
-        """
-        l = [self.src_type, self.tgt_type, self.obj_class]
-        l.extend(self.perms)
-        return l
-
-    def __str__(self):
-        return self.to_string()
-
-    def to_string(self):
-        return "allow %s %s:%s %s;" % (self.src_type, self.tgt_type,
-                                        self.obj_class, self.perms.to_space_str())
-
-    def __cmp__(self, other):
-        if self.src_type != other.src_type:
-            return cmp(self.src_type, other.src_type)
-        if self.tgt_type != other.tgt_type:
-            return cmp(self.tgt_type, other.tgt_type)
-        if self.obj_class != self.obj_class:
-            return cmp(self.obj_class, other.obj_class)
-        if len(self.perms) != len(other.perms):
-            return cmp(len(self.perms), len(other.perms))
-        x = list(self.perms)
-        x.sort()
-        y = list(other.perms)
-        y.sort()
-        for pa, pb in zip(x, y):
-            if pa != pb:
-                return cmp(pa, pb)
-        return 0
-
-def avrule_to_access_vectors(avrule):
-    """Convert an avrule into a list of access vectors.
-
-    AccessVectors and AVRules are similary, but differ in that
-    an AVRule can more than one source type, target type, and
-    object class. This function expands a single avrule into a
-    list of one or more AccessVectors representing the access
-    defined in the AVRule.
-
-    
-    """
-    if isinstance(avrule, AccessVector):
-        return [avrule]
-    a = []
-    for src_type in avrule.src_types:
-        for tgt_type in avrule.tgt_types:
-            for obj_class in avrule.obj_classes:
-                access = AccessVector()
-                access.src_type = src_type
-                access.tgt_type = tgt_type
-                access.obj_class = obj_class
-                access.perms = avrule.perms.copy()
-                a.append(access)
-    return a
-
-class AccessVectorSet:
-    """A non-overlapping set of access vectors.
-
-    An AccessVectorSet is designed to store one or more access vectors
-    that are non-overlapping. Access can be added to the set
-    incrementally and access vectors will be added or merged as
-    necessary.  For example, adding the following access vectors using
-    add_av:
-       allow $1 etc_t : read;
-       allow $1 etc_t : write;
-       allow $1 var_log_t : read;
-    Would result in an access vector set with the access vectors:
-       allow $1 etc_t : { read write};
-       allow $1 var_log_t : read;
-    """
-    def __init__(self):
-        """Initialize an access vector set.
-        """
-        self.src = {}
-        # The information flow direction of this access vector
-        # set - see objectmodel.py for more information. This
-        # stored here to speed up searching - see matching.py.
-        self.info_dir = None
-
-    def __iter__(self):
-        """Iterate over all of the unique access vectors in the set."""
-        for tgts in self.src.values():
-            for objs in tgts.values():
-                for av in objs.values():
-                    yield av
-
-    def __len__(self):
-        """Return the number of unique access vectors in the set.
-
-        Because of the inernal representation of the access vector set,
-        __len__ is not a constant time operation. Worst case is O(N)
-        where N is the number of unique access vectors, but the common
-        case is probably better.
-        """
-        l = 0
-        for tgts in self.src.values():
-            for objs in tgts.values():
-               l += len(objs)
-        return l
-
-    def to_list(self):
-        """Return the unique access vectors in the set as a list.
-
-        The format of the returned list is a set of nested lists,
-        each access vector represented by a list. This format is
-        designed to be simply  serializable to a file.
-
-        For example, consider an access vector set with the following
-        access vectors:
-          allow $1 user_t : file read;
-          allow $1 etc_t : file { read write};
-        to_list would return the following:
-          [[$1, user_t, file, read]
-           [$1, etc_t, file, read, write]]
-
-        See AccessVector.to_list for more information.
-        """
-        l = []
-        for av in self:
-            l.append(av.to_list())
-
-        return l
-
-    def from_list(self, l):
-        """Add access vectors stored in a list.
-
-        See to list for more information on the list format that this
-        method accepts.
-
-        This will add all of the access from the list. Any existing
-        access vectors in the set will be retained.
-        """
-        for av in l:
-            self.add_av(AccessVector(av))
-
-    def add(self, src_type, tgt_type, obj_class, perms, audit_msg=None, avc_type=audit2why.TERULE, data=[]):
-        """Add an access vector to the set.
-        """
-        tgt = self.src.setdefault(src_type, { })
-        cls = tgt.setdefault(tgt_type, { })
-        
-        if cls.has_key((obj_class, avc_type)):
-            access = cls[obj_class, avc_type]
-        else:
-            access = AccessVector()
-            access.src_type = src_type
-            access.tgt_type = tgt_type
-            access.obj_class = obj_class
-            access.data = data
-            access.type = avc_type
-            cls[obj_class, avc_type] = access
-
-        access.perms.update(perms)
-        if audit_msg:
-            access.audit_msgs.append(audit_msg)
-
-    def add_av(self, av, audit_msg=None):
-        """Add an access vector to the set."""
-        self.add(av.src_type, av.tgt_type, av.obj_class, av.perms)
-
-
-def avs_extract_types(avs):
-    types = refpolicy.IdSet()
-    for av in avs:
-        types.add(av.src_type)
-        types.add(av.tgt_type)
-        
-    return types
-
-def avs_extract_obj_perms(avs):
-    perms = { }
-    for av in avs:
-        if perms.has_key(av.obj_class):
-            s = perms[av.obj_class]
-        else:
-            s = refpolicy.IdSet()
-            perms[av.obj_class] = s
-        s.update(av.perms)
-    return perms
-
-class RoleTypeSet:
-    """A non-overlapping set of role type statements.
-
-    This clas allows the incremental addition of role type statements and
-    maintains a non-overlapping list of statements.
-    """
-    def __init__(self):
-        """Initialize an access vector set."""
-        self.role_types = {}
-
-    def __iter__(self):
-        """Iterate over all of the unique role allows statements in the set."""
-        for role_type in self.role_types.values():
-            yield role_type
-
-    def __len__(self):
-        """Return the unique number of role allow statements."""
-        return len(self.role_types.keys())
-
-    def add(self, role, type):
-        if self.role_types.has_key(role):
-            role_type = self.role_types[role]
-        else:
-            role_type = refpolicy.RoleType()
-            role_type.role = role
-            self.role_types[role] = role_type
-
-        role_type.types.add(type)
diff --git a/lib/python2.7/site-packages/setoolsgui/sepolgen/audit.py b/lib/python2.7/site-packages/setoolsgui/sepolgen/audit.py
deleted file mode 100644
index 56919be..0000000
--- a/lib/python2.7/site-packages/setoolsgui/sepolgen/audit.py
+++ /dev/null
@@ -1,549 +0,0 @@
-# Authors: Karl MacMillan <kmacmillan@mentalrootkit.com>
-#
-# Copyright (C) 2006 Red Hat 
-# see file 'COPYING' for use and warranty information
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License as
-# published by the Free Software Foundation; version 2 only
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-#
-
-import refpolicy
-import access
-import re
-import sys
-
-# Convenience functions
-
-def get_audit_boot_msgs():
-    """Obtain all of the avc and policy load messages from the audit
-    log. This function uses ausearch and requires that the current
-    process have sufficient rights to run ausearch.
-
-    Returns:
-       string contain all of the audit messages returned by ausearch.
-    """
-    import subprocess
-    import time
-    fd=open("/proc/uptime", "r")
-    off=float(fd.read().split()[0])
-    fd.close
-    s = time.localtime(time.time() - off)
-    bootdate = time.strftime("%x", s)
-    boottime = time.strftime("%X", s)
-    output = subprocess.Popen(["/sbin/ausearch", "-m", "AVC,USER_AVC,MAC_POLICY_LOAD,DAEMON_START,SELINUX_ERR", "-ts", bootdate, boottime],
-                              stdout=subprocess.PIPE).communicate()[0]
-    return output
-
-def get_audit_msgs():
-    """Obtain all of the avc and policy load messages from the audit
-    log. This function uses ausearch and requires that the current
-    process have sufficient rights to run ausearch.
-
-    Returns:
-       string contain all of the audit messages returned by ausearch.
-    """
-    import subprocess
-    output = subprocess.Popen(["/sbin/ausearch", "-m", "AVC,USER_AVC,MAC_POLICY_LOAD,DAEMON_START,SELINUX_ERR"],
-                              stdout=subprocess.PIPE).communicate()[0]
-    return output
-
-def get_dmesg_msgs():
-    """Obtain all of the avc and policy load messages from /bin/dmesg.
-
-    Returns:
-       string contain all of the audit messages returned by dmesg.
-    """
-    import subprocess
-    output = subprocess.Popen(["/bin/dmesg"],
-                              stdout=subprocess.PIPE).communicate()[0]
-    return output
-
-# Classes representing audit messages
-
-class AuditMessage:
-    """Base class for all objects representing audit messages.
-
-    AuditMessage is a base class for all audit messages and only
-    provides storage for the raw message (as a string) and a
-    parsing function that does nothing.
-    """
-    def __init__(self, message):
-        self.message = message
-        self.header = ""
-
-    def from_split_string(self, recs):
-        """Parse a string that has been split into records by space into
-        an audit message.
-
-        This method should be overridden by subclasses. Error reporting
-        should be done by raise ValueError exceptions.
-        """
-        for msg in recs:
-            fields = msg.split("=")
-            if len(fields) != 2:
-                if msg[:6] == "audit(":
-                    self.header = msg
-                    return
-                else:
-                    continue
-            
-            if fields[0] == "msg":
-                self.header = fields[1]
-                return
-
-
-class InvalidMessage(AuditMessage):
-    """Class representing invalid audit messages. This is used to differentiate
-    between audit messages that aren't recognized (that should return None from
-    the audit message parser) and a message that is recognized but is malformed
-    in some way.
-    """
-    def __init__(self, message):
-        AuditMessage.__init__(self, message)
-
-class PathMessage(AuditMessage):
-    """Class representing a path message"""
-    def __init__(self, message):
-        AuditMessage.__init__(self, message)
-        self.path = ""
-
-    def from_split_string(self, recs):
-        AuditMessage.from_split_string(self, recs)
-        
-        for msg in recs:
-            fields = msg.split("=")
-            if len(fields) != 2:
-                continue
-            if fields[0] == "path":
-                self.path = fields[1][1:-1]
-                return
-import selinux.audit2why as audit2why
-
-avcdict = {}
-
-class AVCMessage(AuditMessage):
-    """AVC message representing an access denial or granted message.
-
-    This is a very basic class and does not represent all possible fields
-    in an avc message. Currently the fields are:
-       scontext - context for the source (process) that generated the message
-       tcontext - context for the target
-       tclass - object class for the target (only one)
-       comm - the process name
-       exe - the on-disc binary
-       path - the path of the target
-       access - list of accesses that were allowed or denied
-       denial - boolean indicating whether this was a denial (True) or granted
-          (False) message.
-
-    An example audit message generated from the audit daemon looks like (line breaks
-    added):
-       'type=AVC msg=audit(1155568085.407:10877): avc:  denied  { search } for
-       pid=677 comm="python" name="modules" dev=dm-0 ino=13716388
-       scontext=user_u:system_r:setroubleshootd_t:s0
-       tcontext=system_u:object_r:modules_object_t:s0 tclass=dir'
-
-    An example audit message stored in syslog (not processed by the audit daemon - line
-    breaks added):
-       'Sep 12 08:26:43 dhcp83-5 kernel: audit(1158064002.046:4): avc:  denied  { read }
-       for  pid=2 496 comm="bluez-pin" name=".gdm1K3IFT" dev=dm-0 ino=3601333
-       scontext=user_u:system_r:bluetooth_helper_t:s0-s0:c0
-       tcontext=system_u:object_r:xdm_tmp_t:s0 tclass=file
-    """
-    def __init__(self, message):
-        AuditMessage.__init__(self, message)
-        self.scontext = refpolicy.SecurityContext()
-        self.tcontext = refpolicy.SecurityContext()
-        self.tclass = ""
-        self.comm = ""
-        self.exe = ""
-        self.path = ""
-        self.name = ""
-        self.accesses = []
-        self.denial = True
-        self.type = audit2why.TERULE
-
-    def __parse_access(self, recs, start):
-        # This is kind of sucky - the access that is in a space separated
-        # list like '{ read write }'. This doesn't fit particularly well with splitting
-        # the string on spaces. This function takes the list of recs and a starting
-        # position one beyond the open brace. It then adds the accesses until it finds
-        # the close brace or the end of the list (which is an error if reached without
-        # seeing a close brace).
-        found_close = False
-        i = start
-        if i == (len(recs) - 1):
-            raise ValueError("AVC message in invalid format [%s]\n" % self.message)
-        while i < len(recs):
-            if recs[i] == "}":
-                found_close = True
-                break
-            self.accesses.append(recs[i])
-            i = i + 1
-        if not found_close:
-            raise ValueError("AVC message in invalid format [%s]\n" % self.message)
-        return i + 1
-        
-
-    def from_split_string(self, recs):
-        AuditMessage.from_split_string(self, recs)        
-        # FUTURE - fully parse avc messages and store all possible fields
-        # Required fields
-        found_src = False
-        found_tgt = False
-        found_class = False
-        found_access = False
-        
-        for i in range(len(recs)):
-            if recs[i] == "{":
-                i = self.__parse_access(recs, i + 1)
-                found_access = True
-                continue
-            elif recs[i] == "granted":
-                self.denial = False
-            
-            fields = recs[i].split("=")
-            if len(fields) != 2:
-                continue
-            if fields[0] == "scontext":
-                self.scontext = refpolicy.SecurityContext(fields[1])
-                found_src = True
-            elif fields[0] == "tcontext":
-                self.tcontext = refpolicy.SecurityContext(fields[1])
-                found_tgt = True
-            elif fields[0] == "tclass":
-                self.tclass = fields[1]
-                found_class = True
-            elif fields[0] == "comm":
-                self.comm = fields[1][1:-1]
-            elif fields[0] == "exe":
-                self.exe = fields[1][1:-1]
-            elif fields[0] == "name":
-                self.name = fields[1][1:-1]
-
-        if not found_src or not found_tgt or not found_class or not found_access:
-            raise ValueError("AVC message in invalid format [%s]\n" % self.message)
-        self.analyze()
-
-    def analyze(self):
-        tcontext = self.tcontext.to_string()
-        scontext = self.scontext.to_string()
-        access_tuple = tuple( self.accesses)
-        self.data = []
-
-        if (scontext, tcontext, self.tclass, access_tuple) in avcdict.keys():
-            self.type, self.data = avcdict[(scontext, tcontext, self.tclass, access_tuple)]
-        else:
-            self.type, self.data = audit2why.analyze(scontext, tcontext, self.tclass, self.accesses);
-            if self.type == audit2why.NOPOLICY:
-                self.type = audit2why.TERULE
-            if self.type == audit2why.BADTCON:
-                raise ValueError("Invalid Target Context %s\n" % tcontext)
-            if self.type == audit2why.BADSCON:
-                raise ValueError("Invalid Source Context %s\n" % scontext)
-            if self.type == audit2why.BADSCON:
-                raise ValueError("Invalid Type Class %s\n" % self.tclass)
-            if self.type == audit2why.BADPERM:
-                raise ValueError("Invalid permission %s\n" % " ".join(self.accesses))
-            if self.type == audit2why.BADCOMPUTE:
-                raise ValueError("Error during access vector computation")
-
-            if self.type == audit2why.CONSTRAINT:
-                self.data = [ self.data ]
-                if self.scontext.user != self.tcontext.user:
-                    self.data.append(("user (%s)" % self.scontext.user, 'user (%s)' % self.tcontext.user))
-                if self.scontext.role != self.tcontext.role and self.tcontext.role != "object_r":
-                    self.data.append(("role (%s)" % self.scontext.role, 'role (%s)' % self.tcontext.role))
-                if self.scontext.level != self.tcontext.level:
-                    self.data.append(("level (%s)" % self.scontext.level, 'level (%s)' % self.tcontext.level))
-
-            avcdict[(scontext, tcontext, self.tclass, access_tuple)] = (self.type, self.data)
-
-class PolicyLoadMessage(AuditMessage):
-    """Audit message indicating that the policy was reloaded."""
-    def __init__(self, message):
-        AuditMessage.__init__(self, message)
-
-class DaemonStartMessage(AuditMessage):
-    """Audit message indicating that a daemon was started."""
-    def __init__(self, message):
-        AuditMessage.__init__(self, message)
-        self.auditd = False
-
-    def from_split_string(self, recs):
-        AuditMessage.from_split_string(self, recs)
-        if "auditd" in recs:
-            self.auditd = True
-        
-
-class ComputeSidMessage(AuditMessage):
-    """Audit message indicating that a sid was not valid.
-
-    Compute sid messages are generated on attempting to create a security
-    context that is not valid. Security contexts are invalid if the role is
-    not authorized for the user or the type is not authorized for the role.
-
-    This class does not store all of the fields from the compute sid message -
-    just the type and role.
-    """
-    def __init__(self, message):
-        AuditMessage.__init__(self, message)
-        self.invalid_context = refpolicy.SecurityContext()
-        self.scontext = refpolicy.SecurityContext()
-        self.tcontext = refpolicy.SecurityContext()
-        self.tclass = ""
-
-    def from_split_string(self, recs):
-        AuditMessage.from_split_string(self, recs)
-        if len(recs) < 10:
-            raise ValueError("Split string does not represent a valid compute sid message")
-
-        try:
-            self.invalid_context = refpolicy.SecurityContext(recs[5])
-            self.scontext = refpolicy.SecurityContext(recs[7].split("=")[1])
-            self.tcontext = refpolicy.SecurityContext(recs[8].split("=")[1])
-            self.tclass = recs[9].split("=")[1]
-        except:
-            raise ValueError("Split string does not represent a valid compute sid message")
-    def output(self):
-        return "role %s types %s;\n" % (self.role, self.type)
-        
-# Parser for audit messages
-
-class AuditParser:
-    """Parser for audit messages.
-
-    This class parses audit messages and stores them according to their message
-    type. This is not a general purpose audit message parser - it only extracts
-    selinux related messages.
-
-    Each audit messages are stored in one of four lists:
-       avc_msgs - avc denial or granted messages. Messages are stored in
-          AVCMessage objects.
-       comput_sid_messages - invalid sid messages. Messages are stored in
-          ComputSidMessage objects.
-       invalid_msgs - selinux related messages that are not valid. Messages
-          are stored in InvalidMessageObjects.
-       policy_load_messages - policy load messages. Messages are stored in
-          PolicyLoadMessage objects.
-
-    These lists will be reset when a policy load message is seen if
-    AuditParser.last_load_only is set to true. It is assumed that messages
-    are fed to the parser in chronological order - time stamps are not
-    parsed.
-    """
-    def __init__(self, last_load_only=False):
-        self.__initialize()
-        self.last_load_only = last_load_only
-
-    def __initialize(self):
-        self.avc_msgs = []
-        self.compute_sid_msgs = []
-        self.invalid_msgs = []
-        self.policy_load_msgs = []
-        self.path_msgs = []
-        self.by_header = { }
-        self.check_input_file = False
-                
-    # Low-level parsing function - tries to determine if this audit
-    # message is an SELinux related message and then parses it into
-    # the appropriate AuditMessage subclass. This function deliberately
-    # does not impose policy (e.g., on policy load message) or store
-    # messages to make as simple and reusable as possible.
-    #
-    # Return values:
-    #   None - no recognized audit message found in this line
-    #
-    #   InvalidMessage - a recognized but invalid message was found.
-    #
-    #   AuditMessage (or subclass) - object representing a parsed
-    #      and valid audit message.
-    def __parse_line(self, line):
-        rec = line.split()
-        for i in rec:
-            found = False
-            if i == "avc:" or i == "message=avc:" or i == "msg='avc:":
-                msg = AVCMessage(line)
-                found = True
-            elif i == "security_compute_sid:":
-                msg = ComputeSidMessage(line)
-                found = True
-            elif i == "type=MAC_POLICY_LOAD" or i == "type=1403":
-                msg = PolicyLoadMessage(line)
-                found = True
-            elif i == "type=AVC_PATH":
-                msg = PathMessage(line)
-                found = True
-            elif i == "type=DAEMON_START":
-                msg = DaemonStartMessage(list)
-                found = True
-                
-            if found:
-                self.check_input_file = True
-                try:
-                    msg.from_split_string(rec)
-                except ValueError:
-                    msg = InvalidMessage(line)
-                return msg
-        return None
-
-    # Higher-level parse function - take a line, parse it into an
-    # AuditMessage object, and store it in the appropriate list.
-    # This function will optionally reset all of the lists when
-    # it sees a load policy message depending on the value of
-    # self.last_load_only.
-    def __parse(self, line):
-        msg = self.__parse_line(line)
-        if msg is None:
-            return
-
-        # Append to the correct list
-        if isinstance(msg, PolicyLoadMessage):
-            if self.last_load_only:
-                self.__initialize()
-        elif isinstance(msg, DaemonStartMessage):
-            # We initialize every time the auditd is started. This
-            # is less than ideal, but unfortunately it is the only
-            # way to catch reboots since the initial policy load
-            # by init is not stored in the audit log.
-            if msg.auditd and self.last_load_only:
-                self.__initialize()
-            self.policy_load_msgs.append(msg)
-        elif isinstance(msg, AVCMessage):
-            self.avc_msgs.append(msg)
-        elif isinstance(msg, ComputeSidMessage):
-            self.compute_sid_msgs.append(msg)
-        elif isinstance(msg, InvalidMessage):
-            self.invalid_msgs.append(msg)
-        elif isinstance(msg, PathMessage):
-            self.path_msgs.append(msg)
-
-        # Group by audit header
-        if msg.header != "":
-            if self.by_header.has_key(msg.header):
-                self.by_header[msg.header].append(msg)
-            else:
-                self.by_header[msg.header] = [msg]
-            
-
-    # Post processing will add additional information from AVC messages
-    # from related messages - only works on messages generated by
-    # the audit system.
-    def __post_process(self):
-        for value in self.by_header.values():
-            avc = []
-            path = None
-            for msg in value:
-                if isinstance(msg, PathMessage):
-                    path = msg
-                elif isinstance(msg, AVCMessage):
-                    avc.append(msg)
-            if len(avc) > 0 and path:
-                for a in avc:
-                    a.path = path.path
-
-    def parse_file(self, input):
-        """Parse the contents of a file object. This method can be called
-        multiple times (along with parse_string)."""
-        line = input.readline()
-        while line:
-            self.__parse(line)
-            line = input.readline()
-        if not self.check_input_file:
-            sys.stderr.write("Nothing to do\n")
-            sys.exit(0)
-        self.__post_process()
-
-    def parse_string(self, input):
-        """Parse a string containing audit messages - messages should
-        be separated by new lines. This method can be called multiple
-        times (along with parse_file)."""
-        lines = input.split('\n')
-        for l in lines:
-            self.__parse(l)
-        self.__post_process()
-
-    def to_role(self, role_filter=None):
-        """Return RoleAllowSet statements matching the specified filter
-
-        Filter out types that match the filer, or all roles
-
-        Params:
-           role_filter - [optional] Filter object used to filter the
-              output.
-        Returns:
-           Access vector set representing the denied access in the
-           audit logs parsed by this object.
-        """
-        role_types = access.RoleTypeSet()
-        for cs in self.compute_sid_msgs:
-            if not role_filter or role_filter.filter(cs):
-                role_types.add(cs.invalid_context.role, cs.invalid_context.type)
-        
-        return role_types
-
-    def to_access(self, avc_filter=None, only_denials=True):
-        """Convert the audit logs access into a an access vector set.
-
-        Convert the audit logs into an access vector set, optionally
-        filtering the restults with the passed in filter object.
-
-        Filter objects are object instances with a .filter method
-        that takes and access vector and returns True if the message
-        should be included in the final output and False otherwise.
-
-        Params:
-           avc_filter - [optional] Filter object used to filter the
-              output.
-        Returns:
-           Access vector set representing the denied access in the
-           audit logs parsed by this object.
-        """
-        av_set = access.AccessVectorSet()
-        for avc in self.avc_msgs:
-            if avc.denial != True and only_denials:
-                continue
-            if avc_filter:
-                if avc_filter.filter(avc):
-                    av_set.add(avc.scontext.type, avc.tcontext.type, avc.tclass,
-                               avc.accesses, avc, avc_type=avc.type, data=avc.data)
-            else:
-                av_set.add(avc.scontext.type, avc.tcontext.type, avc.tclass,
-                           avc.accesses, avc, avc_type=avc.type, data=avc.data)
-        return av_set
-
-class AVCTypeFilter:
-    def __init__(self, regex):
-        self.regex = re.compile(regex)
-
-    def filter(self, avc):
-        if self.regex.match(avc.scontext.type):
-            return True
-        if self.regex.match(avc.tcontext.type):
-            return True
-        return False
-
-class ComputeSidTypeFilter:
-    def __init__(self, regex):
-        self.regex = re.compile(regex)
-
-    def filter(self, avc):
-        if self.regex.match(avc.invalid_context.type):
-            return True
-        if self.regex.match(avc.scontext.type):
-            return True
-        if self.regex.match(avc.tcontext.type):
-            return True
-        return False
-
-
diff --git a/lib/python2.7/site-packages/setoolsgui/sepolgen/classperms.py b/lib/python2.7/site-packages/setoolsgui/sepolgen/classperms.py
deleted file mode 100644
index c925dee..0000000
--- a/lib/python2.7/site-packages/setoolsgui/sepolgen/classperms.py
+++ /dev/null
@@ -1,116 +0,0 @@
-# Authors: Karl MacMillan <kmacmillan@mentalrootkit.com>
-#
-# Copyright (C) 2006 Red Hat 
-# see file 'COPYING' for use and warranty information
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License as
-# published by the Free Software Foundation; version 2 only
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-#
-import sys
-
-tokens = ('DEFINE',
-          'NAME',
-          'TICK',
-          'SQUOTE',
-          'OBRACE',
-          'CBRACE',
-          'SEMI',
-          'OPAREN',
-          'CPAREN',
-          'COMMA')
-
-reserved = {
-    'define' : 'DEFINE' }
-
-t_TICK      = r'\`'
-t_SQUOTE    = r'\''
-t_OBRACE    = r'\{'
-t_CBRACE    = r'\}'
-t_SEMI      = r'\;'
-t_OPAREN    = r'\('
-t_CPAREN    = r'\)'
-t_COMMA     = r'\,'
-
-t_ignore    = " \t\n"
-
-def t_NAME(t):
-    r'[a-zA-Z_][a-zA-Z0-9_]*'
-    t.type = reserved.get(t.value,'NAME')
-    return t
-
-def t_error(t):
-    print "Illegal character '%s'" % t.value[0]
-    t.skip(1)
-
-import lex
-lex.lex()
-
-def p_statements(p):
-    '''statements : define_stmt
-                  | define_stmt statements
-    '''
-    if len(p) == 2:
-        p[0] = [p[1]]
-    else:
-        p[0] = [p[1]] + [p[2]]
-
-def p_define_stmt(p):
-    # This sucks - corresponds to 'define(`foo',`{ read write }')
-    '''define_stmt : DEFINE OPAREN TICK NAME SQUOTE COMMA TICK list SQUOTE CPAREN
-    '''
-    
-    p[0] = [p[4], p[8]]
-
-def p_list(p):
-    '''list : NAME
-            | OBRACE names CBRACE
-    '''
-    if p[1] == "{":
-        p[0] = p[2]
-    else:
-        p[0] = [p[1]]
-
-def p_names(p):
-    '''names : NAME
-             | NAME names
-    '''
-    if len(p) == 2:
-        p[0] = [p[1]]
-    else:
-        p[0] = [p[1]] + p[2]
-
-def p_error(p):
-    print "Syntax error on line %d %s [type=%s]" % (p.lineno, p.value, p.type)
-    
-import yacc
-yacc.yacc()
-
-
-f = open("all_perms.spt")
-txt = f.read()
-f.close()
-
-#lex.input(txt)
-#while 1:
-#    tok = lex.token()
-#    if not tok:
-#        break
-#    print tok
-
-test = "define(`foo',`{ read write append }')"
-test2 = """define(`all_filesystem_perms',`{ mount remount unmount getattr relabelfrom relabelto transition associate quotamod quotaget }')
-define(`all_security_perms',`{ compute_av compute_create compute_member check_context load_policy compute_relabel compute_user setenforce setbool setsecparam setcheckreqprot }')
-"""
-result = yacc.parse(txt)
-print result
-    
diff --git a/lib/python2.7/site-packages/setoolsgui/sepolgen/defaults.py b/lib/python2.7/site-packages/setoolsgui/sepolgen/defaults.py
deleted file mode 100644
index 218bc7c..0000000
--- a/lib/python2.7/site-packages/setoolsgui/sepolgen/defaults.py
+++ /dev/null
@@ -1,77 +0,0 @@
-# Authors: Karl MacMillan <kmacmillan@mentalrootkit.com>
-#
-# Copyright (C) 2006 Red Hat
-# see file 'COPYING' for use and warranty information
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License as
-# published by the Free Software Foundation; version 2 only
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-#
-
-import os
-import re
-
-# Select the correct location for the development files based on a
-# path variable (optionally read from a configuration file)
-class PathChoooser(object):
-    def __init__(self, pathname):
-        self.config = dict()
-        if not os.path.exists(pathname):
-            self.config_pathname = "(defaults)"
-            self.config["SELINUX_DEVEL_PATH"] = "/usr/share/selinux/default:/usr/share/selinux/mls:/usr/share/selinux/devel"
-            return
-        self.config_pathname = pathname
-        ignore = re.compile(r"^\s*(?:#.+)?$")
-        consider = re.compile(r"^\s*(\w+)\s*=\s*(.+?)\s*$")
-        for lineno, line in enumerate(open(pathname)):
-            if ignore.match(line): continue
-            mo = consider.match(line)
-            if not mo:
-                raise ValueError, "%s:%d: line is not in key = value format" % (pathname, lineno+1)
-            self.config[mo.group(1)] = mo.group(2)
-
-    # We're only exporting one useful function, so why not be a function
-    def __call__(self, testfilename, pathset="SELINUX_DEVEL_PATH"):
-        paths = self.config.get(pathset, None)
-        if paths is None:
-            raise ValueError, "%s was not in %s" % (pathset, self.config_pathname)
-        paths = paths.split(":")
-        for p in paths:
-            target = os.path.join(p, testfilename)
-            if os.path.exists(target): return target
-        return os.path.join(paths[0], testfilename)
-
-
-"""
-Various default settings, including file and directory locations.
-"""
-
-def data_dir():
-    return "/var/lib/sepolgen"
-
-def perm_map():
-    return data_dir() + "/perm_map"
-
-def interface_info():
-    return data_dir() + "/interface_info"
-
-def attribute_info():
-    return data_dir() + "/attribute_info"
-
-def refpolicy_makefile():
-    chooser = PathChoooser("/etc/selinux/sepolgen.conf")
-    return chooser("Makefile")
-
-def headers():
-    chooser = PathChoooser("/etc/selinux/sepolgen.conf")
-    return chooser("include")
-
diff --git a/lib/python2.7/site-packages/setoolsgui/sepolgen/interfaces.py b/lib/python2.7/site-packages/setoolsgui/sepolgen/interfaces.py
deleted file mode 100644
index 88a6dc3..0000000
--- a/lib/python2.7/site-packages/setoolsgui/sepolgen/interfaces.py
+++ /dev/null
@@ -1,509 +0,0 @@
-# Authors: Karl MacMillan <kmacmillan@mentalrootkit.com>
-#
-# Copyright (C) 2006 Red Hat
-# see file 'COPYING' for use and warranty information
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License as
-# published by the Free Software Foundation; version 2 only
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-#
-
-"""
-Classes for representing and manipulating interfaces.
-"""
-
-import access
-import refpolicy
-import itertools
-import objectmodel
-import matching
-
-from sepolgeni18n import _
-
-import copy
-
-class Param:
-    """
-    Object representing a paramater for an interface.
-    """
-    def __init__(self):
-        self.__name = ""
-        self.type = refpolicy.SRC_TYPE
-        self.obj_classes = refpolicy.IdSet()
-        self.required = True
-
-    def set_name(self, name):
-        if not access.is_idparam(name):
-            raise ValueError("Name [%s] is not a param" % name)
-        self.__name = name
-
-    def get_name(self):
-        return self.__name
-
-    name = property(get_name, set_name)
-
-    num = property(fget=lambda self: int(self.name[1:]))
-
-    def __repr__(self):
-        return "<sepolgen.policygen.Param instance [%s, %s, %s]>" % \
-               (self.name, refpolicy.field_to_str[self.type], " ".join(self.obj_classes))
-
-
-# Helper for extract perms
-def __param_insert(name, type, av, params):
-    ret = 0
-    if name in params:
-        p = params[name]
-        # The entries are identical - we're done
-        if type == p.type:
-            return
-        # Hanldle implicitly typed objects (like process)
-        if (type == refpolicy.SRC_TYPE or type == refpolicy.TGT_TYPE) and \
-           (p.type == refpolicy.TGT_TYPE or p.type == refpolicy.SRC_TYPE):
-            #print name, refpolicy.field_to_str[p.type]
-            # If the object is not implicitly typed, tell the
-            # caller there is a likely conflict.
-            ret = 1
-            if av:
-                avobjs = [av.obj_class]
-            else:
-                avobjs = []
-            for obj in itertools.chain(p.obj_classes, avobjs):
-                if obj in objectmodel.implicitly_typed_objects:
-                    ret = 0
-                    break
-            # "Promote" to a SRC_TYPE as this is the likely usage.
-            # We do this even if the above test fails on purpose
-            # as there is really no sane way to resolve the conflict
-            # here. The caller can take other actions if needed.
-            p.type = refpolicy.SRC_TYPE
-        else:
-            # There is some conflict - no way to resolve it really
-            # so we just leave the first entry and tell the caller
-            # there was a conflict.
-            ret = 1
-    else:
-        p = Param()
-        p.name = name
-        p.type = type
-        params[p.name] = p
-
-    if av:
-        p.obj_classes.add(av.obj_class)
-    return ret
-
-
-
-def av_extract_params(av, params):
-    """Extract the paramaters from an access vector.
-
-    Extract the paramaters (in the form $N) from an access
-    vector, storing them as Param objects in a dictionary.
-    Some attempt is made at resolving conflicts with other
-    entries in the dict, but if an unresolvable conflict is
-    found it is reported to the caller.
-
-    The goal here is to figure out how interface paramaters are
-    actually used in the interface - e.g., that $1 is a domain used as
-    a SRC_TYPE. In general an interface will look like this:
-
-    interface(`foo', `
-       allow $1 foo : file read;
-    ')
-
-    This is simple to figure out - $1 is a SRC_TYPE. A few interfaces
-    are more complex, for example:
-
-    interface(`foo_trans',`
-       domain_auto_trans($1,fingerd_exec_t,fingerd_t)
-
-       allow $1 fingerd_t:fd use;
-       allow fingerd_t $1:fd use;
-       allow fingerd_t $1:fifo_file rw_file_perms;
-       allow fingerd_t $1:process sigchld;
-    ')
-
-    Here the usage seems ambigious, but it is not. $1 is still domain
-    and therefore should be returned as a SRC_TYPE.
-
-    Returns:
-      0  - success
-      1  - conflict found
-    """
-    ret = 0
-    found_src = False
-    if access.is_idparam(av.src_type):
-        if __param_insert(av.src_type, refpolicy.SRC_TYPE, av, params) == 1:
-            ret = 1
-
-    if access.is_idparam(av.tgt_type):
-        if __param_insert(av.tgt_type, refpolicy.TGT_TYPE, av, params) == 1:
-            ret = 1
-
-    if access.is_idparam(av.obj_class):
-        if __param_insert(av.obj_class, refpolicy.OBJ_CLASS, av, params) == 1:
-            ret = 1
-
-    for perm in av.perms:
-        if access.is_idparam(perm):
-            if __param_insert(perm, PERM) == 1:
-                ret = 1
-
-    return ret
-
-def role_extract_params(role, params):
-    if access.is_idparam(role.role):
-        return __param_insert(role.role, refpolicy.ROLE, None, params)
-    
-def type_rule_extract_params(rule, params):
-    def extract_from_set(set, type):
-        ret = 0
-        for x in set:
-            if access.is_idparam(x):
-                if __param_insert(x, type, None, params):
-                    ret = 1
-        return ret
-
-    ret = 0
-    if extract_from_set(rule.src_types, refpolicy.SRC_TYPE):
-        ret = 1
-
-    if extract_from_set(rule.tgt_types, refpolicy.TGT_TYPE):
-        ret = 1
-        
-    if extract_from_set(rule.obj_classes, refpolicy.OBJ_CLASS):
-        ret = 1
-
-    if access.is_idparam(rule.dest_type):
-        if __param_insert(rule.dest_type, refpolicy.DEST_TYPE, None, params):
-            ret = 1
-            
-    return ret
-
-def ifcall_extract_params(ifcall, params):
-    ret = 0
-    for arg in ifcall.args:
-        if access.is_idparam(arg):
-            # Assume interface arguments are source types. Fairly safe
-            # assumption for most interfaces
-            if __param_insert(arg, refpolicy.SRC_TYPE, None, params):
-                ret = 1
-
-    return ret
-
-class AttributeVector:
-    def __init__(self):
-        self.name = ""
-        self.access = access.AccessVectorSet()
-
-    def add_av(self, av):
-        self.access.add_av(av)
-
-class AttributeSet:
-    def __init__(self):
-        self.attributes = { }
-
-    def add_attr(self, attr):
-        self.attributes[attr.name] = attr
-
-    def from_file(self, fd):
-        def parse_attr(line):
-            fields = line[1:-1].split()
-            if len(fields) != 2 or fields[0] != "Attribute":
-                raise SyntaxError("Syntax error Attribute statement %s" % line)
-            a = AttributeVector()
-            a.name = fields[1]
-
-            return a
-
-        a = None
-        for line in fd:
-            line = line[:-1]
-            if line[0] == "[":
-                if a:
-                    self.add_attr(a)
-                a = parse_attr(line)
-            elif a:
-                l = line.split(",")
-                av = access.AccessVector(l)
-                a.add_av(av)
-        if a:
-            self.add_attr(a)
-
-class InterfaceVector:
-    def __init__(self, interface=None, attributes={}):
-        # Enabled is a loose concept currently - we are essentially
-        # not enabling interfaces that we can't handle currently.
-        # See InterfaceVector.add_ifv for more information.
-        self.enabled = True
-        self.name = ""
-        # The access that is enabled by this interface - eventually
-        # this will include indirect access from typeattribute
-        # statements.
-        self.access = access.AccessVectorSet()
-        # Paramaters are stored in a dictionary (key: param name
-        # value: Param object).
-        self.params = { }
-        if interface:
-            self.from_interface(interface, attributes)
-        self.expanded = False
-
-    def from_interface(self, interface, attributes={}):
-        self.name = interface.name
-
-        # Add allow rules
-        for avrule in interface.avrules():
-            if avrule.rule_type != refpolicy.AVRule.ALLOW:
-                continue
-            # Handle some policy bugs
-            if "dontaudit" in interface.name:
-                #print "allow rule in interface: %s" % interface
-                continue
-            avs = access.avrule_to_access_vectors(avrule)
-            for av in avs:
-                self.add_av(av)
-
-        # Add typeattribute access
-        if attributes:
-            for typeattribute in interface.typeattributes():
-                for attr in typeattribute.attributes:
-                    if not attributes.attributes.has_key(attr):
-                        # print "missing attribute " + attr
-                        continue
-                    attr_vec = attributes.attributes[attr]
-                    for a in attr_vec.access:
-                        av = copy.copy(a)
-                        if av.src_type == attr_vec.name:
-                            av.src_type = typeattribute.type
-                        if av.tgt_type == attr_vec.name:
-                            av.tgt_type = typeattribute.type
-                        self.add_av(av)
-
-
-        # Extract paramaters from roles
-        for role in interface.roles():
-            if role_extract_params(role, self.params):
-                pass
-                #print "found conflicting role param %s for interface %s" % \
-                #      (role.name, interface.name)
-        # Extract paramaters from type rules
-        for rule in interface.typerules():
-            if type_rule_extract_params(rule, self.params):
-                pass
-                #print "found conflicting params in rule %s in interface %s" % \
-                #      (str(rule), interface.name)
-
-        for ifcall in interface.interface_calls():
-            if ifcall_extract_params(ifcall, self.params):
-                pass
-                #print "found conflicting params in ifcall %s in interface %s" % \
-                #      (str(ifcall), interface.name)
-            
-
-    def add_av(self, av):
-        if av_extract_params(av, self.params) == 1:
-            pass
-            #print "found conflicting perms [%s]" % str(av)
-        self.access.add_av(av)
-
-    def to_string(self):
-        s = []
-        s.append("[InterfaceVector %s]" % self.name)
-        for av in self.access:
-            s.append(str(av))
-        return "\n".join(s)
-
-    def __str__(self):
-        return self.__repr__()
-
-    def __repr__(self):
-        return "<InterfaceVector %s:%s>" % (self.name, self.enabled)
-
-
-class InterfaceSet:
-    def __init__(self, output=None):
-        self.interfaces = { }
-        self.tgt_type_map = { }
-        self.tgt_type_all = []
-        self.output = output
-
-    def o(self, str):
-        if self.output:
-            self.output.write(str + "\n")
-
-    def to_file(self, fd):
-        for iv in self.interfaces.values():
-            fd.write("[InterfaceVector %s " % iv.name)
-            for param in iv.params.values():
-                fd.write("%s:%s " % (param.name, refpolicy.field_to_str[param.type]))
-            fd.write("]\n")
-            avl = iv.access.to_list()
-            for av in avl:
-                fd.write(",".join(av))
-                fd.write("\n")
-
-    def from_file(self, fd):
-        def parse_ifv(line):
-            fields = line[1:-1].split()
-            if len(fields) < 2 or fields[0] != "InterfaceVector":
-                raise SyntaxError("Syntax error InterfaceVector statement %s" % line)
-            ifv = InterfaceVector()
-            ifv.name = fields[1]
-            if len(fields) == 2:
-                return
-            for field in fields[2:]:
-                p = field.split(":")
-                if len(p) != 2:
-                    raise SyntaxError("Invalid param in InterfaceVector statement %s" % line)
-                param = Param()
-                param.name = p[0]
-                param.type = refpolicy.str_to_field[p[1]]
-                ifv.params[param.name] = param
-            return ifv
-
-        ifv = None
-        for line in fd:
-            line = line[:-1]
-            if line[0] == "[":
-                if ifv:
-                    self.add_ifv(ifv)
-                ifv = parse_ifv(line)
-            elif ifv:
-                l = line.split(",")
-                av = access.AccessVector(l)
-                ifv.add_av(av)
-        if ifv:
-            self.add_ifv(ifv)
-
-        self.index()
-
-    def add_ifv(self, ifv):
-        self.interfaces[ifv.name] = ifv
-
-    def index(self):
-        for ifv in self.interfaces.values():
-            tgt_types = set()
-            for av in ifv.access:
-                if access.is_idparam(av.tgt_type):
-                    self.tgt_type_all.append(ifv)
-                    tgt_types = set()
-                    break
-                tgt_types.add(av.tgt_type)
-
-            for type in tgt_types:
-                l = self.tgt_type_map.setdefault(type, [])
-                l.append(ifv)
-
-    def add(self, interface, attributes={}):
-        ifv = InterfaceVector(interface, attributes)
-        self.add_ifv(ifv)
-
-    def add_headers(self, headers, output=None, attributes={}):
-        for i in itertools.chain(headers.interfaces(), headers.templates()):
-            self.add(i, attributes)
-
-        self.expand_ifcalls(headers)
-        self.index()
-
-    def map_param(self, id, ifcall):
-        if access.is_idparam(id):
-            num = int(id[1:])
-            if num > len(ifcall.args):
-                # Tell caller to drop this because it must have
-                # been generated from an optional param.
-                return None
-            else:
-                arg = ifcall.args[num - 1]
-                if isinstance(arg, list):
-                    return arg
-                else:
-                    return [arg]
-        else:
-            return [id]
-
-    def map_add_av(self, ifv, av, ifcall):
-        src_types = self.map_param(av.src_type, ifcall)
-        if src_types is None:
-            return
-
-        tgt_types = self.map_param(av.tgt_type, ifcall)
-        if tgt_types is None:
-            return
-
-        obj_classes = self.map_param(av.obj_class, ifcall)
-        if obj_classes is None:
-            return
-
-        new_perms = refpolicy.IdSet()
-        for perm in av.perms:
-            p = self.map_param(perm, ifcall)
-            if p is None:
-                continue
-            else:
-                new_perms.update(p)
-        if len(new_perms) == 0:
-            return
-
-        for src_type in src_types:
-            for tgt_type in tgt_types:
-                for obj_class in obj_classes:
-                    ifv.access.add(src_type, tgt_type, obj_class, new_perms)
-
-    def do_expand_ifcalls(self, interface, if_by_name):
-        # Descend an interface call tree adding the access
-        # from each interface. This is a depth first walk
-        # of the tree.
-
-        stack = [(interface, None)]
-        ifv = self.interfaces[interface.name]
-        ifv.expanded = True
-
-        while len(stack) > 0:
-            cur, cur_ifcall = stack.pop(-1)
-
-            cur_ifv = self.interfaces[cur.name]
-            if cur != interface:
-
-                for av in cur_ifv.access:
-                    self.map_add_av(ifv, av, cur_ifcall)
-
-                # If we have already fully expanded this interface
-                # there is no reason to descend further.
-                if cur_ifv.expanded:
-                    continue
-
-            for ifcall in cur.interface_calls():
-                if ifcall.ifname == interface.name:
-                    self.o(_("Found circular interface class"))
-                    return
-                try:
-                    newif = if_by_name[ifcall.ifname]
-                except KeyError:
-                    self.o(_("Missing interface definition for %s" % ifcall.ifname))
-                    continue
-
-                stack.append((newif, ifcall))
-
-
-    def expand_ifcalls(self, headers):
-        # Create a map of interface names to interfaces -
-        # this mirrors the interface vector map we already
-        # have.
-        if_by_name = { }
-
-        for i in itertools.chain(headers.interfaces(), headers.templates()):
-            if_by_name[i.name] = i
-
-
-        for interface in itertools.chain(headers.interfaces(), headers.templates()):
-            self.do_expand_ifcalls(interface, if_by_name)
-
diff --git a/lib/python2.7/site-packages/setoolsgui/sepolgen/lex.py b/lib/python2.7/site-packages/setoolsgui/sepolgen/lex.py
deleted file mode 100644
index c149366..0000000
--- a/lib/python2.7/site-packages/setoolsgui/sepolgen/lex.py
+++ /dev/null
@@ -1,866 +0,0 @@
-#-----------------------------------------------------------------------------
-# ply: lex.py
-#
-# Author: David M. Beazley (dave@dabeaz.com)
-#
-# Copyright (C) 2001-2006, David M. Beazley
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-# 
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-# 
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-# 
-# See the file COPYING for a complete copy of the LGPL.
-#-----------------------------------------------------------------------------
-
-__version__ = "2.2"
-
-import re, sys, types
-
-# Regular expression used to match valid token names
-_is_identifier = re.compile(r'^[a-zA-Z0-9_]+$')
-
-# Available instance types.  This is used when lexers are defined by a class.
-# It's a little funky because I want to preserve backwards compatibility
-# with Python 2.0 where types.ObjectType is undefined.
-
-try:
-   _INSTANCETYPE = (types.InstanceType, types.ObjectType)
-except AttributeError:
-   _INSTANCETYPE = types.InstanceType
-   class object: pass       # Note: needed if no new-style classes present
-
-# Exception thrown when invalid token encountered and no default error
-# handler is defined.
-class LexError(Exception):
-    def __init__(self,message,s):
-         self.args = (message,)
-         self.text = s
-
-# Token class
-class LexToken(object):
-    def __str__(self):
-        return "LexToken(%s,%r,%d,%d)" % (self.type,self.value,self.lineno,self.lexpos)
-    def __repr__(self):
-        return str(self)
-    def skip(self,n):
-        self.lexer.skip(n)
-
-# -----------------------------------------------------------------------------
-# Lexer class
-#
-# This class encapsulates all of the methods and data associated with a lexer.
-#
-#    input()          -  Store a new string in the lexer
-#    token()          -  Get the next token
-# -----------------------------------------------------------------------------
-
-class Lexer:
-    def __init__(self):
-        self.lexre = None             # Master regular expression. This is a list of 
-                                      # tuples (re,findex) where re is a compiled
-                                      # regular expression and findex is a list
-                                      # mapping regex group numbers to rules
-        self.lexretext = None         # Current regular expression strings
-        self.lexstatere = {}          # Dictionary mapping lexer states to master regexs
-        self.lexstateretext = {}      # Dictionary mapping lexer states to regex strings
-        self.lexstate = "INITIAL"     # Current lexer state
-        self.lexstatestack = []       # Stack of lexer states
-        self.lexstateinfo = None      # State information
-        self.lexstateignore = {}      # Dictionary of ignored characters for each state
-        self.lexstateerrorf = {}      # Dictionary of error functions for each state
-        self.lexreflags = 0           # Optional re compile flags
-        self.lexdata = None           # Actual input data (as a string)
-        self.lexpos = 0               # Current position in input text
-        self.lexlen = 0               # Length of the input text
-        self.lexerrorf = None         # Error rule (if any)
-        self.lextokens = None         # List of valid tokens
-        self.lexignore = ""           # Ignored characters
-        self.lexliterals = ""         # Literal characters that can be passed through
-        self.lexmodule = None         # Module
-        self.lineno = 1               # Current line number
-        self.lexdebug = 0             # Debugging mode
-        self.lexoptimize = 0          # Optimized mode
-
-    def clone(self,object=None):
-        c = Lexer()
-        c.lexstatere = self.lexstatere
-        c.lexstateinfo = self.lexstateinfo
-        c.lexstateretext = self.lexstateretext
-        c.lexstate = self.lexstate
-        c.lexstatestack = self.lexstatestack
-        c.lexstateignore = self.lexstateignore
-        c.lexstateerrorf = self.lexstateerrorf
-        c.lexreflags = self.lexreflags
-        c.lexdata = self.lexdata
-        c.lexpos = self.lexpos
-        c.lexlen = self.lexlen
-        c.lextokens = self.lextokens
-        c.lexdebug = self.lexdebug
-        c.lineno = self.lineno
-        c.lexoptimize = self.lexoptimize
-        c.lexliterals = self.lexliterals
-        c.lexmodule   = self.lexmodule
-
-        # If the object parameter has been supplied, it means we are attaching the
-        # lexer to a new object.  In this case, we have to rebind all methods in
-        # the lexstatere and lexstateerrorf tables.
-
-        if object:
-            newtab = { }
-            for key, ritem in self.lexstatere.items():
-                newre = []
-                for cre, findex in ritem:
-                     newfindex = []
-                     for f in findex:
-                         if not f or not f[0]:
-                             newfindex.append(f)
-                             continue
-                         newfindex.append((getattr(object,f[0].__name__),f[1]))
-                newre.append((cre,newfindex))
-                newtab[key] = newre
-            c.lexstatere = newtab
-            c.lexstateerrorf = { }
-            for key, ef in self.lexstateerrorf.items():
-                c.lexstateerrorf[key] = getattr(object,ef.__name__)
-            c.lexmodule = object
-
-        # Set up other attributes
-        c.begin(c.lexstate)
-        return c
-
-    # ------------------------------------------------------------
-    # writetab() - Write lexer information to a table file
-    # ------------------------------------------------------------
-    def writetab(self,tabfile):
-        tf = open(tabfile+".py","w")
-        tf.write("# %s.py. This file automatically created by PLY (version %s). Don't edit!\n" % (tabfile,__version__))
-        tf.write("_lextokens    = %s\n" % repr(self.lextokens))
-        tf.write("_lexreflags   = %s\n" % repr(self.lexreflags))
-        tf.write("_lexliterals  = %s\n" % repr(self.lexliterals))
-        tf.write("_lexstateinfo = %s\n" % repr(self.lexstateinfo))
-        
-        tabre = { }
-        for key, lre in self.lexstatere.items():
-             titem = []
-             for i in range(len(lre)):
-                  titem.append((self.lexstateretext[key][i],_funcs_to_names(lre[i][1])))
-             tabre[key] = titem
-
-        tf.write("_lexstatere   = %s\n" % repr(tabre))
-        tf.write("_lexstateignore = %s\n" % repr(self.lexstateignore))
-
-        taberr = { }
-        for key, ef in self.lexstateerrorf.items():
-             if ef:
-                  taberr[key] = ef.__name__
-             else:
-                  taberr[key] = None
-        tf.write("_lexstateerrorf = %s\n" % repr(taberr))
-        tf.close()
-
-    # ------------------------------------------------------------
-    # readtab() - Read lexer information from a tab file
-    # ------------------------------------------------------------
-    def readtab(self,tabfile,fdict):
-        exec "import %s as lextab" % tabfile
-        self.lextokens      = lextab._lextokens
-        self.lexreflags     = lextab._lexreflags
-        self.lexliterals    = lextab._lexliterals
-        self.lexstateinfo   = lextab._lexstateinfo
-        self.lexstateignore = lextab._lexstateignore
-        self.lexstatere     = { }
-        self.lexstateretext = { }
-        for key,lre in lextab._lexstatere.items():
-             titem = []
-             txtitem = []
-             for i in range(len(lre)):
-                  titem.append((re.compile(lre[i][0],lextab._lexreflags),_names_to_funcs(lre[i][1],fdict)))
-                  txtitem.append(lre[i][0])
-             self.lexstatere[key] = titem
-             self.lexstateretext[key] = txtitem
-        self.lexstateerrorf = { }
-        for key,ef in lextab._lexstateerrorf.items():
-             self.lexstateerrorf[key] = fdict[ef]
-        self.begin('INITIAL')
-         
-    # ------------------------------------------------------------
-    # input() - Push a new string into the lexer
-    # ------------------------------------------------------------
-    def input(self,s):
-        if not (isinstance(s,types.StringType) or isinstance(s,types.UnicodeType)):
-            raise ValueError, "Expected a string"
-        self.lexdata = s
-        self.lexpos = 0
-        self.lexlen = len(s)
-
-    # ------------------------------------------------------------
-    # begin() - Changes the lexing state
-    # ------------------------------------------------------------
-    def begin(self,state):
-        if not self.lexstatere.has_key(state):
-            raise ValueError, "Undefined state"
-        self.lexre = self.lexstatere[state]
-        self.lexretext = self.lexstateretext[state]
-        self.lexignore = self.lexstateignore.get(state,"")
-        self.lexerrorf = self.lexstateerrorf.get(state,None)
-        self.lexstate = state
-
-    # ------------------------------------------------------------
-    # push_state() - Changes the lexing state and saves old on stack
-    # ------------------------------------------------------------
-    def push_state(self,state):
-        self.lexstatestack.append(self.lexstate)
-        self.begin(state)
-
-    # ------------------------------------------------------------
-    # pop_state() - Restores the previous state
-    # ------------------------------------------------------------
-    def pop_state(self):
-        self.begin(self.lexstatestack.pop())
-
-    # ------------------------------------------------------------
-    # current_state() - Returns the current lexing state
-    # ------------------------------------------------------------
-    def current_state(self):
-        return self.lexstate
-
-    # ------------------------------------------------------------
-    # skip() - Skip ahead n characters
-    # ------------------------------------------------------------
-    def skip(self,n):
-        self.lexpos += n
-
-    # ------------------------------------------------------------
-    # token() - Return the next token from the Lexer
-    #
-    # Note: This function has been carefully implemented to be as fast
-    # as possible.  Don't make changes unless you really know what
-    # you are doing
-    # ------------------------------------------------------------
-    def token(self):
-        # Make local copies of frequently referenced attributes
-        lexpos    = self.lexpos
-        lexlen    = self.lexlen
-        lexignore = self.lexignore
-        lexdata   = self.lexdata
-
-        while lexpos < lexlen:
-            # This code provides some short-circuit code for whitespace, tabs, and other ignored characters
-            if lexdata[lexpos] in lexignore:
-                lexpos += 1
-                continue
-
-            # Look for a regular expression match
-            for lexre,lexindexfunc in self.lexre:
-                m = lexre.match(lexdata,lexpos)
-                if not m: continue
-
-                # Set last match in lexer so that rules can access it if they want
-                self.lexmatch = m
-
-                # Create a token for return
-                tok = LexToken()
-                tok.value = m.group()
-                tok.lineno = self.lineno
-                tok.lexpos = lexpos
-                tok.lexer = self
-
-                lexpos = m.end()
-                i = m.lastindex
-                func,tok.type = lexindexfunc[i]
-                self.lexpos = lexpos
-
-                if not func:
-                   # If no token type was set, it's an ignored token
-                   if tok.type: return tok      
-                   break
-
-                # if func not callable, it means it's an ignored token                
-                if not callable(func):
-                   break 
-
-                # If token is processed by a function, call it
-                newtok = func(tok)
-                
-                # Every function must return a token, if nothing, we just move to next token
-                if not newtok: 
-                    lexpos = self.lexpos        # This is here in case user has updated lexpos.
-                    break
-                
-                # Verify type of the token.  If not in the token map, raise an error
-                if not self.lexoptimize:
-                    if not self.lextokens.has_key(newtok.type):
-                        raise LexError, ("%s:%d: Rule '%s' returned an unknown token type '%s'" % (
-                            func.func_code.co_filename, func.func_code.co_firstlineno,
-                            func.__name__, newtok.type),lexdata[lexpos:])
-
-                return newtok
-            else:
-                # No match, see if in literals
-                if lexdata[lexpos] in self.lexliterals:
-                    tok = LexToken()
-                    tok.value = lexdata[lexpos]
-                    tok.lineno = self.lineno
-                    tok.lexer = self
-                    tok.type = tok.value
-                    tok.lexpos = lexpos
-                    self.lexpos = lexpos + 1
-                    return tok
-        
-                # No match. Call t_error() if defined.
-                if self.lexerrorf:
-                    tok = LexToken()
-                    tok.value = self.lexdata[lexpos:]
-                    tok.lineno = self.lineno
-                    tok.type = "error"
-                    tok.lexer = self
-                    tok.lexpos = lexpos
-                    self.lexpos = lexpos
-                    newtok = self.lexerrorf(tok)
-                    if lexpos == self.lexpos:
-                        # Error method didn't change text position at all. This is an error.
-                        raise LexError, ("Scanning error. Illegal character '%s'" % (lexdata[lexpos]), lexdata[lexpos:])
-                    lexpos = self.lexpos
-                    if not newtok: continue
-                    return newtok
-
-                self.lexpos = lexpos
-                raise LexError, ("Illegal character '%s' at index %d" % (lexdata[lexpos],lexpos), lexdata[lexpos:])
-
-        self.lexpos = lexpos + 1
-        if self.lexdata is None:
-             raise RuntimeError, "No input string given with input()"
-        return None
-        
-# -----------------------------------------------------------------------------
-# _validate_file()
-#
-# This checks to see if there are duplicated t_rulename() functions or strings
-# in the parser input file.  This is done using a simple regular expression
-# match on each line in the filename.
-# -----------------------------------------------------------------------------
-
-def _validate_file(filename):
-    import os.path
-    base,ext = os.path.splitext(filename)
-    if ext != '.py': return 1        # No idea what the file is. Return OK
-
-    try:
-        f = open(filename)
-        lines = f.readlines()
-        f.close()
-    except IOError:
-        return 1                       # Oh well
-
-    fre = re.compile(r'\s*def\s+(t_[a-zA-Z_0-9]*)\(')
-    sre = re.compile(r'\s*(t_[a-zA-Z_0-9]*)\s*=')
-    counthash = { }
-    linen = 1
-    noerror = 1
-    for l in lines:
-        m = fre.match(l)
-        if not m:
-            m = sre.match(l)
-        if m:
-            name = m.group(1)
-            prev = counthash.get(name)
-            if not prev:
-                counthash[name] = linen
-            else:
-                print "%s:%d: Rule %s redefined. Previously defined on line %d" % (filename,linen,name,prev)
-                noerror = 0
-        linen += 1
-    return noerror
-
-# -----------------------------------------------------------------------------
-# _funcs_to_names()
-#
-# Given a list of regular expression functions, this converts it to a list
-# suitable for output to a table file
-# -----------------------------------------------------------------------------
-
-def _funcs_to_names(funclist):
-    result = []
-    for f in funclist:
-         if f and f[0]:
-             result.append((f[0].__name__,f[1]))
-         else:
-             result.append(f)
-    return result
-
-# -----------------------------------------------------------------------------
-# _names_to_funcs()
-#
-# Given a list of regular expression function names, this converts it back to
-# functions.
-# -----------------------------------------------------------------------------
-
-def _names_to_funcs(namelist,fdict):
-     result = []
-     for n in namelist:
-          if n and n[0]:
-              result.append((fdict[n[0]],n[1]))
-          else:
-              result.append(n)
-     return result
-
-# -----------------------------------------------------------------------------
-# _form_master_re()
-#
-# This function takes a list of all of the regex components and attempts to
-# form the master regular expression.  Given limitations in the Python re
-# module, it may be necessary to break the master regex into separate expressions.
-# -----------------------------------------------------------------------------
-
-def _form_master_re(relist,reflags,ldict):
-    if not relist: return []
-    regex = "|".join(relist)
-    try:
-        lexre = re.compile(regex,re.VERBOSE | reflags)
-
-        # Build the index to function map for the matching engine
-        lexindexfunc = [ None ] * (max(lexre.groupindex.values())+1)
-        for f,i in lexre.groupindex.items():
-            handle = ldict.get(f,None)
-            if type(handle) in (types.FunctionType, types.MethodType):
-                lexindexfunc[i] = (handle,handle.__name__[2:])
-            elif handle is not None:
-                # If rule was specified as a string, we build an anonymous
-                # callback function to carry out the action
-                if f.find("ignore_") > 0:
-                    lexindexfunc[i] = (None,None)
-                    print "IGNORE", f
-                else:
-                    lexindexfunc[i] = (None, f[2:])
-         
-        return [(lexre,lexindexfunc)],[regex]
-    except Exception,e:
-        m = int(len(relist)/2)
-        if m == 0: m = 1
-        llist, lre = _form_master_re(relist[:m],reflags,ldict)
-        rlist, rre = _form_master_re(relist[m:],reflags,ldict)
-        return llist+rlist, lre+rre
-
-# -----------------------------------------------------------------------------
-# def _statetoken(s,names)
-#
-# Given a declaration name s of the form "t_" and a dictionary whose keys are
-# state names, this function returns a tuple (states,tokenname) where states
-# is a tuple of state names and tokenname is the name of the token.  For example,
-# calling this with s = "t_foo_bar_SPAM" might return (('foo','bar'),'SPAM')
-# -----------------------------------------------------------------------------
-
-def _statetoken(s,names):
-    nonstate = 1
-    parts = s.split("_")
-    for i in range(1,len(parts)):
-         if not names.has_key(parts[i]) and parts[i] != 'ANY': break
-    if i > 1:
-       states = tuple(parts[1:i])
-    else:
-       states = ('INITIAL',)
-
-    if 'ANY' in states:
-       states = tuple(names.keys())
-      
-    tokenname = "_".join(parts[i:])
-    return (states,tokenname)
-
-# -----------------------------------------------------------------------------
-# lex(module)
-#
-# Build all of the regular expression rules from definitions in the supplied module
-# -----------------------------------------------------------------------------
-def lex(module=None,object=None,debug=0,optimize=0,lextab="lextab",reflags=0,nowarn=0):
-    global lexer
-    ldict = None
-    stateinfo  = { 'INITIAL' : 'inclusive'}
-    error = 0
-    files = { }
-    lexobj = Lexer()
-    lexobj.lexdebug = debug
-    lexobj.lexoptimize = optimize
-    global token,input
-
-    if nowarn: warn = 0
-    else: warn = 1
-    
-    if object: module = object
-
-    if module:
-        # User supplied a module object.
-        if isinstance(module, types.ModuleType):
-            ldict = module.__dict__
-        elif isinstance(module, _INSTANCETYPE):
-            _items = [(k,getattr(module,k)) for k in dir(module)]
-            ldict = { }
-            for (i,v) in _items:
-                ldict[i] = v
-        else:
-            raise ValueError,"Expected a module or instance"
-        lexobj.lexmodule = module
-        
-    else:
-        # No module given.  We might be able to get information from the caller.
-        try:
-            raise RuntimeError
-        except RuntimeError:
-            e,b,t = sys.exc_info()
-            f = t.tb_frame
-            f = f.f_back           # Walk out to our calling function
-            ldict = f.f_globals    # Grab its globals dictionary
-
-    if optimize and lextab:
-        try:
-            lexobj.readtab(lextab,ldict)
-            token = lexobj.token
-            input = lexobj.input
-            lexer = lexobj
-            return lexobj
-        
-        except ImportError:
-            pass
-        
-    # Get the tokens, states, and literals variables (if any)
-    if (module and isinstance(module,_INSTANCETYPE)):
-        tokens   = getattr(module,"tokens",None)
-        states   = getattr(module,"states",None)
-        literals = getattr(module,"literals","")
-    else:
-        tokens   = ldict.get("tokens",None)
-        states   = ldict.get("states",None)
-        literals = ldict.get("literals","")
-        
-    if not tokens:
-        raise SyntaxError,"lex: module does not define 'tokens'"
-    if not (isinstance(tokens,types.ListType) or isinstance(tokens,types.TupleType)):
-        raise SyntaxError,"lex: tokens must be a list or tuple."
-
-    # Build a dictionary of valid token names
-    lexobj.lextokens = { }
-    if not optimize:
-        for n in tokens:
-            if not _is_identifier.match(n):
-                print "lex: Bad token name '%s'" % n
-                error = 1
-            if warn and lexobj.lextokens.has_key(n):
-                print "lex: Warning. Token '%s' multiply defined." % n
-            lexobj.lextokens[n] = None
-    else:
-        for n in tokens: lexobj.lextokens[n] = None
-
-    if debug:
-        print "lex: tokens = '%s'" % lexobj.lextokens.keys()
-
-    try:
-         for c in literals:
-               if not (isinstance(c,types.StringType) or isinstance(c,types.UnicodeType)) or len(c) > 1:
-                    print "lex: Invalid literal %s. Must be a single character" % repr(c)
-                    error = 1
-                    continue
-
-    except TypeError:
-         print "lex: Invalid literals specification. literals must be a sequence of characters."
-         error = 1
-
-    lexobj.lexliterals = literals
-
-    # Build statemap
-    if states:
-         if not (isinstance(states,types.TupleType) or isinstance(states,types.ListType)):
-              print "lex: states must be defined as a tuple or list."
-              error = 1
-         else:
-              for s in states:
-                    if not isinstance(s,types.TupleType) or len(s) != 2:
-                           print "lex: invalid state specifier %s. Must be a tuple (statename,'exclusive|inclusive')" % repr(s)
-                           error = 1
-                           continue
-                    name, statetype = s
-                    if not isinstance(name,types.StringType):
-                           print "lex: state name %s must be a string" % repr(name)
-                           error = 1
-                           continue
-                    if not (statetype == 'inclusive' or statetype == 'exclusive'):
-                           print "lex: state type for state %s must be 'inclusive' or 'exclusive'" % name
-                           error = 1
-                           continue
-                    if stateinfo.has_key(name):
-                           print "lex: state '%s' already defined." % name
-                           error = 1
-                           continue
-                    stateinfo[name] = statetype
-
-    # Get a list of symbols with the t_ or s_ prefix
-    tsymbols = [f for f in ldict.keys() if f[:2] == 't_' ]
-
-    # Now build up a list of functions and a list of strings
-
-    funcsym =  { }        # Symbols defined as functions
-    strsym =   { }        # Symbols defined as strings
-    toknames = { }        # Mapping of symbols to token names
-
-    for s in stateinfo.keys():
-         funcsym[s] = []
-         strsym[s] = []
-
-    ignore   = { }        # Ignore strings by state
-    errorf   = { }        # Error functions by state
-
-    if len(tsymbols) == 0:
-        raise SyntaxError,"lex: no rules of the form t_rulename are defined."
-
-    for f in tsymbols:
-        t = ldict[f]
-        states, tokname = _statetoken(f,stateinfo)
-        toknames[f] = tokname
-
-        if callable(t):
-            for s in states: funcsym[s].append((f,t))
-        elif (isinstance(t, types.StringType) or isinstance(t,types.UnicodeType)):
-            for s in states: strsym[s].append((f,t))
-        else:
-            print "lex: %s not defined as a function or string" % f
-            error = 1
-
-    # Sort the functions by line number
-    for f in funcsym.values():
-        f.sort(lambda x,y: cmp(x[1].func_code.co_firstlineno,y[1].func_code.co_firstlineno))
-
-    # Sort the strings by regular expression length
-    for s in strsym.values():
-        s.sort(lambda x,y: (len(x[1]) < len(y[1])) - (len(x[1]) > len(y[1])))
-
-    regexs = { }
-
-    # Build the master regular expressions
-    for state in stateinfo.keys():
-        regex_list = []
-
-        # Add rules defined by functions first
-        for fname, f in funcsym[state]:
-            line = f.func_code.co_firstlineno
-            file = f.func_code.co_filename
-            files[file] = None
-            tokname = toknames[fname]
-
-            ismethod = isinstance(f, types.MethodType)
-
-            if not optimize:
-                nargs = f.func_code.co_argcount
-                if ismethod:
-                    reqargs = 2
-                else:
-                    reqargs = 1
-                if nargs > reqargs:
-                    print "%s:%d: Rule '%s' has too many arguments." % (file,line,f.__name__)
-                    error = 1
-                    continue
-
-                if nargs < reqargs:
-                    print "%s:%d: Rule '%s' requires an argument." % (file,line,f.__name__)
-                    error = 1
-                    continue
-
-                if tokname == 'ignore':
-                    print "%s:%d: Rule '%s' must be defined as a string." % (file,line,f.__name__)
-                    error = 1
-                    continue
-        
-            if tokname == 'error':
-                errorf[state] = f
-                continue
-
-            if f.__doc__:
-                if not optimize:
-                    try:
-                        c = re.compile("(?P<%s>%s)" % (f.__name__,f.__doc__), re.VERBOSE | reflags)
-                        if c.match(""):
-                             print "%s:%d: Regular expression for rule '%s' matches empty string." % (file,line,f.__name__)
-                             error = 1
-                             continue
-                    except re.error,e:
-                        print "%s:%d: Invalid regular expression for rule '%s'. %s" % (file,line,f.__name__,e)
-                        if '#' in f.__doc__:
-                             print "%s:%d. Make sure '#' in rule '%s' is escaped with '\\#'." % (file,line, f.__name__)                 
-                        error = 1
-                        continue
-
-                    if debug:
-                        print "lex: Adding rule %s -> '%s' (state '%s')" % (f.__name__,f.__doc__, state)
-
-                # Okay. The regular expression seemed okay.  Let's append it to the master regular
-                # expression we're building
-  
-                regex_list.append("(?P<%s>%s)" % (f.__name__,f.__doc__))
-            else:
-                print "%s:%d: No regular expression defined for rule '%s'" % (file,line,f.__name__)
-
-        # Now add all of the simple rules
-        for name,r in strsym[state]:
-            tokname = toknames[name]       
-
-            if tokname == 'ignore':
-                 ignore[state] = r
-                 continue
-
-            if not optimize:
-                if tokname == 'error':
-                    raise SyntaxError,"lex: Rule '%s' must be defined as a function" % name
-                    error = 1
-                    continue
-        
-                if not lexobj.lextokens.has_key(tokname) and tokname.find("ignore_") < 0:
-                    print "lex: Rule '%s' defined for an unspecified token %s." % (name,tokname)
-                    error = 1
-                    continue
-                try:
-                    c = re.compile("(?P<%s>%s)" % (name,r),re.VERBOSE | reflags)
-                    if (c.match("")):
-                         print "lex: Regular expression for rule '%s' matches empty string." % name
-                         error = 1
-                         continue
-                except re.error,e:
-                    print "lex: Invalid regular expression for rule '%s'. %s" % (name,e)
-                    if '#' in r:
-                         print "lex: Make sure '#' in rule '%s' is escaped with '\\#'." % name
-
-                    error = 1
-                    continue
-                if debug:
-                    print "lex: Adding rule %s -> '%s' (state '%s')" % (name,r,state)
-                
-            regex_list.append("(?P<%s>%s)" % (name,r))
-
-        if not regex_list:
-             print "lex: No rules defined for state '%s'" % state
-             error = 1
-
-        regexs[state] = regex_list
-
-
-    if not optimize:
-        for f in files.keys(): 
-           if not _validate_file(f):
-                error = 1
-
-    if error:
-        raise SyntaxError,"lex: Unable to build lexer."
-
-    # From this point forward, we're reasonably confident that we can build the lexer.
-    # No more errors will be generated, but there might be some warning messages.
-
-    # Build the master regular expressions
-
-    for state in regexs.keys():
-        lexre, re_text = _form_master_re(regexs[state],reflags,ldict)
-        lexobj.lexstatere[state] = lexre
-        lexobj.lexstateretext[state] = re_text
-        if debug:
-            for i in range(len(re_text)):
-                 print "lex: state '%s'. regex[%d] = '%s'" % (state, i, re_text[i])
-
-    # For inclusive states, we need to add the INITIAL state
-    for state,type in stateinfo.items():
-        if state != "INITIAL" and type == 'inclusive':
-             lexobj.lexstatere[state].extend(lexobj.lexstatere['INITIAL'])
-             lexobj.lexstateretext[state].extend(lexobj.lexstateretext['INITIAL'])
-
-    lexobj.lexstateinfo = stateinfo
-    lexobj.lexre = lexobj.lexstatere["INITIAL"]
-    lexobj.lexretext = lexobj.lexstateretext["INITIAL"]
-
-    # Set up ignore variables
-    lexobj.lexstateignore = ignore
-    lexobj.lexignore = lexobj.lexstateignore.get("INITIAL","")
-
-    # Set up error functions
-    lexobj.lexstateerrorf = errorf
-    lexobj.lexerrorf = errorf.get("INITIAL",None)
-    if warn and not lexobj.lexerrorf:
-        print "lex: Warning. no t_error rule is defined."
-
-    # Check state information for ignore and error rules
-    for s,stype in stateinfo.items():
-        if stype == 'exclusive':
-              if warn and not errorf.has_key(s):
-                   print "lex: Warning. no error rule is defined for exclusive state '%s'" % s
-              if warn and not ignore.has_key(s) and lexobj.lexignore:
-                   print "lex: Warning. no ignore rule is defined for exclusive state '%s'" % s
-        elif stype == 'inclusive':
-              if not errorf.has_key(s):
-                   errorf[s] = errorf.get("INITIAL",None)
-              if not ignore.has_key(s):
-                   ignore[s] = ignore.get("INITIAL","")
-   
-
-    # Create global versions of the token() and input() functions
-    token = lexobj.token
-    input = lexobj.input
-    lexer = lexobj
-
-    # If in optimize mode, we write the lextab   
-    if lextab and optimize:
-        lexobj.writetab(lextab)
-
-    return lexobj
-
-# -----------------------------------------------------------------------------
-# runmain()
-#
-# This runs the lexer as a main program
-# -----------------------------------------------------------------------------
-
-def runmain(lexer=None,data=None):
-    if not data:
-        try:
-            filename = sys.argv[1]
-            f = open(filename)
-            data = f.read()
-            f.close()
-        except IndexError:
-            print "Reading from standard input (type EOF to end):"
-            data = sys.stdin.read()
-
-    if lexer:
-        _input = lexer.input
-    else:
-        _input = input
-    _input(data)
-    if lexer:
-        _token = lexer.token
-    else:
-        _token = token
-        
-    while 1:
-        tok = _token()
-        if not tok: break
-        print "(%s,%r,%d,%d)" % (tok.type, tok.value, tok.lineno,tok.lexpos)
-        
-
-# -----------------------------------------------------------------------------
-# @TOKEN(regex)
-#
-# This decorator function can be used to set the regex expression on a function
-# when its docstring might need to be set in an alternative way
-# -----------------------------------------------------------------------------
-
-def TOKEN(r):
-    def set_doc(f):
-        f.__doc__ = r
-        return f
-    return set_doc
-
-# Alternative spelling of the TOKEN decorator
-Token = TOKEN
-
diff --git a/lib/python2.7/site-packages/setoolsgui/sepolgen/matching.py b/lib/python2.7/site-packages/setoolsgui/sepolgen/matching.py
deleted file mode 100644
index d56dd92..0000000
--- a/lib/python2.7/site-packages/setoolsgui/sepolgen/matching.py
+++ /dev/null
@@ -1,255 +0,0 @@
-# Authors: Karl MacMillan <kmacmillan@mentalrootkit.com>
-#
-# Copyright (C) 2006 Red Hat
-# see file 'COPYING' for use and warranty information
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License as
-# published by the Free Software Foundation; version 2 only
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-#
-
-"""
-Classes and algorithms for matching requested access to access vectors.
-"""
-
-import access
-import objectmodel
-import itertools
-
-class Match:
-    def __init__(self, interface=None, dist=0):
-        self.interface = interface
-        self.dist = dist
-        self.info_dir_change = False
-
-    def __cmp__(self, other):
-        if self.dist == other.dist:
-            if self.info_dir_change:
-                if other.info_dir_change:
-                    return 0
-                else:
-                    return 1
-            else:
-                if other.info_dir_change:
-                    return -1
-                else:
-                    return 0
-        else:
-            if self.dist < other.dist:
-                return -1
-            else:
-                return 1
-
-class MatchList:
-    DEFAULT_THRESHOLD = 150
-    def __init__(self):
-        # Match objects that pass the threshold
-        self.children = []
-        # Match objects over the threshold
-        self.bastards = []
-        self.threshold = self.DEFAULT_THRESHOLD
-        self.allow_info_dir_change = False
-        self.av = None
-
-    def best(self):
-        if len(self.children):
-            return self.children[0]
-        if len(self.bastards):
-            return self.bastards[0]
-        return None
-
-    def __len__(self):
-        # Only return the length of the matches so
-        # that this can be used to test if there is
-        # a match.
-        return len(self.children) + len(self.bastards)
-
-    def __iter__(self):
-        return iter(self.children)
-
-    def all(self):
-        return itertools.chain(self.children, self.bastards)
-
-    def append(self, match):
-        if match.dist <= self.threshold:
-            if not match.info_dir_change or self.allow_info_dir_change:
-                self.children.append(match)
-            else:
-                self.bastards.append(match)
-        else:
-            self.bastards.append(match)
-
-    def sort(self):
-        self.children.sort()
-        self.bastards.sort()
-                
-
-class AccessMatcher:
-    def __init__(self, perm_maps=None):
-        self.type_penalty = 10
-        self.obj_penalty = 10
-        if perm_maps:
-            self.perm_maps = perm_maps
-        else:
-            self.perm_maps = objectmodel.PermMappings()
-        # We want a change in the information flow direction
-        # to be a strong penalty - stronger than access to
-        # a few unrelated types.
-        self.info_dir_penalty = 100
-
-    def type_distance(self, a, b):
-        if a == b or access.is_idparam(b):
-            return 0
-        else:
-            return -self.type_penalty
-
-
-    def perm_distance(self, av_req, av_prov):
-        # First check that we have enough perms
-        diff = av_req.perms.difference(av_prov.perms)
-
-        if len(diff) != 0:
-            total = self.perm_maps.getdefault_distance(av_req.obj_class, diff)
-            return -total
-        else:
-            diff = av_prov.perms.difference(av_req.perms)
-            return self.perm_maps.getdefault_distance(av_req.obj_class, diff)
-
-    def av_distance(self, req, prov):
-        """Determine the 'distance' between 2 access vectors.
-
-        This function is used to find an access vector that matches
-        a 'required' access. To do this we comput a signed numeric
-        value that indicates how close the req access is to the
-        'provided' access vector. The closer the value is to 0
-        the closer the match, with 0 being an exact match.
-
-        A value over 0 indicates that the prov access vector provides more
-        access than the req (in practice, this means that the source type,
-        target type, and object class is the same and the perms in prov is
-        a superset of those in req.
-
-        A value under 0 indicates that the prov access less - or unrelated
-        - access to the req access. A different type or object class will
-        result in a very low value.
-
-        The values other than 0 should only be interpreted relative to
-        one another - they have no exact meaning and are likely to
-        change.
-
-        Params:
-          req - [AccessVector] The access that is required. This is the
-                access being matched.
-          prov - [AccessVector] The access provided. This is the potential
-                 match that is being evaluated for req.
-        Returns:
-          0   : Exact match between the acess vectors.
-
-          < 0 : The prov av does not provide all of the access in req.
-                A smaller value indicates that the access is further.
-
-          > 0 : The prov av provides more access than req. The larger
-                the value the more access over req.
-        """
-        # FUTURE - this is _very_ expensive and probably needs some
-        # thorough performance work. This version is meant to give
-        # meaningful results relatively simply.
-        dist = 0
-
-        # Get the difference between the types. The addition is safe
-        # here because type_distance only returns 0 or negative.
-        dist += self.type_distance(req.src_type, prov.src_type)
-        dist += self.type_distance(req.tgt_type, prov.tgt_type)
-
-        # Object class distance
-        if req.obj_class != prov.obj_class and not access.is_idparam(prov.obj_class):
-            dist -= self.obj_penalty
-
-        # Permission distance
-
-        # If this av doesn't have a matching source type, target type, and object class
-        # count all of the permissions against it. Otherwise determine the perm
-        # distance and dir.
-        if dist < 0:
-            pdist = self.perm_maps.getdefault_distance(prov.obj_class, prov.perms)
-        else:
-            pdist = self.perm_distance(req, prov)
-
-        # Combine the perm and other distance
-        if dist < 0:
-            if pdist < 0:
-                return dist + pdist
-            else:
-                return dist - pdist
-        elif dist >= 0:
-            if pdist < 0:
-                return pdist - dist
-            else:
-                return dist + pdist
-
-    def av_set_match(self, av_set, av):
-        """
-
-        """
-        dist = None
-
-        # Get the distance for each access vector
-        for x in av_set:
-            tmp = self.av_distance(av, x)
-            if dist is None:
-                dist = tmp
-            elif tmp >= 0:
-                if dist >= 0:
-                    dist += tmp
-                else:
-                    dist = tmp + -dist
-            else:
-                if dist < 0:
-                    dist += tmp
-                else:
-                    dist -= tmp
-
-        # Penalize for information flow - we want to prevent the
-        # addition of a write if the requested is read none. We are
-        # much less concerned about the reverse.
-        av_dir = self.perm_maps.getdefault_direction(av.obj_class, av.perms)
-
-        if av_set.info_dir is None:
-            av_set.info_dir = objectmodel.FLOW_NONE
-            for x in av_set:
-                av_set.info_dir = av_set.info_dir | \
-                                  self.perm_maps.getdefault_direction(x.obj_class, x.perms)
-        if (av_dir & objectmodel.FLOW_WRITE == 0) and (av_set.info_dir & objectmodel.FLOW_WRITE):
-            if dist < 0:
-                dist -= self.info_dir_penalty
-            else:
-                dist += self.info_dir_penalty
-
-        return dist
-
-    def search_ifs(self, ifset, av, match_list):
-        match_list.av = av
-        for iv in itertools.chain(ifset.tgt_type_all,
-                                  ifset.tgt_type_map.get(av.tgt_type, [])):
-            if not iv.enabled:
-                #print "iv %s not enabled" % iv.name
-                continue
-
-            dist = self.av_set_match(iv.access, av)
-            if dist >= 0:
-                m = Match(iv, dist)
-                match_list.append(m)
-
-
-        match_list.sort()
-
-
diff --git a/lib/python2.7/site-packages/setoolsgui/sepolgen/module.py b/lib/python2.7/site-packages/setoolsgui/sepolgen/module.py
deleted file mode 100644
index 7fc9443..0000000
--- a/lib/python2.7/site-packages/setoolsgui/sepolgen/module.py
+++ /dev/null
@@ -1,213 +0,0 @@
-# Authors: Karl MacMillan <kmacmillan@mentalrootkit.com>
-#
-# Copyright (C) 2006 Red Hat 
-# see file 'COPYING' for use and warranty information
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License as
-# published by the Free Software Foundation; version 2 only
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-#
-
-"""
-Utilities for dealing with the compilation of modules and creation
-of module tress.
-"""
-
-import defaults
-
-import selinux
-
-import re
-import tempfile
-import commands
-import os
-import os.path
-import subprocess
-import shutil
-
-def is_valid_name(modname):
-    """Check that a module name is valid.
-    """
-    m = re.findall("[^a-zA-Z0-9_\-\.]", modname)
-    if len(m) == 0 and modname[0].isalpha():
-        return True
-    else:
-        return False
-
-class ModuleTree:
-    def __init__(self, modname):
-        self.modname = modname
-        self.dirname = None
-
-    def dir_name(self):
-        return self.dirname
-
-    def te_name(self):
-        return self.dirname + "/" + self.modname + ".te"
-
-    def fc_name(self):
-        return self.dirname + "/" + self.modname + ".fc"
-
-    def if_name(self):
-        return self.dirname + "/" + self.modname + ".if"
-
-    def package_name(self):
-        return self.dirname + "/" + self.modname + ".pp"
-
-    def makefile_name(self):
-        return self.dirname + "/Makefile"
-
-    def create(self, parent_dirname, makefile_include=None):
-        self.dirname = parent_dirname + "/" + self.modname
-        os.mkdir(self.dirname)
-        fd = open(self.makefile_name(), "w")
-        if makefile_include:
-            fd.write("include " + makefile_include)
-        else:
-            fd.write("include " + defaults.refpolicy_makefile())
-        fd.close()
-
-        # Create empty files for the standard refpolicy
-        # module files
-        open(self.te_name(), "w").close()
-        open(self.fc_name(), "w").close()
-        open(self.if_name(), "w").close()
-
-def modname_from_sourcename(sourcename):
-    return os.path.splitext(os.path.split(sourcename)[1])[0]
-
-class ModuleCompiler:
-    """ModuleCompiler eases running of the module compiler.
-
-    The ModuleCompiler class encapsulates running the commandline
-    module compiler (checkmodule) and module packager (semodule_package).
-    You are likely interested in the create_module_package method.
-    
-    Several options are controlled via paramaters (only effects the 
-    non-refpol builds):
-    
-     .mls          [boolean] Generate an MLS module (by passed -M to
-                   checkmodule). True to generate an MLS module, false
-                   otherwise.
-                   
-     .module       [boolean] Generate a module instead of a base module.
-                   True to generate a module, false to generate a base.
-                   
-     .checkmodule  [string] Fully qualified path to the module compiler.
-                   Default is /usr/bin/checkmodule.
-                   
-     .semodule_package [string] Fully qualified path to the module
-                   packager. Defaults to /usr/bin/semodule_package.
-     .output       [file object] File object used to write verbose
-                   output of the compililation and packaging process.
-    """
-    def __init__(self, output=None):
-        """Create a ModuleCompiler instance, optionally with an
-        output file object for verbose output of the compilation process.
-        """
-        self.mls = selinux.is_selinux_mls_enabled()
-        self.module = True
-        self.checkmodule = "/usr/bin/checkmodule"
-        self.semodule_package = "/usr/bin/semodule_package"
-        self.output = output
-        self.last_output = ""
-        self.refpol_makefile = defaults.refpolicy_makefile()
-        self.make = "/usr/bin/make"
-
-    def o(self, str):
-        if self.output:
-            self.output.write(str + "\n")
-        self.last_output = str
-
-    def run(self, command):
-        self.o(command)
-        rc, output = commands.getstatusoutput(command)
-        self.o(output)
-        
-        return rc
-    
-    def gen_filenames(self, sourcename):
-        """Generate the module and policy package filenames from
-        a source file name. The source file must be in the form
-        of "foo.te". This will generate "foo.mod" and "foo.pp".
-        
-        Returns a tuple with (modname, policypackage).
-        """
-        splitname = sourcename.split(".")
-        if len(splitname) < 2:
-            raise RuntimeError("invalid sourcefile name %s (must end in .te)", sourcename)
-        # Handle other periods in the filename correctly
-        basename = ".".join(splitname[0:-1])
-        modname = basename + ".mod"
-        packagename = basename + ".pp"
-        
-        return (modname, packagename)
-
-    def create_module_package(self, sourcename, refpolicy=True):
-        """Create a module package saved in a packagename from a
-        sourcename.
-
-        The create_module_package creates a module package saved in a
-        file named sourcename (.pp is the standard extension) from a
-        source file (.te is the standard extension). The source file
-        should contain SELinux policy statements appropriate for a
-        base or non-base module (depending on the setting of .module).
-
-        Only file names are accepted, not open file objects or
-        descriptors because the command line SELinux tools are used.
-
-        On error a RuntimeError will be raised with a descriptive
-        error message.
-        """
-        if refpolicy:
-            self.refpol_build(sourcename)
-        else:
-            modname, packagename = self.gen_filenames(sourcename)
-            self.compile(sourcename, modname)
-            self.package(modname, packagename)
-            os.unlink(modname)
-            
-    def refpol_build(self, sourcename):
-        # Compile
-        command = self.make + " -f " + self.refpol_makefile
-        rc = self.run(command)
-
-        # Raise an error if the process failed
-        if rc != 0:
-            raise RuntimeError("compilation failed:\n%s" % self.last_output)
-        
-    def compile(self, sourcename, modname):
-        s = [self.checkmodule]
-        if self.mls:
-            s.append("-M")
-        if self.module:
-            s.append("-m")
-        s.append("-o")
-        s.append(modname)
-        s.append(sourcename)
-
-        rc = self.run(" ".join(s))
-        if rc != 0:
-            raise RuntimeError("compilation failed:\n%s" % self.last_output)
-
-    def package(self, modname, packagename):
-        s = [self.semodule_package]
-        s.append("-o")
-        s.append(packagename)
-        s.append("-m")
-        s.append(modname)
-        
-        rc = self.run(" ".join(s))
-        if rc != 0:
-            raise RuntimeError("packaging failed [%s]" % self.last_output)
-        
-    
diff --git a/lib/python2.7/site-packages/setoolsgui/sepolgen/objectmodel.py b/lib/python2.7/site-packages/setoolsgui/sepolgen/objectmodel.py
deleted file mode 100644
index 88c8a1f..0000000
--- a/lib/python2.7/site-packages/setoolsgui/sepolgen/objectmodel.py
+++ /dev/null
@@ -1,172 +0,0 @@
-# Authors: Karl MacMillan <kmacmillan@mentalrootkit.com>
-#
-# Copyright (C) 2006 Red Hat
-# see file 'COPYING' for use and warranty information
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License as
-# published by the Free Software Foundation; version 2 only
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-#
-
-"""
-This module provides knowledge object classes and permissions. It should
-be used to keep this knowledge from leaking into the more generic parts of
-the policy generation.
-"""
-
-# Objects that can be implicitly typed - these objects do
-# not _have_ to be implicitly typed (e.g., sockets can be
-# explicitly labeled), but they often are.
-#
-# File is in this list for /proc/self
-#
-# This list is useful when dealing with rules that have a
-# type (or param) used as both a subject and object. For
-# example:
-#
-#   allow httpd_t httpd_t : socket read;
-#
-# This rule makes sense because the socket was (presumably) created
-# by a process with the type httpd_t.
-implicitly_typed_objects = ["socket", "fd", "process", "file", "lnk_file", "fifo_file",
-                            "dbus", "capability", "unix_stream_socket"]
-
-#::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-#
-#Information Flow
-#
-# All of the permissions in SELinux can be described in terms of
-# information flow. For example, a read of a file is a flow of
-# information from that file to the process reading. Viewing
-# permissions in these terms can be used to model a varity of
-# security properties.
-#
-# Here we have some infrastructure for understanding permissions
-# in terms of information flow
-#
-#::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-
-# Information flow deals with information either flowing from a subject
-# to and object ("write") or to a subject from an object ("read"). Read
-# or write is described from the subject point-of-view. It is also possible
-# for a permission to represent both a read and write (though the flow is
-# typical asymettric in terms of bandwidth). It is also possible for
-# permission to not flow information (meaning that the result is pure
-# side-effect).
-#
-# The following constants are for representing the directionality
-# of information flow.
-FLOW_NONE  = 0
-FLOW_READ  = 1
-FLOW_WRITE = 2
-FLOW_BOTH  = FLOW_READ | FLOW_WRITE
-
-# These are used by the parser and for nice disply of the directions
-str_to_dir = { "n" : FLOW_NONE, "r" : FLOW_READ, "w" : FLOW_WRITE, "b" : FLOW_BOTH }
-dir_to_str = { FLOW_NONE : "n", FLOW_READ : "r", FLOW_WRITE : "w", FLOW_BOTH : "b" }
-
-class PermMap:
-    """A mapping between a permission and its information flow properties.
-
-    PermMap represents the information flow properties of a single permission
-    including the direction (read, write, etc.) and an abstract representation
-    of the bandwidth of the flow (weight).
-    """
-    def __init__(self, perm, dir, weight):
-        self.perm = perm
-        self.dir = dir
-        self.weight = weight
-
-    def __repr__(self):
-        return "<sepolgen.objectmodel.PermMap %s %s %d>" % (self.perm,
-                                                           dir_to_str[self.dir],
-                                                           self.weight)
-
-class PermMappings:
-    """The information flow properties of a set of object classes and permissions.
-
-    PermMappings maps one or more classes and permissions to their PermMap objects
-    describing their information flow charecteristics.
-    """
-    def __init__(self):
-        self.classes = { }
-        self.default_weight = 5
-        self.default_dir = FLOW_BOTH
-
-    def from_file(self, fd):
-        """Read the permission mappings from a file. This reads the format used
-        by Apol in the setools suite.
-        """
-        # This parsing is deliberitely picky and bails at the least error. It
-        # is assumed that the permission map file will be shipped as part
-        # of sepolgen and not user modified, so this is a reasonable design
-        # choice. If user supplied permission mappings are needed the parser
-        # should be made a little more robust and give better error messages.
-        cur = None
-        for line in fd:
-            fields = line.split()
-            if len(fields) == 0 or len(fields) == 1 or fields[0] == "#":
-                continue
-            if fields[0] == "class":
-                c = fields[1]
-                if self.classes.has_key(c):
-                    raise ValueError("duplicate class in perm map")
-                self.classes[c] = { }
-                cur = self.classes[c]
-            else:
-                if len(fields) != 3:
-                    raise ValueError("error in object classs permissions")
-                if cur is None:
-                    raise ValueError("permission outside of class")
-                pm = PermMap(fields[0], str_to_dir[fields[1]], int(fields[2]))
-                cur[pm.perm] = pm
-
-    def get(self, obj, perm):
-        """Get the permission map for the object permission.
-
-        Returns:
-          PermMap representing the permission
-        Raises:
-          KeyError if the object or permission is not defined
-        """
-        return self.classes[obj][perm]
-
-    def getdefault(self, obj, perm):
-        """Get the permission map for the object permission or a default.
-
-        getdefault is the same as get except that a default PermMap is
-        returned if the object class or permission is not defined. The
-        default is FLOW_BOTH with a weight of 5.
-        """
-        try:
-            pm = self.classes[obj][perm]
-        except KeyError:
-            return PermMap(perm, self.default_dir, self.default_weight)
-        return pm
-
-    def getdefault_direction(self, obj, perms):
-        dir = FLOW_NONE
-        for perm in perms:
-            pm = self.getdefault(obj, perm)
-            dir = dir | pm.dir
-        return dir
-
-    def getdefault_distance(self, obj, perms):
-        total = 0
-        for perm in perms:
-            pm = self.getdefault(obj, perm)
-            total += pm.weight
-
-        return total
-
-
-
diff --git a/lib/python2.7/site-packages/setoolsgui/sepolgen/output.py b/lib/python2.7/site-packages/setoolsgui/sepolgen/output.py
deleted file mode 100644
index 739452d..0000000
--- a/lib/python2.7/site-packages/setoolsgui/sepolgen/output.py
+++ /dev/null
@@ -1,173 +0,0 @@
-# Authors: Karl MacMillan <kmacmillan@mentalrootkit.com>
-#
-# Copyright (C) 2006 Red Hat
-# see file 'COPYING' for use and warranty information
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License as
-# published by the Free Software Foundation; version 2 only
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-#
-
-"""
-Classes and functions for the output of reference policy modules.
-
-This module takes a refpolicy.Module object and formats it for
-output using the ModuleWriter object. By separating the output
-in this way the other parts of Madison can focus solely on
-generating policy. This keeps the semantic / syntactic issues
-cleanly separated from the formatting issues.
-"""
-
-import refpolicy
-import util
-
-class ModuleWriter:
-    def __init__(self):
-        self.fd = None
-        self.module = None
-        self.sort = True
-        self.requires = True
-
-    def write(self, module, fd):
-        self.module = module
-
-        if self.sort:
-            sort_filter(self.module)
-
-        # FIXME - make this handle nesting
-        for node, depth in refpolicy.walktree(self.module, showdepth=True):
-            fd.write("%s\n" % str(node))
-
-# Helper functions for sort_filter - this is all done old school
-# C style rather than with polymorphic methods because this sorting
-# is specific to output. It is not necessarily the comparison you
-# want generally.
-
-# Compare two IdSets - we could probably do something clever
-# with different here, but this works.
-def id_set_cmp(x, y):
-    xl = util.set_to_list(x)
-    xl.sort()
-    yl = util.set_to_list(y)
-    yl.sort()
-
-    if len(xl) != len(yl):
-        return cmp(xl[0], yl[0])
-    for v in zip(xl, yl):
-        if v[0] != v[1]:
-            return cmp(v[0], v[1])
-    return 0
-
-# Compare two avrules
-def avrule_cmp(a, b):
-    ret = id_set_cmp(a.src_types, b.src_types)
-    if ret is not 0:
-        return ret
-    ret = id_set_cmp(a.tgt_types, b.tgt_types)
-    if ret is not 0:
-        return ret
-    ret = id_set_cmp(a.obj_classes, b.obj_classes)
-    if ret is not 0:
-        return ret
-
-    # At this point, who cares - just return something
-    return cmp(len(a.perms), len(b.perms))
-
-# Compare two interface calls
-def ifcall_cmp(a, b):
-    if a.args[0] != b.args[0]:
-        return cmp(a.args[0], b.args[0])
-    return cmp(a.ifname, b.ifname)
-
-# Compare an two avrules or interface calls
-def rule_cmp(a, b):
-    if isinstance(a, refpolicy.InterfaceCall):
-        if isinstance(b, refpolicy.InterfaceCall):
-            return ifcall_cmp(a, b)
-        else:
-            return id_set_cmp([a.args[0]], b.src_types)
-    else:
-        if isinstance(b, refpolicy.AVRule):
-            return avrule_cmp(a,b)
-        else:
-            return id_set_cmp(a.src_types, [b.args[0]])
-                
-def role_type_cmp(a, b):
-    return cmp(a.role, b.role)
-
-def sort_filter(module):
-    """Sort and group the output for readability.
-    """
-    def sort_node(node):
-        c = []
-
-        # Module statement
-        for mod in node.module_declarations():
-            c.append(mod)
-            c.append(refpolicy.Comment())
-
-        # Requires
-        for require in node.requires():
-            c.append(require)
-        c.append(refpolicy.Comment())
-
-        # Rules
-        #
-        # We are going to group output by source type (which
-        # we assume is the first argument for interfaces).
-        rules = []
-        rules.extend(node.avrules())
-        rules.extend(node.interface_calls())
-        rules.sort(rule_cmp)
-
-        cur = None
-        sep_rules = []
-        for rule in rules:
-            if isinstance(rule, refpolicy.InterfaceCall):
-                x = rule.args[0]
-            else:
-                x = util.first(rule.src_types)
-
-            if cur != x:
-                if cur:
-                    sep_rules.append(refpolicy.Comment())
-                cur = x
-                comment = refpolicy.Comment()
-                comment.lines.append("============= %s ==============" % cur)
-                sep_rules.append(comment)
-            sep_rules.append(rule)
-
-        c.extend(sep_rules)
-
-
-        ras = []
-        ras.extend(node.role_types())
-        ras.sort(role_type_cmp)
-        if len(ras):
-            comment = refpolicy.Comment()
-            comment.lines.append("============= ROLES ==============")
-            c.append(comment)
-        
-
-        c.extend(ras)
-
-        # Everything else
-        for child in node.children:
-            if child not in c:
-                c.append(child)
-
-        node.children = c
-
-    for node in module.nodes():
-        sort_node(node)
-
-
diff --git a/lib/python2.7/site-packages/setoolsgui/sepolgen/policygen.py b/lib/python2.7/site-packages/setoolsgui/sepolgen/policygen.py
deleted file mode 100644
index 5f38577..0000000
--- a/lib/python2.7/site-packages/setoolsgui/sepolgen/policygen.py
+++ /dev/null
@@ -1,402 +0,0 @@
-# Authors: Karl MacMillan <kmacmillan@mentalrootkit.com>
-#
-# Copyright (C) 2006 Red Hat
-# see file 'COPYING' for use and warranty information
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License as
-# published by the Free Software Foundation; version 2 only
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-#
-
-"""
-classes and algorithms for the generation of SELinux policy.
-"""
-
-import itertools
-import textwrap
-
-import refpolicy
-import objectmodel
-import access
-import interfaces
-import matching
-import selinux.audit2why as audit2why
-try:
-    from setools import *
-except:
-    pass
-
-# Constants for the level of explanation from the generation
-# routines
-NO_EXPLANATION    = 0
-SHORT_EXPLANATION = 1
-LONG_EXPLANATION  = 2
-
-class PolicyGenerator:
-    """Generate a reference policy module from access vectors.
-
-    PolicyGenerator generates a new reference policy module
-    or updates an existing module based on requested access
-    in the form of access vectors.
-
-    It generates allow rules and optionally module require
-    statements and reference policy interfaces. By default
-    only allow rules are generated. The methods .set_gen_refpol
-    and .set_gen_requires turns on interface generation and
-    requires generation respectively.
-
-    PolicyGenerator can also optionally add comments explaining
-    why a particular access was allowed based on the audit
-    messages that generated the access. The access vectors
-    passed in must have the .audit_msgs field set correctly
-    and .explain set to SHORT|LONG_EXPLANATION to enable this
-    feature.
-
-    The module created by PolicyGenerator can be passed to
-    output.ModuleWriter to output a text representation.
-    """
-    def __init__(self, module=None):
-        """Initialize a PolicyGenerator with an optional
-        existing module.
-
-        If the module paramater is not None then access
-        will be added to the passed in module. Otherwise
-        a new reference policy module will be created.
-        """
-        self.ifgen = None
-        self.explain = NO_EXPLANATION
-        self.gen_requires = False
-        if module:
-            self.moduel = module
-        else:
-            self.module = refpolicy.Module()
-
-        self.dontaudit = False
-
-        self.domains = None
-    def set_gen_refpol(self, if_set=None, perm_maps=None):
-        """Set whether reference policy interfaces are generated.
-
-        To turn on interface generation pass in an interface set
-        to use for interface generation. To turn off interface
-        generation pass in None.
-
-        If interface generation is enabled requires generation
-        will also be enabled.
-        """
-        if if_set:
-            self.ifgen = InterfaceGenerator(if_set, perm_maps)
-            self.gen_requires = True
-        else:
-            self.ifgen = None
-        self.__set_module_style()
-
-
-    def set_gen_requires(self, status=True):
-        """Set whether module requires are generated.
-
-        Passing in true will turn on requires generation and
-        False will disable generation. If requires generation is
-        disabled interface generation will also be disabled and
-        can only be re-enabled via .set_gen_refpol.
-        """
-        self.gen_requires = status
-
-    def set_gen_explain(self, explain=SHORT_EXPLANATION):
-        """Set whether access is explained.
-        """
-        self.explain = explain
-
-    def set_gen_dontaudit(self, dontaudit):
-        self.dontaudit = dontaudit
-
-    def __set_module_style(self):
-        if self.ifgen:
-            refpolicy = True
-        else:
-            refpolicy = False
-        for mod in self.module.module_declarations():
-            mod.refpolicy = refpolicy
-
-    def set_module_name(self, name, version="1.0"):
-        """Set the name of the module and optionally the version.
-        """
-        # find an existing module declaration
-        m = None
-        for mod in self.module.module_declarations():
-            m = mod
-        if not m:
-            m = refpolicy.ModuleDeclaration()
-            self.module.children.insert(0, m)
-        m.name = name
-        m.version = version
-        if self.ifgen:
-            m.refpolicy = True
-        else:
-            m.refpolicy = False
-
-    def get_module(self):
-        # Generate the requires
-        if self.gen_requires:
-            gen_requires(self.module)
-
-        """Return the generated module"""
-        return self.module
-
-    def __add_allow_rules(self, avs):
-        for av in avs:
-            rule = refpolicy.AVRule(av)
-            if self.dontaudit:
-                rule.rule_type = rule.DONTAUDIT
-            rule.comment = ""
-            if self.explain:
-                rule.comment = str(refpolicy.Comment(explain_access(av, verbosity=self.explain)))
-            if av.type == audit2why.ALLOW:
-                rule.comment += "\n#!!!! This avc is allowed in the current policy"
-            if av.type == audit2why.DONTAUDIT:
-                rule.comment += "\n#!!!! This avc has a dontaudit rule in the current policy"
-
-            if av.type == audit2why.BOOLEAN:
-                if len(av.data) > 1:
-                    rule.comment += "\n#!!!! This avc can be allowed using one of the these booleans:\n#     %s" % ", ".join(map(lambda x: x[0], av.data))
-                else:
-                    rule.comment += "\n#!!!! This avc can be allowed using the boolean '%s'" % av.data[0][0]
-
-            if av.type == audit2why.CONSTRAINT:
-                rule.comment += "\n#!!!! This avc is a constraint violation.  You would need to modify the attributes of either the source or target types to allow this access."
-                rule.comment += "\n#Constraint rule: "
-                rule.comment += "\n\t" + av.data[0]
-                for reason in av.data[1:]:
-                    rule.comment += "\n#\tPossible cause is the source %s and target %s are different." % reason
-
-            try:
-                if ( av.type == audit2why.TERULE and
-                     "write" in av.perms and
-                     ( "dir" in av.obj_class or "open" in av.perms )):
-                    if not self.domains:
-                        self.domains = seinfo(ATTRIBUTE, name="domain")[0]["types"]
-                    types=[]
-
-                    for i in map(lambda x: x[TCONTEXT], sesearch([ALLOW], {SCONTEXT: av.src_type, CLASS: av.obj_class, PERMS: av.perms})):
-                        if i not in self.domains:
-                            types.append(i)
-                    if len(types) == 1:
-                        rule.comment += "\n#!!!! The source type '%s' can write to a '%s' of the following type:\n# %s\n" % ( av.src_type, av.obj_class, ", ".join(types))
-                    elif len(types) >= 1:
-                        rule.comment += "\n#!!!! The source type '%s' can write to a '%s' of the following types:\n# %s\n" % ( av.src_type, av.obj_class, ", ".join(types))
-            except:
-                pass
-            self.module.children.append(rule)
-
-
-    def add_access(self, av_set):
-        """Add the access from the access vector set to this
-        module.
-        """
-        # Use the interface generator to split the access
-        # into raw allow rules and interfaces. After this
-        # a will contain a list of access that should be
-        # used as raw allow rules and the interfaces will
-        # be added to the module.
-        if self.ifgen:
-            raw_allow, ifcalls = self.ifgen.gen(av_set, self.explain)
-            self.module.children.extend(ifcalls)
-        else:
-            raw_allow = av_set
-
-        # Generate the raw allow rules from the filtered list
-        self.__add_allow_rules(raw_allow)
-
-    def add_role_types(self, role_type_set):
-        for role_type in role_type_set:
-            self.module.children.append(role_type)
-
-def explain_access(av, ml=None, verbosity=SHORT_EXPLANATION):
-    """Explain why a policy statement was generated.
-
-    Return a string containing a text explanation of
-    why a policy statement was generated. The string is
-    commented and wrapped and can be directly inserted
-    into a policy.
-
-    Params:
-      av - access vector representing the access. Should
-       have .audit_msgs set appropriately.
-      verbosity - the amount of explanation provided. Should
-       be set to NO_EXPLANATION, SHORT_EXPLANATION, or
-       LONG_EXPLANATION.
-    Returns:
-      list of strings - strings explaining the access or an empty
-       string if verbosity=NO_EXPLANATION or there is not sufficient
-       information to provide an explanation.
-    """
-    s = []
-
-    def explain_interfaces():
-        if not ml:
-            return
-        s.append(" Interface options:")
-        for match in ml.all():
-            ifcall = call_interface(match.interface, ml.av)
-            s.append('   %s # [%d]' % (ifcall.to_string(), match.dist))
-
-
-    # Format the raw audit data to explain why the
-    # access was requested - either long or short.
-    if verbosity == LONG_EXPLANATION:
-        for msg in av.audit_msgs:
-            s.append(' %s' % msg.header)
-            s.append('  scontext="%s" tcontext="%s"' %
-                     (str(msg.scontext), str(msg.tcontext)))
-            s.append('  class="%s" perms="%s"' %
-                     (msg.tclass, refpolicy.list_to_space_str(msg.accesses)))
-            s.append('  comm="%s" exe="%s" path="%s"' % (msg.comm, msg.exe, msg.path))
-            s.extend(textwrap.wrap('message="' + msg.message + '"', 80, initial_indent="  ",
-                                   subsequent_indent="   "))
-        explain_interfaces()
-    elif verbosity:
-        s.append(' src="%s" tgt="%s" class="%s", perms="%s"' %
-                 (av.src_type, av.tgt_type, av.obj_class, av.perms.to_space_str()))
-        # For the short display we are only going to use the additional information
-        # from the first audit message. For the vast majority of cases this info
-        # will always be the same anyway.
-        if len(av.audit_msgs) > 0:
-            msg = av.audit_msgs[0]
-            s.append(' comm="%s" exe="%s" path="%s"' % (msg.comm, msg.exe, msg.path))
-        explain_interfaces()
-    return s
-
-def param_comp(a, b):
-    return cmp(b.num, a.num)
-
-def call_interface(interface, av):
-    params = []
-    args = []
-
-    params.extend(interface.params.values())
-    params.sort(param_comp)
-
-    ifcall = refpolicy.InterfaceCall()
-    ifcall.ifname = interface.name
-
-    for i in range(len(params)):
-        if params[i].type == refpolicy.SRC_TYPE:
-            ifcall.args.append(av.src_type)
-        elif params[i].type == refpolicy.TGT_TYPE:
-            ifcall.args.append(av.tgt_type)
-        elif params[i].type == refpolicy.OBJ_CLASS:
-            ifcall.args.append(av.obj_class)
-        else:
-            print params[i].type
-            assert(0)
-
-    assert(len(ifcall.args) > 0)
-
-    return ifcall
-
-class InterfaceGenerator:
-    def __init__(self, ifs, perm_maps=None):
-        self.ifs = ifs
-        self.hack_check_ifs(ifs)
-        self.matcher = matching.AccessMatcher(perm_maps)
-        self.calls = []
-
-    def hack_check_ifs(self, ifs):
-        # FIXME: Disable interfaces we can't call - this is a hack.
-        # Because we don't handle roles, multiple paramaters, etc.,
-        # etc., we must make certain we can actually use a returned
-        # interface.
-        for x in ifs.interfaces.values():
-            params = []
-            params.extend(x.params.values())
-            params.sort(param_comp)
-            for i in range(len(params)):
-                # Check that the paramater position matches
-                # the number (e.g., $1 is the first arg). This
-                # will fail if the parser missed something.
-                if (i + 1) != params[i].num:
-                    x.enabled = False
-                    break
-                # Check that we can handle the param type (currently excludes
-                # roles.
-                if params[i].type not in [refpolicy.SRC_TYPE, refpolicy.TGT_TYPE,
-                                          refpolicy.OBJ_CLASS]:
-                    x.enabled = False
-                    break
-
-    def gen(self, avs, verbosity):
-        raw_av = self.match(avs)
-        ifcalls = []
-        for ml in self.calls:
-            ifcall = call_interface(ml.best().interface, ml.av)
-            if verbosity:
-                ifcall.comment = refpolicy.Comment(explain_access(ml.av, ml, verbosity))
-            ifcalls.append((ifcall, ml))
-
-        d = []
-        for ifcall, ifs in ifcalls:
-            found = False
-            for o_ifcall in d:
-                if o_ifcall.matches(ifcall):
-                    if o_ifcall.comment and ifcall.comment:
-                        o_ifcall.comment.merge(ifcall.comment)
-                    found = True
-            if not found:
-                d.append(ifcall)
-
-        return (raw_av, d)
-
-
-    def match(self, avs):
-        raw_av = []
-        for av in avs:
-            ans = matching.MatchList()
-            self.matcher.search_ifs(self.ifs, av, ans)
-            if len(ans):
-                self.calls.append(ans)
-            else:
-                raw_av.append(av)
-
-        return raw_av
-
-
-def gen_requires(module):
-    """Add require statements to the module.
-    """
-    def collect_requires(node):
-        r = refpolicy.Require()
-        for avrule in node.avrules():
-            r.types.update(avrule.src_types)
-            r.types.update(avrule.tgt_types)
-            for obj in avrule.obj_classes:
-                r.add_obj_class(obj, avrule.perms)
-
-        for ifcall in node.interface_calls():
-            for arg in ifcall.args:
-                # FIXME - handle non-type arguments when we
-                # can actually figure those out.
-                r.types.add(arg)
-
-        for role_type in node.role_types():
-            r.roles.add(role_type.role)
-            r.types.update(role_type.types)
-                
-        r.types.discard("self")
-
-        node.children.insert(0, r)
-
-    # FUTURE - this is untested on modules with any sort of
-    # nesting
-    for node in module.nodes():
-        collect_requires(node)
-
-
diff --git a/lib/python2.7/site-packages/setoolsgui/sepolgen/refparser.py b/lib/python2.7/site-packages/setoolsgui/sepolgen/refparser.py
deleted file mode 100644
index 83542d3..0000000
--- a/lib/python2.7/site-packages/setoolsgui/sepolgen/refparser.py
+++ /dev/null
@@ -1,1128 +0,0 @@
-# Authors: Karl MacMillan <kmacmillan@mentalrootkit.com>
-#
-# Copyright (C) 2006-2007 Red Hat
-# see file 'COPYING' for use and warranty information
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License as
-# published by the Free Software Foundation; version 2 only
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-#
-
-# OVERVIEW
-#
-#
-# This is a parser for the refpolicy policy "language" - i.e., the
-# normal SELinux policy language plus the refpolicy style M4 macro
-# constructs on top of that base language. This parser is primarily
-# aimed at parsing the policy headers in order to create an abstract
-# policy representation suitable for generating policy.
-#
-# Both the lexer and parser are included in this file. The are implemented
-# using the Ply library (included with sepolgen).
-
-import sys
-import os
-import re
-import traceback
-
-import refpolicy
-import access
-import defaults
-
-import lex
-import yacc
-
-# :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-#
-# lexer
-#
-# :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-
-tokens = (
-    # basic tokens, punctuation
-    'TICK',
-    'SQUOTE',
-    'OBRACE',
-    'CBRACE',
-    'SEMI',
-    'COLON',
-    'OPAREN',
-    'CPAREN',
-    'COMMA',
-    'MINUS',
-    'TILDE',
-    'ASTERISK',
-    'AMP',
-    'BAR',
-    'EXPL',
-    'EQUAL',
-    'FILENAME',
-    'IDENTIFIER',
-    'NUMBER',
-    'PATH',
-    'IPV6_ADDR',
-    # reserved words
-    #   module
-    'MODULE',
-    'POLICY_MODULE',
-    'REQUIRE',
-    #   flask
-    'SID',
-    'GENFSCON',
-    'FS_USE_XATTR',
-    'FS_USE_TRANS',
-    'FS_USE_TASK',
-    'PORTCON',
-    'NODECON',
-    'NETIFCON',
-    'PIRQCON',
-    'IOMEMCON',
-    'IOPORTCON',
-    'PCIDEVICECON',
-    'DEVICETREECON',
-    #   object classes
-    'CLASS',
-    #   types and attributes
-    'TYPEATTRIBUTE',
-    'ROLEATTRIBUTE',
-    'TYPE',
-    'ATTRIBUTE',
-    'ATTRIBUTE_ROLE',
-    'ALIAS',
-    'TYPEALIAS',
-    #   conditional policy
-    'BOOL',
-    'TRUE',
-    'FALSE',
-    'IF',
-    'ELSE',
-    #   users and roles
-    'ROLE',
-    'TYPES',
-    #   rules
-    'ALLOW',
-    'DONTAUDIT',
-    'AUDITALLOW',
-    'NEVERALLOW',
-    'PERMISSIVE',
-    'TYPE_TRANSITION',
-    'TYPE_CHANGE',
-    'TYPE_MEMBER',
-    'RANGE_TRANSITION',
-    'ROLE_TRANSITION',
-    #   refpolicy keywords
-    'OPT_POLICY',
-    'INTERFACE',
-    'TUNABLE_POLICY',
-    'GEN_REQ',
-    'TEMPLATE',
-    'GEN_CONTEXT',
-    #   m4
-    'IFELSE',
-    'IFDEF',
-    'IFNDEF',
-    'DEFINE'
-    )
-
-# All reserved keywords - see t_IDENTIFIER for how these are matched in
-# the lexer.
-reserved = {
-    # module
-    'module' : 'MODULE',
-    'policy_module' : 'POLICY_MODULE',
-    'require' : 'REQUIRE',
-    # flask
-    'sid' : 'SID',
-    'genfscon' : 'GENFSCON',
-    'fs_use_xattr' : 'FS_USE_XATTR',
-    'fs_use_trans' : 'FS_USE_TRANS',
-    'fs_use_task' : 'FS_USE_TASK',
-    'portcon' : 'PORTCON',
-    'nodecon' : 'NODECON',
-    'netifcon' : 'NETIFCON',
-    'pirqcon' : 'PIRQCON',
-    'iomemcon' : 'IOMEMCON',
-    'ioportcon' : 'IOPORTCON',
-    'pcidevicecon' : 'PCIDEVICECON',
-    'devicetreecon' : 'DEVICETREECON',
-    # object classes
-    'class' : 'CLASS',
-    # types and attributes
-    'typeattribute' : 'TYPEATTRIBUTE',
-    'roleattribute' : 'ROLEATTRIBUTE',
-    'type' : 'TYPE',
-    'attribute' : 'ATTRIBUTE',
-    'attribute_role' : 'ATTRIBUTE_ROLE',
-    'alias' : 'ALIAS',
-    'typealias' : 'TYPEALIAS',
-    # conditional policy
-    'bool' : 'BOOL',
-    'true' : 'TRUE',
-    'false' : 'FALSE',
-    'if' : 'IF',
-    'else' : 'ELSE',
-    # users and roles
-    'role' : 'ROLE',
-    'types' : 'TYPES',
-    # rules
-    'allow' : 'ALLOW',
-    'dontaudit' : 'DONTAUDIT',
-    'auditallow' : 'AUDITALLOW',
-    'neverallow' : 'NEVERALLOW',
-    'permissive' : 'PERMISSIVE',
-    'type_transition' : 'TYPE_TRANSITION',
-    'type_change' : 'TYPE_CHANGE',
-    'type_member' : 'TYPE_MEMBER',
-    'range_transition' : 'RANGE_TRANSITION',
-    'role_transition' : 'ROLE_TRANSITION',
-    # refpolicy keywords
-    'optional_policy' : 'OPT_POLICY',
-    'interface' : 'INTERFACE',
-    'tunable_policy' : 'TUNABLE_POLICY',
-    'gen_require' : 'GEN_REQ',
-    'template' : 'TEMPLATE',
-    'gen_context' : 'GEN_CONTEXT',
-    # M4
-    'ifelse' : 'IFELSE',
-    'ifndef' : 'IFNDEF',
-    'ifdef' : 'IFDEF',
-    'define' : 'DEFINE'
-    }
-
-# The ply lexer allows definition of tokens in 2 ways: regular expressions
-# or functions.
-
-# Simple regex tokens
-t_TICK      = r'\`'
-t_SQUOTE    = r'\''
-t_OBRACE    = r'\{'
-t_CBRACE    = r'\}'
-# This will handle spurios extra ';' via the +
-t_SEMI      = r'\;+'
-t_COLON     = r'\:'
-t_OPAREN    = r'\('
-t_CPAREN    = r'\)'
-t_COMMA     = r'\,'
-t_MINUS     = r'\-'
-t_TILDE     = r'\~'
-t_ASTERISK  = r'\*'
-t_AMP       = r'\&'
-t_BAR       = r'\|'
-t_EXPL      = r'\!'
-t_EQUAL     = r'\='
-t_NUMBER    = r'[0-9\.]+'
-t_PATH      = r'/[a-zA-Z0-9)_\.\*/]*'
-#t_IPV6_ADDR = r'[a-fA-F0-9]{0,4}:[a-fA-F0-9]{0,4}:([a-fA-F0-9]{0,4}:)*'
-
-# Ignore whitespace - this is a special token for ply that more efficiently
-# ignores uninteresting tokens.
-t_ignore    = " \t"
-
-# More complex tokens
-def t_IPV6_ADDR(t):
-    r'[a-fA-F0-9]{0,4}:[a-fA-F0-9]{0,4}:([a-fA-F0-9]|:)*'
-    # This is a function simply to force it sooner into
-    # the regex list
-    return t
-
-def t_m4comment(t):
-    r'dnl.*\n'
-    # Ignore all comments
-    t.lexer.lineno += 1
-
-def t_refpolicywarn1(t):
-    r'define.*refpolicywarn\(.*\n'
-    # Ignore refpolicywarn statements - they sometimes
-    # contain text that we can't parse.
-    t.skip(1)
-
-def t_refpolicywarn(t):
-    r'refpolicywarn\(.*\n'
-    # Ignore refpolicywarn statements - they sometimes
-    # contain text that we can't parse.
-    t.lexer.lineno += 1
-
-def t_IDENTIFIER(t):
-    r'[a-zA-Z_\$][a-zA-Z0-9_\-\+\.\$\*~]*'
-    # Handle any keywords
-    t.type = reserved.get(t.value,'IDENTIFIER')
-    return t
-
-def t_FILENAME(t):
-    r'\"[a-zA-Z0-9_\-\+\.\$\*~ :]+\"'
-    # Handle any keywords
-    t.type = reserved.get(t.value,'FILENAME')
-    return t
-
-def t_comment(t):
-    r'\#.*\n'
-    # Ignore all comments
-    t.lexer.lineno += 1
-
-def t_error(t):
-    print "Illegal character '%s'" % t.value[0]
-    t.skip(1)
-
-def t_newline(t):
-    r'\n+'
-    t.lexer.lineno += len(t.value)
-
-# :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-#
-# Parser
-#
-# :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-
-# Global data used during parsing - making it global is easier than
-# passing the state through the parsing functions.
-
-#   m is the top-level data structure (stands for modules).
-m = None
-#   error is either None (indicating no error) or a string error message.
-error = None
-parse_file = ""
-#   spt is the support macros (e.g., obj/perm sets) - it is an instance of
-#     refpolicy.SupportMacros and should always be present during parsing
-#     though it may not contain any macros.
-spt = None
-success = True
-
-# utilities
-def collect(stmts, parent, val=None):
-    if stmts is None:
-        return
-    for s in stmts:
-        if s is None:
-            continue
-        s.parent = parent
-        if val is not None:
-            parent.children.insert(0, (val, s))
-        else:
-            parent.children.insert(0, s)
-
-def expand(ids, s):
-    for id in ids:
-        if spt.has_key(id):
-            s.update(spt.by_name(id))
-        else:
-            s.add(id)
-
-# Top-level non-terminal
-def p_statements(p):
-    '''statements : statement
-                  | statements statement
-                  | empty
-    '''
-    if len(p) == 2 and p[1]:
-        m.children.append(p[1])
-    elif len(p) > 2 and p[2]:
-        m.children.append(p[2])
-
-def p_statement(p):
-    '''statement : interface
-                 | template
-                 | obj_perm_set
-                 | policy
-                 | policy_module_stmt
-                 | module_stmt
-    '''
-    p[0] = p[1]
-
-def p_empty(p):
-    'empty :'
-    pass
-
-#
-# Reference policy language constructs
-#
-
-# This is for the policy module statement (e.g., policy_module(foo,1.2.0)).
-# We have a separate terminal for either the basic language module statement
-# and interface calls to make it easier to identifier.
-def p_policy_module_stmt(p):
-    'policy_module_stmt : POLICY_MODULE OPAREN IDENTIFIER COMMA NUMBER CPAREN'
-    m = refpolicy.ModuleDeclaration()
-    m.name = p[3]
-    m.version = p[5]
-    m.refpolicy = True
-    p[0] = m
-
-def p_interface(p):
-    '''interface : INTERFACE OPAREN TICK IDENTIFIER SQUOTE COMMA TICK interface_stmts SQUOTE CPAREN
-    '''
-    x = refpolicy.Interface(p[4])
-    collect(p[8], x)
-    p[0] = x
-
-def p_template(p):
-    '''template : TEMPLATE OPAREN TICK IDENTIFIER SQUOTE COMMA TICK interface_stmts SQUOTE CPAREN
-                | DEFINE OPAREN TICK IDENTIFIER SQUOTE COMMA TICK interface_stmts SQUOTE CPAREN
-    '''
-    x = refpolicy.Template(p[4])
-    collect(p[8], x)
-    p[0] = x
-
-def p_define(p):
-    '''define : DEFINE OPAREN TICK IDENTIFIER SQUOTE CPAREN'''
-    # This is for defining single M4 values (to be used later in ifdef statements).
-    # Example: define(`sulogin_no_pam'). We don't currently do anything with these
-    # but we should in the future when we correctly resolve ifdef statements.
-    p[0] = None
-
-def p_interface_stmts(p):
-    '''interface_stmts : policy
-                       | interface_stmts policy
-                       | empty
-    '''
-    if len(p) == 2 and p[1]:
-        p[0] = p[1]
-    elif len(p) > 2:
-        if not p[1]:
-            if p[2]:
-                p[0] = p[2]
-        elif not p[2]:
-            p[0] = p[1]
-        else:
-            p[0] = p[1] + p[2]
-
-def p_optional_policy(p):
-    '''optional_policy : OPT_POLICY OPAREN TICK interface_stmts SQUOTE CPAREN
-                       | OPT_POLICY OPAREN TICK interface_stmts SQUOTE COMMA TICK interface_stmts SQUOTE CPAREN
-    '''
-    o = refpolicy.OptionalPolicy()
-    collect(p[4], o, val=True)
-    if len(p) > 7:
-        collect(p[8], o, val=False)
-    p[0] = [o]
-
-def p_tunable_policy(p):
-    '''tunable_policy : TUNABLE_POLICY OPAREN TICK cond_expr SQUOTE COMMA TICK interface_stmts SQUOTE CPAREN
-                      | TUNABLE_POLICY OPAREN TICK cond_expr SQUOTE COMMA TICK interface_stmts SQUOTE COMMA TICK interface_stmts SQUOTE CPAREN
-    '''
-    x = refpolicy.TunablePolicy()
-    x.cond_expr = p[4]
-    collect(p[8], x, val=True)
-    if len(p) > 11:
-        collect(p[12], x, val=False)
-    p[0] = [x]
-
-def p_ifelse(p):
-    '''ifelse : IFELSE OPAREN TICK IDENTIFIER SQUOTE COMMA COMMA TICK IDENTIFIER SQUOTE COMMA TICK interface_stmts SQUOTE CPAREN optional_semi
-              | IFELSE OPAREN TICK IDENTIFIER SQUOTE COMMA TICK IDENTIFIER SQUOTE COMMA TICK interface_stmts SQUOTE COMMA TICK interface_stmts SQUOTE CPAREN optional_semi
-    '''
-#    x = refpolicy.IfDef(p[4])
-#    v = True
-#    collect(p[8], x, val=v)
-#    if len(p) > 12:
-#        collect(p[12], x, val=False)
-#    p[0] = [x]
-    pass
-
-
-def p_ifdef(p):
-    '''ifdef : IFDEF OPAREN TICK IDENTIFIER SQUOTE COMMA TICK interface_stmts SQUOTE CPAREN optional_semi
-             | IFNDEF OPAREN TICK IDENTIFIER SQUOTE COMMA TICK interface_stmts SQUOTE CPAREN optional_semi
-             | IFDEF OPAREN TICK IDENTIFIER SQUOTE COMMA TICK interface_stmts SQUOTE COMMA TICK interface_stmts SQUOTE CPAREN optional_semi
-    '''
-    x = refpolicy.IfDef(p[4])
-    if p[1] == 'ifdef':
-        v = True
-    else:
-        v = False
-    collect(p[8], x, val=v)
-    if len(p) > 12:
-        collect(p[12], x, val=False)
-    p[0] = [x]
-
-def p_interface_call(p):
-    '''interface_call : IDENTIFIER OPAREN interface_call_param_list CPAREN
-                      | IDENTIFIER OPAREN CPAREN
-                      | IDENTIFIER OPAREN interface_call_param_list CPAREN SEMI'''
-    # Allow spurious semi-colons at the end of interface calls
-    i = refpolicy.InterfaceCall(ifname=p[1])
-    if len(p) > 4:
-        i.args.extend(p[3])
-    p[0] = i
-
-def p_interface_call_param(p):
-    '''interface_call_param : IDENTIFIER
-                            | IDENTIFIER MINUS IDENTIFIER
-                            | nested_id_set
-                            | TRUE
-                            | FALSE
-                            | FILENAME
-    '''
-    # Intentionally let single identifiers pass through
-    # List means set, non-list identifier
-    if len(p) == 2:
-        p[0] = p[1]
-    else:
-        p[0] = [p[1], "-" + p[3]]
-
-def p_interface_call_param_list(p):
-    '''interface_call_param_list : interface_call_param
-                                 | interface_call_param_list COMMA interface_call_param
-    '''
-    if len(p) == 2:
-        p[0] = [p[1]]
-    else:
-        p[0] = p[1] + [p[3]]
-
-
-def p_obj_perm_set(p):
-    'obj_perm_set : DEFINE OPAREN TICK IDENTIFIER SQUOTE COMMA TICK names SQUOTE CPAREN'
-    s = refpolicy.ObjPermSet(p[4])
-    s.perms = p[8]
-    p[0] = s
-    
-#
-# Basic SELinux policy language
-#
-
-def p_policy(p):
-    '''policy : policy_stmt
-              | optional_policy
-              | tunable_policy
-              | ifdef
-              | ifelse
-              | conditional
-    '''
-    p[0] = p[1]
-
-def p_policy_stmt(p):
-    '''policy_stmt : gen_require
-                   | avrule_def
-                   | typerule_def
-                   | typeattribute_def
-                   | roleattribute_def
-                   | interface_call
-                   | role_def
-                   | role_allow
-                   | permissive
-                   | type_def
-                   | typealias_def
-                   | attribute_def
-                   | attribute_role_def
-                   | range_transition_def
-                   | role_transition_def
-                   | bool
-                   | define
-                   | initial_sid
-                   | genfscon
-                   | fs_use
-                   | portcon
-                   | nodecon
-                   | netifcon
-                   | pirqcon
-                   | iomemcon
-                   | ioportcon
-                   | pcidevicecon
-                   | devicetreecon
-    '''
-    if p[1]:
-        p[0] = [p[1]]
-
-def p_module_stmt(p):
-    'module_stmt : MODULE IDENTIFIER NUMBER SEMI'
-    m = refpolicy.ModuleDeclaration()
-    m.name = p[2]
-    m.version = p[3]
-    m.refpolicy = False
-    p[0] = m
-
-def p_gen_require(p):
-    '''gen_require : GEN_REQ OPAREN TICK requires SQUOTE CPAREN
-                   | REQUIRE OBRACE requires CBRACE'''
-    # We ignore the require statements - they are redundant data from our point-of-view.
-    # Checkmodule will verify them later anyway so we just assume that they match what
-    # is in the rest of the interface.
-    pass
-
-def p_requires(p):
-    '''requires : require
-                | requires require
-                | ifdef
-                | requires ifdef
-    '''
-    pass
-
-def p_require(p):
-    '''require : TYPE comma_list SEMI
-               | ROLE comma_list SEMI
-               | ATTRIBUTE comma_list SEMI
-               | ATTRIBUTE_ROLE comma_list SEMI
-               | CLASS comma_list SEMI
-               | BOOL comma_list SEMI
-    '''
-    pass
-
-def p_security_context(p):
-    '''security_context : IDENTIFIER COLON IDENTIFIER COLON IDENTIFIER
-                        | IDENTIFIER COLON IDENTIFIER COLON IDENTIFIER COLON mls_range_def'''
-    # This will likely need some updates to handle complex levels
-    s = refpolicy.SecurityContext()
-    s.user = p[1]
-    s.role = p[3]
-    s.type = p[5]
-    if len(p) > 6:
-        s.level = p[7]
-
-    p[0] = s
-
-def p_gen_context(p):
-    '''gen_context : GEN_CONTEXT OPAREN security_context COMMA mls_range_def CPAREN
-    '''
-    # We actually store gen_context statements in a SecurityContext
-    # object - it knows how to output either a bare context or a
-    # gen_context statement.
-    s = p[3]
-    s.level = p[5]
-    
-    p[0] = s
-
-def p_context(p):
-    '''context : security_context
-               | gen_context
-    '''
-    p[0] = p[1]
-
-def p_initial_sid(p):
-    '''initial_sid : SID IDENTIFIER context'''
-    s = refpolicy.InitialSid()
-    s.name = p[2]
-    s.context = p[3]
-    p[0] = s
-
-def p_genfscon(p):
-    '''genfscon : GENFSCON IDENTIFIER PATH context'''
-    
-    g = refpolicy.GenfsCon()
-    g.filesystem = p[2]
-    g.path = p[3]
-    g.context = p[4]
-
-    p[0] = g
-
-def p_fs_use(p):
-    '''fs_use : FS_USE_XATTR IDENTIFIER context SEMI
-              | FS_USE_TASK IDENTIFIER context SEMI
-              | FS_USE_TRANS IDENTIFIER context SEMI
-    '''
-    f = refpolicy.FilesystemUse()
-    if p[1] == "fs_use_xattr":
-        f.type = refpolicy.FilesystemUse.XATTR
-    elif p[1] == "fs_use_task":
-        f.type = refpolicy.FilesystemUse.TASK
-    elif p[1] == "fs_use_trans":
-        f.type = refpolicy.FilesystemUse.TRANS
-
-    f.filesystem = p[2]
-    f.context = p[3]
-
-    p[0] = f
-
-def p_portcon(p):
-    '''portcon : PORTCON IDENTIFIER NUMBER context
-               | PORTCON IDENTIFIER NUMBER MINUS NUMBER context'''
-    c = refpolicy.PortCon()
-    c.port_type = p[2]
-    if len(p) == 5:
-        c.port_number = p[3]
-        c.context = p[4]
-    else:
-        c.port_number = p[3] + "-" + p[4]
-        c.context = p[5]
-
-    p[0] = c
-
-def p_nodecon(p):
-    '''nodecon : NODECON NUMBER NUMBER context
-               | NODECON IPV6_ADDR IPV6_ADDR context
-    '''
-    n = refpolicy.NodeCon()
-    n.start = p[2]
-    n.end = p[3]
-    n.context = p[4]
-
-    p[0] = n
-
-def p_netifcon(p):
-    'netifcon : NETIFCON IDENTIFIER context context'
-    n = refpolicy.NetifCon()
-    n.interface = p[2]
-    n.interface_context = p[3]
-    n.packet_context = p[4]
-
-    p[0] = n
-
-def p_pirqcon(p):
-    'pirqcon : PIRQCON NUMBER context'
-    c = refpolicy.PirqCon()
-    c.pirq_number = p[2]
-    c.context = p[3]
-
-    p[0] = c
-
-def p_iomemcon(p):
-    '''iomemcon : IOMEMCON NUMBER context
-                | IOMEMCON NUMBER MINUS NUMBER context'''
-    c = refpolicy.IomemCon()
-    if len(p) == 4:
-        c.device_mem = p[2]
-        c.context = p[3]
-    else:
-        c.device_mem = p[2] + "-" + p[3]
-        c.context = p[4]
-
-    p[0] = c
-
-def p_ioportcon(p):
-    '''ioportcon : IOPORTCON NUMBER context
-                | IOPORTCON NUMBER MINUS NUMBER context'''
-    c = refpolicy.IoportCon()
-    if len(p) == 4:
-        c.ioport = p[2]
-        c.context = p[3]
-    else:
-        c.ioport = p[2] + "-" + p[3]
-        c.context = p[4]
-
-    p[0] = c
-
-def p_pcidevicecon(p):
-    'pcidevicecon : PCIDEVICECON NUMBER context'
-    c = refpolicy.PciDeviceCon()
-    c.device = p[2]
-    c.context = p[3]
-
-    p[0] = c
-
-def p_devicetreecon(p):
-    'devicetreecon : DEVICETREECON NUMBER context'
-    c = refpolicy.DevicetTeeCon()
-    c.path = p[2]
-    c.context = p[3]
-
-    p[0] = c
-
-def p_mls_range_def(p):
-    '''mls_range_def : mls_level_def MINUS mls_level_def
-                     | mls_level_def
-    '''
-    p[0] = p[1]
-    if len(p) > 2:
-        p[0] = p[0] + "-" + p[3]
-
-def p_mls_level_def(p):
-    '''mls_level_def : IDENTIFIER COLON comma_list
-                     | IDENTIFIER
-    '''
-    p[0] = p[1]
-    if len(p) > 2:
-        p[0] = p[0] + ":" + ",".join(p[3])
-    
-def p_type_def(p):
-    '''type_def : TYPE IDENTIFIER COMMA comma_list SEMI
-                | TYPE IDENTIFIER SEMI
-                | TYPE IDENTIFIER ALIAS names SEMI
-                | TYPE IDENTIFIER ALIAS names COMMA comma_list SEMI
-    '''
-    t = refpolicy.Type(p[2])
-    if len(p) == 6:
-        if p[3] == ',':
-            t.attributes.update(p[4])
-        else:
-            t.aliases = p[4]
-    elif len(p) > 4:
-        t.aliases = p[4]
-        if len(p) == 8:
-            t.attributes.update(p[6])
-    p[0] = t
-
-def p_attribute_def(p):
-    'attribute_def : ATTRIBUTE IDENTIFIER SEMI'
-    a = refpolicy.Attribute(p[2])
-    p[0] = a
-
-def p_attribute_role_def(p):
-	'attribute_role_def : ATTRIBUTE_ROLE IDENTIFIER SEMI'
-	a = refpolicy.Attribute_Role(p[2])
-	p[0] = a
-
-def p_typealias_def(p):
-    'typealias_def : TYPEALIAS IDENTIFIER ALIAS names SEMI'
-    t = refpolicy.TypeAlias()
-    t.type = p[2]
-    t.aliases = p[4]
-    p[0] = t
-
-def p_role_def(p):
-    '''role_def : ROLE IDENTIFIER TYPES comma_list SEMI
-                | ROLE IDENTIFIER SEMI'''
-    r = refpolicy.Role()
-    r.role = p[2]
-    if len(p) > 4:
-        r.types.update(p[4])
-    p[0] = r
-
-def p_role_allow(p):
-    'role_allow : ALLOW names names SEMI'
-    r = refpolicy.RoleAllow()
-    r.src_roles = p[2]
-    r.tgt_roles = p[3]
-    p[0] = r
-
-def p_permissive(p):
-    'permissive : PERMISSIVE names SEMI'
-    t.skip(1)
-
-def p_avrule_def(p):
-    '''avrule_def : ALLOW names names COLON names names SEMI
-                  | DONTAUDIT names names COLON names names SEMI
-                  | AUDITALLOW names names COLON names names SEMI
-                  | NEVERALLOW names names COLON names names SEMI
-    '''
-    a = refpolicy.AVRule()
-    if p[1] == 'dontaudit':
-        a.rule_type = refpolicy.AVRule.DONTAUDIT
-    elif p[1] == 'auditallow':
-        a.rule_type = refpolicy.AVRule.AUDITALLOW
-    elif p[1] == 'neverallow':
-        a.rule_type = refpolicy.AVRule.NEVERALLOW
-    a.src_types = p[2]
-    a.tgt_types = p[3]
-    a.obj_classes = p[5]
-    a.perms = p[6]
-    p[0] = a
-
-def p_typerule_def(p):
-    '''typerule_def : TYPE_TRANSITION names names COLON names IDENTIFIER SEMI
-                    | TYPE_TRANSITION names names COLON names IDENTIFIER FILENAME SEMI
-                    | TYPE_TRANSITION names names COLON names IDENTIFIER IDENTIFIER SEMI
-                    | TYPE_CHANGE names names COLON names IDENTIFIER SEMI
-                    | TYPE_MEMBER names names COLON names IDENTIFIER SEMI
-    '''
-    t = refpolicy.TypeRule()
-    if p[1] == 'type_change':
-        t.rule_type = refpolicy.TypeRule.TYPE_CHANGE
-    elif p[1] == 'type_member':
-        t.rule_type = refpolicy.TypeRule.TYPE_MEMBER
-    t.src_types = p[2]
-    t.tgt_types = p[3]
-    t.obj_classes = p[5]
-    t.dest_type = p[6]
-    t.file_name = p[7]
-    p[0] = t
-
-def p_bool(p):
-    '''bool : BOOL IDENTIFIER TRUE SEMI
-            | BOOL IDENTIFIER FALSE SEMI'''
-    b = refpolicy.Bool()
-    b.name = p[2]
-    if p[3] == "true":
-        b.state = True
-    else:
-        b.state = False
-    p[0] = b
-
-def p_conditional(p):
-    ''' conditional : IF OPAREN cond_expr CPAREN OBRACE interface_stmts CBRACE
-                    | IF OPAREN cond_expr CPAREN OBRACE interface_stmts CBRACE ELSE OBRACE interface_stmts CBRACE
-    '''
-    c = refpolicy.Conditional()
-    c.cond_expr = p[3]
-    collect(p[6], c, val=True)
-    if len(p) > 8:
-        collect(p[10], c, val=False)
-    p[0] = [c]
-
-def p_typeattribute_def(p):
-    '''typeattribute_def : TYPEATTRIBUTE IDENTIFIER comma_list SEMI'''
-    t = refpolicy.TypeAttribute()
-    t.type = p[2]
-    t.attributes.update(p[3])
-    p[0] = t
-
-def p_roleattribute_def(p):
-    '''roleattribute_def : ROLEATTRIBUTE IDENTIFIER comma_list SEMI'''
-    t = refpolicy.RoleAttribute()
-    t.role = p[2]
-    t.roleattributes.update(p[3])
-    p[0] = t
-
-def p_range_transition_def(p):
-    '''range_transition_def : RANGE_TRANSITION names names COLON names mls_range_def SEMI
-                            | RANGE_TRANSITION names names names SEMI'''
-    pass
-
-def p_role_transition_def(p):
-    '''role_transition_def : ROLE_TRANSITION names names names SEMI'''
-    pass
-
-def p_cond_expr(p):
-    '''cond_expr : IDENTIFIER
-                 | EXPL cond_expr
-                 | cond_expr AMP AMP cond_expr
-                 | cond_expr BAR BAR cond_expr
-                 | cond_expr EQUAL EQUAL cond_expr
-                 | cond_expr EXPL EQUAL cond_expr
-    '''
-    l = len(p)
-    if l == 2:
-        p[0] = [p[1]]
-    elif l == 3:
-        p[0] = [p[1]] + p[2]
-    else:
-        p[0] = p[1] + [p[2] + p[3]] + p[4]
-
-
-#
-# Basic terminals
-#
-
-# Identifiers and lists of identifiers. These must
-# be handled somewhat gracefully. Names returns an IdSet and care must
-# be taken that this is _assigned_ to an object to correctly update
-# all of the flags (as opposed to using update). The other terminals
-# return list - this is to preserve ordering if it is important for
-# parsing (for example, interface_call must retain the ordering). Other
-# times the list should be used to update an IdSet.
-
-def p_names(p):
-    '''names : identifier
-             | nested_id_set
-             | asterisk
-             | TILDE identifier
-             | TILDE nested_id_set
-             | IDENTIFIER MINUS IDENTIFIER
-    '''
-    s = refpolicy.IdSet()
-    if len(p) < 3:
-        expand(p[1], s)
-    elif len(p) == 3:
-        expand(p[2], s)
-        s.compliment = True
-    else:
-        expand([p[1]])
-        s.add("-" + p[3])
-    p[0] = s
-
-def p_identifier(p):
-    'identifier : IDENTIFIER'
-    p[0] = [p[1]]
-
-def p_asterisk(p):
-    'asterisk : ASTERISK'
-    p[0] = [p[1]]
-
-def p_nested_id_set(p):
-    '''nested_id_set : OBRACE nested_id_list CBRACE
-    '''
-    p[0] = p[2]
-
-def p_nested_id_list(p):
-    '''nested_id_list : nested_id_element
-                      | nested_id_list nested_id_element
-    '''
-    if len(p) == 2:
-        p[0] = p[1]
-    else:
-        p[0] = p[1] + p[2]
-
-def p_nested_id_element(p):
-    '''nested_id_element : identifier
-                         | MINUS IDENTIFIER
-                         | nested_id_set
-    '''
-    if len(p) == 2:
-        p[0] = p[1]
-    else:
-        # For now just leave the '-'
-        str = "-" + p[2]
-        p[0] = [str]
-
-def p_comma_list(p):
-    '''comma_list : nested_id_list
-                  | comma_list COMMA nested_id_list
-    '''
-    if len(p) > 2:
-        p[1] = p[1] + p[3]
-    p[0] = p[1]
-
-def p_optional_semi(p):
-    '''optional_semi : SEMI
-                   | empty'''
-    pass
-
-
-#
-# Interface to the parser
-#
-
-def p_error(tok):
-    global error, parse_file, success, parser
-    error = "%s: Syntax error on line %d %s [type=%s]" % (parse_file, tok.lineno, tok.value, tok.type)
-    print error
-    success = False
-
-def prep_spt(spt):
-    if not spt:
-        return { }
-    map = {}
-    for x in spt:
-        map[x.name] = x
-
-parser = None
-lexer = None
-def create_globals(module, support, debug):
-    global parser, lexer, m, spt
-
-    if not parser:
-        lexer = lex.lex()
-        parser = yacc.yacc(method="LALR", debug=debug, write_tables=0)
-
-    if module is not None:
-        m = module
-    else:
-        m = refpolicy.Module()
-
-    if not support:
-        spt = refpolicy.SupportMacros()
-    else:
-        spt = support
-
-def parse(text, module=None, support=None, debug=False):
-    create_globals(module, support, debug)
-    global error, parser, lexer, success
-
-    success = True
-
-    try:
-        parser.parse(text, debug=debug, lexer=lexer)
-    except Exception, e:
-        parser = None
-        lexer = None
-        error = "internal parser error: %s" % str(e) + "\n" + traceback.format_exc()
-
-    if not success:
-        # force the parser and lexer to be rebuilt - we have some problems otherwise
-        parser = None
-        msg = 'could not parse text: "%s"' % error
-        raise ValueError(msg)
-    return m
-
-def list_headers(root):
-    modules = []
-    support_macros = None
-
-    for dirpath, dirnames, filenames in os.walk(root):
-        for name in filenames:
-            modname = os.path.splitext(name)
-            filename = os.path.join(dirpath, name)
-
-            if modname[1] == '.spt':
-                if name == "obj_perm_sets.spt":
-                    support_macros = filename
-                elif len(re.findall("patterns", modname[0])):
-                         modules.append((modname[0], filename))
-            elif modname[1] == '.if':
-                modules.append((modname[0], filename))
-
-    return (modules, support_macros)
-
-
-def parse_headers(root, output=None, expand=True, debug=False):
-    import util
-
-    headers = refpolicy.Headers()
-
-    modules = []
-    support_macros = None
-
-    if os.path.isfile(root):
-        name = os.path.split(root)[1]
-        if name == '':
-            raise ValueError("Invalid file name %s" % root)
-        modname = os.path.splitext(name)
-        modules.append((modname[0], root))
-        all_modules, support_macros = list_headers(defaults.headers())
-    else:
-        modules, support_macros = list_headers(root)
-
-    if expand and not support_macros:
-        raise ValueError("could not find support macros (obj_perm_sets.spt)")
-
-    def o(msg):
-        if output:
-            output.write(msg)
-
-    def parse_file(f, module, spt=None):
-        global parse_file
-        if debug:
-            o("parsing file %s\n" % f)
-        try:
-            fd = open(f)
-            txt = fd.read()
-            fd.close()
-            parse_file = f
-            parse(txt, module, spt, debug)
-        except IOError, e:
-            return
-        except ValueError, e:
-            raise ValueError("error parsing file %s: %s" % (f, str(e)))
-
-    spt = None
-    if support_macros:
-        o("Parsing support macros (%s): " % support_macros)
-        spt = refpolicy.SupportMacros()
-        parse_file(support_macros, spt)
-
-        headers.children.append(spt)
-
-        # FIXME: Total hack - add in can_exec rather than parse the insanity
-        # of misc_macros. We are just going to pretend that this is an interface
-        # to make the expansion work correctly.
-        can_exec = refpolicy.Interface("can_exec")
-        av = access.AccessVector(["$1","$2","file","execute_no_trans","open", "read",
-                                  "getattr","lock","execute","ioctl"])
-
-        can_exec.children.append(refpolicy.AVRule(av))
-        headers.children.append(can_exec)
-
-        o("done.\n")
-
-    if output and not debug:
-        status = util.ConsoleProgressBar(sys.stdout, steps=len(modules))
-        status.start("Parsing interface files")
-
-    failures = []
-    for x in modules:
-        m = refpolicy.Module()
-        m.name = x[0]
-        try:
-            if expand:
-                parse_file(x[1], m, spt)
-            else:
-                parse_file(x[1], m)
-        except ValueError, e:
-            o(str(e) + "\n")
-            failures.append(x[1])
-            continue
-
-        headers.children.append(m)
-        if output and not debug:
-            status.step()
-
-    if len(failures):
-        o("failed to parse some headers: %s" % ", ".join(failures))
-
-    return headers
diff --git a/lib/python2.7/site-packages/setoolsgui/sepolgen/refpolicy.py b/lib/python2.7/site-packages/setoolsgui/sepolgen/refpolicy.py
deleted file mode 100644
index b8ed5c1..0000000
--- a/lib/python2.7/site-packages/setoolsgui/sepolgen/refpolicy.py
+++ /dev/null
@@ -1,917 +0,0 @@
-# Authors: Karl MacMillan <kmacmillan@mentalrootkit.com>
-#
-# Copyright (C) 2006 Red Hat
-# see file 'COPYING' for use and warranty information
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License as
-# published by the Free Software Foundation; version 2 only
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-#
-
-import string
-import itertools
-import selinux
-
-# OVERVIEW
-#
-# This file contains objects and functions used to represent the reference
-# policy (including the headers, M4 macros, and policy language statements).
-#
-# This representation is very different from the semantic representation
-# used in libsepol. Instead, it is a more typical abstract representation
-# used by the first stage of compilers. It is basically a parse tree.
-#
-# This choice is intentional as it allows us to handle the unprocessed
-# M4 statements - including the $1 style arguments - and to more easily generate
-# the data structures that we need for policy generation.
-#
-
-# Constans for referring to fields
-SRC_TYPE  = 0
-TGT_TYPE  = 1
-OBJ_CLASS = 2
-PERMS     = 3
-ROLE      = 4
-DEST_TYPE = 5
-
-# String represenations of the above constants
-field_to_str = ["source", "target", "object", "permission", "role", "destination" ]
-str_to_field = { "source" : SRC_TYPE, "target" : TGT_TYPE, "object" : OBJ_CLASS,
-                "permission" : PERMS, "role" : ROLE, "destination" : DEST_TYPE }
-
-# Base Classes
-
-class PolicyBase:
-    def __init__(self, parent=None):
-        self.parent = None
-        self.comment = None
-
-class Node(PolicyBase):
-    """Base class objects produced from parsing the reference policy.
-
-    The Node class is used as the base class for any non-leaf
-    object produced by parsing the reference policy. This object
-    should contain a reference to its parent (or None for a top-level
-    object) and 0 or more children.
-
-    The general idea here is to have a very simple tree structure. Children
-    are not separated out by type. Instead the tree structure represents
-    fairly closely the real structure of the policy statements.
-
-    The object should be iterable - by default over all children but
-    subclasses are free to provide additional iterators over a subset
-    of their childre (see Interface for example).
-    """
-
-    def __init__(self, parent=None):
-        PolicyBase.__init__(self, parent)
-        self.children = []
-
-    def __iter__(self):
-        return iter(self.children)
-
-    # Not all of the iterators will return something on all Nodes, but
-    # they won't explode either. Putting them here is just easier.
-
-    # Top level nodes
-
-    def nodes(self):
-        return itertools.ifilter(lambda x: isinstance(x, Node), walktree(self))
-
-    def modules(self):
-        return itertools.ifilter(lambda x: isinstance(x, Module), walktree(self))
-
-    def interfaces(self):
-        return itertools.ifilter(lambda x: isinstance(x, Interface), walktree(self))
-
-    def templates(self):
-        return itertools.ifilter(lambda x: isinstance(x, Template), walktree(self))
-
-    def support_macros(self):
-        return itertools.ifilter(lambda x: isinstance(x, SupportMacros), walktree(self))
-
-    # Common policy statements
-
-    def module_declarations(self):
-        return itertools.ifilter(lambda x: isinstance(x, ModuleDeclaration), walktree(self))
-
-    def interface_calls(self):
-        return itertools.ifilter(lambda x: isinstance(x, InterfaceCall), walktree(self))
-
-    def avrules(self):
-        return itertools.ifilter(lambda x: isinstance(x, AVRule), walktree(self))
-
-    def typerules(self):
-        return itertools.ifilter(lambda x: isinstance(x, TypeRule), walktree(self))
-
-    def typeattributes(self):
-        """Iterate over all of the TypeAttribute children of this Interface."""
-        return itertools.ifilter(lambda x: isinstance(x, TypeAttribute), walktree(self))
-
-    def roleattributes(self):
-        """Iterate over all of the RoleAttribute children of this Interface."""
-        return itertools.ifilter(lambda x: isinstance(x, RoleAttribute), walktree(self))
-
-    def requires(self):
-        return itertools.ifilter(lambda x: isinstance(x, Require), walktree(self))
-
-    def roles(self):
-        return itertools.ifilter(lambda x: isinstance(x, Role), walktree(self))
-
-    def role_allows(self):
-        return itertools.ifilter(lambda x: isinstance(x, RoleAllow), walktree(self))
-
-    def role_types(self):
-        return itertools.ifilter(lambda x: isinstance(x, RoleType), walktree(self))
-
-    def __str__(self):
-        if self.comment:
-            return str(self.comment) + "\n" + self.to_string()
-        else:
-            return self.to_string()
-
-    def __repr__(self):
-        return "<%s(%s)>" % (self.__class__.__name__, self.to_string())
-
-    def to_string(self):
-        return ""
-
-
-class Leaf(PolicyBase):
-    def __init__(self, parent=None):
-        PolicyBase.__init__(self, parent)
-
-    def __str__(self):
-        if self.comment:
-            return str(self.comment) + "\n" + self.to_string()
-        else:
-            return self.to_string()
-
-    def __repr__(self):
-        return "<%s(%s)>" % (self.__class__.__name__, self.to_string())
-
-    def to_string(self):
-        return ""
-
-
-
-# Utility functions
-
-def walktree(node, depthfirst=True, showdepth=False, type=None):
-    """Iterate over a Node and its Children.
-
-    The walktree function iterates over a tree containing Nodes and
-    leaf objects. The iteration can perform a depth first or a breadth
-    first traversal of the tree (controlled by the depthfirst
-    paramater. The passed in node will be returned.
-
-    This function will only work correctly for trees - arbitrary graphs
-    will likely cause infinite looping.
-    """
-    # We control depth first / versus breadth first by
-    # how we pop items off of the node stack.
-    if depthfirst:
-        index = -1
-    else:
-        index = 0
-
-    stack = [(node, 0)]
-    while len(stack) > 0:
-        cur, depth = stack.pop(index)
-        if showdepth:
-            yield cur, depth
-        else:
-            yield cur
-
-        # If the node is not a Node instance it must
-        # be a leaf - so no need to add it to the stack
-        if isinstance(cur, Node):
-            items = []
-            i = len(cur.children) - 1
-            while i >= 0:
-                if type is None or isinstance(cur.children[i], type):
-                    items.append((cur.children[i], depth + 1))
-                i -= 1
-
-            stack.extend(items)
-
-def walknode(node, type=None):
-    """Iterate over the direct children of a Node.
-
-    The walktree function iterates over the children of a Node.
-    Unlike walktree it does note return the passed in node or
-    the children of any Node objects (that is, it does not go
-    beyond the current level in the tree).
-    """
-    for x in node:
-        if type is None or isinstance(x, type):
-            yield x
-
-
-def list_to_space_str(s, cont=('{', '}')):
-    """Convert a set (or any sequence type) into a string representation
-    formatted to match SELinux space separated list conventions.
-
-    For example the list ['read', 'write'] would be converted into:
-    '{ read write }'
-    """
-    l = len(s)
-    str = ""
-    if l < 1:
-        raise ValueError("cannot convert 0 len set to string")
-    str = " ".join(s)
-    if l == 1:
-        return str
-    else:
-        return cont[0] + " " + str + " " + cont[1]
-
-def list_to_comma_str(s):
-    l = len(s)
-    if l < 1:
-        raise ValueError("cannot conver 0 len set to comma string")
-
-    return ", ".join(s)
-
-# Basic SELinux types
-
-class IdSet(set):
-    def __init__(self, list=None):
-        if list:
-            set.__init__(self, list)
-        else:
-            set.__init__(self)
-        self.compliment = False
-
-    def to_space_str(self):
-        return list_to_space_str(self)
-
-    def to_comma_str(self):
-        return list_to_comma_str(self)
-
-class SecurityContext(Leaf):
-    """An SELinux security context with optional MCS / MLS fields."""
-    def __init__(self, context=None, parent=None):
-        """Create a SecurityContext object, optionally from a string.
-
-        Parameters:
-           [context] - string representing a security context. Same format
-              as a string passed to the from_string method.
-        """
-        Leaf.__init__(self, parent)
-        self.user = ""
-        self.role = ""
-        self.type = ""
-        self.level = None
-        if context is not None:
-            self.from_string(context)
-
-    def from_string(self, context):
-        """Parse a string representing a context into a SecurityContext.
-
-        The string should be in the standard format - e.g.,
-        'user:role:type:level'.
-
-        Raises ValueError if the string is not parsable as a security context.
-        """
-        fields = context.split(":")
-        if len(fields) < 3:
-            raise ValueError("context string [%s] not in a valid format" % context)
-
-        self.user = fields[0]
-        self.role = fields[1]
-        self.type = fields[2]
-        if len(fields) > 3:
-            # FUTURE - normalize level fields to allow more comparisons to succeed.
-            self.level = string.join(fields[3:], ':')
-        else:
-            self.level = None
-
-    def __eq__(self, other):
-        """Compare two SecurityContext objects - all fields must be exactly the
-        the same for the comparison to work. It is possible for the level fields
-        to be semantically the same yet syntactically different - in this case
-        this function will return false.
-        """
-        return self.user == other.user and \
-               self.role == other.role and \
-               self.type == other.type and \
-               self.level == other.level
-
-    def to_string(self, default_level=None):
-        """Return a string representing this security context.
-
-        By default, the string will contiain a MCS / MLS level
-        potentially from the default which is passed in if none was
-        set.
-
-        Arguments:
-           default_level - the default level to use if self.level is an
-             empty string.
-
-        Returns:
-           A string represening the security context in the form
-              'user:role:type:level'.
-        """
-        fields = [self.user, self.role, self.type]
-        if self.level is None:
-            if default_level is None:
-                if selinux.is_selinux_mls_enabled() == 1:
-                    fields.append("s0")
-            else:
-                fields.append(default_level)
-        else:
-            fields.append(self.level)
-        return ":".join(fields)
-
-class ObjectClass(Leaf):
-    """SELinux object class and permissions.
-
-    This class is a basic representation of an SELinux object
-    class - it does not represent separate common permissions -
-    just the union of the common and class specific permissions.
-    It is meant to be convenient for policy generation.
-    """
-    def __init__(self, name="", parent=None):
-        Leaf.__init__(self, parent)
-        self.name = name
-        self.perms = IdSet()
-
-# Basic statements
-
-class TypeAttribute(Leaf):
-    """SElinux typeattribute statement.
-
-    This class represents a typeattribute statement.
-    """
-    def __init__(self, parent=None):
-        Leaf.__init__(self, parent)
-        self.type = ""
-        self.attributes = IdSet()
-
-    def to_string(self):
-        return "typeattribute %s %s;" % (self.type, self.attributes.to_comma_str())
-
-class RoleAttribute(Leaf):
-    """SElinux roleattribute statement.
-
-    This class represents a roleattribute statement.
-    """
-    def __init__(self, parent=None):
-        Leaf.__init__(self, parent)
-        self.role = ""
-        self.roleattributes = IdSet()
-
-    def to_string(self):
-        return "roleattribute %s %s;" % (self.role, self.roleattributes.to_comma_str())
-
-
-class Role(Leaf):
-    def __init__(self, parent=None):
-        Leaf.__init__(self, parent)
-        self.role = ""
-        self.types = IdSet()
-
-    def to_string(self):
-        s = ""
-        for t in self.types:
-            s += "role %s types %s;\n" % (self.role, t)
-        return s
-
-class Type(Leaf):
-    def __init__(self, name="", parent=None):
-        Leaf.__init__(self, parent)
-        self.name = name
-        self.attributes = IdSet()
-        self.aliases = IdSet()
-
-    def to_string(self):
-        s = "type %s" % self.name
-        if len(self.aliases) > 0:
-            s = s + "alias %s" % self.aliases.to_space_str()
-        if len(self.attributes) > 0:
-            s = s + ", %s" % self.attributes.to_comma_str()
-        return s + ";"
-
-class TypeAlias(Leaf):
-    def __init__(self, parent=None):
-        Leaf.__init__(self, parent)
-        self.type = ""
-        self.aliases = IdSet()
-
-    def to_string(self):
-        return "typealias %s alias %s;" % (self.type, self.aliases.to_space_str())
-
-class Attribute(Leaf):
-    def __init__(self, name="", parent=None):
-        Leaf.__init__(self, parent)
-        self.name = name
-
-    def to_string(self):
-        return "attribute %s;" % self.name
-
-class Attribute_Role(Leaf):
-    def __init__(self, name="", parent=None):
-        Leaf.__init__(self, parent)
-        self.name = name
-
-    def to_string(self):
-        return "attribute_role %s;" % self.name
-
-
-# Classes representing rules
-
-class AVRule(Leaf):
-    """SELinux access vector (AV) rule.
-
-    The AVRule class represents all varieties of AV rules including
-    allow, dontaudit, and auditallow (indicated by the flags self.ALLOW,
-    self.DONTAUDIT, and self.AUDITALLOW respectively).
-
-    The source and target types, object classes, and perms are all represented
-    by sets containing strings. Sets are used to make it simple to add
-    strings repeatedly while avoiding duplicates.
-
-    No checking is done to make certain that the symbols are valid or
-    consistent (e.g., perms that don't match the object classes). It is
-    even possible to put invalid types like '$1' into the rules to allow
-    storage of the reference policy interfaces.
-    """
-    ALLOW = 0
-    DONTAUDIT = 1
-    AUDITALLOW = 2
-    NEVERALLOW = 3
-
-    def __init__(self, av=None, parent=None):
-        Leaf.__init__(self, parent)
-        self.src_types = IdSet()
-        self.tgt_types = IdSet()
-        self.obj_classes = IdSet()
-        self.perms = IdSet()
-        self.rule_type = self.ALLOW
-        if av:
-            self.from_av(av)
-
-    def __rule_type_str(self):
-        if self.rule_type == self.ALLOW:
-            return "allow"
-        elif self.rule_type == self.DONTAUDIT:
-            return "dontaudit"
-        else:
-            return "auditallow"
-
-    def from_av(self, av):
-        """Add the access from an access vector to this allow
-        rule.
-        """
-        self.src_types.add(av.src_type)
-        if av.src_type == av.tgt_type:
-            self.tgt_types.add("self")
-        else:
-            self.tgt_types.add(av.tgt_type)
-        self.obj_classes.add(av.obj_class)
-        self.perms.update(av.perms)
-
-    def to_string(self):
-        """Return a string representation of the rule
-        that is a valid policy language representation (assuming
-        that the types, object class, etc. are valie).
-        """
-        return "%s %s %s:%s %s;" % (self.__rule_type_str(),
-                                     self.src_types.to_space_str(),
-                                     self.tgt_types.to_space_str(),
-                                     self.obj_classes.to_space_str(),
-                                     self.perms.to_space_str())
-class TypeRule(Leaf):
-    """SELinux type rules.
-
-    This class is very similar to the AVRule class, but is for representing
-    the type rules (type_trans, type_change, and type_member). The major
-    difference is the lack of perms and only and sing destination type.
-    """
-    TYPE_TRANSITION = 0
-    TYPE_CHANGE = 1
-    TYPE_MEMBER = 2
-
-    def __init__(self, parent=None):
-        Leaf.__init__(self, parent)
-        self.src_types = IdSet()
-        self.tgt_types = IdSet()
-        self.obj_classes = IdSet()
-        self.dest_type = ""
-        self.rule_type = self.TYPE_TRANSITION
-
-    def __rule_type_str(self):
-        if self.rule_type == self.TYPE_TRANSITION:
-            return "type_transition"
-        elif self.rule_type == self.TYPE_CHANGE:
-            return "type_change"
-        else:
-            return "type_member"
-
-    def to_string(self):
-        return "%s %s %s:%s %s;" % (self.__rule_type_str(),
-                                     self.src_types.to_space_str(),
-                                     self.tgt_types.to_space_str(),
-                                     self.obj_classes.to_space_str(),
-                                     self.dest_type)
-
-class RoleAllow(Leaf):
-    def __init__(self, parent=None):
-        Leaf.__init__(self, parent)
-        self.src_roles = IdSet()
-        self.tgt_roles = IdSet()
-
-    def to_string(self):
-        return "allow %s %s;" % (self.src_roles.to_comma_str(),
-                                 self.tgt_roles.to_comma_str())
-
-class RoleType(Leaf):
-    def __init__(self, parent=None):
-        Leaf.__init__(self, parent)
-        self.role = ""
-        self.types = IdSet()
-
-    def to_string(self):
-        s = ""
-        for t in self.types:
-            s += "role %s types %s;\n" % (self.role, t)
-        return s
-
-class ModuleDeclaration(Leaf):
-    def __init__(self, parent=None):
-        Leaf.__init__(self, parent)
-        self.name = ""
-        self.version = ""
-        self.refpolicy = False
-
-    def to_string(self):
-        if self.refpolicy:
-            return "policy_module(%s, %s)" % (self.name, self.version)
-        else:
-            return "module %s %s;" % (self.name, self.version)
-
-class Conditional(Node):
-    def __init__(self, parent=None):
-        Node.__init__(self, parent)
-        self.cond_expr = []
-
-    def to_string(self):
-        return "[If %s]" % list_to_space_str(self.cond_expr, cont=("", ""))
-
-class Bool(Leaf):
-    def __init__(self, parent=None):
-        Leaf.__init__(self, parent)
-        self.name = ""
-        self.state = False
-
-    def to_string(self):
-        s = "bool %s " % self.name
-        if s.state:
-            return s + "true"
-        else:
-            return s + "false"
-
-class InitialSid(Leaf):
-    def __init(self, parent=None):
-        Leaf.__init__(self, parent)
-        self.name = ""
-        self.context = None
-
-    def to_string(self):
-        return "sid %s %s" % (self.name, str(self.context))
-
-class GenfsCon(Leaf):
-    def __init__(self, parent=None):
-        Leaf.__init__(self, parent)
-        self.filesystem = ""
-        self.path = ""
-        self.context = None
-
-    def to_string(self):
-        return "genfscon %s %s %s" % (self.filesystem, self.path, str(self.context))
-
-class FilesystemUse(Leaf):
-    XATTR = 1
-    TRANS = 2
-    TASK = 3
-    
-    def __init__(self, parent=None):
-        Leaf.__init__(self, parent)
-        self.type = self.XATTR
-        self.filesystem = ""
-        self.context = None
-
-    def to_string(self):
-        s = ""
-        if self.type == XATTR:
-            s = "fs_use_xattr "
-        elif self.type == TRANS:
-            s = "fs_use_trans "
-        elif self.type == TASK:
-            s = "fs_use_task "
-
-        return "%s %s %s;" % (s, self.filesystem, str(self.context))
-
-class PortCon(Leaf):
-    def __init__(self, parent=None):
-        Leaf.__init__(self, parent)
-        self.port_type = ""
-        self.port_number = ""
-        self.context = None
-
-    def to_string(self):
-        return "portcon %s %s %s" % (self.port_type, self.port_number, str(self.context))
-
-class NodeCon(Leaf):
-    def __init__(self, parent=None):
-        Leaf.__init__(self, parent)
-        self.start = ""
-        self.end = ""
-        self.context = None
-
-    def to_string(self):
-        return "nodecon %s %s %s" % (self.start, self.end, str(self.context))
-
-class NetifCon(Leaf):
-    def __init__(self, parent=None):
-        Leaf.__init__(self, parent)
-        self.interface = ""
-        self.interface_context = None
-        self.packet_context = None
-
-    def to_string(self):
-        return "netifcon %s %s %s" % (self.interface, str(self.interface_context),
-                                   str(self.packet_context))
-class PirqCon(Leaf):
-    def __init__(self, parent=None):
-        Leaf.__init__(self, parent)
-        self.pirq_number = ""
-        self.context = None
-
-    def to_string(self):
-        return "pirqcon %s %s" % (self.pirq_number, str(self.context))
-
-class IomemCon(Leaf):
-    def __init__(self, parent=None):
-        Leaf.__init__(self, parent)
-        self.device_mem = ""
-        self.context = None
-
-    def to_string(self):
-        return "iomemcon %s %s" % (self.device_mem, str(self.context))
-
-class IoportCon(Leaf):
-    def __init__(self, parent=None):
-        Leaf.__init__(self, parent)
-        self.ioport = ""
-        self.context = None
-
-    def to_string(self):
-        return "ioportcon %s %s" % (self.ioport, str(self.context))
-
-class PciDeviceCon(Leaf):
-    def __init__(self, parent=None):
-        Leaf.__init__(self, parent)
-        self.device = ""
-        self.context = None
-
-    def to_string(self):
-        return "pcidevicecon %s %s" % (self.device, str(self.context))
-
-class DeviceTreeCon(Leaf):
-    def __init__(self, parent=None):
-        Leaf.__init__(self, parent)
-        self.path = ""
-        self.context = None
-
-    def to_string(self):
-        return "devicetreecon %s %s" % (self.path, str(self.context))
-
-# Reference policy specific types
-
-def print_tree(head):
-    for node, depth in walktree(head, showdepth=True):
-        s = ""
-        for i in range(depth):
-            s = s + "\t"
-        print s + str(node)
-
-
-class Headers(Node):
-    def __init__(self, parent=None):
-        Node.__init__(self, parent)
-
-    def to_string(self):
-        return "[Headers]"
-
-
-class Module(Node):
-    def __init__(self, parent=None):
-        Node.__init__(self, parent)
-
-    def to_string(self):
-        return ""
-
-class Interface(Node):
-    """A reference policy interface definition.
-
-    This class represents a reference policy interface definition.
-    """
-    def __init__(self, name="", parent=None):
-        Node.__init__(self, parent)
-        self.name = name
-
-    def to_string(self):
-        return "[Interface name: %s]" % self.name
-
-class TunablePolicy(Node):
-    def __init__(self, parent=None):
-        Node.__init__(self, parent)
-        self.cond_expr = []
-
-    def to_string(self):
-        return "[Tunable Policy %s]" % list_to_space_str(self.cond_expr, cont=("", ""))
-
-class Template(Node):
-    def __init__(self, name="", parent=None):
-        Node.__init__(self, parent)
-        self.name = name
-
-    def to_string(self):
-        return "[Template name: %s]" % self.name
-
-class IfDef(Node):
-    def __init__(self, name="", parent=None):
-        Node.__init__(self, parent)
-        self.name = name
-
-    def to_string(self):
-        return "[Ifdef name: %s]" % self.name
-
-class InterfaceCall(Leaf):
-    def __init__(self, ifname="", parent=None):
-        Leaf.__init__(self, parent)
-        self.ifname = ifname
-        self.args = []
-        self.comments = []
-
-    def matches(self, other):
-        if self.ifname != other.ifname:
-            return False
-        if len(self.args) != len(other.args):
-            return False
-        for a,b in zip(self.args, other.args):
-            if a != b:
-                return False
-        return True
-
-    def to_string(self):
-        s = "%s(" % self.ifname
-        i = 0
-        for a in self.args:
-            if isinstance(a, list):
-                str = list_to_space_str(a)
-            else:
-                str = a
-                
-            if i != 0:
-                s = s + ", %s" % str
-            else:
-                s = s + str
-            i += 1
-        return s + ")"
-
-class OptionalPolicy(Node):
-    def __init__(self, parent=None):
-        Node.__init__(self, parent)
-
-    def to_string(self):
-        return "[Optional Policy]"
-
-class SupportMacros(Node):
-    def __init__(self, parent=None):
-        Node.__init__(self, parent)
-        self.map = None
-
-    def to_string(self):
-        return "[Support Macros]"
-
-    def __expand_perm(self, perm):
-        # Recursive expansion - the assumption is that these
-        # are ordered correctly so that no macro is used before
-        # it is defined
-        s = set()
-        if self.map.has_key(perm):
-            for p in self.by_name(perm):
-                s.update(self.__expand_perm(p))
-        else:
-            s.add(perm)
-        return s
-
-    def __gen_map(self):
-        self.map = {}
-        for x in self:
-            exp_perms = set()
-            for perm in x.perms:
-                exp_perms.update(self.__expand_perm(perm))
-            self.map[x.name] = exp_perms
-
-    def by_name(self, name):
-        if not self.map:
-            self.__gen_map()
-        return self.map[name]
-
-    def has_key(self, name):
-        if not self.map:
-            self.__gen_map()
-        return self.map.has_key(name)
-
-class Require(Leaf):
-    def __init__(self, parent=None):
-        Leaf.__init__(self, parent)
-        self.types = IdSet()
-        self.obj_classes = { }
-        self.roles = IdSet()
-        self.data = IdSet()
-        self.users = IdSet()
-
-    def add_obj_class(self, obj_class, perms):
-        p = self.obj_classes.setdefault(obj_class, IdSet())
-        p.update(perms)
-
-
-    def to_string(self):
-        s = []
-        s.append("require {")
-        for type in self.types:
-            s.append("\ttype %s;" % type)
-        for obj_class, perms in self.obj_classes.items():
-            s.append("\tclass %s %s;" % (obj_class, perms.to_space_str()))
-        for role in self.roles:
-            s.append("\trole %s;" % role)
-        for bool in self.data:
-            s.append("\tbool %s;" % bool)
-        for user in self.users:
-            s.append("\tuser %s;" % user)
-        s.append("}")
-
-        # Handle empty requires
-        if len(s) == 2:
-            return ""
-
-        return "\n".join(s)
-
-
-class ObjPermSet:
-    def __init__(self, name):
-        self.name = name
-        self.perms = set()
-
-    def to_string(self):
-        return "define(`%s', `%s')" % (self.name, self.perms.to_space_str())
-
-class ClassMap:
-    def __init__(self, obj_class, perms):
-        self.obj_class = obj_class
-        self.perms = perms
-
-    def to_string(self):
-        return self.obj_class + ": " + self.perms
-
-class Comment:
-    def __init__(self, l=None):
-        if l:
-            self.lines = l
-        else:
-            self.lines = []
-
-    def to_string(self):
-        # If there are no lines, treat this as a spacer between
-        # policy statements and return a new line.
-        if len(self.lines) == 0:
-            return ""
-        else:
-            out = []
-            for line in self.lines:
-                out.append("#" + line)
-            return "\n".join(out)
-
-    def merge(self, other):
-        if len(other.lines):
-            for line in other.lines:
-                if line != "":
-                    self.lines.append(line)
-
-    def __str__(self):
-        return self.to_string()
-
-
diff --git a/lib/python2.7/site-packages/setoolsgui/sepolgen/sepolgeni18n.py b/lib/python2.7/site-packages/setoolsgui/sepolgen/sepolgeni18n.py
deleted file mode 100644
index 998c435..0000000
--- a/lib/python2.7/site-packages/setoolsgui/sepolgen/sepolgeni18n.py
+++ /dev/null
@@ -1,26 +0,0 @@
-# Authors: Karl MacMillan <kmacmillan@mentalrootkit.com>
-#
-# Copyright (C) 2006 Red Hat 
-# see file 'COPYING' for use and warranty information
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License as
-# published by the Free Software Foundation; version 2 only
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-#
-
-try: 
-    import gettext
-    t = gettext.translation( 'yumex' )
-    _ = t.gettext
-except:
-    def _(str):
-        return str
diff --git a/lib/python2.7/site-packages/setoolsgui/sepolgen/util.py b/lib/python2.7/site-packages/setoolsgui/sepolgen/util.py
deleted file mode 100644
index 74a11f5..0000000
--- a/lib/python2.7/site-packages/setoolsgui/sepolgen/util.py
+++ /dev/null
@@ -1,87 +0,0 @@
-# Authors: Karl MacMillan <kmacmillan@mentalrootkit.com>
-#
-# Copyright (C) 2006 Red Hat 
-# see file 'COPYING' for use and warranty information
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License as
-# published by the Free Software Foundation; version 2 only
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-#
-
-class ConsoleProgressBar:
-    def __init__(self, out, steps=100, indicator='#'):
-        self.blocks = 0
-        self.current = 0
-        self.steps = steps
-        self.indicator = indicator
-        self.out = out
-        self.done = False
-
-    def start(self, message=None):
-        self.done = False
-        if message:
-            self.out.write('\n%s:\n' % message)
-        self.out.write('%--10---20---30---40---50---60---70---80---90--100\n')
-
-    def step(self, n=1):
-        self.current += n
-
-        old = self.blocks
-        self.blocks = int(round(self.current / float(self.steps) * 100) / 2)
-
-        if self.blocks > 50:
-            self.blocks = 50
-
-        new = self.blocks - old
-
-        self.out.write(self.indicator * new)
-        self.out.flush()
-
-        if self.blocks == 50 and not self.done:
-            self.done = True
-            self.out.write("\n")
-
-def set_to_list(s):
-    l = []
-    l.extend(s)
-    return l
-
-def first(s, sorted=False):
-    """
-    Return the first element of a set.
-
-    It sometimes useful to return the first element from a set but,
-    because sets are not indexable, this is rather hard. This function
-    will return the first element from a set. If sorted is True, then
-    the set will first be sorted (making this an expensive operation).
-    Otherwise a random element will be returned (as sets are not ordered).
-    """
-    if not len(s):
-        raise IndexError("empty containter")
-    
-    if sorted:
-        l = set_to_list(s)
-        l.sort()
-        return l[0]
-    else:
-        for x in s:
-            return x
-
-if __name__ == "__main__":
-    import sys
-    import time
-    p = ConsoleProgressBar(sys.stdout, steps=999)
-    p.start("computing pi")
-    for i in range(999):
-        p.step()
-        time.sleep(0.001)
-
diff --git a/lib/python2.7/site-packages/setoolsgui/sepolgen/yacc.py b/lib/python2.7/site-packages/setoolsgui/sepolgen/yacc.py
deleted file mode 100644
index bc4536d..0000000
--- a/lib/python2.7/site-packages/setoolsgui/sepolgen/yacc.py
+++ /dev/null
@@ -1,2209 +0,0 @@
-#-----------------------------------------------------------------------------
-# ply: yacc.py
-#
-# Author(s): David M. Beazley (dave@dabeaz.com)
-#
-# Copyright (C) 2001-2006, David M. Beazley
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-# 
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-# 
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-# 
-# See the file COPYING for a complete copy of the LGPL.
-#
-#
-# This implements an LR parser that is constructed from grammar rules defined
-# as Python functions. The grammer is specified by supplying the BNF inside
-# Python documentation strings.  The inspiration for this technique was borrowed
-# from John Aycock's Spark parsing system.  PLY might be viewed as cross between
-# Spark and the GNU bison utility.
-#
-# The current implementation is only somewhat object-oriented. The
-# LR parser itself is defined in terms of an object (which allows multiple
-# parsers to co-exist).  However, most of the variables used during table
-# construction are defined in terms of global variables.  Users shouldn't
-# notice unless they are trying to define multiple parsers at the same
-# time using threads (in which case they should have their head examined).
-#
-# This implementation supports both SLR and LALR(1) parsing.  LALR(1)
-# support was originally implemented by Elias Ioup (ezioup@alumni.uchicago.edu),
-# using the algorithm found in Aho, Sethi, and Ullman "Compilers: Principles,
-# Techniques, and Tools" (The Dragon Book).  LALR(1) has since been replaced
-# by the more efficient DeRemer and Pennello algorithm.
-#
-# :::::::: WARNING :::::::
-#
-# Construction of LR parsing tables is fairly complicated and expensive.
-# To make this module run fast, a *LOT* of work has been put into
-# optimization---often at the expensive of readability and what might
-# consider to be good Python "coding style."   Modify the code at your
-# own risk!
-# ----------------------------------------------------------------------------
-
-__version__ = "2.2"
-
-#-----------------------------------------------------------------------------
-#                     === User configurable parameters ===
-#
-# Change these to modify the default behavior of yacc (if you wish)
-#-----------------------------------------------------------------------------
-
-yaccdebug   = 1                # Debugging mode.  If set, yacc generates a
-                               # a 'parser.out' file in the current directory
-
-debug_file  = 'parser.out'     # Default name of the debugging file
-tab_module  = 'parsetab'       # Default name of the table module
-default_lr  = 'LALR'           # Default LR table generation method
-
-error_count = 3                # Number of symbols that must be shifted to leave recovery mode
-
-import re, types, sys, cStringIO, hashlib, os.path
-
-# Exception raised for yacc-related errors
-class YaccError(Exception):   pass
-
-#-----------------------------------------------------------------------------
-#                        ===  LR Parsing Engine ===
-#
-# The following classes are used for the LR parser itself.  These are not
-# used during table construction and are independent of the actual LR
-# table generation algorithm
-#-----------------------------------------------------------------------------
-
-# This class is used to hold non-terminal grammar symbols during parsing.
-# It normally has the following attributes set:
-#        .type       = Grammar symbol type
-#        .value      = Symbol value
-#        .lineno     = Starting line number
-#        .endlineno  = Ending line number (optional, set automatically)
-#        .lexpos     = Starting lex position
-#        .endlexpos  = Ending lex position (optional, set automatically)
-
-class YaccSymbol:
-    def __str__(self):    return self.type
-    def __repr__(self):   return str(self)
-
-# This class is a wrapper around the objects actually passed to each
-# grammar rule.   Index lookup and assignment actually assign the
-# .value attribute of the underlying YaccSymbol object.
-# The lineno() method returns the line number of a given
-# item (or 0 if not defined).   The linespan() method returns
-# a tuple of (startline,endline) representing the range of lines
-# for a symbol.  The lexspan() method returns a tuple (lexpos,endlexpos)
-# representing the range of positional information for a symbol.
-
-class YaccProduction:
-    def __init__(self,s,stack=None):
-        self.slice = s
-        self.pbstack = []
-        self.stack = stack
-
-    def __getitem__(self,n):
-        if type(n) == types.IntType:
-             if n >= 0: return self.slice[n].value
-             else: return self.stack[n].value
-        else:
-             return [s.value for s in self.slice[n.start:n.stop:n.step]]
-
-    def __setitem__(self,n,v):
-        self.slice[n].value = v
-
-    def __len__(self):
-        return len(self.slice)
-    
-    def lineno(self,n):
-        return getattr(self.slice[n],"lineno",0)
-
-    def linespan(self,n):
-        startline = getattr(self.slice[n],"lineno",0)
-        endline = getattr(self.slice[n],"endlineno",startline)
-        return startline,endline
-
-    def lexpos(self,n):
-        return getattr(self.slice[n],"lexpos",0)
-
-    def lexspan(self,n):
-        startpos = getattr(self.slice[n],"lexpos",0)
-        endpos = getattr(self.slice[n],"endlexpos",startpos)
-        return startpos,endpos
-
-    def pushback(self,n):
-        if n <= 0:
-            raise ValueError, "Expected a positive value"
-        if n > (len(self.slice)-1):
-            raise ValueError, "Can't push %d tokens. Only %d are available." % (n,len(self.slice)-1)
-        for i in range(0,n):
-            self.pbstack.append(self.slice[-i-1])
-
-# The LR Parsing engine.   This is defined as a class so that multiple parsers
-# can exist in the same process.  A user never instantiates this directly.
-# Instead, the global yacc() function should be used to create a suitable Parser
-# object. 
-
-class Parser:
-    def __init__(self,magic=None):
-
-        # This is a hack to keep users from trying to instantiate a Parser
-        # object directly.
-
-        if magic != "xyzzy":
-            raise YaccError, "Can't instantiate Parser. Use yacc() instead."
-
-        # Reset internal state
-        self.productions = None          # List of productions
-        self.errorfunc   = None          # Error handling function
-        self.action      = { }           # LR Action table
-        self.goto        = { }           # LR goto table
-        self.require     = { }           # Attribute require table
-        self.method      = "Unknown LR"  # Table construction method used
-
-    def errok(self):
-        self.errorcount = 0
-
-    def restart(self):
-        del self.statestack[:]
-        del self.symstack[:]
-        sym = YaccSymbol()
-        sym.type = '$end'
-        self.symstack.append(sym)
-        self.statestack.append(0)
-        
-    def parse(self,input=None,lexer=None,debug=0):
-        lookahead = None                 # Current lookahead symbol
-        lookaheadstack = [ ]             # Stack of lookahead symbols
-        actions = self.action            # Local reference to action table
-        goto    = self.goto              # Local reference to goto table
-        prod    = self.productions       # Local reference to production list
-        pslice  = YaccProduction(None)   # Production object passed to grammar rules
-        pslice.parser = self             # Parser object
-        self.errorcount = 0              # Used during error recovery
-
-        # If no lexer was given, we will try to use the lex module
-        if not lexer:
-            import lex
-            lexer = lex.lexer
-
-        pslice.lexer = lexer
-        
-        # If input was supplied, pass to lexer
-        if input:
-            lexer.input(input)
-
-        # Tokenize function
-        get_token = lexer.token
-
-        statestack = [ ]                # Stack of parsing states
-        self.statestack = statestack
-        symstack   = [ ]                # Stack of grammar symbols
-        self.symstack = symstack
-
-        pslice.stack = symstack         # Put in the production
-        errtoken   = None               # Err token
-
-        # The start state is assumed to be (0,$end)
-        statestack.append(0)
-        sym = YaccSymbol()
-        sym.type = '$end'
-        symstack.append(sym)
-        
-        while 1:
-            # Get the next symbol on the input.  If a lookahead symbol
-            # is already set, we just use that. Otherwise, we'll pull
-            # the next token off of the lookaheadstack or from the lexer
-            if debug > 1:
-                print 'state', statestack[-1]
-            if not lookahead:
-                if not lookaheadstack:
-                    lookahead = get_token()     # Get the next token
-                else:
-                    lookahead = lookaheadstack.pop()
-                if not lookahead:
-                    lookahead = YaccSymbol()
-                    lookahead.type = '$end'
-            if debug:
-                errorlead = ("%s . %s" % (" ".join([xx.type for xx in symstack][1:]), str(lookahead))).lstrip()
-
-            # Check the action table
-            s = statestack[-1]
-            ltype = lookahead.type
-            t = actions.get((s,ltype),None)
-
-            if debug > 1:
-                print 'action', t
-            if t is not None:
-                if t > 0:
-                    # shift a symbol on the stack
-                    if ltype == '$end':
-                        # Error, end of input
-                        sys.stderr.write("yacc: Parse error. EOF\n")
-                        return
-                    statestack.append(t)
-                    if debug > 1:
-                        sys.stderr.write("%-60s shift state %s\n" % (errorlead, t))
-                    symstack.append(lookahead)
-                    lookahead = None
-
-                    # Decrease error count on successful shift
-                    if self.errorcount > 0:
-                        self.errorcount -= 1
-                        
-                    continue
-                
-                if t < 0:
-                    # reduce a symbol on the stack, emit a production
-                    p = prod[-t]
-                    pname = p.name
-                    plen  = p.len
-
-                    # Get production function
-                    sym = YaccSymbol()
-                    sym.type = pname       # Production name
-                    sym.value = None
-                    if debug > 1:
-                        sys.stderr.write("%-60s reduce %d\n" % (errorlead, -t))
-
-                    if plen:
-                        targ = symstack[-plen-1:]
-                        targ[0] = sym
-                        try:
-                            sym.lineno = targ[1].lineno
-                            sym.endlineno = getattr(targ[-1],"endlineno",targ[-1].lineno)
-                            sym.lexpos = targ[1].lexpos
-                            sym.endlexpos = getattr(targ[-1],"endlexpos",targ[-1].lexpos)
-                        except AttributeError:
-                            sym.lineno = 0
-                        del symstack[-plen:]
-                        del statestack[-plen:]
-                    else:
-                        sym.lineno = 0
-                        targ = [ sym ]
-                    pslice.slice = targ
-                    pslice.pbstack = []
-                    # Call the grammar rule with our special slice object
-                    p.func(pslice)
-
-                    # If there was a pushback, put that on the stack
-                    if pslice.pbstack:
-                        lookaheadstack.append(lookahead)
-                        for _t in pslice.pbstack:
-                            lookaheadstack.append(_t)
-                        lookahead = None
-
-                    symstack.append(sym)
-                    statestack.append(goto[statestack[-1],pname])
-                    continue
-
-                if t == 0:
-                    n = symstack[-1]
-                    return getattr(n,"value",None)
-                    sys.stderr.write(errorlead, "\n")
-
-            if t == None:
-                if debug:
-                    sys.stderr.write(errorlead + "\n")
-                # We have some kind of parsing error here.  To handle
-                # this, we are going to push the current token onto
-                # the tokenstack and replace it with an 'error' token.
-                # If there are any synchronization rules, they may
-                # catch it.
-                #
-                # In addition to pushing the error token, we call call
-                # the user defined p_error() function if this is the
-                # first syntax error.  This function is only called if
-                # errorcount == 0.
-                if not self.errorcount:
-                    self.errorcount = error_count
-                    errtoken = lookahead
-                    if errtoken.type == '$end':
-                        errtoken = None               # End of file!
-                    if self.errorfunc:
-                        global errok,token,restart
-                        errok = self.errok        # Set some special functions available in error recovery
-                        token = get_token
-                        restart = self.restart
-                        tok = self.errorfunc(errtoken)
-                        del errok, token, restart   # Delete special functions
-                        
-                        if not self.errorcount:
-                            # User must have done some kind of panic
-                            # mode recovery on their own.  The
-                            # returned token is the next lookahead
-                            lookahead = tok
-                            errtoken = None
-                            continue
-                    else:
-                        if errtoken:
-                            if hasattr(errtoken,"lineno"): lineno = lookahead.lineno
-                            else: lineno = 0
-                            if lineno:
-                                sys.stderr.write("yacc: Syntax error at line %d, token=%s\n" % (lineno, errtoken.type))
-                            else:
-                                sys.stderr.write("yacc: Syntax error, token=%s" % errtoken.type)
-                        else:
-                            sys.stderr.write("yacc: Parse error in input. EOF\n")
-                            return
-
-                else:
-                    self.errorcount = error_count
-                
-                # case 1:  the statestack only has 1 entry on it.  If we're in this state, the
-                # entire parse has been rolled back and we're completely hosed.   The token is
-                # discarded and we just keep going.
-
-                if len(statestack) <= 1 and lookahead.type != '$end':
-                    lookahead = None
-                    errtoken = None
-                    # Nuke the pushback stack
-                    del lookaheadstack[:]
-                    continue
-
-                # case 2: the statestack has a couple of entries on it, but we're
-                # at the end of the file. nuke the top entry and generate an error token
-
-                # Start nuking entries on the stack
-                if lookahead.type == '$end':
-                    # Whoa. We're really hosed here. Bail out
-                    return 
-
-                if lookahead.type != 'error':
-                    sym = symstack[-1]
-                    if sym.type == 'error':
-                        # Hmmm. Error is on top of stack, we'll just nuke input
-                        # symbol and continue
-                        lookahead = None
-                        continue
-                    t = YaccSymbol()
-                    t.type = 'error'
-                    if hasattr(lookahead,"lineno"):
-                        t.lineno = lookahead.lineno
-                    t.value = lookahead
-                    lookaheadstack.append(lookahead)
-                    lookahead = t
-                else:
-                    symstack.pop()
-                    statestack.pop()
-
-                continue
-
-            # Call an error function here
-            raise RuntimeError, "yacc: internal parser error!!!\n"
-
-# -----------------------------------------------------------------------------
-#                          === Parser Construction ===
-#
-# The following functions and variables are used to implement the yacc() function
-# itself.   This is pretty hairy stuff involving lots of error checking,
-# construction of LR items, kernels, and so forth.   Although a lot of
-# this work is done using global variables, the resulting Parser object
-# is completely self contained--meaning that it is safe to repeatedly
-# call yacc() with different grammars in the same application.
-# -----------------------------------------------------------------------------
-        
-# -----------------------------------------------------------------------------
-# validate_file()
-#
-# This function checks to see if there are duplicated p_rulename() functions
-# in the parser module file.  Without this function, it is really easy for
-# users to make mistakes by cutting and pasting code fragments (and it's a real
-# bugger to try and figure out why the resulting parser doesn't work).  Therefore,
-# we just do a little regular expression pattern matching of def statements
-# to try and detect duplicates.
-# -----------------------------------------------------------------------------
-
-def validate_file(filename):
-    base,ext = os.path.splitext(filename)
-    if ext != '.py': return 1          # No idea. Assume it's okay.
-
-    try:
-        f = open(filename)
-        lines = f.readlines()
-        f.close()
-    except IOError:
-        return 1                       # Oh well
-
-    # Match def p_funcname(
-    fre = re.compile(r'\s*def\s+(p_[a-zA-Z_0-9]*)\(')
-    counthash = { }
-    linen = 1
-    noerror = 1
-    for l in lines:
-        m = fre.match(l)
-        if m:
-            name = m.group(1)
-            prev = counthash.get(name)
-            if not prev:
-                counthash[name] = linen
-            else:
-                sys.stderr.write("%s:%d: Function %s redefined. Previously defined on line %d\n" % (filename,linen,name,prev))
-                noerror = 0
-        linen += 1
-    return noerror
-
-# This function looks for functions that might be grammar rules, but which don't have the proper p_suffix.
-def validate_dict(d):
-    for n,v in d.items(): 
-        if n[0:2] == 'p_' and type(v) in (types.FunctionType, types.MethodType): continue
-        if n[0:2] == 't_': continue
-
-        if n[0:2] == 'p_':
-            sys.stderr.write("yacc: Warning. '%s' not defined as a function\n" % n)
-        if 1 and isinstance(v,types.FunctionType) and v.func_code.co_argcount == 1:
-            try:
-                doc = v.__doc__.split(" ")
-                if doc[1] == ':':
-                    sys.stderr.write("%s:%d: Warning. Possible grammar rule '%s' defined without p_ prefix.\n" % (v.func_code.co_filename, v.func_code.co_firstlineno,n))
-            except StandardError:
-                pass
-
-# -----------------------------------------------------------------------------
-#                           === GRAMMAR FUNCTIONS ===
-#
-# The following global variables and functions are used to store, manipulate,
-# and verify the grammar rules specified by the user.
-# -----------------------------------------------------------------------------
-
-# Initialize all of the global variables used during grammar construction
-def initialize_vars():
-    global Productions, Prodnames, Prodmap, Terminals 
-    global Nonterminals, First, Follow, Precedence, LRitems
-    global Errorfunc, Signature, Requires
-
-    Productions  = [None]  # A list of all of the productions.  The first
-                           # entry is always reserved for the purpose of
-                           # building an augmented grammar
-                        
-    Prodnames    = { }     # A dictionary mapping the names of nonterminals to a list of all
-                           # productions of that nonterminal.
-                        
-    Prodmap      = { }     # A dictionary that is only used to detect duplicate
-                           # productions.
-
-    Terminals    = { }     # A dictionary mapping the names of terminal symbols to a
-                           # list of the rules where they are used.
-
-    Nonterminals = { }     # A dictionary mapping names of nonterminals to a list
-                           # of rule numbers where they are used.
-
-    First        = { }     # A dictionary of precomputed FIRST(x) symbols
-    
-    Follow       = { }     # A dictionary of precomputed FOLLOW(x) symbols
-
-    Precedence   = { }     # Precedence rules for each terminal. Contains tuples of the
-                           # form ('right',level) or ('nonassoc', level) or ('left',level)
-
-    LRitems      = [ ]     # A list of all LR items for the grammar.  These are the
-                           # productions with the "dot" like E -> E . PLUS E
-
-    Errorfunc    = None    # User defined error handler
-
-    Signature    = hashlib.sha256()   # Digital signature of the grammar rules, precedence
-                               # and other information.  Used to determined when a
-                               # parsing table needs to be regenerated.
-
-    Requires     = { }     # Requires list
-
-    # File objects used when creating the parser.out debugging file
-    global _vf, _vfc
-    _vf           = cStringIO.StringIO()
-    _vfc          = cStringIO.StringIO()
-
-# -----------------------------------------------------------------------------
-# class Production:
-#
-# This class stores the raw information about a single production or grammar rule.
-# It has a few required attributes:
-#
-#       name     - Name of the production (nonterminal)
-#       prod     - A list of symbols making up its production
-#       number   - Production number.
-#
-# In addition, a few additional attributes are used to help with debugging or
-# optimization of table generation.
-#
-#       file     - File where production action is defined.
-#       lineno   - Line number where action is defined
-#       func     - Action function
-#       prec     - Precedence level
-#       lr_next  - Next LR item. Example, if we are ' E -> E . PLUS E'
-#                  then lr_next refers to 'E -> E PLUS . E'   
-#       lr_index - LR item index (location of the ".") in the prod list.
-#       lookaheads - LALR lookahead symbols for this item
-#       len      - Length of the production (number of symbols on right hand side)
-# -----------------------------------------------------------------------------
-
-class Production:
-    def __init__(self,**kw):
-        for k,v in kw.items():
-            setattr(self,k,v)
-        self.lr_index = -1
-        self.lr0_added = 0    # Flag indicating whether or not added to LR0 closure
-        self.lr1_added = 0    # Flag indicating whether or not added to LR1
-        self.usyms = [ ]
-        self.lookaheads = { }
-        self.lk_added = { }
-        self.setnumbers = [ ]
-        
-    def __str__(self):
-        if self.prod:
-            s = "%s -> %s" % (self.name," ".join(self.prod))
-        else:
-            s = "%s -> <empty>" % self.name
-        return s
-
-    def __repr__(self):
-        return str(self)
-
-    # Compute lr_items from the production
-    def lr_item(self,n):
-        if n > len(self.prod): return None
-        p = Production()
-        p.name = self.name
-        p.prod = list(self.prod)
-        p.number = self.number
-        p.lr_index = n
-        p.lookaheads = { }
-        p.setnumbers = self.setnumbers
-        p.prod.insert(n,".")
-        p.prod = tuple(p.prod)
-        p.len = len(p.prod)
-        p.usyms = self.usyms
-
-        # Precompute list of productions immediately following
-        try:
-            p.lrafter = Prodnames[p.prod[n+1]]
-        except (IndexError,KeyError),e:
-            p.lrafter = []
-        try:
-            p.lrbefore = p.prod[n-1]
-        except IndexError:
-            p.lrbefore = None
-
-        return p
-
-class MiniProduction:
-    pass
-
-# regex matching identifiers
-_is_identifier = re.compile(r'^[a-zA-Z0-9_-~]+$')
-
-# -----------------------------------------------------------------------------
-# add_production()
-#
-# Given an action function, this function assembles a production rule.
-# The production rule is assumed to be found in the function's docstring.
-# This rule has the general syntax:
-#
-#              name1 ::= production1
-#                     |  production2
-#                     |  production3
-#                    ...
-#                     |  productionn
-#              name2 ::= production1
-#                     |  production2
-#                    ... 
-# -----------------------------------------------------------------------------
-
-def add_production(f,file,line,prodname,syms):
-    
-    if Terminals.has_key(prodname):
-        sys.stderr.write("%s:%d: Illegal rule name '%s'. Already defined as a token.\n" % (file,line,prodname))
-        return -1
-    if prodname == 'error':
-        sys.stderr.write("%s:%d: Illegal rule name '%s'. error is a reserved word.\n" % (file,line,prodname))
-        return -1
-                
-    if not _is_identifier.match(prodname):
-        sys.stderr.write("%s:%d: Illegal rule name '%s'\n" % (file,line,prodname))
-        return -1
-
-    for x in range(len(syms)):
-        s = syms[x]
-        if s[0] in "'\"":
-             try:
-                 c = eval(s)
-                 if (len(c) > 1):
-                      sys.stderr.write("%s:%d: Literal token %s in rule '%s' may only be a single character\n" % (file,line,s, prodname)) 
-                      return -1
-                 if not Terminals.has_key(c):
-                      Terminals[c] = []
-                 syms[x] = c
-                 continue
-             except SyntaxError:
-                 pass
-        if not _is_identifier.match(s) and s != '%prec':
-            sys.stderr.write("%s:%d: Illegal name '%s' in rule '%s'\n" % (file,line,s, prodname))
-            return -1
-
-    # See if the rule is already in the rulemap
-    map = "%s -> %s" % (prodname,syms)
-    if Prodmap.has_key(map):
-        m = Prodmap[map]
-        sys.stderr.write("%s:%d: Duplicate rule %s.\n" % (file,line, m))
-        sys.stderr.write("%s:%d: Previous definition at %s:%d\n" % (file,line, m.file, m.line))
-        return -1
-
-    p = Production()
-    p.name = prodname
-    p.prod = syms
-    p.file = file
-    p.line = line
-    p.func = f
-    p.number = len(Productions)
-
-            
-    Productions.append(p)
-    Prodmap[map] = p
-    if not Nonterminals.has_key(prodname):
-        Nonterminals[prodname] = [ ]
-    
-    # Add all terminals to Terminals
-    i = 0
-    while i < len(p.prod):
-        t = p.prod[i]
-        if t == '%prec':
-            try:
-                precname = p.prod[i+1]
-            except IndexError:
-                sys.stderr.write("%s:%d: Syntax error. Nothing follows %%prec.\n" % (p.file,p.line))
-                return -1
-
-            prec = Precedence.get(precname,None)
-            if not prec:
-                sys.stderr.write("%s:%d: Nothing known about the precedence of '%s'\n" % (p.file,p.line,precname))
-                return -1
-            else:
-                p.prec = prec
-            del p.prod[i]
-            del p.prod[i]
-            continue
-
-        if Terminals.has_key(t):
-            Terminals[t].append(p.number)
-            # Is a terminal.  We'll assign a precedence to p based on this
-            if not hasattr(p,"prec"):
-                p.prec = Precedence.get(t,('right',0))
-        else:
-            if not Nonterminals.has_key(t):
-                Nonterminals[t] = [ ]
-            Nonterminals[t].append(p.number)
-        i += 1
-
-    if not hasattr(p,"prec"):
-        p.prec = ('right',0)
-        
-    # Set final length of productions
-    p.len  = len(p.prod)
-    p.prod = tuple(p.prod)
-
-    # Calculate unique syms in the production
-    p.usyms = [ ]
-    for s in p.prod:
-        if s not in p.usyms:
-            p.usyms.append(s)
-    
-    # Add to the global productions list
-    try:
-        Prodnames[p.name].append(p)
-    except KeyError:
-        Prodnames[p.name] = [ p ]
-    return 0
-
-# Given a raw rule function, this function rips out its doc string
-# and adds rules to the grammar
-
-def add_function(f):
-    line = f.func_code.co_firstlineno
-    file = f.func_code.co_filename
-    error = 0
-
-    if isinstance(f,types.MethodType):
-        reqdargs = 2
-    else:
-        reqdargs = 1
-        
-    if f.func_code.co_argcount > reqdargs:
-        sys.stderr.write("%s:%d: Rule '%s' has too many arguments.\n" % (file,line,f.__name__))
-        return -1
-
-    if f.func_code.co_argcount < reqdargs:
-        sys.stderr.write("%s:%d: Rule '%s' requires an argument.\n" % (file,line,f.__name__))
-        return -1
-          
-    if f.__doc__:
-        # Split the doc string into lines
-        pstrings = f.__doc__.splitlines()
-        lastp = None
-        dline = line
-        for ps in pstrings:
-            dline += 1
-            p = ps.split()
-            if not p: continue
-            try:
-                if p[0] == '|':
-                    # This is a continuation of a previous rule
-                    if not lastp:
-                        sys.stderr.write("%s:%d: Misplaced '|'.\n" % (file,dline))
-                        return -1
-                    prodname = lastp
-                    if len(p) > 1:
-                        syms = p[1:]
-                    else:
-                        syms = [ ]
-                else:
-                    prodname = p[0]
-                    lastp = prodname
-                    assign = p[1]
-                    if len(p) > 2:
-                        syms = p[2:]
-                    else:
-                        syms = [ ]
-                    if assign != ':' and assign != '::=':
-                        sys.stderr.write("%s:%d: Syntax error. Expected ':'\n" % (file,dline))
-                        return -1
-                         
- 
-                e = add_production(f,file,dline,prodname,syms)
-                error += e
-
-                
-            except StandardError:
-                sys.stderr.write("%s:%d: Syntax error in rule '%s'\n" % (file,dline,ps))
-                error -= 1
-    else:
-        sys.stderr.write("%s:%d: No documentation string specified in function '%s'\n" % (file,line,f.__name__))
-    return error
-
-
-# Cycle checking code (Michael Dyck)
-
-def compute_reachable():
-    '''
-    Find each symbol that can be reached from the start symbol.
-    Print a warning for any nonterminals that can't be reached.
-    (Unused terminals have already had their warning.)
-    '''
-    Reachable = { }
-    for s in Terminals.keys() + Nonterminals.keys():
-        Reachable[s] = 0
-
-    mark_reachable_from( Productions[0].prod[0], Reachable )
-
-    for s in Nonterminals.keys():
-        if not Reachable[s]:
-            sys.stderr.write("yacc: Symbol '%s' is unreachable.\n" % s)
-
-def mark_reachable_from(s, Reachable):
-    '''
-    Mark all symbols that are reachable from symbol s.
-    '''
-    if Reachable[s]:
-        # We've already reached symbol s.
-        return
-    Reachable[s] = 1
-    for p in Prodnames.get(s,[]):
-        for r in p.prod:
-            mark_reachable_from(r, Reachable)
-
-# -----------------------------------------------------------------------------
-# compute_terminates()
-#
-# This function looks at the various parsing rules and tries to detect
-# infinite recursion cycles (grammar rules where there is no possible way
-# to derive a string of only terminals).
-# -----------------------------------------------------------------------------
-def compute_terminates():
-    '''
-    Raise an error for any symbols that don't terminate.
-    '''
-    Terminates = {}
-
-    # Terminals:
-    for t in Terminals.keys():
-        Terminates[t] = 1
-
-    Terminates['$end'] = 1
-
-    # Nonterminals:
-
-    # Initialize to false:
-    for n in Nonterminals.keys():
-        Terminates[n] = 0
-
-    # Then propagate termination until no change:
-    while 1:
-        some_change = 0
-        for (n,pl) in Prodnames.items():
-            # Nonterminal n terminates iff any of its productions terminates.
-            for p in pl:
-                # Production p terminates iff all of its rhs symbols terminate.
-                for s in p.prod:
-                    if not Terminates[s]:
-                        # The symbol s does not terminate,
-                        # so production p does not terminate.
-                        p_terminates = 0
-                        break
-                else:
-                    # didn't break from the loop,
-                    # so every symbol s terminates
-                    # so production p terminates.
-                    p_terminates = 1
-
-                if p_terminates:
-                    # symbol n terminates!
-                    if not Terminates[n]:
-                        Terminates[n] = 1
-                        some_change = 1
-                    # Don't need to consider any more productions for this n.
-                    break
-
-        if not some_change:
-            break
-
-    some_error = 0
-    for (s,terminates) in Terminates.items():
-        if not terminates:
-            if not Prodnames.has_key(s) and not Terminals.has_key(s) and s != 'error':
-                # s is used-but-not-defined, and we've already warned of that,
-                # so it would be overkill to say that it's also non-terminating.
-                pass
-            else:
-                sys.stderr.write("yacc: Infinite recursion detected for symbol '%s'.\n" % s)
-                some_error = 1
-
-    return some_error
-
-# -----------------------------------------------------------------------------
-# verify_productions()
-#
-# This function examines all of the supplied rules to see if they seem valid.
-# -----------------------------------------------------------------------------
-def verify_productions(cycle_check=1):
-    error = 0
-    for p in Productions:
-        if not p: continue
-
-        for s in p.prod:
-            if not Prodnames.has_key(s) and not Terminals.has_key(s) and s != 'error':
-                sys.stderr.write("%s:%d: Symbol '%s' used, but not defined as a token or a rule.\n" % (p.file,p.line,s))
-                error = 1
-                continue
-
-    unused_tok = 0 
-    # Now verify all of the tokens
-    if yaccdebug:
-        _vf.write("Unused terminals:\n\n")
-    for s,v in Terminals.items():
-        if s != 'error' and not v:
-            sys.stderr.write("yacc: Warning. Token '%s' defined, but not used.\n" % s)
-            if yaccdebug: _vf.write("   %s\n"% s)
-            unused_tok += 1
-
-    # Print out all of the productions
-    if yaccdebug:
-        _vf.write("\nGrammar\n\n")
-        for i in range(1,len(Productions)):
-            _vf.write("Rule %-5d %s\n" % (i, Productions[i]))
-        
-    unused_prod = 0
-    # Verify the use of all productions
-    for s,v in Nonterminals.items():
-        if not v:
-            p = Prodnames[s][0]
-            sys.stderr.write("%s:%d: Warning. Rule '%s' defined, but not used.\n" % (p.file,p.line, s))
-            unused_prod += 1
-
-    
-    if unused_tok == 1:
-        sys.stderr.write("yacc: Warning. There is 1 unused token.\n")
-    if unused_tok > 1:
-        sys.stderr.write("yacc: Warning. There are %d unused tokens.\n" % unused_tok)
-
-    if unused_prod == 1:
-        sys.stderr.write("yacc: Warning. There is 1 unused rule.\n")
-    if unused_prod > 1:
-        sys.stderr.write("yacc: Warning. There are %d unused rules.\n" % unused_prod)
-
-    if yaccdebug:
-        _vf.write("\nTerminals, with rules where they appear\n\n")
-        ks = Terminals.keys()
-        ks.sort()
-        for k in ks:
-            _vf.write("%-20s : %s\n" % (k, " ".join([str(s) for s in Terminals[k]])))
-        _vf.write("\nNonterminals, with rules where they appear\n\n")
-        ks = Nonterminals.keys()
-        ks.sort()
-        for k in ks:
-            _vf.write("%-20s : %s\n" % (k, " ".join([str(s) for s in Nonterminals[k]])))
-
-    if (cycle_check):
-        compute_reachable()
-        error += compute_terminates()
-#        error += check_cycles()
-    return error
-
-# -----------------------------------------------------------------------------
-# build_lritems()
-#
-# This function walks the list of productions and builds a complete set of the
-# LR items.  The LR items are stored in two ways:  First, they are uniquely
-# numbered and placed in the list _lritems.  Second, a linked list of LR items
-# is built for each production.  For example:
-#
-#   E -> E PLUS E
-#
-# Creates the list
-#
-#  [E -> . E PLUS E, E -> E . PLUS E, E -> E PLUS . E, E -> E PLUS E . ] 
-# -----------------------------------------------------------------------------
-
-def build_lritems():
-    for p in Productions:
-        lastlri = p
-        lri = p.lr_item(0)
-        i = 0
-        while 1:
-            lri = p.lr_item(i)
-            lastlri.lr_next = lri
-            if not lri: break
-            lri.lr_num = len(LRitems)
-            LRitems.append(lri)
-            lastlri = lri
-            i += 1
-
-    # In order for the rest of the parser generator to work, we need to
-    # guarantee that no more lritems are generated.  Therefore, we nuke
-    # the p.lr_item method.  (Only used in debugging)
-    # Production.lr_item = None
-
-# -----------------------------------------------------------------------------
-# add_precedence()
-#
-# Given a list of precedence rules, add to the precedence table.
-# -----------------------------------------------------------------------------
-
-def add_precedence(plist):
-    plevel = 0
-    error = 0
-    for p in plist:
-        plevel += 1
-        try:
-            prec = p[0]
-            terms = p[1:]
-            if prec != 'left' and prec != 'right' and prec != 'nonassoc':
-                sys.stderr.write("yacc: Invalid precedence '%s'\n" % prec)
-                return -1
-            for t in terms:
-                if Precedence.has_key(t):
-                    sys.stderr.write("yacc: Precedence already specified for terminal '%s'\n" % t)
-                    error += 1
-                    continue
-                Precedence[t] = (prec,plevel)
-        except:
-            sys.stderr.write("yacc: Invalid precedence table.\n")
-            error += 1
-
-    return error
-
-# -----------------------------------------------------------------------------
-# augment_grammar()
-#
-# Compute the augmented grammar.  This is just a rule S' -> start where start
-# is the starting symbol.
-# -----------------------------------------------------------------------------
-
-def augment_grammar(start=None):
-    if not start:
-        start = Productions[1].name
-    Productions[0] = Production(name="S'",prod=[start],number=0,len=1,prec=('right',0),func=None)
-    Productions[0].usyms = [ start ]
-    Nonterminals[start].append(0)
-
-
-# -------------------------------------------------------------------------
-# first()
-#
-# Compute the value of FIRST1(beta) where beta is a tuple of symbols.
-#
-# During execution of compute_first1, the result may be incomplete.
-# Afterward (e.g., when called from compute_follow()), it will be complete.
-# -------------------------------------------------------------------------
-def first(beta):
-
-    # We are computing First(x1,x2,x3,...,xn)
-    result = [ ]
-    for x in beta:
-        x_produces_empty = 0
-
-        # Add all the non-<empty> symbols of First[x] to the result.
-        for f in First[x]:
-            if f == '<empty>':
-                x_produces_empty = 1
-            else:
-                if f not in result: result.append(f)
-
-        if x_produces_empty:
-            # We have to consider the next x in beta,
-            # i.e. stay in the loop.
-            pass
-        else:
-            # We don't have to consider any further symbols in beta.
-            break
-    else:
-        # There was no 'break' from the loop,
-        # so x_produces_empty was true for all x in beta,
-        # so beta produces empty as well.
-        result.append('<empty>')
-
-    return result
-
-
-# FOLLOW(x)
-# Given a non-terminal.  This function computes the set of all symbols
-# that might follow it.  Dragon book, p. 189.
-
-def compute_follow(start=None):
-    # Add '$end' to the follow list of the start symbol
-    for k in Nonterminals.keys():
-        Follow[k] = [ ]
-
-    if not start:
-        start = Productions[1].name
-        
-    Follow[start] = [ '$end' ]
-        
-    while 1:
-        didadd = 0
-        for p in Productions[1:]:
-            # Here is the production set
-            for i in range(len(p.prod)):
-                B = p.prod[i]
-                if Nonterminals.has_key(B):
-                    # Okay. We got a non-terminal in a production
-                    fst = first(p.prod[i+1:])
-                    hasempty = 0
-                    for f in fst:
-                        if f != '<empty>' and f not in Follow[B]:
-                            Follow[B].append(f)
-                            didadd = 1
-                        if f == '<empty>':
-                            hasempty = 1
-                    if hasempty or i == (len(p.prod)-1):
-                        # Add elements of follow(a) to follow(b)
-                        for f in Follow[p.name]:
-                            if f not in Follow[B]:
-                                Follow[B].append(f)
-                                didadd = 1
-        if not didadd: break
-
-    if 0 and yaccdebug:
-        _vf.write('\nFollow:\n')
-        for k in Nonterminals.keys():
-            _vf.write("%-20s : %s\n" % (k, " ".join([str(s) for s in Follow[k]])))
-
-# -------------------------------------------------------------------------
-# compute_first1()
-#
-# Compute the value of FIRST1(X) for all symbols
-# -------------------------------------------------------------------------
-def compute_first1():
-
-    # Terminals:
-    for t in Terminals.keys():
-        First[t] = [t]
-
-    First['$end'] = ['$end']
-    First['#'] = ['#'] # what's this for?
-
-    # Nonterminals:
-
-    # Initialize to the empty set:
-    for n in Nonterminals.keys():
-        First[n] = []
-
-    # Then propagate symbols until no change:
-    while 1:
-        some_change = 0
-        for n in Nonterminals.keys():
-            for p in Prodnames[n]:
-                for f in first(p.prod):
-                    if f not in First[n]:
-                        First[n].append( f )
-                        some_change = 1
-        if not some_change:
-            break
-
-    if 0 and yaccdebug:
-        _vf.write('\nFirst:\n')
-        for k in Nonterminals.keys():
-            _vf.write("%-20s : %s\n" %
-                (k, " ".join([str(s) for s in First[k]])))
-
-# -----------------------------------------------------------------------------
-#                           === SLR Generation ===
-#
-# The following functions are used to construct SLR (Simple LR) parsing tables
-# as described on p.221-229 of the dragon book.
-# -----------------------------------------------------------------------------
-
-# Global variables for the LR parsing engine
-def lr_init_vars():
-    global _lr_action, _lr_goto, _lr_method
-    global _lr_goto_cache, _lr0_cidhash
-    
-    _lr_action       = { }        # Action table
-    _lr_goto         = { }        # Goto table
-    _lr_method       = "Unknown"  # LR method used
-    _lr_goto_cache   = { }
-    _lr0_cidhash     = { }
-
-
-# Compute the LR(0) closure operation on I, where I is a set of LR(0) items.
-# prodlist is a list of productions.
-
-_add_count = 0       # Counter used to detect cycles
-
-def lr0_closure(I):
-    global _add_count
-    
-    _add_count += 1
-    prodlist = Productions
-    
-    # Add everything in I to J        
-    J = I[:]
-    didadd = 1
-    while didadd:
-        didadd = 0
-        for j in J:
-            for x in j.lrafter:
-                if x.lr0_added == _add_count: continue
-                # Add B --> .G to J
-                J.append(x.lr_next)
-                x.lr0_added = _add_count
-                didadd = 1
-               
-    return J
-
-# Compute the LR(0) goto function goto(I,X) where I is a set
-# of LR(0) items and X is a grammar symbol.   This function is written
-# in a way that guarantees uniqueness of the generated goto sets
-# (i.e. the same goto set will never be returned as two different Python
-# objects).  With uniqueness, we can later do fast set comparisons using
-# id(obj) instead of element-wise comparison.
-
-def lr0_goto(I,x):
-    # First we look for a previously cached entry
-    g = _lr_goto_cache.get((id(I),x),None)
-    if g: return g
-
-    # Now we generate the goto set in a way that guarantees uniqueness
-    # of the result
-    
-    s = _lr_goto_cache.get(x,None)
-    if not s:
-        s = { }
-        _lr_goto_cache[x] = s
-
-    gs = [ ]
-    for p in I:
-        n = p.lr_next
-        if n and n.lrbefore == x:
-            s1 = s.get(id(n),None)
-            if not s1:
-                s1 = { }
-                s[id(n)] = s1
-            gs.append(n)
-            s = s1
-    g = s.get('$end',None)
-    if not g:
-        if gs:
-            g = lr0_closure(gs)
-            s['$end'] = g
-        else:
-            s['$end'] = gs
-    _lr_goto_cache[(id(I),x)] = g
-    return g
-
-_lr0_cidhash = { }
-
-# Compute the LR(0) sets of item function
-def lr0_items():
-    
-    C = [ lr0_closure([Productions[0].lr_next]) ]
-    i = 0
-    for I in C:
-        _lr0_cidhash[id(I)] = i
-        i += 1
-
-    # Loop over the items in C and each grammar symbols
-    i = 0
-    while i < len(C):
-        I = C[i]
-        i += 1
-
-        # Collect all of the symbols that could possibly be in the goto(I,X) sets
-        asyms = { }
-        for ii in I:
-            for s in ii.usyms:
-                asyms[s] = None
-
-        for x in asyms.keys():
-            g = lr0_goto(I,x)
-            if not g:  continue
-            if _lr0_cidhash.has_key(id(g)): continue
-            _lr0_cidhash[id(g)] = len(C)            
-            C.append(g)
-            
-    return C
-
-# -----------------------------------------------------------------------------
-#                       ==== LALR(1) Parsing ====
-#
-# LALR(1) parsing is almost exactly the same as SLR except that instead of
-# relying upon Follow() sets when performing reductions, a more selective
-# lookahead set that incorporates the state of the LR(0) machine is utilized.
-# Thus, we mainly just have to focus on calculating the lookahead sets.
-#
-# The method used here is due to DeRemer and Pennelo (1982).
-#
-# DeRemer, F. L., and T. J. Pennelo: "Efficient Computation of LALR(1)
-#     Lookahead Sets", ACM Transactions on Programming Languages and Systems,
-#     Vol. 4, No. 4, Oct. 1982, pp. 615-649
-#
-# Further details can also be found in:
-#
-#  J. Tremblay and P. Sorenson, "The Theory and Practice of Compiler Writing",
-#      McGraw-Hill Book Company, (1985).
-#
-# Note:  This implementation is a complete replacement of the LALR(1) 
-#        implementation in PLY-1.x releases.   That version was based on
-#        a less efficient algorithm and it had bugs in its implementation.
-# -----------------------------------------------------------------------------
-
-# -----------------------------------------------------------------------------
-# compute_nullable_nonterminals()
-#
-# Creates a dictionary containing all of the non-terminals that might produce
-# an empty production.   
-# -----------------------------------------------------------------------------
-
-def compute_nullable_nonterminals():
-    nullable = {}
-    num_nullable = 0
-    while 1:
-       for p in Productions[1:]:
-           if p.len == 0:
-                nullable[p.name] = 1
-                continue
-           for t in p.prod:
-                if not nullable.has_key(t): break
-           else:
-                nullable[p.name] = 1
-       if len(nullable) == num_nullable: break
-       num_nullable = len(nullable)
-    return nullable
-
-# -----------------------------------------------------------------------------
-# find_nonterminal_trans(C)
-#
-# Given a set of LR(0) items, this functions finds all of the non-terminal
-# transitions.    These are transitions in which a dot appears immediately before
-# a non-terminal.   Returns a list of tuples of the form (state,N) where state
-# is the state number and N is the nonterminal symbol.
-#
-# The input C is the set of LR(0) items.
-# -----------------------------------------------------------------------------
-
-def find_nonterminal_transitions(C):
-     trans = []
-     for state in range(len(C)):
-         for p in C[state]:
-             if p.lr_index < p.len - 1:
-                  t = (state,p.prod[p.lr_index+1])
-                  if Nonterminals.has_key(t[1]):
-                        if t not in trans: trans.append(t)
-         state = state + 1
-     return trans
-
-# -----------------------------------------------------------------------------
-# dr_relation()
-#
-# Computes the DR(p,A) relationships for non-terminal transitions.  The input
-# is a tuple (state,N) where state is a number and N is a nonterminal symbol.
-#
-# Returns a list of terminals.
-# -----------------------------------------------------------------------------
-
-def dr_relation(C,trans,nullable):
-    dr_set = { }
-    state,N = trans
-    terms = []
-
-    g = lr0_goto(C[state],N)
-    for p in g:
-       if p.lr_index < p.len - 1:
-           a = p.prod[p.lr_index+1]
-           if Terminals.has_key(a):
-               if a not in terms: terms.append(a)
-
-    # This extra bit is to handle the start state
-    if state == 0 and N == Productions[0].prod[0]:
-       terms.append('$end')
- 
-    return terms
-
-# -----------------------------------------------------------------------------
-# reads_relation()
-#
-# Computes the READS() relation (p,A) READS (t,C).
-# -----------------------------------------------------------------------------
-
-def reads_relation(C, trans, empty):
-    # Look for empty transitions
-    rel = []
-    state, N = trans
-
-    g = lr0_goto(C[state],N)
-    j = _lr0_cidhash.get(id(g),-1)
-    for p in g:
-        if p.lr_index < p.len - 1:
-             a = p.prod[p.lr_index + 1]
-             if empty.has_key(a):
-                  rel.append((j,a))
-
-    return rel
-
-# -----------------------------------------------------------------------------
-# compute_lookback_includes()
-#
-# Determines the lookback and includes relations
-#
-# LOOKBACK:
-# 
-# This relation is determined by running the LR(0) state machine forward.
-# For example, starting with a production "N : . A B C", we run it forward
-# to obtain "N : A B C ."   We then build a relationship between this final
-# state and the starting state.   These relationships are stored in a dictionary
-# lookdict.   
-#
-# INCLUDES:
-#
-# Computes the INCLUDE() relation (p,A) INCLUDES (p',B).   
-#
-# This relation is used to determine non-terminal transitions that occur
-# inside of other non-terminal transition states.   (p,A) INCLUDES (p', B)
-# if the following holds:
-#
-#       B -> LAT, where T -> epsilon and p' -L-> p 
-#
-# L is essentially a prefix (which may be empty), T is a suffix that must be
-# able to derive an empty string.  State p' must lead to state p with the string L.
-# 
-# -----------------------------------------------------------------------------
-
-def compute_lookback_includes(C,trans,nullable):
-    
-    lookdict = {}          # Dictionary of lookback relations
-    includedict = {}       # Dictionary of include relations
-
-    # Make a dictionary of non-terminal transitions
-    dtrans = {}
-    for t in trans:
-        dtrans[t] = 1
-    
-    # Loop over all transitions and compute lookbacks and includes
-    for state,N in trans:
-        lookb = []
-        includes = []
-        for p in C[state]:
-            if p.name != N: continue
-        
-            # Okay, we have a name match.  We now follow the production all the way
-            # through the state machine until we get the . on the right hand side
-
-            lr_index = p.lr_index
-            j = state
-            while lr_index < p.len - 1:
-                 lr_index = lr_index + 1
-                 t = p.prod[lr_index]
-
-                 # Check to see if this symbol and state are a non-terminal transition
-                 if dtrans.has_key((j,t)):
-                       # Yes.  Okay, there is some chance that this is an includes relation
-                       # the only way to know for certain is whether the rest of the 
-                       # production derives empty
-
-                       li = lr_index + 1
-                       while li < p.len:
-                            if Terminals.has_key(p.prod[li]): break      # No forget it
-                            if not nullable.has_key(p.prod[li]): break
-                            li = li + 1
-                       else:
-                            # Appears to be a relation between (j,t) and (state,N)
-                            includes.append((j,t))
-
-                 g = lr0_goto(C[j],t)               # Go to next set             
-                 j = _lr0_cidhash.get(id(g),-1)     # Go to next state
-             
-            # When we get here, j is the final state, now we have to locate the production
-            for r in C[j]:
-                 if r.name != p.name: continue
-                 if r.len != p.len:   continue
-                 i = 0
-                 # This look is comparing a production ". A B C" with "A B C ."
-                 while i < r.lr_index:
-                      if r.prod[i] != p.prod[i+1]: break
-                      i = i + 1
-                 else:
-                      lookb.append((j,r))
-        for i in includes:
-             if not includedict.has_key(i): includedict[i] = []
-             includedict[i].append((state,N))
-        lookdict[(state,N)] = lookb
-
-    return lookdict,includedict
-
-# -----------------------------------------------------------------------------
-# digraph()
-# traverse()
-#
-# The following two functions are used to compute set valued functions
-# of the form:
-#
-#     F(x) = F'(x) U U{F(y) | x R y}
-#
-# This is used to compute the values of Read() sets as well as FOLLOW sets
-# in LALR(1) generation.
-#
-# Inputs:  X    - An input set
-#          R    - A relation
-#          FP   - Set-valued function
-# ------------------------------------------------------------------------------
-
-def digraph(X,R,FP):
-    N = { }
-    for x in X:
-       N[x] = 0
-    stack = []
-    F = { }
-    for x in X:
-        if N[x] == 0: traverse(x,N,stack,F,X,R,FP)
-    return F
-
-def traverse(x,N,stack,F,X,R,FP):
-    stack.append(x)
-    d = len(stack)
-    N[x] = d
-    F[x] = FP(x)             # F(X) <- F'(x)
-    
-    rel = R(x)               # Get y's related to x
-    for y in rel:
-        if N[y] == 0:
-             traverse(y,N,stack,F,X,R,FP)
-        N[x] = min(N[x],N[y])
-        for a in F.get(y,[]):
-            if a not in F[x]: F[x].append(a)
-    if N[x] == d:
-       N[stack[-1]] = sys.maxint
-       F[stack[-1]] = F[x]
-       element = stack.pop()
-       while element != x:
-           N[stack[-1]] = sys.maxint
-           F[stack[-1]] = F[x]
-           element = stack.pop()
-
-# -----------------------------------------------------------------------------
-# compute_read_sets()
-#
-# Given a set of LR(0) items, this function computes the read sets.
-#
-# Inputs:  C        =  Set of LR(0) items
-#          ntrans   = Set of nonterminal transitions
-#          nullable = Set of empty transitions
-#
-# Returns a set containing the read sets
-# -----------------------------------------------------------------------------
-
-def compute_read_sets(C, ntrans, nullable):
-    FP = lambda x: dr_relation(C,x,nullable)
-    R =  lambda x: reads_relation(C,x,nullable)
-    F = digraph(ntrans,R,FP)
-    return F
-
-# -----------------------------------------------------------------------------
-# compute_follow_sets()
-#
-# Given a set of LR(0) items, a set of non-terminal transitions, a readset, 
-# and an include set, this function computes the follow sets
-#
-# Follow(p,A) = Read(p,A) U U {Follow(p',B) | (p,A) INCLUDES (p',B)}
-#
-# Inputs:    
-#            ntrans     = Set of nonterminal transitions
-#            readsets   = Readset (previously computed)
-#            inclsets   = Include sets (previously computed)
-#
-# Returns a set containing the follow sets      
-# -----------------------------------------------------------------------------
-
-def compute_follow_sets(ntrans,readsets,inclsets):
-     FP = lambda x: readsets[x]
-     R  = lambda x: inclsets.get(x,[])
-     F = digraph(ntrans,R,FP)
-     return F
-
-# -----------------------------------------------------------------------------
-# add_lookaheads()
-#
-# Attaches the lookahead symbols to grammar rules. 
-#
-# Inputs:    lookbacks         -  Set of lookback relations
-#            followset         -  Computed follow set
-#
-# This function directly attaches the lookaheads to productions contained
-# in the lookbacks set
-# -----------------------------------------------------------------------------
-
-def add_lookaheads(lookbacks,followset):
-    for trans,lb in lookbacks.items():
-        # Loop over productions in lookback
-        for state,p in lb:
-             if not p.lookaheads.has_key(state):
-                  p.lookaheads[state] = []
-             f = followset.get(trans,[])
-             for a in f:
-                  if a not in p.lookaheads[state]: p.lookaheads[state].append(a)
-
-# -----------------------------------------------------------------------------
-# add_lalr_lookaheads()
-#
-# This function does all of the work of adding lookahead information for use
-# with LALR parsing
-# -----------------------------------------------------------------------------
-
-def add_lalr_lookaheads(C):
-    # Determine all of the nullable nonterminals
-    nullable = compute_nullable_nonterminals()
-
-    # Find all non-terminal transitions
-    trans = find_nonterminal_transitions(C)
-
-    # Compute read sets
-    readsets = compute_read_sets(C,trans,nullable)
-
-    # Compute lookback/includes relations
-    lookd, included = compute_lookback_includes(C,trans,nullable)
-
-    # Compute LALR FOLLOW sets
-    followsets = compute_follow_sets(trans,readsets,included)
-    
-    # Add all of the lookaheads
-    add_lookaheads(lookd,followsets)
-
-# -----------------------------------------------------------------------------
-# lr_parse_table()
-#
-# This function constructs the parse tables for SLR or LALR
-# -----------------------------------------------------------------------------
-def lr_parse_table(method):
-    global _lr_method
-    goto = _lr_goto           # Goto array
-    action = _lr_action       # Action array
-    actionp = { }             # Action production array (temporary)
-
-    _lr_method = method
-    
-    n_srconflict = 0
-    n_rrconflict = 0
-
-    if yaccdebug:
-        sys.stderr.write("yacc: Generating %s parsing table...\n" % method)        
-        _vf.write("\n\nParsing method: %s\n\n" % method)
-        
-    # Step 1: Construct C = { I0, I1, ... IN}, collection of LR(0) items
-    # This determines the number of states
-    
-    C = lr0_items()
-
-    if method == 'LALR':
-        add_lalr_lookaheads(C)
-
-    # Build the parser table, state by state
-    st = 0
-    for I in C:
-        # Loop over each production in I
-        actlist = [ ]              # List of actions
-        
-        if yaccdebug:
-            _vf.write("\nstate %d\n\n" % st)
-            for p in I:
-                _vf.write("    (%d) %s\n" % (p.number, str(p)))
-            _vf.write("\n")
-
-        for p in I:
-            try:
-                if p.prod[-1] == ".":
-                    if p.name == "S'":
-                        # Start symbol. Accept!
-                        action[st,"$end"] = 0
-                        actionp[st,"$end"] = p
-                    else:
-                        # We are at the end of a production.  Reduce!
-                        if method == 'LALR':
-                            laheads = p.lookaheads[st]
-                        else:
-                            laheads = Follow[p.name]
-                        for a in laheads:
-                            actlist.append((a,p,"reduce using rule %d (%s)" % (p.number,p)))
-                            r = action.get((st,a),None)
-                            if r is not None:
-                                # Whoa. Have a shift/reduce or reduce/reduce conflict
-                                if r > 0:
-                                    # Need to decide on shift or reduce here
-                                    # By default we favor shifting. Need to add
-                                    # some precedence rules here.
-                                    sprec,slevel = Productions[actionp[st,a].number].prec                                    
-                                    rprec,rlevel = Precedence.get(a,('right',0))
-                                    if (slevel < rlevel) or ((slevel == rlevel) and (rprec == 'left')):
-                                        # We really need to reduce here.  
-                                        action[st,a] = -p.number
-                                        actionp[st,a] = p
-                                        if not slevel and not rlevel:
-                                            _vfc.write("shift/reduce conflict in state %d resolved as reduce.\n" % st)
-                                            _vf.write("  ! shift/reduce conflict for %s resolved as reduce.\n" % a)
-                                            n_srconflict += 1
-                                    elif (slevel == rlevel) and (rprec == 'nonassoc'):
-                                        action[st,a] = None
-                                    else:
-                                        # Hmmm. Guess we'll keep the shift
-                                        if not rlevel:
-                                            _vfc.write("shift/reduce conflict in state %d resolved as shift.\n" % st)
-                                            _vf.write("  ! shift/reduce conflict for %s resolved as shift.\n" % a)
-                                            n_srconflict +=1                                    
-                                elif r < 0:
-                                    # Reduce/reduce conflict.   In this case, we favor the rule
-                                    # that was defined first in the grammar file
-                                    oldp = Productions[-r]
-                                    pp = Productions[p.number]
-                                    if oldp.line > pp.line:
-                                        action[st,a] = -p.number
-                                        actionp[st,a] = p
-                                    # sys.stderr.write("Reduce/reduce conflict in state %d\n" % st)
-                                    n_rrconflict += 1
-                                    _vfc.write("reduce/reduce conflict in state %d resolved using rule %d (%s).\n" % (st, actionp[st,a].number, actionp[st,a]))
-                                    _vf.write("  ! reduce/reduce conflict for %s resolved using rule %d (%s).\n" % (a,actionp[st,a].number, actionp[st,a]))
-                                else:
-                                    sys.stderr.write("Unknown conflict in state %d\n" % st)
-                            else:
-                                action[st,a] = -p.number
-                                actionp[st,a] = p
-                else:
-                    i = p.lr_index
-                    a = p.prod[i+1]       # Get symbol right after the "."
-                    if Terminals.has_key(a):
-                        g = lr0_goto(I,a)
-                        j = _lr0_cidhash.get(id(g),-1)
-                        if j >= 0:
-                            # We are in a shift state
-                            actlist.append((a,p,"shift and go to state %d" % j))
-                            r = action.get((st,a),None)
-                            if r is not None:
-                                # Whoa have a shift/reduce or shift/shift conflict
-                                if r > 0:
-                                    if r != j:
-                                        sys.stderr.write("Shift/shift conflict in state %d\n" % st)
-                                elif r < 0:
-                                    # Do a precedence check.
-                                    #   -  if precedence of reduce rule is higher, we reduce.
-                                    #   -  if precedence of reduce is same and left assoc, we reduce.
-                                    #   -  otherwise we shift
-                                    rprec,rlevel = Productions[actionp[st,a].number].prec
-                                    sprec,slevel = Precedence.get(a,('right',0))
-                                    if (slevel > rlevel) or ((slevel == rlevel) and (rprec != 'left')):
-                                        # We decide to shift here... highest precedence to shift
-                                        action[st,a] = j
-                                        actionp[st,a] = p
-                                        if not rlevel:
-                                            n_srconflict += 1
-                                            _vfc.write("shift/reduce conflict in state %d resolved as shift.\n" % st)
-                                            _vf.write("  ! shift/reduce conflict for %s resolved as shift.\n" % a)
-                                    elif (slevel == rlevel) and (rprec == 'nonassoc'):
-                                        action[st,a] = None
-                                    else:                                            
-                                        # Hmmm. Guess we'll keep the reduce
-                                        if not slevel and not rlevel:
-                                            n_srconflict +=1
-                                            _vfc.write("shift/reduce conflict in state %d resolved as reduce.\n" % st)
-                                            _vf.write("  ! shift/reduce conflict for %s resolved as reduce.\n" % a)
-                                            
-                                else:
-                                    sys.stderr.write("Unknown conflict in state %d\n" % st)
-                            else:
-                                action[st,a] = j
-                                actionp[st,a] = p
-                                
-            except StandardError,e:
-                raise YaccError, "Hosed in lr_parse_table", e
-
-        # Print the actions associated with each terminal
-        if yaccdebug:
-          _actprint = { }
-          for a,p,m in actlist:
-            if action.has_key((st,a)):
-                if p is actionp[st,a]:
-                    _vf.write("    %-15s %s\n" % (a,m))
-                    _actprint[(a,m)] = 1
-          _vf.write("\n")
-          for a,p,m in actlist:
-            if action.has_key((st,a)):
-                if p is not actionp[st,a]:
-                    if not _actprint.has_key((a,m)):
-                        _vf.write("  ! %-15s [ %s ]\n" % (a,m))
-                        _actprint[(a,m)] = 1
-            
-        # Construct the goto table for this state
-        if yaccdebug:
-            _vf.write("\n")
-        nkeys = { }
-        for ii in I:
-            for s in ii.usyms:
-                if Nonterminals.has_key(s):
-                    nkeys[s] = None
-        for n in nkeys.keys():
-            g = lr0_goto(I,n)
-            j = _lr0_cidhash.get(id(g),-1)            
-            if j >= 0:
-                goto[st,n] = j
-                if yaccdebug:
-                    _vf.write("    %-30s shift and go to state %d\n" % (n,j))
-
-        st += 1
-
-    if yaccdebug:
-        if n_srconflict == 1:
-            sys.stderr.write("yacc: %d shift/reduce conflict\n" % n_srconflict)
-        if n_srconflict > 1:
-            sys.stderr.write("yacc: %d shift/reduce conflicts\n" % n_srconflict)
-        if n_rrconflict == 1:
-            sys.stderr.write("yacc: %d reduce/reduce conflict\n" % n_rrconflict)
-        if n_rrconflict > 1:
-            sys.stderr.write("yacc: %d reduce/reduce conflicts\n" % n_rrconflict)
-
-# -----------------------------------------------------------------------------
-#                          ==== LR Utility functions ====
-# -----------------------------------------------------------------------------
-
-# -----------------------------------------------------------------------------
-# _lr_write_tables()
-#
-# This function writes the LR parsing tables to a file
-# -----------------------------------------------------------------------------
-
-def lr_write_tables(modulename=tab_module,outputdir=''):
-    filename = os.path.join(outputdir,modulename) + ".py"
-    try:
-        f = open(filename,"w")
-
-        f.write("""
-# %s
-# This file is automatically generated. Do not edit.
-
-_lr_method = %s
-
-_lr_signature = %s
-""" % (filename, repr(_lr_method), repr(Signature.digest())))
-
-        # Change smaller to 0 to go back to original tables
-        smaller = 1
-                
-        # Factor out names to try and make smaller
-        if smaller:
-            items = { }
-        
-            for k,v in _lr_action.items():
-                i = items.get(k[1])
-                if not i:
-                    i = ([],[])
-                    items[k[1]] = i
-                i[0].append(k[0])
-                i[1].append(v)
-
-            f.write("\n_lr_action_items = {")
-            for k,v in items.items():
-                f.write("%r:([" % k)
-                for i in v[0]:
-                    f.write("%r," % i)
-                f.write("],[")
-                for i in v[1]:
-                    f.write("%r," % i)
-                           
-                f.write("]),")
-            f.write("}\n")
-
-            f.write("""
-_lr_action = { }
-for _k, _v in _lr_action_items.items():
-   for _x,_y in zip(_v[0],_v[1]):
-       _lr_action[(_x,_k)] = _y
-del _lr_action_items
-""")
-            
-        else:
-            f.write("\n_lr_action = { ");
-            for k,v in _lr_action.items():
-                f.write("(%r,%r):%r," % (k[0],k[1],v))
-            f.write("}\n");
-
-        if smaller:
-            # Factor out names to try and make smaller
-            items = { }
-        
-            for k,v in _lr_goto.items():
-                i = items.get(k[1])
-                if not i:
-                    i = ([],[])
-                    items[k[1]] = i
-                i[0].append(k[0])
-                i[1].append(v)
-
-            f.write("\n_lr_goto_items = {")
-            for k,v in items.items():
-                f.write("%r:([" % k)
-                for i in v[0]:
-                    f.write("%r," % i)
-                f.write("],[")
-                for i in v[1]:
-                    f.write("%r," % i)
-                           
-                f.write("]),")
-            f.write("}\n")
-
-            f.write("""
-_lr_goto = { }
-for _k, _v in _lr_goto_items.items():
-   for _x,_y in zip(_v[0],_v[1]):
-       _lr_goto[(_x,_k)] = _y
-del _lr_goto_items
-""")
-        else:
-            f.write("\n_lr_goto = { ");
-            for k,v in _lr_goto.items():
-                f.write("(%r,%r):%r," % (k[0],k[1],v))                    
-            f.write("}\n");
-
-        # Write production table
-        f.write("_lr_productions = [\n")
-        for p in Productions:
-            if p:
-                if (p.func):
-                    f.write("  (%r,%d,%r,%r,%d),\n" % (p.name, p.len, p.func.__name__,p.file,p.line))
-                else:
-                    f.write("  (%r,%d,None,None,None),\n" % (p.name, p.len))
-            else:
-                f.write("  None,\n")
-        f.write("]\n")
-        
-        f.close()
-
-    except IOError,e:
-        print "Unable to create '%s'" % filename
-        print e
-        return
-
-def lr_read_tables(module=tab_module,optimize=0):
-    global _lr_action, _lr_goto, _lr_productions, _lr_method
-    try:
-        exec "import %s as parsetab" % module
-        
-        if (optimize) or (Signature.digest() == parsetab._lr_signature):
-            _lr_action = parsetab._lr_action
-            _lr_goto   = parsetab._lr_goto
-            _lr_productions = parsetab._lr_productions
-            _lr_method = parsetab._lr_method
-            return 1
-        else:
-            return 0
-        
-    except (ImportError,AttributeError):
-        return 0
-
-
-# Available instance types.  This is used when parsers are defined by a class.
-# it's a little funky because I want to preserve backwards compatibility
-# with Python 2.0 where types.ObjectType is undefined.
-
-try:
-   _INSTANCETYPE = (types.InstanceType, types.ObjectType)
-except AttributeError:
-   _INSTANCETYPE = types.InstanceType
-
-# -----------------------------------------------------------------------------
-# yacc(module)
-#
-# Build the parser module
-# -----------------------------------------------------------------------------
-
-def yacc(method=default_lr, debug=yaccdebug, module=None, tabmodule=tab_module, start=None, check_recursion=1, optimize=0,write_tables=1,debugfile=debug_file,outputdir=''):
-    global yaccdebug
-    yaccdebug = debug
-    
-    initialize_vars()
-    files = { }
-    error = 0
-
-
-    # Add parsing method to signature
-    Signature.update(method)
-    
-    # If a "module" parameter was supplied, extract its dictionary.
-    # Note: a module may in fact be an instance as well.
-    
-    if module:
-        # User supplied a module object.
-        if isinstance(module, types.ModuleType):
-            ldict = module.__dict__
-        elif isinstance(module, _INSTANCETYPE):
-            _items = [(k,getattr(module,k)) for k in dir(module)]
-            ldict = { }
-            for i in _items:
-                ldict[i[0]] = i[1]
-        else:
-            raise ValueError,"Expected a module"
-        
-    else:
-        # No module given.  We might be able to get information from the caller.
-        # Throw an exception and unwind the traceback to get the globals
-        
-        try:
-            raise RuntimeError
-        except RuntimeError:
-            e,b,t = sys.exc_info()
-            f = t.tb_frame
-            f = f.f_back           # Walk out to our calling function
-            ldict = f.f_globals    # Grab its globals dictionary
-
-    # Add starting symbol to signature
-    if not start:
-        start = ldict.get("start",None)
-    if start:
-        Signature.update(start)
-
-    # If running in optimized mode.  We're going to
-
-    if (optimize and lr_read_tables(tabmodule,1)):
-        # Read parse table
-        del Productions[:]
-        for p in _lr_productions:
-            if not p:
-                Productions.append(None)
-            else:
-                m = MiniProduction()
-                m.name = p[0]
-                m.len  = p[1]
-                m.file = p[3]
-                m.line = p[4]
-                if p[2]:
-                    m.func = ldict[p[2]]
-                Productions.append(m)
-        
-    else:
-        # Get the tokens map
-        if (module and isinstance(module,_INSTANCETYPE)):
-            tokens = getattr(module,"tokens",None)
-        else:
-            tokens = ldict.get("tokens",None)
-    
-        if not tokens:
-            raise YaccError,"module does not define a list 'tokens'"
-        if not (isinstance(tokens,types.ListType) or isinstance(tokens,types.TupleType)):
-            raise YaccError,"tokens must be a list or tuple."
-
-        # Check to see if a requires dictionary is defined.
-        requires = ldict.get("require",None)
-        if requires:
-            if not (isinstance(requires,types.DictType)):
-                raise YaccError,"require must be a dictionary."
-
-            for r,v in requires.items():
-                try:
-                    if not (isinstance(v,types.ListType)):
-                        raise TypeError
-                    v1 = [x.split(".") for x in v]
-                    Requires[r] = v1
-                except StandardError:
-                    print "Invalid specification for rule '%s' in require. Expected a list of strings" % r            
-
-        
-        # Build the dictionary of terminals.  We a record a 0 in the
-        # dictionary to track whether or not a terminal is actually
-        # used in the grammar
-
-        if 'error' in tokens:
-            print "yacc: Illegal token 'error'.  Is a reserved word."
-            raise YaccError,"Illegal token name"
-
-        for n in tokens:
-            if Terminals.has_key(n):
-                print "yacc: Warning. Token '%s' multiply defined." % n
-            Terminals[n] = [ ]
-
-        Terminals['error'] = [ ]
-
-        # Get the precedence map (if any)
-        prec = ldict.get("precedence",None)
-        if prec:
-            if not (isinstance(prec,types.ListType) or isinstance(prec,types.TupleType)):
-                raise YaccError,"precedence must be a list or tuple."
-            add_precedence(prec)
-            Signature.update(repr(prec))
-
-        for n in tokens:
-            if not Precedence.has_key(n):
-                Precedence[n] = ('right',0)         # Default, right associative, 0 precedence
-
-        # Look for error handler
-        ef = ldict.get('p_error',None)
-        if ef:
-            if isinstance(ef,types.FunctionType):
-                ismethod = 0
-            elif isinstance(ef, types.MethodType):
-                ismethod = 1
-            else:
-                raise YaccError,"'p_error' defined, but is not a function or method."                
-            eline = ef.func_code.co_firstlineno
-            efile = ef.func_code.co_filename
-            files[efile] = None
-
-            if (ef.func_code.co_argcount != 1+ismethod):
-                raise YaccError,"%s:%d: p_error() requires 1 argument." % (efile,eline)
-            global Errorfunc
-            Errorfunc = ef
-        else:
-            print "yacc: Warning. no p_error() function is defined."
-            
-        # Get the list of built-in functions with p_ prefix
-        symbols = [ldict[f] for f in ldict.keys()
-               if (type(ldict[f]) in (types.FunctionType, types.MethodType) and ldict[f].__name__[:2] == 'p_'
-                   and ldict[f].__name__ != 'p_error')]
-
-        # Check for non-empty symbols
-        if len(symbols) == 0:
-            raise YaccError,"no rules of the form p_rulename are defined."
-    
-        # Sort the symbols by line number
-        symbols.sort(lambda x,y: cmp(x.func_code.co_firstlineno,y.func_code.co_firstlineno))
-
-        # Add all of the symbols to the grammar
-        for f in symbols:
-            if (add_function(f)) < 0:
-                error += 1
-            else:
-                files[f.func_code.co_filename] = None
-
-        # Make a signature of the docstrings
-        for f in symbols:
-            if f.__doc__:
-                Signature.update(f.__doc__)
-    
-        lr_init_vars()
-
-        if error:
-            raise YaccError,"Unable to construct parser."
-
-        if not lr_read_tables(tabmodule):
-
-            # Validate files
-            for filename in files.keys():
-                if not validate_file(filename):
-                    error = 1
-
-            # Validate dictionary
-            validate_dict(ldict)
-
-            if start and not Prodnames.has_key(start):
-                raise YaccError,"Bad starting symbol '%s'" % start
-        
-            augment_grammar(start)    
-            error = verify_productions(cycle_check=check_recursion)
-            otherfunc = [ldict[f] for f in ldict.keys()
-               if (type(f) in (types.FunctionType,types.MethodType) and ldict[f].__name__[:2] != 'p_')]
-
-            if error:
-                raise YaccError,"Unable to construct parser."
-            
-            build_lritems()
-            compute_first1()
-            compute_follow(start)
-        
-            if method in ['SLR','LALR']:
-                lr_parse_table(method)
-            else:
-                raise YaccError, "Unknown parsing method '%s'" % method
-
-            if write_tables:
-                lr_write_tables(tabmodule,outputdir)        
-    
-            if yaccdebug:
-                try:
-                    f = open(os.path.join(outputdir,debugfile),"w")
-                    f.write(_vfc.getvalue())
-                    f.write("\n\n")
-                    f.write(_vf.getvalue())
-                    f.close()
-                except IOError,e:
-                    print "yacc: can't create '%s'" % debugfile,e
-        
-    # Made it here.   Create a parser object and set up its internal state.
-    # Set global parse() method to bound method of parser object.
-
-    p = Parser("xyzzy")
-    p.productions = Productions
-    p.errorfunc = Errorfunc
-    p.action = _lr_action
-    p.goto   = _lr_goto
-    p.method = _lr_method
-    p.require = Requires
-
-    global parse
-    parse = p.parse
-
-    global parser
-    parser = p
-
-    # Clean up all of the globals we created
-    if (not optimize):
-        yacc_cleanup()
-    return p
-
-# yacc_cleanup function.  Delete all of the global variables
-# used during table construction
-
-def yacc_cleanup():
-    global _lr_action, _lr_goto, _lr_method, _lr_goto_cache
-    del _lr_action, _lr_goto, _lr_method, _lr_goto_cache
-
-    global Productions, Prodnames, Prodmap, Terminals 
-    global Nonterminals, First, Follow, Precedence, LRitems
-    global Errorfunc, Signature, Requires
-    
-    del Productions, Prodnames, Prodmap, Terminals
-    del Nonterminals, First, Follow, Precedence, LRitems
-    del Errorfunc, Signature, Requires
-    
-    global _vf, _vfc
-    del _vf, _vfc
-    
-    
-# Stub that raises an error if parsing is attempted without first calling yacc()
-def parse(*args,**kwargs):
-    raise YaccError, "yacc: No parser built with yacc()"
-
diff --git a/lib/python2.7/site-packages/setoolsgui/sesearch b/lib/python2.7/site-packages/setoolsgui/sesearch
deleted file mode 100755
index e861db6..0000000
--- a/lib/python2.7/site-packages/setoolsgui/sesearch
+++ /dev/null
@@ -1,206 +0,0 @@
-#!/usr/bin/python
-# Copyright 2014-2015, Tresys Technology, LLC
-#
-# This file is part of SETools.
-#
-# SETools is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 2 of the License, or
-# (at your option) any later version.
-#
-# SETools is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with SETools.  If not, see <http://www.gnu.org/licenses/>.
-#
-
-from __future__ import print_function
-import setools
-import argparse
-import sys
-import logging
-
-parser = argparse.ArgumentParser(
-    description="SELinux policy rule search tool.",
-    epilog="TE/MLS rule searches cannot be mixed with RBAC rule searches.")
-parser.add_argument("--version", action="version", version=setools.__version__)
-parser.add_argument("policy", help="Path to the SELinux policy to search.", nargs="?")
-parser.add_argument("-v", "--verbose", action="store_true",
-                    help="Print extra informational messages")
-parser.add_argument("--debug", action="store_true", dest="debug", help="Enable debugging.")
-
-rtypes = parser.add_argument_group("TE Rule Types")
-rtypes.add_argument("-A", "--allow", action="append_const",
-                    const="allow", dest="tertypes",
-                    help="Search allow rules.")
-rtypes.add_argument("--auditallow", action="append_const",
-                    const="auditallow", dest="tertypes",
-                    help="Search auditallow rules.")
-rtypes.add_argument("--dontaudit", action="append_const",
-                    const="dontaudit", dest="tertypes",
-                    help="Search dontaudit rules.")
-rtypes.add_argument("-T", "--type_trans", action="append_const",
-                    const="type_transition", dest="tertypes",
-                    help="Search type_transition rules.")
-rtypes.add_argument("--type_change", action="append_const",
-                    const="type_change", dest="tertypes",
-                    help="Search type_change rules.")
-rtypes.add_argument("--type_member", action="append_const",
-                    const="type_member", dest="tertypes",
-                    help="Search type_member rules.")
-
-rbacrtypes = parser.add_argument_group("RBAC Rule Types")
-rbacrtypes.add_argument("--role_allow", action="append_const",
-                        const="allow", dest="rbacrtypes",
-                        help="Search role allow rules.")
-rbacrtypes.add_argument("--role_trans", action="append_const",
-                        const="role_transition", dest="rbacrtypes",
-                        help="Search role_transition rules.")
-
-mlsrtypes = parser.add_argument_group("MLS Rule Types")
-mlsrtypes.add_argument("--range_trans", action="append_const",
-                       const="range_transition", dest="mlsrtypes",
-                       help="Search range_transition rules.")
-
-expr = parser.add_argument_group("Expressions")
-expr.add_argument("-s", "--source",
-                  help="Source type/role of the TE/RBAC rule.")
-expr.add_argument("-t", "--target",
-                  help="Target type/role of the TE/RBAC rule.")
-expr.add_argument("-c", "--class", dest="tclass",
-                  help="Comma separated list of object classes")
-expr.add_argument("-p", "--perms", metavar="PERMS",
-                  help="Comma separated list of permissions.")
-expr.add_argument("-D", "--default",
-                  help="Default of the rule. (type/role/range transition rules)")
-expr.add_argument("-b", "--bool", dest="boolean", metavar="BOOL",
-                  help="Comma separated list of Booleans in the conditional expression.")
-
-opts = parser.add_argument_group("Search options")
-opts.add_argument("-eb", action="store_true", dest="boolean_equal",
-                  help="Match Boolean list exactly instead of matching any listed Boolean.")
-opts.add_argument("-ep", action="store_true", dest="perms_equal",
-                  help="Match permission set exactly instead of matching any listed permission.")
-opts.add_argument("-ds", action="store_false", dest="source_indirect",
-                  help="Match source attributes directly instead of matching member types/roles.")
-opts.add_argument("-dt", action="store_false", dest="target_indirect",
-                  help="Match target attributes directly instead of matching member types/roles.")
-opts.add_argument("-rs", action="store_true", dest="source_regex",
-                  help="Use regular expression matching for the source type/role.")
-opts.add_argument("-rt", action="store_true", dest="target_regex",
-                  help="Use regular expression matching for the target type/role.")
-opts.add_argument("-rc", action="store_true", dest="tclass_regex",
-                  help="Use regular expression matching for the object class.")
-opts.add_argument("-rd", action="store_true", dest="default_regex",
-                  help="Use regular expression matching for the default type/role.")
-opts.add_argument("-rb", action="store_true", dest="boolean_regex",
-                  help="Use regular expression matching for Booleans.")
-
-args = parser.parse_args()
-
-if not args.tertypes and not args.mlsrtypes and not args.rbacrtypes:
-    parser.error("At least one rule type must be specified.")
-
-if args.debug:
-    logging.basicConfig(level=logging.DEBUG,
-                        format='%(asctime)s|%(levelname)s|%(name)s|%(message)s')
-elif args.verbose:
-    logging.basicConfig(level=logging.INFO, format='%(message)s')
-else:
-    logging.basicConfig(level=logging.WARNING, format='%(message)s')
-
-try:
-    p = setools.SELinuxPolicy(args.policy)
-
-    if args.tertypes:
-        q = setools.TERuleQuery(p,
-                                ruletype=args.tertypes,
-                                source=args.source,
-                                source_indirect=args.source_indirect,
-                                source_regex=args.source_regex,
-                                target=args.target,
-                                target_indirect=args.target_indirect,
-                                target_regex=args.target_regex,
-                                tclass_regex=args.tclass_regex,
-                                perms_equal=args.perms_equal,
-                                default=args.default,
-                                default_regex=args.default_regex,
-                                boolean_regex=args.boolean_regex,
-                                boolean_equal=args.boolean_equal)
-
-        # these are broken out from the above statement to prevent making a list
-        # with an empty string in it (split on empty string)
-        if args.tclass:
-            if args.tclass_regex:
-                q.tclass = args.tclass
-            else:
-                q.tclass = args.tclass.split(",")
-
-        if args.perms:
-            q.perms = args.perms.split(",")
-
-        if args.boolean:
-            if args.boolean_regex:
-                q.boolean = args.boolean
-            else:
-                q.boolean = args.boolean.split(",")
-
-        for r in sorted(q.results()):
-            print(r)
-
-    if args.rbacrtypes:
-        q = setools.RBACRuleQuery(p,
-                                  ruletype=args.rbacrtypes,
-                                  source=args.source,
-                                  source_indirect=args.source_indirect,
-                                  source_regex=args.source_regex,
-                                  target=args.target,
-                                  target_indirect=args.target_indirect,
-                                  target_regex=args.target_regex,
-                                  default=args.default,
-                                  default_regex=args.default_regex,
-                                  tclass_regex=args.tclass_regex)
-
-        # these are broken out from the above statement to prevent making a list
-        # with an empty string in it (split on empty string)
-        if args.tclass:
-            if args.tclass_regex:
-                q.tclass = args.tclass
-            else:
-                q.tclass = args.tclass.split(",")
-
-        for r in sorted(q.results()):
-            print(r)
-
-    if args.mlsrtypes:
-        q = setools.MLSRuleQuery(p,
-                                 ruletype=args.mlsrtypes,
-                                 source=args.source,
-                                 source_regex=args.source_regex,
-                                 target=args.target,
-                                 target_regex=args.target_regex,
-                                 tclass_regex=args.tclass_regex,
-                                 default=args.default)
-
-        # these are broken out from the above statement to prevent making a list
-        # with an empty string in it (split on empty string)
-        if args.tclass:
-            if args.tclass_regex:
-                q.tclass = args.tclass
-            else:
-                q.tclass = args.tclass.split(",")
-
-        for r in sorted(q.results()):
-            print(r)
-
-except Exception as err:
-    if args.debug:
-        import traceback
-        traceback.print_exc()
-    else:
-        print(err)
-
-    sys.exit(-1)
diff --git a/lib/python2.7/site-packages/setoolsgui/setools/__init__.py b/lib/python2.7/site-packages/setoolsgui/setools/__init__.py
deleted file mode 100644
index 4d03553..0000000
--- a/lib/python2.7/site-packages/setoolsgui/setools/__init__.py
+++ /dev/null
@@ -1,68 +0,0 @@
-"""The SETools SELinux policy analysis library."""
-# Copyright 2014-2015, Tresys Technology, LLC
-#
-# This file is part of SETools.
-#
-# SETools is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Lesser General Public License as
-# published by the Free Software Foundation, either version 2.1 of
-# the License, or (at your option) any later version.
-#
-# SETools is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with SETools.  If not, see
-# <http://www.gnu.org/licenses/>.
-#
-#try:
-#    import pkg_resources
-#    # pylint: disable=no-member
-#    __version__ = pkg_resources.get_distribution("setools").version
-#except ImportError:  # pragma: no cover
-#    __version__ = "unknown"
-__version__ = "3.3.8"
-
-# Python classes for policy representation
-from . import policyrep
-from .policyrep import SELinuxPolicy
-
-# Exceptions
-from . import exception
-
-# Component Queries
-from .boolquery import BoolQuery
-from .categoryquery import CategoryQuery
-from .commonquery import CommonQuery
-from .objclassquery import ObjClassQuery
-from .polcapquery import PolCapQuery
-from .rolequery import RoleQuery
-from .sensitivityquery import SensitivityQuery
-from .typequery import TypeQuery
-from .typeattrquery import TypeAttributeQuery
-from .userquery import UserQuery
-
-# Rule Queries
-from .mlsrulequery import MLSRuleQuery
-from .rbacrulequery import RBACRuleQuery
-from .terulequery import TERuleQuery
-
-# Constraint queries
-from .constraintquery import ConstraintQuery
-
-# In-policy Context Queries
-from .fsusequery import FSUseQuery
-from .genfsconquery import GenfsconQuery
-from .initsidquery import InitialSIDQuery
-from .netifconquery import NetifconQuery
-from .nodeconquery import NodeconQuery
-from .portconquery import PortconQuery
-
-# Information Flow Analysis
-from .infoflow import InfoFlowAnalysis
-from .permmap import PermissionMap
-
-# Domain Transition Analysis
-from .dta import DomainTransitionAnalysis
diff --git a/lib/python2.7/site-packages/setoolsgui/setools/boolquery.py b/lib/python2.7/site-packages/setoolsgui/setools/boolquery.py
deleted file mode 100644
index b70b7d5..0000000
--- a/lib/python2.7/site-packages/setoolsgui/setools/boolquery.py
+++ /dev/null
@@ -1,66 +0,0 @@
-# Copyright 2014-2015, Tresys Technology, LLC
-#
-# This file is part of SETools.
-#
-# SETools is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Lesser General Public License as
-# published by the Free Software Foundation, either version 2.1 of
-# the License, or (at your option) any later version.
-#
-# SETools is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with SETools.  If not, see
-# <http://www.gnu.org/licenses/>.
-#
-import logging
-
-from . import compquery
-from .descriptors import CriteriaDescriptor
-
-
-class BoolQuery(compquery.ComponentQuery):
-
-    """Query SELinux policy Booleans.
-
-    Parameter:
-    policy          The policy to query.
-
-    Keyword Parameters/Class attributes:
-    name            The Boolean name to match.
-    name_regex      If true, regular expression matching
-                    will be used on the Boolean name.
-    default         The default state to match.  If this
-                    is None, the default state not be matched.
-    """
-
-    _default = None
-
-    @property
-    def default(self):
-        return self._default
-
-    @default.setter
-    def default(self, value):
-        if value is None:
-            self._default = None
-        else:
-            self._default = bool(value)
-
-    def results(self):
-        """Generator which yields all Booleans matching the criteria."""
-        self.log.info("Generating results from {0.policy}".format(self))
-        self.log.debug("Name: {0.name!r}, regex: {0.name_regex}".format(self))
-        self.log.debug("Default: {0.default}".format(self))
-
-        for boolean in self.policy.bools():
-            if not self._match_name(boolean):
-                continue
-
-            if self.default is not None and boolean.state != self.default:
-                continue
-
-            yield boolean
diff --git a/lib/python2.7/site-packages/setoolsgui/setools/categoryquery.py b/lib/python2.7/site-packages/setoolsgui/setools/categoryquery.py
deleted file mode 100644
index d4d7c4c..0000000
--- a/lib/python2.7/site-packages/setoolsgui/setools/categoryquery.py
+++ /dev/null
@@ -1,55 +0,0 @@
-# Copyright 2015, Tresys Technology, LLC
-#
-# This file is part of SETools.
-#
-# SETools is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Lesser General Public License as
-# published by the Free Software Foundation, either version 2.1 of
-# the License, or (at your option) any later version.
-#
-# SETools is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with SETools.  If not, see
-# <http://www.gnu.org/licenses/>.
-#
-import logging
-
-from . import compquery
-from . import mixins
-
-
-class CategoryQuery(mixins.MatchAlias, compquery.ComponentQuery):
-
-    """
-    Query MLS Categories
-
-    Parameter:
-    policy       The policy to query.
-
-    Keyword Parameters/Class attributes:
-    name         The name of the category to match.
-    name_regex   If true, regular expression matching will
-                 be used for matching the name.
-    alias        The alias name to match.
-    alias_regex  If true, regular expression matching
-                 will be used on the alias names.
-    """
-
-    def results(self):
-        """Generator which yields all matching categories."""
-        self.log.info("Generating results from {0.policy}".format(self))
-        self.log.debug("Name: {0.name!r}, regex: {0.name_regex}".format(self))
-        self.log.debug("Alias: {0.alias}, regex: {0.alias_regex}".format(self))
-
-        for cat in self.policy.categories():
-            if not self._match_name(cat):
-                continue
-
-            if not self._match_alias(cat):
-                continue
-
-            yield cat
diff --git a/lib/python2.7/site-packages/setoolsgui/setools/commonquery.py b/lib/python2.7/site-packages/setoolsgui/setools/commonquery.py
deleted file mode 100644
index e105ccb..0000000
--- a/lib/python2.7/site-packages/setoolsgui/setools/commonquery.py
+++ /dev/null
@@ -1,60 +0,0 @@
-# Copyright 2014-2015, Tresys Technology, LLC
-#
-# This file is part of SETools.
-#
-# SETools is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Lesser General Public License as
-# published by the Free Software Foundation, either version 2.1 of
-# the License, or (at your option) any later version.
-#
-# SETools is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with SETools.  If not, see
-# <http://www.gnu.org/licenses/>.
-#
-import logging
-import re
-
-from . import compquery, mixins
-
-
-class CommonQuery(mixins.MatchPermission, compquery.ComponentQuery):
-
-    """
-    Query common permission sets.
-
-    Parameter:
-    policy       The policy to query.
-
-    Keyword Parameters/Class attributes:
-    name         The name of the common to match.
-    name_regex   If true, regular expression matching will
-                 be used for matching the name.
-    perms        The permissions to match.
-    perms_equal  If true, only commons with permission sets
-                 that are equal to the criteria will
-                 match.  Otherwise, any intersection
-                 will match.
-    perms_regex  If true, regular expression matching will be used
-                 on the permission names instead of set logic.
-    """
-
-    def results(self):
-        """Generator which yields all matching commons."""
-        self.log.info("Generating results from {0.policy}".format(self))
-        self.log.debug("Name: {0.name!r}, regex: {0.name_regex}".format(self))
-        self.log.debug("Perms: {0.perms!r}, regex: {0.perms_regex}, eq: {0.perms_equal}".
-                       format(self))
-
-        for com in self.policy.commons():
-            if not self._match_name(com):
-                continue
-
-            if not self._match_perms(com):
-                continue
-
-            yield com
diff --git a/lib/python2.7/site-packages/setoolsgui/setools/compquery.py b/lib/python2.7/site-packages/setoolsgui/setools/compquery.py
deleted file mode 100644
index 3d8851a..0000000
--- a/lib/python2.7/site-packages/setoolsgui/setools/compquery.py
+++ /dev/null
@@ -1,39 +0,0 @@
-# Copyright 2014-2015, Tresys Technology, LLC
-#
-# This file is part of SETools.
-#
-# SETools is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Lesser General Public License as
-# published by the Free Software Foundation, either version 2.1 of
-# the License, or (at your option) any later version.
-#
-# SETools is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with SETools.  If not, see
-# <http://www.gnu.org/licenses/>.
-#
-# pylint: disable=no-member,attribute-defined-outside-init,abstract-method
-import re
-
-from . import query
-from .descriptors import CriteriaDescriptor
-
-
-class ComponentQuery(query.PolicyQuery):
-
-    """Base class for SETools component queries."""
-
-    name = CriteriaDescriptor("name_regex")
-    name_regex = False
-
-    def _match_name(self, obj):
-        """Match the object to the name criteria."""
-        if not self.name:
-            # if there is no criteria, everything matches.
-            return True
-
-        return self._match_regex(obj, self.name, self.name_regex)
diff --git a/lib/python2.7/site-packages/setoolsgui/setools/constraintquery.py b/lib/python2.7/site-packages/setoolsgui/setools/constraintquery.py
deleted file mode 100644
index 82a6fc2..0000000
--- a/lib/python2.7/site-packages/setoolsgui/setools/constraintquery.py
+++ /dev/null
@@ -1,142 +0,0 @@
-# Copyright 2015, Tresys Technology, LLC
-#
-# This file is part of SETools.
-#
-# SETools is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Lesser General Public License as
-# published by the Free Software Foundation, either version 2.1 of
-# the License, or (at your option) any later version.
-#
-# SETools is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with SETools.  If not, see
-# <http://www.gnu.org/licenses/>.
-#
-import logging
-import re
-
-from . import mixins, query
-from .descriptors import CriteriaDescriptor, CriteriaSetDescriptor, RuletypeDescriptor
-from .policyrep.exception import ConstraintUseError
-
-
-class ConstraintQuery(mixins.MatchObjClass, mixins.MatchPermission, query.PolicyQuery):
-
-    """
-    Query constraint rules, (mls)constrain/(mls)validatetrans.
-
-    Parameter:
-    policy            The policy to query.
-
-    Keyword Parameters/Class attributes:
-    ruletype          The list of rule type(s) to match.
-    tclass            The object class(es) to match.
-    tclass_regex      If true, use a regular expression for
-                      matching the rule's object class.
-    perms             The permission(s) to match.
-    perms_equal       If true, the permission set of the rule
-                      must exactly match the permissions
-                      criteria.  If false, any set intersection
-                      will match.
-    perms_regex       If true, regular expression matching will be used
-                      on the permission names instead of set logic.
-    role              The name of the role to match in the
-                      constraint expression.
-    role_indirect     If true, members of an attribute will be
-                      matched rather than the attribute itself.
-    role_regex        If true, regular expression matching will
-                      be used on the role.
-    type_             The name of the type/attribute to match in the
-                      constraint expression.
-    type_indirect     If true, members of an attribute will be
-                      matched rather than the attribute itself.
-    type_regex        If true, regular expression matching will
-                      be used on the type/attribute.
-    user              The name of the user to match in the
-                      constraint expression.
-    user_regex        If true, regular expression matching will
-                      be used on the user.
-    """
-
-    ruletype = RuletypeDescriptor("validate_constraint_ruletype")
-    user = CriteriaDescriptor("user_regex", "lookup_user")
-    user_regex = False
-    role = CriteriaDescriptor("role_regex", "lookup_role")
-    role_regex = False
-    role_indirect = True
-    type_ = CriteriaDescriptor("type_regex", "lookup_type_or_attr")
-    type_regex = False
-    type_indirect = True
-
-    def _match_expr(self, expr, criteria, indirect, regex):
-        """
-        Match roles/types/users in a constraint expression,
-        optionally by expanding the contents of attributes.
-
-        Parameters:
-        expr        The expression to match.
-        criteria    The criteria to match.
-        indirect    If attributes in the expression should be expanded.
-        regex       If regular expression matching should be used.
-        """
-
-        if indirect:
-            obj = set()
-            for item in expr:
-                obj.update(item.expand())
-        else:
-            obj = expr
-
-        return self._match_in_set(obj, criteria, regex)
-
-    def results(self):
-        """Generator which yields all matching constraints rules."""
-        self.log.info("Generating results from {0.policy}".format(self))
-        self.log.debug("Ruletypes: {0.ruletype}".format(self))
-        self.log.debug("Class: {0.tclass!r}, regex: {0.tclass_regex}".format(self))
-        self.log.debug("Perms: {0.perms!r}, regex: {0.perms_regex}, eq: {0.perms_equal}".
-                       format(self))
-        self.log.debug("User: {0.user!r}, regex: {0.user_regex}".format(self))
-        self.log.debug("Role: {0.role!r}, regex: {0.role_regex}".format(self))
-        self.log.debug("Type: {0.type_!r}, regex: {0.type_regex}".format(self))
-
-        for c in self.policy.constraints():
-            if self.ruletype:
-                if c.ruletype not in self.ruletype:
-                    continue
-
-            if not self._match_object_class(c):
-                continue
-
-            try:
-                if not self._match_perms(c):
-                    continue
-            except ConstraintUseError:
-                    continue
-
-            if self.role and not self._match_expr(
-                        c.roles,
-                        self.role,
-                        self.role_indirect,
-                        self.role_regex):
-                    continue
-
-            if self.type_ and not self._match_expr(
-                        c.types,
-                        self.type_,
-                        self.type_indirect,
-                        self.type_regex):
-                    continue
-
-            if self.user and not self._match_expr(
-                        c.users,
-                        self.user,
-                        False,
-                        self.user_regex):
-                    continue
-
-            yield c
diff --git a/lib/python2.7/site-packages/setoolsgui/setools/contextquery.py b/lib/python2.7/site-packages/setoolsgui/setools/contextquery.py
deleted file mode 100644
index 5ce1632..0000000
--- a/lib/python2.7/site-packages/setoolsgui/setools/contextquery.py
+++ /dev/null
@@ -1,98 +0,0 @@
-# Copyright 2014-2015, Tresys Technology, LLC
-#
-# This file is part of SETools.
-#
-# SETools is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Lesser General Public License as
-# published by the Free Software Foundation, either version 2.1 of
-# the License, or (at your option) any later version.
-#
-# SETools is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with SETools.  If not, see
-# <http://www.gnu.org/licenses/>.
-#
-# pylint: disable=attribute-defined-outside-init,no-member
-import re
-
-from . import query
-from .descriptors import CriteriaDescriptor
-
-
-class ContextQuery(query.PolicyQuery):
-
-    """
-    Base class for SETools in-policy labeling/context queries.
-
-    Parameter:
-    policy          The policy to query.
-
-    Keyword Parameters/Class attributes:
-    context         The object to match.
-    user            The user to match in the context.
-    user_regex      If true, regular expression matching
-                    will be used on the user.
-    role            The role to match in the context.
-    role_regex      If true, regular expression matching
-                    will be used on the role.
-    type_           The type to match in the context.
-    type_regex      If true, regular expression matching
-                    will be used on the type.
-    range_          The range to match in the context.
-    range_subset    If true, the criteria will match if it
-                    is a subset of the context's range.
-    range_overlap   If true, the criteria will match if it
-                    overlaps any of the context's range.
-    range_superset  If true, the criteria will match if it
-                    is a superset of the context's range.
-    range_proper    If true, use proper superset/subset
-                    on range matching operations.
-                    No effect if not using set operations.
-    """
-
-    user = CriteriaDescriptor("user_regex", "lookup_user")
-    user_regex = False
-    role = CriteriaDescriptor("role_regex", "lookup_role")
-    role_regex = False
-    type_ = CriteriaDescriptor("type_regex", "lookup_type")
-    type_regex = False
-    range_ = CriteriaDescriptor(lookup_function="lookup_range")
-    range_overlap = False
-    range_subset = False
-    range_superset = False
-    range_proper = False
-
-    def _match_context(self, context):
-
-        if self.user and not query.PolicyQuery._match_regex(
-                context.user,
-                self.user,
-                self.user_regex):
-            return False
-
-        if self.role and not query.PolicyQuery._match_regex(
-                context.role,
-                self.role,
-                self.role_regex):
-            return False
-
-        if self.type_ and not query.PolicyQuery._match_regex(
-                context.type_,
-                self.type_,
-                self.type_regex):
-            return False
-
-        if self.range_ and not query.PolicyQuery._match_range(
-                context.range_,
-                self.range_,
-                self.range_subset,
-                self.range_overlap,
-                self.range_superset,
-                self.range_proper):
-            return False
-
-        return True
diff --git a/lib/python2.7/site-packages/setoolsgui/setools/descriptors.py b/lib/python2.7/site-packages/setoolsgui/setools/descriptors.py
deleted file mode 100644
index eab9210..0000000
--- a/lib/python2.7/site-packages/setoolsgui/setools/descriptors.py
+++ /dev/null
@@ -1,230 +0,0 @@
-# Copyright 2015, Tresys Technology, LLC
-#
-# This file is part of SETools.
-#
-# SETools is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Lesser General Public License as
-# published by the Free Software Foundation, either version 2.1 of
-# the License, or (at your option) any later version.
-#
-# SETools is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with SETools.  If not, see
-# <http://www.gnu.org/licenses/>.
-#
-"""
-SETools descriptors.
-
-These classes override how a class's attributes are get/set/deleted.
-This is how the @property decorator works.
-
-See https://docs.python.org/3/howto/descriptor.html
-for more details.
-"""
-
-import re
-from collections import defaultdict
-from weakref import WeakKeyDictionary
-
-#
-# Query criteria descriptors
-#
-# Implementation note: if the name_regex attribute value
-# is changed the criteria must be reset.
-#
-
-
-class CriteriaDescriptor(object):
-
-    """
-    Single item criteria descriptor.
-
-    Parameters:
-    name_regex      The name of instance's regex setting attribute;
-                    used as name_regex below.  If unset,
-                    regular expressions will never be used.
-    lookup_function The name of the SELinuxPolicy lookup function,
-                    e.g. lookup_type or lookup_boolean.
-    default_value   The default value of the criteria.  The default
-                    is None.
-
-    Read-only instance attribute use (obj parameter):
-    policy          The instance of SELinuxPolicy
-    name_regex      This attribute is read to determine if
-                    the criteria should be looked up or
-                    compiled into a regex.  If the attribute
-                    does not exist, False is assumed.
-    """
-
-    def __init__(self, name_regex=None, lookup_function=None, default_value=None):
-        assert name_regex or lookup_function, "A simple attribute should be used if there is " \
-            "no regex nor lookup function."
-        self.regex = name_regex
-        self.default_value = default_value
-        self.lookup_function = lookup_function
-
-        # use weak references so instances can be
-        # garbage collected, rather than unnecessarily
-        # kept around due to this descriptor.
-        self.instances = WeakKeyDictionary()
-
-    def __get__(self, obj, objtype=None):
-        if obj is None:
-            return self
-
-        return self.instances.setdefault(obj, self.default_value)
-
-    def __set__(self, obj, value):
-        if not value:
-            self.instances[obj] = None
-        elif self.regex and getattr(obj, self.regex, False):
-            self.instances[obj] = re.compile(value)
-        elif self.lookup_function:
-            lookup = getattr(obj.policy, self.lookup_function)
-            self.instances[obj] = lookup(value)
-        else:
-            self.instances[obj] = value
-
-
-class CriteriaSetDescriptor(CriteriaDescriptor):
-
-    """Descriptor for a set of criteria."""
-
-    def __set__(self, obj, value):
-        if not value:
-            self.instances[obj] = None
-        elif self.regex and getattr(obj, self.regex, False):
-            self.instances[obj] = re.compile(value)
-        elif self.lookup_function:
-            lookup = getattr(obj.policy, self.lookup_function)
-            self.instances[obj] = set(lookup(v) for v in value)
-        else:
-            self.instances[obj] = set(value)
-
-
-class RuletypeDescriptor(object):
-
-    """
-    Descriptor for a list of rule types.
-
-    Parameters:
-    validator       The name of the SELinuxPolicy ruletype
-                    validator function, e.g. validate_te_ruletype
-    default_value   The default value of the criteria.  The default
-                    is None.
-
-    Read-only instance attribute use (obj parameter):
-    policy          The instance of SELinuxPolicy
-    """
-
-    def __init__(self, validator):
-        self.validator = validator
-
-        # use weak references so instances can be
-        # garbage collected, rather than unnecessarily
-        # kept around due to this descriptor.
-        self.instances = WeakKeyDictionary()
-
-    def __get__(self, obj, objtype=None):
-        if obj is None:
-            return self
-
-        return self.instances.setdefault(obj, None)
-
-    def __set__(self, obj, value):
-        if value:
-            validate = getattr(obj.policy, self.validator)
-            validate(value)
-            self.instances[obj] = value
-        else:
-            self.instances[obj] = None
-
-
-#
-# NetworkX Graph Descriptors
-#
-# These descriptors are used to simplify all
-# of the dictionary use in the NetworkX graph.
-#
-
-
-class NetworkXGraphEdgeDescriptor(object):
-
-    """
-    Descriptor base class for NetworkX graph edge attributes.
-
-    Parameter:
-    name        The edge property name
-
-    Instance class attribute use (obj parameter):
-    G           The NetworkX graph
-    source      The edge's source node
-    target      The edge's target node
-    """
-
-    def __init__(self, propname):
-        self.name = propname
-
-    def __get__(self, obj, objtype=None):
-        if obj is None:
-            return self
-
-        return obj.G[obj.source][obj.target][self.name]
-
-    def __set__(self, obj, value):
-        raise NotImplementedError
-
-    def __delete__(self, obj):
-        raise NotImplementedError
-
-
-class EdgeAttrDict(NetworkXGraphEdgeDescriptor):
-
-    """A descriptor for edge attributes that are dictionaries."""
-
-    def __set__(self, obj, value):
-        # None is a special value to initialize the attribute
-        if value is None:
-            obj.G[obj.source][obj.target][self.name] = defaultdict(list)
-        else:
-            raise ValueError("{0} dictionaries should not be assigned directly".format(self.name))
-
-    def __delete__(self, obj):
-        obj.G[obj.source][obj.target][self.name].clear()
-
-
-class EdgeAttrIntMax(NetworkXGraphEdgeDescriptor):
-
-    """
-    A descriptor for edge attributes that are non-negative integers that always
-    keep the max assigned value until re-initialized.
-    """
-
-    def __set__(self, obj, value):
-        # None is a special value to initialize
-        if value is None:
-            obj.G[obj.source][obj.target][self.name] = 0
-        else:
-            current_value = obj.G[obj.source][obj.target][self.name]
-            obj.G[obj.source][obj.target][self.name] = max(current_value, value)
-
-
-class EdgeAttrList(NetworkXGraphEdgeDescriptor):
-
-    """A descriptor for edge attributes that are lists."""
-
-    def __set__(self, obj, value):
-        # None is a special value to initialize
-        if value is None:
-            obj.G[obj.source][obj.target][self.name] = []
-        else:
-            raise ValueError("{0} lists should not be assigned directly".format(self.name))
-
-    def __delete__(self, obj):
-        # in Python3 a .clear() function was added for lists
-        # keep this implementation for Python 2 compat
-        del obj.G[obj.source][obj.target][self.name][:]
diff --git a/lib/python2.7/site-packages/setoolsgui/setools/dta.py b/lib/python2.7/site-packages/setoolsgui/setools/dta.py
deleted file mode 100644
index 271efc4..0000000
--- a/lib/python2.7/site-packages/setoolsgui/setools/dta.py
+++ /dev/null
@@ -1,603 +0,0 @@
-# Copyright 2014-2015, Tresys Technology, LLC
-#
-# This file is part of SETools.
-#
-# SETools is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Lesser General Public License as
-# published by the Free Software Foundation, either version 2.1 of
-# the License, or (at your option) any later version.
-#
-# SETools is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with SETools.  If not, see
-# <http://www.gnu.org/licenses/>.
-#
-import itertools
-import logging
-from collections import defaultdict, namedtuple
-
-import networkx as nx
-from networkx.exception import NetworkXError, NetworkXNoPath
-
-from .descriptors import EdgeAttrDict, EdgeAttrList
-
-__all__ = ['DomainTransitionAnalysis']
-
-# Return values for the analysis
-# are in the following tuple formats:
-step_output = namedtuple("step", ["source",
-                                  "target",
-                                  "transition",
-                                  "entrypoints",
-                                  "setexec",
-                                  "dyntransition",
-                                  "setcurrent"])
-
-entrypoint_output = namedtuple("entrypoints", ["name",
-                                               "entrypoint",
-                                               "execute",
-                                               "type_transition"])
-
-
-class DomainTransitionAnalysis(object):
-
-    """Domain transition analysis."""
-
-    def __init__(self, policy, reverse=False, exclude=None):
-        """
-        Parameter:
-        policy   The policy to analyze.
-        """
-        self.log = logging.getLogger(self.__class__.__name__)
-
-        self.policy = policy
-        self.exclude = exclude
-        self.reverse = reverse
-        self.rebuildgraph = True
-        self.rebuildsubgraph = True
-        self.G = nx.DiGraph()
-        self.subG = None
-
-    @property
-    def reverse(self):
-        return self._reverse
-
-    @reverse.setter
-    def reverse(self, direction):
-        self._reverse = bool(direction)
-        self.rebuildsubgraph = True
-
-    @property
-    def exclude(self):
-        return self._exclude
-
-    @exclude.setter
-    def exclude(self, types):
-        if types:
-            self._exclude = [self.policy.lookup_type(t) for t in types]
-        else:
-            self._exclude = None
-
-        self.rebuildsubgraph = True
-
-    def shortest_path(self, source, target):
-        """
-        Generator which yields one shortest domain transition path
-        between the source and target types (there may be more).
-
-        Parameters:
-        source  The source type.
-        target  The target type.
-
-        Yield: generator(steps)
-
-        steps   A generator that returns the tuple of
-                source, target, and rules for each
-                domain transition.
-        """
-        s = self.policy.lookup_type(source)
-        t = self.policy.lookup_type(target)
-
-        if self.rebuildsubgraph:
-            self._build_subgraph()
-
-        self.log.info("Generating one shortest path from {0} to {1}...".format(s, t))
-
-        try:
-            yield self.__generate_steps(nx.shortest_path(self.subG, s, t))
-        except (NetworkXNoPath, NetworkXError):
-            # NetworkXError: the type is valid but not in graph, e.g. excluded
-            # NetworkXNoPath: no paths or the target type is
-            # not in the graph
-            pass
-
-    def all_paths(self, source, target, maxlen=2):
-        """
-        Generator which yields all domain transition paths between
-        the source and target up to the specified maximum path
-        length.
-
-        Parameters:
-        source   The source type.
-        target   The target type.
-        maxlen   Maximum length of paths.
-
-        Yield: generator(steps)
-
-        steps    A generator that returns the tuple of
-                 source, target, and rules for each
-                 domain transition.
-        """
-        if maxlen < 1:
-            raise ValueError("Maximum path length must be positive.")
-
-        s = self.policy.lookup_type(source)
-        t = self.policy.lookup_type(target)
-
-        if self.rebuildsubgraph:
-            self._build_subgraph()
-
-        self.log.info("Generating all paths from {0} to {1}, max len {2}...".format(s, t, maxlen))
-
-        try:
-            for path in nx.all_simple_paths(self.subG, s, t, maxlen):
-                yield self.__generate_steps(path)
-        except (NetworkXNoPath, NetworkXError):
-            # NetworkXError: the type is valid but not in graph, e.g. excluded
-            # NetworkXNoPath: no paths or the target type is
-            # not in the graph
-            pass
-
-    def all_shortest_paths(self, source, target):
-        """
-        Generator which yields all shortest domain transition paths
-        between the source and target types.
-
-        Parameters:
-        source   The source type.
-        target   The target type.
-
-        Yield: generator(steps)
-
-        steps    A generator that returns the tuple of
-                 source, target, and rules for each
-                 domain transition.
-        """
-        s = self.policy.lookup_type(source)
-        t = self.policy.lookup_type(target)
-
-        if self.rebuildsubgraph:
-            self._build_subgraph()
-
-        self.log.info("Generating all shortest paths from {0} to {1}...".format(s, t))
-
-        try:
-            for path in nx.all_shortest_paths(self.subG, s, t):
-                yield self.__generate_steps(path)
-        except (NetworkXNoPath, NetworkXError, KeyError):
-            # NetworkXError: the type is valid but not in graph, e.g. excluded
-            # NetworkXNoPath: no paths or the target type is
-            # not in the graph
-            # KeyError: work around NetworkX bug
-            # when the source node is not in the graph
-            pass
-
-    def transitions(self, type_):
-        """
-        Generator which yields all domain transitions out of a
-        specified source type.
-
-        Parameters:
-        type_   The starting type.
-
-        Yield: generator(steps)
-
-        steps   A generator that returns the tuple of
-                source, target, and rules for each
-                domain transition.
-        """
-        s = self.policy.lookup_type(type_)
-
-        if self.rebuildsubgraph:
-            self._build_subgraph()
-
-        self.log.info("Generating all transitions {1} {0}".
-                      format(s, "in to" if self.reverse else "out from"))
-
-        try:
-            for source, target in self.subG.out_edges_iter(s):
-                edge = Edge(self.subG, source, target)
-
-                if self.reverse:
-                    real_source, real_target = target, source
-                else:
-                    real_source, real_target = source, target
-
-                yield step_output(real_source, real_target,
-                                  edge.transition,
-                                  self.__generate_entrypoints(edge),
-                                  edge.setexec,
-                                  edge.dyntransition,
-                                  edge.setcurrent)
-
-        except NetworkXError:
-            # NetworkXError: the type is valid but not in graph, e.g. excluded
-            pass
-
-    def get_stats(self):  # pragma: no cover
-        """
-        Get the domain transition graph statistics.
-
-        Return:  tuple(nodes, edges)
-
-        nodes    The number of nodes (types) in the graph.
-        edges    The number of edges (domain transitions) in the graph.
-        """
-        return (self.G.number_of_nodes(), self.G.number_of_edges())
-
-    #
-    # Internal functions follow
-    #
-    @staticmethod
-    def __generate_entrypoints(edge):
-        """
-        Generator which yields the entrypoint, execute, and
-        type_transition rules for each entrypoint.
-
-        Parameter:
-        data     The dictionary of entrypoints.
-
-        Yield: tuple(type, entry, exec, trans)
-
-        type     The entrypoint type.
-        entry    The list of entrypoint rules.
-        exec     The list of execute rules.
-        trans    The list of type_transition rules.
-        """
-        for e in edge.entrypoint:
-            yield entrypoint_output(e, edge.entrypoint[e], edge.execute[e], edge.type_transition[e])
-
-    def __generate_steps(self, path):
-        """
-        Generator which yields the source, target, and associated rules
-        for each domain transition.
-
-        Parameter:
-        path     A list of graph node names representing an information flow path.
-
-        Yield: tuple(source, target, transition, entrypoints,
-                     setexec, dyntransition, setcurrent)
-
-        source          The source type for this step of the domain transition.
-        target          The target type for this step of the domain transition.
-        transition      The list of transition rules.
-        entrypoints     Generator which yields entrypoint-related rules.
-        setexec         The list of setexec rules.
-        dyntranstion    The list of dynamic transition rules.
-        setcurrent      The list of setcurrent rules.
-        """
-
-        for s in range(1, len(path)):
-            source = path[s - 1]
-            target = path[s]
-            edge = Edge(self.subG, source, target)
-
-            # Yield the actual source and target.
-            # The above perspective is reversed
-            # if the graph has been reversed.
-            if self.reverse:
-                real_source, real_target = target, source
-            else:
-                real_source, real_target = source, target
-
-            yield step_output(real_source, real_target,
-                              edge.transition,
-                              self.__generate_entrypoints(edge),
-                              edge.setexec,
-                              edge.dyntransition,
-                              edge.setcurrent)
-
-    #
-    # Graph building functions
-    #
-
-    # Domain transition requirements:
-    #
-    # Standard transitions a->b:
-    # allow a b:process transition;
-    # allow a b_exec:file execute;
-    # allow b b_exec:file entrypoint;
-    #
-    # and at least one of:
-    # allow a self:process setexec;
-    # type_transition a b_exec:process b;
-    #
-    # Dynamic transition x->y:
-    # allow x y:process dyntransition;
-    # allow x self:process setcurrent;
-    #
-    # Algorithm summary:
-    # 1. iterate over all rules
-    #   1. skip non allow/type_transition rules
-    #   2. if process transition or dyntransition, create edge,
-    #      initialize rule lists, add the (dyn)transition rule
-    #   3. if process setexec or setcurrent, add to appropriate dict
-    #      keyed on the subject
-    #   4. if file exec, entrypoint, or type_transition:process,
-    #      add to appropriate dict keyed on subject,object.
-    # 2. Iterate over all graph edges:
-    #   1. if there is a transition rule (else add to invalid
-    #      transition list):
-    #       1. use set intersection to find matching exec
-    #          and entrypoint rules. If none, add to invalid
-    #          transition list.
-    #       2. for each valid entrypoint, add rules to the
-    #          edge's lists if there is either a
-    #          type_transition for it or the source process
-    #          has setexec permissions.
-    #       3. If there are neither type_transitions nor
-    #          setexec permissions, add to the invalid
-    #          transition list
-    #   2. if there is a dyntransition rule (else add to invalid
-    #      dyntrans list):
-    #       1. If the source has a setcurrent rule, add it
-    #          to the edge's list, else add to invalid
-    #          dyntransition list.
-    # 3. Iterate over all graph edges:
-    #   1. if the edge has an invalid trans and dyntrans, delete
-    #      the edge.
-    #   2. if the edge has an invalid trans, clear the related
-    #      lists on the edge.
-    #   3. if the edge has an invalid dyntrans, clear the related
-    #      lists on the edge.
-    #
-    def _build_graph(self):
-        self.G.clear()
-
-        self.log.info("Building graph from {0}...".format(self.policy))
-
-        # hash tables keyed on domain type
-        setexec = defaultdict(list)
-        setcurrent = defaultdict(list)
-
-        # hash tables keyed on (domain, entrypoint file type)
-        # the parameter for defaultdict has to be callable
-        # hence the lambda for the nested defaultdict
-        execute = defaultdict(lambda: defaultdict(list))
-        entrypoint = defaultdict(lambda: defaultdict(list))
-
-        # hash table keyed on (domain, entrypoint, target domain)
-        type_trans = defaultdict(lambda: defaultdict(lambda: defaultdict(list)))
-
-        for rule in self.policy.terules():
-            if rule.ruletype == "allow":
-                if rule.tclass not in ["process", "file"]:
-                    continue
-
-                perms = rule.perms
-
-                if rule.tclass == "process":
-                    if "transition" in perms:
-                        for s, t in itertools.product(rule.source.expand(), rule.target.expand()):
-                            # only add edges if they actually
-                            # transition to a new type
-                            if s != t:
-                                edge = Edge(self.G, s, t, create=True)
-                                edge.transition.append(rule)
-
-                    if "dyntransition" in perms:
-                        for s, t in itertools.product(rule.source.expand(), rule.target.expand()):
-                            # only add edges if they actually
-                            # transition to a new type
-                            if s != t:
-                                e = Edge(self.G, s, t, create=True)
-                                e.dyntransition.append(rule)
-
-                    if "setexec" in perms:
-                        for s in rule.source.expand():
-                            setexec[s].append(rule)
-
-                    if "setcurrent" in perms:
-                        for s in rule.source.expand():
-                            setcurrent[s].append(rule)
-
-                else:
-                    if "execute" in perms:
-                        for s, t in itertools.product(
-                                rule.source.expand(),
-                                rule.target.expand()):
-                            execute[s][t].append(rule)
-
-                    if "entrypoint" in perms:
-                        for s, t in itertools.product(rule.source.expand(), rule.target.expand()):
-                            entrypoint[s][t].append(rule)
-
-            elif rule.ruletype == "type_transition":
-                if rule.tclass != "process":
-                    continue
-
-                d = rule.default
-                for s, t in itertools.product(rule.source.expand(), rule.target.expand()):
-                    type_trans[s][t][d].append(rule)
-
-        invalid_edge = []
-        clear_transition = []
-        clear_dyntransition = []
-
-        for s, t in self.G.edges_iter():
-            edge = Edge(self.G, s, t)
-            invalid_trans = False
-            invalid_dyntrans = False
-
-            if edge.transition:
-                # get matching domain exec w/entrypoint type
-                entry = set(entrypoint[t].keys())
-                exe = set(execute[s].keys())
-                match = entry.intersection(exe)
-
-                if not match:
-                    # there are no valid entrypoints
-                    invalid_trans = True
-                else:
-                    # TODO try to improve the
-                    # efficiency in this loop
-                    for m in match:
-                        if s in setexec or type_trans[s][m]:
-                            # add key for each entrypoint
-                            edge.entrypoint[m] += entrypoint[t][m]
-                            edge.execute[m] += execute[s][m]
-
-                        if type_trans[s][m][t]:
-                            edge.type_transition[m] += type_trans[s][m][t]
-
-                    if s in setexec:
-                        edge.setexec.extend(setexec[s])
-
-                    if not edge.setexec and not edge.type_transition:
-                        invalid_trans = True
-            else:
-                invalid_trans = True
-
-            if edge.dyntransition:
-                if s in setcurrent:
-                    edge.setcurrent.extend(setcurrent[s])
-                else:
-                    invalid_dyntrans = True
-            else:
-                invalid_dyntrans = True
-
-            # cannot change the edges while iterating over them,
-            # so keep appropriate lists
-            if invalid_trans and invalid_dyntrans:
-                invalid_edge.append(edge)
-            elif invalid_trans:
-                clear_transition.append(edge)
-            elif invalid_dyntrans:
-                clear_dyntransition.append(edge)
-
-        # Remove invalid transitions
-        self.G.remove_edges_from(invalid_edge)
-        for edge in clear_transition:
-            # if only the regular transition is invalid,
-            # clear the relevant lists
-            del edge.transition
-            del edge.execute
-            del edge.entrypoint
-            del edge.type_transition
-            del edge.setexec
-        for edge in clear_dyntransition:
-            # if only the dynamic transition is invalid,
-            # clear the relevant lists
-            del edge.dyntransition
-            del edge.setcurrent
-
-        self.rebuildgraph = False
-        self.rebuildsubgraph = True
-        self.log.info("Completed building graph.")
-
-    def __remove_excluded_entrypoints(self):
-        invalid_edges = []
-        for source, target in self.subG.edges_iter():
-            edge = Edge(self.subG, source, target)
-            entrypoints = set(edge.entrypoint)
-            entrypoints.intersection_update(self.exclude)
-
-            if not entrypoints:
-                # short circuit if there are no
-                # excluded entrypoint types on
-                # this edge.
-                continue
-
-            for e in entrypoints:
-                # clear the entrypoint data
-                del edge.entrypoint[e]
-                del edge.execute[e]
-
-                try:
-                    del edge.type_transition[e]
-                except KeyError:  # setexec
-                    pass
-
-            # cannot delete the edges while iterating over them
-            if not edge.entrypoint and not edge.dyntransition:
-                invalid_edges.append(edge)
-
-        self.subG.remove_edges_from(invalid_edges)
-
-    def _build_subgraph(self):
-        if self.rebuildgraph:
-            self._build_graph()
-
-        self.log.info("Building subgraph.")
-        self.log.debug("Excluding {0}".format(self.exclude))
-        self.log.debug("Reverse {0}".format(self.reverse))
-
-        # reverse graph for reverse DTA
-        if self.reverse:
-            self.subG = self.G.reverse(copy=True)
-        else:
-            self.subG = self.G.copy()
-
-        if self.exclude:
-            # delete excluded domains from subgraph
-            self.subG.remove_nodes_from(self.exclude)
-
-            # delete excluded entrypoints from subgraph
-            self.__remove_excluded_entrypoints()
-
-        self.rebuildsubgraph = False
-        self.log.info("Completed building subgraph.")
-
-
-class Edge(object):
-
-    """
-    A graph edge.  Also used for returning domain transition steps.
-
-    Parameters:
-    source      The source type of the edge.
-    target      The target tyep of the edge.
-
-    Keyword Parameters:
-    create      (T/F) create the edge if it does not exist.
-                The default is False.
-    """
-
-    transition = EdgeAttrList('transition')
-    setexec = EdgeAttrList('setexec')
-    dyntransition = EdgeAttrList('dyntransition')
-    setcurrent = EdgeAttrList('setcurrent')
-    entrypoint = EdgeAttrDict('entrypoint')
-    execute = EdgeAttrDict('execute')
-    type_transition = EdgeAttrDict('type_transition')
-
-    def __init__(self, graph, source, target, create=False):
-        self.G = graph
-        self.source = source
-        self.target = target
-
-        # a bit of a hack to make Edges work
-        # in NetworkX functions that work on
-        # 2-tuples of (source, target)
-        # (see __getitem__ below)
-        self.st_tuple = (source, target)
-
-        if not self.G.has_edge(source, target):
-            if not create:
-                raise ValueError("Edge does not exist in graph")
-            else:
-                self.G.add_edge(source, target)
-                self.transition = None
-                self.entrypoint = None
-                self.execute = None
-                self.type_transition = None
-                self.setexec = None
-                self.dyntransition = None
-                self.setcurrent = None
-
-    def __getitem__(self, key):
-        return self.st_tuple[key]
diff --git a/lib/python2.7/site-packages/setoolsgui/setools/exception.py b/lib/python2.7/site-packages/setoolsgui/setools/exception.py
deleted file mode 100644
index c3505cd..0000000
--- a/lib/python2.7/site-packages/setoolsgui/setools/exception.py
+++ /dev/null
@@ -1,62 +0,0 @@
-# Copyright 2015, Tresys Technology, LLC
-#
-# This file is part of SETools.
-#
-# SETools is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Lesser General Public License as
-# published by the Free Software Foundation, either version 2.1 of
-# the License, or (at your option) any later version.
-#
-# SETools is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with SETools.  If not, see
-# <http://www.gnu.org/licenses/>.
-#
-
-#
-# Base class for exceptions
-#
-
-
-class SEToolsException(Exception):
-
-    """Base class for all SETools exceptions."""
-    pass
-
-#
-# Permission map exceptions
-#
-
-
-class PermissionMapException(SEToolsException):
-
-    """Base class for all permission map exceptions."""
-    pass
-
-
-class PermissionMapParseError(PermissionMapException):
-
-    """Exception for parse errors while reading permission map files."""
-    pass
-
-
-class RuleTypeError(PermissionMapException):
-
-    """Exception for using rules with incorrect rule type."""
-    pass
-
-
-class UnmappedClass(PermissionMapException):
-
-    """Exception for classes that are unmapped"""
-    pass
-
-
-class UnmappedPermission(PermissionMapException):
-
-    """Exception for permissions that are unmapped"""
-    pass
diff --git a/lib/python2.7/site-packages/setoolsgui/setools/fsusequery.py b/lib/python2.7/site-packages/setoolsgui/setools/fsusequery.py
deleted file mode 100644
index 6825a45..0000000
--- a/lib/python2.7/site-packages/setoolsgui/setools/fsusequery.py
+++ /dev/null
@@ -1,87 +0,0 @@
-# Copyright 2014-2015, Tresys Technology, LLC
-#
-# This file is part of SETools.
-#
-# SETools is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Lesser General Public License as
-# published by the Free Software Foundation, either version 2.1 of
-# the License, or (at your option) any later version.
-#
-# SETools is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with SETools.  If not, see
-# <http://www.gnu.org/licenses/>.
-#
-import logging
-import re
-
-from . import contextquery
-from .descriptors import CriteriaDescriptor, CriteriaSetDescriptor
-
-
-class FSUseQuery(contextquery.ContextQuery):
-
-    """
-    Query fs_use_* statements.
-
-    Parameter:
-    policy          The policy to query.
-
-    Keyword Parameters/Class attributes:
-    ruletype        The rule type(s) to match.
-    fs              The criteria to match the file system type.
-    fs_regex        If true, regular expression matching
-                    will be used on the file system type.
-    user            The criteria to match the context's user.
-    user_regex      If true, regular expression matching
-                    will be used on the user.
-    role            The criteria to match the context's role.
-    role_regex      If true, regular expression matching
-                    will be used on the role.
-    type_           The criteria to match the context's type.
-    type_regex      If true, regular expression matching
-                    will be used on the type.
-    range_          The criteria to match the context's range.
-    range_subset    If true, the criteria will match if it is a subset
-                    of the context's range.
-    range_overlap   If true, the criteria will match if it overlaps
-                    any of the context's range.
-    range_superset  If true, the criteria will match if it is a superset
-                    of the context's range.
-    range_proper    If true, use proper superset/subset operations.
-                    No effect if not using set operations.
-    """
-
-    ruletype = None
-    fs = CriteriaDescriptor("fs_regex")
-    fs_regex = False
-
-    def results(self):
-        """Generator which yields all matching fs_use_* statements."""
-        self.log.info("Generating results from {0.policy}".format(self))
-        self.log.debug("Ruletypes: {0.ruletype}".format(self))
-        self.log.debug("FS: {0.fs!r}, regex: {0.fs_regex}".format(self))
-        self.log.debug("User: {0.user!r}, regex: {0.user_regex}".format(self))
-        self.log.debug("Role: {0.role!r}, regex: {0.role_regex}".format(self))
-        self.log.debug("Type: {0.type_!r}, regex: {0.type_regex}".format(self))
-        self.log.debug("Range: {0.range_!r}, subset: {0.range_subset}, overlap: {0.range_overlap}, "
-                       "superset: {0.range_superset}, proper: {0.range_proper}".format(self))
-
-        for fsu in self.policy.fs_uses():
-            if self.ruletype and fsu.ruletype not in self.ruletype:
-                continue
-
-            if self.fs and not self._match_regex(
-                    fsu.fs,
-                    self.fs,
-                    self.fs_regex):
-                continue
-
-            if not self._match_context(fsu.context):
-                continue
-
-            yield fsu
diff --git a/lib/python2.7/site-packages/setoolsgui/setools/genfsconquery.py b/lib/python2.7/site-packages/setoolsgui/setools/genfsconquery.py
deleted file mode 100644
index c67dfd6..0000000
--- a/lib/python2.7/site-packages/setoolsgui/setools/genfsconquery.py
+++ /dev/null
@@ -1,98 +0,0 @@
-# Copyright 2014-2015, Tresys Technology, LLC
-#
-# This file is part of SETools.
-#
-# SETools is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Lesser General Public License as
-# published by the Free Software Foundation, either version 2.1 of
-# the License, or (at your option) any later version.
-#
-# SETools is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with SETools.  If not, see
-# <http://www.gnu.org/licenses/>.
-#
-import logging
-import re
-
-from . import contextquery
-from .descriptors import CriteriaDescriptor
-
-
-class GenfsconQuery(contextquery.ContextQuery):
-
-    """
-    Query genfscon statements.
-
-    Parameter:
-    policy          The policy to query.
-
-    Keyword Parameters/Class attributes:
-    fs              The criteria to match the file system type.
-    fs_regex        If true, regular expression matching
-                    will be used on the file system type.
-    path            The criteria to match the path.
-    path_regex      If true, regular expression matching
-                    will be used on the path.
-    user            The criteria to match the context's user.
-    user_regex      If true, regular expression matching
-                    will be used on the user.
-    role            The criteria to match the context's role.
-    role_regex      If true, regular expression matching
-                    will be used on the role.
-    type_           The criteria to match the context's type.
-    type_regex      If true, regular expression matching
-                    will be used on the type.
-    range_          The criteria to match the context's range.
-    range_subset    If true, the criteria will match if it is a subset
-                    of the context's range.
-    range_overlap   If true, the criteria will match if it overlaps
-                    any of the context's range.
-    range_superset  If true, the criteria will match if it is a superset
-                    of the context's range.
-    range_proper    If true, use proper superset/subset operations.
-                    No effect if not using set operations.
-    """
-
-    filetype = None
-    fs = CriteriaDescriptor("fs_regex")
-    fs_regex = False
-    path = CriteriaDescriptor("path_regex")
-    path_regex = False
-
-    def results(self):
-        """Generator which yields all matching genfscons."""
-        self.log.info("Generating results from {0.policy}".format(self))
-        self.log.debug("FS: {0.fs!r}, regex: {0.fs_regex}".format(self))
-        self.log.debug("Path: {0.path!r}, regex: {0.path_regex}".format(self))
-        self.log.debug("Filetype: {0.filetype!r}".format(self))
-        self.log.debug("User: {0.user!r}, regex: {0.user_regex}".format(self))
-        self.log.debug("Role: {0.role!r}, regex: {0.role_regex}".format(self))
-        self.log.debug("Type: {0.type_!r}, regex: {0.type_regex}".format(self))
-        self.log.debug("Range: {0.range_!r}, subset: {0.range_subset}, overlap: {0.range_overlap}, "
-                       "superset: {0.range_superset}, proper: {0.range_proper}".format(self))
-
-        for genfs in self.policy.genfscons():
-            if self.fs and not self._match_regex(
-                    genfs.fs,
-                    self.fs,
-                    self.fs_regex):
-                continue
-
-            if self.path and not self._match_regex(
-                    genfs.path,
-                    self.path,
-                    self.path_regex):
-                continue
-
-            if self.filetype and not self.filetype == genfs.filetype:
-                continue
-
-            if not self._match_context(genfs.context):
-                continue
-
-            yield genfs
diff --git a/lib/python2.7/site-packages/setoolsgui/setools/infoflow.py b/lib/python2.7/site-packages/setoolsgui/setools/infoflow.py
deleted file mode 100644
index ea3ec32..0000000
--- a/lib/python2.7/site-packages/setoolsgui/setools/infoflow.py
+++ /dev/null
@@ -1,403 +0,0 @@
-# Copyright 2014-2015, Tresys Technology, LLC
-#
-# This file is part of SETools.
-#
-# SETools is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Lesser General Public License as
-# published by the Free Software Foundation, either version 2.1 of
-# the License, or (at your option) any later version.
-#
-# SETools is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with SETools.  If not, see
-# <http://www.gnu.org/licenses/>.
-#
-import itertools
-import logging
-from collections import namedtuple
-
-import networkx as nx
-from networkx.exception import NetworkXError, NetworkXNoPath
-
-from .descriptors import EdgeAttrIntMax, EdgeAttrList
-
-__all__ = ['InfoFlowAnalysis']
-
-# Return values for the analysis
-# are in the following tuple format:
-step_output = namedtuple("step", ["source",
-                                  "target",
-                                  "rules"])
-
-
-class InfoFlowAnalysis(object):
-
-    """Information flow analysis."""
-
-    def __init__(self, policy, perm_map, min_weight=1, exclude=None):
-        """
-        Parameters:
-        policy      The policy to analyze.
-        perm_map    The permission map or path to the permission map file.
-        minweight   The minimum permission weight to include in the analysis.
-                    (default is 1)
-        exclude     The types excluded from the information flow analysis.
-                    (default is none)
-        """
-        self.log = logging.getLogger(self.__class__.__name__)
-
-        self.policy = policy
-
-        self.min_weight = min_weight
-        self.perm_map = perm_map
-        self.exclude = exclude
-        self.rebuildgraph = True
-        self.rebuildsubgraph = True
-
-        self.G = nx.DiGraph()
-        self.subG = None
-
-    @property
-    def min_weight(self):
-        return self._min_weight
-
-    @min_weight.setter
-    def min_weight(self, weight):
-        if not 1 <= weight <= 10:
-            raise ValueError(
-                "Min information flow weight must be an integer 1-10.")
-
-        self._min_weight = weight
-        self.rebuildsubgraph = True
-
-    @property
-    def perm_map(self):
-        return self._perm_map
-
-    @perm_map.setter
-    def perm_map(self, perm_map):
-        self._perm_map = perm_map
-        self.rebuildgraph = True
-        self.rebuildsubgraph = True
-
-    @property
-    def exclude(self):
-        return self._exclude
-
-    @exclude.setter
-    def exclude(self, types):
-        if types:
-            self._exclude = [self.policy.lookup_type(t) for t in types]
-        else:
-            self._exclude = []
-
-        self.rebuildsubgraph = True
-
-    def shortest_path(self, source, target):
-        """
-        Generator which yields one shortest path between the source
-        and target types (there may be more).
-
-        Parameters:
-        source   The source type.
-        target   The target type.
-
-        Yield: generator(steps)
-
-        steps Yield: tuple(source, target, rules)
-
-        source   The source type for this step of the information flow.
-        target   The target type for this step of the information flow.
-        rules    The list of rules creating this information flow step.
-        """
-        s = self.policy.lookup_type(source)
-        t = self.policy.lookup_type(target)
-
-        if self.rebuildsubgraph:
-            self._build_subgraph()
-
-        self.log.info("Generating one shortest path from {0} to {1}...".format(s, t))
-
-        try:
-            yield self.__generate_steps(nx.shortest_path(self.subG, s, t))
-        except (NetworkXNoPath, NetworkXError):
-            # NetworkXError: the type is valid but not in graph, e.g.
-            # excluded or disconnected due to min weight
-            # NetworkXNoPath: no paths or the target type is
-            # not in the graph
-            pass
-
-    def all_paths(self, source, target, maxlen=2):
-        """
-        Generator which yields all paths between the source and target
-        up to the specified maximum path length.  This algorithm
-        tends to get very expensive above 3-5 steps, depending
-        on the policy complexity.
-
-        Parameters:
-        source    The source type.
-        target    The target type.
-        maxlen    Maximum length of paths.
-
-        Yield: generator(steps)
-
-        steps Yield: tuple(source, target, rules)
-
-        source    The source type for this step of the information flow.
-        target    The target type for this step of the information flow.
-        rules     The list of rules creating this information flow step.
-        """
-        if maxlen < 1:
-            raise ValueError("Maximum path length must be positive.")
-
-        s = self.policy.lookup_type(source)
-        t = self.policy.lookup_type(target)
-
-        if self.rebuildsubgraph:
-            self._build_subgraph()
-
-        self.log.info("Generating all paths from {0} to {1}, max len {2}...".format(s, t, maxlen))
-
-        try:
-            for path in nx.all_simple_paths(self.subG, s, t, maxlen):
-                yield self.__generate_steps(path)
-        except (NetworkXNoPath, NetworkXError):
-            # NetworkXError: the type is valid but not in graph, e.g.
-            # excluded or disconnected due to min weight
-            # NetworkXNoPath: no paths or the target type is
-            # not in the graph
-            pass
-
-    def all_shortest_paths(self, source, target):
-        """
-        Generator which yields all shortest paths between the source
-        and target types.
-
-        Parameters:
-        source   The source type.
-        target   The target type.
-
-        Yield: generator(steps)
-
-        steps Yield: tuple(source, target, rules)
-
-        source   The source type for this step of the information flow.
-        target   The target type for this step of the information flow.
-        rules    The list of rules creating this information flow step.
-        """
-        s = self.policy.lookup_type(source)
-        t = self.policy.lookup_type(target)
-
-        if self.rebuildsubgraph:
-            self._build_subgraph()
-
-        self.log.info("Generating all shortest paths from {0} to {1}...".format(s, t))
-
-        try:
-            for path in nx.all_shortest_paths(self.subG, s, t):
-                yield self.__generate_steps(path)
-        except (NetworkXNoPath, NetworkXError, KeyError):
-            # NetworkXError: the type is valid but not in graph, e.g.
-            # excluded or disconnected due to min weight
-            # NetworkXNoPath: no paths or the target type is
-            # not in the graph
-            # KeyError: work around NetworkX bug
-            # when the source node is not in the graph
-            pass
-
-    def infoflows(self, type_, out=True):
-        """
-        Generator which yields all information flows in/out of a
-        specified source type.
-
-        Parameters:
-        source  The starting type.
-
-        Keyword Parameters:
-        out     If true, information flows out of the type will
-                be returned.  If false, information flows in to the
-                type will be returned.  Default is true.
-
-        Yield: generator(steps)
-
-        steps   A generator that returns the tuple of
-                source, target, and rules for each
-                information flow.
-        """
-        s = self.policy.lookup_type(type_)
-
-        if self.rebuildsubgraph:
-            self._build_subgraph()
-
-        self.log.info("Generating all infoflows out of {0}...".format(s))
-
-        if out:
-            flows = self.subG.out_edges_iter(s)
-        else:
-            flows = self.subG.in_edges_iter(s)
-
-        try:
-            for source, target in flows:
-                edge = Edge(self.subG, source, target)
-                yield step_output(source, target, edge.rules)
-        except NetworkXError:
-            # NetworkXError: the type is valid but not in graph, e.g.
-            # excluded or disconnected due to min weight
-            pass
-
-    def get_stats(self):  # pragma: no cover
-        """
-        Get the information flow graph statistics.
-
-        Return: tuple(nodes, edges)
-
-        nodes    The number of nodes (types) in the graph.
-        edges    The number of edges (information flows between types)
-                 in the graph.
-        """
-        return (self.G.number_of_nodes(), self.G.number_of_edges())
-
-    #
-    # Internal functions follow
-    #
-
-    def __generate_steps(self, path):
-        """
-        Generator which returns the source, target, and associated rules
-        for each information flow step.
-
-        Parameter:
-        path   A list of graph node names representing an information flow path.
-
-        Yield: tuple(source, target, rules)
-
-        source  The source type for this step of the information flow.
-        target  The target type for this step of the information flow.
-        rules   The list of rules creating this information flow step.
-        """
-        for s in range(1, len(path)):
-            edge = Edge(self.subG, path[s - 1], path[s])
-            yield step_output(edge.source, edge.target, edge.rules)
-
-    #
-    #
-    # Graph building functions
-    #
-    #
-    # 1. _build_graph determines the flow in each direction for each TE
-    #    rule and then expands the rule.  All information flows are
-    #    included in this main graph: memory is traded off for efficiency
-    #    as the main graph should only need to be rebuilt if permission
-    #    weights change.
-    # 2. _build_subgraph derives a subgraph which removes all excluded
-    #    types (nodes) and edges (information flows) which are below the
-    #    minimum weight. This subgraph is rebuilt only if the main graph
-    #    is rebuilt or the minimum weight or excluded types change.
-
-    def _build_graph(self):
-        self.G.clear()
-
-        self.perm_map.map_policy(self.policy)
-
-        self.log.info("Building graph from {0}...".format(self.policy))
-
-        for rule in self.policy.terules():
-            if rule.ruletype != "allow":
-                continue
-
-            (rweight, wweight) = self.perm_map.rule_weight(rule)
-
-            for s, t in itertools.product(rule.source.expand(), rule.target.expand()):
-                # only add flows if they actually flow
-                # in or out of the source type type
-                if s != t:
-                    if wweight:
-                        edge = Edge(self.G, s, t, create=True)
-                        edge.rules.append(rule)
-                        edge.weight = wweight
-
-                    if rweight:
-                        edge = Edge(self.G, t, s, create=True)
-                        edge.rules.append(rule)
-                        edge.weight = rweight
-
-        self.rebuildgraph = False
-        self.rebuildsubgraph = True
-        self.log.info("Completed building graph.")
-
-    def _build_subgraph(self):
-        if self.rebuildgraph:
-            self._build_graph()
-
-        self.log.info("Building subgraph...")
-        self.log.debug("Excluding {0!r}".format(self.exclude))
-        self.log.debug("Min weight {0}".format(self.min_weight))
-
-        # delete excluded types from subgraph
-        nodes = [n for n in self.G.nodes() if n not in self.exclude]
-        self.subG = self.G.subgraph(nodes)
-
-        # delete edges below minimum weight.
-        # no need if weight is 1, since that
-        # does not exclude any edges.
-        if self.min_weight > 1:
-            delete_list = []
-            for s, t in self.subG.edges_iter():
-                edge = Edge(self.subG, s, t)
-                if edge.weight < self.min_weight:
-                    delete_list.append(edge)
-
-            self.subG.remove_edges_from(delete_list)
-
-        self.rebuildsubgraph = False
-        self.log.info("Completed building subgraph.")
-
-
-class Edge(object):
-
-    """
-    A graph edge.  Also used for returning information flow steps.
-
-    Parameters:
-    source      The source type of the edge.
-    target      The target type of the edge.
-
-    Keyword Parameters:
-    create      (T/F) create the edge if it does not exist.
-                The default is False.
-    """
-
-    rules = EdgeAttrList('rules')
-
-    # use capacity to store the info flow weight so
-    # we can use network flow algorithms naturally.
-    # The weight for each edge is 1 since each info
-    # flow step is no more costly than another
-    # (see below add_edge() call)
-    weight = EdgeAttrIntMax('capacity')
-
-    def __init__(self, graph, source, target, create=False):
-        self.G = graph
-        self.source = source
-        self.target = target
-
-        # a bit of a hack to make edges work
-        # in NetworkX functions that work on
-        # 2-tuples of (source, target)
-        # (see __getitem__ below)
-        self.st_tuple = (source, target)
-
-        if not self.G.has_edge(source, target):
-            if create:
-                self.G.add_edge(source, target, weight=1)
-                self.rules = None
-                self.weight = None
-            else:
-                raise ValueError("Edge does not exist in graph")
-
-    def __getitem__(self, key):
-        return self.st_tuple[key]
diff --git a/lib/python2.7/site-packages/setoolsgui/setools/initsidquery.py b/lib/python2.7/site-packages/setoolsgui/setools/initsidquery.py
deleted file mode 100644
index 1eb3790..0000000
--- a/lib/python2.7/site-packages/setoolsgui/setools/initsidquery.py
+++ /dev/null
@@ -1,74 +0,0 @@
-# Copyright 2014-2015, Tresys Technology, LLC
-#
-# This file is part of SETools.
-#
-# SETools is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Lesser General Public License as
-# published by the Free Software Foundation, either version 2.1 of
-# the License, or (at your option) any later version.
-#
-# SETools is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with SETools.  If not, see
-# <http://www.gnu.org/licenses/>.
-#
-import logging
-
-from . import compquery
-from . import contextquery
-
-
-class InitialSIDQuery(compquery.ComponentQuery, contextquery.ContextQuery):
-
-    """
-    Initial SID (Initial context) query.
-
-    Parameter:
-    policy            The policy to query.
-
-    Keyword Parameters/Class attributes:
-    name            The Initial SID name to match.
-    name_regex      If true, regular expression matching
-                    will be used on the Initial SID name.
-    user            The criteria to match the context's user.
-    user_regex      If true, regular expression matching
-                    will be used on the user.
-    role            The criteria to match the context's role.
-    role_regex      If true, regular expression matching
-                    will be used on the role.
-    type_           The criteria to match the context's type.
-    type_regex      If true, regular expression matching
-                    will be used on the type.
-    range_          The criteria to match the context's range.
-    range_subset    If true, the criteria will match if it is a subset
-                    of the context's range.
-    range_overlap   If true, the criteria will match if it overlaps
-                    any of the context's range.
-    range_superset  If true, the criteria will match if it is a superset
-                    of the context's range.
-    range_proper    If true, use proper superset/subset operations.
-                    No effect if not using set operations.
-    """
-
-    def results(self):
-        """Generator which yields all matching initial SIDs."""
-        self.log.info("Generating results from {0.policy}".format(self))
-        self.log.debug("Name: {0.name!r}, regex: {0.name_regex}".format(self))
-        self.log.debug("User: {0.user!r}, regex: {0.user_regex}".format(self))
-        self.log.debug("Role: {0.role!r}, regex: {0.role_regex}".format(self))
-        self.log.debug("Type: {0.type_!r}, regex: {0.type_regex}".format(self))
-        self.log.debug("Range: {0.range_!r}, subset: {0.range_subset}, overlap: {0.range_overlap}, "
-                       "superset: {0.range_superset}, proper: {0.range_proper}".format(self))
-
-        for i in self.policy.initialsids():
-            if not self._match_name(i):
-                continue
-
-            if not self._match_context(i.context):
-                continue
-
-            yield i
diff --git a/lib/python2.7/site-packages/setoolsgui/setools/mixins.py b/lib/python2.7/site-packages/setoolsgui/setools/mixins.py
deleted file mode 100644
index a31d420..0000000
--- a/lib/python2.7/site-packages/setoolsgui/setools/mixins.py
+++ /dev/null
@@ -1,91 +0,0 @@
-# Copyright 2015, Tresys Technology, LLC
-#
-# This file is part of SETools.
-#
-# SETools is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Lesser General Public License as
-# published by the Free Software Foundation, either version 2.1 of
-# the License, or (at your option) any later version.
-#
-# SETools is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with SETools.  If not, see
-# <http://www.gnu.org/licenses/>.
-#
-# pylint: disable=attribute-defined-outside-init,no-member
-import re
-
-from .descriptors import CriteriaDescriptor, CriteriaSetDescriptor
-
-
-class MatchAlias(object):
-
-    """Mixin for matching an object's aliases."""
-
-    alias = CriteriaDescriptor("alias_regex")
-    alias_regex = False
-
-    def _match_alias(self, obj):
-        """
-        Match the alias criteria
-
-        Parameter:
-        obj     An object with an alias generator method named "aliases"
-        """
-
-        if not self.alias:
-            # if there is no criteria, everything matches.
-            return True
-
-        return self._match_in_set(obj.aliases(), self.alias, self.alias_regex)
-
-
-class MatchObjClass(object):
-
-    """Mixin for matching an object's class."""
-
-    tclass = CriteriaSetDescriptor("tclass_regex", "lookup_class")
-    tclass_regex = False
-
-    def _match_object_class(self, obj):
-        """
-        Match the object class criteria
-
-        Parameter:
-        obj     An object with an object class attribute named "tclass"
-        """
-
-        if not self.tclass:
-            # if there is no criteria, everything matches.
-            return True
-        elif self.tclass_regex:
-            return bool(self.tclass.search(str(obj.tclass)))
-        else:
-            return obj.tclass in self.tclass
-
-
-class MatchPermission(object):
-
-    """Mixin for matching an object's permissions."""
-
-    perms = CriteriaSetDescriptor("perms_regex")
-    perms_equal = False
-    perms_regex = False
-
-    def _match_perms(self, obj):
-        """
-        Match the permission criteria
-
-        Parameter:
-        obj     An object with a permission set class attribute named "perms"
-        """
-
-        if not self.perms:
-            # if there is no criteria, everything matches.
-            return True
-
-        return self._match_regex_or_set(obj.perms, self.perms, self.perms_equal, self.perms_regex)
diff --git a/lib/python2.7/site-packages/setoolsgui/setools/mlsrulequery.py b/lib/python2.7/site-packages/setoolsgui/setools/mlsrulequery.py
deleted file mode 100644
index 3a9e1bf..0000000
--- a/lib/python2.7/site-packages/setoolsgui/setools/mlsrulequery.py
+++ /dev/null
@@ -1,115 +0,0 @@
-# Copyright 2014-2015, Tresys Technology, LLC
-#
-# This file is part of SETools.
-#
-# SETools is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Lesser General Public License as
-# published by the Free Software Foundation, either version 2.1 of
-# the License, or (at your option) any later version.
-#
-# SETools is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with SETools.  If not, see
-# <http://www.gnu.org/licenses/>.
-#
-import logging
-
-from . import mixins, query
-from .descriptors import CriteriaDescriptor, CriteriaSetDescriptor, RuletypeDescriptor
-
-
-class MLSRuleQuery(mixins.MatchObjClass, query.PolicyQuery):
-
-    """
-    Query MLS rules.
-
-    Parameter:
-    policy            The policy to query.
-
-    Keyword Parameters/Class attributes:
-    ruletype         The list of rule type(s) to match.
-    source           The name of the source type/attribute to match.
-    source_regex     If true, regular expression matching will
-                     be used on the source type/attribute.
-    target           The name of the target type/attribute to match.
-    target_regex     If true, regular expression matching will
-                     be used on the target type/attribute.
-    tclass           The object class(es) to match.
-    tclass_regex     If true, use a regular expression for
-                     matching the rule's object class.
-    """
-
-    ruletype = RuletypeDescriptor("validate_mls_ruletype")
-    source = CriteriaDescriptor("source_regex", "lookup_type_or_attr")
-    source_regex = False
-    target = CriteriaDescriptor("target_regex", "lookup_type_or_attr")
-    target_regex = False
-    tclass = CriteriaSetDescriptor("tclass_regex", "lookup_class")
-    tclass_regex = False
-    default = CriteriaDescriptor(lookup_function="lookup_range")
-    default_overlap = False
-    default_subset = False
-    default_superset = False
-    default_proper = False
-
-    def results(self):
-        """Generator which yields all matching MLS rules."""
-        self.log.info("Generating results from {0.policy}".format(self))
-        self.log.debug("Ruletypes: {0.ruletype}".format(self))
-        self.log.debug("Source: {0.source!r}, regex: {0.source_regex}".format(self))
-        self.log.debug("Target: {0.target!r}, regex: {0.target_regex}".format(self))
-        self.log.debug("Class: {0.tclass!r}, regex: {0.tclass_regex}".format(self))
-        self.log.debug("Default: {0.default!r}, overlap: {0.default_overlap}, "
-                       "subset: {0.default_subset}, superset: {0.default_superset}, "
-                       "proper: {0.default_proper}".format(self))
-
-        for rule in self.policy.mlsrules():
-            #
-            # Matching on rule type
-            #
-            if self.ruletype:
-                if rule.ruletype not in self.ruletype:
-                    continue
-
-            #
-            # Matching on source type
-            #
-            if self.source and not self._match_regex(
-                    rule.source,
-                    self.source,
-                    self.source_regex):
-                continue
-
-            #
-            # Matching on target type
-            #
-            if self.target and not self._match_regex(
-                    rule.target,
-                    self.target,
-                    self.target_regex):
-                continue
-
-            #
-            # Matching on object class
-            #
-            if not self._match_object_class(rule):
-                continue
-
-            #
-            # Matching on range
-            #
-            if self.default and not self._match_range(
-                    rule.default,
-                    self.default,
-                    self.default_subset,
-                    self.default_overlap,
-                    self.default_superset,
-                    self.default_proper):
-                continue
-
-            # if we get here, we have matched all available criteria
-            yield rule
diff --git a/lib/python2.7/site-packages/setoolsgui/setools/netifconquery.py b/lib/python2.7/site-packages/setoolsgui/setools/netifconquery.py
deleted file mode 100644
index 30db977..0000000
--- a/lib/python2.7/site-packages/setoolsgui/setools/netifconquery.py
+++ /dev/null
@@ -1,77 +0,0 @@
-# Copyright 2014-2015, Tresys Technology, LLC
-#
-# This file is part of SETools.
-#
-# SETools is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Lesser General Public License as
-# published by the Free Software Foundation, either version 2.1 of
-# the License, or (at your option) any later version.
-#
-# SETools is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with SETools.  If not, see
-# <http://www.gnu.org/licenses/>.
-#
-import logging
-
-from . import compquery
-from . import contextquery
-
-
-class NetifconQuery(compquery.ComponentQuery, contextquery.ContextQuery):
-
-    """
-    Network interface context query.
-
-    Parameter:
-    policy          The policy to query.
-
-    Keyword Parameters/Class attributes:
-    name            The name of the network interface to match.
-    name_regex      If true, regular expression matching will
-                    be used for matching the name.
-    user            The criteria to match the context's user.
-    user_regex      If true, regular expression matching
-                    will be used on the user.
-    role            The criteria to match the context's role.
-    role_regex      If true, regular expression matching
-                    will be used on the role.
-    type_           The criteria to match the context's type.
-    type_regex      If true, regular expression matching
-                    will be used on the type.
-    range_          The criteria to match the context's range.
-    range_subset    If true, the criteria will match if it is a subset
-                    of the context's range.
-    range_overlap   If true, the criteria will match if it overlaps
-                    any of the context's range.
-    range_superset  If true, the criteria will match if it is a superset
-                    of the context's range.
-    range_proper    If true, use proper superset/subset operations.
-                    No effect if not using set operations.
-    """
-
-    def results(self):
-        """Generator which yields all matching netifcons."""
-        self.log.info("Generating results from {0.policy}".format(self))
-        self.log.debug("Name: {0.name!r}, regex: {0.name_regex}".format(self))
-        self.log.debug("User: {0.user!r}, regex: {0.user_regex}".format(self))
-        self.log.debug("Role: {0.role!r}, regex: {0.role_regex}".format(self))
-        self.log.debug("Type: {0.type_!r}, regex: {0.type_regex}".format(self))
-        self.log.debug("Range: {0.range_!r}, subset: {0.range_subset}, overlap: {0.range_overlap}, "
-                       "superset: {0.range_superset}, proper: {0.range_proper}".format(self))
-
-        for netif in self.policy.netifcons():
-            if self.name and not self._match_regex(
-                    netif.netif,
-                    self.name,
-                    self.name_regex):
-                continue
-
-            if not self._match_context(netif.context):
-                continue
-
-            yield netif
diff --git a/lib/python2.7/site-packages/setoolsgui/setools/nodeconquery.py b/lib/python2.7/site-packages/setoolsgui/setools/nodeconquery.py
deleted file mode 100644
index eb21d81..0000000
--- a/lib/python2.7/site-packages/setoolsgui/setools/nodeconquery.py
+++ /dev/null
@@ -1,148 +0,0 @@
-# Copyright 2014-2015, Tresys Technology, LLC
-#
-# This file is part of SETools.
-#
-# SETools is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Lesser General Public License as
-# published by the Free Software Foundation, either version 2.1 of
-# the License, or (at your option) any later version.
-#
-# SETools is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with SETools.  If not, see
-# <http://www.gnu.org/licenses/>.
-#
-try:
-    import ipaddress
-except ImportError:  # pragma: no cover
-    pass
-
-import logging
-from socket import AF_INET, AF_INET6
-
-from . import contextquery
-
-
-class NodeconQuery(contextquery.ContextQuery):
-
-    """
-    Query nodecon statements.
-
-    Parameter:
-    policy          The policy to query.
-
-    Keyword Parameters/Class attributes:
-    network         The IPv4/IPv6 address or IPv4/IPv6 network address
-                    with netmask, e.g. 192.168.1.0/255.255.255.0 or
-                    "192.168.1.0/24".
-    network_overlap If true, the net will match if it overlaps with
-                    the nodecon's network instead of equality.
-    ip_version      The IP version of the nodecon to match. (socket.AF_INET
-                    for IPv4 or socket.AF_INET6 for IPv6)
-    user            The criteria to match the context's user.
-    user_regex      If true, regular expression matching
-                    will be used on the user.
-    role            The criteria to match the context's role.
-    role_regex      If true, regular expression matching
-                    will be used on the role.
-    type_           The criteria to match the context's type.
-    type_regex      If true, regular expression matching
-                    will be used on the type.
-    range_          The criteria to match the context's range.
-    range_subset    If true, the criteria will match if it is a subset
-                    of the context's range.
-    range_overlap   If true, the criteria will match if it overlaps
-                    any of the context's range.
-    range_superset  If true, the criteria will match if it is a superset
-                    of the context's range.
-    range_proper    If true, use proper superset/subset operations.
-                    No effect if not using set operations.
-    """
-
-    _network = None
-    network_overlap = False
-    _ip_version = None
-
-    @property
-    def ip_version(self):
-        return self._ip_version
-
-    @ip_version.setter
-    def ip_version(self, value):
-        if value:
-            if not (value == AF_INET or value == AF_INET6):
-                raise ValueError(
-                    "The address family must be {0} for IPv4 or {1} for IPv6.".
-                    format(AF_INET, AF_INET6))
-
-            self._ip_version = value
-        else:
-            self._ip_version = None
-
-    @property
-    def network(self):
-        return self._network
-
-    @network.setter
-    def network(self, value):
-        if value:
-            try:
-                self._network = ipaddress.ip_network(value)
-            except NameError:  # pragma: no cover
-                raise RuntimeError("Nodecon IP address/network functions require Python 3.3+.")
-        else:
-            self._network = None
-
-    def results(self):
-        """Generator which yields all matching nodecons."""
-        self.log.info("Generating results from {0.policy}".format(self))
-        self.log.debug("Network: {0.network!r}, overlap: {0.network_overlap}".format(self))
-        self.log.debug("IP Version: {0.ip_version}".format(self))
-        self.log.debug("User: {0.user!r}, regex: {0.user_regex}".format(self))
-        self.log.debug("Role: {0.role!r}, regex: {0.role_regex}".format(self))
-        self.log.debug("Type: {0.type_!r}, regex: {0.type_regex}".format(self))
-        self.log.debug("Range: {0.range_!r}, subset: {0.range_subset}, overlap: {0.range_overlap}, "
-                       "superset: {0.range_superset}, proper: {0.range_proper}".format(self))
-
-        for nodecon in self.policy.nodecons():
-
-            if self.network:
-                try:
-                    netmask = ipaddress.ip_address(nodecon.netmask)
-                except NameError:  # pragma: no cover
-                    # Should never actually hit this since the self.network
-                    # setter raises the same exception.
-                    raise RuntimeError("Nodecon IP address/network functions require Python 3.3+.")
-
-                # Python 3.3's IPv6Network constructor does not support
-                # expanded netmasks, only CIDR numbers. Convert netmask
-                # into CIDR.
-                # This is Brian Kernighan's method for counting set bits.
-                # If the netmask happens to be invalid, this will
-                # not detect it.
-                CIDR = 0
-                int_netmask = int(netmask)
-                while int_netmask:
-                    int_netmask &= int_netmask - 1
-                    CIDR += 1
-
-                net = ipaddress.ip_network('{0}/{1}'.format(nodecon.address, CIDR))
-
-                if self.network_overlap:
-                    if not self.network.overlaps(net):
-                        continue
-                else:
-                    if not net == self.network:
-                        continue
-
-            if self.ip_version and self.ip_version != nodecon.ip_version:
-                continue
-
-            if not self._match_context(nodecon.context):
-                continue
-
-            yield nodecon
diff --git a/lib/python2.7/site-packages/setoolsgui/setools/objclassquery.py b/lib/python2.7/site-packages/setoolsgui/setools/objclassquery.py
deleted file mode 100644
index 8f40df8..0000000
--- a/lib/python2.7/site-packages/setoolsgui/setools/objclassquery.py
+++ /dev/null
@@ -1,101 +0,0 @@
-# Copyright 2014-2015, Tresys Technology, LLC
-#
-# This file is part of SETools.
-#
-# SETools is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Lesser General Public License as
-# published by the Free Software Foundation, either version 2.1 of
-# the License, or (at your option) any later version.
-#
-# SETools is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with SETools.  If not, see
-# <http://www.gnu.org/licenses/>.
-#
-import logging
-import re
-
-from . import compquery
-from .descriptors import CriteriaDescriptor, CriteriaSetDescriptor
-from .policyrep.exception import NoCommon
-
-
-class ObjClassQuery(compquery.ComponentQuery):
-
-    """
-    Query object classes.
-
-    Parameter:
-    policy          The policy to query.
-
-    Keyword Parameters/Class attributes:
-    name            The name of the object set to match.
-    name_regex      If true, regular expression matching will
-                    be used for matching the name.
-    common          The name of the inherited common to match.
-    common_regex    If true, regular expression matching will
-                    be used for matching the common name.
-    perms           The permissions to match.
-    perms_equal     If true, only commons with permission sets
-                    that are equal to the criteria will
-                    match.  Otherwise, any intersection
-                    will match.
-    perms_regex     If true, regular expression matching
-                    will be used on the permission names instead
-                    of set logic.
-                    comparison will not be used.
-    perms_indirect  If false, permissions inherited from a common
-                    permission set not will be evaluated.  Default
-                    is true.
-    """
-
-    common = CriteriaDescriptor("common_regex", "lookup_common")
-    common_regex = False
-    perms = CriteriaSetDescriptor("perms_regex")
-    perms_equal = False
-    perms_indirect = True
-    perms_regex = False
-
-    def results(self):
-        """Generator which yields all matching object classes."""
-        self.log.info("Generating results from {0.policy}".format(self))
-        self.log.debug("Name: {0.name!r}, regex: {0.name_regex}".format(self))
-        self.log.debug("Common: {0.common!r}, regex: {0.common_regex}".format(self))
-        self.log.debug("Perms: {0.perms}, regex: {0.perms_regex}, "
-                       "eq: {0.perms_equal}, indirect: {0.perms_indirect}".format(self))
-
-        for class_ in self.policy.classes():
-            if not self._match_name(class_):
-                continue
-
-            if self.common:
-                try:
-                    if not self._match_regex(
-                            class_.common,
-                            self.common,
-                            self.common_regex):
-                        continue
-                except NoCommon:
-                    continue
-
-            if self.perms:
-                perms = class_.perms
-
-                if self.perms_indirect:
-                    try:
-                        perms |= class_.common.perms
-                    except NoCommon:
-                        pass
-
-                if not self._match_regex_or_set(
-                        perms,
-                        self.perms,
-                        self.perms_equal,
-                        self.perms_regex):
-                    continue
-
-            yield class_
diff --git a/lib/python2.7/site-packages/setoolsgui/setools/permmap.py b/lib/python2.7/site-packages/setoolsgui/setools/permmap.py
deleted file mode 100644
index 54cd9f9..0000000
--- a/lib/python2.7/site-packages/setoolsgui/setools/permmap.py
+++ /dev/null
@@ -1,363 +0,0 @@
-# Copyright 2014-2015, Tresys Technology, LLC
-#
-# This file is part of SETools.
-#
-# SETools is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Lesser General Public License as
-# published by the Free Software Foundation, either version 2.1 of
-# the License, or (at your option) any later version.
-#
-# SETools is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with SETools.  If not, see
-# <http://www.gnu.org/licenses/>.
-#
-import sys
-import logging
-from errno import ENOENT
-
-from . import exception
-from . import policyrep
-
-
-class PermissionMap(object):
-
-    """Permission Map for information flow analysis."""
-
-    valid_infoflow_directions = ["r", "w", "b", "n", "u"]
-    min_weight = 1
-    max_weight = 10
-
-    def __init__(self, permmapfile=None):
-        """
-        Parameter:
-        permmapfile     The path to the permission map to load.
-        """
-        self.log = logging.getLogger(self.__class__.__name__)
-
-        if permmapfile:
-            self.load(permmapfile)
-        else:
-            for path in ["data/", sys.prefix + "/share/setools/"]:
-                try:
-                    self.load(path + "perm_map")
-                    break
-                except (IOError, OSError) as err:
-                    if err.errno != ENOENT:
-                        raise
-            else:
-                raise RuntimeError("Unable to load default permission map.")
-
-    def load(self, permmapfile):
-        """
-        Parameter:
-        permmapfile     The path to the permission map to load.
-        """
-        self.log.info("Opening permission map \"{0}\"".format(permmapfile))
-
-        # state machine
-        # 1 = read number of classes
-        # 2 = read class name and number of perms
-        # 3 = read perms
-        with open(permmapfile, "r") as mapfile:
-            class_count = 0
-            num_classes = 0
-            state = 1
-
-            self.permmap = dict()
-
-            for line_num, line in enumerate(mapfile, start=1):
-                entry = line.split()
-
-                if len(entry) == 0 or entry[0][0] == '#':
-                    continue
-
-                if state == 1:
-                    try:
-                        num_classes = int(entry[0])
-                    except ValueError:
-                        raise exception.PermissionMapParseError(
-                            "{0}:{1}:Invalid number of classes: {2}".
-                            format(permmapfile, line_num, entry[0]))
-
-                    if num_classes < 1:
-                        raise exception.PermissionMapParseError(
-                            "{0}:{1}:Number of classes must be positive: {2}".
-                            format(permmapfile, line_num, entry[0]))
-
-                    state = 2
-
-                elif state == 2:
-                    if len(entry) != 3 or entry[0] != "class":
-                        raise exception.PermissionMapParseError(
-                            "{0}:{1}:Invalid class declaration: {2}".
-                            format(permmapfile, line_num, entry))
-
-                    class_name = str(entry[1])
-
-                    try:
-                        num_perms = int(entry[2])
-                    except ValueError:
-                        raise exception.PermissionMapParseError(
-                            "{0}:{1}:Invalid number of permissions: {2}".
-                            format(permmapfile, line_num, entry[2]))
-
-                    if num_perms < 1:
-                        raise exception.PermissionMapParseError(
-                            "{0}:{1}:Number of permissions must be positive: {2}".
-                            format(permmapfile, line_num, entry[2]))
-
-                    class_count += 1
-                    if class_count > num_classes:
-                        raise exception.PermissionMapParseError(
-                            "{0}:{1}:Extra class found: {2}".
-                            format(permmapfile, line_num, class_name))
-
-                    self.permmap[class_name] = dict()
-                    perm_count = 0
-                    state = 3
-
-                elif state == 3:
-                    perm_name = str(entry[0])
-
-                    flow_direction = str(entry[1])
-                    if flow_direction not in self.valid_infoflow_directions:
-                        raise exception.PermissionMapParseError(
-                            "{0}:{1}:Invalid information flow direction: {2}".
-                            format(permmapfile, line_num, entry[1]))
-
-                    try:
-                        weight = int(entry[2])
-                    except ValueError:
-                        raise exception.PermissionMapParseError(
-                            "{0}:{1}:Invalid permission weight: {2}".
-                            format(permmapfile, line_num, entry[2]))
-
-                    if not self.min_weight <= weight <= self.max_weight:
-                        raise exception.PermissionMapParseError(
-                            "{0}:{1}:Permission weight must be {3}-{4}: {2}".
-                            format(permmapfile, line_num, entry[2],
-                                   self.min_weight, self.max_weight))
-
-                    self.permmap[class_name][perm_name] = {'direction': flow_direction,
-                                                           'weight': weight,
-                                                           'enabled': True}
-
-                    perm_count += 1
-                    if perm_count >= num_perms:
-                        state = 2
-
-    def exclude_class(self, class_):
-        """
-        Exclude all permissions in an object class for calculating rule weights.
-
-        Parameter:
-        class_              The object class to exclude.
-
-        Exceptions:
-        UnmappedClass       The specified object class is not mapped.
-        """
-
-        classname = str(class_)
-
-        try:
-            for perm in self.permmap[classname]:
-                self.permmap[classname][perm]['enabled'] = False
-        except KeyError:
-            raise exception.UnmappedClass("{0} is not mapped.".format(classname))
-
-    def exclude_permission(self, class_, permission):
-        """
-        Exclude a permission for calculating rule weights.
-
-        Parameter:
-        class_              The object class of the permission.
-        permission          The permission name to exclude.
-
-        Exceptions:
-        UnmappedClass       The specified object class is not mapped.
-        UnmappedPermission  The specified permission is not mapped for the object class.
-        """
-        classname = str(class_)
-
-        if classname not in self.permmap:
-            raise exception.UnmappedClass("{0} is not mapped.".format(classname))
-
-        try:
-            self.permmap[classname][permission]['enabled'] = False
-        except KeyError:
-            raise exception.UnmappedPermission("{0}:{1} is not mapped.".
-                                               format(classname, permission))
-
-    def include_class(self, class_):
-        """
-        Include all permissions in an object class for calculating rule weights.
-
-        Parameter:
-        class_              The object class to include.
-
-        Exceptions:
-        UnmappedClass       The specified object class is not mapped.
-        """
-
-        classname = str(class_)
-
-        try:
-            for perm in self.permmap[classname]:
-                self.permmap[classname][perm]['enabled'] = True
-        except KeyError:
-            raise exception.UnmappedClass("{0} is not mapped.".format(classname))
-
-    def include_permission(self, class_, permission):
-        """
-        Include a permission for calculating rule weights.
-
-        Parameter:
-        class_              The object class of the permission.
-        permission          The permission name to include.
-
-        Exceptions:
-        UnmappedClass       The specified object class is not mapped.
-        UnmappedPermission  The specified permission is not mapped for the object class.
-        """
-
-        classname = str(class_)
-
-        if classname not in self.permmap:
-            raise exception.UnmappedClass("{0} is not mapped.".format(classname))
-
-        try:
-            self.permmap[classname][permission]['enabled'] = True
-        except KeyError:
-            raise exception.UnmappedPermission("{0}:{1} is not mapped.".
-                                               format(classname, permission))
-
-    def map_policy(self, policy):
-        """Create mappings for all classes and permissions in the specified policy."""
-        for class_ in policy.classes():
-            class_name = str(class_)
-
-            if class_name not in self.permmap:
-                self.log.info("Adding unmapped class {0} from {1}".format(class_name, policy))
-                self.permmap[class_name] = dict()
-
-            perms = class_.perms
-
-            try:
-                perms |= class_.common.perms
-            except policyrep.exception.NoCommon:
-                pass
-
-            for perm_name in perms:
-                if perm_name not in self.permmap[class_name]:
-                    self.log.info("Adding unmapped permission {0} in {1} from {2}".
-                                  format(perm_name, class_name, policy))
-                    self.permmap[class_name][perm_name] = {'direction': 'u',
-                                                           'weight': 1,
-                                                           'enabled': True}
-
-    def rule_weight(self, rule):
-        """
-        Get the type enforcement rule's information flow read and write weights.
-
-        Parameter:
-        rule            A type enforcement rule.
-
-        Return: Tuple(read_weight, write_weight)
-        read_weight     The type enforcement rule's read weight.
-        write_weight    The type enforcement rule's write weight.
-        """
-
-        write_weight = 0
-        read_weight = 0
-        class_name = str(rule.tclass)
-
-        if rule.ruletype != 'allow':
-            raise exception.RuleTypeError("{0} rules cannot be used for calculating a weight".
-                                          format(rule.ruletype))
-
-        if class_name not in self.permmap:
-            raise exception.UnmappedClass("{0} is not mapped.".format(class_name))
-
-        # iterate over the permissions and determine the
-        # weight of the rule in each direction. The result
-        # is the largest-weight permission in each direction
-        for perm_name in rule.perms:
-            try:
-                mapping = self.permmap[class_name][perm_name]
-            except KeyError:
-                raise exception.UnmappedPermission("{0}:{1} is not mapped.".
-                                                   format(class_name, perm_name))
-
-            if not mapping['enabled']:
-                continue
-
-            if mapping['direction'] == "r":
-                read_weight = max(read_weight, mapping['weight'])
-            elif mapping['direction'] == "w":
-                write_weight = max(write_weight, mapping['weight'])
-            elif mapping['direction'] == "b":
-                read_weight = max(read_weight, mapping['weight'])
-                write_weight = max(write_weight, mapping['weight'])
-
-        return (read_weight, write_weight)
-
-    def set_direction(self, class_, permission, direction):
-        """
-        Set the information flow direction of a permission.
-
-        Parameter:
-        class_              The object class of the permission.
-        permission          The permission name.
-        direction           The information flow direction the permission (r/w/b/n).
-
-        Exceptions:
-        UnmappedClass       The specified object class is not mapped.
-        UnmappedPermission  The specified permission is not mapped for the object class.
-        """
-
-        if direction not in self.valid_infoflow_directions:
-            raise ValueError("Invalid information flow direction: {0}".format(direction))
-
-        classname = str(class_)
-
-        if classname not in self.permmap:
-            raise exception.UnmappedClass("{0} is not mapped.".format(classname))
-
-        try:
-            self.permmap[classname][permission]['direction'] = direction
-        except KeyError:
-            raise exception.UnmappedPermission("{0}:{1} is not mapped.".
-                                               format(classname, permission))
-
-    def set_weight(self, class_, permission, weight):
-        """
-        Set the weight of a permission.
-
-        Parameter:
-        class_              The object class of the permission.
-        permission          The permission name.
-        weight              The weight of the permission (1-10).
-
-        Exceptions:
-        UnmappedClass       The specified object class is not mapped.
-        UnmappedPermission  The specified permission is not mapped for the object class.
-        """
-
-        if not self.min_weight <= weight <= self.max_weight:
-            raise ValueError("Permission weights must be 1-10: {0}".format(weight))
-
-        classname = str(class_)
-
-        if classname not in self.permmap:
-            raise exception.UnmappedClass("{0} is not mapped.".format(classname))
-
-        try:
-            self.permmap[classname][permission]['weight'] = weight
-        except KeyError:
-            raise exception.UnmappedPermission("{0}:{1} is not mapped.".
-                                               format(classname, permission))
diff --git a/lib/python2.7/site-packages/setoolsgui/setools/polcapquery.py b/lib/python2.7/site-packages/setoolsgui/setools/polcapquery.py
deleted file mode 100644
index e024b05..0000000
--- a/lib/python2.7/site-packages/setoolsgui/setools/polcapquery.py
+++ /dev/null
@@ -1,47 +0,0 @@
-# Copyright 2014-2015, Tresys Technology, LLC
-#
-# This file is part of SETools.
-#
-# SETools is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Lesser General Public License as
-# published by the Free Software Foundation, either version 2.1 of
-# the License, or (at your option) any later version.
-#
-# SETools is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with SETools.  If not, see
-# <http://www.gnu.org/licenses/>.
-#
-import logging
-
-from . import compquery
-
-
-class PolCapQuery(compquery.ComponentQuery):
-
-    """
-    Query SELinux policy capabilities
-
-    Parameter:
-    policy      The policy to query.
-
-    Keyword Parameters/Class attributes:
-    name        The name of the policy capability to match.
-    name_regex  If true, regular expression matching will
-                be used for matching the name.
-    """
-
-    def results(self):
-        """Generator which yields all matching policy capabilities."""
-        self.log.info("Generating results from {0.policy}".format(self))
-        self.log.debug("Name: {0.name!r}, regex: {0.name_regex}".format(self))
-
-        for cap in self.policy.polcaps():
-            if not self._match_name(cap):
-                continue
-
-            yield cap
diff --git a/lib/python2.7/site-packages/setoolsgui/setools/policyrep/__init__.py b/lib/python2.7/site-packages/setoolsgui/setools/policyrep/__init__.py
deleted file mode 100644
index b03e524..0000000
--- a/lib/python2.7/site-packages/setoolsgui/setools/policyrep/__init__.py
+++ /dev/null
@@ -1,568 +0,0 @@
-# Copyright 2014-2015, Tresys Technology, LLC
-#
-# This file is part of SETools.
-#
-# SETools is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Lesser General Public License as
-# published by the Free Software Foundation, either version 2.1 of
-# the License, or (at your option) any later version.
-#
-# SETools is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with SETools.  If not, see
-# <http://www.gnu.org/licenses/>.
-#
-# pylint: disable=too-many-public-methods
-#
-# Create a Python representation of the policy.
-# The idea is that this is module provides convenient
-# abstractions and methods for accessing the policy
-# structures.
-import logging
-from itertools import chain
-from errno import ENOENT
-
-try:
-    import selinux
-except ImportError:
-    pass
-
-from . import qpol
-
-# The libqpol SWIG class is not quite natural for
-# Python the policy is repeatedly referenced in the
-# function calls, which makes sense for C code
-# but not for python code, so each object keeps
-# a reference to the policy for internal use.
-# This also makes sense since an object would only
-# be valid for the policy it comes from.
-
-# Exceptions
-from . import exception
-
-# Components
-from . import boolcond
-from . import default
-from . import mls
-from . import objclass
-from . import polcap
-from . import role
-from . import typeattr
-from . import user
-
-# Rules
-from . import mlsrule
-from . import rbacrule
-from . import terule
-
-# Constraints
-from . import constraint
-
-# In-policy Labeling
-from . import fscontext
-from . import initsid
-from . import netcontext
-
-
-class SELinuxPolicy(object):
-
-    """The complete SELinux policy."""
-
-    def __init__(self, policyfile=None):
-        """
-        Parameter:
-        policyfile  Path to a policy to open.
-        """
-
-        self.log = logging.getLogger(self.__class__.__name__)
-        self.policy = None
-        self.filename = None
-
-        if policyfile:
-            self._load_policy(policyfile)
-        else:
-            try:
-                self._load_running_policy()
-            except NameError:
-                raise RuntimeError("Loading the running policy requires libselinux Python bindings")
-
-    def __repr__(self):
-        return "<SELinuxPolicy(\"{0}\")>".format(self.filename)
-
-    def __str__(self):
-        return self.filename
-
-    def __deepcopy__(self, memo):
-        # shallow copy as all of the members are immutable
-        newobj = SELinuxPolicy.__new__(SELinuxPolicy)
-        newobj.policy = self.policy
-        newobj.filename = self.filename
-        memo[id(self)] = newobj
-        return newobj
-
-    #
-    # Policy loading functions
-    #
-
-    def _load_policy(self, filename):
-        """Load the specified policy."""
-        self.log.info("Opening SELinux policy \"{0}\"".format(filename))
-
-        try:
-            self.policy = qpol.qpol_policy_factory(str(filename))
-        except SyntaxError as err:
-            raise exception.InvalidPolicy("Error opening policy file \"{0}\": {1}".
-                                          format(filename, err))
-
-        self.log.info("Successfully opened SELinux policy \"{0}\"".format(filename))
-        self.filename = filename
-
-    @staticmethod
-    def _potential_policies():
-        """Generate a list of potential policies to use."""
-        # Start with binary policies in the standard location
-        base_policy_path = selinux.selinux_binary_policy_path()
-        for version in range(qpol.QPOL_POLICY_MAX_VERSION, qpol.QPOL_POLICY_MIN_VERSION-1, -1):
-            yield "{0}.{1}".format(base_policy_path, version)
-
-        # Last chance, try selinuxfs. This is not first, to avoid
-        # holding kernel memory for a long time
-        if selinux.selinuxfs_exists():
-            yield selinux.selinux_current_policy_path()
-
-    def _load_running_policy(self):
-        """Try to load the current running policy."""
-        self.log.info("Attempting to locate current running policy.")
-
-        for filename in self._potential_policies():
-            try:
-                self._load_policy(filename)
-            except OSError as err:
-                if err.errno != ENOENT:
-                    raise
-            else:
-                break
-        else:
-            raise RuntimeError("Unable to locate an SELinux policy to load.")
-
-    #
-    # Policy properties
-    #
-    @property
-    def handle_unknown(self):
-        """The handle unknown permissions setting (allow,deny,reject)"""
-        return self.policy.handle_unknown()
-
-    @property
-    def mls(self):
-        """(T/F) The policy has MLS enabled."""
-        return mls.enabled(self.policy)
-
-    @property
-    def version(self):
-        """The policy database version (e.g. v29)"""
-        return self.policy.version()
-
-    #
-    # Policy statistics
-    #
-
-    @property
-    def allow_count(self):
-        """The number of (type) allow rules."""
-        return self.policy.avrule_allow_count()
-
-    @property
-    def auditallow_count(self):
-        """The number of auditallow rules."""
-        return self.policy.avrule_auditallow_count()
-
-    @property
-    def boolean_count(self):
-        """The number of Booleans."""
-        return self.policy.bool_count()
-
-    @property
-    def category_count(self):
-        """The number of categories."""
-        return sum(1 for _ in self.categories())
-
-    @property
-    def class_count(self):
-        """The number of object classes."""
-        return self.policy.class_count()
-
-    @property
-    def common_count(self):
-        """The number of common permission sets."""
-        return self.policy.common_count()
-
-    @property
-    def conditional_count(self):
-        """The number of conditionals."""
-        return self.policy.cond_count()
-
-    @property
-    def constraint_count(self):
-        """The number of standard constraints."""
-        return sum(1 for c in self.constraints() if c.ruletype == "constrain")
-
-    @property
-    def dontaudit_count(self):
-        """The number of dontaudit rules."""
-        return self.policy.avrule_dontaudit_count()
-
-    @property
-    def fs_use_count(self):
-        """fs_use_* statements."""
-        return self.policy.fs_use_count()
-
-    @property
-    def genfscon_count(self):
-        """The number of genfscon statements."""
-        return self.policy.genfscon_count()
-
-    @property
-    def initialsids_count(self):
-        """The number of initial sid statements."""
-        return self.policy.isid_count()
-
-    @property
-    def level_count(self):
-        """The number of levels."""
-        return sum(1 for _ in self.levels())
-
-    @property
-    def mlsconstraint_count(self):
-        """The number of MLS constraints."""
-        return sum(1 for c in self.constraints() if c.ruletype == "mlsconstrain")
-
-    @property
-    def mlsvalidatetrans_count(self):
-        """The number of MLS validatetrans."""
-        return sum(1 for v in self.constraints() if v.ruletype == "mlsvalidatetrans")
-
-    @property
-    def netifcon_count(self):
-        """The number of netifcon statements."""
-        return self.policy.netifcon_count()
-
-    @property
-    def neverallow_count(self):
-        """The number of neverallow rules."""
-        return self.policy.avrule_neverallow_count()
-
-    @property
-    def nodecon_count(self):
-        """The number of nodecon statements."""
-        return self.policy.nodecon_count()
-
-    @property
-    def permission_count(self):
-        """The number of permissions."""
-        return sum(len(c.perms) for c in chain(self.commons(), self.classes()))
-
-    @property
-    def permissives_count(self):
-        """The number of permissive types."""
-        return self.policy.permissive_count()
-
-    @property
-    def polcap_count(self):
-        """The number of policy capabilities."""
-        return self.policy.polcap_count()
-
-    @property
-    def portcon_count(self):
-        """The number of portcon statements."""
-        return self.policy.portcon_count()
-
-    @property
-    def range_transition_count(self):
-        """The number of range_transition rules."""
-        return self.policy.range_trans_count()
-
-    @property
-    def role_count(self):
-        """The number of roles."""
-        return self.policy.role_count()
-
-    @property
-    def role_allow_count(self):
-        """The number of (role) allow rules."""
-        return self.policy.role_allow_count()
-
-    @property
-    def role_transition_count(self):
-        """The number of role_transition rules."""
-        return self.policy.role_trans_count()
-
-    @property
-    def type_attribute_count(self):
-        """The number of (type) attributes."""
-        return sum(1 for _ in self.typeattributes())
-
-    @property
-    def type_count(self):
-        """The number of types."""
-        return sum(1 for _ in self.types())
-
-    @property
-    def type_change_count(self):
-        """The number of type_change rules."""
-        return self.policy.terule_change_count()
-
-    @property
-    def type_member_count(self):
-        """The number of type_member rules."""
-        return self.policy.terule_member_count()
-
-    @property
-    def type_transition_count(self):
-        """The number of type_transition rules."""
-        return self.policy.terule_trans_count() + self.policy.filename_trans_count()
-
-    @property
-    def user_count(self):
-        """The number of users."""
-        return self.policy.user_count()
-
-    @property
-    def validatetrans_count(self):
-        """The number of validatetrans."""
-        return sum(1 for v in self.constraints() if v.ruletype == "validatetrans")
-
-    #
-    # Policy components lookup functions
-    #
-    def lookup_boolean(self, name):
-        """Look up a Boolean."""
-        return boolcond.boolean_factory(self.policy, name)
-
-    def lookup_class(self, name):
-        """Look up an object class."""
-        return objclass.class_factory(self.policy, name)
-
-    def lookup_common(self, name):
-        """Look up a common permission set."""
-        return objclass.common_factory(self.policy, name)
-
-    def lookup_initialsid(self, name):
-        """Look up an initial sid."""
-        return initsid.initialsid_factory(self.policy, name)
-
-    def lookup_level(self, level):
-        """Look up a MLS level."""
-        return mls.level_factory(self.policy, level)
-
-    def lookup_sensitivity(self, name):
-        """Look up a MLS sensitivity by name."""
-        return mls.sensitivity_factory(self.policy, name)
-
-    def lookup_range(self, range_):
-        """Look up a MLS range."""
-        return mls.range_factory(self.policy, range_)
-
-    def lookup_role(self, name):
-        """Look up a role by name."""
-        return role.role_factory(self.policy, name)
-
-    def lookup_type(self, name):
-        """Look up a type by name."""
-        return typeattr.type_factory(self.policy, name, deref=True)
-
-    def lookup_type_or_attr(self, name):
-        """Look up a type or type attribute by name."""
-        return typeattr.type_or_attr_factory(self.policy, name, deref=True)
-
-    def lookup_typeattr(self, name):
-        """Look up a type attribute by name."""
-        return typeattr.attribute_factory(self.policy, name)
-
-    def lookup_user(self, name):
-        """Look up a user by name."""
-        return user.user_factory(self.policy, name)
-
-    #
-    # Policy components generators
-    #
-
-    def bools(self):
-        """Generator which yields all Booleans."""
-        for bool_ in self.policy.bool_iter():
-            yield boolcond.boolean_factory(self.policy, bool_)
-
-    def categories(self):
-        """Generator which yields all MLS categories."""
-        for cat in self.policy.cat_iter():
-            try:
-                yield mls.category_factory(self.policy, cat)
-            except TypeError:
-                # libqpol unfortunately iterates over aliases too
-                pass
-
-    def classes(self):
-        """Generator which yields all object classes."""
-        for class_ in self.policy.class_iter():
-            yield objclass.class_factory(self.policy, class_)
-
-    def commons(self):
-        """Generator which yields all commons."""
-        for common in self.policy.common_iter():
-            yield objclass.common_factory(self.policy, common)
-
-    def defaults(self):
-        """Generator which yields all default_* statements."""
-        for default_ in self.policy.default_iter():
-            try:
-                for default_obj in default.default_factory(self.policy, default_):
-                    yield default_obj
-            except exception.NoDefaults:
-                # qpol iterates over all classes. Handle case
-                # where a class has no default_* settings.
-                pass
-
-    def levels(self):
-        """Generator which yields all level declarations."""
-        for level in self.policy.level_iter():
-
-            try:
-                yield mls.level_decl_factory(self.policy, level)
-            except TypeError:
-                # libqpol unfortunately iterates over levels and sens aliases
-                pass
-
-    def polcaps(self):
-        """Generator which yields all policy capabilities."""
-        for cap in self.policy.polcap_iter():
-            yield polcap.polcap_factory(self.policy, cap)
-
-    def roles(self):
-        """Generator which yields all roles."""
-        for role_ in self.policy.role_iter():
-            yield role.role_factory(self.policy, role_)
-
-    def sensitivities(self):
-        """Generator which yields all sensitivities."""
-        # see mls.py for more info on why level_iter is used here.
-        for sens in self.policy.level_iter():
-            try:
-                yield mls.sensitivity_factory(self.policy, sens)
-            except TypeError:
-                # libqpol unfortunately iterates over sens and aliases
-                pass
-
-    def types(self):
-        """Generator which yields all types."""
-        for type_ in self.policy.type_iter():
-            try:
-                yield typeattr.type_factory(self.policy, type_)
-            except TypeError:
-                # libqpol unfortunately iterates over attributes and aliases
-                pass
-
-    def typeattributes(self):
-        """Generator which yields all (type) attributes."""
-        for type_ in self.policy.type_iter():
-            try:
-                yield typeattr.attribute_factory(self.policy, type_)
-            except TypeError:
-                # libqpol unfortunately iterates over attributes and aliases
-                pass
-
-    def users(self):
-        """Generator which yields all users."""
-        for user_ in self.policy.user_iter():
-            yield user.user_factory(self.policy, user_)
-
-    #
-    # Policy rules generators
-    #
-    def mlsrules(self):
-        """Generator which yields all MLS rules."""
-        for rule in self.policy.range_trans_iter():
-            yield mlsrule.mls_rule_factory(self.policy, rule)
-
-    def rbacrules(self):
-        """Generator which yields all RBAC rules."""
-        for rule in chain(self.policy.role_allow_iter(),
-                          self.policy.role_trans_iter()):
-            yield rbacrule.rbac_rule_factory(self.policy, rule)
-
-    def terules(self):
-        """Generator which yields all type enforcement rules."""
-        for rule in chain(self.policy.avrule_iter(),
-                          self.policy.terule_iter(),
-                          self.policy.filename_trans_iter()):
-            yield terule.te_rule_factory(self.policy, rule)
-
-    #
-    # Policy rule type validators
-    #
-    @staticmethod
-    def validate_constraint_ruletype(types):
-        """Validate constraint types."""
-        constraint.validate_ruletype(types)
-
-    @staticmethod
-    def validate_mls_ruletype(types):
-        """Validate MLS rule types."""
-        mlsrule.validate_ruletype(types)
-
-    @staticmethod
-    def validate_rbac_ruletype(types):
-        """Validate RBAC rule types."""
-        rbacrule.validate_ruletype(types)
-
-    @staticmethod
-    def validate_te_ruletype(types):
-        """Validate type enforcement rule types."""
-        terule.validate_ruletype(types)
-
-    #
-    # Constraints generators
-    #
-
-    def constraints(self):
-        """Generator which yields all constraints (regular and MLS)."""
-        for constraint_ in chain(self.policy.constraint_iter(),
-                                 self.policy.validatetrans_iter()):
-
-            yield constraint.constraint_factory(self.policy, constraint_)
-
-    #
-    # In-policy Labeling statement generators
-    #
-    def fs_uses(self):
-        """Generator which yields all fs_use_* statements."""
-        for fs_use in self.policy.fs_use_iter():
-            yield fscontext.fs_use_factory(self.policy, fs_use)
-
-    def genfscons(self):
-        """Generator which yields all genfscon statements."""
-        for fscon in self.policy.genfscon_iter():
-            yield fscontext.genfscon_factory(self.policy, fscon)
-
-    def initialsids(self):
-        """Generator which yields all initial SID statements."""
-        for sid in self.policy.isid_iter():
-            yield initsid.initialsid_factory(self.policy, sid)
-
-    def netifcons(self):
-        """Generator which yields all netifcon statements."""
-        for ifcon in self.policy.netifcon_iter():
-            yield netcontext.netifcon_factory(self.policy, ifcon)
-
-    def nodecons(self):
-        """Generator which yields all nodecon statements."""
-        for node in self.policy.nodecon_iter():
-            yield netcontext.nodecon_factory(self.policy, node)
-
-    def portcons(self):
-        """Generator which yields all portcon statements."""
-        for port in self.policy.portcon_iter():
-            yield netcontext.portcon_factory(self.policy, port)
diff --git a/lib/python2.7/site-packages/setoolsgui/setools/policyrep/_qpol.so b/lib/python2.7/site-packages/setoolsgui/setools/policyrep/_qpol.so
deleted file mode 100755
index aaccf28..0000000
--- a/lib/python2.7/site-packages/setoolsgui/setools/policyrep/_qpol.so
+++ /dev/null
Binary files differ
diff --git a/lib/python2.7/site-packages/setoolsgui/setools/policyrep/boolcond.py b/lib/python2.7/site-packages/setoolsgui/setools/policyrep/boolcond.py
deleted file mode 100644
index c3c0608..0000000
--- a/lib/python2.7/site-packages/setoolsgui/setools/policyrep/boolcond.py
+++ /dev/null
@@ -1,167 +0,0 @@
-# Copyright 2014-2015, Tresys Technology, LLC
-#
-# This file is part of SETools.
-#
-# SETools is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Lesser General Public License as
-# published by the Free Software Foundation, either version 2.1 of
-# the License, or (at your option) any later version.
-#
-# SETools is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with SETools.  If not, see
-# <http://www.gnu.org/licenses/>.
-#
-from . import exception
-from . import qpol
-from . import symbol
-
-
-def boolean_factory(policy, name):
-    """Factory function for creating Boolean statement objects."""
-
-    if isinstance(name, Boolean):
-        assert name.policy == policy
-        return name
-    elif isinstance(name, qpol.qpol_bool_t):
-        return Boolean(policy, name)
-
-    try:
-        return Boolean(policy, qpol.qpol_bool_t(policy, str(name)))
-    except ValueError:
-        raise exception.InvalidBoolean("{0} is not a valid Boolean".format(name))
-
-
-def condexpr_factory(policy, name):
-    """Factory function for creating conditional expression objects."""
-
-    if not isinstance(name, qpol.qpol_cond_t):
-        raise TypeError("Conditional expressions cannot be looked up.")
-
-    return ConditionalExpr(policy, name)
-
-
-class Boolean(symbol.PolicySymbol):
-
-    """A Boolean."""
-
-    @property
-    def state(self):
-        """The default state of the Boolean."""
-        return bool(self.qpol_symbol.state(self.policy))
-
-    def statement(self):
-        """The policy statement."""
-        return "bool {0} {1};".format(self, str(self.state).lower())
-
-
-class ConditionalExpr(symbol.PolicySymbol):
-
-    """A conditional policy expression."""
-
-    _cond_expr_val_to_text = {
-        qpol.QPOL_COND_EXPR_NOT: "!",
-        qpol.QPOL_COND_EXPR_OR: "||",
-        qpol.QPOL_COND_EXPR_AND: "&&",
-        qpol.QPOL_COND_EXPR_XOR: "^",
-        qpol.QPOL_COND_EXPR_EQ: "==",
-        qpol.QPOL_COND_EXPR_NEQ: "!="}
-
-    _cond_expr_val_to_precedence = {
-        qpol.QPOL_COND_EXPR_NOT: 5,
-        qpol.QPOL_COND_EXPR_OR: 1,
-        qpol.QPOL_COND_EXPR_AND: 3,
-        qpol.QPOL_COND_EXPR_XOR: 2,
-        qpol.QPOL_COND_EXPR_EQ: 4,
-        qpol.QPOL_COND_EXPR_NEQ: 4}
-
-    def __contains__(self, other):
-        for expr_node in self.qpol_symbol.expr_node_iter(self.policy):
-            expr_node_type = expr_node.expr_type(self.policy)
-
-            if expr_node_type == qpol.QPOL_COND_EXPR_BOOL and other == \
-                    boolean_factory(self.policy, expr_node.get_boolean(self.policy)):
-                return True
-
-        return False
-
-    def __str__(self):
-        # qpol representation is in postfix notation.  This code
-        # converts it to infix notation.  Parentheses are added
-        # to ensure correct expressions, though they may end up
-        # being overused.  Set previous operator at start to the
-        # highest precedence (NOT) so if there is a single binary
-        # operator, no parentheses are output
-        stack = []
-        prev_op_precedence = self._cond_expr_val_to_precedence[qpol.QPOL_COND_EXPR_NOT]
-        for expr_node in self.qpol_symbol.expr_node_iter(self.policy):
-            expr_node_type = expr_node.expr_type(self.policy)
-
-            if expr_node_type == qpol.QPOL_COND_EXPR_BOOL:
-                # append the boolean name
-                nodebool = boolean_factory(
-                    self.policy, expr_node.get_boolean(self.policy))
-                stack.append(str(nodebool))
-            elif expr_node_type == qpol.QPOL_COND_EXPR_NOT:  # unary operator
-                operand = stack.pop()
-                operator = self._cond_expr_val_to_text[expr_node_type]
-                op_precedence = self._cond_expr_val_to_precedence[expr_node_type]
-
-                # NOT is the highest precedence, so only need
-                # parentheses if the operand is a subexpression
-                if isinstance(operand, list):
-                    subexpr = [operator, "(", operand, ")"]
-                else:
-                    subexpr = [operator, operand]
-
-                stack.append(subexpr)
-                prev_op_precedence = op_precedence
-            else:
-                operand1 = stack.pop()
-                operand2 = stack.pop()
-                operator = self._cond_expr_val_to_text[expr_node_type]
-                op_precedence = self._cond_expr_val_to_precedence[expr_node_type]
-
-                if prev_op_precedence > op_precedence:
-                    # if previous operator is of higher precedence
-                    # no parentheses are needed.
-                    subexpr = [operand1, operator, operand2]
-                else:
-                    subexpr = ["(", operand1, operator, operand2, ")"]
-
-                stack.append(subexpr)
-                prev_op_precedence = op_precedence
-
-        return self.__unwind_subexpression(stack)
-
-    def __unwind_subexpression(self, expr):
-        ret = []
-
-        # do a string.join on sublists (subexpressions)
-        for i in expr:
-            if isinstance(i, list):
-                ret.append(self.__unwind_subexpression(i))
-            else:
-                ret.append(i)
-
-        return ' '.join(ret)
-
-    @property
-    def booleans(self):
-        """The set of Booleans in the expression."""
-        bools = set()
-
-        for expr_node in self.qpol_symbol.expr_node_iter(self.policy):
-            expr_node_type = expr_node.expr_type(self.policy)
-
-            if expr_node_type == qpol.QPOL_COND_EXPR_BOOL:
-                bools.add(boolean_factory(self.policy, expr_node.get_boolean(self.policy)))
-
-        return bools
-
-    def statement(self):
-        raise exception.NoStatement
diff --git a/lib/python2.7/site-packages/setoolsgui/setools/policyrep/constraint.py b/lib/python2.7/site-packages/setoolsgui/setools/policyrep/constraint.py
deleted file mode 100644
index 9994c5b..0000000
--- a/lib/python2.7/site-packages/setoolsgui/setools/policyrep/constraint.py
+++ /dev/null
@@ -1,297 +0,0 @@
-# Copyright 2014-2015, Tresys Technology, LLC
-#
-# This file is part of SETools.
-#
-# SETools is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Lesser General Public License as
-# published by the Free Software Foundation, either version 2.1 of
-# the License, or (at your option) any later version.
-#
-# SETools is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with SETools.  If not, see
-# <http://www.gnu.org/licenses/>.
-#
-from . import exception
-from . import qpol
-from . import role
-from . import symbol
-from . import objclass
-from . import typeattr
-from . import user
-
-
-def _is_mls(policy, sym):
-    """Determine if this is a regular or MLS constraint/validatetrans."""
-    # this can only be determined by inspecting the expression.
-    for expr_node in sym.expr_iter(policy):
-        sym_type = expr_node.sym_type(policy)
-        expr_type = expr_node.expr_type(policy)
-
-        if expr_type == qpol.QPOL_CEXPR_TYPE_ATTR and sym_type >= qpol.QPOL_CEXPR_SYM_L1L2:
-            return True
-
-    return False
-
-
-def validate_ruletype(types):
-    """Validate constraint rule types."""
-    for t in types:
-        if t not in ["constrain", "mlsconstrain", "validatetrans", "mlsvalidatetrans"]:
-            raise exception.InvalidConstraintType("{0} is not a valid constraint type.".format(t))
-
-
-def constraint_factory(policy, sym):
-    """Factory function for creating constraint objects."""
-
-    try:
-        if _is_mls(policy, sym):
-            if isinstance(sym, qpol.qpol_constraint_t):
-                return Constraint(policy, sym, "mlsconstrain")
-            else:
-                return Validatetrans(policy, sym, "mlsvalidatetrans")
-        else:
-            if isinstance(sym, qpol.qpol_constraint_t):
-                return Constraint(policy, sym, "constrain")
-            else:
-                return Validatetrans(policy, sym, "validatetrans")
-
-    except AttributeError:
-        raise TypeError("Constraints cannot be looked-up.")
-
-
-class BaseConstraint(symbol.PolicySymbol):
-
-    """Base class for constraint rules."""
-
-    _expr_type_to_text = {
-        qpol.QPOL_CEXPR_TYPE_NOT: "not",
-        qpol.QPOL_CEXPR_TYPE_AND: "and",
-        qpol.QPOL_CEXPR_TYPE_OR: "\n\tor"}
-
-    _expr_op_to_text = {
-        qpol.QPOL_CEXPR_OP_EQ: "==",
-        qpol.QPOL_CEXPR_OP_NEQ: "!=",
-        qpol.QPOL_CEXPR_OP_DOM: "dom",
-        qpol.QPOL_CEXPR_OP_DOMBY: "domby",
-        qpol.QPOL_CEXPR_OP_INCOMP: "incomp"}
-
-    _sym_to_text = {
-        qpol.QPOL_CEXPR_SYM_USER: "u1",
-        qpol.QPOL_CEXPR_SYM_ROLE: "r1",
-        qpol.QPOL_CEXPR_SYM_TYPE: "t1",
-        qpol.QPOL_CEXPR_SYM_USER + qpol.QPOL_CEXPR_SYM_TARGET: "u2",
-        qpol.QPOL_CEXPR_SYM_ROLE + qpol.QPOL_CEXPR_SYM_TARGET: "r2",
-        qpol.QPOL_CEXPR_SYM_TYPE + qpol.QPOL_CEXPR_SYM_TARGET: "t2",
-        qpol.QPOL_CEXPR_SYM_USER + qpol.QPOL_CEXPR_SYM_XTARGET: "u3",
-        qpol.QPOL_CEXPR_SYM_ROLE + qpol.QPOL_CEXPR_SYM_XTARGET: "r3",
-        qpol.QPOL_CEXPR_SYM_TYPE + qpol.QPOL_CEXPR_SYM_XTARGET: "t3",
-        qpol.QPOL_CEXPR_SYM_L1L2: "l1",
-        qpol.QPOL_CEXPR_SYM_L1H2: "l1",
-        qpol.QPOL_CEXPR_SYM_H1L2: "h1",
-        qpol.QPOL_CEXPR_SYM_H1H2: "h1",
-        qpol.QPOL_CEXPR_SYM_L1H1: "l1",
-        qpol.QPOL_CEXPR_SYM_L2H2: "l2",
-        qpol.QPOL_CEXPR_SYM_L1L2 + qpol.QPOL_CEXPR_SYM_TARGET: "l2",
-        qpol.QPOL_CEXPR_SYM_L1H2 + qpol.QPOL_CEXPR_SYM_TARGET: "h2",
-        qpol.QPOL_CEXPR_SYM_H1L2 + qpol.QPOL_CEXPR_SYM_TARGET: "l2",
-        qpol.QPOL_CEXPR_SYM_H1H2 + qpol.QPOL_CEXPR_SYM_TARGET: "h2",
-        qpol.QPOL_CEXPR_SYM_L1H1 + qpol.QPOL_CEXPR_SYM_TARGET: "h1",
-        qpol.QPOL_CEXPR_SYM_L2H2 + qpol.QPOL_CEXPR_SYM_TARGET: "h2"}
-
-    # Boolean operators
-    _expr_type_to_precedence = {
-        qpol.QPOL_CEXPR_TYPE_NOT: 3,
-        qpol.QPOL_CEXPR_TYPE_AND: 2,
-        qpol.QPOL_CEXPR_TYPE_OR: 1}
-
-    # Logical operators have the same precedence
-    _logical_op_precedence = 4
-
-    def __init__(self, policy, qpol_symbol, ruletype):
-        symbol.PolicySymbol.__init__(self, policy, qpol_symbol)
-        self.ruletype = ruletype
-
-    def __str__(self):
-        raise NotImplementedError
-
-    def _build_expression(self):
-        # qpol representation is in postfix notation.  This code
-        # converts it to infix notation.  Parentheses are added
-        # to ensure correct expressions, though they may end up
-        # being overused.  Set previous operator at start to the
-        # highest precedence (op) so if there is a single binary
-        # operator, no parentheses are output
-
-        stack = []
-        prev_op_precedence = self._logical_op_precedence
-        for expr_node in self.qpol_symbol.expr_iter(self.policy):
-            op = expr_node.op(self.policy)
-            sym_type = expr_node.sym_type(self.policy)
-            expr_type = expr_node.expr_type(self.policy)
-
-            if expr_type == qpol.QPOL_CEXPR_TYPE_ATTR:
-                # logical operator with symbol (e.g. u1 == u2)
-                operand1 = self._sym_to_text[sym_type]
-                operand2 = self._sym_to_text[sym_type + qpol.QPOL_CEXPR_SYM_TARGET]
-                operator = self._expr_op_to_text[op]
-
-                stack.append([operand1, operator, operand2])
-
-                prev_op_precedence = self._logical_op_precedence
-            elif expr_type == qpol.QPOL_CEXPR_TYPE_NAMES:
-                # logical operator with type or attribute list (e.g. t1 == { spam_t eggs_t })
-                operand1 = self._sym_to_text[sym_type]
-                operator = self._expr_op_to_text[op]
-
-                names = list(expr_node.names_iter(self.policy))
-
-                if not names:
-                    operand2 = "<empty set>"
-                elif len(names) == 1:
-                    operand2 = names[0]
-                else:
-                    operand2 = "{{ {0} }}".format(' '.join(names))
-
-                stack.append([operand1, operator, operand2])
-
-                prev_op_precedence = self._logical_op_precedence
-            elif expr_type == qpol.QPOL_CEXPR_TYPE_NOT:
-                # unary operator (not)
-                operand = stack.pop()
-                operator = self._expr_type_to_text[expr_type]
-
-                stack.append([operator, "(", operand, ")"])
-
-                prev_op_precedence = self._expr_type_to_precedence[expr_type]
-            else:
-                # binary operator (and/or)
-                operand1 = stack.pop()
-                operand2 = stack.pop()
-                operator = self._expr_type_to_text[expr_type]
-                op_precedence = self._expr_type_to_precedence[expr_type]
-
-                # if previous operator is of higher precedence
-                # no parentheses are needed.
-                if op_precedence < prev_op_precedence:
-                    stack.append([operand1, operator, operand2])
-                else:
-                    stack.append(["(", operand1, operator, operand2, ")"])
-
-                prev_op_precedence = op_precedence
-
-        return self.__unwind_subexpression(stack)
-
-    def _get_symbols(self, syms, factory):
-        """
-        Internal generator for getting users/roles/types in a constraint
-        expression.  Symbols will be yielded multiple times if they appear
-        in the expression multiple times.
-
-        Parameters:
-        syms        List of qpol symbol types.
-        factory     The factory function related to these symbols.
-        """
-        for expr_node in self.qpol_symbol.expr_iter(self.policy):
-            sym_type = expr_node.sym_type(self.policy)
-            expr_type = expr_node.expr_type(self.policy)
-
-            if expr_type == qpol.QPOL_CEXPR_TYPE_NAMES and sym_type in syms:
-                for s in expr_node.names_iter(self.policy):
-                    yield factory(self.policy, s)
-
-    def __unwind_subexpression(self, expr):
-        ret = []
-
-        # do a string.join on sublists (subexpressions)
-        for i in expr:
-            if isinstance(i, list):
-                ret.append(self.__unwind_subexpression(i))
-            else:
-                ret.append(i)
-
-        return ' '.join(ret)
-
-    # There is no levels function as specific
-    # levels cannot be used in expressions, only
-    # the l1, h1, etc. symbols
-
-    @property
-    def roles(self):
-        """The roles used in the expression."""
-        role_syms = [qpol.QPOL_CEXPR_SYM_ROLE,
-                     qpol.QPOL_CEXPR_SYM_ROLE + qpol.QPOL_CEXPR_SYM_TARGET,
-                     qpol.QPOL_CEXPR_SYM_ROLE + qpol.QPOL_CEXPR_SYM_XTARGET]
-
-        return set(self._get_symbols(role_syms, role.role_factory))
-
-    @property
-    def perms(self):
-        raise NotImplementedError
-
-    def statement(self):
-        return str(self)
-
-    @property
-    def tclass(self):
-        """Object class for this constraint."""
-        return objclass.class_factory(self.policy, self.qpol_symbol.object_class(self.policy))
-
-    @property
-    def types(self):
-        """The types and type attributes used in the expression."""
-        type_syms = [qpol.QPOL_CEXPR_SYM_TYPE,
-                     qpol.QPOL_CEXPR_SYM_TYPE + qpol.QPOL_CEXPR_SYM_TARGET,
-                     qpol.QPOL_CEXPR_SYM_TYPE + qpol.QPOL_CEXPR_SYM_XTARGET]
-
-        return set(self._get_symbols(type_syms, typeattr.type_or_attr_factory))
-
-    @property
-    def users(self):
-        """The users used in the expression."""
-        user_syms = [qpol.QPOL_CEXPR_SYM_USER,
-                     qpol.QPOL_CEXPR_SYM_USER + qpol.QPOL_CEXPR_SYM_TARGET,
-                     qpol.QPOL_CEXPR_SYM_USER + qpol.QPOL_CEXPR_SYM_XTARGET]
-
-        return set(self._get_symbols(user_syms, user.user_factory))
-
-
-class Constraint(BaseConstraint):
-
-    """A constraint rule (constrain/mlsconstrain)."""
-
-    def __str__(self):
-        rule_string = "{0.ruletype} {0.tclass} ".format(self)
-
-        perms = self.perms
-        if len(perms) > 1:
-            rule_string += "{{ {0} }} (\n".format(' '.join(perms))
-        else:
-            # convert to list since sets cannot be indexed
-            rule_string += "{0} (\n".format(list(perms)[0])
-
-        rule_string += "\t{0}\n);".format(self._build_expression())
-
-        return rule_string
-
-    @property
-    def perms(self):
-        """The constraint's permission set."""
-        return set(self.qpol_symbol.perm_iter(self.policy))
-
-
-class Validatetrans(BaseConstraint):
-
-    """A validatetrans rule (validatetrans/mlsvalidatetrans)."""
-
-    def __str__(self):
-        return "{0.ruletype} {0.tclass}\n\t{1}\n);".format(self, self._build_expression())
-
-    @property
-    def perms(self):
-        raise exception.ConstraintUseError("{0} rules do not have permissions.".
-                                           format(self.ruletype))
diff --git a/lib/python2.7/site-packages/setoolsgui/setools/policyrep/context.py b/lib/python2.7/site-packages/setoolsgui/setools/policyrep/context.py
deleted file mode 100644
index f2f3fc7..0000000
--- a/lib/python2.7/site-packages/setoolsgui/setools/policyrep/context.py
+++ /dev/null
@@ -1,68 +0,0 @@
-# Copyright 2014-2015, Tresys Technology, LLC
-#
-# This file is part of SETools.
-#
-# SETools is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Lesser General Public License as
-# published by the Free Software Foundation, either version 2.1 of
-# the License, or (at your option) any later version.
-#
-# SETools is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with SETools.  If not, see
-# <http://www.gnu.org/licenses/>.
-#
-from . import exception
-from . import qpol
-from . import symbol
-from . import user
-from . import role
-from . import typeattr
-from . import mls
-
-
-def context_factory(policy, name):
-    """Factory function for creating context objects."""
-
-    if not isinstance(name, qpol.qpol_context_t):
-        raise TypeError("Contexts cannot be looked-up.")
-
-    return Context(policy, name)
-
-
-class Context(symbol.PolicySymbol):
-
-    """A SELinux security context/security attribute."""
-
-    def __str__(self):
-        try:
-            return "{0.user}:{0.role}:{0.type_}:{0.range_}".format(self)
-        except exception.MLSDisabled:
-            return "{0.user}:{0.role}:{0.type_}".format(self)
-
-    @property
-    def user(self):
-        """The user portion of the context."""
-        return user.user_factory(self.policy, self.qpol_symbol.user(self.policy))
-
-    @property
-    def role(self):
-        """The role portion of the context."""
-        return role.role_factory(self.policy, self.qpol_symbol.role(self.policy))
-
-    @property
-    def type_(self):
-        """The type portion of the context."""
-        return typeattr.type_factory(self.policy, self.qpol_symbol.type_(self.policy))
-
-    @property
-    def range_(self):
-        """The MLS range of the context."""
-        return mls.range_factory(self.policy, self.qpol_symbol.range(self.policy))
-
-    def statement(self):
-        raise exception.NoStatement
diff --git a/lib/python2.7/site-packages/setoolsgui/setools/policyrep/default.py b/lib/python2.7/site-packages/setoolsgui/setools/policyrep/default.py
deleted file mode 100644
index 175b709..0000000
--- a/lib/python2.7/site-packages/setoolsgui/setools/policyrep/default.py
+++ /dev/null
@@ -1,128 +0,0 @@
-# Copyright 2014, Tresys Technology, LLC
-#
-# This file is part of SETools.
-#
-# SETools is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Lesser General Public License as
-# published by the Free Software Foundation, either version 2.1 of
-# the License, or (at your option) any later version.
-#
-# SETools is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with SETools.  If not, see
-# <http://www.gnu.org/licenses/>.
-#
-from . import exception
-from . import symbol
-from . import objclass
-from . import qpol
-
-
-def default_factory(policy, sym):
-    """Factory generator for creating default_* statement objects."""
-
-    # The low level policy groups default_* settings by object class.
-    # Since each class can have up to four default_* statements,
-    # this factory function is a generator which yields up to
-    # four Default objects.
-
-    if not isinstance(sym, qpol.qpol_default_object_t):
-        raise NotImplementedError
-
-    # qpol will essentially iterate over all classes
-    # and emit None for classes that don't set a default
-    if not sym.object_class(policy):
-        raise exception.NoDefaults
-
-    if sym.user_default(policy):
-        yield UserDefault(policy, sym)
-
-    if sym.role_default(policy):
-        yield RoleDefault(policy, sym)
-
-    if sym.type_default(policy):
-        yield TypeDefault(policy, sym)
-
-    if sym.range_default(policy):
-        yield RangeDefault(policy, sym)
-
-
-class Default(symbol.PolicySymbol):
-
-    """Base class for default_* statements."""
-
-    def __str__(self):
-        raise NotImplementedError
-
-    @property
-    def object_class(self):
-        """The object class."""
-        return objclass.class_factory(self.policy, self.qpol_symbol.object_class(self.policy))
-
-    @property
-    def default(self):
-        raise NotImplementedError
-
-    def statement(self):
-        return str(self)
-
-
-class UserDefault(Default):
-
-    """A default_user statement."""
-
-    def __str__(self):
-        return "default_user {0.object_class} {0.default};".format(self)
-
-    @property
-    def default(self):
-        """The default user location (source/target)."""
-        return self.qpol_symbol.user_default(self.policy)
-
-
-class RoleDefault(Default):
-
-    """A default_role statement."""
-
-    def __str__(self):
-        return "default_role {0.object_class} {0.default};".format(self)
-
-    @property
-    def default(self):
-        """The default role location (source/target)."""
-        return self.qpol_symbol.role_default(self.policy)
-
-
-class TypeDefault(Default):
-
-    """A default_type statement."""
-
-    def __str__(self):
-        return "default_type {0.object_class} {0.default};".format(self)
-
-    @property
-    def default(self):
-        """The default type location (source/target)."""
-        return self.qpol_symbol.type_default(self.policy)
-
-
-class RangeDefault(Default):
-
-    """A default_range statement."""
-
-    def __str__(self):
-        return "default_range {0.object_class} {0.default} {0.default_range};".format(self)
-
-    @property
-    def default(self):
-        """The default range location (source/target)."""
-        return self.qpol_symbol.range_default(self.policy).split()[0]
-
-    @property
-    def default_range(self):
-        """The default range setting (low/high/low_high)."""
-        return self.qpol_symbol.range_default(self.policy).split()[1]
diff --git a/lib/python2.7/site-packages/setoolsgui/setools/policyrep/exception.py b/lib/python2.7/site-packages/setoolsgui/setools/policyrep/exception.py
deleted file mode 100644
index ce367c0..0000000
--- a/lib/python2.7/site-packages/setoolsgui/setools/policyrep/exception.py
+++ /dev/null
@@ -1,248 +0,0 @@
-# Copyright 2015, Tresys Technology, LLC
-#
-# This file is part of SETools.
-#
-# SETools is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Lesser General Public License as
-# published by the Free Software Foundation, either version 2.1 of
-# the License, or (at your option) any later version.
-#
-# SETools is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with SETools.  If not, see
-# <http://www.gnu.org/licenses/>.
-#
-from ..exception import SEToolsException
-
-#
-# Policyrep base exception
-#
-
-
-class PolicyrepException(SEToolsException):
-
-    """Base class for all policyrep exceptions."""
-    pass
-
-
-#
-# General Policyrep exceptions
-#
-
-
-class InvalidPolicy(SyntaxError, PolicyrepException):
-
-    """Exception for invalid policy."""
-    pass
-
-
-class MLSDisabled(PolicyrepException):
-
-    """
-    Exception when MLS is disabled.
-    """
-    pass
-
-
-#
-# Invalid component exceptions
-#
-class InvalidSymbol(ValueError, PolicyrepException):
-
-    """
-    Base class for invalid symbols.  Typically this is attempting to
-    look up an object in the policy, but it does not exist.
-    """
-    pass
-
-
-class InvalidBoolean(InvalidSymbol):
-
-    """Exception for invalid Booleans."""
-    pass
-
-
-class InvalidCategory(InvalidSymbol):
-
-    """Exception for invalid MLS categories."""
-    pass
-
-
-class InvalidClass(InvalidSymbol):
-
-    """Exception for invalid object classes."""
-    pass
-
-
-class InvalidCommon(InvalidSymbol):
-
-    """Exception for invalid common permission sets."""
-    pass
-
-
-class InvalidInitialSid(InvalidSymbol):
-
-    """Exception for invalid initial sids."""
-    pass
-
-
-class InvalidLevel(InvalidSymbol):
-
-    """
-    Exception for an invalid level.
-    """
-    pass
-
-
-class InvalidLevelDecl(InvalidSymbol):
-
-    """
-    Exception for an invalid level declaration.
-    """
-    pass
-
-
-class InvalidRange(InvalidSymbol):
-
-    """
-    Exception for an invalid range.
-    """
-    pass
-
-
-class InvalidRole(InvalidSymbol):
-
-    """Exception for invalid roles."""
-    pass
-
-
-class InvalidSensitivity(InvalidSymbol):
-
-    """
-    Exception for an invalid sensitivity.
-    """
-    pass
-
-
-class InvalidType(InvalidSymbol):
-
-    """Exception for invalid types and attributes."""
-    pass
-
-
-class InvalidUser(InvalidSymbol):
-
-    """Exception for invalid users."""
-    pass
-
-#
-# Rule type exceptions
-#
-
-
-class InvalidRuleType(InvalidSymbol):
-
-    """Exception for invalid rule types."""
-    pass
-
-
-class InvalidConstraintType(InvalidSymbol):
-
-    """Exception for invalid constraint types."""
-    # This is not a rule but is similar.
-    pass
-
-
-class InvalidMLSRuleType(InvalidRuleType):
-
-    """Exception for invalid MLS rule types."""
-    pass
-
-
-class InvalidRBACRuleType(InvalidRuleType):
-
-    """Exception for invalid RBAC rule types."""
-    pass
-
-
-class InvalidTERuleType(InvalidRuleType):
-
-    """Exception for invalid TE rule types."""
-    pass
-
-
-#
-# Object use errors
-#
-class SymbolUseError(PolicyrepException):
-
-    """
-    Base class for incorrectly using an object.  Typically this is
-    for classes with strong similarities, but with slight variances in
-    functionality, e.g. allow vs type_transition rules.
-    """
-    pass
-
-
-class RuleUseError(SymbolUseError):
-
-    """
-    Base class for incorrect parameters for a rule.  For
-    example, trying to get the permissions of a rule that has no
-    permissions.
-    """
-    pass
-
-
-class ConstraintUseError(SymbolUseError):
-
-    """Exception when getting permissions from a validatetrans."""
-    pass
-
-
-class NoStatement(SymbolUseError):
-
-    """
-    Exception for objects that have no inherent statement, such
-    as conditional expressions and MLS ranges.
-    """
-    pass
-
-
-#
-# Other exceptions
-#
-class NoCommon(PolicyrepException):
-
-    """
-    Exception when a class does not inherit a common permission set.
-    """
-    pass
-
-
-class NoDefaults(InvalidSymbol):
-
-    """Exception for classes that have no default_* statements."""
-    pass
-
-
-class RuleNotConditional(PolicyrepException):
-
-    """
-    Exception when getting the conditional expression for rules
-    that are unconditional (not conditional).
-    """
-    pass
-
-
-class TERuleNoFilename(PolicyrepException):
-
-    """
-    Exception when getting the file name of a
-    type_transition rule that has no file name.
-    """
-    pass
diff --git a/lib/python2.7/site-packages/setoolsgui/setools/policyrep/fscontext.py b/lib/python2.7/site-packages/setoolsgui/setools/policyrep/fscontext.py
deleted file mode 100644
index a17b0bc..0000000
--- a/lib/python2.7/site-packages/setoolsgui/setools/policyrep/fscontext.py
+++ /dev/null
@@ -1,123 +0,0 @@
-# Copyright 2014, Tresys Technology, LLC
-#
-# This file is part of SETools.
-#
-# SETools is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Lesser General Public License as
-# published by the Free Software Foundation, either version 2.1 of
-# the License, or (at your option) any later version.
-#
-# SETools is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with SETools.  If not, see
-# <http://www.gnu.org/licenses/>.
-#
-import stat
-
-from . import qpol
-from . import symbol
-from . import context
-
-
-def fs_use_factory(policy, name):
-    """Factory function for creating fs_use_* objects."""
-
-    if not isinstance(name, qpol.qpol_fs_use_t):
-        raise TypeError("fs_use_* cannot be looked-up.")
-
-    return FSUse(policy, name)
-
-
-def genfscon_factory(policy, name):
-    """Factory function for creating genfscon objects."""
-
-    if not isinstance(name, qpol.qpol_genfscon_t):
-        raise TypeError("Genfscons cannot be looked-up.")
-
-    return Genfscon(policy, name)
-
-
-class FSContext(symbol.PolicySymbol):
-
-    """Base class for in-policy labeling rules."""
-
-    def __str__(self):
-        raise NotImplementedError
-
-    @property
-    def fs(self):
-        """The filesystem type for this statement."""
-        return self.qpol_symbol.name(self.policy)
-
-    @property
-    def context(self):
-        """The context for this statement."""
-        return context.context_factory(self.policy, self.qpol_symbol.context(self.policy))
-
-    def statement(self):
-        return str(self)
-
-
-class Genfscon(FSContext):
-
-    """A genfscon statement."""
-
-    _filetype_to_text = {
-        0: "",
-        stat.S_IFBLK: "-b",
-        stat.S_IFCHR: "-c",
-        stat.S_IFDIR: "-d",
-        stat.S_IFIFO: "-p",
-        stat.S_IFREG: "--",
-        stat.S_IFLNK: "-l",
-        stat.S_IFSOCK: "-s"}
-
-    def __str__(self):
-        return "genfscon {0.fs} {0.path} {1} {0.context}".format(
-            self, self._filetype_to_text[self.filetype])
-
-    def __eq__(self, other):
-        # Libqpol allocates new C objects in the
-        # genfscons iterator, so pointer comparison
-        # in the PolicySymbol object doesn't work.
-        try:
-            return (self.fs == other.fs and
-                    self.path == other.path and
-                    self.filetype == other.filetype and
-                    self.context == other.context)
-        except AttributeError:
-            return str(self) == str(other)
-
-    @property
-    def filetype(self):
-        """The file type (e.g. stat.S_IFBLK) for this genfscon statement."""
-        return self.qpol_symbol.object_class(self.policy)
-
-    @property
-    def path(self):
-        """The path for this genfscon statement."""
-        return self.qpol_symbol.path(self.policy)
-
-
-class FSUse(FSContext):
-
-    """A fs_use_* statement."""
-
-    # there are more rule types, but modern SELinux
-    # only supports these three.
-    _ruletype_to_text = {
-        qpol.QPOL_FS_USE_XATTR: 'fs_use_xattr',
-        qpol.QPOL_FS_USE_TRANS: 'fs_use_trans',
-        qpol.QPOL_FS_USE_TASK: 'fs_use_task'}
-
-    def __str__(self):
-        return "{0.ruletype} {0.fs} {0.context};".format(self)
-
-    @property
-    def ruletype(self):
-        """The rule type for this fs_use_* statement."""
-        return self._ruletype_to_text[self.qpol_symbol.behavior(self.policy)]
diff --git a/lib/python2.7/site-packages/setoolsgui/setools/policyrep/initsid.py b/lib/python2.7/site-packages/setoolsgui/setools/policyrep/initsid.py
deleted file mode 100644
index 0197c74..0000000
--- a/lib/python2.7/site-packages/setoolsgui/setools/policyrep/initsid.py
+++ /dev/null
@@ -1,50 +0,0 @@
-# Copyright 2014, Tresys Technology, LLC
-#
-# This file is part of SETools.
-#
-# SETools is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Lesser General Public License as
-# published by the Free Software Foundation, either version 2.1 of
-# the License, or (at your option) any later version.
-#
-# SETools is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with SETools.  If not, see
-# <http://www.gnu.org/licenses/>.
-#
-from . import exception
-from . import qpol
-from . import symbol
-from . import context
-
-
-def initialsid_factory(policy, name):
-    """Factory function for creating initial sid objects."""
-
-    if isinstance(name, InitialSID):
-        assert name.policy == policy
-        return name
-    elif isinstance(name, qpol.qpol_isid_t):
-        return InitialSID(policy, name)
-
-    try:
-        return InitialSID(policy, qpol.qpol_isid_t(policy, name))
-    except ValueError:
-        raise exception.InvalidInitialSid("{0} is not a valid initial sid".format(name))
-
-
-class InitialSID(symbol.PolicySymbol):
-
-    """An initial SID statement."""
-
-    @property
-    def context(self):
-        """The context for this initial SID."""
-        return context.context_factory(self.policy, self.qpol_symbol.context(self.policy))
-
-    def statement(self):
-        return "sid {0} {0.context}".format(self)
diff --git a/lib/python2.7/site-packages/setoolsgui/setools/policyrep/mls.py b/lib/python2.7/site-packages/setoolsgui/setools/policyrep/mls.py
deleted file mode 100644
index 2541704..0000000
--- a/lib/python2.7/site-packages/setoolsgui/setools/policyrep/mls.py
+++ /dev/null
@@ -1,463 +0,0 @@
-# Copyright 2014-2015, Tresys Technology, LLC
-#
-# This file is part of SETools.
-#
-# SETools is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Lesser General Public License as
-# published by the Free Software Foundation, either version 2.1 of
-# the License, or (at your option) any later version.
-#
-# SETools is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with SETools.  If not, see
-# <http://www.gnu.org/licenses/>.
-#
-# pylint: disable=protected-access
-import itertools
-
-from . import exception
-from . import qpol
-from . import symbol
-
-# qpol does not expose an equivalent of a sensitivity declaration.
-# qpol_level_t is equivalent to the level declaration:
-#   level s0:c0.c1023;
-
-# qpol_mls_level_t represents a level as used in contexts,
-# such as range_transitions or labeling statements such as
-# portcon and nodecon.
-
-# Here qpol_level_t is also used for MLSSensitivity
-# since it has the sensitivity name, dominance, and there
-# is a 1:1 correspondence between the sensitivity declarations
-# and level declarations.
-
-# Hashing has to be handled below because the qpol references,
-# normally used for a hash key, are not the same for multiple
-# instances of the same object (except for level decl).
-
-
-def enabled(policy):
-    """Determine if MLS is enabled."""
-    return policy.capability(qpol.QPOL_CAP_MLS)
-
-
-def category_factory(policy, sym):
-    """Factory function for creating MLS category objects."""
-
-    if not enabled(policy):
-        raise exception.MLSDisabled
-
-    if isinstance(sym, Category):
-        assert sym.policy == policy
-        return sym
-    elif isinstance(sym, qpol.qpol_cat_t):
-        if sym.isalias(policy):
-            raise TypeError("{0} is an alias".format(sym.name(policy)))
-
-        return Category(policy, sym)
-
-    try:
-        return Category(policy, qpol.qpol_cat_t(policy, str(sym)))
-    except ValueError:
-        raise exception.InvalidCategory("{0} is not a valid category".format(sym))
-
-
-def sensitivity_factory(policy, sym):
-    """Factory function for creating MLS sensitivity objects."""
-
-    if not enabled(policy):
-        raise exception.MLSDisabled
-
-    if isinstance(sym, Sensitivity):
-        assert sym.policy == policy
-        return sym
-    elif isinstance(sym, qpol.qpol_level_t):
-        if sym.isalias(policy):
-            raise TypeError("{0} is an alias".format(sym.name(policy)))
-
-        return Sensitivity(policy, sym)
-
-    try:
-        return Sensitivity(policy, qpol.qpol_level_t(policy, str(sym)))
-    except ValueError:
-        raise exception.InvalidSensitivity("{0} is not a valid sensitivity".format(sym))
-
-
-def level_factory(policy, sym):
-    """
-    Factory function for creating MLS level objects (e.g. levels used
-    in contexts of labeling statements)
-    """
-
-    if not enabled(policy):
-        raise exception.MLSDisabled
-
-    if isinstance(sym, Level):
-        assert sym.policy == policy
-        return sym
-    elif isinstance(sym, qpol.qpol_mls_level_t):
-        return Level(policy, sym)
-
-    sens_split = str(sym).split(":")
-
-    sens = sens_split[0]
-    try:
-        semantic_level = qpol.qpol_semantic_level_t(policy, sens)
-    except ValueError:
-        raise exception.InvalidLevel("{0} is invalid ({1} is not a valid sensitivity)".
-                                     format(sym, sens))
-
-    try:
-        cats = sens_split[1]
-    except IndexError:
-        pass
-    else:
-        for group in cats.split(","):
-            catrange = group.split(".")
-
-            if len(catrange) == 2:
-                try:
-                    semantic_level.add_cats(policy, catrange[0], catrange[1])
-                except ValueError:
-                    raise exception.InvalidLevel(
-                        "{0} is invalid ({1} is not a valid category range)".format(sym, group))
-            elif len(catrange) == 1:
-                try:
-                    semantic_level.add_cats(policy, catrange[0], catrange[0])
-                except ValueError:
-                    raise exception.InvalidLevel("{0} is invalid  ({1} is not a valid category)".
-                                                 format(sym, group))
-            else:
-                raise exception.InvalidLevel("{0} is invalid (level parsing error)".format(sym))
-
-    # convert to level object
-    try:
-        policy_level = qpol.qpol_mls_level_t(policy, semantic_level)
-    except ValueError:
-        raise exception.InvalidLevel(
-            "{0} is invalid (one or more categories are not associated with the sensitivity)".
-            format(sym))
-
-    return Level(policy, policy_level)
-
-
-def level_decl_factory(policy, sym):
-    """
-    Factory function for creating MLS level declaration objects.
-    (level statements) Lookups are only by sensitivity name.
-    """
-
-    if not enabled(policy):
-        raise exception.MLSDisabled
-
-    if isinstance(sym, LevelDecl):
-        assert sym.policy == policy
-        return sym
-    elif isinstance(sym, qpol.qpol_level_t):
-        if sym.isalias(policy):
-            raise TypeError("{0} is an alias".format(sym.name(policy)))
-
-        return LevelDecl(policy, sym)
-
-    try:
-        return LevelDecl(policy, qpol.qpol_level_t(policy, str(sym)))
-    except ValueError:
-        raise exception.InvalidLevelDecl("{0} is not a valid sensitivity".format(sym))
-
-
-def range_factory(policy, sym):
-    """Factory function for creating MLS range objects."""
-
-    if not enabled(policy):
-        raise exception.MLSDisabled
-
-    if isinstance(sym, Range):
-        assert sym.policy == policy
-        return sym
-    elif isinstance(sym, qpol.qpol_mls_range_t):
-        return Range(policy, sym)
-
-    # build range:
-    levels = str(sym).split("-")
-
-    # strip() levels to handle ranges with spaces in them,
-    # e.g. s0:c1 - s0:c0.c255
-    try:
-        low = level_factory(policy, levels[0].strip())
-    except exception.InvalidLevel as ex:
-        raise exception.InvalidRange("{0} is not a valid range ({1}).".format(sym, ex))
-
-    try:
-        high = level_factory(policy, levels[1].strip())
-    except exception.InvalidLevel as ex:
-        raise exception.InvalidRange("{0} is not a valid range ({1}).".format(sym, ex))
-    except IndexError:
-        high = low
-
-    # convert to range object
-    try:
-        policy_range = qpol.qpol_mls_range_t(policy, low.qpol_symbol, high.qpol_symbol)
-    except ValueError:
-        raise exception.InvalidRange("{0} is not a valid range ({1} is not dominated by {2})".
-                                     format(sym, low, high))
-
-    return Range(policy, policy_range)
-
-
-class BaseMLSComponent(symbol.PolicySymbol):
-
-    """Base class for sensitivities and categories."""
-
-    @property
-    def _value(self):
-        """
-        The value of the component.
-
-        This is a low-level policy detail exposed for internal use only.
-        """
-        return self.qpol_symbol.value(self.policy)
-
-    def aliases(self):
-        """Generator that yields all aliases for this category."""
-
-        for alias in self.qpol_symbol.alias_iter(self.policy):
-            yield alias
-
-
-class Category(BaseMLSComponent):
-
-    """An MLS category."""
-
-    def statement(self):
-        aliases = list(self.aliases())
-        stmt = "category {0}".format(self)
-        if aliases:
-            if len(aliases) > 1:
-                stmt += " alias {{ {0} }}".format(' '.join(aliases))
-            else:
-                stmt += " alias {0}".format(aliases[0])
-        stmt += ";"
-        return stmt
-
-
-class Sensitivity(BaseMLSComponent):
-
-    """An MLS sensitivity"""
-
-    def __eq__(self, other):
-        try:
-            return self._value == other._value
-        except AttributeError:
-            return str(self) == str(other)
-
-    def __ge__(self, other):
-        return self._value >= other._value
-
-    def __gt__(self, other):
-        return self._value > other._value
-
-    def __le__(self, other):
-        return self._value <= other._value
-
-    def __lt__(self, other):
-        return self._value < other._value
-
-    def statement(self):
-        aliases = list(self.aliases())
-        stmt = "sensitivity {0}".format(self)
-        if aliases:
-            if len(aliases) > 1:
-                stmt += " alias {{ {0} }}".format(' '.join(aliases))
-            else:
-                stmt += " alias {0}".format(aliases[0])
-        stmt += ";"
-        return stmt
-
-
-class BaseMLSLevel(symbol.PolicySymbol):
-
-    """Base class for MLS levels."""
-
-    def __str__(self):
-        lvl = str(self.sensitivity)
-
-        # sort by policy declaration order
-        cats = sorted(self.categories(), key=lambda k: k._value)
-
-        if cats:
-            # generate short category notation
-            shortlist = []
-            for _, i in itertools.groupby(cats, key=lambda k,
-                                          c=itertools.count(): k._value - next(c)):
-                group = list(i)
-                if len(group) > 1:
-                    shortlist.append("{0}.{1}".format(group[0], group[-1]))
-                else:
-                    shortlist.append(str(group[0]))
-
-            lvl += ":" + ','.join(shortlist)
-
-        return lvl
-
-    @property
-    def sensitivity(self):
-        raise NotImplementedError
-
-    def categories(self):
-        """
-        Generator that yields all individual categories for this level.
-        All categories are yielded, not a compact notation such as
-        c0.c255
-        """
-
-        for cat in self.qpol_symbol.cat_iter(self.policy):
-            yield category_factory(self.policy, cat)
-
-
-class LevelDecl(BaseMLSLevel):
-
-    """
-    The declaration statement for MLS levels, e.g:
-
-    level s7:c0.c1023;
-    """
-    # below comparisons are only based on sensitivity
-    # dominance since, in this context, the allowable
-    # category set is being defined for the level.
-    # object type is asserted here because this cannot
-    # be compared to a Level instance.
-
-    def __eq__(self, other):
-        assert not isinstance(other, Level), "Levels cannot be compared to level declarations"
-
-        try:
-            return self.sensitivity == other.sensitivity
-        except AttributeError:
-            return str(self) == str(other)
-
-    def __ge__(self, other):
-        assert not isinstance(other, Level), "Levels cannot be compared to level declarations"
-        return self.sensitivity >= other.sensitivity
-
-    def __gt__(self, other):
-        assert not isinstance(other, Level), "Levels cannot be compared to level declarations"
-        return self.sensitivity > other.sensitivity
-
-    def __le__(self, other):
-        assert not isinstance(other, Level), "Levels cannot be compared to level declarations"
-        return self.sensitivity <= other.sensitivity
-
-    def __lt__(self, other):
-        assert not isinstance(other, Level), "Levels cannot be compared to level declarations"
-        return self.sensitivity < other.sensitivity
-
-    @property
-    def sensitivity(self):
-        """The sensitivity of the level."""
-        # since the qpol symbol for levels is also used for
-        # MLSSensitivity objects, use self's qpol symbol
-        return sensitivity_factory(self.policy, self.qpol_symbol)
-
-    def statement(self):
-        return "level {0};".format(self)
-
-
-class Level(BaseMLSLevel):
-
-    """An MLS level used in contexts."""
-
-    def __hash__(self):
-        return hash(str(self))
-
-    def __eq__(self, other):
-        try:
-            othercats = set(other.categories())
-        except AttributeError:
-            return str(self) == str(other)
-        else:
-            selfcats = set(self.categories())
-            return self.sensitivity == other.sensitivity and selfcats == othercats
-
-    def __ge__(self, other):
-        """Dom operator."""
-        selfcats = set(self.categories())
-        othercats = set(other.categories())
-        return self.sensitivity >= other.sensitivity and selfcats >= othercats
-
-    def __gt__(self, other):
-        selfcats = set(self.categories())
-        othercats = set(other.categories())
-        return ((self.sensitivity > other.sensitivity and selfcats >= othercats) or
-                (self.sensitivity >= other.sensitivity and selfcats > othercats))
-
-    def __le__(self, other):
-        """Domby operator."""
-        selfcats = set(self.categories())
-        othercats = set(other.categories())
-        return self.sensitivity <= other.sensitivity and selfcats <= othercats
-
-    def __lt__(self, other):
-        selfcats = set(self.categories())
-        othercats = set(other.categories())
-        return ((self.sensitivity < other.sensitivity and selfcats <= othercats) or
-                (self.sensitivity <= other.sensitivity and selfcats < othercats))
-
-    def __xor__(self, other):
-        """Incomp operator."""
-        return not (self >= other or self <= other)
-
-    @property
-    def sensitivity(self):
-        """The sensitivity of the level."""
-        return sensitivity_factory(self.policy, self.qpol_symbol.sens_name(self.policy))
-
-    def statement(self):
-        raise exception.NoStatement
-
-
-class Range(symbol.PolicySymbol):
-
-    """An MLS range"""
-
-    def __str__(self):
-        high = self.high
-        low = self.low
-        if high == low:
-            return str(low)
-
-        return "{0} - {1}".format(low, high)
-
-    def __hash__(self):
-        return hash(str(self))
-
-    def __eq__(self, other):
-        try:
-            return self.low == other.low and self.high == other.high
-        except AttributeError:
-            # remove all spaces in the string representations
-            # to handle cases where the other object does not
-            # have spaces around the '-'
-            other_str = str(other).replace(" ", "")
-            self_str = str(self).replace(" ", "")
-            return self_str == other_str
-
-    def __contains__(self, other):
-        return self.low <= other <= self.high
-
-    @property
-    def high(self):
-        """The high end/clearance level of this range."""
-        return level_factory(self.policy, self.qpol_symbol.high_level(self.policy))
-
-    @property
-    def low(self):
-        """The low end/current level of this range."""
-        return level_factory(self.policy, self.qpol_symbol.low_level(self.policy))
-
-    def statement(self):
-        raise exception.NoStatement
diff --git a/lib/python2.7/site-packages/setoolsgui/setools/policyrep/mlsrule.py b/lib/python2.7/site-packages/setoolsgui/setools/policyrep/mlsrule.py
deleted file mode 100644
index 5c91c59..0000000
--- a/lib/python2.7/site-packages/setoolsgui/setools/policyrep/mlsrule.py
+++ /dev/null
@@ -1,62 +0,0 @@
-# Copyright 2014, Tresys Technology, LLC
-#
-# This file is part of SETools.
-#
-# SETools is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Lesser General Public License as
-# published by the Free Software Foundation, either version 2.1 of
-# the License, or (at your option) any later version.
-#
-# SETools is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with SETools.  If not, see
-# <http://www.gnu.org/licenses/>.
-#
-from . import exception
-from . import qpol
-from . import rule
-from . import typeattr
-from . import mls
-
-
-def mls_rule_factory(policy, symbol):
-    """Factory function for creating MLS rule objects."""
-    if not isinstance(symbol, qpol.qpol_range_trans_t):
-        raise TypeError("MLS rules cannot be looked-up.")
-
-    return MLSRule(policy, symbol)
-
-
-def validate_ruletype(types):
-    """Validate MLS rule types."""
-    for t in types:
-        if t not in ["range_transition"]:
-            raise exception.InvalidMLSRuleType("{0} is not a valid MLS rule type.".format(t))
-
-
-class MLSRule(rule.PolicyRule):
-
-    """An MLS rule."""
-
-    def __str__(self):
-        # TODO: If we ever get more MLS rules, fix this format.
-        return "range_transition {0.source} {0.target}:{0.tclass} {0.default};".format(self)
-
-    @property
-    def source(self):
-        """The rule's source type/attribute."""
-        return typeattr.type_or_attr_factory(self.policy, self.qpol_symbol.source_type(self.policy))
-
-    @property
-    def target(self):
-        """The rule's target type/attribute."""
-        return typeattr.type_or_attr_factory(self.policy, self.qpol_symbol.target_type(self.policy))
-
-    @property
-    def default(self):
-        """The rule's default range."""
-        return mls.range_factory(self.policy, self.qpol_symbol.range(self.policy))
diff --git a/lib/python2.7/site-packages/setoolsgui/setools/policyrep/netcontext.py b/lib/python2.7/site-packages/setoolsgui/setools/policyrep/netcontext.py
deleted file mode 100644
index 5aeed5c..0000000
--- a/lib/python2.7/site-packages/setoolsgui/setools/policyrep/netcontext.py
+++ /dev/null
@@ -1,167 +0,0 @@
-# Copyright 2014, Tresys Technology, LLC
-#
-# This file is part of SETools.
-#
-# SETools is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Lesser General Public License as
-# published by the Free Software Foundation, either version 2.1 of
-# the License, or (at your option) any later version.
-#
-# SETools is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with SETools.  If not, see
-# <http://www.gnu.org/licenses/>.
-#
-import socket
-from collections import namedtuple
-
-from . import qpol
-from . import symbol
-from . import context
-
-port_range = namedtuple("port_range", ["low", "high"])
-
-
-def netifcon_factory(policy, name):
-    """Factory function for creating netifcon objects."""
-
-    if not isinstance(name, qpol.qpol_netifcon_t):
-        raise NotImplementedError
-
-    return Netifcon(policy, name)
-
-
-def nodecon_factory(policy, name):
-    """Factory function for creating nodecon objects."""
-
-    if not isinstance(name, qpol.qpol_nodecon_t):
-        raise NotImplementedError
-
-    return Nodecon(policy, name)
-
-
-def portcon_factory(policy, name):
-    """Factory function for creating portcon objects."""
-
-    if not isinstance(name, qpol.qpol_portcon_t):
-        raise NotImplementedError
-
-    return Portcon(policy, name)
-
-
-class NetContext(symbol.PolicySymbol):
-
-    """Base class for in-policy network labeling rules."""
-
-    def __str__(self):
-        raise NotImplementedError
-
-    @property
-    def context(self):
-        """The context for this statement."""
-        return context.context_factory(self.policy, self.qpol_symbol.context(self.policy))
-
-    def statement(self):
-        return str(self)
-
-
-class Netifcon(NetContext):
-
-    """A netifcon statement."""
-
-    def __str__(self):
-        return "netifcon {0.netif} {0.context} {0.packet}".format(self)
-
-    @property
-    def netif(self):
-        """The network interface name."""
-        return self.qpol_symbol.name(self.policy)
-
-    @property
-    def context(self):
-        """The context for the interface."""
-        return context.context_factory(self.policy, self.qpol_symbol.if_con(self.policy))
-
-    @property
-    def packet(self):
-        """The context for the packets."""
-        return context.context_factory(self.policy, self.qpol_symbol.msg_con(self.policy))
-
-
-class Nodecon(NetContext):
-
-    """A nodecon statement."""
-
-    def __str__(self):
-        return "nodecon {0.address} {0.netmask} {0.context}".format(self)
-
-    def __eq__(self, other):
-        # Libqpol allocates new C objects in the
-        # nodecons iterator, so pointer comparison
-        # in the PolicySymbol object doesn't work.
-        try:
-            return (self.address == other.address and
-                    self.netmask == other.netmask and
-                    self.context == other.context)
-        except AttributeError:
-            return (str(self) == str(other))
-
-    @property
-    def ip_version(self):
-        """
-        The IP version for the nodecon (socket.AF_INET or
-        socket.AF_INET6).
-        """
-        return self.qpol_symbol.protocol(self.policy)
-
-    @property
-    def address(self):
-        """The network address for the nodecon."""
-        return self.qpol_symbol.addr(self.policy)
-
-    @property
-    def netmask(self):
-        """The network mask for the nodecon."""
-        return self.qpol_symbol.mask(self.policy)
-
-
-class Portcon(NetContext):
-
-    """A portcon statement."""
-
-    _proto_to_text = {socket.IPPROTO_TCP: 'tcp',
-                      socket.IPPROTO_UDP: 'udp'}
-
-    def __str__(self):
-        low, high = self.ports
-        proto = self._proto_to_text[self.protocol]
-
-        if low == high:
-            return "portcon {0} {1} {2}".format(proto, low, self.context)
-        else:
-            return "portcon {0} {1}-{2} {3}".format(proto, low, high, self.context)
-
-    @property
-    def protocol(self):
-        """
-        The protocol number for the portcon (socket.IPPROTO_TCP
-        or socket.IPPROTO_UDP).
-        """
-        return self.qpol_symbol.protocol(self.policy)
-
-    @property
-    def ports(self):
-        """
-        The port range for this portcon.
-
-        Return: Tuple(low, high)
-        low     The low port of the range.
-        high    The high port of the range.
-        """
-        low = self.qpol_symbol.low_port(self.policy)
-        high = self.qpol_symbol.high_port(self.policy)
-        return port_range(low, high)
diff --git a/lib/python2.7/site-packages/setoolsgui/setools/policyrep/objclass.py b/lib/python2.7/site-packages/setoolsgui/setools/policyrep/objclass.py
deleted file mode 100644
index bf9a553..0000000
--- a/lib/python2.7/site-packages/setoolsgui/setools/policyrep/objclass.py
+++ /dev/null
@@ -1,110 +0,0 @@
-# Copyright 2014-2015, Tresys Technology, LLC
-#
-# This file is part of SETools.
-#
-# SETools is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Lesser General Public License as
-# published by the Free Software Foundation, either version 2.1 of
-# the License, or (at your option) any later version.
-#
-# SETools is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with SETools.  If not, see
-# <http://www.gnu.org/licenses/>.
-#
-from . import exception
-from . import symbol
-from . import qpol
-
-
-def common_factory(policy, name):
-    """Factory function for creating common permission set objects."""
-
-    if isinstance(name, Common):
-        assert name.policy == policy
-        return name
-    elif isinstance(name, qpol.qpol_common_t):
-        return Common(policy, name)
-
-    try:
-        return Common(policy, qpol.qpol_common_t(policy, str(name)))
-    except ValueError:
-        raise exception.InvalidCommon("{0} is not a valid common".format(name))
-
-
-def class_factory(policy, name):
-    """Factory function for creating object class objects."""
-
-    if isinstance(name, ObjClass):
-        assert name.policy == policy
-        return name
-    elif isinstance(name, qpol.qpol_class_t):
-        return ObjClass(policy, name)
-
-    try:
-        return ObjClass(policy, qpol.qpol_class_t(policy, str(name)))
-    except ValueError:
-        raise exception.InvalidClass("{0} is not a valid object class".format(name))
-
-
-class Common(symbol.PolicySymbol):
-
-    """A common permission set."""
-
-    def __contains__(self, other):
-        return other in self.perms
-
-    @property
-    def perms(self):
-        """The list of the common's permissions."""
-        return set(self.qpol_symbol.perm_iter(self.policy))
-
-    def statement(self):
-        return "common {0}\n{{\n\t{1}\n}}".format(self, '\n\t'.join(self.perms))
-
-
-class ObjClass(Common):
-
-    """An object class."""
-
-    def __contains__(self, other):
-        try:
-            if other in self.common.perms:
-                return True
-        except exception.NoCommon:
-            pass
-
-        return other in self.perms
-
-    @property
-    def common(self):
-        """
-        The common that the object class inherits.
-
-        Exceptions:
-        NoCommon    The object class does not inherit a common.
-        """
-
-        try:
-            return common_factory(self.policy, self.qpol_symbol.common(self.policy))
-        except ValueError:
-            raise exception.NoCommon("{0} does not inherit a common.".format(self))
-
-    def statement(self):
-        stmt = "class {0}\n".format(self)
-
-        try:
-            stmt += "inherits {0}\n".format(self.common)
-        except exception.NoCommon:
-            pass
-
-        # a class that inherits may not have additional permissions
-        perms = self.perms
-        if len(perms) > 0:
-            stmt += "{{\n\t{0}\n}}".format('\n\t'.join(perms))
-
-        return stmt
diff --git a/lib/python2.7/site-packages/setoolsgui/setools/policyrep/polcap.py b/lib/python2.7/site-packages/setoolsgui/setools/policyrep/polcap.py
deleted file mode 100644
index 8ab164d..0000000
--- a/lib/python2.7/site-packages/setoolsgui/setools/policyrep/polcap.py
+++ /dev/null
@@ -1,40 +0,0 @@
-# Copyright 2014-2015, Tresys Technology, LLC
-#
-# This file is part of SETools.
-#
-# SETools is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Lesser General Public License as
-# published by the Free Software Foundation, either version 2.1 of
-# the License, or (at your option) any later version.
-#
-# SETools is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with SETools.  If not, see
-# <http://www.gnu.org/licenses/>.
-#
-from . import qpol
-from . import symbol
-
-
-def polcap_factory(policy, name):
-    """Factory function for creating policy capability objects."""
-
-    if isinstance(name, PolicyCapability):
-        assert name.policy == policy
-        return name
-    elif isinstance(name, qpol.qpol_polcap_t):
-        return PolicyCapability(policy, name)
-    else:
-        raise TypeError("Policy capabilities cannot be looked up.")
-
-
-class PolicyCapability(symbol.PolicySymbol):
-
-    """A policy capability."""
-
-    def statement(self):
-        return "policycap {0};".format(self)
diff --git a/lib/python2.7/site-packages/setoolsgui/setools/policyrep/qpol.py b/lib/python2.7/site-packages/setoolsgui/setools/policyrep/qpol.py
deleted file mode 100644
index 97e602b..0000000
--- a/lib/python2.7/site-packages/setoolsgui/setools/policyrep/qpol.py
+++ /dev/null
@@ -1,1114 +0,0 @@
-# This file was automatically generated by SWIG (http://www.swig.org).
-# Version 2.0.11
-#
-# Do not make changes to this file unless you know what you are doing--modify
-# the SWIG interface file instead.
-
-
-
-
-
-from sys import version_info
-if version_info >= (2,6,0):
-    def swig_import_helper():
-        from os.path import dirname
-        import imp
-        fp = None
-        try:
-            fp, pathname, description = imp.find_module('_qpol', [dirname(__file__)])
-        except ImportError:
-            import _qpol
-            return _qpol
-        if fp is not None:
-            try:
-                _mod = imp.load_module('_qpol', fp, pathname, description)
-            finally:
-                fp.close()
-            return _mod
-    _qpol = swig_import_helper()
-    del swig_import_helper
-else:
-    import _qpol
-del version_info
-try:
-    _swig_property = property
-except NameError:
-    pass # Python < 2.2 doesn't have 'property'.
-def _swig_setattr_nondynamic(self,class_type,name,value,static=1):
-    if (name == "thisown"): return self.this.own(value)
-    if (name == "this"):
-        if type(value).__name__ == 'SwigPyObject':
-            self.__dict__[name] = value
-            return
-    method = class_type.__swig_setmethods__.get(name,None)
-    if method: return method(self,value)
-    if (not static):
-        self.__dict__[name] = value
-    else:
-        raise AttributeError("You cannot add attributes to %s" % self)
-
-def _swig_setattr(self,class_type,name,value):
-    return _swig_setattr_nondynamic(self,class_type,name,value,0)
-
-def _swig_getattr(self,class_type,name):
-    if (name == "thisown"): return self.this.own()
-    method = class_type.__swig_getmethods__.get(name,None)
-    if method: return method(self)
-    raise AttributeError(name)
-
-def _swig_repr(self):
-    try: strthis = "proxy of " + self.this.__repr__()
-    except: strthis = ""
-    return "<%s.%s; %s >" % (self.__class__.__module__, self.__class__.__name__, strthis,)
-
-try:
-    _object = object
-    _newclass = 1
-except AttributeError:
-    class _object : pass
-    _newclass = 0
-
-
-
-def to_str(*args):
-  return _qpol.to_str(*args)
-to_str = _qpol.to_str
-import logging
-from functools import wraps
-
-def QpolGenerator(cast):
-    """
-    A decorator which converts qpol iterators into Python generators.
-
-    Qpol iterators use void* to be generic about their contents.
-    The purpose of the _from_void functions below is to wrap
-    the pointer casting, hence the "cast" variable name here.
-
-    Decorator parameter:
-    cast    A wrapper function which casts the qpol iterator return pointer
-            to the proper C data type pointer.  The Python function
-            reference to the C Python extension is used, for example:
-
-            @QpolGenerator(_qpol.qpol_type_from_void)
-    """
-
-    def decorate(func):
-        @wraps(func)
-        def wrapper(*args, **kwargs):
-            qpol_iter = func(*args)
-            while not qpol_iter.isend():
-                yield cast(qpol_iter.item())
-                qpol_iter.next_()
-
-        return wrapper
-    return decorate
-
-def qpol_logger(level, msg):
-    """Log qpol messages via Python logging."""
-    logging.getLogger("libqpol").debug(msg)
-
-def qpol_policy_factory(path):
-    """Factory function for qpol policy objects."""
-    # The main purpose here is to hook in the
-    # above logger callback.
-    return qpol_policy_t(path, 0, qpol_logger)
-
-QPOL_POLICY_OPTION_NO_NEVERALLOWS = _qpol.QPOL_POLICY_OPTION_NO_NEVERALLOWS
-QPOL_POLICY_OPTION_NO_RULES = _qpol.QPOL_POLICY_OPTION_NO_RULES
-QPOL_POLICY_OPTION_MATCH_SYSTEM = _qpol.QPOL_POLICY_OPTION_MATCH_SYSTEM
-QPOL_POLICY_MAX_VERSION = _qpol.QPOL_POLICY_MAX_VERSION
-QPOL_POLICY_MIN_VERSION = _qpol.QPOL_POLICY_MIN_VERSION
-class qpol_policy_t(_object):
-    __swig_setmethods__ = {}
-    __setattr__ = lambda self, name, value: _swig_setattr(self, qpol_policy_t, name, value)
-    __swig_getmethods__ = {}
-    __getattr__ = lambda self, name: _swig_getattr(self, qpol_policy_t, name)
-    __repr__ = _swig_repr
-    def __init__(self, *args): 
-        this = _qpol.new_qpol_policy_t(*args)
-        try: self.this.append(this)
-        except: self.this = this
-    __swig_destroy__ = _qpol.delete_qpol_policy_t
-    __del__ = lambda self : None;
-    def version(self): return _qpol.qpol_policy_t_version(self)
-    def handle_unknown(self): return _qpol.qpol_policy_t_handle_unknown(self)
-    def capability(self, *args): return _qpol.qpol_policy_t_capability(self, *args)
-    @QpolGenerator(_qpol.qpol_type_from_void) 
-    def type_iter(self): return _qpol.qpol_policy_t_type_iter(self)
-    def type_count(self): return _qpol.qpol_policy_t_type_count(self)
-    @QpolGenerator(_qpol.qpol_role_from_void) 
-    def role_iter(self): return _qpol.qpol_policy_t_role_iter(self)
-    def role_count(self): return _qpol.qpol_policy_t_role_count(self)
-    @QpolGenerator(_qpol.qpol_level_from_void) 
-    def level_iter(self): return _qpol.qpol_policy_t_level_iter(self)
-    def level_count(self): return _qpol.qpol_policy_t_level_count(self)
-    @QpolGenerator(_qpol.qpol_cat_from_void) 
-    def cat_iter(self): return _qpol.qpol_policy_t_cat_iter(self)
-    def cat_count(self): return _qpol.qpol_policy_t_cat_count(self)
-    @QpolGenerator(_qpol.qpol_user_from_void) 
-    def user_iter(self): return _qpol.qpol_policy_t_user_iter(self)
-    def user_count(self): return _qpol.qpol_policy_t_user_count(self)
-    @QpolGenerator(_qpol.qpol_bool_from_void) 
-    def bool_iter(self): return _qpol.qpol_policy_t_bool_iter(self)
-    def bool_count(self): return _qpol.qpol_policy_t_bool_count(self)
-    @QpolGenerator(_qpol.qpol_class_from_void) 
-    def class_iter(self, perm=None): return _qpol.qpol_policy_t_class_iter(self, perm)
-    def class_count(self): return _qpol.qpol_policy_t_class_count(self)
-    @QpolGenerator(_qpol.qpol_common_from_void) 
-    def common_iter(self, perm=None): return _qpol.qpol_policy_t_common_iter(self, perm)
-    def common_count(self): return _qpol.qpol_policy_t_common_count(self)
-    @QpolGenerator(_qpol.qpol_fs_use_from_void) 
-    def fs_use_iter(self): return _qpol.qpol_policy_t_fs_use_iter(self)
-    def fs_use_count(self): return _qpol.qpol_policy_t_fs_use_count(self)
-    @QpolGenerator(_qpol.qpol_genfscon_from_void) 
-    def genfscon_iter(self): return _qpol.qpol_policy_t_genfscon_iter(self)
-    def genfscon_count(self): return _qpol.qpol_policy_t_genfscon_count(self)
-    @QpolGenerator(_qpol.qpol_isid_from_void) 
-    def isid_iter(self): return _qpol.qpol_policy_t_isid_iter(self)
-    def isid_count(self): return _qpol.qpol_policy_t_isid_count(self)
-    @QpolGenerator(_qpol.qpol_netifcon_from_void) 
-    def netifcon_iter(self): return _qpol.qpol_policy_t_netifcon_iter(self)
-    def netifcon_count(self): return _qpol.qpol_policy_t_netifcon_count(self)
-    @QpolGenerator(_qpol.qpol_nodecon_from_void) 
-    def nodecon_iter(self): return _qpol.qpol_policy_t_nodecon_iter(self)
-    def nodecon_count(self): return _qpol.qpol_policy_t_nodecon_count(self)
-    @QpolGenerator(_qpol.qpol_portcon_from_void) 
-    def portcon_iter(self): return _qpol.qpol_policy_t_portcon_iter(self)
-    def portcon_count(self): return _qpol.qpol_policy_t_portcon_count(self)
-    @QpolGenerator(_qpol.qpol_constraint_from_void) 
-    def constraint_iter(self): return _qpol.qpol_policy_t_constraint_iter(self)
-    def constraint_count(self): return _qpol.qpol_policy_t_constraint_count(self)
-    @QpolGenerator(_qpol.qpol_validatetrans_from_void) 
-    def validatetrans_iter(self): return _qpol.qpol_policy_t_validatetrans_iter(self)
-    def validatetrans_count(self): return _qpol.qpol_policy_t_validatetrans_count(self)
-    @QpolGenerator(_qpol.qpol_role_allow_from_void) 
-    def role_allow_iter(self): return _qpol.qpol_policy_t_role_allow_iter(self)
-    def role_allow_count(self): return _qpol.qpol_policy_t_role_allow_count(self)
-    @QpolGenerator(_qpol.qpol_role_trans_from_void) 
-    def role_trans_iter(self): return _qpol.qpol_policy_t_role_trans_iter(self)
-    def role_trans_count(self): return _qpol.qpol_policy_t_role_trans_count(self)
-    @QpolGenerator(_qpol.qpol_range_trans_from_void) 
-    def range_trans_iter(self): return _qpol.qpol_policy_t_range_trans_iter(self)
-    def range_trans_count(self): return _qpol.qpol_policy_t_range_trans_count(self)
-    @QpolGenerator(_qpol.qpol_avrule_from_void) 
-    def avrule_iter(self): return _qpol.qpol_policy_t_avrule_iter(self)
-    def avrule_allow_count(self): return _qpol.qpol_policy_t_avrule_allow_count(self)
-    def avrule_auditallow_count(self): return _qpol.qpol_policy_t_avrule_auditallow_count(self)
-    def avrule_neverallow_count(self): return _qpol.qpol_policy_t_avrule_neverallow_count(self)
-    def avrule_dontaudit_count(self): return _qpol.qpol_policy_t_avrule_dontaudit_count(self)
-    @QpolGenerator(_qpol.qpol_terule_from_void) 
-    def terule_iter(self): return _qpol.qpol_policy_t_terule_iter(self)
-    def terule_trans_count(self): return _qpol.qpol_policy_t_terule_trans_count(self)
-    def terule_change_count(self): return _qpol.qpol_policy_t_terule_change_count(self)
-    def terule_member_count(self): return _qpol.qpol_policy_t_terule_member_count(self)
-    def cond_iter(self): return _qpol.qpol_policy_t_cond_iter(self)
-    def cond_count(self): return _qpol.qpol_policy_t_cond_count(self)
-    @QpolGenerator(_qpol.qpol_filename_trans_from_void) 
-    def filename_trans_iter(self): return _qpol.qpol_policy_t_filename_trans_iter(self)
-    def filename_trans_count(self): return _qpol.qpol_policy_t_filename_trans_count(self)
-    @QpolGenerator(_qpol.qpol_type_from_void) 
-    def permissive_iter(self): return _qpol.qpol_policy_t_permissive_iter(self)
-    def permissive_count(self): return _qpol.qpol_policy_t_permissive_count(self)
-    def typebounds_iter(self): return _qpol.qpol_policy_t_typebounds_iter(self)
-    def typebounds_count(self): return _qpol.qpol_policy_t_typebounds_count(self)
-    @QpolGenerator(_qpol.qpol_polcap_from_void) 
-    def polcap_iter(self): return _qpol.qpol_policy_t_polcap_iter(self)
-    def polcap_count(self): return _qpol.qpol_policy_t_polcap_count(self)
-    @QpolGenerator(_qpol.qpol_default_object_from_void) 
-    def default_iter(self): return _qpol.qpol_policy_t_default_iter(self)
-qpol_policy_t_swigregister = _qpol.qpol_policy_t_swigregister
-qpol_policy_t_swigregister(qpol_policy_t)
-
-QPOL_CAP_ATTRIB_NAMES = _qpol.QPOL_CAP_ATTRIB_NAMES
-QPOL_CAP_SYN_RULES = _qpol.QPOL_CAP_SYN_RULES
-QPOL_CAP_LINE_NUMBERS = _qpol.QPOL_CAP_LINE_NUMBERS
-QPOL_CAP_CONDITIONALS = _qpol.QPOL_CAP_CONDITIONALS
-QPOL_CAP_MLS = _qpol.QPOL_CAP_MLS
-QPOL_CAP_MODULES = _qpol.QPOL_CAP_MODULES
-QPOL_CAP_RULES_LOADED = _qpol.QPOL_CAP_RULES_LOADED
-QPOL_CAP_SOURCE = _qpol.QPOL_CAP_SOURCE
-QPOL_CAP_NEVERALLOW = _qpol.QPOL_CAP_NEVERALLOW
-QPOL_CAP_POLCAPS = _qpol.QPOL_CAP_POLCAPS
-QPOL_CAP_BOUNDS = _qpol.QPOL_CAP_BOUNDS
-QPOL_CAP_DEFAULT_OBJECTS = _qpol.QPOL_CAP_DEFAULT_OBJECTS
-QPOL_CAP_DEFAULT_TYPE = _qpol.QPOL_CAP_DEFAULT_TYPE
-QPOL_CAP_PERMISSIVE = _qpol.QPOL_CAP_PERMISSIVE
-QPOL_CAP_FILENAME_TRANS = _qpol.QPOL_CAP_FILENAME_TRANS
-QPOL_CAP_ROLETRANS = _qpol.QPOL_CAP_ROLETRANS
-class qpol_iterator_t(_object):
-    __swig_setmethods__ = {}
-    __setattr__ = lambda self, name, value: _swig_setattr(self, qpol_iterator_t, name, value)
-    __swig_getmethods__ = {}
-    __getattr__ = lambda self, name: _swig_getattr(self, qpol_iterator_t, name)
-    __repr__ = _swig_repr
-    def __init__(self): 
-        this = _qpol.new_qpol_iterator_t()
-        try: self.this.append(this)
-        except: self.this = this
-    __swig_destroy__ = _qpol.delete_qpol_iterator_t
-    __del__ = lambda self : None;
-    def item(self): return _qpol.qpol_iterator_t_item(self)
-    def next_(self): return _qpol.qpol_iterator_t_next_(self)
-    def isend(self): return _qpol.qpol_iterator_t_isend(self)
-    def size(self): return _qpol.qpol_iterator_t_size(self)
-qpol_iterator_t_swigregister = _qpol.qpol_iterator_t_swigregister
-qpol_iterator_t_swigregister(qpol_iterator_t)
-
-class qpol_type_t(_object):
-    __swig_setmethods__ = {}
-    __setattr__ = lambda self, name, value: _swig_setattr(self, qpol_type_t, name, value)
-    __swig_getmethods__ = {}
-    __getattr__ = lambda self, name: _swig_getattr(self, qpol_type_t, name)
-    __repr__ = _swig_repr
-    def __init__(self, *args): 
-        this = _qpol.new_qpol_type_t(*args)
-        try: self.this.append(this)
-        except: self.this = this
-    __swig_destroy__ = _qpol.delete_qpol_type_t
-    __del__ = lambda self : None;
-    def name(self, *args): return _qpol.qpol_type_t_name(self, *args)
-    def value(self, *args): return _qpol.qpol_type_t_value(self, *args)
-    def isalias(self, *args): return _qpol.qpol_type_t_isalias(self, *args)
-    def isattr(self, *args): return _qpol.qpol_type_t_isattr(self, *args)
-    def ispermissive(self, *args): return _qpol.qpol_type_t_ispermissive(self, *args)
-    @QpolGenerator(_qpol.qpol_type_from_void) 
-    def type_iter(self, *args): return _qpol.qpol_type_t_type_iter(self, *args)
-    @QpolGenerator(_qpol.qpol_type_from_void) 
-    def attr_iter(self, *args): return _qpol.qpol_type_t_attr_iter(self, *args)
-    @QpolGenerator(_qpol.to_str) 
-    def alias_iter(self, *args): return _qpol.qpol_type_t_alias_iter(self, *args)
-qpol_type_t_swigregister = _qpol.qpol_type_t_swigregister
-qpol_type_t_swigregister(qpol_type_t)
-
-
-def qpol_type_from_void(*args):
-  return _qpol.qpol_type_from_void(*args)
-qpol_type_from_void = _qpol.qpol_type_from_void
-class qpol_role_t(_object):
-    __swig_setmethods__ = {}
-    __setattr__ = lambda self, name, value: _swig_setattr(self, qpol_role_t, name, value)
-    __swig_getmethods__ = {}
-    __getattr__ = lambda self, name: _swig_getattr(self, qpol_role_t, name)
-    __repr__ = _swig_repr
-    def __init__(self, *args): 
-        this = _qpol.new_qpol_role_t(*args)
-        try: self.this.append(this)
-        except: self.this = this
-    __swig_destroy__ = _qpol.delete_qpol_role_t
-    __del__ = lambda self : None;
-    def value(self, *args): return _qpol.qpol_role_t_value(self, *args)
-    def name(self, *args): return _qpol.qpol_role_t_name(self, *args)
-    @QpolGenerator(_qpol.qpol_type_from_void) 
-    def type_iter(self, *args): return _qpol.qpol_role_t_type_iter(self, *args)
-    def dominate_iter(self, *args): return _qpol.qpol_role_t_dominate_iter(self, *args)
-qpol_role_t_swigregister = _qpol.qpol_role_t_swigregister
-qpol_role_t_swigregister(qpol_role_t)
-
-
-def qpol_role_from_void(*args):
-  return _qpol.qpol_role_from_void(*args)
-qpol_role_from_void = _qpol.qpol_role_from_void
-class qpol_level_t(_object):
-    __swig_setmethods__ = {}
-    __setattr__ = lambda self, name, value: _swig_setattr(self, qpol_level_t, name, value)
-    __swig_getmethods__ = {}
-    __getattr__ = lambda self, name: _swig_getattr(self, qpol_level_t, name)
-    __repr__ = _swig_repr
-    def __init__(self, *args): 
-        this = _qpol.new_qpol_level_t(*args)
-        try: self.this.append(this)
-        except: self.this = this
-    __swig_destroy__ = _qpol.delete_qpol_level_t
-    __del__ = lambda self : None;
-    def isalias(self, *args): return _qpol.qpol_level_t_isalias(self, *args)
-    def value(self, *args): return _qpol.qpol_level_t_value(self, *args)
-    def name(self, *args): return _qpol.qpol_level_t_name(self, *args)
-    @QpolGenerator(_qpol.qpol_cat_from_void) 
-    def cat_iter(self, *args): return _qpol.qpol_level_t_cat_iter(self, *args)
-    @QpolGenerator(_qpol.to_str) 
-    def alias_iter(self, *args): return _qpol.qpol_level_t_alias_iter(self, *args)
-qpol_level_t_swigregister = _qpol.qpol_level_t_swigregister
-qpol_level_t_swigregister(qpol_level_t)
-
-
-def qpol_level_from_void(*args):
-  return _qpol.qpol_level_from_void(*args)
-qpol_level_from_void = _qpol.qpol_level_from_void
-class qpol_cat_t(_object):
-    __swig_setmethods__ = {}
-    __setattr__ = lambda self, name, value: _swig_setattr(self, qpol_cat_t, name, value)
-    __swig_getmethods__ = {}
-    __getattr__ = lambda self, name: _swig_getattr(self, qpol_cat_t, name)
-    __repr__ = _swig_repr
-    def __init__(self, *args): 
-        this = _qpol.new_qpol_cat_t(*args)
-        try: self.this.append(this)
-        except: self.this = this
-    __swig_destroy__ = _qpol.delete_qpol_cat_t
-    __del__ = lambda self : None;
-    def isalias(self, *args): return _qpol.qpol_cat_t_isalias(self, *args)
-    def value(self, *args): return _qpol.qpol_cat_t_value(self, *args)
-    def name(self, *args): return _qpol.qpol_cat_t_name(self, *args)
-    @QpolGenerator(_qpol.to_str) 
-    def alias_iter(self, *args): return _qpol.qpol_cat_t_alias_iter(self, *args)
-qpol_cat_t_swigregister = _qpol.qpol_cat_t_swigregister
-qpol_cat_t_swigregister(qpol_cat_t)
-
-
-def qpol_cat_from_void(*args):
-  return _qpol.qpol_cat_from_void(*args)
-qpol_cat_from_void = _qpol.qpol_cat_from_void
-class qpol_mls_range_t(_object):
-    __swig_setmethods__ = {}
-    __setattr__ = lambda self, name, value: _swig_setattr(self, qpol_mls_range_t, name, value)
-    __swig_getmethods__ = {}
-    __getattr__ = lambda self, name: _swig_getattr(self, qpol_mls_range_t, name)
-    __repr__ = _swig_repr
-    def __init__(self, *args): 
-        this = _qpol.new_qpol_mls_range_t(*args)
-        try: self.this.append(this)
-        except: self.this = this
-    __swig_destroy__ = _qpol.delete_qpol_mls_range_t
-    __del__ = lambda self : None;
-    def high_level(self, *args): return _qpol.qpol_mls_range_t_high_level(self, *args)
-    def low_level(self, *args): return _qpol.qpol_mls_range_t_low_level(self, *args)
-qpol_mls_range_t_swigregister = _qpol.qpol_mls_range_t_swigregister
-qpol_mls_range_t_swigregister(qpol_mls_range_t)
-
-
-def qpol_mls_range_from_void(*args):
-  return _qpol.qpol_mls_range_from_void(*args)
-qpol_mls_range_from_void = _qpol.qpol_mls_range_from_void
-class qpol_semantic_level_t(_object):
-    __swig_setmethods__ = {}
-    __setattr__ = lambda self, name, value: _swig_setattr(self, qpol_semantic_level_t, name, value)
-    __swig_getmethods__ = {}
-    __getattr__ = lambda self, name: _swig_getattr(self, qpol_semantic_level_t, name)
-    __repr__ = _swig_repr
-    def __init__(self, *args): 
-        this = _qpol.new_qpol_semantic_level_t(*args)
-        try: self.this.append(this)
-        except: self.this = this
-    __swig_destroy__ = _qpol.delete_qpol_semantic_level_t
-    __del__ = lambda self : None;
-    def add_cats(self, *args): return _qpol.qpol_semantic_level_t_add_cats(self, *args)
-qpol_semantic_level_t_swigregister = _qpol.qpol_semantic_level_t_swigregister
-qpol_semantic_level_t_swigregister(qpol_semantic_level_t)
-
-class qpol_mls_level_t(_object):
-    __swig_setmethods__ = {}
-    __setattr__ = lambda self, name, value: _swig_setattr(self, qpol_mls_level_t, name, value)
-    __swig_getmethods__ = {}
-    __getattr__ = lambda self, name: _swig_getattr(self, qpol_mls_level_t, name)
-    __repr__ = _swig_repr
-    def __init__(self, *args): 
-        this = _qpol.new_qpol_mls_level_t(*args)
-        try: self.this.append(this)
-        except: self.this = this
-    __swig_destroy__ = _qpol.delete_qpol_mls_level_t
-    __del__ = lambda self : None;
-    def sens_name(self, *args): return _qpol.qpol_mls_level_t_sens_name(self, *args)
-    @QpolGenerator(_qpol.qpol_cat_from_void) 
-    def cat_iter(self, *args): return _qpol.qpol_mls_level_t_cat_iter(self, *args)
-qpol_mls_level_t_swigregister = _qpol.qpol_mls_level_t_swigregister
-qpol_mls_level_t_swigregister(qpol_mls_level_t)
-
-
-def qpol_mls_level_from_void(*args):
-  return _qpol.qpol_mls_level_from_void(*args)
-qpol_mls_level_from_void = _qpol.qpol_mls_level_from_void
-class qpol_user_t(_object):
-    __swig_setmethods__ = {}
-    __setattr__ = lambda self, name, value: _swig_setattr(self, qpol_user_t, name, value)
-    __swig_getmethods__ = {}
-    __getattr__ = lambda self, name: _swig_getattr(self, qpol_user_t, name)
-    __repr__ = _swig_repr
-    def __init__(self, *args): 
-        this = _qpol.new_qpol_user_t(*args)
-        try: self.this.append(this)
-        except: self.this = this
-    __swig_destroy__ = _qpol.delete_qpol_user_t
-    __del__ = lambda self : None;
-    def value(self, *args): return _qpol.qpol_user_t_value(self, *args)
-    @QpolGenerator(_qpol.qpol_role_from_void) 
-    def role_iter(self, *args): return _qpol.qpol_user_t_role_iter(self, *args)
-    def range(self, *args): return _qpol.qpol_user_t_range(self, *args)
-    def name(self, *args): return _qpol.qpol_user_t_name(self, *args)
-    def dfltlevel(self, *args): return _qpol.qpol_user_t_dfltlevel(self, *args)
-qpol_user_t_swigregister = _qpol.qpol_user_t_swigregister
-qpol_user_t_swigregister(qpol_user_t)
-
-
-def qpol_user_from_void(*args):
-  return _qpol.qpol_user_from_void(*args)
-qpol_user_from_void = _qpol.qpol_user_from_void
-class qpol_bool_t(_object):
-    __swig_setmethods__ = {}
-    __setattr__ = lambda self, name, value: _swig_setattr(self, qpol_bool_t, name, value)
-    __swig_getmethods__ = {}
-    __getattr__ = lambda self, name: _swig_getattr(self, qpol_bool_t, name)
-    __repr__ = _swig_repr
-    def __init__(self, *args): 
-        this = _qpol.new_qpol_bool_t(*args)
-        try: self.this.append(this)
-        except: self.this = this
-    __swig_destroy__ = _qpol.delete_qpol_bool_t
-    __del__ = lambda self : None;
-    def value(self, *args): return _qpol.qpol_bool_t_value(self, *args)
-    def state(self, *args): return _qpol.qpol_bool_t_state(self, *args)
-    def name(self, *args): return _qpol.qpol_bool_t_name(self, *args)
-qpol_bool_t_swigregister = _qpol.qpol_bool_t_swigregister
-qpol_bool_t_swigregister(qpol_bool_t)
-
-
-def qpol_bool_from_void(*args):
-  return _qpol.qpol_bool_from_void(*args)
-qpol_bool_from_void = _qpol.qpol_bool_from_void
-class qpol_context_t(_object):
-    __swig_setmethods__ = {}
-    __setattr__ = lambda self, name, value: _swig_setattr(self, qpol_context_t, name, value)
-    __swig_getmethods__ = {}
-    __getattr__ = lambda self, name: _swig_getattr(self, qpol_context_t, name)
-    __repr__ = _swig_repr
-    def __init__(self): 
-        this = _qpol.new_qpol_context_t()
-        try: self.this.append(this)
-        except: self.this = this
-    __swig_destroy__ = _qpol.delete_qpol_context_t
-    __del__ = lambda self : None;
-    def user(self, *args): return _qpol.qpol_context_t_user(self, *args)
-    def role(self, *args): return _qpol.qpol_context_t_role(self, *args)
-    def type_(self, *args): return _qpol.qpol_context_t_type_(self, *args)
-    def range(self, *args): return _qpol.qpol_context_t_range(self, *args)
-qpol_context_t_swigregister = _qpol.qpol_context_t_swigregister
-qpol_context_t_swigregister(qpol_context_t)
-
-
-def qpol_context_from_void(*args):
-  return _qpol.qpol_context_from_void(*args)
-qpol_context_from_void = _qpol.qpol_context_from_void
-class qpol_class_t(_object):
-    __swig_setmethods__ = {}
-    __setattr__ = lambda self, name, value: _swig_setattr(self, qpol_class_t, name, value)
-    __swig_getmethods__ = {}
-    __getattr__ = lambda self, name: _swig_getattr(self, qpol_class_t, name)
-    __repr__ = _swig_repr
-    def __init__(self, *args): 
-        this = _qpol.new_qpol_class_t(*args)
-        try: self.this.append(this)
-        except: self.this = this
-    __swig_destroy__ = _qpol.delete_qpol_class_t
-    __del__ = lambda self : None;
-    def value(self, *args): return _qpol.qpol_class_t_value(self, *args)
-    def common(self, *args): return _qpol.qpol_class_t_common(self, *args)
-    @QpolGenerator(_qpol.to_str) 
-    def perm_iter(self, *args): return _qpol.qpol_class_t_perm_iter(self, *args)
-    @QpolGenerator(_qpol.qpol_constraint_from_void) 
-    def constraint_iter(self, *args): return _qpol.qpol_class_t_constraint_iter(self, *args)
-    @QpolGenerator(_qpol.qpol_validatetrans_from_void) 
-    def validatetrans_iter(self, *args): return _qpol.qpol_class_t_validatetrans_iter(self, *args)
-    def name(self, *args): return _qpol.qpol_class_t_name(self, *args)
-qpol_class_t_swigregister = _qpol.qpol_class_t_swigregister
-qpol_class_t_swigregister(qpol_class_t)
-
-
-def qpol_class_from_void(*args):
-  return _qpol.qpol_class_from_void(*args)
-qpol_class_from_void = _qpol.qpol_class_from_void
-class qpol_common_t(_object):
-    __swig_setmethods__ = {}
-    __setattr__ = lambda self, name, value: _swig_setattr(self, qpol_common_t, name, value)
-    __swig_getmethods__ = {}
-    __getattr__ = lambda self, name: _swig_getattr(self, qpol_common_t, name)
-    __repr__ = _swig_repr
-    def __init__(self, *args): 
-        this = _qpol.new_qpol_common_t(*args)
-        try: self.this.append(this)
-        except: self.this = this
-    __swig_destroy__ = _qpol.delete_qpol_common_t
-    __del__ = lambda self : None;
-    def value(self, *args): return _qpol.qpol_common_t_value(self, *args)
-    @QpolGenerator(_qpol.to_str) 
-    def perm_iter(self, *args): return _qpol.qpol_common_t_perm_iter(self, *args)
-    def name(self, *args): return _qpol.qpol_common_t_name(self, *args)
-qpol_common_t_swigregister = _qpol.qpol_common_t_swigregister
-qpol_common_t_swigregister(qpol_common_t)
-
-
-def qpol_common_from_void(*args):
-  return _qpol.qpol_common_from_void(*args)
-qpol_common_from_void = _qpol.qpol_common_from_void
-QPOL_FS_USE_XATTR = _qpol.QPOL_FS_USE_XATTR
-QPOL_FS_USE_TRANS = _qpol.QPOL_FS_USE_TRANS
-QPOL_FS_USE_TASK = _qpol.QPOL_FS_USE_TASK
-QPOL_FS_USE_GENFS = _qpol.QPOL_FS_USE_GENFS
-QPOL_FS_USE_NONE = _qpol.QPOL_FS_USE_NONE
-QPOL_FS_USE_PSID = _qpol.QPOL_FS_USE_PSID
-class qpol_fs_use_t(_object):
-    __swig_setmethods__ = {}
-    __setattr__ = lambda self, name, value: _swig_setattr(self, qpol_fs_use_t, name, value)
-    __swig_getmethods__ = {}
-    __getattr__ = lambda self, name: _swig_getattr(self, qpol_fs_use_t, name)
-    __repr__ = _swig_repr
-    def __init__(self, *args): 
-        this = _qpol.new_qpol_fs_use_t(*args)
-        try: self.this.append(this)
-        except: self.this = this
-    __swig_destroy__ = _qpol.delete_qpol_fs_use_t
-    __del__ = lambda self : None;
-    def name(self, *args): return _qpol.qpol_fs_use_t_name(self, *args)
-    def behavior(self, *args): return _qpol.qpol_fs_use_t_behavior(self, *args)
-    def context(self, *args): return _qpol.qpol_fs_use_t_context(self, *args)
-qpol_fs_use_t_swigregister = _qpol.qpol_fs_use_t_swigregister
-qpol_fs_use_t_swigregister(qpol_fs_use_t)
-
-
-def qpol_fs_use_from_void(*args):
-  return _qpol.qpol_fs_use_from_void(*args)
-qpol_fs_use_from_void = _qpol.qpol_fs_use_from_void
-QPOL_CLASS_ALL = _qpol.QPOL_CLASS_ALL
-QPOL_CLASS_BLK_FILE = _qpol.QPOL_CLASS_BLK_FILE
-QPOL_CLASS_CHR_FILE = _qpol.QPOL_CLASS_CHR_FILE
-QPOL_CLASS_DIR = _qpol.QPOL_CLASS_DIR
-QPOL_CLASS_FIFO_FILE = _qpol.QPOL_CLASS_FIFO_FILE
-QPOL_CLASS_FILE = _qpol.QPOL_CLASS_FILE
-QPOL_CLASS_LNK_FILE = _qpol.QPOL_CLASS_LNK_FILE
-QPOL_CLASS_SOCK_FILE = _qpol.QPOL_CLASS_SOCK_FILE
-class qpol_genfscon_t(_object):
-    __swig_setmethods__ = {}
-    __setattr__ = lambda self, name, value: _swig_setattr(self, qpol_genfscon_t, name, value)
-    __swig_getmethods__ = {}
-    __getattr__ = lambda self, name: _swig_getattr(self, qpol_genfscon_t, name)
-    __repr__ = _swig_repr
-    def __init__(self, *args): 
-        this = _qpol.new_qpol_genfscon_t(*args)
-        try: self.this.append(this)
-        except: self.this = this
-    __swig_destroy__ = _qpol.delete_qpol_genfscon_t
-    __del__ = lambda self : None;
-    def name(self, *args): return _qpol.qpol_genfscon_t_name(self, *args)
-    def path(self, *args): return _qpol.qpol_genfscon_t_path(self, *args)
-    def object_class(self, *args): return _qpol.qpol_genfscon_t_object_class(self, *args)
-    def context(self, *args): return _qpol.qpol_genfscon_t_context(self, *args)
-qpol_genfscon_t_swigregister = _qpol.qpol_genfscon_t_swigregister
-qpol_genfscon_t_swigregister(qpol_genfscon_t)
-
-
-def qpol_genfscon_from_void(*args):
-  return _qpol.qpol_genfscon_from_void(*args)
-qpol_genfscon_from_void = _qpol.qpol_genfscon_from_void
-class qpol_isid_t(_object):
-    __swig_setmethods__ = {}
-    __setattr__ = lambda self, name, value: _swig_setattr(self, qpol_isid_t, name, value)
-    __swig_getmethods__ = {}
-    __getattr__ = lambda self, name: _swig_getattr(self, qpol_isid_t, name)
-    __repr__ = _swig_repr
-    def __init__(self, *args): 
-        this = _qpol.new_qpol_isid_t(*args)
-        try: self.this.append(this)
-        except: self.this = this
-    __swig_destroy__ = _qpol.delete_qpol_isid_t
-    __del__ = lambda self : None;
-    def name(self, *args): return _qpol.qpol_isid_t_name(self, *args)
-    def context(self, *args): return _qpol.qpol_isid_t_context(self, *args)
-qpol_isid_t_swigregister = _qpol.qpol_isid_t_swigregister
-qpol_isid_t_swigregister(qpol_isid_t)
-
-
-def qpol_isid_from_void(*args):
-  return _qpol.qpol_isid_from_void(*args)
-qpol_isid_from_void = _qpol.qpol_isid_from_void
-class qpol_netifcon_t(_object):
-    __swig_setmethods__ = {}
-    __setattr__ = lambda self, name, value: _swig_setattr(self, qpol_netifcon_t, name, value)
-    __swig_getmethods__ = {}
-    __getattr__ = lambda self, name: _swig_getattr(self, qpol_netifcon_t, name)
-    __repr__ = _swig_repr
-    def __init__(self, *args): 
-        this = _qpol.new_qpol_netifcon_t(*args)
-        try: self.this.append(this)
-        except: self.this = this
-    __swig_destroy__ = _qpol.delete_qpol_netifcon_t
-    __del__ = lambda self : None;
-    def name(self, *args): return _qpol.qpol_netifcon_t_name(self, *args)
-    def msg_con(self, *args): return _qpol.qpol_netifcon_t_msg_con(self, *args)
-    def if_con(self, *args): return _qpol.qpol_netifcon_t_if_con(self, *args)
-qpol_netifcon_t_swigregister = _qpol.qpol_netifcon_t_swigregister
-qpol_netifcon_t_swigregister(qpol_netifcon_t)
-
-
-def qpol_netifcon_from_void(*args):
-  return _qpol.qpol_netifcon_from_void(*args)
-qpol_netifcon_from_void = _qpol.qpol_netifcon_from_void
-QPOL_IPV4 = _qpol.QPOL_IPV4
-QPOL_IPV6 = _qpol.QPOL_IPV6
-class qpol_nodecon_t(_object):
-    __swig_setmethods__ = {}
-    __setattr__ = lambda self, name, value: _swig_setattr(self, qpol_nodecon_t, name, value)
-    __swig_getmethods__ = {}
-    __getattr__ = lambda self, name: _swig_getattr(self, qpol_nodecon_t, name)
-    __repr__ = _swig_repr
-    def __init__(self, *args): 
-        this = _qpol.new_qpol_nodecon_t(*args)
-        try: self.this.append(this)
-        except: self.this = this
-    __swig_destroy__ = _qpol.delete_qpol_nodecon_t
-    __del__ = lambda self : None;
-    def addr(self, *args): return _qpol.qpol_nodecon_t_addr(self, *args)
-    def mask(self, *args): return _qpol.qpol_nodecon_t_mask(self, *args)
-    def protocol(self, *args): return _qpol.qpol_nodecon_t_protocol(self, *args)
-    def context(self, *args): return _qpol.qpol_nodecon_t_context(self, *args)
-qpol_nodecon_t_swigregister = _qpol.qpol_nodecon_t_swigregister
-qpol_nodecon_t_swigregister(qpol_nodecon_t)
-
-
-def qpol_nodecon_from_void(*args):
-  return _qpol.qpol_nodecon_from_void(*args)
-qpol_nodecon_from_void = _qpol.qpol_nodecon_from_void
-IPPROTO_TCP = _qpol.IPPROTO_TCP
-IPPROTO_UDP = _qpol.IPPROTO_UDP
-class qpol_portcon_t(_object):
-    __swig_setmethods__ = {}
-    __setattr__ = lambda self, name, value: _swig_setattr(self, qpol_portcon_t, name, value)
-    __swig_getmethods__ = {}
-    __getattr__ = lambda self, name: _swig_getattr(self, qpol_portcon_t, name)
-    __repr__ = _swig_repr
-    def __init__(self, *args): 
-        this = _qpol.new_qpol_portcon_t(*args)
-        try: self.this.append(this)
-        except: self.this = this
-    __swig_destroy__ = _qpol.delete_qpol_portcon_t
-    __del__ = lambda self : None;
-    def low_port(self, *args): return _qpol.qpol_portcon_t_low_port(self, *args)
-    def high_port(self, *args): return _qpol.qpol_portcon_t_high_port(self, *args)
-    def protocol(self, *args): return _qpol.qpol_portcon_t_protocol(self, *args)
-    def context(self, *args): return _qpol.qpol_portcon_t_context(self, *args)
-qpol_portcon_t_swigregister = _qpol.qpol_portcon_t_swigregister
-qpol_portcon_t_swigregister(qpol_portcon_t)
-
-
-def qpol_portcon_from_void(*args):
-  return _qpol.qpol_portcon_from_void(*args)
-qpol_portcon_from_void = _qpol.qpol_portcon_from_void
-class qpol_constraint_t(_object):
-    __swig_setmethods__ = {}
-    __setattr__ = lambda self, name, value: _swig_setattr(self, qpol_constraint_t, name, value)
-    __swig_getmethods__ = {}
-    __getattr__ = lambda self, name: _swig_getattr(self, qpol_constraint_t, name)
-    __repr__ = _swig_repr
-    def __init__(self): 
-        this = _qpol.new_qpol_constraint_t()
-        try: self.this.append(this)
-        except: self.this = this
-    __swig_destroy__ = _qpol.delete_qpol_constraint_t
-    __del__ = lambda self : None;
-    def object_class(self, *args): return _qpol.qpol_constraint_t_object_class(self, *args)
-    @QpolGenerator(_qpol.to_str) 
-    def perm_iter(self, *args): return _qpol.qpol_constraint_t_perm_iter(self, *args)
-    @QpolGenerator(_qpol.qpol_constraint_expr_node_from_void) 
-    def expr_iter(self, *args): return _qpol.qpol_constraint_t_expr_iter(self, *args)
-qpol_constraint_t_swigregister = _qpol.qpol_constraint_t_swigregister
-qpol_constraint_t_swigregister(qpol_constraint_t)
-
-
-def qpol_constraint_from_void(*args):
-  return _qpol.qpol_constraint_from_void(*args)
-qpol_constraint_from_void = _qpol.qpol_constraint_from_void
-class qpol_validatetrans_t(_object):
-    __swig_setmethods__ = {}
-    __setattr__ = lambda self, name, value: _swig_setattr(self, qpol_validatetrans_t, name, value)
-    __swig_getmethods__ = {}
-    __getattr__ = lambda self, name: _swig_getattr(self, qpol_validatetrans_t, name)
-    __repr__ = _swig_repr
-    def __init__(self): 
-        this = _qpol.new_qpol_validatetrans_t()
-        try: self.this.append(this)
-        except: self.this = this
-    __swig_destroy__ = _qpol.delete_qpol_validatetrans_t
-    __del__ = lambda self : None;
-    def object_class(self, *args): return _qpol.qpol_validatetrans_t_object_class(self, *args)
-    @QpolGenerator(_qpol.qpol_constraint_expr_node_from_void) 
-    def expr_iter(self, *args): return _qpol.qpol_validatetrans_t_expr_iter(self, *args)
-qpol_validatetrans_t_swigregister = _qpol.qpol_validatetrans_t_swigregister
-qpol_validatetrans_t_swigregister(qpol_validatetrans_t)
-
-
-def qpol_validatetrans_from_void(*args):
-  return _qpol.qpol_validatetrans_from_void(*args)
-qpol_validatetrans_from_void = _qpol.qpol_validatetrans_from_void
-QPOL_CEXPR_TYPE_NOT = _qpol.QPOL_CEXPR_TYPE_NOT
-QPOL_CEXPR_TYPE_AND = _qpol.QPOL_CEXPR_TYPE_AND
-QPOL_CEXPR_TYPE_OR = _qpol.QPOL_CEXPR_TYPE_OR
-QPOL_CEXPR_TYPE_ATTR = _qpol.QPOL_CEXPR_TYPE_ATTR
-QPOL_CEXPR_TYPE_NAMES = _qpol.QPOL_CEXPR_TYPE_NAMES
-QPOL_CEXPR_SYM_USER = _qpol.QPOL_CEXPR_SYM_USER
-QPOL_CEXPR_SYM_ROLE = _qpol.QPOL_CEXPR_SYM_ROLE
-QPOL_CEXPR_SYM_TYPE = _qpol.QPOL_CEXPR_SYM_TYPE
-QPOL_CEXPR_SYM_TARGET = _qpol.QPOL_CEXPR_SYM_TARGET
-QPOL_CEXPR_SYM_XTARGET = _qpol.QPOL_CEXPR_SYM_XTARGET
-QPOL_CEXPR_SYM_L1L2 = _qpol.QPOL_CEXPR_SYM_L1L2
-QPOL_CEXPR_SYM_L1H2 = _qpol.QPOL_CEXPR_SYM_L1H2
-QPOL_CEXPR_SYM_H1L2 = _qpol.QPOL_CEXPR_SYM_H1L2
-QPOL_CEXPR_SYM_H1H2 = _qpol.QPOL_CEXPR_SYM_H1H2
-QPOL_CEXPR_SYM_L1H1 = _qpol.QPOL_CEXPR_SYM_L1H1
-QPOL_CEXPR_SYM_L2H2 = _qpol.QPOL_CEXPR_SYM_L2H2
-QPOL_CEXPR_OP_EQ = _qpol.QPOL_CEXPR_OP_EQ
-QPOL_CEXPR_OP_NEQ = _qpol.QPOL_CEXPR_OP_NEQ
-QPOL_CEXPR_OP_DOM = _qpol.QPOL_CEXPR_OP_DOM
-QPOL_CEXPR_OP_DOMBY = _qpol.QPOL_CEXPR_OP_DOMBY
-QPOL_CEXPR_OP_INCOMP = _qpol.QPOL_CEXPR_OP_INCOMP
-class qpol_constraint_expr_node_t(_object):
-    __swig_setmethods__ = {}
-    __setattr__ = lambda self, name, value: _swig_setattr(self, qpol_constraint_expr_node_t, name, value)
-    __swig_getmethods__ = {}
-    __getattr__ = lambda self, name: _swig_getattr(self, qpol_constraint_expr_node_t, name)
-    __repr__ = _swig_repr
-    def __init__(self): 
-        this = _qpol.new_qpol_constraint_expr_node_t()
-        try: self.this.append(this)
-        except: self.this = this
-    __swig_destroy__ = _qpol.delete_qpol_constraint_expr_node_t
-    __del__ = lambda self : None;
-    def expr_type(self, *args): return _qpol.qpol_constraint_expr_node_t_expr_type(self, *args)
-    def sym_type(self, *args): return _qpol.qpol_constraint_expr_node_t_sym_type(self, *args)
-    def op(self, *args): return _qpol.qpol_constraint_expr_node_t_op(self, *args)
-    @QpolGenerator(_qpol.to_str) 
-    def names_iter(self, *args): return _qpol.qpol_constraint_expr_node_t_names_iter(self, *args)
-qpol_constraint_expr_node_t_swigregister = _qpol.qpol_constraint_expr_node_t_swigregister
-qpol_constraint_expr_node_t_swigregister(qpol_constraint_expr_node_t)
-
-
-def qpol_constraint_expr_node_from_void(*args):
-  return _qpol.qpol_constraint_expr_node_from_void(*args)
-qpol_constraint_expr_node_from_void = _qpol.qpol_constraint_expr_node_from_void
-class qpol_role_allow_t(_object):
-    __swig_setmethods__ = {}
-    __setattr__ = lambda self, name, value: _swig_setattr(self, qpol_role_allow_t, name, value)
-    __swig_getmethods__ = {}
-    __getattr__ = lambda self, name: _swig_getattr(self, qpol_role_allow_t, name)
-    __repr__ = _swig_repr
-    def __init__(self): 
-        this = _qpol.new_qpol_role_allow_t()
-        try: self.this.append(this)
-        except: self.this = this
-    __swig_destroy__ = _qpol.delete_qpol_role_allow_t
-    __del__ = lambda self : None;
-    def rule_type(self,policy):
-        return "allow"
-
-    def source_role(self, *args): return _qpol.qpol_role_allow_t_source_role(self, *args)
-    def target_role(self, *args): return _qpol.qpol_role_allow_t_target_role(self, *args)
-qpol_role_allow_t_swigregister = _qpol.qpol_role_allow_t_swigregister
-qpol_role_allow_t_swigregister(qpol_role_allow_t)
-
-
-def qpol_role_allow_from_void(*args):
-  return _qpol.qpol_role_allow_from_void(*args)
-qpol_role_allow_from_void = _qpol.qpol_role_allow_from_void
-class qpol_role_trans_t(_object):
-    __swig_setmethods__ = {}
-    __setattr__ = lambda self, name, value: _swig_setattr(self, qpol_role_trans_t, name, value)
-    __swig_getmethods__ = {}
-    __getattr__ = lambda self, name: _swig_getattr(self, qpol_role_trans_t, name)
-    __repr__ = _swig_repr
-    def __init__(self): 
-        this = _qpol.new_qpol_role_trans_t()
-        try: self.this.append(this)
-        except: self.this = this
-    __swig_destroy__ = _qpol.delete_qpol_role_trans_t
-    __del__ = lambda self : None;
-    def rule_type(self,policy):
-        return "role_transition"
-
-    def source_role(self, *args): return _qpol.qpol_role_trans_t_source_role(self, *args)
-    def target_type(self, *args): return _qpol.qpol_role_trans_t_target_type(self, *args)
-    def object_class(self, *args): return _qpol.qpol_role_trans_t_object_class(self, *args)
-    def default_role(self, *args): return _qpol.qpol_role_trans_t_default_role(self, *args)
-qpol_role_trans_t_swigregister = _qpol.qpol_role_trans_t_swigregister
-qpol_role_trans_t_swigregister(qpol_role_trans_t)
-
-
-def qpol_role_trans_from_void(*args):
-  return _qpol.qpol_role_trans_from_void(*args)
-qpol_role_trans_from_void = _qpol.qpol_role_trans_from_void
-class qpol_range_trans_t(_object):
-    __swig_setmethods__ = {}
-    __setattr__ = lambda self, name, value: _swig_setattr(self, qpol_range_trans_t, name, value)
-    __swig_getmethods__ = {}
-    __getattr__ = lambda self, name: _swig_getattr(self, qpol_range_trans_t, name)
-    __repr__ = _swig_repr
-    def __init__(self): 
-        this = _qpol.new_qpol_range_trans_t()
-        try: self.this.append(this)
-        except: self.this = this
-    __swig_destroy__ = _qpol.delete_qpol_range_trans_t
-    __del__ = lambda self : None;
-    def rule_type(self,policy):
-        return "range_transition"
-
-    def source_type(self, *args): return _qpol.qpol_range_trans_t_source_type(self, *args)
-    def target_type(self, *args): return _qpol.qpol_range_trans_t_target_type(self, *args)
-    def object_class(self, *args): return _qpol.qpol_range_trans_t_object_class(self, *args)
-    def range(self, *args): return _qpol.qpol_range_trans_t_range(self, *args)
-qpol_range_trans_t_swigregister = _qpol.qpol_range_trans_t_swigregister
-qpol_range_trans_t_swigregister(qpol_range_trans_t)
-
-
-def qpol_range_trans_from_void(*args):
-  return _qpol.qpol_range_trans_from_void(*args)
-qpol_range_trans_from_void = _qpol.qpol_range_trans_from_void
-QPOL_RULE_ALLOW = _qpol.QPOL_RULE_ALLOW
-QPOL_RULE_NEVERALLOW = _qpol.QPOL_RULE_NEVERALLOW
-QPOL_RULE_AUDITALLOW = _qpol.QPOL_RULE_AUDITALLOW
-QPOL_RULE_DONTAUDIT = _qpol.QPOL_RULE_DONTAUDIT
-class qpol_avrule_t(_object):
-    __swig_setmethods__ = {}
-    __setattr__ = lambda self, name, value: _swig_setattr(self, qpol_avrule_t, name, value)
-    __swig_getmethods__ = {}
-    __getattr__ = lambda self, name: _swig_getattr(self, qpol_avrule_t, name)
-    __repr__ = _swig_repr
-    def __init__(self): 
-        this = _qpol.new_qpol_avrule_t()
-        try: self.this.append(this)
-        except: self.this = this
-    __swig_destroy__ = _qpol.delete_qpol_avrule_t
-    __del__ = lambda self : None;
-    def rule_type(self, *args): return _qpol.qpol_avrule_t_rule_type(self, *args)
-    def source_type(self, *args): return _qpol.qpol_avrule_t_source_type(self, *args)
-    def target_type(self, *args): return _qpol.qpol_avrule_t_target_type(self, *args)
-    def object_class(self, *args): return _qpol.qpol_avrule_t_object_class(self, *args)
-    @QpolGenerator(_qpol.to_str) 
-    def perm_iter(self, *args): return _qpol.qpol_avrule_t_perm_iter(self, *args)
-    def cond(self, *args): return _qpol.qpol_avrule_t_cond(self, *args)
-    def is_enabled(self, *args): return _qpol.qpol_avrule_t_is_enabled(self, *args)
-    def which_list(self, *args): return _qpol.qpol_avrule_t_which_list(self, *args)
-    def syn_avrule_iter(self, *args): return _qpol.qpol_avrule_t_syn_avrule_iter(self, *args)
-qpol_avrule_t_swigregister = _qpol.qpol_avrule_t_swigregister
-qpol_avrule_t_swigregister(qpol_avrule_t)
-
-
-def qpol_avrule_from_void(*args):
-  return _qpol.qpol_avrule_from_void(*args)
-qpol_avrule_from_void = _qpol.qpol_avrule_from_void
-QPOL_RULE_TYPE_TRANS = _qpol.QPOL_RULE_TYPE_TRANS
-QPOL_RULE_TYPE_CHANGE = _qpol.QPOL_RULE_TYPE_CHANGE
-QPOL_RULE_TYPE_MEMBER = _qpol.QPOL_RULE_TYPE_MEMBER
-class qpol_terule_t(_object):
-    __swig_setmethods__ = {}
-    __setattr__ = lambda self, name, value: _swig_setattr(self, qpol_terule_t, name, value)
-    __swig_getmethods__ = {}
-    __getattr__ = lambda self, name: _swig_getattr(self, qpol_terule_t, name)
-    __repr__ = _swig_repr
-    def __init__(self): 
-        this = _qpol.new_qpol_terule_t()
-        try: self.this.append(this)
-        except: self.this = this
-    __swig_destroy__ = _qpol.delete_qpol_terule_t
-    __del__ = lambda self : None;
-    def rule_type(self, *args): return _qpol.qpol_terule_t_rule_type(self, *args)
-    def source_type(self, *args): return _qpol.qpol_terule_t_source_type(self, *args)
-    def target_type(self, *args): return _qpol.qpol_terule_t_target_type(self, *args)
-    def object_class(self, *args): return _qpol.qpol_terule_t_object_class(self, *args)
-    def default_type(self, *args): return _qpol.qpol_terule_t_default_type(self, *args)
-    def cond(self, *args): return _qpol.qpol_terule_t_cond(self, *args)
-    def is_enabled(self, *args): return _qpol.qpol_terule_t_is_enabled(self, *args)
-    def which_list(self, *args): return _qpol.qpol_terule_t_which_list(self, *args)
-    def syn_terule_iter(self, *args): return _qpol.qpol_terule_t_syn_terule_iter(self, *args)
-qpol_terule_t_swigregister = _qpol.qpol_terule_t_swigregister
-qpol_terule_t_swigregister(qpol_terule_t)
-
-
-def qpol_terule_from_void(*args):
-  return _qpol.qpol_terule_from_void(*args)
-qpol_terule_from_void = _qpol.qpol_terule_from_void
-class qpol_cond_t(_object):
-    __swig_setmethods__ = {}
-    __setattr__ = lambda self, name, value: _swig_setattr(self, qpol_cond_t, name, value)
-    __swig_getmethods__ = {}
-    __getattr__ = lambda self, name: _swig_getattr(self, qpol_cond_t, name)
-    __repr__ = _swig_repr
-    def __init__(self): 
-        this = _qpol.new_qpol_cond_t()
-        try: self.this.append(this)
-        except: self.this = this
-    __swig_destroy__ = _qpol.delete_qpol_cond_t
-    __del__ = lambda self : None;
-    @QpolGenerator(_qpol.qpol_cond_expr_node_from_void) 
-    def expr_node_iter(self, *args): return _qpol.qpol_cond_t_expr_node_iter(self, *args)
-    def av_true_iter(self, *args): return _qpol.qpol_cond_t_av_true_iter(self, *args)
-    def av_false_iter(self, *args): return _qpol.qpol_cond_t_av_false_iter(self, *args)
-    def te_true_iter(self, *args): return _qpol.qpol_cond_t_te_true_iter(self, *args)
-    def te_false_iter(self, *args): return _qpol.qpol_cond_t_te_false_iter(self, *args)
-    def evaluate(self, *args): return _qpol.qpol_cond_t_evaluate(self, *args)
-qpol_cond_t_swigregister = _qpol.qpol_cond_t_swigregister
-qpol_cond_t_swigregister(qpol_cond_t)
-
-
-def qpol_cond_from_void(*args):
-  return _qpol.qpol_cond_from_void(*args)
-qpol_cond_from_void = _qpol.qpol_cond_from_void
-QPOL_COND_EXPR_BOOL = _qpol.QPOL_COND_EXPR_BOOL
-QPOL_COND_EXPR_NOT = _qpol.QPOL_COND_EXPR_NOT
-QPOL_COND_EXPR_OR = _qpol.QPOL_COND_EXPR_OR
-QPOL_COND_EXPR_AND = _qpol.QPOL_COND_EXPR_AND
-QPOL_COND_EXPR_XOR = _qpol.QPOL_COND_EXPR_XOR
-QPOL_COND_EXPR_EQ = _qpol.QPOL_COND_EXPR_EQ
-QPOL_COND_EXPR_NEQ = _qpol.QPOL_COND_EXPR_NEQ
-class qpol_cond_expr_node_t(_object):
-    __swig_setmethods__ = {}
-    __setattr__ = lambda self, name, value: _swig_setattr(self, qpol_cond_expr_node_t, name, value)
-    __swig_getmethods__ = {}
-    __getattr__ = lambda self, name: _swig_getattr(self, qpol_cond_expr_node_t, name)
-    __repr__ = _swig_repr
-    def __init__(self): 
-        this = _qpol.new_qpol_cond_expr_node_t()
-        try: self.this.append(this)
-        except: self.this = this
-    __swig_destroy__ = _qpol.delete_qpol_cond_expr_node_t
-    __del__ = lambda self : None;
-    def expr_type(self, *args): return _qpol.qpol_cond_expr_node_t_expr_type(self, *args)
-    def get_boolean(self, *args): return _qpol.qpol_cond_expr_node_t_get_boolean(self, *args)
-qpol_cond_expr_node_t_swigregister = _qpol.qpol_cond_expr_node_t_swigregister
-qpol_cond_expr_node_t_swigregister(qpol_cond_expr_node_t)
-
-
-def qpol_cond_expr_node_from_void(*args):
-  return _qpol.qpol_cond_expr_node_from_void(*args)
-qpol_cond_expr_node_from_void = _qpol.qpol_cond_expr_node_from_void
-class qpol_filename_trans_t(_object):
-    __swig_setmethods__ = {}
-    __setattr__ = lambda self, name, value: _swig_setattr(self, qpol_filename_trans_t, name, value)
-    __swig_getmethods__ = {}
-    __getattr__ = lambda self, name: _swig_getattr(self, qpol_filename_trans_t, name)
-    __repr__ = _swig_repr
-    def __init__(self): 
-        this = _qpol.new_qpol_filename_trans_t()
-        try: self.this.append(this)
-        except: self.this = this
-    __swig_destroy__ = _qpol.delete_qpol_filename_trans_t
-    __del__ = lambda self : None;
-    def rule_type(self,policy):
-        return "type_transition"
-
-    def source_type(self, *args): return _qpol.qpol_filename_trans_t_source_type(self, *args)
-    def target_type(self, *args): return _qpol.qpol_filename_trans_t_target_type(self, *args)
-    def object_class(self, *args): return _qpol.qpol_filename_trans_t_object_class(self, *args)
-    def default_type(self, *args): return _qpol.qpol_filename_trans_t_default_type(self, *args)
-    def filename(self, *args): return _qpol.qpol_filename_trans_t_filename(self, *args)
-qpol_filename_trans_t_swigregister = _qpol.qpol_filename_trans_t_swigregister
-qpol_filename_trans_t_swigregister(qpol_filename_trans_t)
-
-
-def qpol_filename_trans_from_void(*args):
-  return _qpol.qpol_filename_trans_from_void(*args)
-qpol_filename_trans_from_void = _qpol.qpol_filename_trans_from_void
-class qpol_polcap_t(_object):
-    __swig_setmethods__ = {}
-    __setattr__ = lambda self, name, value: _swig_setattr(self, qpol_polcap_t, name, value)
-    __swig_getmethods__ = {}
-    __getattr__ = lambda self, name: _swig_getattr(self, qpol_polcap_t, name)
-    __repr__ = _swig_repr
-    def __init__(self): 
-        this = _qpol.new_qpol_polcap_t()
-        try: self.this.append(this)
-        except: self.this = this
-    __swig_destroy__ = _qpol.delete_qpol_polcap_t
-    __del__ = lambda self : None;
-    def name(self, *args): return _qpol.qpol_polcap_t_name(self, *args)
-qpol_polcap_t_swigregister = _qpol.qpol_polcap_t_swigregister
-qpol_polcap_t_swigregister(qpol_polcap_t)
-
-
-def qpol_polcap_from_void(*args):
-  return _qpol.qpol_polcap_from_void(*args)
-qpol_polcap_from_void = _qpol.qpol_polcap_from_void
-class qpol_typebounds_t(_object):
-    __swig_setmethods__ = {}
-    __setattr__ = lambda self, name, value: _swig_setattr(self, qpol_typebounds_t, name, value)
-    __swig_getmethods__ = {}
-    __getattr__ = lambda self, name: _swig_getattr(self, qpol_typebounds_t, name)
-    __repr__ = _swig_repr
-    def __init__(self): 
-        this = _qpol.new_qpol_typebounds_t()
-        try: self.this.append(this)
-        except: self.this = this
-    __swig_destroy__ = _qpol.delete_qpol_typebounds_t
-    __del__ = lambda self : None;
-    def parent_name(self, *args): return _qpol.qpol_typebounds_t_parent_name(self, *args)
-    def child_name(self, *args): return _qpol.qpol_typebounds_t_child_name(self, *args)
-qpol_typebounds_t_swigregister = _qpol.qpol_typebounds_t_swigregister
-qpol_typebounds_t_swigregister(qpol_typebounds_t)
-
-
-def qpol_typebounds_from_void(*args):
-  return _qpol.qpol_typebounds_from_void(*args)
-qpol_typebounds_from_void = _qpol.qpol_typebounds_from_void
-class qpol_rolebounds_t(_object):
-    __swig_setmethods__ = {}
-    __setattr__ = lambda self, name, value: _swig_setattr(self, qpol_rolebounds_t, name, value)
-    __swig_getmethods__ = {}
-    __getattr__ = lambda self, name: _swig_getattr(self, qpol_rolebounds_t, name)
-    __repr__ = _swig_repr
-    def __init__(self): 
-        this = _qpol.new_qpol_rolebounds_t()
-        try: self.this.append(this)
-        except: self.this = this
-    __swig_destroy__ = _qpol.delete_qpol_rolebounds_t
-    __del__ = lambda self : None;
-    def parent_name(self, *args): return _qpol.qpol_rolebounds_t_parent_name(self, *args)
-    def child_name(self, *args): return _qpol.qpol_rolebounds_t_child_name(self, *args)
-qpol_rolebounds_t_swigregister = _qpol.qpol_rolebounds_t_swigregister
-qpol_rolebounds_t_swigregister(qpol_rolebounds_t)
-
-
-def qpol_rolebounds_from_void(*args):
-  return _qpol.qpol_rolebounds_from_void(*args)
-qpol_rolebounds_from_void = _qpol.qpol_rolebounds_from_void
-class qpol_userbounds_t(_object):
-    __swig_setmethods__ = {}
-    __setattr__ = lambda self, name, value: _swig_setattr(self, qpol_userbounds_t, name, value)
-    __swig_getmethods__ = {}
-    __getattr__ = lambda self, name: _swig_getattr(self, qpol_userbounds_t, name)
-    __repr__ = _swig_repr
-    def __init__(self): 
-        this = _qpol.new_qpol_userbounds_t()
-        try: self.this.append(this)
-        except: self.this = this
-    __swig_destroy__ = _qpol.delete_qpol_userbounds_t
-    __del__ = lambda self : None;
-    def parent_name(self, *args): return _qpol.qpol_userbounds_t_parent_name(self, *args)
-    def child_name(self, *args): return _qpol.qpol_userbounds_t_child_name(self, *args)
-qpol_userbounds_t_swigregister = _qpol.qpol_userbounds_t_swigregister
-qpol_userbounds_t_swigregister(qpol_userbounds_t)
-
-
-def qpol_userbounds_from_void(*args):
-  return _qpol.qpol_userbounds_from_void(*args)
-qpol_userbounds_from_void = _qpol.qpol_userbounds_from_void
-class qpol_default_object_t(_object):
-    __swig_setmethods__ = {}
-    __setattr__ = lambda self, name, value: _swig_setattr(self, qpol_default_object_t, name, value)
-    __swig_getmethods__ = {}
-    __getattr__ = lambda self, name: _swig_getattr(self, qpol_default_object_t, name)
-    __repr__ = _swig_repr
-    def __init__(self): 
-        this = _qpol.new_qpol_default_object_t()
-        try: self.this.append(this)
-        except: self.this = this
-    __swig_destroy__ = _qpol.delete_qpol_default_object_t
-    __del__ = lambda self : None;
-    def object_class(self, *args): return _qpol.qpol_default_object_t_object_class(self, *args)
-    def user_default(self, *args): return _qpol.qpol_default_object_t_user_default(self, *args)
-    def role_default(self, *args): return _qpol.qpol_default_object_t_role_default(self, *args)
-    def type_default(self, *args): return _qpol.qpol_default_object_t_type_default(self, *args)
-    def range_default(self, *args): return _qpol.qpol_default_object_t_range_default(self, *args)
-qpol_default_object_t_swigregister = _qpol.qpol_default_object_t_swigregister
-qpol_default_object_t_swigregister(qpol_default_object_t)
-
-
-def qpol_default_object_from_void(*args):
-  return _qpol.qpol_default_object_from_void(*args)
-qpol_default_object_from_void = _qpol.qpol_default_object_from_void
-# This file is compatible with both classic and new-style classes.
-
-
diff --git a/lib/python2.7/site-packages/setoolsgui/setools/policyrep/rbacrule.py b/lib/python2.7/site-packages/setoolsgui/setools/policyrep/rbacrule.py
deleted file mode 100644
index aa6a0d0..0000000
--- a/lib/python2.7/site-packages/setoolsgui/setools/policyrep/rbacrule.py
+++ /dev/null
@@ -1,92 +0,0 @@
-# Copyright 2014, Tresys Technology, LLC
-#
-# This file is part of SETools.
-#
-# SETools is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Lesser General Public License as
-# published by the Free Software Foundation, either version 2.1 of
-# the License, or (at your option) any later version.
-#
-# SETools is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with SETools.  If not, see
-# <http://www.gnu.org/licenses/>.
-#
-from . import exception
-from . import qpol
-from . import rule
-from . import role
-from . import typeattr
-
-
-def rbac_rule_factory(policy, name):
-    """Factory function for creating RBAC rule objects."""
-
-    if isinstance(name, qpol.qpol_role_allow_t):
-        return RoleAllow(policy, name)
-    elif isinstance(name, qpol.qpol_role_trans_t):
-        return RoleTransition(policy, name)
-    else:
-        raise TypeError("RBAC rules cannot be looked up.")
-
-
-def validate_ruletype(types):
-    """Validate RBAC rule types."""
-    for t in types:
-        if t not in ["allow", "role_transition"]:
-            raise exception.InvalidRBACRuleType("{0} is not a valid RBAC rule type.".format(t))
-
-
-class RoleAllow(rule.PolicyRule):
-
-    """A role allow rule."""
-
-    def __str__(self):
-        return "allow {0.source} {0.target};".format(self)
-
-    @property
-    def source(self):
-        """The rule's source role."""
-        return role.role_factory(self.policy, self.qpol_symbol.source_role(self.policy))
-
-    @property
-    def target(self):
-        """The rule's target role."""
-        return role.role_factory(self.policy, self.qpol_symbol.target_role(self.policy))
-
-    @property
-    def tclass(self):
-        """The rule's object class."""
-        raise exception.RuleUseError("Role allow rules do not have an object class.")
-
-    @property
-    def default(self):
-        """The rule's default role."""
-        raise exception.RuleUseError("Role allow rules do not have a default role.")
-
-
-class RoleTransition(rule.PolicyRule):
-
-    """A role_transition rule."""
-
-    def __str__(self):
-        return "role_transition {0.source} {0.target}:{0.tclass} {0.default};".format(self)
-
-    @property
-    def source(self):
-        """The rule's source role."""
-        return role.role_factory(self.policy, self.qpol_symbol.source_role(self.policy))
-
-    @property
-    def target(self):
-        """The rule's target type/attribute."""
-        return typeattr.type_or_attr_factory(self.policy, self.qpol_symbol.target_type(self.policy))
-
-    @property
-    def default(self):
-        """The rule's default role."""
-        return role.role_factory(self.policy, self.qpol_symbol.default_role(self.policy))
diff --git a/lib/python2.7/site-packages/setoolsgui/setools/policyrep/role.py b/lib/python2.7/site-packages/setoolsgui/setools/policyrep/role.py
deleted file mode 100644
index 1d9fbe1..0000000
--- a/lib/python2.7/site-packages/setoolsgui/setools/policyrep/role.py
+++ /dev/null
@@ -1,81 +0,0 @@
-# Copyright 2014, Tresys Technology, LLC
-#
-# This file is part of SETools.
-#
-# SETools is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Lesser General Public License as
-# published by the Free Software Foundation, either version 2.1 of
-# the License, or (at your option) any later version.
-#
-# SETools is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with SETools.  If not, see
-# <http://www.gnu.org/licenses/>.
-#
-from . import exception
-from . import qpol
-from . import symbol
-from . import typeattr
-
-
-def role_factory(qpol_policy, name):
-    """Factory function for creating Role objects."""
-
-    if isinstance(name, Role):
-        assert name.policy == qpol_policy
-        return name
-    elif isinstance(name, qpol.qpol_role_t):
-        return Role(qpol_policy, name)
-
-    try:
-        return Role(qpol_policy, qpol.qpol_role_t(qpol_policy, str(name)))
-    except ValueError:
-        raise exception.InvalidRole("{0} is not a valid role".format(name))
-
-
-class BaseRole(symbol.PolicySymbol):
-
-    """Role/role attribute base class."""
-
-    def expand(self):
-        raise NotImplementedError
-
-    def types(self):
-        raise NotImplementedError
-
-
-class Role(BaseRole):
-
-    """A role."""
-
-    def expand(self):
-        """Generator that expands this into its member roles."""
-        yield self
-
-    def types(self):
-        """Generator which yields the role's set of types."""
-
-        for type_ in self.qpol_symbol.type_iter(self.policy):
-            yield typeattr.type_or_attr_factory(self.policy, type_)
-
-    def statement(self):
-        types = list(str(t) for t in self.types())
-        stmt = "role {0}".format(self)
-        if types:
-            if (len(types) > 1):
-                stmt += " types {{ {0} }}".format(' '.join(types))
-            else:
-                stmt += " types {0}".format(types[0])
-        stmt += ";"
-        return stmt
-
-
-class RoleAttribute(BaseRole):
-
-    """A role attribute."""
-
-    pass
diff --git a/lib/python2.7/site-packages/setoolsgui/setools/policyrep/rule.py b/lib/python2.7/site-packages/setoolsgui/setools/policyrep/rule.py
deleted file mode 100644
index 73fc812..0000000
--- a/lib/python2.7/site-packages/setoolsgui/setools/policyrep/rule.py
+++ /dev/null
@@ -1,72 +0,0 @@
-# Copyright 2014, Tresys Technology, LLC
-#
-# This file is part of SETools.
-#
-# SETools is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Lesser General Public License as
-# published by the Free Software Foundation, either version 2.1 of
-# the License, or (at your option) any later version.
-#
-# SETools is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with SETools.  If not, see
-# <http://www.gnu.org/licenses/>.
-#
-from . import exception
-from . import symbol
-from . import objclass
-
-
-class PolicyRule(symbol.PolicySymbol):
-
-    """This is base class for policy rules."""
-
-    def __str__(self):
-        raise NotImplementedError
-
-    @property
-    def ruletype(self):
-        """The rule type for the rule."""
-        return self.qpol_symbol.rule_type(self.policy)
-
-    @property
-    def source(self):
-        """
-        The source for the rule. This should be overridden by
-        subclasses.
-        """
-        raise NotImplementedError
-
-    @property
-    def target(self):
-        """
-        The target for the rule. This should be overridden by
-        subclasses.
-        """
-        raise NotImplementedError
-
-    @property
-    def tclass(self):
-        """The object class for the rule."""
-        return objclass.class_factory(self.policy, self.qpol_symbol.object_class(self.policy))
-
-    @property
-    def default(self):
-        """
-        The default for the rule. This should be overridden by
-        subclasses.
-        """
-        raise NotImplementedError
-
-    @property
-    def conditional(self):
-        """The conditional expression for this rule."""
-        # Most rules cannot be conditional.
-        raise exception.RuleNotConditional
-
-    def statement(self):
-        return str(self)
diff --git a/lib/python2.7/site-packages/setoolsgui/setools/policyrep/symbol.py b/lib/python2.7/site-packages/setoolsgui/setools/policyrep/symbol.py
deleted file mode 100644
index 4712d7f..0000000
--- a/lib/python2.7/site-packages/setoolsgui/setools/policyrep/symbol.py
+++ /dev/null
@@ -1,74 +0,0 @@
-# Copyright 2014, Tresys Technology, LLC
-#
-# This file is part of SETools.
-#
-# SETools is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Lesser General Public License as
-# published by the Free Software Foundation, either version 2.1 of
-# the License, or (at your option) any later version.
-#
-# SETools is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with SETools.  If not, see
-# <http://www.gnu.org/licenses/>.
-#
-
-
-class PolicySymbol(object):
-
-    """This is a base class for all policy objects."""
-
-    def __init__(self, policy, qpol_symbol):
-        """
-        Parameters:
-        policy        The low-level policy object.
-        qpol_symbol   The low-level policy symbol object.
-        """
-
-        assert qpol_symbol
-
-        self.policy = policy
-        self.qpol_symbol = qpol_symbol
-
-    def __str__(self):
-        return self.qpol_symbol.name(self.policy)
-
-    def __hash__(self):
-        return hash(self.qpol_symbol.name(self.policy))
-
-    def __eq__(self, other):
-        try:
-            return self.qpol_symbol.this == other.qpol_symbol.this
-        except AttributeError:
-            return str(self) == str(other)
-
-    def __ne__(self, other):
-        return not self == other
-
-    def __lt__(self, other):
-        """Comparison used by Python sorting functions."""
-        return str(self) < str(other)
-
-    def __repr__(self):
-        return "<{0.__class__.__name__}(<qpol_policy_t id={1}>,\"{0}\")>".format(
-            self, id(self.policy))
-
-    def __deepcopy__(self, memo):
-        # shallow copy as all of the members are immutable
-        cls = self.__class__
-        newobj = cls.__new__(cls)
-        newobj.policy = self.policy
-        newobj.qpol_symbol = self.qpol_symbol
-        memo[id(self)] = newobj
-        return newobj
-
-    def statement(self):
-        """
-        A rendering of the policy statement.  This should be
-        overridden by subclasses.
-        """
-        raise NotImplementedError
diff --git a/lib/python2.7/site-packages/setoolsgui/setools/policyrep/terule.py b/lib/python2.7/site-packages/setoolsgui/setools/policyrep/terule.py
deleted file mode 100644
index d8a9e94..0000000
--- a/lib/python2.7/site-packages/setoolsgui/setools/policyrep/terule.py
+++ /dev/null
@@ -1,155 +0,0 @@
-# Copyright 2014, Tresys Technology, LLC
-#
-# This file is part of SETools.
-#
-# SETools is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Lesser General Public License as
-# published by the Free Software Foundation, either version 2.1 of
-# the License, or (at your option) any later version.
-#
-# SETools is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with SETools.  If not, see
-# <http://www.gnu.org/licenses/>.
-#
-from . import exception
-from . import qpol
-from . import rule
-from . import typeattr
-from . import boolcond
-
-
-def te_rule_factory(policy, symbol):
-    """Factory function for creating TE rule objects."""
-
-    if isinstance(symbol, qpol.qpol_avrule_t):
-        return AVRule(policy, symbol)
-    elif isinstance(symbol, (qpol.qpol_terule_t, qpol.qpol_filename_trans_t)):
-        return TERule(policy, symbol)
-    else:
-        raise TypeError("TE rules cannot be looked-up.")
-
-
-def validate_ruletype(types):
-    """Validate TE Rule types."""
-    for t in types:
-        if t not in ["allow", "auditallow", "dontaudit", "neverallow",
-                     "type_transition", "type_member", "type_change"]:
-            raise exception.InvalidTERuleType("{0} is not a valid TE rule type.".format(t))
-
-
-class BaseTERule(rule.PolicyRule):
-
-    """A type enforcement rule."""
-
-    @property
-    def source(self):
-        """The rule's source type/attribute."""
-        return typeattr.type_or_attr_factory(self.policy, self.qpol_symbol.source_type(self.policy))
-
-    @property
-    def target(self):
-        """The rule's target type/attribute."""
-        return typeattr.type_or_attr_factory(self.policy, self.qpol_symbol.target_type(self.policy))
-
-    @property
-    def filename(self):
-        raise NotImplementedError
-
-    @property
-    def conditional(self):
-        """The rule's conditional expression."""
-        try:
-            return boolcond.condexpr_factory(self.policy, self.qpol_symbol.cond(self.policy))
-        except (AttributeError, ValueError):
-            # AttributeError: name filetrans rules cannot be conditional
-            #                 so no member function
-            # ValueError:     The rule is not conditional
-            raise exception.RuleNotConditional
-
-
-class AVRule(BaseTERule):
-
-    """An access vector type enforcement rule."""
-
-    def __str__(self):
-        rule_string = "{0.ruletype} {0.source} {0.target}:{0.tclass} ".format(
-            self)
-
-        perms = self.perms
-
-        # allow/dontaudit/auditallow/neverallow rules
-        if len(perms) > 1:
-            rule_string += "{{ {0} }};".format(' '.join(perms))
-        else:
-            # convert to list since sets cannot be indexed
-            rule_string += "{0};".format(list(perms)[0])
-
-        try:
-            rule_string += " [ {0} ]".format(self.conditional)
-        except exception.RuleNotConditional:
-            pass
-
-        return rule_string
-
-    @property
-    def perms(self):
-        """The rule's permission set."""
-        return set(self.qpol_symbol.perm_iter(self.policy))
-
-    @property
-    def default(self):
-        """The rule's default type."""
-        raise exception.RuleUseError("{0} rules do not have a default type.".format(self.ruletype))
-
-    @property
-    def filename(self):
-        raise exception.RuleUseError("{0} rules do not have file names".format(self.ruletype))
-
-
-class TERule(BaseTERule):
-
-    """A type_* type enforcement rule."""
-
-    def __str__(self):
-        rule_string = "{0.ruletype} {0.source} {0.target}:{0.tclass} {0.default}".format(self)
-
-        try:
-            rule_string += " \"{0}\";".format(self.filename)
-        except (exception.TERuleNoFilename, exception.RuleUseError):
-            # invalid use for type_change/member
-            rule_string += ";"
-
-        try:
-            rule_string += " [ {0} ]".format(self.conditional)
-        except exception.RuleNotConditional:
-            pass
-
-        return rule_string
-
-    @property
-    def perms(self):
-        """The rule's permission set."""
-        raise exception.RuleUseError(
-            "{0} rules do not have a permission set.".format(self.ruletype))
-
-    @property
-    def default(self):
-        """The rule's default type."""
-        return typeattr.type_factory(self.policy, self.qpol_symbol.default_type(self.policy))
-
-    @property
-    def filename(self):
-        """The type_transition rule's file name."""
-        try:
-            return self.qpol_symbol.filename(self.policy)
-        except AttributeError:
-            if self.ruletype == "type_transition":
-                raise exception.TERuleNoFilename
-            else:
-                raise exception.RuleUseError("{0} rules do not have file names".
-                                             format(self.ruletype))
diff --git a/lib/python2.7/site-packages/setoolsgui/setools/policyrep/typeattr.py b/lib/python2.7/site-packages/setoolsgui/setools/policyrep/typeattr.py
deleted file mode 100644
index a52c69a..0000000
--- a/lib/python2.7/site-packages/setoolsgui/setools/policyrep/typeattr.py
+++ /dev/null
@@ -1,174 +0,0 @@
-# Copyright 2014, Tresys Technology, LLC
-#
-# This file is part of SETools.
-#
-# SETools is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Lesser General Public License as
-# published by the Free Software Foundation, either version 2.1 of
-# the License, or (at your option) any later version.
-#
-# SETools is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with SETools.  If not, see
-# <http://www.gnu.org/licenses/>.
-#
-from . import exception
-from . import qpol
-from . import symbol
-
-
-def _symbol_lookup(qpol_policy, name):
-    """Look up the low-level qpol policy reference"""
-    if isinstance(name, qpol.qpol_type_t):
-        return name
-
-    try:
-        return qpol.qpol_type_t(qpol_policy, str(name))
-    except ValueError:
-        raise exception.InvalidType("{0} is not a valid type/attribute".format(name))
-
-
-def attribute_factory(qpol_policy, name):
-    """Factory function for creating attribute objects."""
-
-    if isinstance(name, TypeAttribute):
-        assert name.policy == qpol_policy
-        return name
-
-    qpol_symbol = _symbol_lookup(qpol_policy, name)
-
-    if not qpol_symbol.isattr(qpol_policy):
-        raise TypeError("{0} is a type".format(qpol_symbol.name(qpol_policy)))
-
-    return TypeAttribute(qpol_policy, qpol_symbol)
-
-
-def type_factory(qpol_policy, name, deref=False):
-    """Factory function for creating type objects."""
-
-    if isinstance(name, Type):
-        assert name.policy == qpol_policy
-        return name
-
-    qpol_symbol = _symbol_lookup(qpol_policy, name)
-
-    if qpol_symbol.isattr(qpol_policy):
-        raise TypeError("{0} is an attribute".format(qpol_symbol.name(qpol_policy)))
-    elif qpol_symbol.isalias(qpol_policy) and not deref:
-        raise TypeError("{0} is an alias.".format(qpol_symbol.name(qpol_policy)))
-
-    return Type(qpol_policy, qpol_symbol)
-
-
-def type_or_attr_factory(qpol_policy, name, deref=False):
-    """Factory function for creating type or attribute objects."""
-
-    if isinstance(name, (Type, TypeAttribute)):
-        assert name.policy == qpol_policy
-        return name
-
-    qpol_symbol = _symbol_lookup(qpol_policy, name)
-
-    if qpol_symbol.isalias(qpol_policy) and not deref:
-        raise TypeError("{0} is an alias.".format(qpol_symbol.name(qpol_policy)))
-
-    if qpol_symbol.isattr(qpol_policy):
-        return TypeAttribute(qpol_policy, qpol_symbol)
-    else:
-        return Type(qpol_policy, qpol_symbol)
-
-
-class BaseType(symbol.PolicySymbol):
-
-    """Type/attribute base class."""
-
-    @property
-    def ispermissive(self):
-        raise NotImplementedError
-
-    def expand(self):
-        """Generator that expands this attribute into its member types."""
-        raise NotImplementedError
-
-    def attributes(self):
-        """Generator that yields all attributes for this type."""
-        raise NotImplementedError
-
-    def aliases(self):
-        """Generator that yields all aliases for this type."""
-        raise NotImplementedError
-
-
-class Type(BaseType):
-
-    """A type."""
-
-    @property
-    def ispermissive(self):
-        """(T/F) the type is permissive."""
-        return self.qpol_symbol.ispermissive(self.policy)
-
-    def expand(self):
-        """Generator that expands this into its member types."""
-        yield self
-
-    def attributes(self):
-        """Generator that yields all attributes for this type."""
-        for attr in self.qpol_symbol.attr_iter(self.policy):
-            yield attribute_factory(self.policy, attr)
-
-    def aliases(self):
-        """Generator that yields all aliases for this type."""
-        for alias in self.qpol_symbol.alias_iter(self.policy):
-            yield alias
-
-    def statement(self):
-        attrs = list(self.attributes())
-        aliases = list(self.aliases())
-        stmt = "type {0}".format(self)
-        if aliases:
-            if len(aliases) > 1:
-                stmt += " alias {{ {0} }}".format(' '.join(aliases))
-            else:
-                stmt += " alias {0}".format(aliases[0])
-        for attr in attrs:
-            stmt += ", {0}".format(attr)
-        stmt += ";"
-        return stmt
-
-
-class TypeAttribute(BaseType):
-
-    """An attribute."""
-
-    def __contains__(self, other):
-        for type_ in self.expand():
-            if other == type_:
-                return True
-
-        return False
-
-    def expand(self):
-        """Generator that expands this attribute into its member types."""
-        for type_ in self.qpol_symbol.type_iter(self.policy):
-            yield type_factory(self.policy, type_)
-
-    def attributes(self):
-        """Generator that yields all attributes for this type."""
-        raise TypeError("{0} is an attribute, thus does not have attributes.".format(self))
-
-    def aliases(self):
-        """Generator that yields all aliases for this type."""
-        raise TypeError("{0} is an attribute, thus does not have aliases.".format(self))
-
-    @property
-    def ispermissive(self):
-        """(T/F) the type is permissive."""
-        raise TypeError("{0} is an attribute, thus cannot be permissive.".format(self))
-
-    def statement(self):
-        return "attribute {0};".format(self)
diff --git a/lib/python2.7/site-packages/setoolsgui/setools/policyrep/user.py b/lib/python2.7/site-packages/setoolsgui/setools/policyrep/user.py
deleted file mode 100644
index 94f81bc..0000000
--- a/lib/python2.7/site-packages/setoolsgui/setools/policyrep/user.py
+++ /dev/null
@@ -1,86 +0,0 @@
-# Copyright 2014, Tresys Technology, LLC
-#
-# This file is part of SETools.
-#
-# SETools is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Lesser General Public License as
-# published by the Free Software Foundation, either version 2.1 of
-# the License, or (at your option) any later version.
-#
-# SETools is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with SETools.  If not, see
-# <http://www.gnu.org/licenses/>.
-#
-from . import exception
-from . import qpol
-from . import role
-from . import mls
-from . import symbol
-
-
-def user_factory(qpol_policy, name):
-    """Factory function for creating User objects."""
-
-    if isinstance(name, User):
-        assert name.policy == qpol_policy
-        return name
-    elif isinstance(name, qpol.qpol_user_t):
-        return User(qpol_policy, name)
-
-    try:
-        return User(qpol_policy, qpol.qpol_user_t(qpol_policy, str(name)))
-    except ValueError:
-        raise exception.InvalidUser("{0} is not a valid user".format(name))
-
-
-class User(symbol.PolicySymbol):
-
-    """A user."""
-
-    @property
-    def roles(self):
-        """The user's set of roles."""
-
-        roleset = set()
-
-        for role_ in self.qpol_symbol.role_iter(self.policy):
-            item = role.role_factory(self.policy, role_)
-
-            # object_r is implicitly added to all roles by the compiler.
-            # technically it is incorrect to skip it, but policy writers
-            # and analysts don't expect to see it in results, and it
-            # will confuse, especially for role set equality user queries.
-            if item != "object_r":
-                roleset.add(item)
-
-        return roleset
-
-    @property
-    def mls_level(self):
-        """The user's default MLS level."""
-        return mls.level_factory(self.policy, self.qpol_symbol.dfltlevel(self.policy))
-
-    @property
-    def mls_range(self):
-        """The user's MLS range."""
-        return mls.range_factory(self.policy, self.qpol_symbol.range(self.policy))
-
-    def statement(self):
-        roles = list(str(r) for r in self.roles)
-        stmt = "user {0} roles ".format(self)
-        if len(roles) > 1:
-            stmt += "{{ {0} }}".format(' '.join(roles))
-        else:
-            stmt += roles[0]
-
-        try:
-            stmt += " level {0.mls_level} range {0.mls_range};".format(self)
-        except exception.MLSDisabled:
-            stmt += ";"
-
-        return stmt
diff --git a/lib/python2.7/site-packages/setoolsgui/setools/portconquery.py b/lib/python2.7/site-packages/setoolsgui/setools/portconquery.py
deleted file mode 100644
index 798a828..0000000
--- a/lib/python2.7/site-packages/setoolsgui/setools/portconquery.py
+++ /dev/null
@@ -1,146 +0,0 @@
-# Copyright 2014-2015, Tresys Technology, LLC
-#
-# This file is part of SETools.
-#
-# SETools is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Lesser General Public License as
-# published by the Free Software Foundation, either version 2.1 of
-# the License, or (at your option) any later version.
-#
-# SETools is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with SETools.  If not, see
-# <http://www.gnu.org/licenses/>.
-#
-import logging
-from socket import IPPROTO_TCP, IPPROTO_UDP
-
-from . import contextquery
-from .policyrep.netcontext import port_range
-
-
-class PortconQuery(contextquery.ContextQuery):
-
-    """
-    Port context query.
-
-    Parameter:
-    policy          The policy to query.
-
-    Keyword Parameters/Class attributes:
-    protocol        The protocol to match (socket.IPPROTO_TCP for
-                    TCP or socket.IPPROTO_UDP for UDP)
-
-    ports           A 2-tuple of the port range to match. (Set both to
-                    the same value for a single port)
-    ports_subset    If true, the criteria will match if it is a subset
-                    of the portcon's range.
-    ports_overlap   If true, the criteria will match if it overlaps
-                    any of the portcon's range.
-    ports_superset  If true, the criteria will match if it is a superset
-                    of the portcon's range.
-    ports_proper    If true, use proper superset/subset operations.
-                    No effect if not using set operations.
-
-    user            The criteria to match the context's user.
-    user_regex      If true, regular expression matching
-                    will be used on the user.
-
-    role            The criteria to match the context's role.
-    role_regex      If true, regular expression matching
-                    will be used on the role.
-
-    type_           The criteria to match the context's type.
-    type_regex      If true, regular expression matching
-                    will be used on the type.
-
-    range_          The criteria to match the context's range.
-    range_subset    If true, the criteria will match if it is a subset
-                    of the context's range.
-    range_overlap   If true, the criteria will match if it overlaps
-                    any of the context's range.
-    range_superset  If true, the criteria will match if it is a superset
-                    of the context's range.
-    range_proper    If true, use proper superset/subset operations.
-                    No effect if not using set operations.
-    """
-
-    _protocol = None
-    _ports = None
-    ports_subset = False
-    ports_overlap = False
-    ports_superset = False
-    ports_proper = False
-
-    @property
-    def ports(self):
-        return self._ports
-
-    @ports.setter
-    def ports(self, value):
-        pending_ports = port_range(*value)
-
-        if all(pending_ports):
-            if pending_ports.low < 1 or pending_ports.high < 1:
-                raise ValueError("Port numbers must be positive: {0.low}-{0.high}".
-                                 format(pending_ports))
-
-            if pending_ports.low > pending_ports.high:
-                raise ValueError(
-                    "The low port must be smaller than the high port: {0.low}-{0.high}".
-                    format(pending_ports))
-
-            self._ports = pending_ports
-        else:
-            self._ports = None
-
-    @property
-    def protocol(self):
-        return self._protocol
-
-    @protocol.setter
-    def protocol(self, value):
-        if value:
-            if not (value == IPPROTO_TCP or value == IPPROTO_UDP):
-                raise ValueError(
-                    "The protocol must be {0} for TCP or {1} for UDP.".
-                    format(IPPROTO_TCP, IPPROTO_UDP))
-
-            self._protocol = value
-        else:
-            self._protocol = None
-
-    def results(self):
-        """Generator which yields all matching portcons."""
-        self.log.info("Generating results from {0.policy}".format(self))
-        self.log.debug("Ports: {0.ports}, overlap: {0.ports_overlap}, "
-                       "subset: {0.ports_subset}, superset: {0.ports_superset}, "
-                       "proper: {0.ports_proper}".format(self))
-        self.log.debug("User: {0.user!r}, regex: {0.user_regex}".format(self))
-        self.log.debug("Role: {0.role!r}, regex: {0.role_regex}".format(self))
-        self.log.debug("Type: {0.type_!r}, regex: {0.type_regex}".format(self))
-        self.log.debug("Range: {0.range_!r}, subset: {0.range_subset}, overlap: {0.range_overlap}, "
-                       "superset: {0.range_superset}, proper: {0.range_proper}".format(self))
-
-        for portcon in self.policy.portcons():
-
-            if self.ports and not self._match_range(
-                    portcon.ports,
-                    self.ports,
-                    self.ports_subset,
-                    self.ports_overlap,
-                    self.ports_superset,
-                    self.ports_proper):
-                continue
-
-            if self.protocol and self.protocol != portcon.protocol:
-                continue
-
-            if not self._match_context(portcon.context):
-                continue
-
-            yield portcon
diff --git a/lib/python2.7/site-packages/setoolsgui/setools/query.py b/lib/python2.7/site-packages/setoolsgui/setools/query.py
deleted file mode 100644
index 358a095..0000000
--- a/lib/python2.7/site-packages/setoolsgui/setools/query.py
+++ /dev/null
@@ -1,192 +0,0 @@
-# Copyright 2014-2015, Tresys Technology, LLC
-#
-# This file is part of SETools.
-#
-# SETools is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Lesser General Public License as
-# published by the Free Software Foundation, either version 2.1 of
-# the License, or (at your option) any later version.
-#
-# SETools is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with SETools.  If not, see
-# <http://www.gnu.org/licenses/>.
-#
-import logging
-
-
-class PolicyQuery(object):
-
-    """Base class for SELinux policy queries."""
-
-    def __init__(self, policy, **kwargs):
-        self.log = logging.getLogger(self.__class__.__name__)
-
-        self.policy = policy
-
-        # keys are sorted in reverse order so regex settings
-        # are set before the criteria, e.g. name_regex
-        # is set before name.  This ensures correct behavior
-        # since the criteria descriptors are sensitve to
-        # regex settings.
-        for name in sorted(kwargs.keys(), reverse=True):
-            attr = getattr(self, name, None)  # None is not callable
-            if callable(attr):
-                raise ValueError("Keyword parameter {0} conflicts with a callable.".format(name))
-
-            setattr(self, name, kwargs[name])
-
-    @staticmethod
-    def _match_regex(obj, criteria, regex):
-        """
-        Match the object with optional regular expression.
-
-        Parameters:
-        obj         The object to match.
-        criteria    The criteria to match.
-        regex       If regular expression matching should be used.
-        """
-
-        if regex:
-            return bool(criteria.search(str(obj)))
-        else:
-            return obj == criteria
-
-    @staticmethod
-    def _match_set(obj, criteria, equal):
-        """
-        Match the object (a set) with optional set equality.
-
-        Parameters:
-        obj         The object to match. (a set)
-        criteria    The criteria to match. (a set)
-        equal       If set equality should be used. Otherwise
-                    any set intersection will match.
-        """
-
-        if equal:
-            return obj == criteria
-        else:
-            return bool(obj.intersection(criteria))
-
-    @staticmethod
-    def _match_in_set(obj, criteria, regex):
-        """
-        Match if the criteria is in the list, with optional
-        regular expression matching.
-
-        Parameters:
-        obj         The object to match.
-        criteria    The criteria to match.
-        regex       If regular expression matching should be used.
-        """
-
-        if regex:
-            return [m for m in obj if criteria.search(str(m))]
-        else:
-            return criteria in obj
-
-    @staticmethod
-    def _match_indirect_regex(obj, criteria, indirect, regex):
-        """
-        Match the object with optional regular expression and indirection.
-
-        Parameters:
-        obj         The object to match.
-        criteria    The criteria to match.
-        regex       If regular expression matching should be used.
-        indirect    If object indirection should be used, e.g.
-                    expanding an attribute.
-        """
-
-        if indirect:
-            return PolicyQuery._match_in_set((obj.expand()), criteria, regex)
-        else:
-            return PolicyQuery._match_regex(obj, criteria, regex)
-
-    @staticmethod
-    def _match_regex_or_set(obj, criteria, equal, regex):
-        """
-        Match the object (a set) with either set comparisons
-        (equality or intersection) or by regex matching of the
-        set members.  Regular expression matching will override
-        the set equality option.
-
-        Parameters:
-        obj         The object to match. (a set)
-        criteria    The criteria to match.
-        equal       If set equality should be used.  Otherwise
-                    any set intersection will match. Ignored
-                    if regular expression matching is used.
-        regex       If regular expression matching should be used.
-        """
-
-        if regex:
-            return [m for m in obj if criteria.search(str(m))]
-        else:
-            return PolicyQuery._match_set(obj, set(criteria), equal)
-
-    @staticmethod
-    def _match_range(obj, criteria, subset, overlap, superset, proper):
-        """
-        Match ranges of objects.
-
-        obj         An object with attributes named "low" and "high", representing the range.
-        criteria    An object with attributes named "low" and "high", representing the criteria.
-        subset      If true, the criteria will match if it is a subset obj's range.
-        overlap     If true, the criteria will match if it overlaps any of the obj's range.
-        superset    If true, the criteria will match if it is a superset of the obj's range.
-        proper      If true, use proper superset/subset operations.
-                    No effect if not using set operations.
-        """
-
-        if overlap:
-            return ((obj.low <= criteria.low <= obj.high) or (
-                     obj.low <= criteria.high <= obj.high) or (
-                     criteria.low <= obj.low and obj.high <= criteria.high))
-        elif subset:
-            if proper:
-                return ((obj.low < criteria.low and criteria.high <= obj.high) or (
-                         obj.low <= criteria.low and criteria.high < obj.high))
-            else:
-                return obj.low <= criteria.low and criteria.high <= obj.high
-        elif superset:
-            if proper:
-                return ((criteria.low < obj.low and obj.high <= criteria.high) or (
-                         criteria.low <= obj.low and obj.high < criteria.high))
-            else:
-                return (criteria.low <= obj.low and obj.high <= criteria.high)
-        else:
-            return criteria.low == obj.low and obj.high == criteria.high
-
-    @staticmethod
-    def _match_level(obj, criteria, dom, domby, incomp):
-        """
-        Match the an MLS level.
-
-        obj         The level to match.
-        criteria    The criteria to match. (a level)
-        dom         If true, the criteria will match if it dominates obj.
-        domby       If true, the criteria will match if it is dominated by obj.
-        incomp      If true, the criteria will match if it is incomparable to obj.
-        """
-
-        if dom:
-            return (criteria >= obj)
-        elif domby:
-            return (criteria <= obj)
-        elif incomp:
-            return (criteria ^ obj)
-        else:
-            return (criteria == obj)
-
-    def results(self):
-        """
-        Generator which returns the matches for the query.  This method
-        should be overridden by subclasses.
-        """
-        raise NotImplementedError
diff --git a/lib/python2.7/site-packages/setoolsgui/setools/rbacrulequery.py b/lib/python2.7/site-packages/setoolsgui/setools/rbacrulequery.py
deleted file mode 100644
index 240b921..0000000
--- a/lib/python2.7/site-packages/setoolsgui/setools/rbacrulequery.py
+++ /dev/null
@@ -1,147 +0,0 @@
-# Copyright 2014-2015, Tresys Technology, LLC
-#
-# This file is part of SETools.
-#
-# SETools is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Lesser General Public License as
-# published by the Free Software Foundation, either version 2.1 of
-# the License, or (at your option) any later version.
-#
-# SETools is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with SETools.  If not, see
-# <http://www.gnu.org/licenses/>.
-#
-import logging
-import re
-
-from . import mixins, query
-from .descriptors import CriteriaDescriptor, CriteriaSetDescriptor, RuletypeDescriptor
-from .policyrep.exception import InvalidType, RuleUseError
-
-
-class RBACRuleQuery(mixins.MatchObjClass, query.PolicyQuery):
-
-    """
-    Query the RBAC rules.
-
-    Parameter:
-    policy            The policy to query.
-
-    Keyword Parameters/Class attributes:
-    ruletype        The list of rule type(s) to match.
-    source          The name of the source role/attribute to match.
-    source_indirect If true, members of an attribute will be
-                    matched rather than the attribute itself.
-    source_regex    If true, regular expression matching will
-                    be used on the source role/attribute.
-                    Obeys the source_indirect option.
-    target          The name of the target role/attribute to match.
-    target_indirect If true, members of an attribute will be
-                    matched rather than the attribute itself.
-    target_regex    If true, regular expression matching will
-                    be used on the target role/attribute.
-                    Obeys target_indirect option.
-    tclass          The object class(es) to match.
-    tclass_regex    If true, use a regular expression for
-                    matching the rule's object class.
-    default         The name of the default role to match.
-    default_regex   If true, regular expression matching will
-                    be used on the default role.
-    """
-
-    ruletype = RuletypeDescriptor("validate_rbac_ruletype")
-    source = CriteriaDescriptor("source_regex", "lookup_role")
-    source_regex = False
-    source_indirect = True
-    _target = None
-    target_regex = False
-    target_indirect = True
-    tclass = CriteriaSetDescriptor("tclass_regex", "lookup_class")
-    tclass_regex = False
-    default = CriteriaDescriptor("default_regex", "lookup_role")
-    default_regex = False
-
-    @property
-    def target(self):
-        return self._target
-
-    @target.setter
-    def target(self, value):
-        if not value:
-            self._target = None
-        elif self.target_regex:
-            self._target = re.compile(value)
-        else:
-            try:
-                self._target = self.policy.lookup_type_or_attr(value)
-            except InvalidType:
-                self._target = self.policy.lookup_role(value)
-
-    def results(self):
-        """Generator which yields all matching RBAC rules."""
-        self.log.info("Generating results from {0.policy}".format(self))
-        self.log.debug("Ruletypes: {0.ruletype}".format(self))
-        self.log.debug("Source: {0.source!r}, indirect: {0.source_indirect}, "
-                       "regex: {0.source_regex}".format(self))
-        self.log.debug("Target: {0.target!r}, indirect: {0.target_indirect}, "
-                       "regex: {0.target_regex}".format(self))
-        self.log.debug("Class: {0.tclass!r}, regex: {0.tclass_regex}".format(self))
-        self.log.debug("Default: {0.default!r}, regex: {0.default_regex}".format(self))
-
-        for rule in self.policy.rbacrules():
-            #
-            # Matching on rule type
-            #
-            if self.ruletype:
-                if rule.ruletype not in self.ruletype:
-                    continue
-
-            #
-            # Matching on source role
-            #
-            if self.source and not self._match_indirect_regex(
-                    rule.source,
-                    self.source,
-                    self.source_indirect,
-                    self.source_regex):
-                continue
-
-            #
-            # Matching on target type (role_transition)/role(allow)
-            #
-            if self.target and not self._match_indirect_regex(
-                    rule.target,
-                    self.target,
-                    self.target_indirect,
-                    self.target_regex):
-                continue
-
-            #
-            # Matching on object class
-            #
-            try:
-                if not self._match_object_class(rule):
-                    continue
-            except RuleUseError:
-                continue
-
-            #
-            # Matching on default role
-            #
-            if self.default:
-                try:
-                    if not self._match_regex(
-                            rule.default,
-                            self.default,
-                            self.default_regex):
-                        continue
-                except RuleUseError:
-                    continue
-
-            # if we get here, we have matched all available criteria
-            yield rule
diff --git a/lib/python2.7/site-packages/setoolsgui/setools/rolequery.py b/lib/python2.7/site-packages/setoolsgui/setools/rolequery.py
deleted file mode 100644
index e95dfa6..0000000
--- a/lib/python2.7/site-packages/setoolsgui/setools/rolequery.py
+++ /dev/null
@@ -1,77 +0,0 @@
-# Copyright 2014-2015, Tresys Technology, LLC
-#
-# This file is part of SETools.
-#
-# SETools is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Lesser General Public License as
-# published by the Free Software Foundation, either version 2.1 of
-# the License, or (at your option) any later version.
-#
-# SETools is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with SETools.  If not, see
-# <http://www.gnu.org/licenses/>.
-#
-import logging
-import re
-
-from . import compquery
-from .descriptors import CriteriaSetDescriptor
-
-
-class RoleQuery(compquery.ComponentQuery):
-
-    """
-    Query SELinux policy roles.
-
-    Parameter:
-    policy            The policy to query.
-
-    Keyword Parameters/Class attributes:
-    name         The role name to match.
-    name_regex   If true, regular expression matching
-                 will be used on the role names.
-    types        The type to match.
-    types_equal  If true, only roles with type sets
-                 that are equal to the criteria will
-                 match.  Otherwise, any intersection
-                 will match.
-    types_regex  If true, regular expression matching
-                 will be used on the type names instead
-                 of set logic.
-    """
-
-    types = CriteriaSetDescriptor("types_regex", "lookup_type")
-    types_equal = False
-    types_regex = False
-
-    def results(self):
-        """Generator which yields all matching roles."""
-        self.log.info("Generating results from {0.policy}".format(self))
-        self.log.debug("Name: {0.name!r}, regex: {0.name_regex}".format(self))
-        self.log.debug("Types: {0.types!r}, regex: {0.types_regex}, "
-                       "eq: {0.types_equal}".format(self))
-
-        for r in self.policy.roles():
-            if r == "object_r":
-                # all types are implicitly added to object_r by the compiler.
-                # technically it is incorrect to skip it, but policy writers
-                # and analysts don't expect to see it in results, and it
-                # will confuse, especially for set equality type queries.
-                continue
-
-            if not self._match_name(r):
-                continue
-
-            if self.types and not self._match_regex_or_set(
-                    set(r.types()),
-                    self.types,
-                    self.types_equal,
-                    self.types_regex):
-                continue
-
-            yield r
diff --git a/lib/python2.7/site-packages/setoolsgui/setools/sensitivityquery.py b/lib/python2.7/site-packages/setoolsgui/setools/sensitivityquery.py
deleted file mode 100644
index a102836..0000000
--- a/lib/python2.7/site-packages/setoolsgui/setools/sensitivityquery.py
+++ /dev/null
@@ -1,74 +0,0 @@
-# Copyright 2015, Tresys Technology, LLC
-#
-# This file is part of SETools.
-#
-# SETools is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Lesser General Public License as
-# published by the Free Software Foundation, either version 2.1 of
-# the License, or (at your option) any later version.
-#
-# SETools is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with SETools.  If not, see
-# <http://www.gnu.org/licenses/>.
-#
-import logging
-
-from . import compquery
-from . import mixins
-from .descriptors import CriteriaDescriptor
-
-
-class SensitivityQuery(mixins.MatchAlias, compquery.ComponentQuery):
-
-    """
-    Query MLS Sensitivities
-
-    Parameter:
-    policy       The policy to query.
-
-    Keyword Parameters/Class attributes:
-    name         The name of the category to match.
-    name_regex   If true, regular expression matching will
-                 be used for matching the name.
-    alias        The alias name to match.
-    alias_regex  If true, regular expression matching
-                 will be used on the alias names.
-    sens         The criteria to match the sensitivity by dominance.
-    sens_dom     If true, the criteria will match if it dominates
-                 the sensitivity.
-    sens_domby   If true, the criteria will match if it is dominated
-                 by the sensitivity.
-    """
-
-    sens = CriteriaDescriptor(lookup_function="lookup_sensitivity")
-    sens_dom = False
-    sens_domby = False
-
-    def results(self):
-        """Generator which yields all matching sensitivities."""
-        self.log.info("Generating results from {0.policy}".format(self))
-        self.log.debug("Name: {0.name!r}, regex: {0.name_regex}".format(self))
-        self.log.debug("Alias: {0.alias}, regex: {0.alias_regex}".format(self))
-        self.log.debug("Sens: {0.sens!r}, dom: {0.sens_dom}, domby: {0.sens_domby}".format(self))
-
-        for s in self.policy.sensitivities():
-            if not self._match_name(s):
-                continue
-
-            if not self._match_alias(s):
-                continue
-
-            if self.sens and not self._match_level(
-                    s,
-                    self.sens,
-                    self.sens_dom,
-                    self.sens_domby,
-                    False):
-                continue
-
-            yield s
diff --git a/lib/python2.7/site-packages/setoolsgui/setools/terulequery.py b/lib/python2.7/site-packages/setoolsgui/setools/terulequery.py
deleted file mode 100644
index 7f3eccf..0000000
--- a/lib/python2.7/site-packages/setoolsgui/setools/terulequery.py
+++ /dev/null
@@ -1,178 +0,0 @@
-# Copyright 2014-2015, Tresys Technology, LLC
-#
-# This file is part of SETools.
-#
-# SETools is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Lesser General Public License as
-# published by the Free Software Foundation, either version 2.1 of
-# the License, or (at your option) any later version.
-#
-# SETools is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with SETools.  If not, see
-# <http://www.gnu.org/licenses/>.
-#
-import logging
-import re
-
-from . import mixins, query
-from .descriptors import CriteriaDescriptor, CriteriaSetDescriptor, RuletypeDescriptor
-from .policyrep.exception import RuleUseError, RuleNotConditional
-
-
-class TERuleQuery(mixins.MatchObjClass, mixins.MatchPermission, query.PolicyQuery):
-
-    """
-    Query the Type Enforcement rules.
-
-    Parameter:
-    policy            The policy to query.
-
-    Keyword Parameters/Class attributes:
-    ruletype          The list of rule type(s) to match.
-    source            The name of the source type/attribute to match.
-    source_indirect   If true, members of an attribute will be
-                      matched rather than the attribute itself.
-                      Default is true.
-    source_regex      If true, regular expression matching will
-                      be used on the source type/attribute.
-                      Obeys the source_indirect option.
-                      Default is false.
-    target            The name of the target type/attribute to match.
-    target_indirect   If true, members of an attribute will be
-                      matched rather than the attribute itself.
-                      Default is true.
-    target_regex      If true, regular expression matching will
-                      be used on the target type/attribute.
-                      Obeys target_indirect option.
-                      Default is false.
-    tclass            The object class(es) to match.
-    tclass_regex      If true, use a regular expression for
-                      matching the rule's object class.
-                      Default is false.
-    perms             The set of permission(s) to match.
-    perms_equal       If true, the permission set of the rule
-                      must exactly match the permissions
-                      criteria.  If false, any set intersection
-                      will match.
-                      Default is false.
-    perms_regex       If true, regular expression matching will be used
-                      on the permission names instead of set logic.
-    default           The name of the default type to match.
-    default_regex     If true, regular expression matching will be
-                      used on the default type.
-                      Default is false.
-    boolean           The set of boolean(s) to match.
-    boolean_regex     If true, regular expression matching will be
-                      used on the booleans.
-                      Default is false.
-    boolean_equal     If true, the booleans in the conditional
-                      expression of the rule must exactly match the
-                      criteria.  If false, any set intersection
-                      will match.  Default is false.
-    """
-
-    ruletype = RuletypeDescriptor("validate_te_ruletype")
-    source = CriteriaDescriptor("source_regex", "lookup_type_or_attr")
-    source_regex = False
-    source_indirect = True
-    target = CriteriaDescriptor("target_regex", "lookup_type_or_attr")
-    target_regex = False
-    target_indirect = True
-    default = CriteriaDescriptor("default_regex", "lookup_type")
-    default_regex = False
-    boolean = CriteriaSetDescriptor("boolean_regex", "lookup_boolean")
-    boolean_regex = False
-    boolean_equal = False
-
-    def results(self):
-        """Generator which yields all matching TE rules."""
-        self.log.info("Generating results from {0.policy}".format(self))
-        self.log.debug("Ruletypes: {0.ruletype}".format(self))
-        self.log.debug("Source: {0.source!r}, indirect: {0.source_indirect}, "
-                       "regex: {0.source_regex}".format(self))
-        self.log.debug("Target: {0.target!r}, indirect: {0.target_indirect}, "
-                       "regex: {0.target_regex}".format(self))
-        self.log.debug("Class: {0.tclass!r}, regex: {0.tclass_regex}".format(self))
-        self.log.debug("Perms: {0.perms!r}, regex: {0.perms_regex}, eq: {0.perms_equal}".
-                       format(self))
-        self.log.debug("Default: {0.default!r}, regex: {0.default_regex}".format(self))
-        self.log.debug("Boolean: {0.boolean!r}, eq: {0.boolean_equal}, "
-                       "regex: {0.boolean_regex}".format(self))
-
-        for rule in self.policy.terules():
-            #
-            # Matching on rule type
-            #
-            if self.ruletype:
-                if rule.ruletype not in self.ruletype:
-                    continue
-
-            #
-            # Matching on source type
-            #
-            if self.source and not self._match_indirect_regex(
-                    rule.source,
-                    self.source,
-                    self.source_indirect,
-                    self.source_regex):
-                continue
-
-            #
-            # Matching on target type
-            #
-            if self.target and not self._match_indirect_regex(
-                    rule.target,
-                    self.target,
-                    self.target_indirect,
-                    self.target_regex):
-                continue
-
-            #
-            # Matching on object class
-            #
-            if not self._match_object_class(rule):
-                continue
-
-            #
-            # Matching on permission set
-            #
-            try:
-                if not self._match_perms(rule):
-                    continue
-            except RuleUseError:
-                continue
-
-            #
-            # Matching on default type
-            #
-            if self.default:
-                try:
-                    if not self._match_regex(
-                            rule.default,
-                            self.default,
-                            self.default_regex):
-                        continue
-                except RuleUseError:
-                    continue
-
-            #
-            # Match on Boolean in conditional expression
-            #
-            if self.boolean:
-                try:
-                    if not self._match_regex_or_set(
-                            rule.conditional.booleans,
-                            self.boolean,
-                            self.boolean_equal,
-                            self.boolean_regex):
-                        continue
-                except RuleNotConditional:
-                    continue
-
-            # if we get here, we have matched all available criteria
-            yield rule
diff --git a/lib/python2.7/site-packages/setoolsgui/setools/typeattrquery.py b/lib/python2.7/site-packages/setoolsgui/setools/typeattrquery.py
deleted file mode 100644
index a91026c..0000000
--- a/lib/python2.7/site-packages/setoolsgui/setools/typeattrquery.py
+++ /dev/null
@@ -1,70 +0,0 @@
-# Copyright 2014-2015, Tresys Technology, LLC
-#
-# This file is part of SETools.
-#
-# SETools is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Lesser General Public License as
-# published by the Free Software Foundation, either version 2.1 of
-# the License, or (at your option) any later version.
-#
-# SETools is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with SETools.  If not, see
-# <http://www.gnu.org/licenses/>.
-#
-import logging
-import re
-
-from . import compquery
-from .descriptors import CriteriaSetDescriptor
-
-
-class TypeAttributeQuery(compquery.ComponentQuery):
-
-    """
-    Query SELinux policy type attributes.
-
-    Parameter:
-    policy            The policy to query.
-
-    Keyword Parameters/Class attributes:
-    name                The type name to match.
-    name_regex          If true, regular expression matching
-                        will be used on the type names.
-    types               The type to match.
-    types_equal         If true, only attributes with type sets
-                        that are equal to the criteria will
-                        match.  Otherwise, any intersection
-                        will match.
-    types_regex         If true, regular expression matching
-                        will be used on the type names instead
-                        of set logic.
-    """
-
-    types = CriteriaSetDescriptor("types_regex", "lookup_type")
-    types_equal = False
-    types_regex = False
-
-    def results(self):
-        """Generator which yields all matching types."""
-        self.log.info("Generating results from {0.policy}".format(self))
-        self.log.debug("Name: {0.name!r}, regex: {0.name_regex}".format(self))
-        self.log.debug("Types: {0.types!r}, regex: {0.types_regex}, "
-                       "eq: {0.types_equal}".format(self))
-
-        for attr in self.policy.typeattributes():
-            if not self._match_name(attr):
-                continue
-
-            if self.types and not self._match_regex_or_set(
-                    set(attr.expand()),
-                    self.types,
-                    self.types_equal,
-                    self.types_regex):
-                continue
-
-            yield attr
diff --git a/lib/python2.7/site-packages/setoolsgui/setools/typequery.py b/lib/python2.7/site-packages/setoolsgui/setools/typequery.py
deleted file mode 100644
index 6634f76..0000000
--- a/lib/python2.7/site-packages/setoolsgui/setools/typequery.py
+++ /dev/null
@@ -1,96 +0,0 @@
-# Copyright 2014-2015, Tresys Technology, LLC
-#
-# This file is part of SETools.
-#
-# SETools is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Lesser General Public License as
-# published by the Free Software Foundation, either version 2.1 of
-# the License, or (at your option) any later version.
-#
-# SETools is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with SETools.  If not, see
-# <http://www.gnu.org/licenses/>.
-#
-import logging
-import re
-
-from . import compquery
-from . import mixins
-from .descriptors import CriteriaSetDescriptor
-
-
-class TypeQuery(mixins.MatchAlias, compquery.ComponentQuery):
-
-    """
-    Query SELinux policy types.
-
-    Parameter:
-    policy              The policy to query.
-
-    Keyword Parameters/Class attributes:
-    name                The type name to match.
-    name_regex          If true, regular expression matching
-                        will be used on the type names.
-    alias               The alias name to match.
-    alias_regex         If true, regular expression matching
-                        will be used on the alias names.
-    attrs               The attribute to match.
-    attrs_equal         If true, only types with attribute sets
-                        that are equal to the criteria will
-                        match.  Otherwise, any intersection
-                        will match.
-    attrs_regex         If true, regular expression matching
-                        will be used on the attribute names instead
-                        of set logic.
-    permissive          The permissive state to match.  If this
-                        is None, the state is not matched.
-    """
-
-    attrs = CriteriaSetDescriptor("attrs_regex", "lookup_typeattr")
-    attrs_regex = False
-    attrs_equal = False
-    _permissive = None
-
-    @property
-    def permissive(self):
-        return self._permissive
-
-    @permissive.setter
-    def permissive(self, value):
-        if value is None:
-            self._permissive = None
-        else:
-            self._permissive = bool(value)
-
-    def results(self):
-        """Generator which yields all matching types."""
-        self.log.info("Generating results from {0.policy}".format(self))
-        self.log.debug("Name: {0.name!r}, regex: {0.name_regex}".format(self))
-        self.log.debug("Alias: {0.alias}, regex: {0.alias_regex}".format(self))
-        self.log.debug("Attrs: {0.attrs!r}, regex: {0.attrs_regex}, "
-                       "eq: {0.attrs_equal}".format(self))
-        self.log.debug("Permissive: {0.permissive}".format(self))
-
-        for t in self.policy.types():
-            if not self._match_name(t):
-                continue
-
-            if not self._match_alias(t):
-                continue
-
-            if self.attrs and not self._match_regex_or_set(
-                    set(t.attributes()),
-                    self.attrs,
-                    self.attrs_equal,
-                    self.attrs_regex):
-                continue
-
-            if self.permissive is not None and t.ispermissive != self.permissive:
-                continue
-
-            yield t
diff --git a/lib/python2.7/site-packages/setoolsgui/setools/userquery.py b/lib/python2.7/site-packages/setoolsgui/setools/userquery.py
deleted file mode 100644
index 00910cf..0000000
--- a/lib/python2.7/site-packages/setoolsgui/setools/userquery.py
+++ /dev/null
@@ -1,116 +0,0 @@
-# Copyright 2014-2015, Tresys Technology, LLC
-#
-# This file is part of SETools.
-#
-# SETools is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Lesser General Public License as
-# published by the Free Software Foundation, either version 2.1 of
-# the License, or (at your option) any later version.
-#
-# SETools is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with SETools.  If not, see
-# <http://www.gnu.org/licenses/>.
-#
-import logging
-import re
-
-from . import compquery
-from .descriptors import CriteriaDescriptor, CriteriaSetDescriptor
-
-
-class UserQuery(compquery.ComponentQuery):
-
-    """
-    Query SELinux policy users.
-
-    Parameter:
-    policy            The policy to query.
-
-    Keyword Parameters/Class attributes:
-    name            The user name to match.
-    name_regex      If true, regular expression matching
-                    will be used on the user names.
-    roles           The attribute to match.
-    roles_equal     If true, only types with role sets
-                    that are equal to the criteria will
-                    match.  Otherwise, any intersection
-                    will match.
-    roles_regex     If true, regular expression matching
-                    will be used on the role names instead
-                    of set logic.
-    level           The criteria to match the user's default level.
-    level_dom       If true, the criteria will match if it dominates
-                    the user's default level.
-    level_domby     If true, the criteria will match if it is dominated
-                    by the user's default level.
-    level_incomp    If true, the criteria will match if it is incomparable
-                    to the user's default level.
-    range_          The criteria to match the user's range.
-    range_subset    If true, the criteria will match if it is a subset
-                    of the user's range.
-    range_overlap   If true, the criteria will match if it overlaps
-                    any of the user's range.
-    range_superset  If true, the criteria will match if it is a superset
-                    of the user's range.
-    range_proper    If true, use proper superset/subset operations.
-                    No effect if not using set operations.
-    """
-
-    level = CriteriaDescriptor(lookup_function="lookup_level")
-    level_dom = False
-    level_domby = False
-    level_incomp = False
-    range_ = CriteriaDescriptor(lookup_function="lookup_range")
-    range_overlap = False
-    range_subset = False
-    range_superset = False
-    range_proper = False
-    roles = CriteriaSetDescriptor("roles_regex", "lookup_role")
-    roles_equal = False
-    roles_regex = False
-
-    def results(self):
-        """Generator which yields all matching users."""
-        self.log.info("Generating results from {0.policy}".format(self))
-        self.log.debug("Name: {0.name!r}, regex: {0.name_regex}".format(self))
-        self.log.debug("Roles: {0.roles!r}, regex: {0.roles_regex}, "
-                       "eq: {0.roles_equal}".format(self))
-        self.log.debug("Level: {0.level!r}, dom: {0.level_dom}, domby: {0.level_domby}, "
-                       "incomp: {0.level_incomp}".format(self))
-        self.log.debug("Range: {0.range_!r}, subset: {0.range_subset}, overlap: {0.range_overlap}, "
-                       "superset: {0.range_superset}, proper: {0.range_proper}".format(self))
-
-        for user in self.policy.users():
-            if not self._match_name(user):
-                continue
-
-            if self.roles and not self._match_regex_or_set(
-                    user.roles,
-                    self.roles,
-                    self.roles_equal,
-                    self.roles_regex):
-                continue
-
-            if self.level and not self._match_level(
-                    user.mls_level,
-                    self.level,
-                    self.level_dom,
-                    self.level_domby,
-                    self.level_incomp):
-                continue
-
-            if self.range_ and not self._match_range(
-                    user.mls_range,
-                    self.range_,
-                    self.range_subset,
-                    self.range_overlap,
-                    self.range_superset,
-                    self.range_proper):
-                continue
-
-            yield user