def generate_tree(): with app.app_context(): data = flask.json.loads(request.data) params = data['params'] age_params = { 'avg_age': params['avg_age'], 'age_dev': params['age_dev'] } sender = ContactsTree(DEPTH, age_params).generate_tree() settings = {} settings.update(data['params']) simulator = SimulationManager(sender=sender, settings=settings) nodes = simulator.traverse() return flask.jsonify(dict(root=sender.to_dict(), nodes=nodes, edges=make_edges(nodes)))
def main(show_age_clusterization, show_contacts_tree, show_total_statistics, show_all_contacts, use_profile_spreading, verbose): with open('config.json', 'r') as config_json: config = config_json.read() settings = json.loads(config) if verbose: logger.setLevel(logging.INFO) tree = ContactsTree(settings['depth'], settings['age_params']) sender = tree.generate_tree() settings.update(dict(use_profile_spreading=use_profile_spreading)) simulator = SimulationManager(sender=sender, settings=settings) simulator.start_simulation() nodes = sender.traverse() if show_total_statistics: stats = simulator.statistics() click.echo('\nAverage request number: {}'.format(simulator.average_request_number())) click.echo('\nAggregated data...') for answer, votes in stats.iteritems(): click.echo( 'Answer "{answer}" got {votes}% of votes'.format( answer=answer, votes=votes ) ) if show_contacts_tree: figure(1) visualize_graph(nodes) if show_age_clusterization: figure(2) hist( generate_age_ranges(1000, settings['age_params']['avg_age'], settings['age_params']['age_dev']), bins=50 ) pylab.show() if show_all_contacts: json_nodes = json.dumps(nodes, default=serializer, indent=4) click.echo('\nContacts tree:\n{}'.format(json_nodes))