{"action":"created","comment":{"url":"https://api.github.com/repos/JuliaOpt/CPLEX.jl/pulls/comments/207795694","pull_request_review_id":143476963,"id":207795694,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIwNzc5NTY5NA==","diff_hunk":"@@ -0,0 +1,283 @@\n+export CplexOptimizer\n+\n+using LinQuadOptInterface\n+const LQOI = LinQuadOptInterface\n+const MOI  = LQOI.MOI\n+\n+const SUPPORTED_OBJECTIVES = [\n+    LQOI.Linear\n+]\n+\n+const SUPPORTED_CONSTRAINTS = [\n+    (LQOI.Linear, LQOI.EQ),\n+    (LQOI.Linear, LQOI.LE),\n+    (LQOI.Linear, LQOI.GE),\n+    (LQOI.SinVar, LQOI.EQ),\n+    (LQOI.SinVar, LQOI.LE),\n+    (LQOI.SinVar, LQOI.GE),\n+    (LQOI.SinVar, LQOI.IV),\n+    (LQOI.SinVar, MOI.ZeroOne),\n+    (LQOI.SinVar, MOI.Integer),\n+    (LQOI.VecVar, MOI.Nonnegatives),\n+    (LQOI.VecVar, MOI.Nonpositives),\n+    (LQOI.VecVar, MOI.Zeros),\n+    (LQOI.VecLin, MOI.Nonnegatives),\n+    (LQOI.VecLin, MOI.Nonpositives),\n+    (LQOI.VecLin, MOI.Zeros)\n+]\n+\n+mutable struct CplexOptimizer <: LQOI.LinQuadOptimizer\n+    LQOI.@LinQuadOptimizerBase    \n+    env::Env # Cplex environment\n+    CplexOptimizer(::Void) = new()\n+end\n+\n+function LQOI.LinearQuadraticModel(::Type{CplexOptimizer},env)\n+    env = Env()\n+    return Model(env::Env)\n+end\n+\n+function CplexOptimizer(;kwargs...)        \n+    env = Env()\n+    for (name,value) in kwargs\n+        set_param!(env, string(name), value)\n+    end\n+    m = CplexOptimizer(nothing)\n+    m.env = env\n+    return m\n+end\n+\n+LQOI.supported_constraints(s::CplexOptimizer) = SUPPORTED_CONSTRAINTS\n+LQOI.supported_objectives(s::CplexOptimizer)  = SUPPORTED_OBJECTIVES\n+\n+LQOI.backend_type(m::CplexOptimizer, ::MOI.EqualTo{Float64})     = Cchar('E')\n+LQOI.backend_type(m::CplexOptimizer, ::MOI.LessThan{Float64})    = Cchar('L')\n+LQOI.backend_type(m::CplexOptimizer, ::MOI.GreaterThan{Float64}) = Cchar('G')\n+\n+LQOI.backend_type(m::CplexOptimizer, ::MOI.Zeros)                = Cchar('B')\n+LQOI.backend_type(m::CplexOptimizer, ::MOI.Nonpositives)         = Cchar('L')\n+LQOI.backend_type(m::CplexOptimizer, ::MOI.Nonnegatives)         = Cchar('E')\n+\n+# TODO - improve single type\n+function LQOI.change_variable_bounds!(instance::CplexOptimizer, \n+        colvec::Vector{Int}, valvec::Vector{Float64}, sensevec::Vector{Cchar})\n+    \n+    chgbds(instance.inner, ivec(colvec .- 1), sensevec, valvec)\n+end\n+\n+function LQOI.get_variable_lowerbound(instance::CplexOptimizer, column::Int)\n+    get_varLB(instance.inner, Cint(column))[1]\n+end\n+\n+function LQOI.get_variable_upperbound(instance::CplexOptimizer, column::Int)\n+    get_varUB(instance.inner, Cint(column))[1]\n+end\n+\n+function LQOI.get_number_linear_constraints(instance::CplexOptimizer)\n+    num_constr(instance.inner)\n+end\n+\n+function LQOI.add_linear_constraints!(instance::CplexOptimizer,\n+        A::LQOI.CSRMatrix{Float64}, sense::Vector{Cchar}, rhs::Vector{Float64})\n+\n+    add_rows!(instance.inner, ivec(A.row_pointers), ivec(A.columns), \n+              A.coefficients, sense, rhs)\n+end\n+\n+function LQOI.get_rhs(instance::CplexOptimizer, row::Int)\n+    get_rhs(instance.inner, Cint(row))\n+end\n+\n+function LQOI.get_linear_constraint(instance::CplexOptimizer, row::Int)\n+    (nzcnt, rmatbeg, rmatind, rmatval) = \n+            get_rows(instance.inner, Cint(row), Cint(row))\n+    return rmatind[1:nzcnt] .+ 1, rmatval[1:nzcnt]\n+end\n+\n+function LQOI.change_matrix_coefficient!(instance::CplexOptimizer, \n+                                         row::Int, col::Int, coef::Float64)\n+                                         \n+    chg_coef!(instance.inner, Cint(row), Cint(col), coef)\n+end\n+\n+function LQOI.change_objective_coefficient!(instance::CplexOptimizer, col::Int, \n+                                            coef::Float64)\n+                                            \n+    set_obj!(instance.inner, [Cint(col)], [coef])\n+end\n+\n+function LQOI.change_rhs_coefficient!(instance::CplexOptimizer, row::Int, \n+                                      coef::Float64)\n+                                      \n+    chg_rhs(instance.inner, [Cint(row)], [coef])\n+end\n+\n+function LQOI.delete_linear_constraints!(instance::CplexOptimizer, \n+                                         first_row::Int, last_row::Int)\n+                                         \n+    del_rows!(instance.inner, Cint(first_row), Cint(last_row))\n+end\n+\n+function LQOI.change_variable_types!(instance::CplexOptimizer, \n+        columns::Vector{Int}, vtypes::Vector{Cchar})\n+    \n+    chg_ctype!(instance.inner, ivec(columns), vtypes)\n+end\n+\n+function LQOI.change_linear_constraint_sense!(instance::CplexOptimizer, \n+        rows::Vector{Int}, senses::Vector{Cchar})\n+                                              \n+    chg_sense!(ivec(rows), senses)\n+end\n+\n+function LQOI.set_linear_objective!(instance::CplexOptimizer, \n+        columns::Vector{Int}, coefficients::Vector{Float64})\n+    \n+    n = num_var(instance.inner)    \n+    all_coefs = zeros(Float64, n)    \n+    for (col, coef) in zip(columns, coefficients)\n+        all_coefs[col] = coef\n+    end \n+    set_obj!(instance.inner, all_coefs) \n+end\n+\n+function LQOI.change_objective_sense!(instance::CplexOptimizer, symbol)\n+    if symbol == :min\n+        set_sense!(instance.inner, :Min)\n+    else\n+        set_sense!(instance.inner, :Max)\n+    end  \n+end\n+\n+function LQOI.get_linear_objective!(instance::CplexOptimizer, x)\n+    get_obj(instance.inner, x)\n+end\n+\n+function LQOI.get_objectivesense(instance::CplexOptimizer)\n+    s = get_sense(instance.inner)\n+    if s == :Max\n+        return MOI.MaxSense\n+    else\n+        return MOI.MinSense\n+    end\n+end\n+\n+function LQOI.get_number_variables(instance::CplexOptimizer)  \n+    num_var(instance.inner)\n+end\n+\n+function LQOI.add_variables!(instance::CplexOptimizer, N::Int)\n+    add_vars!(instance.inner, zeros(Float64, N), fill(-Inf, N), fill(Inf, N))\n+end\n+\n+function LQOI.delete_variables!(instance::CplexOptimizer, \n+                                first_col::Int, last_col::Int)\n+    del_cols!(instance.inner, Cint(first_col), Cint(last_col))\n+end\n+\n+function LQOI.solve_mip_problem!(instance::CplexOptimizer)\n+    instance.inner.has_int = true\n+    LQOI.solve_linear_problem!(instance)\n+end\n+\n+function LQOI.solve_linear_problem!(instance::CplexOptimizer)  \n+    optimize!(instance.inner)\n+end\n+\n+function LQOI.get_termination_status(instance::CplexOptimizer)\n+    stat = get_status_code(instance.inner) \n+               \n+    if stat == 1 # CPX_STAT_OPTIMAL\n+        return MOI.Success\n+    elseif stat == 3 # CPX_STAT_INFEASIBLE\n+        return MOI.InfeasibleNoResult\n+    elseif stat == 4 # CPX_STAT_INForUNBD\n+        return MOI.InfeasibleOrUnbounded\n+    elseif stat == 2 # CPX_STAT_UNBOUNDED\n+        return MOI.UnboundedNoResult\n+    elseif stat in [12, 21, 22, 36] # CPX_STAT_*ABORT*_OBJ_LIM \n+        return MOI.ObjectiveLimit\n+    elseif stat in [10,34] # CPX_STAT_*ABORT_IT_LIM\n+        return MOI.IterationLimit\n+    elseif stat == 53 # CPX_STAT_CONFLICT_ABORT_NODE_LIM\n+        return MOI.NodeLimit \n+    elseif stat in [11, 25, 33, 39] # CPX_STAT_*ABORT*TIME_LIM\n+        return MOI.TimeLimit\n+    elseif stat == 5 # CPX_STAT_OPTIMAL_INFEAS\n+        return MOI.NumericalError\n+    \n+    # MIP STATUS\n+    elseif stat in [101, 102] # CPXMIP_OPTIMAL, CPXMIP_OPTIMAL_TOL\n+        return MOI.Success\n+    elseif stat == 103 # CPXMIP_INFEASIBLE\n+        return MOI.InfeasibleNoResult\n+    elseif stat == 119 # CPXMIP_INForUNBD\n+        return MOI.InfeasibleOrUnbounded\n+    elseif stat == 118 # CPXMIP_UNBOUNDED\n+        return MOI.UnboundedNoResult\n+    elseif stat == [105, 106] # CPXMIP_NODE_LIM*\n+        return MOI.NodeLimit \n+    elseif stat in [107, 108, 131, 132] # CPXMIP_*TIME_LIM*\n+        return MOI.TimeLimit               \n+    else        \n+        return MOI.OtherError\n+    end\n+end\n+\n+function LQOI.get_primal_status(instance::CplexOptimizer)\n+    stat = get_solution_info(instance.inner)[3]\n+    if stat == 1\n+        return MOI.FeasiblePoint\n+    else\n+        return MOI.UnknownResultStatus\n+    end\n+end\n+\n+function LQOI.get_dual_status(instance::CplexOptimizer)\n+    if instance.inner.has_int \n+        return MOI.UnknownResultStatus\n+    end\n+    stat = get_solution_info(instance.inner)[4]\n+    if stat == 1\n+        return MOI.FeasiblePoint\n+    else\n+        return MOI.UnknownResultStatus\n+    end\n+end\n+\n+function LQOI.get_variable_primal_solution!(instance::CplexOptimizer, result)\n+    fill_solution(instance.inner, result)\n+end\n+ \n+function LQOI.get_linear_primal_solution!(instance::CplexOptimizer, result)\n+    fill_constr_solution(instance.inner, result)\n+end\n+ \n+function LQOI.get_variable_dual_solution!(instance::CplexOptimizer, place)\n+    fill_reduced_costs(instance.inner, place)\n+end\n+\n+function LQOI.get_linear_dual_solution!(instance::CplexOptimizer, place)\n+    fill_constr_duals(instance.inner, place)\n+end\n+\n+function LQOI.get_objective_value(instance::CplexOptimizer)\n+    get_objval(instance.inner)","path":"src/MOIWrapper.jl","position":265,"original_position":265,"commit_id":"25280940ab9f56113c05b61b1757608fdcabc08e","original_commit_id":"25280940ab9f56113c05b61b1757608fdcabc08e","user":{"login":"odow","id":8177701,"node_id":"MDQ6VXNlcjgxNzc3MDE=","avatar_url":"https://avatars2.githubusercontent.com/u/8177701?v=4","gravatar_id":"","url":"https://api.github.com/users/odow","html_url":"https://github.com/odow","followers_url":"https://api.github.com/users/odow/followers","following_url":"https://api.github.com/users/odow/following{/other_user}","gists_url":"https://api.github.com/users/odow/gists{/gist_id}","starred_url":"https://api.github.com/users/odow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/odow/subscriptions","organizations_url":"https://api.github.com/users/odow/orgs","repos_url":"https://api.github.com/users/odow/repos","events_url":"https://api.github.com/users/odow/events{/privacy}","received_events_url":"https://api.github.com/users/odow/received_events","type":"User","site_admin":false},"body":"Style: all functions that explicitly return something should use `return`","created_at":"2018-08-06T07:29:22Z","updated_at":"2018-08-06T07:32:37Z","html_url":"https://github.com/JuliaOpt/CPLEX.jl/pull/181#discussion_r207795694","pull_request_url":"https://api.github.com/repos/JuliaOpt/CPLEX.jl/pulls/181","author_association":"MEMBER","_links":{"self":{"href":"https://api.github.com/repos/JuliaOpt/CPLEX.jl/pulls/comments/207795694"},"html":{"href":"https://github.com/JuliaOpt/CPLEX.jl/pull/181#discussion_r207795694"},"pull_request":{"href":"https://api.github.com/repos/JuliaOpt/CPLEX.jl/pulls/181"}}},"pull_request":{"url":"https://api.github.com/repos/JuliaOpt/CPLEX.jl/pulls/181","id":206255257,"node_id":"MDExOlB1bGxSZXF1ZXN0MjA2MjU1MjU3","html_url":"https://github.com/JuliaOpt/CPLEX.jl/pull/181","diff_url":"https://github.com/JuliaOpt/CPLEX.jl/pull/181.diff","patch_url":"https://github.com/JuliaOpt/CPLEX.jl/pull/181.patch","issue_url":"https://api.github.com/repos/JuliaOpt/CPLEX.jl/issues/181","number":181,"state":"open","locked":false,"title":"MOI/LQOI basic support for ILP","user":{"login":"IssamT","id":20793306,"node_id":"MDQ6VXNlcjIwNzkzMzA2","avatar_url":"https://avatars3.githubusercontent.com/u/20793306?v=4","gravatar_id":"","url":"https://api.github.com/users/IssamT","html_url":"https://github.com/IssamT","followers_url":"https://api.github.com/users/IssamT/followers","following_url":"https://api.github.com/users/IssamT/following{/other_user}","gists_url":"https://api.github.com/users/IssamT/gists{/gist_id}","starred_url":"https://api.github.com/users/IssamT/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/IssamT/subscriptions","organizations_url":"https://api.github.com/users/IssamT/orgs","repos_url":"https://api.github.com/users/IssamT/repos","events_url":"https://api.github.com/users/IssamT/events{/privacy}","received_events_url":"https://api.github.com/users/IssamT/received_events","type":"User","site_admin":false},"body":"","created_at":"2018-08-05T20:04:37Z","updated_at":"2018-08-06T07:32:37Z","closed_at":null,"merged_at":null,"merge_commit_sha":"b4a11b8560d390ed97b5d9fed841499736047fa9","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/JuliaOpt/CPLEX.jl/pulls/181/commits","review_comments_url":"https://api.github.com/repos/JuliaOpt/CPLEX.jl/pulls/181/comments","review_comment_url":"https://api.github.com/repos/JuliaOpt/CPLEX.jl/pulls/comments{/number}","comments_url":"https://api.github.com/repos/JuliaOpt/CPLEX.jl/issues/181/comments","statuses_url":"https://api.github.com/repos/JuliaOpt/CPLEX.jl/statuses/25280940ab9f56113c05b61b1757608fdcabc08e","head":{"label":"ResourceMind:moi_ilp_1","ref":"moi_ilp_1","sha":"25280940ab9f56113c05b61b1757608fdcabc08e","user":{"login":"ResourceMind","id":27341202,"node_id":"MDEyOk9yZ2FuaXphdGlvbjI3MzQxMjAy","avatar_url":"https://avatars0.githubusercontent.com/u/27341202?v=4","gravatar_id":"","url":"https://api.github.com/users/ResourceMind","html_url":"https://github.com/ResourceMind","followers_url":"https://api.github.com/users/ResourceMind/followers","following_url":"https://api.github.com/users/ResourceMind/following{/other_user}","gists_url":"https://api.github.com/users/ResourceMind/gists{/gist_id}","starred_url":"https://api.github.com/users/ResourceMind/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ResourceMind/subscriptions","organizations_url":"https://api.github.com/users/ResourceMind/orgs","repos_url":"https://api.github.com/users/ResourceMind/repos","events_url":"https://api.github.com/users/ResourceMind/events{/privacy}","received_events_url":"https://api.github.com/users/ResourceMind/received_events","type":"Organization","site_admin":false},"repo":{"id":143643186,"node_id":"MDEwOlJlcG9zaXRvcnkxNDM2NDMxODY=","name":"CPLEX.jl","full_name":"ResourceMind/CPLEX.jl","owner":{"login":"ResourceMind","id":27341202,"node_id":"MDEyOk9yZ2FuaXphdGlvbjI3MzQxMjAy","avatar_url":"https://avatars0.githubusercontent.com/u/27341202?v=4","gravatar_id":"","url":"https://api.github.com/users/ResourceMind","html_url":"https://github.com/ResourceMind","followers_url":"https://api.github.com/users/ResourceMind/followers","following_url":"https://api.github.com/users/ResourceMind/following{/other_user}","gists_url":"https://api.github.com/users/ResourceMind/gists{/gist_id}","starred_url":"https://api.github.com/users/ResourceMind/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ResourceMind/subscriptions","organizations_url":"https://api.github.com/users/ResourceMind/orgs","repos_url":"https://api.github.com/users/ResourceMind/repos","events_url":"https://api.github.com/users/ResourceMind/events{/privacy}","received_events_url":"https://api.github.com/users/ResourceMind/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/ResourceMind/CPLEX.jl","description":"Julia interface for the CPLEX optimization software","fork":true,"url":"https://api.github.com/repos/ResourceMind/CPLEX.jl","forks_url":"https://api.github.com/repos/ResourceMind/CPLEX.jl/forks","keys_url":"https://api.github.com/repos/ResourceMind/CPLEX.jl/keys{/key_id}","collaborators_url":"https://api.github.com/repos/ResourceMind/CPLEX.jl/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/ResourceMind/CPLEX.jl/teams","hooks_url":"https://api.github.com/repos/ResourceMind/CPLEX.jl/hooks","issue_events_url":"https://api.github.com/repos/ResourceMind/CPLEX.jl/issues/events{/number}","events_url":"https://api.github.com/repos/ResourceMind/CPLEX.jl/events","assignees_url":"https://api.github.com/repos/ResourceMind/CPLEX.jl/assignees{/user}","branches_url":"https://api.github.com/repos/ResourceMind/CPLEX.jl/branches{/branch}","tags_url":"https://api.github.com/repos/ResourceMind/CPLEX.jl/tags","blobs_url":"https://api.github.com/repos/ResourceMind/CPLEX.jl/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/ResourceMind/CPLEX.jl/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/ResourceMind/CPLEX.jl/git/refs{/sha}","trees_url":"https://api.github.com/repos/ResourceMind/CPLEX.jl/git/trees{/sha}","statuses_url":"https://api.github.com/repos/ResourceMind/CPLEX.jl/statuses/{sha}","languages_url":"https://api.github.com/repos/ResourceMind/CPLEX.jl/languages","stargazers_url":"https://api.github.com/repos/ResourceMind/CPLEX.jl/stargazers","contributors_url":"https://api.github.com/repos/ResourceMind/CPLEX.jl/contributors","subscribers_url":"https://api.github.com/repos/ResourceMind/CPLEX.jl/subscribers","subscription_url":"https://api.github.com/repos/ResourceMind/CPLEX.jl/subscription","commits_url":"https://api.github.com/repos/ResourceMind/CPLEX.jl/commits{/sha}","git_commits_url":"https://api.github.com/repos/ResourceMind/CPLEX.jl/git/commits{/sha}","comments_url":"https://api.github.com/repos/ResourceMind/CPLEX.jl/comments{/number}","issue_comment_url":"https://api.github.com/repos/ResourceMind/CPLEX.jl/issues/comments{/number}","contents_url":"https://api.github.com/repos/ResourceMind/CPLEX.jl/contents/{+path}","compare_url":"https://api.github.com/repos/ResourceMind/CPLEX.jl/compare/{base}...{head}","merges_url":"https://api.github.com/repos/ResourceMind/CPLEX.jl/merges","archive_url":"https://api.github.com/repos/ResourceMind/CPLEX.jl/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/ResourceMind/CPLEX.jl/downloads","issues_url":"https://api.github.com/repos/ResourceMind/CPLEX.jl/issues{/number}","pulls_url":"https://api.github.com/repos/ResourceMind/CPLEX.jl/pulls{/number}","milestones_url":"https://api.github.com/repos/ResourceMind/CPLEX.jl/milestones{/number}","notifications_url":"https://api.github.com/repos/ResourceMind/CPLEX.jl/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/ResourceMind/CPLEX.jl/labels{/name}","releases_url":"https://api.github.com/repos/ResourceMind/CPLEX.jl/releases{/id}","deployments_url":"https://api.github.com/repos/ResourceMind/CPLEX.jl/deployments","created_at":"2018-08-05T19:51:10Z","updated_at":"2018-08-05T19:51:11Z","pushed_at":"2018-08-05T20:03:24Z","git_url":"git://github.com/ResourceMind/CPLEX.jl.git","ssh_url":"git@github.com:ResourceMind/CPLEX.jl.git","clone_url":"https://github.com/ResourceMind/CPLEX.jl.git","svn_url":"https://github.com/ResourceMind/CPLEX.jl","homepage":null,"size":420,"stargazers_count":0,"watchers_count":0,"language":"Julia","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit","node_id":"MDc6TGljZW5zZTEz"},"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"JuliaOpt:master","ref":"master","sha":"ad35be73747ba144fc67a685d4f0caee780a8c1d","user":{"login":"JuliaOpt","id":5667382,"node_id":"MDEyOk9yZ2FuaXphdGlvbjU2NjczODI=","avatar_url":"https://avatars1.githubusercontent.com/u/5667382?v=4","gravatar_id":"","url":"https://api.github.com/users/JuliaOpt","html_url":"https://github.com/JuliaOpt","followers_url":"https://api.github.com/users/JuliaOpt/followers","following_url":"https://api.github.com/users/JuliaOpt/following{/other_user}","gists_url":"https://api.github.com/users/JuliaOpt/gists{/gist_id}","starred_url":"https://api.github.com/users/JuliaOpt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/JuliaOpt/subscriptions","organizations_url":"https://api.github.com/users/JuliaOpt/orgs","repos_url":"https://api.github.com/users/JuliaOpt/repos","events_url":"https://api.github.com/users/JuliaOpt/events{/privacy}","received_events_url":"https://api.github.com/users/JuliaOpt/received_events","type":"Organization","site_admin":false},"repo":{"id":13529107,"node_id":"MDEwOlJlcG9zaXRvcnkxMzUyOTEwNw==","name":"CPLEX.jl","full_name":"JuliaOpt/CPLEX.jl","owner":{"login":"JuliaOpt","id":5667382,"node_id":"MDEyOk9yZ2FuaXphdGlvbjU2NjczODI=","avatar_url":"https://avatars1.githubusercontent.com/u/5667382?v=4","gravatar_id":"","url":"https://api.github.com/users/JuliaOpt","html_url":"https://github.com/JuliaOpt","followers_url":"https://api.github.com/users/JuliaOpt/followers","following_url":"https://api.github.com/users/JuliaOpt/following{/other_user}","gists_url":"https://api.github.com/users/JuliaOpt/gists{/gist_id}","starred_url":"https://api.github.com/users/JuliaOpt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/JuliaOpt/subscriptions","organizations_url":"https://api.github.com/users/JuliaOpt/orgs","repos_url":"https://api.github.com/users/JuliaOpt/repos","events_url":"https://api.github.com/users/JuliaOpt/events{/privacy}","received_events_url":"https://api.github.com/users/JuliaOpt/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/JuliaOpt/CPLEX.jl","description":"Julia interface for the CPLEX optimization software","fork":false,"url":"https://api.github.com/repos/JuliaOpt/CPLEX.jl","forks_url":"https://api.github.com/repos/JuliaOpt/CPLEX.jl/forks","keys_url":"https://api.github.com/repos/JuliaOpt/CPLEX.jl/keys{/key_id}","collaborators_url":"https://api.github.com/repos/JuliaOpt/CPLEX.jl/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/JuliaOpt/CPLEX.jl/teams","hooks_url":"https://api.github.com/repos/JuliaOpt/CPLEX.jl/hooks","issue_events_url":"https://api.github.com/repos/JuliaOpt/CPLEX.jl/issues/events{/number}","events_url":"https://api.github.com/repos/JuliaOpt/CPLEX.jl/events","assignees_url":"https://api.github.com/repos/JuliaOpt/CPLEX.jl/assignees{/user}","branches_url":"https://api.github.com/repos/JuliaOpt/CPLEX.jl/branches{/branch}","tags_url":"https://api.github.com/repos/JuliaOpt/CPLEX.jl/tags","blobs_url":"https://api.github.com/repos/JuliaOpt/CPLEX.jl/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/JuliaOpt/CPLEX.jl/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/JuliaOpt/CPLEX.jl/git/refs{/sha}","trees_url":"https://api.github.com/repos/JuliaOpt/CPLEX.jl/git/trees{/sha}","statuses_url":"https://api.github.com/repos/JuliaOpt/CPLEX.jl/statuses/{sha}","languages_url":"https://api.github.com/repos/JuliaOpt/CPLEX.jl/languages","stargazers_url":"https://api.github.com/repos/JuliaOpt/CPLEX.jl/stargazers","contributors_url":"https://api.github.com/repos/JuliaOpt/CPLEX.jl/contributors","subscribers_url":"https://api.github.com/repos/JuliaOpt/CPLEX.jl/subscribers","subscription_url":"https://api.github.com/repos/JuliaOpt/CPLEX.jl/subscription","commits_url":"https://api.github.com/repos/JuliaOpt/CPLEX.jl/commits{/sha}","git_commits_url":"https://api.github.com/repos/JuliaOpt/CPLEX.jl/git/commits{/sha}","comments_url":"https://api.github.com/repos/JuliaOpt/CPLEX.jl/comments{/number}","issue_comment_url":"https://api.github.com/repos/JuliaOpt/CPLEX.jl/issues/comments{/number}","contents_url":"https://api.github.com/repos/JuliaOpt/CPLEX.jl/contents/{+path}","compare_url":"https://api.github.com/repos/JuliaOpt/CPLEX.jl/compare/{base}...{head}","merges_url":"https://api.github.com/repos/JuliaOpt/CPLEX.jl/merges","archive_url":"https://api.github.com/repos/JuliaOpt/CPLEX.jl/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/JuliaOpt/CPLEX.jl/downloads","issues_url":"https://api.github.com/repos/JuliaOpt/CPLEX.jl/issues{/number}","pulls_url":"https://api.github.com/repos/JuliaOpt/CPLEX.jl/pulls{/number}","milestones_url":"https://api.github.com/repos/JuliaOpt/CPLEX.jl/milestones{/number}","notifications_url":"https://api.github.com/repos/JuliaOpt/CPLEX.jl/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/JuliaOpt/CPLEX.jl/labels{/name}","releases_url":"https://api.github.com/repos/JuliaOpt/CPLEX.jl/releases{/id}","deployments_url":"https://api.github.com/repos/JuliaOpt/CPLEX.jl/deployments","created_at":"2013-10-12T21:13:03Z","updated_at":"2018-08-05T07:44:38Z","pushed_at":"2018-08-05T20:04:37Z","git_url":"git://github.com/JuliaOpt/CPLEX.jl.git","ssh_url":"git@github.com:JuliaOpt/CPLEX.jl.git","clone_url":"https://github.com/JuliaOpt/CPLEX.jl.git","svn_url":"https://github.com/JuliaOpt/CPLEX.jl","homepage":null,"size":415,"stargazers_count":25,"watchers_count":25,"language":"Julia","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":37,"mirror_url":null,"archived":false,"open_issues_count":27,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit","node_id":"MDc6TGljZW5zZTEz"},"forks":37,"open_issues":27,"watchers":25,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/JuliaOpt/CPLEX.jl/pulls/181"},"html":{"href":"https://github.com/JuliaOpt/CPLEX.jl/pull/181"},"issue":{"href":"https://api.github.com/repos/JuliaOpt/CPLEX.jl/issues/181"},"comments":{"href":"https://api.github.com/repos/JuliaOpt/CPLEX.jl/issues/181/comments"},"review_comments":{"href":"https://api.github.com/repos/JuliaOpt/CPLEX.jl/pulls/181/comments"},"review_comment":{"href":"https://api.github.com/repos/JuliaOpt/CPLEX.jl/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/JuliaOpt/CPLEX.jl/pulls/181/commits"},"statuses":{"href":"https://api.github.com/repos/JuliaOpt/CPLEX.jl/statuses/25280940ab9f56113c05b61b1757608fdcabc08e"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"odow"}}