Ejemplo n.º 1
0
    def update_parameters(self):

        print "Updating parameters"

        nodefile = self.nodes.get()
        edgefile = self.edges.get()
        debug = self.debugVar.get()
        if debug == 'True':
            debug = True
        else:
            debug = False

        hive = Hive(debug=debug)
        properties = list(hive.get_nodes(nodefile).keys()) + assignmentOptions
        self.assignmentVar = self.reset_option_menu(self.assignmentOpt,
                                                    self.assignmentVar,
                                                    properties,
                                                    index=2)

        properties = list(hive.get_nodes(nodefile).keys()) + positionOptions
        self.positionVar = self.reset_option_menu(self.positionOpt,
                                                  self.positionVar, properties)

        properties = list(hive.get_edges(edgefile)) + edgeStyleOptions
        self.edgeStyleVar = self.reset_option_menu(self.edgeStyleOpt,
                                                   self.edgeStyleVar,
                                                   properties)
Ejemplo n.º 2
0
    def update_parameters(self):
        nodefile = self.nodes.get()
        edgefile = self.edges.get()
        
        hive = Hive(debug = False)
        properties = list(hive.get_nodes(nodefile).keys()) + assignmentOptions
        self.assignmentVar = self.reset_option_menu(self.assignmentOpt, self.assignmentVar, properties, index = 2) 
        
        properties = list(hive.get_nodes(nodefile).keys()) + positionOptions
        self.positionVar = self.reset_option_menu(self.positionOpt, self.positionVar, properties) 

        properties = list(hive.get_edges(edgefile)) + edgeStyleOptions
        self.edgeStyleVar = self.reset_option_menu(self.edgeStyleOpt, self.edgeStyleVar, properties)
Ejemplo n.º 3
0
    def update_parameters(self):
        
        print "Updating parameters"
        
        nodefile = self.nodes.get()
        edgefile = self.edges.get()
        debug = self.debugVar.get()
        if debug == 'True':
            debug = True
        else: 
            debug = False
        
        hive = Hive(debug = debug)
        properties = list(hive.get_nodes(nodefile).keys()) + assignmentOptions
        self.assignmentVar = self.reset_option_menu(self.assignmentOpt, self.assignmentVar, properties, index = 2) 
        
        properties = list(hive.get_nodes(nodefile).keys()) + positionOptions
        self.positionVar = self.reset_option_menu(self.positionOpt, self.positionVar, properties) 

        properties = list(hive.get_edges(edgefile)) + edgeStyleOptions
        self.edgeStyleVar = self.reset_option_menu(self.edgeStyleOpt, self.edgeStyleVar, properties)
