{"action":"created","comment":{"url":"https://api.github.com/repos/pfnet/chainer/pulls/comments/69833342","id":69833342,"diff_hunk":"@@ -0,0 +1,325 @@\n+import collections\n+import contextlib\n+\n+import numpy\n+import six\n+\n+from chainer import cuda\n+from chainer import variable\n+\n+\n+class Reporter(object):\n+\n+    \"\"\"Object to which observed values are reported.\n+\n+    Reporter is used to collect values that users want to watch. The reporter\n+    object holds a mapping from value names to the actually observed values.\n+\n+    When a value is passed to the reporter, an observer object can be\n+    optionally attached. In this case, the name of the observer is added as the\n+    prefix of the value name. The observer name should be registered\n+    beforehand.\n+\n+    See the following example::\n+\n+       >>> from chainer import Reporter, report, report_scope\n+       >>>\n+       >>> reporter = Reporter()\n+       >>> observer = object()  # it can be an arbitrary (reference) object\n+       >>> reporter.add_observer('my_observer:', observer)\n+       >>> observation = {}\n+       >>> with reporter.scope(observation):\n+       ...     reporter.report({'x': 1}, observer)\n+       ...\n+       >>> observation\n+       {'my_observer:x': 1}\n+\n+    There are also a global API to add values::\n+\n+       >>> observation = {}\n+       >>> with report_scope(observation):\n+       ...     report({'x': 1}, observer)\n+\n+    The most important application of Reporter is to report observed values\n+    from each link or chain in the training and validation procedures.\n+    :class:`~chainer.training.Trainer` and some extensions prepare their own\n+    Reporter object with the hierarchy of the target link registered as\n+    observers. We can use :func:`report` function inside any links and chains\n+    to report the observed values (e.g., training loss, accuracy, activation\n+    statistics, etc.).\n+\n+    Attributes:\n+        observation: Dictionary of observed values.\n+\n+    \"\"\"\n+    def __init__(self):\n+        self._observer_names = {}\n+        self.observation = {}\n+\n+    def __enter__(self):\n+        \"\"\"Makes this reporter object current.\"\"\"\n+        _reporters.append(self)\n+\n+    def __exit__(self, exc_type, exc_value, traceback):\n+        \"\"\"Recovers the previous reporter object to the current.\"\"\"\n+        _reporters.pop()\n+\n+    @contextlib.contextmanager\n+    def scope(self, observation):\n+        \"\"\"Creates a scope to report observed values to the given dictionary.\n+\n+        This is a context manager to be passed to ``with`` statements. In this\n+        scope, the observation dictionary is changed to the given one.\n+\n+        It also makes this reporter object current.\n+\n+        Args:\n+            observation (dict): Observation dictionary. All observations\n+                reported inside of the ``with`` statement are written to this\n+                dictionary.\n+\n+        \"\"\"\n+        old = self.observation\n+        self.observation = observation\n+        self.__enter__()\n+        yield\n+        self.__exit__(None, None, None)\n+        self.observation = old\n+\n+    def add_observer(self, name, observer):\n+        \"\"\"Registers an observer of values.\n+\n+        Observer defines a scope of names for observed values. Values observed\n+        with the observer are registered with names prefixed by the observer\n+        name.\n+\n+        Args:\n+            name (str): Name of the observer.\n+            observer: The observer object. Note that the reporter distinguishes\n+                the observers by their object ids (i.e., ``id(owner)``), rather\n+                than the object equality.\n+\n+        \"\"\"\n+        self._observer_names[id(observer)] = name\n+\n+    def add_observers(self, prefix, observers):\n+        \"\"\"Registers multiple observers at once.\n+\n+        This is a convenient method to register multiple objects at once.\n+\n+        Args:\n+            prefix (str): Prefix of each name of observers.\n+            observers: Iterator of name and observer pairs.\n+\n+        \"\"\"\n+        for name, observer in observers:\n+            self._observer_names[id(observer)] = prefix + name\n+\n+    def report(self, values, observer=None):\n+        \"\"\"Reports observed values.\n+\n+        The values are written with the key, prefixed by the name of the\n+        observer object if given.\n+\n+        Args:\n+            values (dict): Dictionary of observed values.\n+            observer: Observer object. Its object ID is used to retrieve the\n+                observer name, which is used as the prefix of the registration\n+                name of the observed value.\n+\n+        \"\"\"\n+        if observer is not None:\n+            observer_id = id(observer)\n+            if observer_id not in self._observer_names:\n+                raise KeyError(\n+                    'Given observer is not registered to the reporter.')\n+            observer_name = self._observer_names[observer_id]\n+            for key, value in six.iteritems(values):\n+                name = '%s/%s' % (observer_name, key)\n+                self.observation[name] = value\n+        else:\n+            self.observation.update(values)\n+\n+\n+_reporters = []\n+\n+\n+def get_current_reporter():\n+    \"\"\"Returns the current reporter object.\"\"\"\n+    return _reporters[-1]\n+\n+\n+def report(values, observer=None):\n+    \"\"\"Reports observed values with the current reporter object.\n+\n+    Any reporter object can be set current by the ``with`` statement. This\n+    function calls the :meth:`Report.report` method of the current report.\n+    If no reporter object is current, this function does nothing.\n+\n+    .. admonition:: Example\n+\n+       The most typical example is a use within links and chains. Suppose that\n+       a link is registered to the current reporter as an observer (for\n+       example, the target link of the optimizer is automatically registered to\n+       the reporter of the :class:`~chainer.training.Trainer`). We can report\n+       some values from the link as follows::\n+\n+          class MyRegressor(chainer.Chain):\n+              def __init__(self, predictor):\n+                  super(MyRegressor, self).__init__(predictor=predictor)\n+\n+              def __call__(self, x, y):\n+                  # This chain just computes the mean squared error between the\n+                  # prediction and y.\n+                  pred = self.predictor(x)\n+                  abs_error = F.sum(F.abs(pred - y)) / len(x.data)\n+                  loss = F.mean_squared_error(pred, y)\n+\n+                  # Report the mean absolute and squared error.\n+                  report({'abs_error': abs_error, 'squared_error': loss}, self)\n+\n+                  return loss\n+\n+       If the link is named ``'main'`` in the hierarchy (which is the default\n+       name of the target link in the\n+       :class:`~chainer.training.StandardUpdater`), these reported values are\n+       named ``'main/abs_error'`` and ``'main/squared_error'``. If these values\n+       are reported inside the :class:`~chainer.training.extension.Evaluator`\n+       extension, the names are changed to ``'validation/main/abs_error'`` and\n+       ``'validation/main/squared_error'`` (``'validation'`` is the default\n+       name of the Evaluator extension).\n+\n+    Args:\n+        values (dict): Dictionary of observed values.\n+        observer: Observer object. Its object ID is used to retrieve the\n+            observer name, which is used as the prefix of the registration name\n+            of the observed value.\n+\n+    \"\"\"\n+    if _reporters:\n+        current = _reporters[-1]\n+        current.report(values, observer)\n+\n+\n+@contextlib.contextmanager\n+def report_scope(observation):\n+    \"\"\"Returns a report scope with the current reporter.\n+\n+    This is equivalant to ``get_current_reporter().report_scope(observation)``,\n+    except that it does not make the reporter current redundantly.\n+\n+    \"\"\"\n+    current = _reporters[-1]\n+    old = current.observation\n+    current.observation = observation\n+    yield\n+    current.observation = old\n+\n+\n+class Summary(object):\n+\n+    \"\"\"Online summarization of a sequence of scalars.\n+\n+    Summary computes the statistics of given scalars online.\n+\n+    \"\"\"\n+    def __init__(self):\n+        self._x = 0\n+        self._x2 = 0\n+        self._n = 0\n+\n+    def add(self, value):\n+        \"\"\"Adds a scalar value.\n+\n+        Args:\n+            value: Scalar value to accumulate. It is either a NumPy scalar or\n+                a zero-dimensional array (on CPU or GPU).\n+\n+        \"\"\"\n+        with cuda.get_device(value):\n+            self._x += value\n+            self._x2 += value * value\n+            self._n += 1\n+\n+    def compute_mean(self):\n+        \"\"\"Computes the mean.\"\"\"\n+        x, n = self._x, self._n\n+        with cuda.get_device(x):\n+            return x / n\n+\n+    def make_statistics(self):\n+        \"\"\"Computes and returns the mean and standard deviation values.\n+\n+        Returns:\n+            tuple: Mean and standard deviation values.\n+\n+        \"\"\"\n+        x, n = self._x, self._n\n+        xp = cuda.get_array_module(x)\n+        with cuda.get_device(x):\n+            mean = x / n\n+            var = self._x2 / n - mean * mean\n+            std = xp.sqrt(var, var)\n+            return mean, std\n+\n+\n+class DictSummary(object):\n+\n+    \"\"\"Online summarization of a sequence of dictionaries.\n+\n+    DictSummary computes the statistics of a given set of scalars online. It","path":"chainer/reporter.py","position":270,"original_position":270,"commit_id":"e7e1f16e1cb5fb3df4db8c4e3cdf349354d6fb36","original_commit_id":"e7e1f16e1cb5fb3df4db8c4e3cdf349354d6fb36","user":{"login":"delta2323","id":407052,"avatar_url":"https://avatars.githubusercontent.com/u/407052?v=3","gravatar_id":"","url":"https://api.github.com/users/delta2323","html_url":"https://github.com/delta2323","followers_url":"https://api.github.com/users/delta2323/followers","following_url":"https://api.github.com/users/delta2323/following{/other_user}","gists_url":"https://api.github.com/users/delta2323/gists{/gist_id}","starred_url":"https://api.github.com/users/delta2323/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/delta2323/subscriptions","organizations_url":"https://api.github.com/users/delta2323/orgs","repos_url":"https://api.github.com/users/delta2323/repos","events_url":"https://api.github.com/users/delta2323/events{/privacy}","received_events_url":"https://api.github.com/users/delta2323/received_events","type":"User","site_admin":false},"body":"enclose DictSummary with double quotes","created_at":"2016-07-07T00:06:07Z","updated_at":"2016-07-07T00:06:07Z","html_url":"https://github.com/pfnet/chainer/pull/1285#discussion_r69833342","pull_request_url":"https://api.github.com/repos/pfnet/chainer/pulls/1285","_links":{"self":{"href":"https://api.github.com/repos/pfnet/chainer/pulls/comments/69833342"},"html":{"href":"https://github.com/pfnet/chainer/pull/1285#discussion_r69833342"},"pull_request":{"href":"https://api.github.com/repos/pfnet/chainer/pulls/1285"}}},"pull_request":{"url":"https://api.github.com/repos/pfnet/chainer/pulls/1285","id":74042786,"html_url":"https://github.com/pfnet/chainer/pull/1285","diff_url":"https://github.com/pfnet/chainer/pull/1285.diff","patch_url":"https://github.com/pfnet/chainer/pull/1285.patch","issue_url":"https://api.github.com/repos/pfnet/chainer/issues/1285","number":1285,"state":"open","locked":false,"title":"Trainer2","user":{"login":"beam2d","id":392019,"avatar_url":"https://avatars.githubusercontent.com/u/392019?v=3","gravatar_id":"","url":"https://api.github.com/users/beam2d","html_url":"https://github.com/beam2d","followers_url":"https://api.github.com/users/beam2d/followers","following_url":"https://api.github.com/users/beam2d/following{/other_user}","gists_url":"https://api.github.com/users/beam2d/gists{/gist_id}","starred_url":"https://api.github.com/users/beam2d/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/beam2d/subscriptions","organizations_url":"https://api.github.com/users/beam2d/orgs","repos_url":"https://api.github.com/users/beam2d/repos","events_url":"https://api.github.com/users/beam2d/events{/privacy}","received_events_url":"https://api.github.com/users/beam2d/received_events","type":"User","site_admin":false},"body":"fix #914. I wrote an updated version of the training loop abstraction. This includes many improvements based on the feedback to the old version (#958). For example,\r\n\r\n- Design around the dataset abstraction is improved. Most considerable applications are supported with some efforts of customization.\r\n- New Trainer supports using multiple datasets and multiple optimizers.\r\n- Evaluation report is abstracted into Reporter object. This makes it easy to collect many observable values like loss/accuracy, activation statistics, etc.\r\n\r\nI have not updated the tutorial document yet, which should be done before merging it.","created_at":"2016-06-16T08:45:48Z","updated_at":"2016-07-07T00:06:07Z","closed_at":null,"merged_at":null,"merge_commit_sha":"d85087d8731af840cd0618af1486046bf2d79731","assignee":{"login":"delta2323","id":407052,"avatar_url":"https://avatars.githubusercontent.com/u/407052?v=3","gravatar_id":"","url":"https://api.github.com/users/delta2323","html_url":"https://github.com/delta2323","followers_url":"https://api.github.com/users/delta2323/followers","following_url":"https://api.github.com/users/delta2323/following{/other_user}","gists_url":"https://api.github.com/users/delta2323/gists{/gist_id}","starred_url":"https://api.github.com/users/delta2323/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/delta2323/subscriptions","organizations_url":"https://api.github.com/users/delta2323/orgs","repos_url":"https://api.github.com/users/delta2323/repos","events_url":"https://api.github.com/users/delta2323/events{/privacy}","received_events_url":"https://api.github.com/users/delta2323/received_events","type":"User","site_admin":false},"assignees":[{"login":"delta2323","id":407052,"avatar_url":"https://avatars.githubusercontent.com/u/407052?v=3","gravatar_id":"","url":"https://api.github.com/users/delta2323","html_url":"https://github.com/delta2323","followers_url":"https://api.github.com/users/delta2323/followers","following_url":"https://api.github.com/users/delta2323/following{/other_user}","gists_url":"https://api.github.com/users/delta2323/gists{/gist_id}","starred_url":"https://api.github.com/users/delta2323/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/delta2323/subscriptions","organizations_url":"https://api.github.com/users/delta2323/orgs","repos_url":"https://api.github.com/users/delta2323/repos","events_url":"https://api.github.com/users/delta2323/events{/privacy}","received_events_url":"https://api.github.com/users/delta2323/received_events","type":"User","site_admin":false},{"login":"unnonouno","id":740680,"avatar_url":"https://avatars.githubusercontent.com/u/740680?v=3","gravatar_id":"","url":"https://api.github.com/users/unnonouno","html_url":"https://github.com/unnonouno","followers_url":"https://api.github.com/users/unnonouno/followers","following_url":"https://api.github.com/users/unnonouno/following{/other_user}","gists_url":"https://api.github.com/users/unnonouno/gists{/gist_id}","starred_url":"https://api.github.com/users/unnonouno/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/unnonouno/subscriptions","organizations_url":"https://api.github.com/users/unnonouno/orgs","repos_url":"https://api.github.com/users/unnonouno/repos","events_url":"https://api.github.com/users/unnonouno/events{/privacy}","received_events_url":"https://api.github.com/users/unnonouno/received_events","type":"User","site_admin":false},{"login":"bkvogel","id":12666050,"avatar_url":"https://avatars.githubusercontent.com/u/12666050?v=3","gravatar_id":"","url":"https://api.github.com/users/bkvogel","html_url":"https://github.com/bkvogel","followers_url":"https://api.github.com/users/bkvogel/followers","following_url":"https://api.github.com/users/bkvogel/following{/other_user}","gists_url":"https://api.github.com/users/bkvogel/gists{/gist_id}","starred_url":"https://api.github.com/users/bkvogel/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bkvogel/subscriptions","organizations_url":"https://api.github.com/users/bkvogel/orgs","repos_url":"https://api.github.com/users/bkvogel/repos","events_url":"https://api.github.com/users/bkvogel/events{/privacy}","received_events_url":"https://api.github.com/users/bkvogel/received_events","type":"User","site_admin":false}],"milestone":null,"commits_url":"https://api.github.com/repos/pfnet/chainer/pulls/1285/commits","review_comments_url":"https://api.github.com/repos/pfnet/chainer/pulls/1285/comments","review_comment_url":"https://api.github.com/repos/pfnet/chainer/pulls/comments{/number}","comments_url":"https://api.github.com/repos/pfnet/chainer/issues/1285/comments","statuses_url":"https://api.github.com/repos/pfnet/chainer/statuses/e7e1f16e1cb5fb3df4db8c4e3cdf349354d6fb36","head":{"label":"pfnet:trainer2","ref":"trainer2","sha":"e7e1f16e1cb5fb3df4db8c4e3cdf349354d6fb36","user":{"login":"pfnet","id":9739572,"avatar_url":"https://avatars.githubusercontent.com/u/9739572?v=3","gravatar_id":"","url":"https://api.github.com/users/pfnet","html_url":"https://github.com/pfnet","followers_url":"https://api.github.com/users/pfnet/followers","following_url":"https://api.github.com/users/pfnet/following{/other_user}","gists_url":"https://api.github.com/users/pfnet/gists{/gist_id}","starred_url":"https://api.github.com/users/pfnet/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pfnet/subscriptions","organizations_url":"https://api.github.com/users/pfnet/orgs","repos_url":"https://api.github.com/users/pfnet/repos","events_url":"https://api.github.com/users/pfnet/events{/privacy}","received_events_url":"https://api.github.com/users/pfnet/received_events","type":"Organization","site_admin":false},"repo":{"id":36914478,"name":"chainer","full_name":"pfnet/chainer","owner":{"login":"pfnet","id":9739572,"avatar_url":"https://avatars.githubusercontent.com/u/9739572?v=3","gravatar_id":"","url":"https://api.github.com/users/pfnet","html_url":"https://github.com/pfnet","followers_url":"https://api.github.com/users/pfnet/followers","following_url":"https://api.github.com/users/pfnet/following{/other_user}","gists_url":"https://api.github.com/users/pfnet/gists{/gist_id}","starred_url":"https://api.github.com/users/pfnet/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pfnet/subscriptions","organizations_url":"https://api.github.com/users/pfnet/orgs","repos_url":"https://api.github.com/users/pfnet/repos","events_url":"https://api.github.com/users/pfnet/events{/privacy}","received_events_url":"https://api.github.com/users/pfnet/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/pfnet/chainer","description":"A flexible framework of neural networks for deep learning","fork":false,"url":"https://api.github.com/repos/pfnet/chainer","forks_url":"https://api.github.com/repos/pfnet/chainer/forks","keys_url":"https://api.github.com/repos/pfnet/chainer/keys{/key_id}","collaborators_url":"https://api.github.com/repos/pfnet/chainer/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/pfnet/chainer/teams","hooks_url":"https://api.github.com/repos/pfnet/chainer/hooks","issue_events_url":"https://api.github.com/repos/pfnet/chainer/issues/events{/number}","events_url":"https://api.github.com/repos/pfnet/chainer/events","assignees_url":"https://api.github.com/repos/pfnet/chainer/assignees{/user}","branches_url":"https://api.github.com/repos/pfnet/chainer/branches{/branch}","tags_url":"https://api.github.com/repos/pfnet/chainer/tags","blobs_url":"https://api.github.com/repos/pfnet/chainer/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/pfnet/chainer/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/pfnet/chainer/git/refs{/sha}","trees_url":"https://api.github.com/repos/pfnet/chainer/git/trees{/sha}","statuses_url":"https://api.github.com/repos/pfnet/chainer/statuses/{sha}","languages_url":"https://api.github.com/repos/pfnet/chainer/languages","stargazers_url":"https://api.github.com/repos/pfnet/chainer/stargazers","contributors_url":"https://api.github.com/repos/pfnet/chainer/contributors","subscribers_url":"https://api.github.com/repos/pfnet/chainer/subscribers","subscription_url":"https://api.github.com/repos/pfnet/chainer/subscription","commits_url":"https://api.github.com/repos/pfnet/chainer/commits{/sha}","git_commits_url":"https://api.github.com/repos/pfnet/chainer/git/commits{/sha}","comments_url":"https://api.github.com/repos/pfnet/chainer/comments{/number}","issue_comment_url":"https://api.github.com/repos/pfnet/chainer/issues/comments{/number}","contents_url":"https://api.github.com/repos/pfnet/chainer/contents/{+path}","compare_url":"https://api.github.com/repos/pfnet/chainer/compare/{base}...{head}","merges_url":"https://api.github.com/repos/pfnet/chainer/merges","archive_url":"https://api.github.com/repos/pfnet/chainer/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/pfnet/chainer/downloads","issues_url":"https://api.github.com/repos/pfnet/chainer/issues{/number}","pulls_url":"https://api.github.com/repos/pfnet/chainer/pulls{/number}","milestones_url":"https://api.github.com/repos/pfnet/chainer/milestones{/number}","notifications_url":"https://api.github.com/repos/pfnet/chainer/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/pfnet/chainer/labels{/name}","releases_url":"https://api.github.com/repos/pfnet/chainer/releases{/id}","deployments_url":"https://api.github.com/repos/pfnet/chainer/deployments","created_at":"2015-06-05T05:50:37Z","updated_at":"2016-07-06T06:14:44Z","pushed_at":"2016-07-06T23:29:45Z","git_url":"git://github.com/pfnet/chainer.git","ssh_url":"git@github.com:pfnet/chainer.git","clone_url":"https://github.com/pfnet/chainer.git","svn_url":"https://github.com/pfnet/chainer","homepage":"http://chainer.org","size":23646,"stargazers_count":1484,"watchers_count":1484,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":345,"mirror_url":null,"open_issues_count":182,"forks":345,"open_issues":182,"watchers":1484,"default_branch":"master"}},"base":{"label":"pfnet:master","ref":"master","sha":"6a63b31b78fccf34c6357a0b9788a824aadc7a0a","user":{"login":"pfnet","id":9739572,"avatar_url":"https://avatars.githubusercontent.com/u/9739572?v=3","gravatar_id":"","url":"https://api.github.com/users/pfnet","html_url":"https://github.com/pfnet","followers_url":"https://api.github.com/users/pfnet/followers","following_url":"https://api.github.com/users/pfnet/following{/other_user}","gists_url":"https://api.github.com/users/pfnet/gists{/gist_id}","starred_url":"https://api.github.com/users/pfnet/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pfnet/subscriptions","organizations_url":"https://api.github.com/users/pfnet/orgs","repos_url":"https://api.github.com/users/pfnet/repos","events_url":"https://api.github.com/users/pfnet/events{/privacy}","received_events_url":"https://api.github.com/users/pfnet/received_events","type":"Organization","site_admin":false},"repo":{"id":36914478,"name":"chainer","full_name":"pfnet/chainer","owner":{"login":"pfnet","id":9739572,"avatar_url":"https://avatars.githubusercontent.com/u/9739572?v=3","gravatar_id":"","url":"https://api.github.com/users/pfnet","html_url":"https://github.com/pfnet","followers_url":"https://api.github.com/users/pfnet/followers","following_url":"https://api.github.com/users/pfnet/following{/other_user}","gists_url":"https://api.github.com/users/pfnet/gists{/gist_id}","starred_url":"https://api.github.com/users/pfnet/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pfnet/subscriptions","organizations_url":"https://api.github.com/users/pfnet/orgs","repos_url":"https://api.github.com/users/pfnet/repos","events_url":"https://api.github.com/users/pfnet/events{/privacy}","received_events_url":"https://api.github.com/users/pfnet/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/pfnet/chainer","description":"A flexible framework of neural networks for deep learning","fork":false,"url":"https://api.github.com/repos/pfnet/chainer","forks_url":"https://api.github.com/repos/pfnet/chainer/forks","keys_url":"https://api.github.com/repos/pfnet/chainer/keys{/key_id}","collaborators_url":"https://api.github.com/repos/pfnet/chainer/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/pfnet/chainer/teams","hooks_url":"https://api.github.com/repos/pfnet/chainer/hooks","issue_events_url":"https://api.github.com/repos/pfnet/chainer/issues/events{/number}","events_url":"https://api.github.com/repos/pfnet/chainer/events","assignees_url":"https://api.github.com/repos/pfnet/chainer/assignees{/user}","branches_url":"https://api.github.com/repos/pfnet/chainer/branches{/branch}","tags_url":"https://api.github.com/repos/pfnet/chainer/tags","blobs_url":"https://api.github.com/repos/pfnet/chainer/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/pfnet/chainer/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/pfnet/chainer/git/refs{/sha}","trees_url":"https://api.github.com/repos/pfnet/chainer/git/trees{/sha}","statuses_url":"https://api.github.com/repos/pfnet/chainer/statuses/{sha}","languages_url":"https://api.github.com/repos/pfnet/chainer/languages","stargazers_url":"https://api.github.com/repos/pfnet/chainer/stargazers","contributors_url":"https://api.github.com/repos/pfnet/chainer/contributors","subscribers_url":"https://api.github.com/repos/pfnet/chainer/subscribers","subscription_url":"https://api.github.com/repos/pfnet/chainer/subscription","commits_url":"https://api.github.com/repos/pfnet/chainer/commits{/sha}","git_commits_url":"https://api.github.com/repos/pfnet/chainer/git/commits{/sha}","comments_url":"https://api.github.com/repos/pfnet/chainer/comments{/number}","issue_comment_url":"https://api.github.com/repos/pfnet/chainer/issues/comments{/number}","contents_url":"https://api.github.com/repos/pfnet/chainer/contents/{+path}","compare_url":"https://api.github.com/repos/pfnet/chainer/compare/{base}...{head}","merges_url":"https://api.github.com/repos/pfnet/chainer/merges","archive_url":"https://api.github.com/repos/pfnet/chainer/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/pfnet/chainer/downloads","issues_url":"https://api.github.com/repos/pfnet/chainer/issues{/number}","pulls_url":"https://api.github.com/repos/pfnet/chainer/pulls{/number}","milestones_url":"https://api.github.com/repos/pfnet/chainer/milestones{/number}","notifications_url":"https://api.github.com/repos/pfnet/chainer/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/pfnet/chainer/labels{/name}","releases_url":"https://api.github.com/repos/pfnet/chainer/releases{/id}","deployments_url":"https://api.github.com/repos/pfnet/chainer/deployments","created_at":"2015-06-05T05:50:37Z","updated_at":"2016-07-06T06:14:44Z","pushed_at":"2016-07-06T23:29:45Z","git_url":"git://github.com/pfnet/chainer.git","ssh_url":"git@github.com:pfnet/chainer.git","clone_url":"https://github.com/pfnet/chainer.git","svn_url":"https://github.com/pfnet/chainer","homepage":"http://chainer.org","size":23646,"stargazers_count":1484,"watchers_count":1484,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":345,"mirror_url":null,"open_issues_count":182,"forks":345,"open_issues":182,"watchers":1484,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/pfnet/chainer/pulls/1285"},"html":{"href":"https://github.com/pfnet/chainer/pull/1285"},"issue":{"href":"https://api.github.com/repos/pfnet/chainer/issues/1285"},"comments":{"href":"https://api.github.com/repos/pfnet/chainer/issues/1285/comments"},"review_comments":{"href":"https://api.github.com/repos/pfnet/chainer/pulls/1285/comments"},"review_comment":{"href":"https://api.github.com/repos/pfnet/chainer/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/pfnet/chainer/pulls/1285/commits"},"statuses":{"href":"https://api.github.com/repos/pfnet/chainer/statuses/e7e1f16e1cb5fb3df4db8c4e3cdf349354d6fb36"}}}}
{"actor":{"display_login":"delta2323"}}