payload: {"action":"created","comment":{"url":"https://api.github.com/repos/XanaduAI/pennylane/pulls/comments/316032138","pull_request_review_id":277600998,"id":316032138,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDMxNjAzMjEzOA==","diff_hunk":"@@ -410,6 +373,163 @@ def construct(self, args, kwargs=None):\n         #: dict[int->str]: map from free parameter index to the gradient method to be used with that parameter\n         self.grad_method_for_par = {k: self._best_method(k) for k in self.variable_ops}\n \n+    def construct_metric_tensor(self, args, **kwargs):\n+        \"\"\"Create metric tensor subcircuits for each parameter.\n+\n+        If the parameter appears in a gate :math:`G`, the subcircuit contains\n+        all gates which precede :math:`G`, and :math:`G` is replaced by the variance\n+        value of its generator.\n+\n+        Args:\n+            args (tuple): Represent the free parameters passed to the circuit.\n+                Here we are not concerned with their values, but with their structure.\n+                Each free param is replaced with a :class:`~.variable.Variable` instance.\n+\n+        Keyword Args:\n+            diag_approx (bool): If ``True``, forces the diagonal\n+                approximation. Default is ``False``.\n+\n+        .. note::\n+\n+            Additional keyword arguments may be passed to the quantum circuit function, however PennyLane\n+            does not support differentiating with respect to keyword arguments. Instead,\n+            keyword arguments are useful for providing data or 'placeholders' to the quantum circuit function.\n+        \"\"\"\n+        # pylint: disable=too-many-statements\n+        diag_approx = kwargs.pop(\"diag_approx\", False)\n+\n+        if not self.ops or not self.cache:\n+            # construct the circuit\n+            self.construct(args, kwargs)\n+\n+        # convert the queue to a DAG\n+        G = to_DiGraph(self.queue, self.ev)\n+\n+        # keep track of the layer number\n+        layer = 0\n+        layer_ops = {0: {\"ops\": [], \"pidx\": []}}\n+\n+        variable_ops_sorted = sorted(list(self.variable_ops.items()), key=lambda x: x[1][0][0])\n+\n+        for param_idx, gate_param_tuple in variable_ops_sorted:\n+            # iterate over all parameters\n+            for op_idx, _ in gate_param_tuple:\n+                # get all dependents of the existing parameter\n+                sub = set(nx.dag.topological_sort(G.subgraph(nx.dag.ancestors(G, op_idx)).copy()))\n+\n+                # check if any of the dependents are in the\n+                # existing layer\n+                if set(layer_ops[layer][\"ops\"]) & sub:\n+                    # operation depends on previous layer,\n+                    # start a new layer count\n+                    layer += 1\n+\n+                # store the parameters and ops indices for the layer\n+                layer_ops.setdefault(layer, {\"ops\": [], \"pidx\": []})\n+                layer_ops[layer][\"ops\"].append(op_idx)\n+                layer_ops[layer][\"pidx\"].append(param_idx)\n+\n+        # iterate through each layer\n+        for _, v in layer_ops.items():\n+            # for the layer, get the ops and parameter indices\n+            ops = v[\"ops\"]\n+            param_idx = v[\"pidx\"]\n+\n+            # get the ops in this layer\n+            curr_ops = [op for n, op in G.nodes(data=\"op\") if n in ops]\n+\n+            # get all ancestor operations\n+            ancestors = set()\n+            for o in ops:\n+                subG = G.subgraph(nx.dag.ancestors(G, o))\n+                ancestors |= set(subG.nodes(data=\"op\"))\n+\n+            ancestors = sorted(ancestors, key=lambda x: x[0])","path":"pennylane/qnode.py","position":174,"original_position":174,"commit_id":"d2e43507a5d6475897397d4f5b2181f3746e2cca","original_commit_id":"d2e43507a5d6475897397d4f5b2181f3746e2cca","user":{"login":"josh146","id":2959003,"node_id":"MDQ6VXNlcjI5NTkwMDM=","avatar_url":"https://avatars0.githubusercontent.com/u/2959003?v=4","gravatar_id":"","url":"https://api.github.com/users/josh146","html_url":"https://github.com/josh146","followers_url":"https://api.github.com/users/josh146/followers","following_url":"https://api.github.com/users/josh146/following{/other_user}","gists_url":"https://api.github.com/users/josh146/gists{/gist_id}","starred_url":"https://api.github.com/users/josh146/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/josh146/subscriptions","organizations_url":"https://api.github.com/users/josh146/orgs","repos_url":"https://api.github.com/users/josh146/repos","events_url":"https://api.github.com/users/josh146/events{/privacy}","received_events_url":"https://api.github.com/users/josh146/received_events","type":"User","site_admin":false},"body":"Yes, essentially. I didn't realise that this was the default behavior for sorting a set of tuples, and kept it in just to keep it explicit 😆 ","created_at":"2019-08-21T07:24:24Z","updated_at":"2019-08-21T07:24:25Z","html_url":"https://github.com/XanaduAI/pennylane/pull/295#discussion_r316032138","pull_request_url":"https://api.github.com/repos/XanaduAI/pennylane/pulls/295","author_association":"MEMBER","_links":{"self":{"href":"https://api.github.com/repos/XanaduAI/pennylane/pulls/comments/316032138"},"html":{"href":"https://github.com/XanaduAI/pennylane/pull/295#discussion_r316032138"},"pull_request":{"href":"https://api.github.com/repos/XanaduAI/pennylane/pulls/295"}},"in_reply_to_id":315930260},"pull_request":{"url":"https://api.github.com/repos/XanaduAI/pennylane/pulls/295","id":308128984,"node_id":"MDExOlB1bGxSZXF1ZXN0MzA4MTI4OTg0","html_url":"https://github.com/XanaduAI/pennylane/pull/295","diff_url":"https://github.com/XanaduAI/pennylane/pull/295.diff","patch_url":"https://github.com/XanaduAI/pennylane/pull/295.patch","issue_url":"https://api.github.com/repos/XanaduAI/pennylane/issues/295","number":295,"state":"open","locked":false,"title":"Add quantum geometric tensor optimizer","user":{"login":"josh146","id":2959003,"node_id":"MDQ6VXNlcjI5NTkwMDM=","avatar_url":"https://avatars0.githubusercontent.com/u/2959003?v=4","gravatar_id":"","url":"https://api.github.com/users/josh146","html_url":"https://github.com/josh146","followers_url":"https://api.github.com/users/josh146/followers","following_url":"https://api.github.com/users/josh146/following{/other_user}","gists_url":"https://api.github.com/users/josh146/gists{/gist_id}","starred_url":"https://api.github.com/users/josh146/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/josh146/subscriptions","organizations_url":"https://api.github.com/users/josh146/orgs","repos_url":"https://api.github.com/users/josh146/repos","events_url":"https://api.github.com/users/josh146/events{/privacy}","received_events_url":"https://api.github.com/users/josh146/received_events","type":"User","site_admin":false},"body":"**Description of the Change:**\r\n\r\n* Adds a new (optional) method `Device.probability`, which plugins can overwrite to provide state probability information (if available).\r\n\r\n* Adds the `Operation.generator` property. If the generator H of an operation/observable U=e^{itH} is known, this can be added as a length-2 list, e.g., `[H, t]`, where H is either another PennyLane operation/observable _or_ NumPy array, and `t` is the scaling factor. For example:\r\n\r\n  - For `RX`: `generator = [PauliX, -1/2]`\r\n  - For `PhaseShift`: `generator = [np.array([[0, 0], [0, 1]]), 1]`\r\n\r\n* Moves `_inv_dict`, `_get_default_args` to `pennylane.utils`, to avoid cluttering the (very large) QNode module\r\n\r\n* Adds the new function `pennylane.utils.expand`, which expands an arbitrary n-qubit unitary matrix to apply to an entire N-qubit system\r\n\r\n* Adds the function `pennylane.utils.to_DiGraph`, which converts list containing an operation queue and observables to a directed acyclic graph.\r\n\r\n* The QNode gains a few extra methods and attributes:\r\n\r\n   - `QNode.construct_metric_tensor()`: given the existing QNode queue, constructs the quantum circuits which calculate the quantum gradient tensor for each QNode variable. These subcircuits are only constructed if this method is called, and the resulting sub-queues assigned to the `QNode._metric_tensor_subcircuits` attribute.\r\n\r\n     Note: to construct these subcircuits, the QNode queue is converted into a directed acyclic graph (DAG), and then analysed in order to programmatically extract each parametrized layer.\r\n\r\n  - `QNode.metric_tensor(params)`: constructs metric tensor subcircuits (if not already done), and then evaluates the resulting subcircuits to compute the metric tensor elements on a PennyLane device.\r\n\r\n* A new optimizer `QGTOptimizer`, which calculates the metric tensor of the QNode, and uses this to calculate an adaptive step size.\r\n\r\n**Benefits:**\r\n\r\n* a new quantum optimizer\r\n\r\n* a method for programmatically identifying parametrized layers in QNodes\r\n\r\n* added a function for converting PennyLane queues into digraphs\r\n\r\n**Possible Drawbacks:**\r\n\r\n* Since the QGT is not well defined for hybrid classical-quantum optimization, the `QGTOptimizer` will only accept a single QNode as the cost function.\r\n\r\n* Requires a new dependency, `networkx`.\r\n\r\n* For the block diagonal approximation, the numeric change of basis unitary for the entire system is calculated by expanding each generator to size `2**num_wires`, and using `scipy.linalg.eigh` to compute the shared eigenbasis. While this only needs to be computed once on the first optimization step, it scales very badly as the number of qubits increases. Furthermore, it requires that the plugin device has the ability to decompose this arbitrary unitary for the hardware topology.\r\n\r\n  Note that the above does not apply for the purely diagonal approximation, since we are only interested in the first order expectation values.\r\n\r\n**Related GitHub Issues:** n/a\r\n","created_at":"2019-08-16T15:54:31Z","updated_at":"2019-08-21T07:24:25Z","closed_at":null,"merged_at":null,"merge_commit_sha":"cd36b7038697705c2cc372838df71bb2fb4094db","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[{"id":944732491,"node_id":"MDU6TGFiZWw5NDQ3MzI0OTE=","url":"https://api.github.com/repos/XanaduAI/pennylane/labels/autodiff","name":"autodiff","color":"01608c","default":false},{"id":944708362,"node_id":"MDU6TGFiZWw5NDQ3MDgzNjI=","url":"https://api.github.com/repos/XanaduAI/pennylane/labels/core","name":"core","color":"3fc4e2","default":false},{"id":1325168635,"node_id":"MDU6TGFiZWwxMzI1MTY4NjM1","url":"https://api.github.com/repos/XanaduAI/pennylane/labels/review-ready","name":"review-ready","color":"7edbe5","default":false}],"milestone":null,"commits_url":"https://api.github.com/repos/XanaduAI/pennylane/pulls/295/commits","review_comments_url":"https://api.github.com/repos/XanaduAI/pennylane/pulls/295/comments","review_comment_url":"https://api.github.com/repos/XanaduAI/pennylane/pulls/comments{/number}","comments_url":"https://api.github.com/repos/XanaduAI/pennylane/issues/295/comments","statuses_url":"https://api.github.com/repos/XanaduAI/pennylane/statuses/d2e43507a5d6475897397d4f5b2181f3746e2cca","head":{"label":"XanaduAI:block_qgt","ref":"block_qgt","sha":"d2e43507a5d6475897397d4f5b2181f3746e2cca","user":{"login":"XanaduAI","id":31855630,"node_id":"MDEyOk9yZ2FuaXphdGlvbjMxODU1NjMw","avatar_url":"https://avatars3.githubusercontent.com/u/31855630?v=4","gravatar_id":"","url":"https://api.github.com/users/XanaduAI","html_url":"https://github.com/XanaduAI","followers_url":"https://api.github.com/users/XanaduAI/followers","following_url":"https://api.github.com/users/XanaduAI/following{/other_user}","gists_url":"https://api.github.com/users/XanaduAI/gists{/gist_id}","starred_url":"https://api.github.com/users/XanaduAI/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/XanaduAI/subscriptions","organizations_url":"https://api.github.com/users/XanaduAI/orgs","repos_url":"https://api.github.com/users/XanaduAI/repos","events_url":"https://api.github.com/users/XanaduAI/events{/privacy}","received_events_url":"https://api.github.com/users/XanaduAI/received_events","type":"Organization","site_admin":false},"repo":{"id":129936360,"node_id":"MDEwOlJlcG9zaXRvcnkxMjk5MzYzNjA=","name":"pennylane","full_name":"XanaduAI/pennylane","private":false,"owner":{"login":"XanaduAI","id":31855630,"node_id":"MDEyOk9yZ2FuaXphdGlvbjMxODU1NjMw","avatar_url":"https://avatars3.githubusercontent.com/u/31855630?v=4","gravatar_id":"","url":"https://api.github.com/users/XanaduAI","html_url":"https://github.com/XanaduAI","followers_url":"https://api.github.com/users/XanaduAI/followers","following_url":"https://api.github.com/users/XanaduAI/following{/other_user}","gists_url":"https://api.github.com/users/XanaduAI/gists{/gist_id}","starred_url":"https://api.github.com/users/XanaduAI/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/XanaduAI/subscriptions","organizations_url":"https://api.github.com/users/XanaduAI/orgs","repos_url":"https://api.github.com/users/XanaduAI/repos","events_url":"https://api.github.com/users/XanaduAI/events{/privacy}","received_events_url":"https://api.github.com/users/XanaduAI/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/XanaduAI/pennylane","description":"PennyLane is a cross-platform Python library for quantum machine learning, automatic differentiation, and optimization of hybrid quantum-classical computations","fork":false,"url":"https://api.github.com/repos/XanaduAI/pennylane","forks_url":"https://api.github.com/repos/XanaduAI/pennylane/forks","keys_url":"https://api.github.com/repos/XanaduAI/pennylane/keys{/key_id}","collaborators_url":"https://api.github.com/repos/XanaduAI/pennylane/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/XanaduAI/pennylane/teams","hooks_url":"https://api.github.com/repos/XanaduAI/pennylane/hooks","issue_events_url":"https://api.github.com/repos/XanaduAI/pennylane/issues/events{/number}","events_url":"https://api.github.com/repos/XanaduAI/pennylane/events","assignees_url":"https://api.github.com/repos/XanaduAI/pennylane/assignees{/user}","branches_url":"https://api.github.com/repos/XanaduAI/pennylane/branches{/branch}","tags_url":"https://api.github.com/repos/XanaduAI/pennylane/tags","blobs_url":"https://api.github.com/repos/XanaduAI/pennylane/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/XanaduAI/pennylane/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/XanaduAI/pennylane/git/refs{/sha}","trees_url":"https://api.github.com/repos/XanaduAI/pennylane/git/trees{/sha}","statuses_url":"https://api.github.com/repos/XanaduAI/pennylane/statuses/{sha}","languages_url":"https://api.github.com/repos/XanaduAI/pennylane/languages","stargazers_url":"https://api.github.com/repos/XanaduAI/pennylane/stargazers","contributors_url":"https://api.github.com/repos/XanaduAI/pennylane/contributors","subscribers_url":"https://api.github.com/repos/XanaduAI/pennylane/subscribers","subscription_url":"https://api.github.com/repos/XanaduAI/pennylane/subscription","commits_url":"https://api.github.com/repos/XanaduAI/pennylane/commits{/sha}","git_commits_url":"https://api.github.com/repos/XanaduAI/pennylane/git/commits{/sha}","comments_url":"https://api.github.com/repos/XanaduAI/pennylane/comments{/number}","issue_comment_url":"https://api.github.com/repos/XanaduAI/pennylane/issues/comments{/number}","contents_url":"https://api.github.com/repos/XanaduAI/pennylane/contents/{+path}","compare_url":"https://api.github.com/repos/XanaduAI/pennylane/compare/{base}...{head}","merges_url":"https://api.github.com/repos/XanaduAI/pennylane/merges","archive_url":"https://api.github.com/repos/XanaduAI/pennylane/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/XanaduAI/pennylane/downloads","issues_url":"https://api.github.com/repos/XanaduAI/pennylane/issues{/number}","pulls_url":"https://api.github.com/repos/XanaduAI/pennylane/pulls{/number}","milestones_url":"https://api.github.com/repos/XanaduAI/pennylane/milestones{/number}","notifications_url":"https://api.github.com/repos/XanaduAI/pennylane/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/XanaduAI/pennylane/labels{/name}","releases_url":"https://api.github.com/repos/XanaduAI/pennylane/releases{/id}","deployments_url":"https://api.github.com/repos/XanaduAI/pennylane/deployments","created_at":"2018-04-17T16:45:42Z","updated_at":"2019-08-19T23:19:25Z","pushed_at":"2019-08-20T14:41:25Z","git_url":"git://github.com/XanaduAI/pennylane.git","ssh_url":"git@github.com:XanaduAI/pennylane.git","clone_url":"https://github.com/XanaduAI/pennylane.git","svn_url":"https://github.com/XanaduAI/pennylane","homepage":"https://pennylane.ai","size":17563,"stargazers_count":303,"watchers_count":303,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":74,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":36,"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":74,"open_issues":36,"watchers":303,"default_branch":"master"}},"base":{"label":"XanaduAI:master","ref":"master","sha":"442fa66f663d96723edaf9f7ec5a9f65a01abe54","user":{"login":"XanaduAI","id":31855630,"node_id":"MDEyOk9yZ2FuaXphdGlvbjMxODU1NjMw","avatar_url":"https://avatars3.githubusercontent.com/u/31855630?v=4","gravatar_id":"","url":"https://api.github.com/users/XanaduAI","html_url":"https://github.com/XanaduAI","followers_url":"https://api.github.com/users/XanaduAI/followers","following_url":"https://api.github.com/users/XanaduAI/following{/other_user}","gists_url":"https://api.github.com/users/XanaduAI/gists{/gist_id}","starred_url":"https://api.github.com/users/XanaduAI/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/XanaduAI/subscriptions","organizations_url":"https://api.github.com/users/XanaduAI/orgs","repos_url":"https://api.github.com/users/XanaduAI/repos","events_url":"https://api.github.com/users/XanaduAI/events{/privacy}","received_events_url":"https://api.github.com/users/XanaduAI/received_events","type":"Organization","site_admin":false},"repo":{"id":129936360,"node_id":"MDEwOlJlcG9zaXRvcnkxMjk5MzYzNjA=","name":"pennylane","full_name":"XanaduAI/pennylane","private":false,"owner":{"login":"XanaduAI","id":31855630,"node_id":"MDEyOk9yZ2FuaXphdGlvbjMxODU1NjMw","avatar_url":"https://avatars3.githubusercontent.com/u/31855630?v=4","gravatar_id":"","url":"https://api.github.com/users/XanaduAI","html_url":"https://github.com/XanaduAI","followers_url":"https://api.github.com/users/XanaduAI/followers","following_url":"https://api.github.com/users/XanaduAI/following{/other_user}","gists_url":"https://api.github.com/users/XanaduAI/gists{/gist_id}","starred_url":"https://api.github.com/users/XanaduAI/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/XanaduAI/subscriptions","organizations_url":"https://api.github.com/users/XanaduAI/orgs","repos_url":"https://api.github.com/users/XanaduAI/repos","events_url":"https://api.github.com/users/XanaduAI/events{/privacy}","received_events_url":"https://api.github.com/users/XanaduAI/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/XanaduAI/pennylane","description":"PennyLane is a cross-platform Python library for quantum machine learning, automatic differentiation, and optimization of hybrid quantum-classical computations","fork":false,"url":"https://api.github.com/repos/XanaduAI/pennylane","forks_url":"https://api.github.com/repos/XanaduAI/pennylane/forks","keys_url":"https://api.github.com/repos/XanaduAI/pennylane/keys{/key_id}","collaborators_url":"https://api.github.com/repos/XanaduAI/pennylane/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/XanaduAI/pennylane/teams","hooks_url":"https://api.github.com/repos/XanaduAI/pennylane/hooks","issue_events_url":"https://api.github.com/repos/XanaduAI/pennylane/issues/events{/number}","events_url":"https://api.github.com/repos/XanaduAI/pennylane/events","assignees_url":"https://api.github.com/repos/XanaduAI/pennylane/assignees{/user}","branches_url":"https://api.github.com/repos/XanaduAI/pennylane/branches{/branch}","tags_url":"https://api.github.com/repos/XanaduAI/pennylane/tags","blobs_url":"https://api.github.com/repos/XanaduAI/pennylane/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/XanaduAI/pennylane/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/XanaduAI/pennylane/git/refs{/sha}","trees_url":"https://api.github.com/repos/XanaduAI/pennylane/git/trees{/sha}","statuses_url":"https://api.github.com/repos/XanaduAI/pennylane/statuses/{sha}","languages_url":"https://api.github.com/repos/XanaduAI/pennylane/languages","stargazers_url":"https://api.github.com/repos/XanaduAI/pennylane/stargazers","contributors_url":"https://api.github.com/repos/XanaduAI/pennylane/contributors","subscribers_url":"https://api.github.com/repos/XanaduAI/pennylane/subscribers","subscription_url":"https://api.github.com/repos/XanaduAI/pennylane/subscription","commits_url":"https://api.github.com/repos/XanaduAI/pennylane/commits{/sha}","git_commits_url":"https://api.github.com/repos/XanaduAI/pennylane/git/commits{/sha}","comments_url":"https://api.github.com/repos/XanaduAI/pennylane/comments{/number}","issue_comment_url":"https://api.github.com/repos/XanaduAI/pennylane/issues/comments{/number}","contents_url":"https://api.github.com/repos/XanaduAI/pennylane/contents/{+path}","compare_url":"https://api.github.com/repos/XanaduAI/pennylane/compare/{base}...{head}","merges_url":"https://api.github.com/repos/XanaduAI/pennylane/merges","archive_url":"https://api.github.com/repos/XanaduAI/pennylane/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/XanaduAI/pennylane/downloads","issues_url":"https://api.github.com/repos/XanaduAI/pennylane/issues{/number}","pulls_url":"https://api.github.com/repos/XanaduAI/pennylane/pulls{/number}","milestones_url":"https://api.github.com/repos/XanaduAI/pennylane/milestones{/number}","notifications_url":"https://api.github.com/repos/XanaduAI/pennylane/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/XanaduAI/pennylane/labels{/name}","releases_url":"https://api.github.com/repos/XanaduAI/pennylane/releases{/id}","deployments_url":"https://api.github.com/repos/XanaduAI/pennylane/deployments","created_at":"2018-04-17T16:45:42Z","updated_at":"2019-08-19T23:19:25Z","pushed_at":"2019-08-20T14:41:25Z","git_url":"git://github.com/XanaduAI/pennylane.git","ssh_url":"git@github.com:XanaduAI/pennylane.git","clone_url":"https://github.com/XanaduAI/pennylane.git","svn_url":"https://github.com/XanaduAI/pennylane","homepage":"https://pennylane.ai","size":17563,"stargazers_count":303,"watchers_count":303,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":74,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":36,"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":74,"open_issues":36,"watchers":303,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/XanaduAI/pennylane/pulls/295"},"html":{"href":"https://github.com/XanaduAI/pennylane/pull/295"},"issue":{"href":"https://api.github.com/repos/XanaduAI/pennylane/issues/295"},"comments":{"href":"https://api.github.com/repos/XanaduAI/pennylane/issues/295/comments"},"review_comments":{"href":"https://api.github.com/repos/XanaduAI/pennylane/pulls/295/comments"},"review_comment":{"href":"https://api.github.com/repos/XanaduAI/pennylane/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/XanaduAI/pennylane/pulls/295/commits"},"statuses":{"href":"https://api.github.com/repos/XanaduAI/pennylane/statuses/d2e43507a5d6475897397d4f5b2181f3746e2cca"}},"author_association":"MEMBER"}}
other: {"actor":{"display_login":"josh146"}}