GitHub PullRequestReviewCommentEvent at 2014-07-23 17:56:43
Repository: ecl-ml
Actor: johnholt
Payload: {"action":"created","comment":{"url":"https://api.github.com/repos/hpcc-systems/ecl-ml/pulls/comments/15303618","id":15303618,"diff_hunk":"@@ -687,9 +689,345 @@ EXPORT Logistic(REAL8 Ridge=0.00001, REAL8 Epsilon=0.000000001, UNSIGNED2 MaxIte\n \t\tRETURN PROJECT(sigmoid,tr(LEFT));\n \tEND;\n \t\t\n-\tEND; // Logistic Module\n+\tEND; // Logistic_sparse Module\n \t\n+/*\n+    Logistic Regression implementation base on the iteratively-reweighted least squares (IRLS) algorithm:\n+  http://www.cs.cmu.edu/~ggordon/IRLS-example\n+\n+    Logistic Regression module parameters:\n+    - Ridge: an optional ridge term used to ensure existance of Inv(X'*X) even if\n+        some independent variables X are linearly dependent. In other words the Ridge parameter\n+        ensures that the matrix X'*X+mRidge is non-singular.\n+    - Epsilon: an optional parameter used to test convergence\n+    - MaxIter: an optional parameter that defines a maximum number of iterations\n+    - prows: an optional parameter used to set the number of rows in partition blocks (Should be used in conjuction with pcols)\n+    - pcols: an optional parameter used to set the number of cols in partition blocks (Should be used in conjuction with prows)\n+    - Maxrows: an optional parameter used to set maximum rows allowed per block when using AutoBVMap\n+    - Maxcols: an optional parameter used to set maximum cols allowed per block when using AutoBVMap\n+\n+    The inputs to the Logis module are:\n+  a) A training dataset X of discretized independant variables\n+  b) A dataset of class results Y.\n+\n+*/\n+    EXPORT Logistic_dense(REAL8 Ridge=0.00001, REAL8 Epsilon=0.000000001, UNSIGNED2 MaxIter=200, \n+               UNSIGNED4 prows=0, UNSIGNED4 pcols=0,UNSIGNED4 Maxrows=0, UNSIGNED4 Maxcols=0) := MODULE(DEFAULT)\n+                     \n+    Logis(DATASET(Types.NumericField) X, DATASET(Types.NumericField) Y) := MODULE\n+        SHARED mu_comp := ENUM ( Beta = 1,  Y = 2, BetaError = 3, BetaMaxError = 4 );\n+        SHARED RebaseY := Utils.RebaseNumericField(Y);\n+        SHARED Y_Map := RebaseY.Mapping(1);\n+        mX_0 := Types.ToMatrix(X);\n+         SHARED mX := Mat.InsertColumn(mX_0, 1, 1.0); // Insert X1=1 column (Xcols = Xcols+1)\n+         mXstats := Mat.Has(mX).Stats;\n+         mX_n := mXstats.XMax;\n+         mX_m := mXstats.YMax;\n+         \n+         //Map for Matrix X. Map will be used to derive all other maps in Logis\n+         havemaxrow := maxrows > 0;\n+         havemaxcol := maxcols > 0;\n+         havemaxrowcol := havemaxrow and havemaxcol;\n+         \n+         derivemap := IF(havemaxrowcol, PBblas.AutoBVMap(mX_n, mX_m,prows,pcols,maxrows, maxcols),\n+                      IF(havemaxrow, PBblas.AutoBVMap(mX_n, mX_m,prows,pcols,maxrows),\n+                      IF(havemaxcol, PBblas.AutoBVMap(mX_n, mX_m,prows,pcols,,maxcols),PBblas.AutoBVMap(mX_n, mX_m,prows,pcols))));\n+\n+        sizeRec := RECORD\n+            PBblas.Types.dimension_t m_rows;\n+            PBblas.Types.dimension_t m_cols;\n+            PBblas.Types.dimension_t f_b_rows;\n+            PBblas.Types.dimension_t f_b_cols;\n+        END;\n+\n+        SHARED sizeTable := DATASET([{derivemap.matrix_rows,derivemap.matrix_cols,derivemap.part_rows(1),derivemap.part_cols(1)}], sizeRec);\n+        \n+        \n+        mXmap := PBblas.Matrix_Map(sizeTable[1].m_rows,sizeTable[1].m_cols,sizeTable[1].f_b_rows,sizeTable[1].f_b_cols);\n+        //Create block matrix X\n+        mXdist := DMAT.Converted.FromElement(mX,mXmap);\n+        \n+        \n+        //Create block matrix Y\n+        Y_0 := RebaseY.ToNew(Y_Map);\n+        mY := Types.ToMatrix(Y_0);\n+        mYmap := PBblas.Matrix_Map(sizeTable[1].m_rows, 1, sizeTable[1].f_b_rows, 1);\n+        mYdist := DMAT.Converted.FromElement(mY, mYmap);\n+\n+        genRec := RECORD\n+            STRING1 x:= '';\n+        END;\n+        genSet := DATASET([{' '}], genRec);\n+        Layout_Cell gen(UNSIGNED4 c, UNSIGNED4 NumRows, REAL8 v):=TRANSFORM\n+            SELF.x := ((c-1)  %  NumRows) + 1;\n+            SELF.y := ((c-1) DIV NumRows) + 1;\n+            SELF.v := v;\n+         END;\n+        \n+        \n+        //Create block matrix W\n+        mW := NORMALIZE(genSet, sizeTable[1].m_rows, gen(COUNTER, sizeTable[1].m_rows, 1.0));\n+        mWdist := DMAT.Converted.FromCells(mYmap, mW);\n+        ","path":"ML/Classify.ecl","position":102,"original_position":102,"commit_id":"0df60d3021cbda667b6083557342be0a86f9c53d","original_commit_id":"0df60d3021cbda667b6083557342be0a86f9c53d","user":{"login":"johnholt","id":908049,"avatar_url":"https://avatars.githubusercontent.com/u/908049?","gravatar_id":"6a2d39af23577e1d0dce69c6d5697c99","url":"https://api.github.com/users/johnholt","html_url":"https://github.com/johnholt","followers_url":"https://api.github.com/users/johnholt/followers","following_url":"https://api.github.com/users/johnholt/following{/other_user}","gists_url":"https://api.github.com/users/johnholt/gists{/gist_id}","starred_url":"https://api.github.com/users/johnholt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/johnholt/subscriptions","organizations_url":"https://api.github.com/users/johnholt/orgs","repos_url":"https://api.github.com/users/johnholt/repos","events_url":"https://api.github.com/users/johnholt/events{/privacy}","received_events_url":"https://api.github.com/users/johnholt/received_events","type":"User","site_admin":false},"body":"The new DATASET(sizeTable[1].m_rows, gen(COUNTER, sizeTable[1].m_rows, 1.0) function might be a better choice.  I this case though, I would generate and distribute a seed to each node, and then do a local NORMALIZE(...) to avoid the data movement that will need to be done in the DMAT.Converted definintion.","created_at":"2014-07-23T17:56:43Z","updated_at":"2014-07-23T17:56:43Z","html_url":"https://github.com/hpcc-systems/ecl-ml/pull/192#discussion_r15303618","pull_request_url":"https://api.github.com/repos/hpcc-systems/ecl-ml/pulls/192","_links":{"self":{"href":"https://api.github.com/repos/hpcc-systems/ecl-ml/pulls/comments/15303618"},"html":{"href":"https://github.com/hpcc-systems/ecl-ml/pull/192#discussion_r15303618"},"pull_request":{"href":"https://api.github.com/repos/hpcc-systems/ecl-ml/pulls/192"}}},"pull_request":{"url":"https://api.github.com/repos/hpcc-systems/ecl-ml/pulls/192","id":18686435,"html_url":"https://github.com/hpcc-systems/ecl-ml/pull/192","diff_url":"https://github.com/hpcc-systems/ecl-ml/pull/192.diff","patch_url":"https://github.com/hpcc-systems/ecl-ml/pull/192.patch","issue_url":"https://api.github.com/repos/hpcc-systems/ecl-ml/issues/192","number":192,"state":"open","title":"Logistic Regression for dense matrices with supporting functions","user":{"login":"iMikePayne","id":7783139,"avatar_url":"https://avatars.githubusercontent.com/u/7783139?","gravatar_id":"5e71519bdd381df788be06126dd366eb","url":"https://api.github.com/users/iMikePayne","html_url":"https://github.com/iMikePayne","followers_url":"https://api.github.com/users/iMikePayne/followers","following_url":"https://api.github.com/users/iMikePayne/following{/other_user}","gists_url":"https://api.github.com/users/iMikePayne/gists{/gist_id}","starred_url":"https://api.github.com/users/iMikePayne/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/iMikePayne/subscriptions","organizations_url":"https://api.github.com/users/iMikePayne/orgs","repos_url":"https://api.github.com/users/iMikePayne/repos","events_url":"https://api.github.com/users/iMikePayne/events{/privacy}","received_events_url":"https://api.github.com/users/iMikePayne/received_events","type":"User","site_admin":false},"body":"Provided is an implementation of Logistic Regression for dense matrices using PBblas.\r\n\r\nFiles created:\r\n\r\nPBblas/HadamardProduct.ecl - Cell wise multiplication using PBblas\r\n\r\nPBblas/AutoMap.ecl - Function to determine map sizes for matrices. Not always optimal and is determined by rows/cols in matrix, max row/col for each partition, and CLUSTERSIZE. Partition sizes can also provided for fine tuning/better performance.\r\n\r\nPBblas/Tests/MapTest.ecl - Can be used to predetermine map sizes for matrix. Results can be used as defaults for PBblas/AutoMap.ecl or PBblas/MatrixMap.ecl\r\n\r\nPBblas/MU.ecl - Matrix universe for Layout_Part matrices. Same concepts as Mat/MU.ecl\r\n\r\nNecessary updated files:\r\nClassify.ecl - Added LR model name logistic. Renamed Original Logistic to Logistic_sparse.\r\n\r\nPBblas.Types.ecl - Added PBblas/MU.ecl type\r\n\r\nML/Utils.ecl - Added Rebasing for IDs. Added support for Rebasing ID from Numbers. This is important when moving back and forth between Mat types and PBblas types.\r\n\r\nPB.dgemm - More detailed error messages so it is easier to tell which matrices/blocks are not compatible.","created_at":"2014-07-21T23:16:09Z","updated_at":"2014-07-23T17:56:43Z","closed_at":null,"merged_at":null,"merge_commit_sha":"88e6d5ed5dad586bb19bfd87f51f69a8f0894f73","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/hpcc-systems/ecl-ml/pulls/192/commits","review_comments_url":"https://api.github.com/repos/hpcc-systems/ecl-ml/pulls/192/comments","review_comment_url":"https://api.github.com/repos/hpcc-systems/ecl-ml/pulls/comments/{number}","comments_url":"https://api.github.com/repos/hpcc-systems/ecl-ml/issues/192/comments","statuses_url":"https://api.github.com/repos/hpcc-systems/ecl-ml/statuses/0df60d3021cbda667b6083557342be0a86f9c53d","head":{"label":"iMikePayne:master","ref":"master","sha":"0df60d3021cbda667b6083557342be0a86f9c53d","user":{"login":"iMikePayne","id":7783139,"avatar_url":"https://avatars.githubusercontent.com/u/7783139?","gravatar_id":"5e71519bdd381df788be06126dd366eb","url":"https://api.github.com/users/iMikePayne","html_url":"https://github.com/iMikePayne","followers_url":"https://api.github.com/users/iMikePayne/followers","following_url":"https://api.github.com/users/iMikePayne/following{/other_user}","gists_url":"https://api.github.com/users/iMikePayne/gists{/gist_id}","starred_url":"https://api.github.com/users/iMikePayne/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/iMikePayne/subscriptions","organizations_url":"https://api.github.com/users/iMikePayne/orgs","repos_url":"https://api.github.com/users/iMikePayne/repos","events_url":"https://api.github.com/users/iMikePayne/events{/privacy}","received_events_url":"https://api.github.com/users/iMikePayne/received_events","type":"User","site_admin":false},"repo":{"id":22082675,"name":"ecl-ml","full_name":"iMikePayne/ecl-ml","owner":{"login":"iMikePayne","id":7783139,"avatar_url":"https://avatars.githubusercontent.com/u/7783139?","gravatar_id":"5e71519bdd381df788be06126dd366eb","url":"https://api.github.com/users/iMikePayne","html_url":"https://github.com/iMikePayne","followers_url":"https://api.github.com/users/iMikePayne/followers","following_url":"https://api.github.com/users/iMikePayne/following{/other_user}","gists_url":"https://api.github.com/users/iMikePayne/gists{/gist_id}","starred_url":"https://api.github.com/users/iMikePayne/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/iMikePayne/subscriptions","organizations_url":"https://api.github.com/users/iMikePayne/orgs","repos_url":"https://api.github.com/users/iMikePayne/repos","events_url":"https://api.github.com/users/iMikePayne/events{/privacy}","received_events_url":"https://api.github.com/users/iMikePayne/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/iMikePayne/ecl-ml","description":"ECL Machine Learning code ","fork":true,"url":"https://api.github.com/repos/iMikePayne/ecl-ml","forks_url":"https://api.github.com/repos/iMikePayne/ecl-ml/forks","keys_url":"https://api.github.com/repos/iMikePayne/ecl-ml/keys{/key_id}","collaborators_url":"https://api.github.com/repos/iMikePayne/ecl-ml/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/iMikePayne/ecl-ml/teams","hooks_url":"https://api.github.com/repos/iMikePayne/ecl-ml/hooks","issue_events_url":"https://api.github.com/repos/iMikePayne/ecl-ml/issues/events{/number}","events_url":"https://api.github.com/repos/iMikePayne/ecl-ml/events","assignees_url":"https://api.github.com/repos/iMikePayne/ecl-ml/assignees{/user}","branches_url":"https://api.github.com/repos/iMikePayne/ecl-ml/branches{/branch}","tags_url":"https://api.github.com/repos/iMikePayne/ecl-ml/tags","blobs_url":"https://api.github.com/repos/iMikePayne/ecl-ml/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/iMikePayne/ecl-ml/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/iMikePayne/ecl-ml/git/refs{/sha}","trees_url":"https://api.github.com/repos/iMikePayne/ecl-ml/git/trees{/sha}","statuses_url":"https://api.github.com/repos/iMikePayne/ecl-ml/statuses/{sha}","languages_url":"https://api.github.com/repos/iMikePayne/ecl-ml/languages","stargazers_url":"https://api.github.com/repos/iMikePayne/ecl-ml/stargazers","contributors_url":"https://api.github.com/repos/iMikePayne/ecl-ml/contributors","subscribers_url":"https://api.github.com/repos/iMikePayne/ecl-ml/subscribers","subscription_url":"https://api.github.com/repos/iMikePayne/ecl-ml/subscription","commits_url":"https://api.github.com/repos/iMikePayne/ecl-ml/commits{/sha}","git_commits_url":"https://api.github.com/repos/iMikePayne/ecl-ml/git/commits{/sha}","comments_url":"https://api.github.com/repos/iMikePayne/ecl-ml/comments{/number}","issue_comment_url":"https://api.github.com/repos/iMikePayne/ecl-ml/issues/comments/{number}","contents_url":"https://api.github.com/repos/iMikePayne/ecl-ml/contents/{+path}","compare_url":"https://api.github.com/repos/iMikePayne/ecl-ml/compare/{base}...{head}","merges_url":"https://api.github.com/repos/iMikePayne/ecl-ml/merges","archive_url":"https://api.github.com/repos/iMikePayne/ecl-ml/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/iMikePayne/ecl-ml/downloads","issues_url":"https://api.github.com/repos/iMikePayne/ecl-ml/issues{/number}","pulls_url":"https://api.github.com/repos/iMikePayne/ecl-ml/pulls{/number}","milestones_url":"https://api.github.com/repos/iMikePayne/ecl-ml/milestones{/number}","notifications_url":"https://api.github.com/repos/iMikePayne/ecl-ml/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/iMikePayne/ecl-ml/labels{/name}","releases_url":"https://api.github.com/repos/iMikePayne/ecl-ml/releases{/id}","created_at":"2014-07-21T22:32:45Z","updated_at":"2014-07-21T23:06:45Z","pushed_at":"2014-07-22T14:15:01Z","git_url":"git://github.com/iMikePayne/ecl-ml.git","ssh_url":"git@github.com:iMikePayne/ecl-ml.git","clone_url":"https://github.com/iMikePayne/ecl-ml.git","svn_url":"https://github.com/iMikePayne/ecl-ml","homepage":"https://track.hpccsystems.com/browse/ML","size":4733,"stargazers_count":0,"watchers_count":0,"language":"Prolog","has_issues":false,"has_downloads":true,"has_wiki":true,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"hpcc-systems:master","ref":"master","sha":"9b35ba7049a470a314c18fd47fbdddf3a10fbf3a","user":{"login":"hpcc-systems","id":900867,"avatar_url":"https://avatars.githubusercontent.com/u/900867?","gravatar_id":"d982932571a14695b971d1b3b9dede2b","url":"https://api.github.com/users/hpcc-systems","html_url":"https://github.com/hpcc-systems","followers_url":"https://api.github.com/users/hpcc-systems/followers","following_url":"https://api.github.com/users/hpcc-systems/following{/other_user}","gists_url":"https://api.github.com/users/hpcc-systems/gists{/gist_id}","starred_url":"https://api.github.com/users/hpcc-systems/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/hpcc-systems/subscriptions","organizations_url":"https://api.github.com/users/hpcc-systems/orgs","repos_url":"https://api.github.com/users/hpcc-systems/repos","events_url":"https://api.github.com/users/hpcc-systems/events{/privacy}","received_events_url":"https://api.github.com/users/hpcc-systems/received_events","type":"Organization","site_admin":false},"repo":{"id":2443944,"name":"ecl-ml","full_name":"hpcc-systems/ecl-ml","owner":{"login":"hpcc-systems","id":900867,"avatar_url":"https://avatars.githubusercontent.com/u/900867?","gravatar_id":"d982932571a14695b971d1b3b9dede2b","url":"https://api.github.com/users/hpcc-systems","html_url":"https://github.com/hpcc-systems","followers_url":"https://api.github.com/users/hpcc-systems/followers","following_url":"https://api.github.com/users/hpcc-systems/following{/other_user}","gists_url":"https://api.github.com/users/hpcc-systems/gists{/gist_id}","starred_url":"https://api.github.com/users/hpcc-systems/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/hpcc-systems/subscriptions","organizations_url":"https://api.github.com/users/hpcc-systems/orgs","repos_url":"https://api.github.com/users/hpcc-systems/repos","events_url":"https://api.github.com/users/hpcc-systems/events{/privacy}","received_events_url":"https://api.github.com/users/hpcc-systems/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/hpcc-systems/ecl-ml","description":"ECL Machine Learning code ","fork":false,"url":"https://api.github.com/repos/hpcc-systems/ecl-ml","forks_url":"https://api.github.com/repos/hpcc-systems/ecl-ml/forks","keys_url":"https://api.github.com/repos/hpcc-systems/ecl-ml/keys{/key_id}","collaborators_url":"https://api.github.com/repos/hpcc-systems/ecl-ml/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/hpcc-systems/ecl-ml/teams","hooks_url":"https://api.github.com/repos/hpcc-systems/ecl-ml/hooks","issue_events_url":"https://api.github.com/repos/hpcc-systems/ecl-ml/issues/events{/number}","events_url":"https://api.github.com/repos/hpcc-systems/ecl-ml/events","assignees_url":"https://api.github.com/repos/hpcc-systems/ecl-ml/assignees{/user}","branches_url":"https://api.github.com/repos/hpcc-systems/ecl-ml/branches{/branch}","tags_url":"https://api.github.com/repos/hpcc-systems/ecl-ml/tags","blobs_url":"https://api.github.com/repos/hpcc-systems/ecl-ml/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/hpcc-systems/ecl-ml/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/hpcc-systems/ecl-ml/git/refs{/sha}","trees_url":"https://api.github.com/repos/hpcc-systems/ecl-ml/git/trees{/sha}","statuses_url":"https://api.github.com/repos/hpcc-systems/ecl-ml/statuses/{sha}","languages_url":"https://api.github.com/repos/hpcc-systems/ecl-ml/languages","stargazers_url":"https://api.github.com/repos/hpcc-systems/ecl-ml/stargazers","contributors_url":"https://api.github.com/repos/hpcc-systems/ecl-ml/contributors","subscribers_url":"https://api.github.com/repos/hpcc-systems/ecl-ml/subscribers","subscription_url":"https://api.github.com/repos/hpcc-systems/ecl-ml/subscription","commits_url":"https://api.github.com/repos/hpcc-systems/ecl-ml/commits{/sha}","git_commits_url":"https://api.github.com/repos/hpcc-systems/ecl-ml/git/commits{/sha}","comments_url":"https://api.github.com/repos/hpcc-systems/ecl-ml/comments{/number}","issue_comment_url":"https://api.github.com/repos/hpcc-systems/ecl-ml/issues/comments/{number}","contents_url":"https://api.github.com/repos/hpcc-systems/ecl-ml/contents/{+path}","compare_url":"https://api.github.com/repos/hpcc-systems/ecl-ml/compare/{base}...{head}","merges_url":"https://api.github.com/repos/hpcc-systems/ecl-ml/merges","archive_url":"https://api.github.com/repos/hpcc-systems/ecl-ml/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/hpcc-systems/ecl-ml/downloads","issues_url":"https://api.github.com/repos/hpcc-systems/ecl-ml/issues{/number}","pulls_url":"https://api.github.com/repos/hpcc-systems/ecl-ml/pulls{/number}","milestones_url":"https://api.github.com/repos/hpcc-systems/ecl-ml/milestones{/number}","notifications_url":"https://api.github.com/repos/hpcc-systems/ecl-ml/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/hpcc-systems/ecl-ml/labels{/name}","releases_url":"https://api.github.com/repos/hpcc-systems/ecl-ml/releases{/id}","created_at":"2011-09-23T13:07:48Z","updated_at":"2014-07-21T19:59:31Z","pushed_at":"2014-07-21T19:59:30Z","git_url":"git://github.com/hpcc-systems/ecl-ml.git","ssh_url":"git@github.com:hpcc-systems/ecl-ml.git","clone_url":"https://github.com/hpcc-systems/ecl-ml.git","svn_url":"https://github.com/hpcc-systems/ecl-ml","homepage":"https://track.hpccsystems.com/browse/ML","size":4733,"stargazers_count":33,"watchers_count":33,"language":"Prolog","has_issues":false,"has_downloads":true,"has_wiki":true,"forks_count":23,"mirror_url":null,"open_issues_count":21,"forks":23,"open_issues":21,"watchers":33,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/hpcc-systems/ecl-ml/pulls/192"},"html":{"href":"https://github.com/hpcc-systems/ecl-ml/pull/192"},"issue":{"href":"https://api.github.com/repos/hpcc-systems/ecl-ml/issues/192"},"comments":{"href":"https://api.github.com/repos/hpcc-systems/ecl-ml/issues/192/comments"},"review_comments":{"href":"https://api.github.com/repos/hpcc-systems/ecl-ml/pulls/192/comments"},"review_comment":{"href":"https://api.github.com/repos/hpcc-systems/ecl-ml/pulls/comments/{number}"},"commits":{"href":"https://api.github.com/repos/hpcc-systems/ecl-ml/pulls/192/commits"},"statuses":{"href":"https://api.github.com/repos/hpcc-systems/ecl-ml/statuses/0df60d3021cbda667b6083557342be0a86f9c53d"}}}}