{"action":"created","comment":{"url":"https://api.github.com/repos/simpeg/simpeg/pulls/comments/109756592","pull_request_review_id":30879237,"id":109756592,"diff_hunk":"@@ -0,0 +1,228 @@\n+import numpy as np\n+from SimPEG import Utils\n+\n+\n+def line(a, t, l):\n+    \"\"\"\n+        Linear interpolation between a and b\n+        0 <= t <= 1\n+    \"\"\"\n+    return a + t * l\n+\n+\n+def weight(t, a1, l1, h1, a2, l2, h2):\n+    \"\"\"\n+        Edge basis functions\n+    \"\"\"\n+    x1 = line(a1, t, l1)\n+    x2 = line(a2, t, l2)\n+    w0 = (1. - x1 / h1) * (1. - x2 / h2)\n+    w1 = (x1 / h1) * (1. - x2 / h2)\n+    w2 = (1. - x1 / h1) * (x2 / h2)\n+    w3 = (x1 / h1) * (x2 / h2)\n+    return np.r_[w0, w1, w2, w3]\n+\n+\n+# TODO: Extend this when current is defined on cell-face\n+def getStraightLineCurrentIntegral(hx, hy, hz, ax, ay, az, bx, by, bz):\n+    \"\"\"\n+      Compute integral int(W . J dx^3) in brick of size hx x hy x hz\n+      where W denotes the 12 local bilinear edge basis functions\n+      and where J prescribes a unit line current\n+      between points (ax,ay,az) and (bx,by,bz).\n+    \"\"\"\n+\n+    # length of line segment\n+    lx = bx - ax\n+    ly = by - ay\n+    lz = bz - az\n+    l = np.sqrt(lx**2+ly**2+lz**2)\n+\n+    if l == 0:\n+        sx = np.zeros(4, 1)\n+        sy = np.zeros(4, 1)\n+        sz = np.zeros(4, 1)\n+\n+    # integration using Simpson's rule\n+    wx0 = weight(0., ay, ly, hy, az, lz, hz)\n+    wx0_5 = weight(0.5, ay, ly, hy, az, lz, hz)\n+    wx1 = weight(1., ay, ly, hy, az, lz, hz)\n+\n+    wy0 = weight(0., ax, lx, hx, az, lz, hz)\n+    wy0_5 = weight(0.5, ax, lx, hx, az, lz, hz)\n+    wy1 = weight(1., ax, lx, hx, az, lz, hz)\n+\n+    wz0 = weight(0., ax, lx, hx, ay, ly, hy)\n+    wz0_5 = weight(0.5, ax, lx, hx, ay, ly, hy)\n+    wz1 = weight(1., ax, lx, hx, ay, ly, hy)\n+\n+    sx = (wx0 + 4. * wx0_5 + wx1) * (lx / 6.)\n+\n+    sy = (wy0 + 4. * wy0_5 + wy1) * (ly / 6.)\n+    sz = (wz0 + 4. * wz0_5 + wz1) * (lz / 6.)\n+\n+    return sx, sy, sz\n+\n+\n+def findlast(x):\n+    if x.sum() == 0:\n+        return -1\n+    else:\n+        return np.arange(x.size)[x][-1]\n+\n+\n+def getSourceTermLineCurrentPolygon(xorig, hx, hy, hz, px, py, pz):\n+    \"\"\"\n+        Given a tensor product mesh with origin at (x0,y0,z0) and cell sizes\n+        hx, hy, hz, compute the source vector for a unit current flowing along\n+        the polygon with vertices px, py, pz.\n+        The 3-D arrays sx, sy, sz contain the source terms for all x/y/z-edges\n+        of the tensor product mesh.\n+\n+        Modified from matlab code:\n+\n+            getSourceTermLineCurrentPolygon(x0,y0,z0,hx,hy,hz,px,py,pz)\n+            Christoph Schwarzbach, February 2014\n+\n+    \"\"\"\n+    import numpy as np\n+    # number of cells\n+    nx = len(hx)\n+    ny = len(hy)\n+    nz = len(hz)\n+    x0, y0, z0 = xorig[0], xorig[1], xorig[2]\n+    # nodal grid\n+    x = np.r_[x0, x0+np.cumsum(hx)]\n+    y = np.r_[y0, y0+np.cumsum(hy)]\n+    z = np.r_[z0, z0+np.cumsum(hz)]\n+\n+    # discrete edge function\n+    sx = np.zeros((nx, ny+1, nz+1))\n+    sy = np.zeros((nx+1, ny, nz+1))\n+    sz = np.zeros((nx+1, ny+1, nz))\n+\n+    # number of line segments\n+    nP = len(px) - 1\n+\n+    # check that all polygon vertices are inside the mesh\n+    for ip in range(nP+1):\n+        ax = px[ip]\n+        ay = py[ip]\n+        az = pz[ip]\n+        ix = findlast(np.logical_and(ax >= x[:nx-1], ax <= x[1:nx]))\n+        iy = findlast(np.logical_and(ay >= y[:ny-1], ay <= y[1:ny]))\n+        iz = findlast(np.logical_and(az >= z[:nz-1], az <= z[1:nz]))\n+\n+        if (ix < 0) or (iy < 0) or (iz < 0):\n+            msg = \"Polygon vertex (%.1f, %.1f, %.1f) is outside the mesh\"\n+            print ((msg) % (ax, ay, az))\n+\n+    # integrate each line segment\n+    for ip in range(nP):\n+        # start and end vertices\n+        ax = px[ip]\n+        ay = py[ip]\n+        az = pz[ip]\n+        bx = px[ip+1]\n+        by = py[ip+1]\n+        bz = pz[ip+1]\n+\n+        # find intersection with mesh planes\n+        dx = bx - ax\n+        dy = by - ay\n+        dz = bz - az\n+        d = np.sqrt(dx**2+dy**2+dz**2)\n+\n+        tol = d * np.finfo(float).eps\n+\n+        if abs(dx) > tol:\n+            tx = (x - ax) / dx\n+            tx = tx[np.logical_and(tx >= 0, tx <= 1)]\n+        else:\n+            tx = []\n+\n+        if abs(dy) > tol:\n+            ty = (y - ay) / dy\n+            ty = ty[np.logical_and(ty >= 0, ty <= 1)]\n+        else:\n+            ty = []\n+\n+        if abs(dz) > tol:\n+            tz = (z - az) / dz\n+            tz = tz[np.logical_and(tz >= 0, tz <= 1)]\n+        else:\n+            tz = []\n+\n+        t = np.unique(np.r_[0., tx, ty, tz, 1.])\n+        nq = len(t) - 1\n+        tc = 0.5 * (t[:nq] + t[1:nq+1])\n+\n+        for iq in range(nq):\n+\n+            cx = ax + tc[iq] * dx\n+            cy = ay + tc[iq] * dy\n+            cz = az + tc[iq] * dz\n+\n+            # locate cell id\n+\n+            ix = findlast(np.logical_and(cx >= x[:nx-1], cx <= x[1:nx]))\n+            iy = findlast(np.logical_and(cy >= y[:ny-1], cy <= y[1:ny]))\n+            iz = findlast(np.logical_and(cz >= z[:nz-1], cz <= z[1:nz]))\n+\n+            # local coordinates\n+            hxloc = hx[ix]\n+            hyloc = hy[iy]\n+            hzloc = hz[iz]\n+            axloc = ax + t[iq]   * dx - x[ix]\n+            ayloc = ay + t[iq]   * dy - y[iy]\n+            azloc = az + t[iq]   * dz - z[iz]\n+            bxloc = ax + t[iq+1] * dx - x[ix]\n+            byloc = ay + t[iq+1] * dy - y[iy]\n+            bzloc = az + t[iq+1] * dz - z[iz]\n+            # integrate\n+            sxloc, syloc, szloc = getStraightLineCurrentIntegral(hxloc, hyloc,\n+                                                                 hzloc, axloc,\n+                                                                 ayloc, azloc,\n+                                                                 bxloc, byloc,\n+                                                                 bzloc)\n+            # integrate\n+            sx[ix, iy:iy+2, iz:iz+2] += np.reshape(sxloc, (2, 2), order=\"F\")\n+            sy[ix:ix+2, iy, iz:iz+2] += np.reshape(syloc, (2, 2), order=\"F\")\n+            sz[ix:ix+2, iy:iy+2, iz] += np.reshape(szloc, (2, 2), order=\"F\")\n+\n+    return np.r_[Utils.mkvc(sx), Utils.mkvc(sy), Utils.mkvc(sz)]\n+\n+\n+if __name__ == '__main__':","path":"SimPEG/EM/Utils/CurrentUtils.py","position":196,"original_position":196,"commit_id":"1e5c4b183922cae9a7288c191aa987fd3fabf7a8","original_commit_id":"eef6282bd459655325108e0c4f40e4bbe34295d9","user":{"login":"sgkang","id":6054371,"avatar_url":"https://avatars3.githubusercontent.com/u/6054371?v=3","gravatar_id":"","url":"https://api.github.com/users/sgkang","html_url":"https://github.com/sgkang","followers_url":"https://api.github.com/users/sgkang/followers","following_url":"https://api.github.com/users/sgkang/following{/other_user}","gists_url":"https://api.github.com/users/sgkang/gists{/gist_id}","starred_url":"https://api.github.com/users/sgkang/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sgkang/subscriptions","organizations_url":"https://api.github.com/users/sgkang/orgs","repos_url":"https://api.github.com/users/sgkang/repos","events_url":"https://api.github.com/users/sgkang/events{/privacy}","received_events_url":"https://api.github.com/users/sgkang/received_events","type":"User","site_admin":false},"body":"testing it will be appropriate. ","created_at":"2017-04-04T19:32:22Z","updated_at":"2017-04-04T19:32:22Z","html_url":"https://github.com/simpeg/simpeg/pull/566#discussion_r109756592","pull_request_url":"https://api.github.com/repos/simpeg/simpeg/pulls/566","_links":{"self":{"href":"https://api.github.com/repos/simpeg/simpeg/pulls/comments/109756592"},"html":{"href":"https://github.com/simpeg/simpeg/pull/566#discussion_r109756592"},"pull_request":{"href":"https://api.github.com/repos/simpeg/simpeg/pulls/566"}}},"pull_request":{"url":"https://api.github.com/repos/simpeg/simpeg/pulls/566","id":112054165,"html_url":"https://github.com/simpeg/simpeg/pull/566","diff_url":"https://github.com/simpeg/simpeg/pull/566.diff","patch_url":"https://github.com/simpeg/simpeg/pull/566.patch","issue_url":"https://api.github.com/repos/simpeg/simpeg/issues/566","number":566,"state":"open","locked":false,"title":"Em/linesource","user":{"login":"sgkang","id":6054371,"avatar_url":"https://avatars3.githubusercontent.com/u/6054371?v=3","gravatar_id":"","url":"https://api.github.com/users/sgkang","html_url":"https://github.com/sgkang","followers_url":"https://api.github.com/users/sgkang/followers","following_url":"https://api.github.com/users/sgkang/following{/other_user}","gists_url":"https://api.github.com/users/sgkang/gists{/gist_id}","starred_url":"https://api.github.com/users/sgkang/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sgkang/subscriptions","organizations_url":"https://api.github.com/users/sgkang/orgs","repos_url":"https://api.github.com/users/sgkang/repos","events_url":"https://api.github.com/users/sgkang/events{/privacy}","received_events_url":"https://api.github.com/users/sgkang/received_events","type":"User","site_admin":false},"body":"Galvanic source implementation for `TDEM.Problem3D_e`\r\n\r\nWhen step-off current is assumed for a galvanic (or grounded) source, initial condition needs to be computed by solving DC equation hence it is depends upon conductivity. \r\n\r\n- Galvanic source implementation (`TDEM.Src.LineCurrent`)\r\n   - Can handle arbitrary wire path\r\n   - General enough to handle inductive source (loop)\r\n   - Only works for EB formulation\r\n\r\n- Simulation: Solving DC equation to compute electric field at DC state\r\n\r\n- Forward sensitivity: The time step is depends upon conductivity\r\n\r\n- Forward sensitivity: The time step is depends upon conductivity\r\n\r\n- Tested: order test / adjoint test\r\n\r\n\r\n\r\n","created_at":"2017-03-22T16:31:57Z","updated_at":"2017-04-04T19:32:22Z","closed_at":null,"merged_at":null,"merge_commit_sha":"40e5d6fc2cdba548bb0d5d24619978fc095a192c","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/simpeg/simpeg/pulls/566/commits","review_comments_url":"https://api.github.com/repos/simpeg/simpeg/pulls/566/comments","review_comment_url":"https://api.github.com/repos/simpeg/simpeg/pulls/comments{/number}","comments_url":"https://api.github.com/repos/simpeg/simpeg/issues/566/comments","statuses_url":"https://api.github.com/repos/simpeg/simpeg/statuses/1e5c4b183922cae9a7288c191aa987fd3fabf7a8","head":{"label":"simpeg:em/linesource","ref":"em/linesource","sha":"1e5c4b183922cae9a7288c191aa987fd3fabf7a8","user":{"login":"simpeg","id":6043842,"avatar_url":"https://avatars1.githubusercontent.com/u/6043842?v=3","gravatar_id":"","url":"https://api.github.com/users/simpeg","html_url":"https://github.com/simpeg","followers_url":"https://api.github.com/users/simpeg/followers","following_url":"https://api.github.com/users/simpeg/following{/other_user}","gists_url":"https://api.github.com/users/simpeg/gists{/gist_id}","starred_url":"https://api.github.com/users/simpeg/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/simpeg/subscriptions","organizations_url":"https://api.github.com/users/simpeg/orgs","repos_url":"https://api.github.com/users/simpeg/repos","events_url":"https://api.github.com/users/simpeg/events{/privacy}","received_events_url":"https://api.github.com/users/simpeg/received_events","type":"Organization","site_admin":false},"repo":{"id":14727320,"name":"simpeg","full_name":"simpeg/simpeg","owner":{"login":"simpeg","id":6043842,"avatar_url":"https://avatars1.githubusercontent.com/u/6043842?v=3","gravatar_id":"","url":"https://api.github.com/users/simpeg","html_url":"https://github.com/simpeg","followers_url":"https://api.github.com/users/simpeg/followers","following_url":"https://api.github.com/users/simpeg/following{/other_user}","gists_url":"https://api.github.com/users/simpeg/gists{/gist_id}","starred_url":"https://api.github.com/users/simpeg/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/simpeg/subscriptions","organizations_url":"https://api.github.com/users/simpeg/orgs","repos_url":"https://api.github.com/users/simpeg/repos","events_url":"https://api.github.com/users/simpeg/events{/privacy}","received_events_url":"https://api.github.com/users/simpeg/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/simpeg/simpeg","description":"Simulation and Parameter Estimation in Geophysics  -  A python package for simulation and gradient based parameter estimation in the context of geophysical applications.","fork":false,"url":"https://api.github.com/repos/simpeg/simpeg","forks_url":"https://api.github.com/repos/simpeg/simpeg/forks","keys_url":"https://api.github.com/repos/simpeg/simpeg/keys{/key_id}","collaborators_url":"https://api.github.com/repos/simpeg/simpeg/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/simpeg/simpeg/teams","hooks_url":"https://api.github.com/repos/simpeg/simpeg/hooks","issue_events_url":"https://api.github.com/repos/simpeg/simpeg/issues/events{/number}","events_url":"https://api.github.com/repos/simpeg/simpeg/events","assignees_url":"https://api.github.com/repos/simpeg/simpeg/assignees{/user}","branches_url":"https://api.github.com/repos/simpeg/simpeg/branches{/branch}","tags_url":"https://api.github.com/repos/simpeg/simpeg/tags","blobs_url":"https://api.github.com/repos/simpeg/simpeg/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/simpeg/simpeg/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/simpeg/simpeg/git/refs{/sha}","trees_url":"https://api.github.com/repos/simpeg/simpeg/git/trees{/sha}","statuses_url":"https://api.github.com/repos/simpeg/simpeg/statuses/{sha}","languages_url":"https://api.github.com/repos/simpeg/simpeg/languages","stargazers_url":"https://api.github.com/repos/simpeg/simpeg/stargazers","contributors_url":"https://api.github.com/repos/simpeg/simpeg/contributors","subscribers_url":"https://api.github.com/repos/simpeg/simpeg/subscribers","subscription_url":"https://api.github.com/repos/simpeg/simpeg/subscription","commits_url":"https://api.github.com/repos/simpeg/simpeg/commits{/sha}","git_commits_url":"https://api.github.com/repos/simpeg/simpeg/git/commits{/sha}","comments_url":"https://api.github.com/repos/simpeg/simpeg/comments{/number}","issue_comment_url":"https://api.github.com/repos/simpeg/simpeg/issues/comments{/number}","contents_url":"https://api.github.com/repos/simpeg/simpeg/contents/{+path}","compare_url":"https://api.github.com/repos/simpeg/simpeg/compare/{base}...{head}","merges_url":"https://api.github.com/repos/simpeg/simpeg/merges","archive_url":"https://api.github.com/repos/simpeg/simpeg/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/simpeg/simpeg/downloads","issues_url":"https://api.github.com/repos/simpeg/simpeg/issues{/number}","pulls_url":"https://api.github.com/repos/simpeg/simpeg/pulls{/number}","milestones_url":"https://api.github.com/repos/simpeg/simpeg/milestones{/number}","notifications_url":"https://api.github.com/repos/simpeg/simpeg/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/simpeg/simpeg/labels{/name}","releases_url":"https://api.github.com/repos/simpeg/simpeg/releases{/id}","deployments_url":"https://api.github.com/repos/simpeg/simpeg/deployments","created_at":"2013-11-26T19:46:36Z","updated_at":"2017-03-24T21:31:15Z","pushed_at":"2017-04-04T17:14:33Z","git_url":"git://github.com/simpeg/simpeg.git","ssh_url":"git@github.com:simpeg/simpeg.git","clone_url":"https://github.com/simpeg/simpeg.git","svn_url":"https://github.com/simpeg/simpeg","homepage":"http://simpeg.xyz","size":52456,"stargazers_count":45,"watchers_count":45,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":23,"mirror_url":null,"open_issues_count":78,"forks":23,"open_issues":78,"watchers":45,"default_branch":"master"}},"base":{"label":"simpeg:em/dev","ref":"em/dev","sha":"2da9a8a30db0fa53755be05efb30a4b2897284e6","user":{"login":"simpeg","id":6043842,"avatar_url":"https://avatars1.githubusercontent.com/u/6043842?v=3","gravatar_id":"","url":"https://api.github.com/users/simpeg","html_url":"https://github.com/simpeg","followers_url":"https://api.github.com/users/simpeg/followers","following_url":"https://api.github.com/users/simpeg/following{/other_user}","gists_url":"https://api.github.com/users/simpeg/gists{/gist_id}","starred_url":"https://api.github.com/users/simpeg/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/simpeg/subscriptions","organizations_url":"https://api.github.com/users/simpeg/orgs","repos_url":"https://api.github.com/users/simpeg/repos","events_url":"https://api.github.com/users/simpeg/events{/privacy}","received_events_url":"https://api.github.com/users/simpeg/received_events","type":"Organization","site_admin":false},"repo":{"id":14727320,"name":"simpeg","full_name":"simpeg/simpeg","owner":{"login":"simpeg","id":6043842,"avatar_url":"https://avatars1.githubusercontent.com/u/6043842?v=3","gravatar_id":"","url":"https://api.github.com/users/simpeg","html_url":"https://github.com/simpeg","followers_url":"https://api.github.com/users/simpeg/followers","following_url":"https://api.github.com/users/simpeg/following{/other_user}","gists_url":"https://api.github.com/users/simpeg/gists{/gist_id}","starred_url":"https://api.github.com/users/simpeg/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/simpeg/subscriptions","organizations_url":"https://api.github.com/users/simpeg/orgs","repos_url":"https://api.github.com/users/simpeg/repos","events_url":"https://api.github.com/users/simpeg/events{/privacy}","received_events_url":"https://api.github.com/users/simpeg/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/simpeg/simpeg","description":"Simulation and Parameter Estimation in Geophysics  -  A python package for simulation and gradient based parameter estimation in the context of geophysical applications.","fork":false,"url":"https://api.github.com/repos/simpeg/simpeg","forks_url":"https://api.github.com/repos/simpeg/simpeg/forks","keys_url":"https://api.github.com/repos/simpeg/simpeg/keys{/key_id}","collaborators_url":"https://api.github.com/repos/simpeg/simpeg/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/simpeg/simpeg/teams","hooks_url":"https://api.github.com/repos/simpeg/simpeg/hooks","issue_events_url":"https://api.github.com/repos/simpeg/simpeg/issues/events{/number}","events_url":"https://api.github.com/repos/simpeg/simpeg/events","assignees_url":"https://api.github.com/repos/simpeg/simpeg/assignees{/user}","branches_url":"https://api.github.com/repos/simpeg/simpeg/branches{/branch}","tags_url":"https://api.github.com/repos/simpeg/simpeg/tags","blobs_url":"https://api.github.com/repos/simpeg/simpeg/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/simpeg/simpeg/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/simpeg/simpeg/git/refs{/sha}","trees_url":"https://api.github.com/repos/simpeg/simpeg/git/trees{/sha}","statuses_url":"https://api.github.com/repos/simpeg/simpeg/statuses/{sha}","languages_url":"https://api.github.com/repos/simpeg/simpeg/languages","stargazers_url":"https://api.github.com/repos/simpeg/simpeg/stargazers","contributors_url":"https://api.github.com/repos/simpeg/simpeg/contributors","subscribers_url":"https://api.github.com/repos/simpeg/simpeg/subscribers","subscription_url":"https://api.github.com/repos/simpeg/simpeg/subscription","commits_url":"https://api.github.com/repos/simpeg/simpeg/commits{/sha}","git_commits_url":"https://api.github.com/repos/simpeg/simpeg/git/commits{/sha}","comments_url":"https://api.github.com/repos/simpeg/simpeg/comments{/number}","issue_comment_url":"https://api.github.com/repos/simpeg/simpeg/issues/comments{/number}","contents_url":"https://api.github.com/repos/simpeg/simpeg/contents/{+path}","compare_url":"https://api.github.com/repos/simpeg/simpeg/compare/{base}...{head}","merges_url":"https://api.github.com/repos/simpeg/simpeg/merges","archive_url":"https://api.github.com/repos/simpeg/simpeg/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/simpeg/simpeg/downloads","issues_url":"https://api.github.com/repos/simpeg/simpeg/issues{/number}","pulls_url":"https://api.github.com/repos/simpeg/simpeg/pulls{/number}","milestones_url":"https://api.github.com/repos/simpeg/simpeg/milestones{/number}","notifications_url":"https://api.github.com/repos/simpeg/simpeg/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/simpeg/simpeg/labels{/name}","releases_url":"https://api.github.com/repos/simpeg/simpeg/releases{/id}","deployments_url":"https://api.github.com/repos/simpeg/simpeg/deployments","created_at":"2013-11-26T19:46:36Z","updated_at":"2017-03-24T21:31:15Z","pushed_at":"2017-04-04T17:14:33Z","git_url":"git://github.com/simpeg/simpeg.git","ssh_url":"git@github.com:simpeg/simpeg.git","clone_url":"https://github.com/simpeg/simpeg.git","svn_url":"https://github.com/simpeg/simpeg","homepage":"http://simpeg.xyz","size":52456,"stargazers_count":45,"watchers_count":45,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":23,"mirror_url":null,"open_issues_count":78,"forks":23,"open_issues":78,"watchers":45,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/simpeg/simpeg/pulls/566"},"html":{"href":"https://github.com/simpeg/simpeg/pull/566"},"issue":{"href":"https://api.github.com/repos/simpeg/simpeg/issues/566"},"comments":{"href":"https://api.github.com/repos/simpeg/simpeg/issues/566/comments"},"review_comments":{"href":"https://api.github.com/repos/simpeg/simpeg/pulls/566/comments"},"review_comment":{"href":"https://api.github.com/repos/simpeg/simpeg/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/simpeg/simpeg/pulls/566/commits"},"statuses":{"href":"https://api.github.com/repos/simpeg/simpeg/statuses/1e5c4b183922cae9a7288c191aa987fd3fabf7a8"}}}}
{"actor":{"display_login":"sgkang"}}