# ultimately, we'll set up a process function that executes the following code # automatically when the configuration note is posted. for now, we will do this # manually. # get the already-posted configuration note papers = client.get_notes( invitation=configuration_note_params['content']['paper_invitation']) paper_metadata = client.get_notes( invitation=configuration_note_params['content']['metadata_invitation']) match_group = client.get_group( id=configuration_note_params['content']['match_group']) reviewer_configuration = configuration_note_params['content']['configuration'] new_assignments_by_forum = openreview_matcher.match(reviewer_configuration, papers=papers, metadata=paper_metadata, group=match_group) def create_assignment_note(forum, label): return openreview.Note( **{ 'forum': forum, 'invitation': configuration_note_params['content']['assignment_invitation'], 'readers': [ 'auai.org/UAI/2018', 'auai.org/UAI/2018/Program_Chairs', 'auai.org/UAI/2018/Program_Committee', 'auai.org/UAI/2018/Senior_Program_Committee' ],
a.forum: a for a in assignments if a.content['label'] == 'reviewers' } new_constraints = {} for forum, assignment in r1_assignments_by_forum.iteritems(): new_constraints[forum] = {} for entry in assignment.content['assignedGroups']: new_constraints[forum][entry['userId']] = 10.0 config_notes = [ c for c in client.get_notes( invitation='auai.org/UAI/2018/-/Assignment_Configuration') if c.content['label'] == label ] if config_notes: config_note = openreview.Note( **dict(config_note[0].to_json(), **configuration_note_params)) else: config_note = openreview.Note(**configuration_note_params) config_note.content['constraints'] = new_constraints posted_config = client.post_note(config_note) assignments = openreview_matcher.match(client, posted_config, openreview_matcher.Solver) for n in assignments: print("posting assignment for ", n.forum) client.post_note(n)
}, 'constraints': {}, 'paper_invitation': 'cv-foundation.org/ECCV/2018/Conference/-/Submission', 'metadata_invitation': args.metadata_inv, 'assignment_invitation': 'cv-foundation.org/ECCV/2018/Conference/-/Paper_Assignment', 'match_group': 'cv-foundation.org/ECCV/2018/Conference/Area_Chairs', 'status': 'complete' # 'queued', 'processing', 'complete' or 'error' } }) append_assignments = {} if args.append: append_label = args.append existing_assignments = openreview.tools.get_all_notes(client, config_note.content['assignment_invitation']) append_assignments = {a.forum: a for a in existing_assignments if a.content['label'] == append_label} config_note, assignments = openreview_matcher.match(client, config_note, post=False) assignments_by_forum = {a.forum: a for a in assignments} papers_by_forum = {n.forum: n for n in openreview.tools.get_all_notes(client, config_note.content['paper_invitation'])} for forum, append_assignment in append_assignments.iteritems(): if forum in papers_by_forum: print(forum) assignment = assignments_by_forum[forum] assignment.content['assignedGroups'] = append_assignment.content['assignedGroups'] + assignment.content['assignedGroups'] posted_note = client.post_note(assignment) client.post_note(config_note) else: openreview_matcher.match(client, config_note)
'content': { 'label': label, 'configuration': { 'minusers': 1, 'maxusers': 1, 'minpapers': 1, 'maxpapers': 10, 'alternates': 5, 'weights': { 'tpms_score': 1, 'conflict_score': 1, 'bid_score': 1 } }, 'constraints': {}, 'paper_invitation': 'auai.org/UAI/2018/-/Blind_Submission', 'metadata_invitation': 'auai.org/UAI/2018/-/Paper_Metadata', 'assignment_invitation': 'auai.org/UAI/2018/-/Paper_Assignment', 'match_group': 'auai.org/UAI/2018/Senior_Program_Committee', 'status': 'complete' # 'queued', 'processing', 'complete' or 'error' } } configuration_note, assignments = openreview_matcher.match(client, configuration_note_params) posted_config = client.post_note(configuration_note) for n in assignments: print "posting assignment for ", n.forum client.post_note(n)
], 'writers': ['cv-foundation.org/ECCV/2018/Conference'], 'signatures': ['cv-foundation.org/ECCV/2018/Conference'], 'content': { 'label': args.label, 'configuration': { 'minusers': 3, 'maxusers': 3, 'minpapers': 0, 'maxpapers': 8, 'alternates': 5, 'weights': { 'tpmsScore': 1.0, 'acRecommendation': 3.0 } }, 'constraints': {}, 'paper_invitation': 'cv-foundation.org/ECCV/2018/Conference/-/Submission', 'metadata_invitation': 'cv-foundation.org/ECCV/2018/Conference/Reviewers/-/Paper_Metadata', 'assignment_invitation': 'cv-foundation.org/ECCV/2018/Conference/-/Paper_Assignment', 'match_group': 'cv-foundation.org/ECCV/2018/Conference/Reviewers', 'status': 'complete' # 'queued', 'processing', 'complete' or 'error' } }) assignments = openreview_matcher.match(client, config_note)