Ejemplo n.º 4
0
class TestHive(unittest.TestCase):
    def setUp(self):
        #example hive
        self.emptyhive = Hive(debug = False)
        self.friendsHive = Hive(debug = False)
        self.friendsHiveDouble = Hive(debug = False, doubleAxes = True)
        nodefile = _root_dir + '/tests/test_nodes_friends.csv'
        edgefile = _root_dir + '/tests/test_edges_friends.csv'

        self.friendsHive.get_nodes(nodefile)
        self.friendsHive.get_edges(edgefile)
        self.friendsHiveDouble.get_nodes(nodefile)
        self.friendsHiveDouble.get_edges(edgefile)
        
        self.friendsNodesValuesInt = {'Alice': 4, 'Eric': 2, 'Daniella': 2, 'Fatima': 3, 'Cam': 3, 'Bob': 4, 'George': 2}
        self.friendsNodesValuesFloat = {'Daniella': 0.8, 'George': 0.9, 'Fatima': 0, 'Cam': 0.9, 'Bob': 0.2, 'Alice': 1.9, 'Eric': 1.6}
        self.friendsNodesValuesString = {'Daniella': 'girl', 'George': 'alien', 'Fatima': 'girl', 'Cam': 'boy', 'Bob': 'boy', 'Alice': 'girl', 'Eric': 'boy'}
        
        self.numAxesOptions = [(True, 2), (True, 3), (False, 5), (False, 4), (False, 3), (False, 2)]
        self.axesOptions = {(False,2):[0,pi], (False,3):[0, pi*2/3, pi*4/3], (False,4):[0,pi/2,pi,pi*3/2], (False,5):[0,pi*2/5,pi*4/5,pi*6/5,pi*8/5], (True,2):[-pi/6,pi/6,pi*5/6,pi*7/6], (True,3):[-pi/9,pi/9,pi*5/9,pi*7/9,pi*11/9,pi*13/9]}
        
        self.rules = [(),2,'degree', 'clustering', 'closeness', 'centrality', 'betweeness','average neighbor degree']

    def test_make_axes(self):
        hive = self.emptyhive
        for (doubleAxes, numAxes), angles in self.axesOptions.iteritems():
            hive.doubleAxes = doubleAxes
            hive.numAxes = numAxes
            hive.make_axes()
            angles = [0.0001 if a == 0 else round(a,2) for a in angles]
            self.assertListEqual(angles, hive.angles)

    def test_get_assignment_values(self):
        hive = self.friendsHive
        values = hive.get_assignment_values(1)
        correctValues = {'Daniella': 'girl', 'George': 'alien', 'Fatima': 'girl', 'Cam': 'boy', 'Bob': 'boy', 'Alice': 'girl', 'Eric': 'boy'}
        self.assertEqual(values, correctValues)

        hive = self.friendsHiveDouble
        values = hive.get_assignment_values(1)
        correctValues = {'Eric.2': 'boy', 'Cam.2': 'boy', 'Cam.1': 'boy', 'Daniella.1': 'girl', 'Daniella.2': 'girl', 'George.2': 'alien', 'Fatima.2': 'girl', 'Fatima.1': 'girl', 'Eric.1': 'boy', 'Alice.1': 'girl', 'Alice.2': 'girl', 'Bob.2': 'boy', 'George.1': 'alien', 'Bob.1': 'boy'}
        self.assertEqual(values, correctValues)
        
        hive = self.friendsHive
        values = hive.get_assignment_values(2)
        correctValues = {'Daniella': 0.8, 'George': 0.9, 'Fatima': 0, 'Cam': 0.9, 'Bob': 0.2, 'Alice': 1.9, 'Eric': 1.6}
        self.assertEqual(values, correctValues)
        
        hive = self.friendsHiveDouble
        values = hive.get_assignment_values(2)
        correctValues = {'Eric.2': 1.6, 'Cam.2': 0.9, 'Cam.1': 0.9, 'Daniella.1': 0.8, 'Daniella.2': 0.8, 'George.2': 0.9, 'Fatima.2': 0, 'Fatima.1': 0, 'Eric.1': 1.6, 'Alice.1': 1.9, 'Alice.2': 1.9, 'Bob.2': 0.2, 'George.1': 0.9, 'Bob.1': 0.2}
        self.assertEqual(values, correctValues)
        
        hive = self.friendsHive
        values = hive.get_assignment_values('degree')
        correctValues = {'Alice': 4, 'Eric': 2, 'Daniella': 2, 'Fatima': 3, 'Cam': 3, 'Bob': 4, 'George': 2}
        self.assertEqual(values, correctValues)     

        hive = self.friendsHiveDouble
        values = hive.get_assignment_values('degree')
        correctValues = {'Bob.1': 4, 'Cam.2': 3, 'Cam.1': 3, 'Daniella.1': 2, 'Daniella.2': 2, 'George.2': 2, 'Fatima.2': 3, 'Fatima.1': 3, 'Bob.2': 4, 'Alice.1': 4, 'Alice.2': 4, 'Eric.1': 2, 'George.1': 2, 'Eric.2': 2}
        self.assertEqual(values, correctValues)  

    def test_node_assignment(self):
        hive = self.friendsHive
        for (double,numAxes),assignmentValues in zip(self.numAxesOptions,(self.friendsNodesValuesString, self.friendsNodesValuesInt, self.friendsNodesValuesFloat)):
            hive.numAxes = numAxes
            hive.doubleAxes = double
            hive.node_assignment(assignmentValues = assignmentValues)
            assignment = hive.axisAssignment
            #now we check that the axis assignment variable 
            #is a dictionary
            self.assertIsInstance(assignment, dict)
            #has an entry for every node
            self.assertEqual(set(assignment.keys()), set(hive.nodes))
            #that the values are integers corresponding to axes numbers
            [self.assertIsInstance(v,int) for v in assignment.values()]
