{"action":"created","comment":{"url":"https://api.github.com/repos/awslabs/sockeye/pulls/comments/220038619","pull_request_review_id":158354019,"id":220038619,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIyMDAzODYxOQ==","diff_hunk":"@@ -0,0 +1,119 @@\n+# Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n+#\n+# Licensed under the Apache License, Version 2.0 (the \"License\"). You may not\n+# use this file except in compliance with the License. A copy of the License\n+# is located at\n+#\n+#     http://aws.amazon.com/apache2.0/\n+#\n+# or in the \"license\" file accompanying this file. This file is distributed on\n+# an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either\n+# express or implied. See the License for the specific language governing\n+# permissions and limitations under the License.\n+\n+\"\"\"\n+Simple Training CLI.\n+\"\"\"\n+import argparse\n+import os\n+import sys\n+from contextlib import ExitStack\n+from typing import Any, cast, Optional, Dict, List, Tuple\n+\n+import mxnet as mx\n+\n+from . import arguments\n+from . import constants as C\n+from . import data_io\n+from . import inference\n+from . import model\n+from . import scoring\n+from . import train\n+from . import utils\n+from .log import setup_main_logger\n+from .output_handler import get_output_handler, OutputHandler\n+from .utils import check_condition, log_basic_info\n+\n+# Temporary logger, the real one (logging to a file probably, will be created in the main function)\n+logger = setup_main_logger(__name__, file_logging=False, console=True)\n+\n+\n+def main():\n+    params = arguments.ConfigArgumentParser(description='Score data with an existing model.')\n+    arguments.add_score_cli_args(params)\n+    args = params.parse_args()\n+    score(args)\n+\n+\n+def score(args: argparse.Namespace):\n+    global logger\n+    logger = setup_main_logger(__name__, file_logging=False)\n+\n+    utils.log_basic_info(args)\n+\n+    with ExitStack() as exit_stack:\n+        context = utils.determine_context(device_ids=args.device_ids,\n+                                          use_cpu=args.use_cpu,\n+                                          disable_device_locking=args.disable_device_locking,\n+                                          lock_dir=args.lock_dir,\n+                                          exit_stack=exit_stack)\n+        if args.batch_type == C.BATCH_TYPE_SENTENCE:\n+            check_condition(args.batch_size % len(context) == 0, \"When using multiple devices the batch size must be \"\n+                                                                 \"divisible by the number of devices. Choose a batch \"\n+                                                                 \"size that is a multiple of %d.\" % len(context))\n+        logger.info(\"Scoring Device(s): %s\", \", \".join(str(c) for c in context))\n+\n+        model_config = model.SockeyeModel.load_config(os.path.join(args.model, C.CONFIG_NAME))\n+\n+        if args.max_seq_len is None:\n+            max_seq_len_source = model_config.config_data.max_seq_len_source\n+            max_seq_len_target = model_config.config_data.max_seq_len_target\n+        else:\n+            max_seq_len_source, max_seq_len_target = args.max_seq_len\n+\n+        # This call has a number of different parameters compared to training which reflect our need to get scores\n+        # one-for-one and in order with the input data.\n+        # Bucketing and permuting need to be turned off in order to preserve the ordering of sentences.\n+        # The 'zeros' fill_up strategy fills underfilled buckets with zeros which can then be used to find the last item.\n+        # Finally, 'resume_training' needs to be set to True because it causes the model to be loaded instead of initialized.\n+        score_iter, _, config_data, source_vocabs, target_vocab, data_info = train.create_data_iters_and_vocabs(\n+            args=args,","path":"sockeye/score.py","position":80,"original_position":80,"commit_id":"bbd8c139ef6beb8a2eaf34d2f88597cdbe01cf40","original_commit_id":"39294ac60c8d0b8ece6fcb4975e0231fdc6643d9","user":{"login":"mjpost","id":455256,"node_id":"MDQ6VXNlcjQ1NTI1Ng==","avatar_url":"https://avatars0.githubusercontent.com/u/455256?v=4","gravatar_id":"","url":"https://api.github.com/users/mjpost","html_url":"https://github.com/mjpost","followers_url":"https://api.github.com/users/mjpost/followers","following_url":"https://api.github.com/users/mjpost/following{/other_user}","gists_url":"https://api.github.com/users/mjpost/gists{/gist_id}","starred_url":"https://api.github.com/users/mjpost/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mjpost/subscriptions","organizations_url":"https://api.github.com/users/mjpost/orgs","repos_url":"https://api.github.com/users/mjpost/repos","events_url":"https://api.github.com/users/mjpost/events{/privacy}","received_events_url":"https://api.github.com/users/mjpost/received_events","type":"User","site_admin":false},"body":"This makes sense; I hadn't thought about the semantics of `resume_training`, for some reason. I agree with you now that we should either use `args` or a separate function. I'll look at this tomorrow and see which of your two options makes more sense.","created_at":"2018-09-25T01:50:13Z","updated_at":"2018-09-25T01:50:14Z","html_url":"https://github.com/awslabs/sockeye/pull/538#discussion_r220038619","pull_request_url":"https://api.github.com/repos/awslabs/sockeye/pulls/538","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/awslabs/sockeye/pulls/comments/220038619"},"html":{"href":"https://github.com/awslabs/sockeye/pull/538#discussion_r220038619"},"pull_request":{"href":"https://api.github.com/repos/awslabs/sockeye/pulls/538"}},"in_reply_to_id":219692981},"pull_request":{"url":"https://api.github.com/repos/awslabs/sockeye/pulls/538","id":216316125,"node_id":"MDExOlB1bGxSZXF1ZXN0MjE2MzE2MTI1","html_url":"https://github.com/awslabs/sockeye/pull/538","diff_url":"https://github.com/awslabs/sockeye/pull/538.diff","patch_url":"https://github.com/awslabs/sockeye/pull/538.patch","issue_url":"https://api.github.com/repos/awslabs/sockeye/issues/538","number":538,"state":"open","locked":false,"title":"[WIP] Scoring","user":{"login":"mjpost","id":455256,"node_id":"MDQ6VXNlcjQ1NTI1Ng==","avatar_url":"https://avatars0.githubusercontent.com/u/455256?v=4","gravatar_id":"","url":"https://api.github.com/users/mjpost","html_url":"https://github.com/mjpost","followers_url":"https://api.github.com/users/mjpost/followers","following_url":"https://api.github.com/users/mjpost/following{/other_user}","gists_url":"https://api.github.com/users/mjpost/gists{/gist_id}","starred_url":"https://api.github.com/users/mjpost/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mjpost/subscriptions","organizations_url":"https://api.github.com/users/mjpost/orgs","repos_url":"https://api.github.com/users/mjpost/repos","events_url":"https://api.github.com/users/mjpost/events{/privacy}","received_events_url":"https://api.github.com/users/mjpost/received_events","type":"User","site_admin":false},"body":"This implements scoring by fully reusing the training computation graph, per @bricksdont's original suggestion. It replaces PR #413.\r\n\r\nIt's nearly done, but I thought I'd submit it as WIP since it makes some changes required to generalize many of the procedures and I want to be sure they look okay to you. These include:\r\n\r\n- Making validation data optional when creating data iterators\r\n- Adding a new data iterator `fill_up` policy that pads an uneven batch with zeros and does not randomly permute batches\r\n\r\nThe CLI is similar to training: you pass it either `--prepared-data` or `--source X --target Y`. It includes length penalty parameters. Currently output is the model score and the source side sentence. I'll parameterize these in the future since it would be convenient to be able to directly output negative logprobs, for example, and perhaps other variations.\r\n\r\nI haven't tested this for speed yet but it should be pretty fast since it's using the BucketingModule (particularly, fast relative to the inference-based version).\r\n\r\n#### Pull Request Checklist ##\r\n- [ ] Changes are complete (if posting work-in-progress code, prefix your pull request title with '[WIP]'\r\nuntil you can check this box.\r\n- [x] Unit tests pass (`pytest`)\r\n- [ ] Were system tests modified? If so did you run these at least 5 times to account for the variation across runs?\r\n- [ ] System tests pass (`pytest test/system`)\r\n- [x] Passed code style checking (`./style-check.sh`)\r\n- [ ] You have considered writing a test\r\n- [x] Updated major/minor version in `sockeye/__init__.py`. Major version bump if this is a backwards incompatible change.\r\n- [x] Updated CHANGELOG.md\r\n\r\n\r\nBy submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.","created_at":"2018-09-18T13:52:44Z","updated_at":"2018-09-25T01:50:14Z","closed_at":null,"merged_at":null,"merge_commit_sha":"b60934eb1e2338326b74d9ab9b1644b3da6a5c08","assignee":null,"assignees":[],"requested_reviewers":[{"login":"tdomhan","id":363737,"node_id":"MDQ6VXNlcjM2MzczNw==","avatar_url":"https://avatars1.githubusercontent.com/u/363737?v=4","gravatar_id":"","url":"https://api.github.com/users/tdomhan","html_url":"https://github.com/tdomhan","followers_url":"https://api.github.com/users/tdomhan/followers","following_url":"https://api.github.com/users/tdomhan/following{/other_user}","gists_url":"https://api.github.com/users/tdomhan/gists{/gist_id}","starred_url":"https://api.github.com/users/tdomhan/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tdomhan/subscriptions","organizations_url":"https://api.github.com/users/tdomhan/orgs","repos_url":"https://api.github.com/users/tdomhan/repos","events_url":"https://api.github.com/users/tdomhan/events{/privacy}","received_events_url":"https://api.github.com/users/tdomhan/received_events","type":"User","site_admin":false},{"login":"mjdenkowski","id":636653,"node_id":"MDQ6VXNlcjYzNjY1Mw==","avatar_url":"https://avatars3.githubusercontent.com/u/636653?v=4","gravatar_id":"","url":"https://api.github.com/users/mjdenkowski","html_url":"https://github.com/mjdenkowski","followers_url":"https://api.github.com/users/mjdenkowski/followers","following_url":"https://api.github.com/users/mjdenkowski/following{/other_user}","gists_url":"https://api.github.com/users/mjdenkowski/gists{/gist_id}","starred_url":"https://api.github.com/users/mjdenkowski/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mjdenkowski/subscriptions","organizations_url":"https://api.github.com/users/mjdenkowski/orgs","repos_url":"https://api.github.com/users/mjdenkowski/repos","events_url":"https://api.github.com/users/mjdenkowski/events{/privacy}","received_events_url":"https://api.github.com/users/mjdenkowski/received_events","type":"User","site_admin":false},{"login":"davvil","id":683589,"node_id":"MDQ6VXNlcjY4MzU4OQ==","avatar_url":"https://avatars0.githubusercontent.com/u/683589?v=4","gravatar_id":"","url":"https://api.github.com/users/davvil","html_url":"https://github.com/davvil","followers_url":"https://api.github.com/users/davvil/followers","following_url":"https://api.github.com/users/davvil/following{/other_user}","gists_url":"https://api.github.com/users/davvil/gists{/gist_id}","starred_url":"https://api.github.com/users/davvil/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/davvil/subscriptions","organizations_url":"https://api.github.com/users/davvil/orgs","repos_url":"https://api.github.com/users/davvil/repos","events_url":"https://api.github.com/users/davvil/events{/privacy}","received_events_url":"https://api.github.com/users/davvil/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/awslabs/sockeye/pulls/538/commits","review_comments_url":"https://api.github.com/repos/awslabs/sockeye/pulls/538/comments","review_comment_url":"https://api.github.com/repos/awslabs/sockeye/pulls/comments{/number}","comments_url":"https://api.github.com/repos/awslabs/sockeye/issues/538/comments","statuses_url":"https://api.github.com/repos/awslabs/sockeye/statuses/bbd8c139ef6beb8a2eaf34d2f88597cdbe01cf40","head":{"label":"mjpost:scoring","ref":"scoring","sha":"bbd8c139ef6beb8a2eaf34d2f88597cdbe01cf40","user":{"login":"mjpost","id":455256,"node_id":"MDQ6VXNlcjQ1NTI1Ng==","avatar_url":"https://avatars0.githubusercontent.com/u/455256?v=4","gravatar_id":"","url":"https://api.github.com/users/mjpost","html_url":"https://github.com/mjpost","followers_url":"https://api.github.com/users/mjpost/followers","following_url":"https://api.github.com/users/mjpost/following{/other_user}","gists_url":"https://api.github.com/users/mjpost/gists{/gist_id}","starred_url":"https://api.github.com/users/mjpost/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mjpost/subscriptions","organizations_url":"https://api.github.com/users/mjpost/orgs","repos_url":"https://api.github.com/users/mjpost/repos","events_url":"https://api.github.com/users/mjpost/events{/privacy}","received_events_url":"https://api.github.com/users/mjpost/received_events","type":"User","site_admin":false},"repo":{"id":101274762,"node_id":"MDEwOlJlcG9zaXRvcnkxMDEyNzQ3NjI=","name":"sockeye","full_name":"mjpost/sockeye","private":false,"owner":{"login":"mjpost","id":455256,"node_id":"MDQ6VXNlcjQ1NTI1Ng==","avatar_url":"https://avatars0.githubusercontent.com/u/455256?v=4","gravatar_id":"","url":"https://api.github.com/users/mjpost","html_url":"https://github.com/mjpost","followers_url":"https://api.github.com/users/mjpost/followers","following_url":"https://api.github.com/users/mjpost/following{/other_user}","gists_url":"https://api.github.com/users/mjpost/gists{/gist_id}","starred_url":"https://api.github.com/users/mjpost/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mjpost/subscriptions","organizations_url":"https://api.github.com/users/mjpost/orgs","repos_url":"https://api.github.com/users/mjpost/repos","events_url":"https://api.github.com/users/mjpost/events{/privacy}","received_events_url":"https://api.github.com/users/mjpost/received_events","type":"User","site_admin":false},"html_url":"https://github.com/mjpost/sockeye","description":"Sequence-to-sequence framework with a focus on Neural Machine Translation based on Apache MXNet","fork":true,"url":"https://api.github.com/repos/mjpost/sockeye","forks_url":"https://api.github.com/repos/mjpost/sockeye/forks","keys_url":"https://api.github.com/repos/mjpost/sockeye/keys{/key_id}","collaborators_url":"https://api.github.com/repos/mjpost/sockeye/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/mjpost/sockeye/teams","hooks_url":"https://api.github.com/repos/mjpost/sockeye/hooks","issue_events_url":"https://api.github.com/repos/mjpost/sockeye/issues/events{/number}","events_url":"https://api.github.com/repos/mjpost/sockeye/events","assignees_url":"https://api.github.com/repos/mjpost/sockeye/assignees{/user}","branches_url":"https://api.github.com/repos/mjpost/sockeye/branches{/branch}","tags_url":"https://api.github.com/repos/mjpost/sockeye/tags","blobs_url":"https://api.github.com/repos/mjpost/sockeye/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/mjpost/sockeye/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/mjpost/sockeye/git/refs{/sha}","trees_url":"https://api.github.com/repos/mjpost/sockeye/git/trees{/sha}","statuses_url":"https://api.github.com/repos/mjpost/sockeye/statuses/{sha}","languages_url":"https://api.github.com/repos/mjpost/sockeye/languages","stargazers_url":"https://api.github.com/repos/mjpost/sockeye/stargazers","contributors_url":"https://api.github.com/repos/mjpost/sockeye/contributors","subscribers_url":"https://api.github.com/repos/mjpost/sockeye/subscribers","subscription_url":"https://api.github.com/repos/mjpost/sockeye/subscription","commits_url":"https://api.github.com/repos/mjpost/sockeye/commits{/sha}","git_commits_url":"https://api.github.com/repos/mjpost/sockeye/git/commits{/sha}","comments_url":"https://api.github.com/repos/mjpost/sockeye/comments{/number}","issue_comment_url":"https://api.github.com/repos/mjpost/sockeye/issues/comments{/number}","contents_url":"https://api.github.com/repos/mjpost/sockeye/contents/{+path}","compare_url":"https://api.github.com/repos/mjpost/sockeye/compare/{base}...{head}","merges_url":"https://api.github.com/repos/mjpost/sockeye/merges","archive_url":"https://api.github.com/repos/mjpost/sockeye/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/mjpost/sockeye/downloads","issues_url":"https://api.github.com/repos/mjpost/sockeye/issues{/number}","pulls_url":"https://api.github.com/repos/mjpost/sockeye/pulls{/number}","milestones_url":"https://api.github.com/repos/mjpost/sockeye/milestones{/number}","notifications_url":"https://api.github.com/repos/mjpost/sockeye/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/mjpost/sockeye/labels{/name}","releases_url":"https://api.github.com/repos/mjpost/sockeye/releases{/id}","deployments_url":"https://api.github.com/repos/mjpost/sockeye/deployments","created_at":"2017-08-24T08:56:37Z","updated_at":"2018-09-19T18:15:24Z","pushed_at":"2018-09-24T14:21:34Z","git_url":"git://github.com/mjpost/sockeye.git","ssh_url":"git@github.com:mjpost/sockeye.git","clone_url":"https://github.com/mjpost/sockeye.git","svn_url":"https://github.com/mjpost/sockeye","homepage":"","size":3372,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0","node_id":"MDc6TGljZW5zZTI="},"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"awslabs:master","ref":"master","sha":"5144d25e6af3ca45baa33eb2c5c1ce7369364c61","user":{"login":"awslabs","id":3299148,"node_id":"MDEyOk9yZ2FuaXphdGlvbjMyOTkxNDg=","avatar_url":"https://avatars0.githubusercontent.com/u/3299148?v=4","gravatar_id":"","url":"https://api.github.com/users/awslabs","html_url":"https://github.com/awslabs","followers_url":"https://api.github.com/users/awslabs/followers","following_url":"https://api.github.com/users/awslabs/following{/other_user}","gists_url":"https://api.github.com/users/awslabs/gists{/gist_id}","starred_url":"https://api.github.com/users/awslabs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/awslabs/subscriptions","organizations_url":"https://api.github.com/users/awslabs/orgs","repos_url":"https://api.github.com/users/awslabs/repos","events_url":"https://api.github.com/users/awslabs/events{/privacy}","received_events_url":"https://api.github.com/users/awslabs/received_events","type":"Organization","site_admin":false},"repo":{"id":93721432,"node_id":"MDEwOlJlcG9zaXRvcnk5MzcyMTQzMg==","name":"sockeye","full_name":"awslabs/sockeye","private":false,"owner":{"login":"awslabs","id":3299148,"node_id":"MDEyOk9yZ2FuaXphdGlvbjMyOTkxNDg=","avatar_url":"https://avatars0.githubusercontent.com/u/3299148?v=4","gravatar_id":"","url":"https://api.github.com/users/awslabs","html_url":"https://github.com/awslabs","followers_url":"https://api.github.com/users/awslabs/followers","following_url":"https://api.github.com/users/awslabs/following{/other_user}","gists_url":"https://api.github.com/users/awslabs/gists{/gist_id}","starred_url":"https://api.github.com/users/awslabs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/awslabs/subscriptions","organizations_url":"https://api.github.com/users/awslabs/orgs","repos_url":"https://api.github.com/users/awslabs/repos","events_url":"https://api.github.com/users/awslabs/events{/privacy}","received_events_url":"https://api.github.com/users/awslabs/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/awslabs/sockeye","description":"Sequence-to-sequence framework with a focus on Neural Machine Translation based on Apache MXNet","fork":false,"url":"https://api.github.com/repos/awslabs/sockeye","forks_url":"https://api.github.com/repos/awslabs/sockeye/forks","keys_url":"https://api.github.com/repos/awslabs/sockeye/keys{/key_id}","collaborators_url":"https://api.github.com/repos/awslabs/sockeye/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/awslabs/sockeye/teams","hooks_url":"https://api.github.com/repos/awslabs/sockeye/hooks","issue_events_url":"https://api.github.com/repos/awslabs/sockeye/issues/events{/number}","events_url":"https://api.github.com/repos/awslabs/sockeye/events","assignees_url":"https://api.github.com/repos/awslabs/sockeye/assignees{/user}","branches_url":"https://api.github.com/repos/awslabs/sockeye/branches{/branch}","tags_url":"https://api.github.com/repos/awslabs/sockeye/tags","blobs_url":"https://api.github.com/repos/awslabs/sockeye/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/awslabs/sockeye/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/awslabs/sockeye/git/refs{/sha}","trees_url":"https://api.github.com/repos/awslabs/sockeye/git/trees{/sha}","statuses_url":"https://api.github.com/repos/awslabs/sockeye/statuses/{sha}","languages_url":"https://api.github.com/repos/awslabs/sockeye/languages","stargazers_url":"https://api.github.com/repos/awslabs/sockeye/stargazers","contributors_url":"https://api.github.com/repos/awslabs/sockeye/contributors","subscribers_url":"https://api.github.com/repos/awslabs/sockeye/subscribers","subscription_url":"https://api.github.com/repos/awslabs/sockeye/subscription","commits_url":"https://api.github.com/repos/awslabs/sockeye/commits{/sha}","git_commits_url":"https://api.github.com/repos/awslabs/sockeye/git/commits{/sha}","comments_url":"https://api.github.com/repos/awslabs/sockeye/comments{/number}","issue_comment_url":"https://api.github.com/repos/awslabs/sockeye/issues/comments{/number}","contents_url":"https://api.github.com/repos/awslabs/sockeye/contents/{+path}","compare_url":"https://api.github.com/repos/awslabs/sockeye/compare/{base}...{head}","merges_url":"https://api.github.com/repos/awslabs/sockeye/merges","archive_url":"https://api.github.com/repos/awslabs/sockeye/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/awslabs/sockeye/downloads","issues_url":"https://api.github.com/repos/awslabs/sockeye/issues{/number}","pulls_url":"https://api.github.com/repos/awslabs/sockeye/pulls{/number}","milestones_url":"https://api.github.com/repos/awslabs/sockeye/milestones{/number}","notifications_url":"https://api.github.com/repos/awslabs/sockeye/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/awslabs/sockeye/labels{/name}","releases_url":"https://api.github.com/repos/awslabs/sockeye/releases{/id}","deployments_url":"https://api.github.com/repos/awslabs/sockeye/deployments","created_at":"2017-06-08T07:44:30Z","updated_at":"2018-09-24T16:06:08Z","pushed_at":"2018-09-24T20:09:26Z","git_url":"git://github.com/awslabs/sockeye.git","ssh_url":"git@github.com:awslabs/sockeye.git","clone_url":"https://github.com/awslabs/sockeye.git","svn_url":"https://github.com/awslabs/sockeye","homepage":"","size":6612,"stargazers_count":618,"watchers_count":618,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":183,"mirror_url":null,"archived":false,"open_issues_count":20,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0","node_id":"MDc6TGljZW5zZTI="},"forks":183,"open_issues":20,"watchers":618,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/awslabs/sockeye/pulls/538"},"html":{"href":"https://github.com/awslabs/sockeye/pull/538"},"issue":{"href":"https://api.github.com/repos/awslabs/sockeye/issues/538"},"comments":{"href":"https://api.github.com/repos/awslabs/sockeye/issues/538/comments"},"review_comments":{"href":"https://api.github.com/repos/awslabs/sockeye/pulls/538/comments"},"review_comment":{"href":"https://api.github.com/repos/awslabs/sockeye/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/awslabs/sockeye/pulls/538/commits"},"statuses":{"href":"https://api.github.com/repos/awslabs/sockeye/statuses/bbd8c139ef6beb8a2eaf34d2f88597cdbe01cf40"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"mjpost"}}