{"action":"created","comment":{"url":"https://api.github.com/repos/pymc-devs/pymc3/pulls/comments/90821365","pull_request_review_id":11335695,"id":90821365,"diff_hunk":"@@ -203,52 +216,167 @@ def logp_(z_g):\n     return elbo\n \n \n-def advi_minibatch(vars=None, start=None, model=None, n=5000, n_mcsamples=1,\n-                   minibatch_RVs=None, minibatch_tensors=None,\n-                   minibatches=None, local_RVs=None, observed_RVs=None,\n-                   encoder_params=[], total_size=None, optimizer=None,\n-                   learning_rate=.001, epsilon=.1, random_seed=None):\n-    \"\"\"Perform mini-batch ADVI.\n-\n-    This function implements a mini-batch ADVI with the meanfield\n-    approximation. Autoencoding variational inference is also supported.\n-\n-    The log probability terms for mini-batches, corresponding to RVs in\n-    minibatch_RVs, are scaled to (total_size) / (the number of samples in each\n-    mini-batch), where total_size is an argument for the total data size.\n-\n-    minibatch_tensors is a list of tensors (can be shared variables) to which\n-    mini-batch samples are set during the optimization. In most cases, these\n-    tensors are observations for RVs in the model.\n+def _make_elbo_t(\n+    observed_RVs, global_RVs, local_RVs, potentials, n_mcsamples, random_seed):\n+    global_order = pm.ArrayOrdering([v for v in global_RVs])\n+    local_order = pm.ArrayOrdering([v for v in local_RVs])\n \n-    local_RVs and observed_RVs are used for autoencoding variational Bayes.\n-    Both of these RVs are associated with each of given samples.\n-    The difference is that local_RVs are unkown and their posterior\n-    distributions are approximated.\n+    inarray_g, uw_g, replace_g, c_g = _join_global_RVs(global_RVs, global_order)\n+    inarray_l, uw_l, replace_l, c_l = _join_local_RVs(local_RVs, local_order)\n \n-    local_RVs are Ordered dict, whose keys and values are RVs and a tuple of\n-    two objects. The first is the theano expression of variational parameters\n-    (mean and log of std) of the approximate posterior, which are encoded from\n-    given samples by an arbitrary deterministic function, e.g., MLP. The other\n-    one is a scaling constant to be multiplied to the log probability term\n-    corresponding to the RV.\n+    logpt = _make_logpt(global_RVs, local_RVs, observed_RVs, potentials)\n+    replace = replace_g\n+    replace.update(replace_l)\n+    logpt = theano.clone(logpt, replace, strict=False)\n \n-    observed_RVs are also Ordered dict with RVs as the keys, but whose values\n-    are only the scaling constant as in local_RVs. In this case, total_size is\n-    ignored.\n+    elbo = _elbo_t(logpt, uw_g, uw_l, inarray_g, inarray_l, c_g, c_l,\n+                   n_mcsamples, random_seed)\n \n-    If local_RVs is None (thus not using autoencoder), the following two\n-    settings are equivalent:\n+    return elbo, uw_l, uw_g\n \n-    - observed_RVs=OrderedDict([(rv, total_size / minibatch_size)])\n-    - minibatch_RVs=[rv], total_size=total_size\n \n-    where minibatch_size is minibatch_tensors[0].shape[0].\n+def advi_minibatch(vars=None, start=None, model=None, n=5000, n_mcsamples=1,\n+                   minibatch_RVs=None, minibatch_tensors=None,\n+                   minibatches=None, global_RVs=None, local_RVs=None,\n+                   observed_RVs=None, encoder_params=[], total_size=None,\n+                   optimizer=None, learning_rate=.001, epsilon=.1,\n+                   random_seed=None):\n+    \"\"\"Perform mini-batch ADVI.\n \n-    The variational parameters and the parameters of the autoencoder are\n-    simultaneously optimized with given optimizer, which is a function that\n-    returns a dictionary of parameter updates as provided to Theano function.\n-    See the docstring of pymc3.variational.advi().\n+    This function implements a mini-batch automatic differentiation variational\n+    inference (ADVI; Kucukelbir et al., 2015) with the meanfield\n+    approximation. Autoencoding variational Bayes (AEVB; Kingma and Welling,\n+    2014) is also supported.\n+\n+    For explanation, we classify random variables in probabilistic models into\n+    three types. Observed random variables\n+    :math:`{\\cal Y}=\\{\\mathbf{y}_{i}\\}_{i=1}^{N}` are :math:`N` observations.\n+    Each :math:`\\mathbf{y}_{i}` can be a set of observed random variables,\n+    i.e., :math:`\\mathbf{y}_{i}=\\{\\mathbf{y}_{i}^{k}\\}_{k=1}^{V_{o}}`, where\n+    :math:`V_{k}` is the number of the types of observed random variables\n+    in the model.\n+\n+    The next ones are global random variables\n+    :math:`\\Theta=\\{\\\\theta^{k}\\}_{k=1}^{V_{g}}`, which are used to calculate\n+    the probabilities for all observed samples.\n+\n+    The last ones are local random variables\n+    :math:`{\\cal Z}=\\{\\mathbf{z}_{i}\\}_{i=1}^{N}`, where\n+    :math:`\\mathbf{z}_{i}=\\{\\mathbf{z}_{i}^{k}\\}_{k=1}^{V_{l}}`.\n+    These RVs are used only in AEVB.\n+\n+    The goal of ADVI is to approximate the posterior distribution\n+    :math:`p(\\Theta,{\\cal Z}|{\\cal Y})` by variational posterior\n+    :math:`q(\\Theta)\\prod_{i=1}^{N}q(\\mathbf{z}_{i})`. All of these terms\n+    are normal distributions (mean-field approximation).\n+\n+    :math:`q(\\Theta)` is parametrized with its means and standard deviations.\n+    These parameters are denoted as :math:`\\gamma`. While :math:`\\gamma` is\n+    a constant, the parameters of :math:`q(\\mathbf{z}_{i})` are dependent on\n+    each observation. Therefore these parameters are denoted as\n+    :math:`\\\\xi(\\mathbf{y}_{i}; \\\\nu)`, where :math:`\\\\nu` is the parameters\n+    of :math:`\\\\xi(\\cdot)`. For example, :math:`\\\\xi(\\cdot)` can be a\n+    multilayer perceptron or convolutional neural network.\n+\n+    In addition to :math:`\\\\xi(\\cdot)`, we can also include deterministic\n+    mappings for the likelihood of observations. We denote the parameters of\n+    the deterministic mappings as :math:`\\eta`. An example of such mappings is\n+    the deconvolutional neural network used in the convolutional VAE example\n+    in the PyMC3 notebook directory.\n+\n+    This function maximizes the evidence lower bound (ELBO)\n+    :math:`{\\cal L}(\\gamma, \\\\nu, \\eta)` defined as follows:\n+\n+    .. math::\n+\n+        {\\cal L}(\\gamma,\\\\nu,\\eta) & =\n+        \\mathbf{c}_{o}\\mathbb{E}_{q(\\Theta)}\\left[\n+        \\sum_{i=1}^{N}\\mathbb{E}_{q(\\mathbf{z}_{i})}\\left[\n+        \\log p(\\mathbf{y}_{i}|\\mathbf{z}_{i},\\Theta,\\eta)\n+        \\\\right]\\\\right] \\\\\\\\ &\n+        - \\mathbf{c}_{g}KL\\left[q(\\Theta)||p(\\Theta)\\\\right]\n+        - \\mathbf{c}_{l}\\sum_{i=1}^{N}\n+            KL\\left[q(\\mathbf{z}_{i})||p(\\mathbf{z}_{i})\\\\right],\n+\n+    where :math:`KL[q(v)||p(v)]` is the Kullback-Leibler divergence\n+\n+    .. math::\n+\n+        KL[q(v)||p(v)] = \\int q(v)\\log\\\\frac{q(v)}{p(v)}dv,\n+\n+    :math:`\\mathbf{c}_{o/g/l}` are vectors for weighting each term of ELBO.\n+    More precisely, we can write each of the terms in ELBO as follows:\n+\n+    .. math::\n+\n+        \\mathbf{c}_{o}\\log p(\\mathbf{y}_{i}|\\mathbf{z}_{i},\\Theta,\\eta) & = &\n+        \\sum_{k=1}^{V_{o}}c_{o}^{k}\n+            \\log p(\\mathbf{y}_{i}^{k}|\n+                   {\\\\rm pa}(\\mathbf{y}_{i}^{k},\\Theta,\\eta)) \\\\\\\\\n+        \\mathbf{c}_{g}KL\\left[q(\\Theta)||p(\\Theta)\\\\right] & = &\n+        \\sum_{k=1}^{V_{g}}c_{g}^{k}KL\\left[\n+            q(\\\\theta^{k})||p(\\\\theta^{k}|{\\\\rm pa(\\\\theta^{k})})\\\\right] \\\\\\\\\n+        \\mathbf{c}_{l}KL\\left[q(\\mathbf{z}_{i}||p(\\mathbf{z}_{i})\\\\right] & = &\n+        \\sum_{k=1}^{V_{l}}c_{l}^{k}KL\\left[\n+            q(\\mathbf{z}_{i}^{k})||\n+            p(\\mathbf{z}_{i}^{k}|{\\\\rm pa}(\\mathbf{z}_{i}^{k}))\\\\right],\n+\n+    where :math:`{\\\\rm pa}(v)` denotes the set of parent variables of :math:`v`\n+    in the directed acyclic graph of the model.\n+\n+    When using mini-batches, :math:`c_{o}^{k}` and :math:`c_{l}^{k}` should be\n+    set to :math:`N/M`, where :math:`M` is the number of observations in each\n+    mini-batch. Other weighting scheme were proposed in (Blundell et al., 2015)","path":"pymc3/variational/advi_minibatch.py","position":269,"original_position":269,"commit_id":"4fb52b412ddbfbc3347cbd2eebfdf455377e7f0b","original_commit_id":"4fb52b412ddbfbc3347cbd2eebfdf455377e7f0b","user":{"login":"twiecki","id":674200,"avatar_url":"https://avatars.githubusercontent.com/u/674200?v=3","gravatar_id":"","url":"https://api.github.com/users/twiecki","html_url":"https://github.com/twiecki","followers_url":"https://api.github.com/users/twiecki/followers","following_url":"https://api.github.com/users/twiecki/following{/other_user}","gists_url":"https://api.github.com/users/twiecki/gists{/gist_id}","starred_url":"https://api.github.com/users/twiecki/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/twiecki/subscriptions","organizations_url":"https://api.github.com/users/twiecki/orgs","repos_url":"https://api.github.com/users/twiecki/repos","events_url":"https://api.github.com/users/twiecki/events{/privacy}","received_events_url":"https://api.github.com/users/twiecki/received_events","type":"User","site_admin":false},"body":"Typo: Another weighting scheme was proposed in...","created_at":"2016-12-05T08:46:44Z","updated_at":"2016-12-05T08:46:44Z","html_url":"https://github.com/pymc-devs/pymc3/pull/1573#discussion_r90821365","pull_request_url":"https://api.github.com/repos/pymc-devs/pymc3/pulls/1573","_links":{"self":{"href":"https://api.github.com/repos/pymc-devs/pymc3/pulls/comments/90821365"},"html":{"href":"https://github.com/pymc-devs/pymc3/pull/1573#discussion_r90821365"},"pull_request":{"href":"https://api.github.com/repos/pymc-devs/pymc3/pulls/1573"}}},"pull_request":{"url":"https://api.github.com/repos/pymc-devs/pymc3/pulls/1573","id":96435868,"html_url":"https://github.com/pymc-devs/pymc3/pull/1573","diff_url":"https://github.com/pymc-devs/pymc3/pull/1573.diff","patch_url":"https://github.com/pymc-devs/pymc3/pull/1573.patch","issue_url":"https://api.github.com/repos/pymc-devs/pymc3/issues/1573","number":1573,"state":"open","locked":false,"title":"Refactor minibatch ADVI and update docstring","user":{"login":"taku-y","id":4969395,"avatar_url":"https://avatars.githubusercontent.com/u/4969395?v=3","gravatar_id":"","url":"https://api.github.com/users/taku-y","html_url":"https://github.com/taku-y","followers_url":"https://api.github.com/users/taku-y/followers","following_url":"https://api.github.com/users/taku-y/following{/other_user}","gists_url":"https://api.github.com/users/taku-y/gists{/gist_id}","starred_url":"https://api.github.com/users/taku-y/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/taku-y/subscriptions","organizations_url":"https://api.github.com/users/taku-y/orgs","repos_url":"https://api.github.com/users/taku-y/repos","events_url":"https://api.github.com/users/taku-y/events{/privacy}","received_events_url":"https://api.github.com/users/taku-y/received_events","type":"User","site_admin":false},"body":"I refactored minibatch ADVI and update docstring. The equation of ELBO of minibatch (and autoencoding-VB) ADVI in PyMC3 is written and the input arguments is documented in detail. \r\n\r\nI have tested the function on the example notebooks where `advi_minibatch` is used.","created_at":"2016-12-04T15:30:18Z","updated_at":"2016-12-05T08:46:44Z","closed_at":null,"merged_at":null,"merge_commit_sha":"d1978dea1fdb4f7be966d0e439e3bd9a33cbe7d5","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/pymc-devs/pymc3/pulls/1573/commits","review_comments_url":"https://api.github.com/repos/pymc-devs/pymc3/pulls/1573/comments","review_comment_url":"https://api.github.com/repos/pymc-devs/pymc3/pulls/comments{/number}","comments_url":"https://api.github.com/repos/pymc-devs/pymc3/issues/1573/comments","statuses_url":"https://api.github.com/repos/pymc-devs/pymc3/statuses/4fb52b412ddbfbc3347cbd2eebfdf455377e7f0b","head":{"label":"taku-y:advi_weighting","ref":"advi_weighting","sha":"4fb52b412ddbfbc3347cbd2eebfdf455377e7f0b","user":{"login":"taku-y","id":4969395,"avatar_url":"https://avatars.githubusercontent.com/u/4969395?v=3","gravatar_id":"","url":"https://api.github.com/users/taku-y","html_url":"https://github.com/taku-y","followers_url":"https://api.github.com/users/taku-y/followers","following_url":"https://api.github.com/users/taku-y/following{/other_user}","gists_url":"https://api.github.com/users/taku-y/gists{/gist_id}","starred_url":"https://api.github.com/users/taku-y/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/taku-y/subscriptions","organizations_url":"https://api.github.com/users/taku-y/orgs","repos_url":"https://api.github.com/users/taku-y/repos","events_url":"https://api.github.com/users/taku-y/events{/privacy}","received_events_url":"https://api.github.com/users/taku-y/received_events","type":"User","site_admin":false},"repo":{"id":52141301,"name":"pymc3","full_name":"taku-y/pymc3","owner":{"login":"taku-y","id":4969395,"avatar_url":"https://avatars.githubusercontent.com/u/4969395?v=3","gravatar_id":"","url":"https://api.github.com/users/taku-y","html_url":"https://github.com/taku-y","followers_url":"https://api.github.com/users/taku-y/followers","following_url":"https://api.github.com/users/taku-y/following{/other_user}","gists_url":"https://api.github.com/users/taku-y/gists{/gist_id}","starred_url":"https://api.github.com/users/taku-y/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/taku-y/subscriptions","organizations_url":"https://api.github.com/users/taku-y/orgs","repos_url":"https://api.github.com/users/taku-y/repos","events_url":"https://api.github.com/users/taku-y/events{/privacy}","received_events_url":"https://api.github.com/users/taku-y/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/taku-y/pymc3","description":"Probabilistic Programming in Python. Uses Theano as a backend and includes the NUTS sampler.","fork":true,"url":"https://api.github.com/repos/taku-y/pymc3","forks_url":"https://api.github.com/repos/taku-y/pymc3/forks","keys_url":"https://api.github.com/repos/taku-y/pymc3/keys{/key_id}","collaborators_url":"https://api.github.com/repos/taku-y/pymc3/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/taku-y/pymc3/teams","hooks_url":"https://api.github.com/repos/taku-y/pymc3/hooks","issue_events_url":"https://api.github.com/repos/taku-y/pymc3/issues/events{/number}","events_url":"https://api.github.com/repos/taku-y/pymc3/events","assignees_url":"https://api.github.com/repos/taku-y/pymc3/assignees{/user}","branches_url":"https://api.github.com/repos/taku-y/pymc3/branches{/branch}","tags_url":"https://api.github.com/repos/taku-y/pymc3/tags","blobs_url":"https://api.github.com/repos/taku-y/pymc3/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/taku-y/pymc3/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/taku-y/pymc3/git/refs{/sha}","trees_url":"https://api.github.com/repos/taku-y/pymc3/git/trees{/sha}","statuses_url":"https://api.github.com/repos/taku-y/pymc3/statuses/{sha}","languages_url":"https://api.github.com/repos/taku-y/pymc3/languages","stargazers_url":"https://api.github.com/repos/taku-y/pymc3/stargazers","contributors_url":"https://api.github.com/repos/taku-y/pymc3/contributors","subscribers_url":"https://api.github.com/repos/taku-y/pymc3/subscribers","subscription_url":"https://api.github.com/repos/taku-y/pymc3/subscription","commits_url":"https://api.github.com/repos/taku-y/pymc3/commits{/sha}","git_commits_url":"https://api.github.com/repos/taku-y/pymc3/git/commits{/sha}","comments_url":"https://api.github.com/repos/taku-y/pymc3/comments{/number}","issue_comment_url":"https://api.github.com/repos/taku-y/pymc3/issues/comments{/number}","contents_url":"https://api.github.com/repos/taku-y/pymc3/contents/{+path}","compare_url":"https://api.github.com/repos/taku-y/pymc3/compare/{base}...{head}","merges_url":"https://api.github.com/repos/taku-y/pymc3/merges","archive_url":"https://api.github.com/repos/taku-y/pymc3/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/taku-y/pymc3/downloads","issues_url":"https://api.github.com/repos/taku-y/pymc3/issues{/number}","pulls_url":"https://api.github.com/repos/taku-y/pymc3/pulls{/number}","milestones_url":"https://api.github.com/repos/taku-y/pymc3/milestones{/number}","notifications_url":"https://api.github.com/repos/taku-y/pymc3/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/taku-y/pymc3/labels{/name}","releases_url":"https://api.github.com/repos/taku-y/pymc3/releases{/id}","deployments_url":"https://api.github.com/repos/taku-y/pymc3/deployments","created_at":"2016-02-20T07:02:06Z","updated_at":"2016-11-07T15:32:13Z","pushed_at":"2016-11-28T14:10:58Z","git_url":"git://github.com/taku-y/pymc3.git","ssh_url":"git@github.com:taku-y/pymc3.git","clone_url":"https://github.com/taku-y/pymc3.git","svn_url":"https://github.com/taku-y/pymc3","homepage":"http://pymc-devs.github.io/pymc3/","size":112753,"stargazers_count":7,"watchers_count":7,"language":"Python","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":3,"mirror_url":null,"open_issues_count":0,"forks":3,"open_issues":0,"watchers":7,"default_branch":"master"}},"base":{"label":"pymc-devs:master","ref":"master","sha":"2edbe6c1238ad4884cecbf08b638b9f18c92c216","user":{"login":"pymc-devs","id":81121,"avatar_url":"https://avatars.githubusercontent.com/u/81121?v=3","gravatar_id":"","url":"https://api.github.com/users/pymc-devs","html_url":"https://github.com/pymc-devs","followers_url":"https://api.github.com/users/pymc-devs/followers","following_url":"https://api.github.com/users/pymc-devs/following{/other_user}","gists_url":"https://api.github.com/users/pymc-devs/gists{/gist_id}","starred_url":"https://api.github.com/users/pymc-devs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pymc-devs/subscriptions","organizations_url":"https://api.github.com/users/pymc-devs/orgs","repos_url":"https://api.github.com/users/pymc-devs/repos","events_url":"https://api.github.com/users/pymc-devs/events{/privacy}","received_events_url":"https://api.github.com/users/pymc-devs/received_events","type":"Organization","site_admin":false},"repo":{"id":192904,"name":"pymc3","full_name":"pymc-devs/pymc3","owner":{"login":"pymc-devs","id":81121,"avatar_url":"https://avatars.githubusercontent.com/u/81121?v=3","gravatar_id":"","url":"https://api.github.com/users/pymc-devs","html_url":"https://github.com/pymc-devs","followers_url":"https://api.github.com/users/pymc-devs/followers","following_url":"https://api.github.com/users/pymc-devs/following{/other_user}","gists_url":"https://api.github.com/users/pymc-devs/gists{/gist_id}","starred_url":"https://api.github.com/users/pymc-devs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pymc-devs/subscriptions","organizations_url":"https://api.github.com/users/pymc-devs/orgs","repos_url":"https://api.github.com/users/pymc-devs/repos","events_url":"https://api.github.com/users/pymc-devs/events{/privacy}","received_events_url":"https://api.github.com/users/pymc-devs/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/pymc-devs/pymc3","description":"Probabilistic Programming in Python. Uses Theano as a backend, supports NUTS and ADVI.","fork":false,"url":"https://api.github.com/repos/pymc-devs/pymc3","forks_url":"https://api.github.com/repos/pymc-devs/pymc3/forks","keys_url":"https://api.github.com/repos/pymc-devs/pymc3/keys{/key_id}","collaborators_url":"https://api.github.com/repos/pymc-devs/pymc3/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/pymc-devs/pymc3/teams","hooks_url":"https://api.github.com/repos/pymc-devs/pymc3/hooks","issue_events_url":"https://api.github.com/repos/pymc-devs/pymc3/issues/events{/number}","events_url":"https://api.github.com/repos/pymc-devs/pymc3/events","assignees_url":"https://api.github.com/repos/pymc-devs/pymc3/assignees{/user}","branches_url":"https://api.github.com/repos/pymc-devs/pymc3/branches{/branch}","tags_url":"https://api.github.com/repos/pymc-devs/pymc3/tags","blobs_url":"https://api.github.com/repos/pymc-devs/pymc3/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/pymc-devs/pymc3/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/pymc-devs/pymc3/git/refs{/sha}","trees_url":"https://api.github.com/repos/pymc-devs/pymc3/git/trees{/sha}","statuses_url":"https://api.github.com/repos/pymc-devs/pymc3/statuses/{sha}","languages_url":"https://api.github.com/repos/pymc-devs/pymc3/languages","stargazers_url":"https://api.github.com/repos/pymc-devs/pymc3/stargazers","contributors_url":"https://api.github.com/repos/pymc-devs/pymc3/contributors","subscribers_url":"https://api.github.com/repos/pymc-devs/pymc3/subscribers","subscription_url":"https://api.github.com/repos/pymc-devs/pymc3/subscription","commits_url":"https://api.github.com/repos/pymc-devs/pymc3/commits{/sha}","git_commits_url":"https://api.github.com/repos/pymc-devs/pymc3/git/commits{/sha}","comments_url":"https://api.github.com/repos/pymc-devs/pymc3/comments{/number}","issue_comment_url":"https://api.github.com/repos/pymc-devs/pymc3/issues/comments{/number}","contents_url":"https://api.github.com/repos/pymc-devs/pymc3/contents/{+path}","compare_url":"https://api.github.com/repos/pymc-devs/pymc3/compare/{base}...{head}","merges_url":"https://api.github.com/repos/pymc-devs/pymc3/merges","archive_url":"https://api.github.com/repos/pymc-devs/pymc3/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/pymc-devs/pymc3/downloads","issues_url":"https://api.github.com/repos/pymc-devs/pymc3/issues{/number}","pulls_url":"https://api.github.com/repos/pymc-devs/pymc3/pulls{/number}","milestones_url":"https://api.github.com/repos/pymc-devs/pymc3/milestones{/number}","notifications_url":"https://api.github.com/repos/pymc-devs/pymc3/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/pymc-devs/pymc3/labels{/name}","releases_url":"https://api.github.com/repos/pymc-devs/pymc3/releases{/id}","deployments_url":"https://api.github.com/repos/pymc-devs/pymc3/deployments","created_at":"2009-05-05T09:43:50Z","updated_at":"2016-12-05T08:40:57Z","pushed_at":"2016-12-04T15:30:18Z","git_url":"git://github.com/pymc-devs/pymc3.git","ssh_url":"git@github.com:pymc-devs/pymc3.git","clone_url":"https://github.com/pymc-devs/pymc3.git","svn_url":"https://github.com/pymc-devs/pymc3","homepage":"http://pymc-devs.github.io/pymc3/","size":180610,"stargazers_count":1752,"watchers_count":1752,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":416,"mirror_url":null,"open_issues_count":135,"forks":416,"open_issues":135,"watchers":1752,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/pymc-devs/pymc3/pulls/1573"},"html":{"href":"https://github.com/pymc-devs/pymc3/pull/1573"},"issue":{"href":"https://api.github.com/repos/pymc-devs/pymc3/issues/1573"},"comments":{"href":"https://api.github.com/repos/pymc-devs/pymc3/issues/1573/comments"},"review_comments":{"href":"https://api.github.com/repos/pymc-devs/pymc3/pulls/1573/comments"},"review_comment":{"href":"https://api.github.com/repos/pymc-devs/pymc3/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/pymc-devs/pymc3/pulls/1573/commits"},"statuses":{"href":"https://api.github.com/repos/pymc-devs/pymc3/statuses/4fb52b412ddbfbc3347cbd2eebfdf455377e7f0b"}}}}
{"actor":{"display_login":"twiecki"}}