def main(*argv):
    '''handles user input and runs plsa'''
    parser = argparse.ArgumentParser(
        description=
        'This scripts produces hive plots given user data without the use of the gui.'
    )
    parser.add_argument('-t', help='Title of hive plot', default=gui.TITLE)
    parser.add_argument('-n', help='The node file', default=gui.NODES)
    parser.add_argument('-e', help='The edge file', default=gui.EDGES)
    parser.add_argument('-path',
                        help='Path where hive plot will be saved',
                        default=TEMP_FOLDER)
    parser.add_argument('-axes', help='Number of axes', type=int)
    parser.add_argument('-double',
                        help='Doubles the number of axes',
                        action='store_true')
    parser.add_argument('-assignment', help=assignmentHelp)
    parser.add_argument('-position', help=positionHelp)
    parser.add_argument('-size',
                        help='Size of hive plot: big or small',
                        default='small')
    parser.add_argument('-nodecolor', help='Color of nodes', default='purple')
    parser.add_argument('-edgestyle', help=edgeStyleHelp)
    parser.add_argument('-palette', help=paletteHelp, default='purple')
    parser.add_argument('-numcolors',
                        help='The number of colors to use to style edges',
                        default=1)
    parser.add_argument('-open',
                        help='Open the hive plot in the browser',
                        action='store_true')
    parser.add_argument('-debug',
                        help='Print verbatim to debug',
                        action='store_true')
    parser.add_argument('-properties',
                        help='Shows properties that can be used to plot hives',
                        action='store_true')
    args = parser.parse_args()

    if (args.n == '' and args.e != '') or (args.n != '' and args.e == ''):
        print "\n***You must specify both a node and an edge file if specifying either.***\n"
        parser.print_help()
        sys.exit()

    title = args.t
    nodeFile = args.n
    edgeFile = args.e
    axes = args.axes
    double = args.double
    assignment = args.assignment
    position = args.position
    size = gui_options.sizes[args.size]
    nodeColor = args.nodecolor
    edgeStyle = args.edgestyle
    numColors = args.numcolors
    palette = gui_utilities.get_palette(args.palette, int(numColors))
    open = args.open
    debug = args.debug
    folder = args.path

    if args.properties:
        hive = Hive(debug=debug)
        properties = list(
            hive.get_nodes(nodeFile).keys()) + gui_options.assignmentOptions
        print '\nNode properties:\n\t"' + '", "'.join(properties) + '"\n'
        properties = list(
            hive.get_edges(edgeFile)) + gui_options.edgeStyleOptions
        print 'Edge properties:\n\t"' + '", "'.join(properties) + '"\n'
        sys.exit()
    else:
        if not axes:
            print "You must specify a number of axes"
            sys.exit()
        if not assignment:
            print "You must specify a node assignment rule"
            sys.exit()
        if not position:
            print "You must specify a node position rule"
            sys.exit()

    hive = Hive(debug=debug,
                numAxes=axes,
                doubleAxes=double,
                axisAssignRule=assignment,
                axisPositRule=position,
                edgePalette=palette,
                edgeStyleRule=edgeStyle,
                nodeColor=nodeColor)
    hive.make_hive(nodeFile, edgeFile)

    rules = {}
    rules['assignment'] = assignment
    rules['position'] = position
    rules['edges'] = edgeStyle

    url = make_html(title, hive, size, rules=rules, folder=folder)

    if open:
        webbrowser.open("file://" + url, new=1)
