{"action":"created","comment":{"url":"https://api.github.com/repos/vmtk/vmtk/pulls/comments/123392790","pull_request_review_id":45591616,"id":123392790,"diff_hunk":"@@ -0,0 +1,111 @@\n+## Module:    $RCSfile: vmtknumpytocenterlines.py,v $\n+## Language:  Python\n+## Date:      June 10, 2017\n+## Version:   1.4\n+\n+##   Copyright (c) Richard Izzo, Luca Antiga, David Steinman. All rights reserved.\n+##   See LICENCE file for details.\n+\n+##      This software is distributed WITHOUT ANY WARRANTY; without even\n+##      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR\n+##      PURPOSE.  See the above copyright notices for more information.\n+\n+## Note: this class was contributed by\n+##       Richard Izzo (Github @rlizzo)\n+##       University at Buffalo\n+##       The Jacobs Institute\n+\n+from __future__ import absolute_import  # NEEDS TO STAY AS TOP LEVEL MODULE FOR Py2-3 COMPATIBILITY\n+import vtk\n+import sys\n+\n+from vmtk import vtkvmtk\n+from vmtk import vmtkrenderer\n+from vmtk import pypes\n+\n+try:\n+    import numpy as np\n+except ImportError:\n+    raise ImportError('Unable to Import vmtknumpytosurface module, numpy is not installed')\n+\n+class vmtkNumpyToCenterlines(pypes.pypeScript):\n+    def __init__(self):\n+\n+        pypes.pypeScript.__init__(self)\n+\n+        self.ArrayDict = None\n+\n+        self.SetScriptName('vmtkNumpyToCenterlines')\n+        self.SetScriptDoc('Takes a nested python dictionary containg numpy arrays specifying vertex '\n+                          'points, associated scalar data, and cell data specifying line connectivity'\n+                          'and returns a VTK centerlines vtkPolyData file')\n+        self.SetInputMembers([\n+            ['ArrayDict', 'i', 'dict', 1, '', 'the input dictionary']])\n+        self.SetOutputMembers([\n+            ['Centerlines', 'o', 'vtkPolyData', 1, '', 'the output surface', 'vmtksurfacewriter']])\n+\n+    def Execute(self):\n+\n+        polyData = vtk.vtkPolyData()\n+\n+        points = vtk.vtkPoints()\n+        for xyzPoint in self.ArrayDict['Points']:\n+            points.InsertNextPoint(xyzPoint)\n+\n+        polyData.SetPoints(points)\n+\n+        self.PrintLog('converting numpy array to centerlines')\n+        pointDataKeys = self.ArrayDict['PointData'].keys()\n+        for key in pointDataKeys:\n+\n+            pointDataDType = str(self.ArrayDict['PointData'][key].dtype)\n+            if pointDataDType.find('float') != -1:\n+                pointDataArray = vtk.vtkFloatArray()\n+            if pointDataDType.find('int') != -1:\n+                pointDataArray = vtk.vtkIntArray()\n+\n+            try:\n+                pointDataComponents = self.ArrayDict['PointData'][key].shape[1]\n+            except IndexError:\n+                pointDataComponents = 1\n+\n+            pointDataArray.SetNumberOfComponents(pointDataComponents)\n+            pointDataArray.SetName(key)\n+\n+            if pointDataComponents == 1:\n+                for pointData in self.ArrayDict['PointData'][key]:\n+                    pointDataArray.InsertNextValue(pointData)\n+                polyData.GetPointData().SetActiveScalars(key)\n+                polyData.GetPointData().SetScalars(pointDataArray)\n+            else:\n+                for pointData in self.ArrayDict['PointData'][key]:\n+                    pointDataArray.InsertNextTuple(pointData)\n+                polyData.GetPointData().SetActiveVectors(key)\n+                polyData.GetPointData().SetVectors(pointDataArray)\n+\n+        cellDataArray = vtk.vtkCellArray()\n+        numberOfCells = len(self.ArrayDict['CellData']['CellPointIds'].keys())\n+        for cellId in range(numberOfCells):\n+            numberOfCellPoints = self.ArrayDict['CellData']['CellPointIds'][str(cellId)].size","path":"vmtkScripts/contrib/vmtknumpytocenterlines.py","position":96,"original_position":89,"commit_id":"f22e71d8498e660ff8c02bebb970084e039b1bde","original_commit_id":"509d50f582e779601f409365519efc7dcf4b13b1","user":{"login":"lantiga","id":191033,"avatar_url":"https://avatars1.githubusercontent.com/u/191033?v=3","gravatar_id":"","url":"https://api.github.com/users/lantiga","html_url":"https://github.com/lantiga","followers_url":"https://api.github.com/users/lantiga/followers","following_url":"https://api.github.com/users/lantiga/following{/other_user}","gists_url":"https://api.github.com/users/lantiga/gists{/gist_id}","starred_url":"https://api.github.com/users/lantiga/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lantiga/subscriptions","organizations_url":"https://api.github.com/users/lantiga/orgs","repos_url":"https://api.github.com/users/lantiga/repos","events_url":"https://api.github.com/users/lantiga/events{/privacy}","received_events_url":"https://api.github.com/users/lantiga/received_events","type":"User","site_admin":false},"body":"Hi Rick, I would suggest not to use a dictionary after 'CellPointIds', but a simple list, that you can index with an integer. You could use an integer as a key to the dictionary also, but there's no reason to do that, since `cellIds` are sequential and start from `0`. In any case, the `str(cellId)` doesn't really look good and I'd avoid it.\r\n\r\nOn a more general note, this layout (one entry per cell) is going to use more memory than needed for large datasets with many cells. It's not going to make a big difference for centerlines, but as a general strategy for other kinds of datasets it's going to be inefficient.\r\n\r\nYou could store cells more efficiently by using one or two arrays.\r\nOne-array solution: store cells sequentially in a NumPy array like \r\n```\r\ncell0npts cell0pt0 cell0pt1 ... cell0pt4 cell1npts cell1pt0 cell1pt1 ...\r\n```\r\nThis is quite compact, but it gets tricky if you every need to access a cell given its id.\r\n\r\nTwo-array solution: the above, plus an array with size `ncells` containing the index of each cell in the above array.\r\n\r\nLast note: if you mix cell types (lines, polygons, etc) you might want to also have an array of size `ncells` containing the cell type for each cell.\r\n\r\nIt's your call, my only request is to get rid of the cellId as string thing. Thanks!","created_at":"2017-06-21T23:47:15Z","updated_at":"2017-06-21T23:47:15Z","html_url":"https://github.com/vmtk/vmtk/pull/181#discussion_r123392790","pull_request_url":"https://api.github.com/repos/vmtk/vmtk/pulls/181","_links":{"self":{"href":"https://api.github.com/repos/vmtk/vmtk/pulls/comments/123392790"},"html":{"href":"https://github.com/vmtk/vmtk/pull/181#discussion_r123392790"},"pull_request":{"href":"https://api.github.com/repos/vmtk/vmtk/pulls/181"}}},"pull_request":{"url":"https://api.github.com/repos/vmtk/vmtk/pulls/181","id":124998435,"html_url":"https://github.com/vmtk/vmtk/pull/181","diff_url":"https://github.com/vmtk/vmtk/pull/181.diff","patch_url":"https://github.com/vmtk/vmtk/pull/181.patch","issue_url":"https://api.github.com/repos/vmtk/vmtk/issues/181","number":181,"state":"open","locked":false,"title":"Numpy dataset adaptor","user":{"login":"rlizzo","id":17350115,"avatar_url":"https://avatars2.githubusercontent.com/u/17350115?v=3","gravatar_id":"","url":"https://api.github.com/users/rlizzo","html_url":"https://github.com/rlizzo","followers_url":"https://api.github.com/users/rlizzo/followers","following_url":"https://api.github.com/users/rlizzo/following{/other_user}","gists_url":"https://api.github.com/users/rlizzo/gists{/gist_id}","starred_url":"https://api.github.com/users/rlizzo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rlizzo/subscriptions","organizations_url":"https://api.github.com/users/rlizzo/orgs","repos_url":"https://api.github.com/users/rlizzo/repos","events_url":"https://api.github.com/users/rlizzo/events{/privacy}","received_events_url":"https://api.github.com/users/rlizzo/received_events","type":"User","site_admin":false},"body":"Luca, \r\n\r\nThis is a very early stage PR (not at all well tested or ready for release) to add increased integration to numpy arrays from vmtk. \r\n\r\n**Purpose:** To allow for the easy conversion of vtkDataObjects _to and from_ numpy arrays in a data-lossless manner (ie. preserving PointData/CellData array scalars and CellData connectivity). \r\n\r\n**Scope:** Conversion of surface data and centerlines data (eventually I'll get around to adding image data as well). \r\n\r\n**Methods:** \r\n1) Inclusion of 4 new vmtkscripts:\r\n- `vmtksurfacetonumpy`\r\n- `vmtknumpytosurface`\r\n- `vmtkcenterlinestonumpy`\r\n- `vmtknumpytocenterlines`\r\n\r\n2) vmtk `Surface` and `Centerlines` data is accessed through the `vtk.numpy_integration dataset adaptor` method. `Points, PointData, & CellData` is copied into a series of numpy arrays contained within a structure defined by a nested python dictionary. \r\n\r\n3) a nested dictionary (of predefined structure) containing numpy arrays is converted into a `vtkPolyData` object in a method unique to the triangle cell connectivity of a `Surface` and a line cell connectivity of a `Centerline`\r\n\r\n**Usage:** \r\n1) The script is intended to be run at the programmatic level (I haven't tried to save the output python dict object yet, but It's on the todo list). \r\n\r\n2) The following script can be used to run the conversion from vtkPolyData to the numpy array. \r\n\r\n_surface data_\r\n```\r\nnumpyArrayConverter = vmtkscripts.vmtksurfacetonumpy()\r\nnumpyArrayConverter.Surface = foo.Surface\r\nnumpyArrayConverter.Execute()\r\n\r\narrayDict = numpyArrayConverter.ArrayDict\r\n```\r\n_centerline data_\r\n```\r\nnumpyArrayConverter = vmtkscripts.vmtkcenterlinestonumpy()\r\nnumpyArrayConverter.Centerlines = foo.Centerlines\r\nnumpyArrayConverter.Execute()\r\n\r\narrayDict = numpyArrayConverter.ArrayDict\r\n```\r\n3) The dictionary output structure mimics the structure of the `vtk.numpy_integration datasetadaptor` output. The structure is:\r\n```\r\narrayDict\r\n    ['Points']                      <-- required. is Nx3 array of N vertexes and x, y, z locations\r\n    ['PointData']                <-- required, even if subarrays are empty\r\n        ['PointDataArray1']  <-- optional (ex. MaximumInscribedSphereRadius)\r\n        ['PointDataArray2']  <-- optional\r\n        ...\r\n    ['CellData']                  <-- required\r\n        ['CellPointIds']        <-- required. defines which cell conectivity to ['Points] Indices\r\n        ['CellDataArray1']   <-- optional ie. CenterlineTractId\r\n        ['CellDataArray2']   <-- optional\r\n        ...\r\n```\r\n4) Any of the data in the dictionary can be modified, and new `PointDataArrays` or `CellDataArrays` can be added by simply specifying a new key value pair in the appropriate location in the dictionary. \r\n\r\n5) The dictionary can be converted into vtkPolyData format via calls to `vmtknumpytosurface` or `vmtknumpytocenterlines`, setting the parameter `InputDict = arrayDict`. The output data is a standard vtkPolyData format, and can be used as normal `Surface` or `Centerlines` data in following pypes. \r\n\r\n**Requirements:** \r\n1) Numpy must be installed on the users system. While this is an unsafe assumption for current vmtk distribution methods, this could easily be addressed in the anaconda package release by specifying numpy as a runtime requirement in the meta.yaml file. \r\n\r\nI wanted to get your input on this while it's in an early stage to see if you had any suggestions or concerns. These scripts have been a real help to me, and since this seems to be a popular topic on the vmtk-users forum I figured this would be useful to the community as well. \r\n\r\nLet me know.\r\n-RIck","created_at":"2017-06-10T17:27:34Z","updated_at":"2017-06-21T23:47:15Z","closed_at":null,"merged_at":null,"merge_commit_sha":"fda213622be872793ab9e7fb452a99b013d1dad0","assignee":null,"assignees":[],"requested_reviewers":[],"milestone":null,"commits_url":"https://api.github.com/repos/vmtk/vmtk/pulls/181/commits","review_comments_url":"https://api.github.com/repos/vmtk/vmtk/pulls/181/comments","review_comment_url":"https://api.github.com/repos/vmtk/vmtk/pulls/comments{/number}","comments_url":"https://api.github.com/repos/vmtk/vmtk/issues/181/comments","statuses_url":"https://api.github.com/repos/vmtk/vmtk/statuses/f22e71d8498e660ff8c02bebb970084e039b1bde","head":{"label":"rlizzo:numpy-dataset-adaptor","ref":"numpy-dataset-adaptor","sha":"f22e71d8498e660ff8c02bebb970084e039b1bde","user":{"login":"rlizzo","id":17350115,"avatar_url":"https://avatars2.githubusercontent.com/u/17350115?v=3","gravatar_id":"","url":"https://api.github.com/users/rlizzo","html_url":"https://github.com/rlizzo","followers_url":"https://api.github.com/users/rlizzo/followers","following_url":"https://api.github.com/users/rlizzo/following{/other_user}","gists_url":"https://api.github.com/users/rlizzo/gists{/gist_id}","starred_url":"https://api.github.com/users/rlizzo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rlizzo/subscriptions","organizations_url":"https://api.github.com/users/rlizzo/orgs","repos_url":"https://api.github.com/users/rlizzo/repos","events_url":"https://api.github.com/users/rlizzo/events{/privacy}","received_events_url":"https://api.github.com/users/rlizzo/received_events","type":"User","site_admin":false},"repo":{"id":93916959,"name":"vmtk","full_name":"rlizzo/vmtk","owner":{"login":"rlizzo","id":17350115,"avatar_url":"https://avatars2.githubusercontent.com/u/17350115?v=3","gravatar_id":"","url":"https://api.github.com/users/rlizzo","html_url":"https://github.com/rlizzo","followers_url":"https://api.github.com/users/rlizzo/followers","following_url":"https://api.github.com/users/rlizzo/following{/other_user}","gists_url":"https://api.github.com/users/rlizzo/gists{/gist_id}","starred_url":"https://api.github.com/users/rlizzo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rlizzo/subscriptions","organizations_url":"https://api.github.com/users/rlizzo/orgs","repos_url":"https://api.github.com/users/rlizzo/repos","events_url":"https://api.github.com/users/rlizzo/events{/privacy}","received_events_url":"https://api.github.com/users/rlizzo/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/rlizzo/vmtk","description":"the Vascular Modeling Toolkit","fork":true,"url":"https://api.github.com/repos/rlizzo/vmtk","forks_url":"https://api.github.com/repos/rlizzo/vmtk/forks","keys_url":"https://api.github.com/repos/rlizzo/vmtk/keys{/key_id}","collaborators_url":"https://api.github.com/repos/rlizzo/vmtk/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/rlizzo/vmtk/teams","hooks_url":"https://api.github.com/repos/rlizzo/vmtk/hooks","issue_events_url":"https://api.github.com/repos/rlizzo/vmtk/issues/events{/number}","events_url":"https://api.github.com/repos/rlizzo/vmtk/events","assignees_url":"https://api.github.com/repos/rlizzo/vmtk/assignees{/user}","branches_url":"https://api.github.com/repos/rlizzo/vmtk/branches{/branch}","tags_url":"https://api.github.com/repos/rlizzo/vmtk/tags","blobs_url":"https://api.github.com/repos/rlizzo/vmtk/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/rlizzo/vmtk/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/rlizzo/vmtk/git/refs{/sha}","trees_url":"https://api.github.com/repos/rlizzo/vmtk/git/trees{/sha}","statuses_url":"https://api.github.com/repos/rlizzo/vmtk/statuses/{sha}","languages_url":"https://api.github.com/repos/rlizzo/vmtk/languages","stargazers_url":"https://api.github.com/repos/rlizzo/vmtk/stargazers","contributors_url":"https://api.github.com/repos/rlizzo/vmtk/contributors","subscribers_url":"https://api.github.com/repos/rlizzo/vmtk/subscribers","subscription_url":"https://api.github.com/repos/rlizzo/vmtk/subscription","commits_url":"https://api.github.com/repos/rlizzo/vmtk/commits{/sha}","git_commits_url":"https://api.github.com/repos/rlizzo/vmtk/git/commits{/sha}","comments_url":"https://api.github.com/repos/rlizzo/vmtk/comments{/number}","issue_comment_url":"https://api.github.com/repos/rlizzo/vmtk/issues/comments{/number}","contents_url":"https://api.github.com/repos/rlizzo/vmtk/contents/{+path}","compare_url":"https://api.github.com/repos/rlizzo/vmtk/compare/{base}...{head}","merges_url":"https://api.github.com/repos/rlizzo/vmtk/merges","archive_url":"https://api.github.com/repos/rlizzo/vmtk/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/rlizzo/vmtk/downloads","issues_url":"https://api.github.com/repos/rlizzo/vmtk/issues{/number}","pulls_url":"https://api.github.com/repos/rlizzo/vmtk/pulls{/number}","milestones_url":"https://api.github.com/repos/rlizzo/vmtk/milestones{/number}","notifications_url":"https://api.github.com/repos/rlizzo/vmtk/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/rlizzo/vmtk/labels{/name}","releases_url":"https://api.github.com/repos/rlizzo/vmtk/releases{/id}","deployments_url":"https://api.github.com/repos/rlizzo/vmtk/deployments","created_at":"2017-06-10T05:01:58Z","updated_at":"2017-06-10T05:02:02Z","pushed_at":"2017-06-17T04:57:13Z","git_url":"git://github.com/rlizzo/vmtk.git","ssh_url":"git@github.com:rlizzo/vmtk.git","clone_url":"https://github.com/rlizzo/vmtk.git","svn_url":"https://github.com/rlizzo/vmtk","homepage":"vmtk.org","size":4825,"stargazers_count":0,"watchers_count":0,"language":"C++","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"vmtk:master","ref":"master","sha":"22f8c66be2fc0083c582082c26285b690f5aa50b","user":{"login":"vmtk","id":1390750,"avatar_url":"https://avatars1.githubusercontent.com/u/1390750?v=3","gravatar_id":"","url":"https://api.github.com/users/vmtk","html_url":"https://github.com/vmtk","followers_url":"https://api.github.com/users/vmtk/followers","following_url":"https://api.github.com/users/vmtk/following{/other_user}","gists_url":"https://api.github.com/users/vmtk/gists{/gist_id}","starred_url":"https://api.github.com/users/vmtk/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/vmtk/subscriptions","organizations_url":"https://api.github.com/users/vmtk/orgs","repos_url":"https://api.github.com/users/vmtk/repos","events_url":"https://api.github.com/users/vmtk/events{/privacy}","received_events_url":"https://api.github.com/users/vmtk/received_events","type":"Organization","site_admin":false},"repo":{"id":842163,"name":"vmtk","full_name":"vmtk/vmtk","owner":{"login":"vmtk","id":1390750,"avatar_url":"https://avatars1.githubusercontent.com/u/1390750?v=3","gravatar_id":"","url":"https://api.github.com/users/vmtk","html_url":"https://github.com/vmtk","followers_url":"https://api.github.com/users/vmtk/followers","following_url":"https://api.github.com/users/vmtk/following{/other_user}","gists_url":"https://api.github.com/users/vmtk/gists{/gist_id}","starred_url":"https://api.github.com/users/vmtk/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/vmtk/subscriptions","organizations_url":"https://api.github.com/users/vmtk/orgs","repos_url":"https://api.github.com/users/vmtk/repos","events_url":"https://api.github.com/users/vmtk/events{/privacy}","received_events_url":"https://api.github.com/users/vmtk/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/vmtk/vmtk","description":"the Vascular Modeling Toolkit","fork":false,"url":"https://api.github.com/repos/vmtk/vmtk","forks_url":"https://api.github.com/repos/vmtk/vmtk/forks","keys_url":"https://api.github.com/repos/vmtk/vmtk/keys{/key_id}","collaborators_url":"https://api.github.com/repos/vmtk/vmtk/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/vmtk/vmtk/teams","hooks_url":"https://api.github.com/repos/vmtk/vmtk/hooks","issue_events_url":"https://api.github.com/repos/vmtk/vmtk/issues/events{/number}","events_url":"https://api.github.com/repos/vmtk/vmtk/events","assignees_url":"https://api.github.com/repos/vmtk/vmtk/assignees{/user}","branches_url":"https://api.github.com/repos/vmtk/vmtk/branches{/branch}","tags_url":"https://api.github.com/repos/vmtk/vmtk/tags","blobs_url":"https://api.github.com/repos/vmtk/vmtk/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/vmtk/vmtk/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/vmtk/vmtk/git/refs{/sha}","trees_url":"https://api.github.com/repos/vmtk/vmtk/git/trees{/sha}","statuses_url":"https://api.github.com/repos/vmtk/vmtk/statuses/{sha}","languages_url":"https://api.github.com/repos/vmtk/vmtk/languages","stargazers_url":"https://api.github.com/repos/vmtk/vmtk/stargazers","contributors_url":"https://api.github.com/repos/vmtk/vmtk/contributors","subscribers_url":"https://api.github.com/repos/vmtk/vmtk/subscribers","subscription_url":"https://api.github.com/repos/vmtk/vmtk/subscription","commits_url":"https://api.github.com/repos/vmtk/vmtk/commits{/sha}","git_commits_url":"https://api.github.com/repos/vmtk/vmtk/git/commits{/sha}","comments_url":"https://api.github.com/repos/vmtk/vmtk/comments{/number}","issue_comment_url":"https://api.github.com/repos/vmtk/vmtk/issues/comments{/number}","contents_url":"https://api.github.com/repos/vmtk/vmtk/contents/{+path}","compare_url":"https://api.github.com/repos/vmtk/vmtk/compare/{base}...{head}","merges_url":"https://api.github.com/repos/vmtk/vmtk/merges","archive_url":"https://api.github.com/repos/vmtk/vmtk/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/vmtk/vmtk/downloads","issues_url":"https://api.github.com/repos/vmtk/vmtk/issues{/number}","pulls_url":"https://api.github.com/repos/vmtk/vmtk/pulls{/number}","milestones_url":"https://api.github.com/repos/vmtk/vmtk/milestones{/number}","notifications_url":"https://api.github.com/repos/vmtk/vmtk/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/vmtk/vmtk/labels{/name}","releases_url":"https://api.github.com/repos/vmtk/vmtk/releases{/id}","deployments_url":"https://api.github.com/repos/vmtk/vmtk/deployments","created_at":"2010-08-16T21:39:39Z","updated_at":"2017-06-09T15:20:52Z","pushed_at":"2017-06-17T04:57:14Z","git_url":"git://github.com/vmtk/vmtk.git","ssh_url":"git@github.com:vmtk/vmtk.git","clone_url":"https://github.com/vmtk/vmtk.git","svn_url":"https://github.com/vmtk/vmtk","homepage":"vmtk.org","size":4729,"stargazers_count":85,"watchers_count":85,"language":"C++","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":64,"mirror_url":null,"open_issues_count":20,"forks":64,"open_issues":20,"watchers":85,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/vmtk/vmtk/pulls/181"},"html":{"href":"https://github.com/vmtk/vmtk/pull/181"},"issue":{"href":"https://api.github.com/repos/vmtk/vmtk/issues/181"},"comments":{"href":"https://api.github.com/repos/vmtk/vmtk/issues/181/comments"},"review_comments":{"href":"https://api.github.com/repos/vmtk/vmtk/pulls/181/comments"},"review_comment":{"href":"https://api.github.com/repos/vmtk/vmtk/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/vmtk/vmtk/pulls/181/commits"},"statuses":{"href":"https://api.github.com/repos/vmtk/vmtk/statuses/f22e71d8498e660ff8c02bebb970084e039b1bde"}}}}
{"actor":{"display_login":"lantiga"}}