{"action":"created","comment":{"url":"https://api.github.com/repos/databricks/spark-tfocs/pulls/comments/37946822","id":37946822,"diff_hunk":"@@ -120,3 +120,41 @@ class TransposedDenseVectorToDVectorLinOp(@transient private val matrix: DMatrix\n \n   override def t: LinearOperator[DenseVector, DVector] = new DenseVectorToDVectorLinOp(matrix)\n }\n+\n+/**\n+ * Compute the products A * x' and b * x', where 'A' is a DMatrix, 'x' is a Vector, and 'b' is a\n+ * Vector. The two products are returned together as a tuple.\n+ *\n+ * NOTE In matlab tfocs this functionality is implemented in linop_stack.m.\n+ * @see [[https://github.com/cvxr/TFOCS/blob/master/private/linop_stack.m]]\n+ */\n+class LinopMatrixVector(private val A: DMatrix, private val b: DenseVector)","path":"src/main/scala/org/apache/spark/mllib/optimization/tfocs/LinearOperator.scala","position":12,"original_position":12,"commit_id":"6d0efcf427a586a7f57d89bae3dcef2db243e660","original_commit_id":"6d0efcf427a586a7f57d89bae3dcef2db243e660","user":{"login":"staple","id":307174,"avatar_url":"https://avatars.githubusercontent.com/u/307174?v=3","gravatar_id":"","url":"https://api.github.com/users/staple","html_url":"https://github.com/staple","followers_url":"https://api.github.com/users/staple/followers","following_url":"https://api.github.com/users/staple/following{/other_user}","gists_url":"https://api.github.com/users/staple/gists{/gist_id}","starred_url":"https://api.github.com/users/staple/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/staple/subscriptions","organizations_url":"https://api.github.com/users/staple/orgs","repos_url":"https://api.github.com/users/staple/repos","events_url":"https://api.github.com/users/staple/events{/privacy}","received_events_url":"https://api.github.com/users/staple/received_events","type":"User","site_admin":false},"body":"I haven't worried too much about the class names here because we will be reorganizing the naming conventions soon.","created_at":"2015-08-26T05:10:56Z","updated_at":"2015-08-26T05:10:56Z","html_url":"https://github.com/databricks/spark-tfocs/pull/10#discussion_r37946822","pull_request_url":"https://api.github.com/repos/databricks/spark-tfocs/pulls/10","_links":{"self":{"href":"https://api.github.com/repos/databricks/spark-tfocs/pulls/comments/37946822"},"html":{"href":"https://github.com/databricks/spark-tfocs/pull/10#discussion_r37946822"},"pull_request":{"href":"https://api.github.com/repos/databricks/spark-tfocs/pulls/10"}}},"pull_request":{"url":"https://api.github.com/repos/databricks/spark-tfocs/pulls/10","id":41956423,"html_url":"https://github.com/databricks/spark-tfocs/pull/10","diff_url":"https://github.com/databricks/spark-tfocs/pull/10.diff","patch_url":"https://github.com/databricks/spark-tfocs/pull/10.patch","issue_url":"https://api.github.com/repos/databricks/spark-tfocs/issues/10","number":10,"state":"open","locked":false,"title":"Add support for linear programming, using tfocs_scd.","user":{"login":"staple","id":307174,"avatar_url":"https://avatars.githubusercontent.com/u/307174?v=3","gravatar_id":"","url":"https://api.github.com/users/staple","html_url":"https://github.com/staple","followers_url":"https://api.github.com/users/staple/followers","following_url":"https://api.github.com/users/staple/following{/other_user}","gists_url":"https://api.github.com/users/staple/gists{/gist_id}","starred_url":"https://api.github.com/users/staple/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/staple/subscriptions","organizations_url":"https://api.github.com/users/staple/orgs","repos_url":"https://api.github.com/users/staple/repos","events_url":"https://api.github.com/users/staple/events{/privacy}","received_events_url":"https://api.github.com/users/staple/received_events","type":"User","site_admin":false},"body":"- Adds capabilities for monitoring dual vector and dual convergence to TFOCS.\r\n- Adds TFOCS_SCD, for solving smoothed conic dual problems by smoothing a prox capable function, with continuation support.\r\n- Adds linear programming support.","created_at":"2015-08-08T16:18:18Z","updated_at":"2015-08-26T05:10:56Z","closed_at":null,"merged_at":null,"merge_commit_sha":"31480da336f649f495252122bea7a81ec2473ab6","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/databricks/spark-tfocs/pulls/10/commits","review_comments_url":"https://api.github.com/repos/databricks/spark-tfocs/pulls/10/comments","review_comment_url":"https://api.github.com/repos/databricks/spark-tfocs/pulls/comments{/number}","comments_url":"https://api.github.com/repos/databricks/spark-tfocs/issues/10/comments","statuses_url":"https://api.github.com/repos/databricks/spark-tfocs/statuses/6d0efcf427a586a7f57d89bae3dcef2db243e660","head":{"label":"staple:lp","ref":"lp","sha":"6d0efcf427a586a7f57d89bae3dcef2db243e660","user":{"login":"staple","id":307174,"avatar_url":"https://avatars.githubusercontent.com/u/307174?v=3","gravatar_id":"","url":"https://api.github.com/users/staple","html_url":"https://github.com/staple","followers_url":"https://api.github.com/users/staple/followers","following_url":"https://api.github.com/users/staple/following{/other_user}","gists_url":"https://api.github.com/users/staple/gists{/gist_id}","starred_url":"https://api.github.com/users/staple/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/staple/subscriptions","organizations_url":"https://api.github.com/users/staple/orgs","repos_url":"https://api.github.com/users/staple/repos","events_url":"https://api.github.com/users/staple/events{/privacy}","received_events_url":"https://api.github.com/users/staple/received_events","type":"User","site_admin":false},"repo":{"id":39109608,"name":"spark-tfocs","full_name":"staple/spark-tfocs","owner":{"login":"staple","id":307174,"avatar_url":"https://avatars.githubusercontent.com/u/307174?v=3","gravatar_id":"","url":"https://api.github.com/users/staple","html_url":"https://github.com/staple","followers_url":"https://api.github.com/users/staple/followers","following_url":"https://api.github.com/users/staple/following{/other_user}","gists_url":"https://api.github.com/users/staple/gists{/gist_id}","starred_url":"https://api.github.com/users/staple/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/staple/subscriptions","organizations_url":"https://api.github.com/users/staple/orgs","repos_url":"https://api.github.com/users/staple/repos","events_url":"https://api.github.com/users/staple/events{/privacy}","received_events_url":"https://api.github.com/users/staple/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/staple/spark-tfocs","description":"A Spark port of TFOCS: Templates for First-Order Conic Solvers (cvxr.com/tfocs)","fork":true,"url":"https://api.github.com/repos/staple/spark-tfocs","forks_url":"https://api.github.com/repos/staple/spark-tfocs/forks","keys_url":"https://api.github.com/repos/staple/spark-tfocs/keys{/key_id}","collaborators_url":"https://api.github.com/repos/staple/spark-tfocs/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/staple/spark-tfocs/teams","hooks_url":"https://api.github.com/repos/staple/spark-tfocs/hooks","issue_events_url":"https://api.github.com/repos/staple/spark-tfocs/issues/events{/number}","events_url":"https://api.github.com/repos/staple/spark-tfocs/events","assignees_url":"https://api.github.com/repos/staple/spark-tfocs/assignees{/user}","branches_url":"https://api.github.com/repos/staple/spark-tfocs/branches{/branch}","tags_url":"https://api.github.com/repos/staple/spark-tfocs/tags","blobs_url":"https://api.github.com/repos/staple/spark-tfocs/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/staple/spark-tfocs/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/staple/spark-tfocs/git/refs{/sha}","trees_url":"https://api.github.com/repos/staple/spark-tfocs/git/trees{/sha}","statuses_url":"https://api.github.com/repos/staple/spark-tfocs/statuses/{sha}","languages_url":"https://api.github.com/repos/staple/spark-tfocs/languages","stargazers_url":"https://api.github.com/repos/staple/spark-tfocs/stargazers","contributors_url":"https://api.github.com/repos/staple/spark-tfocs/contributors","subscribers_url":"https://api.github.com/repos/staple/spark-tfocs/subscribers","subscription_url":"https://api.github.com/repos/staple/spark-tfocs/subscription","commits_url":"https://api.github.com/repos/staple/spark-tfocs/commits{/sha}","git_commits_url":"https://api.github.com/repos/staple/spark-tfocs/git/commits{/sha}","comments_url":"https://api.github.com/repos/staple/spark-tfocs/comments{/number}","issue_comment_url":"https://api.github.com/repos/staple/spark-tfocs/issues/comments{/number}","contents_url":"https://api.github.com/repos/staple/spark-tfocs/contents/{+path}","compare_url":"https://api.github.com/repos/staple/spark-tfocs/compare/{base}...{head}","merges_url":"https://api.github.com/repos/staple/spark-tfocs/merges","archive_url":"https://api.github.com/repos/staple/spark-tfocs/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/staple/spark-tfocs/downloads","issues_url":"https://api.github.com/repos/staple/spark-tfocs/issues{/number}","pulls_url":"https://api.github.com/repos/staple/spark-tfocs/pulls{/number}","milestones_url":"https://api.github.com/repos/staple/spark-tfocs/milestones{/number}","notifications_url":"https://api.github.com/repos/staple/spark-tfocs/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/staple/spark-tfocs/labels{/name}","releases_url":"https://api.github.com/repos/staple/spark-tfocs/releases{/id}","created_at":"2015-07-15T01:32:01Z","updated_at":"2015-07-15T01:36:51Z","pushed_at":"2015-08-26T05:08:12Z","git_url":"git://github.com/staple/spark-tfocs.git","ssh_url":"git@github.com:staple/spark-tfocs.git","clone_url":"https://github.com/staple/spark-tfocs.git","svn_url":"https://github.com/staple/spark-tfocs","homepage":"","size":290,"stargazers_count":0,"watchers_count":0,"language":"Scala","has_issues":false,"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":"databricks:master","ref":"master","sha":"7b0b8abea9443b6279e01b7127c4ab03baf33f49","user":{"login":"databricks","id":4998052,"avatar_url":"https://avatars.githubusercontent.com/u/4998052?v=3","gravatar_id":"","url":"https://api.github.com/users/databricks","html_url":"https://github.com/databricks","followers_url":"https://api.github.com/users/databricks/followers","following_url":"https://api.github.com/users/databricks/following{/other_user}","gists_url":"https://api.github.com/users/databricks/gists{/gist_id}","starred_url":"https://api.github.com/users/databricks/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/databricks/subscriptions","organizations_url":"https://api.github.com/users/databricks/orgs","repos_url":"https://api.github.com/users/databricks/repos","events_url":"https://api.github.com/users/databricks/events{/privacy}","received_events_url":"https://api.github.com/users/databricks/received_events","type":"Organization","site_admin":false},"repo":{"id":38891827,"name":"spark-tfocs","full_name":"databricks/spark-tfocs","owner":{"login":"databricks","id":4998052,"avatar_url":"https://avatars.githubusercontent.com/u/4998052?v=3","gravatar_id":"","url":"https://api.github.com/users/databricks","html_url":"https://github.com/databricks","followers_url":"https://api.github.com/users/databricks/followers","following_url":"https://api.github.com/users/databricks/following{/other_user}","gists_url":"https://api.github.com/users/databricks/gists{/gist_id}","starred_url":"https://api.github.com/users/databricks/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/databricks/subscriptions","organizations_url":"https://api.github.com/users/databricks/orgs","repos_url":"https://api.github.com/users/databricks/repos","events_url":"https://api.github.com/users/databricks/events{/privacy}","received_events_url":"https://api.github.com/users/databricks/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/databricks/spark-tfocs","description":"A Spark port of TFOCS: Templates for First-Order Conic Solvers (cvxr.com/tfocs)","fork":false,"url":"https://api.github.com/repos/databricks/spark-tfocs","forks_url":"https://api.github.com/repos/databricks/spark-tfocs/forks","keys_url":"https://api.github.com/repos/databricks/spark-tfocs/keys{/key_id}","collaborators_url":"https://api.github.com/repos/databricks/spark-tfocs/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/databricks/spark-tfocs/teams","hooks_url":"https://api.github.com/repos/databricks/spark-tfocs/hooks","issue_events_url":"https://api.github.com/repos/databricks/spark-tfocs/issues/events{/number}","events_url":"https://api.github.com/repos/databricks/spark-tfocs/events","assignees_url":"https://api.github.com/repos/databricks/spark-tfocs/assignees{/user}","branches_url":"https://api.github.com/repos/databricks/spark-tfocs/branches{/branch}","tags_url":"https://api.github.com/repos/databricks/spark-tfocs/tags","blobs_url":"https://api.github.com/repos/databricks/spark-tfocs/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/databricks/spark-tfocs/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/databricks/spark-tfocs/git/refs{/sha}","trees_url":"https://api.github.com/repos/databricks/spark-tfocs/git/trees{/sha}","statuses_url":"https://api.github.com/repos/databricks/spark-tfocs/statuses/{sha}","languages_url":"https://api.github.com/repos/databricks/spark-tfocs/languages","stargazers_url":"https://api.github.com/repos/databricks/spark-tfocs/stargazers","contributors_url":"https://api.github.com/repos/databricks/spark-tfocs/contributors","subscribers_url":"https://api.github.com/repos/databricks/spark-tfocs/subscribers","subscription_url":"https://api.github.com/repos/databricks/spark-tfocs/subscription","commits_url":"https://api.github.com/repos/databricks/spark-tfocs/commits{/sha}","git_commits_url":"https://api.github.com/repos/databricks/spark-tfocs/git/commits{/sha}","comments_url":"https://api.github.com/repos/databricks/spark-tfocs/comments{/number}","issue_comment_url":"https://api.github.com/repos/databricks/spark-tfocs/issues/comments{/number}","contents_url":"https://api.github.com/repos/databricks/spark-tfocs/contents/{+path}","compare_url":"https://api.github.com/repos/databricks/spark-tfocs/compare/{base}...{head}","merges_url":"https://api.github.com/repos/databricks/spark-tfocs/merges","archive_url":"https://api.github.com/repos/databricks/spark-tfocs/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/databricks/spark-tfocs/downloads","issues_url":"https://api.github.com/repos/databricks/spark-tfocs/issues{/number}","pulls_url":"https://api.github.com/repos/databricks/spark-tfocs/pulls{/number}","milestones_url":"https://api.github.com/repos/databricks/spark-tfocs/milestones{/number}","notifications_url":"https://api.github.com/repos/databricks/spark-tfocs/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/databricks/spark-tfocs/labels{/name}","releases_url":"https://api.github.com/repos/databricks/spark-tfocs/releases{/id}","created_at":"2015-07-10T16:57:01Z","updated_at":"2015-07-26T20:21:35Z","pushed_at":"2015-08-26T05:08:13Z","git_url":"git://github.com/databricks/spark-tfocs.git","ssh_url":"git@github.com:databricks/spark-tfocs.git","clone_url":"https://github.com/databricks/spark-tfocs.git","svn_url":"https://github.com/databricks/spark-tfocs","homepage":"","size":707,"stargazers_count":4,"watchers_count":4,"language":"Scala","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":3,"mirror_url":null,"open_issues_count":1,"forks":3,"open_issues":1,"watchers":4,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/databricks/spark-tfocs/pulls/10"},"html":{"href":"https://github.com/databricks/spark-tfocs/pull/10"},"issue":{"href":"https://api.github.com/repos/databricks/spark-tfocs/issues/10"},"comments":{"href":"https://api.github.com/repos/databricks/spark-tfocs/issues/10/comments"},"review_comments":{"href":"https://api.github.com/repos/databricks/spark-tfocs/pulls/10/comments"},"review_comment":{"href":"https://api.github.com/repos/databricks/spark-tfocs/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/databricks/spark-tfocs/pulls/10/commits"},"statuses":{"href":"https://api.github.com/repos/databricks/spark-tfocs/statuses/6d0efcf427a586a7f57d89bae3dcef2db243e660"}}}}