Ejemplo n.º 6
0
class TestHive(unittest.TestCase):
    def setUp(self):
        #example hive
        self.emptyhive = Hive(debug=False)
        self.friendsHive = Hive(debug=False)
        self.friendsHiveDouble = Hive(debug=False, doubleAxes=True)
        nodefile = _root_dir + '/tests/test_nodes_friends.csv'
        edgefile = _root_dir + '/tests/test_edges_friends.csv'

        self.friendsHive.get_nodes(nodefile)
        self.friendsHive.get_edges(edgefile)
        self.friendsHiveDouble.get_nodes(nodefile)
        self.friendsHiveDouble.get_edges(edgefile)

        self.friendsNodesValuesInt = {
            'Alice': 4,
            'Eric': 2,
            'Daniella': 2,
            'Fatima': 3,
            'Cam': 3,
            'Bob': 4,
            'George': 2
        }
        self.friendsNodesValuesFloat = {
            'Daniella': 0.8,
            'George': 0.9,
            'Fatima': 0,
            'Cam': 0.9,
            'Bob': 0.2,
            'Alice': 1.9,
            'Eric': 1.6
        }
        self.friendsNodesValuesString = {
            'Daniella': 'girl',
            'George': 'alien',
            'Fatima': 'girl',
            'Cam': 'boy',
            'Bob': 'boy',
            'Alice': 'girl',
            'Eric': 'boy'
        }

        self.numAxesOptions = [(True, 2), (True, 3), (False, 5), (False, 4),
                               (False, 3), (False, 2)]
        self.axesOptions = {
            (False, 2): [0, pi],
            (False, 3): [0, pi * 2 / 3, pi * 4 / 3],
            (False, 4): [0, pi / 2, pi, pi * 3 / 2],
            (False, 5): [0, pi * 2 / 5, pi * 4 / 5, pi * 6 / 5, pi * 8 / 5],
            (True, 2): [-pi / 6, pi / 6, pi * 5 / 6, pi * 7 / 6],
            (True, 3): [
                -pi / 9, pi / 9, pi * 5 / 9, pi * 7 / 9, pi * 11 / 9,
                pi * 13 / 9
            ]
        }

        self.rules = [(), 2, 'degree', 'clustering', 'closeness', 'centrality',
                      'betweeness', 'average neighbor degree']

    def test_make_axes(self):
        hive = self.emptyhive
        for (doubleAxes, numAxes), angles in self.axesOptions.iteritems():
            hive.doubleAxes = doubleAxes
            hive.numAxes = numAxes
            hive.make_axes()
            angles = [0.0001 if a == 0 else round(a, 2) for a in angles]
            self.assertListEqual(angles, hive.angles)

    def test_get_assignment_values(self):
        hive = self.friendsHive
        values = hive.get_assignment_values(1)
        correctValues = {
            'Daniella': 'girl',
            'George': 'alien',
            'Fatima': 'girl',
            'Cam': 'boy',
            'Bob': 'boy',
            'Alice': 'girl',
            'Eric': 'boy'
        }
        self.assertEqual(values, correctValues)

        hive = self.friendsHiveDouble
        values = hive.get_assignment_values(1)
        correctValues = {
            'Eric.2': 'boy',
            'Cam.2': 'boy',
            'Cam.1': 'boy',
            'Daniella.1': 'girl',
            'Daniella.2': 'girl',
            'George.2': 'alien',
            'Fatima.2': 'girl',
            'Fatima.1': 'girl',
            'Eric.1': 'boy',
            'Alice.1': 'girl',
            'Alice.2': 'girl',
            'Bob.2': 'boy',
            'George.1': 'alien',
            'Bob.1': 'boy'
        }
        self.assertEqual(values, correctValues)

        hive = self.friendsHive
        values = hive.get_assignment_values(2)
        correctValues = {
            'Daniella': 0.8,
            'George': 0.9,
            'Fatima': 0,
            'Cam': 0.9,
            'Bob': 0.2,
            'Alice': 1.9,
            'Eric': 1.6
        }
        self.assertEqual(values, correctValues)

        hive = self.friendsHiveDouble
        values = hive.get_assignment_values(2)
        correctValues = {
            'Eric.2': 1.6,
            'Cam.2': 0.9,
            'Cam.1': 0.9,
            'Daniella.1': 0.8,
            'Daniella.2': 0.8,
            'George.2': 0.9,
            'Fatima.2': 0,
            'Fatima.1': 0,
            'Eric.1': 1.6,
            'Alice.1': 1.9,
            'Alice.2': 1.9,
            'Bob.2': 0.2,
            'George.1': 0.9,
            'Bob.1': 0.2
        }
        self.assertEqual(values, correctValues)

        hive = self.friendsHive
        values = hive.get_assignment_values('degree')
        correctValues = {
            'Alice': 4,
            'Eric': 2,
            'Daniella': 2,
            'Fatima': 3,
            'Cam': 3,
            'Bob': 4,
            'George': 2
        }
        self.assertEqual(values, correctValues)

        hive = self.friendsHiveDouble
        values = hive.get_assignment_values('degree')
        correctValues = {
            'Bob.1': 4,
            'Cam.2': 3,
            'Cam.1': 3,
            'Daniella.1': 2,
            'Daniella.2': 2,
            'George.2': 2,
            'Fatima.2': 3,
            'Fatima.1': 3,
            'Bob.2': 4,
            'Alice.1': 4,
            'Alice.2': 4,
            'Eric.1': 2,
            'George.1': 2,
            'Eric.2': 2
        }
        self.assertEqual(values, correctValues)

    def test_node_assignment(self):
        hive = self.friendsHive
        for (double, numAxes), assignmentValues in zip(
                self.numAxesOptions,
            (self.friendsNodesValuesString, self.friendsNodesValuesInt,
             self.friendsNodesValuesFloat)):
            hive.numAxes = numAxes
            hive.doubleAxes = double
            hive.node_assignment(assignmentValues=assignmentValues)
            assignment = hive.axisAssignment
            #now we check that the axis assignment variable
            #is a dictionary
            self.assertIsInstance(assignment, dict)
            #has an entry for every node
            self.assertEqual(set(assignment.keys()), set(hive.nodes))
            #that the values are integers corresponding to axes numbers
            [self.assertIsInstance(v, int) for v in assignment.values()]