{"action":"created","comment":{"url":"https://api.github.com/repos/JuliaIntervals/IntervalRootFinding.jl/pulls/comments/203004071","pull_request_review_id":137807080,"id":203004071,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIwMzAwNDA3MQ==","diff_hunk":"@@ -0,0 +1,134 @@\n+import Base: start, next, done, copy, eltype, iteratorsize\n+\n+export RootSearch, SearchStrategy\n+export BreadthFirstSearch, DepthFirstSearch\n+export start, next, done, copy, step!, eltype, iteratorsize\n+\n+\"\"\"\n+    SearchStrategy{CON}(store!, retrieve!)\n+\n+Type describing the strategy followed to chose the order in which intervals are processed during a `RootSearch`, using a container of type `CON` to store\n+intervals.\n+\n+The container type `CON` must support the syntax `CON{EL}()` to create an empty\n+container for elements of type `EL`.\n+\n+# Fields:\n+    - `store!(container, element)`: add `element` to `container`\n+    - `retrieve!(container)`: return the next element to be processed and remove\n+        it from `container`\n+\"\"\"\n+struct SearchStrategy{CON}\n+    store!::Function\n+    retrieve!::Function\n+end\n+\n+SearchStrategy(CON::Type, store!::Function, retrieve!::Function) = SearchStrategy{CON}(store!, retrieve!)\n+\n+const BreadthFirstSearch = SearchStrategy{Vector}(push!, shift!)\n+const DepthFirstSearch = SearchStrategy{Vector}(push!, pop!)\n+\n+\"\"\"\n+    RootSearch{R <: Union{Interval,IntervalBox}, C <: Contractor, CON, T <: Real}\n+\n+Type implementing the `Base.Iterator` interface to the branch and prune routine.\n+Returns the `RootSearchState` at each iteration. Note: Each iteration mutates\n+the `RootSearchState`. Use `copy(state::RootSearchState)` to create an\n+independent instance if necessary.\n+\n+# Fields:\n+    - `region`: Region in which zeros are searched\n+    - `contractor`: Contractor used to determine the status of a region\n+    - `strategy`: Strategy determining the order in which regions are processed\n+        and the type of container used to store them\n+    - `tolerance`: Absolute tolerance of the search\n+\"\"\"\n+struct RootSearch{R <: Union{Interval,IntervalBox}, C <: Contractor, CON, T <: Real}\n+    region::R\n+    contractor::C\n+    strategy::SearchStrategy{CON}\n+    tolerance::T\n+end\n+\n+eltype(::Type{RS}) where {R, C, T, CON, RS <: RootSearch{R, C, CON, T}} = RootSearchState{CON{R}, CON{Root{R}}}\n+iteratorsize(::Type{RS}) where {RS <: RootSearch} = Base.SizeUnknown()\n+\n+\"\"\"\n+    RootSearchState{V, VR}\n+\n+State type for a `RootSearch` iterator.\n+\n+The type of the containers used is determinde by the `SearchStrategy` used by\n+the `RootSearch`.\n+\"\"\"\n+struct RootSearchState{V, VR}\n+    working::V  # Should be a container of the form  CON{T}\n+    outputs::VR  # Should ba a container of root of the form CON{Root{T}}\n+end\n+\n+function RootSearchState(rs::RootSearch)\n+    return RootSearchState(rs.region, rs.strategy)\n+end\n+\n+function RootSearchState(region::R, strat::SearchStrategy{CON}) where {R <: Union{Interval,IntervalBox}, CON}\n+    working = CON{R}()\n+    outputs = CON{Root{R}}()\n+    strat.store!(working, region)\n+    return RootSearchState(working, outputs)\n+end\n+\n+# Currently never reached\n+function RootSearchState(region::T) where {T<:Union{Interval,IntervalBox}}\n+    working = [region]\n+    outputs = Root{T}[]\n+\n+    sizehint!(working, 1000)\n+    sizehint!(outputs, 100)\n+\n+    RootSearchState(working, outputs)\n+end\n+\n+\n+\"\"\"\n+    copy(state::RootSearchState)\n+\n+Return an independant copy of `state`. The underlying container type used to\n+store regions must support the `deepcopy` function.\n+\"\"\"\n+copy(state::RootSearchState) =\n+    RootSearchState(deepcopy(state.working), deepcopy(state.outputs))\n+\n+\n+function start(iter::RootSearch{R, C, CON, T}) where {R, C, CON, T}\n+    state = RootSearchState(iter)\n+    return state\n+end\n+\n+\"\"\"\n+    step!(state::RootSearchState, contractor, tolerance)\n+\n+Progress `state` by treating one of its `working` regions. Note: `state.working`\n+is always modified. If a root is found, it is added to `state.outputs`.\n+\"\"\"\n+function step!(state::RootSearchState, contractor, searchstrat, tolerance)\n+    X = searchstrat.retrieve!(state.working)","path":"src/rootsearch_iterator.jl","position":114,"original_position":114,"commit_id":"5fccaac14bedad3da9791a931b338bd5f9dce00f","original_commit_id":"5fccaac14bedad3da9791a931b338bd5f9dce00f","user":{"login":"gwater","id":123790,"node_id":"MDQ6VXNlcjEyMzc5MA==","avatar_url":"https://avatars2.githubusercontent.com/u/123790?v=4","gravatar_id":"","url":"https://api.github.com/users/gwater","html_url":"https://github.com/gwater","followers_url":"https://api.github.com/users/gwater/followers","following_url":"https://api.github.com/users/gwater/following{/other_user}","gists_url":"https://api.github.com/users/gwater/gists{/gist_id}","starred_url":"https://api.github.com/users/gwater/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/gwater/subscriptions","organizations_url":"https://api.github.com/users/gwater/orgs","repos_url":"https://api.github.com/users/gwater/repos","events_url":"https://api.github.com/users/gwater/events{/privacy}","received_events_url":"https://api.github.com/users/gwater/received_events","type":"User","site_admin":false},"body":"This line introduces a type instability because `julia` cannot infer the return type of `retrieve!()` for some reason. Three options:\r\n* put the remaining code into a separate function which is then fully inferred\r\n* ignore the issue for now because the heavy lifting is done in `contractor()` which should be fully inferrible\r\n* somehow fix type inferrence for `retrieve!()` (any ideas?)","created_at":"2018-07-17T12:40:27Z","updated_at":"2018-07-17T12:40:28Z","html_url":"https://github.com/JuliaIntervals/IntervalRootFinding.jl/pull/72#discussion_r203004071","pull_request_url":"https://api.github.com/repos/JuliaIntervals/IntervalRootFinding.jl/pulls/72","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/JuliaIntervals/IntervalRootFinding.jl/pulls/comments/203004071"},"html":{"href":"https://github.com/JuliaIntervals/IntervalRootFinding.jl/pull/72#discussion_r203004071"},"pull_request":{"href":"https://api.github.com/repos/JuliaIntervals/IntervalRootFinding.jl/pulls/72"}}},"pull_request":{"url":"https://api.github.com/repos/JuliaIntervals/IntervalRootFinding.jl/pulls/72","id":191604508,"node_id":"MDExOlB1bGxSZXF1ZXN0MTkxNjA0NTA4","html_url":"https://github.com/JuliaIntervals/IntervalRootFinding.jl/pull/72","diff_url":"https://github.com/JuliaIntervals/IntervalRootFinding.jl/pull/72.diff","patch_url":"https://github.com/JuliaIntervals/IntervalRootFinding.jl/pull/72.patch","issue_url":"https://api.github.com/repos/JuliaIntervals/IntervalRootFinding.jl/issues/72","number":72,"state":"open","locked":false,"title":"Allow control over the way the intervals are selected to be processed","user":{"login":"Kolaru","id":17861033,"node_id":"MDQ6VXNlcjE3ODYxMDMz","avatar_url":"https://avatars2.githubusercontent.com/u/17861033?v=4","gravatar_id":"","url":"https://api.github.com/users/Kolaru","html_url":"https://github.com/Kolaru","followers_url":"https://api.github.com/users/Kolaru/followers","following_url":"https://api.github.com/users/Kolaru/following{/other_user}","gists_url":"https://api.github.com/users/Kolaru/gists{/gist_id}","starred_url":"https://api.github.com/users/Kolaru/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Kolaru/subscriptions","organizations_url":"https://api.github.com/users/Kolaru/orgs","repos_url":"https://api.github.com/users/Kolaru/repos","events_url":"https://api.github.com/users/Kolaru/events{/privacy}","received_events_url":"https://api.github.com/users/Kolaru/received_events","type":"User","site_admin":false},"body":"This PR introduces the `SearchStrategy` type that store the methods used to store and retrieve the intervals in `roots` and modifies the `RootSearchState` type to allow for any type of containers. This should in principle allow to have any strategy and thus lay the foundation of what is needed to fix #22 .\r\n\r\nHere is a small working example using a `Deque` to implement a bread-first strategy:\r\n\r\n```julia\r\nusing ValidatedNumerics\r\nusing DataStructures\r\n\r\nimport IntervalRootFinding: SearchStrategy, RootSearchState\r\n\r\nf(x) = x^2 - 2\r\nregion = -4..4\r\ncontractor = Newton(f, x -> ForwardDiff.derivative(f, x))\r\ntol = 1e-3\r\nR = typeof(region)\r\n\r\nstrat = SearchStrategy(push!, shift!)\r\nworking = Deque{R}() \r\npush!(working, region)\r\noutputs = Deque{Root{R}}()\r\n\r\nrss = RootSearchState(working, outputs)\r\nrsearch = RootSearch(rss, contractor, strat, tol)\r\n\r\nfor state in rsearch end\r\n\r\nprintln(rsearch.state.outputs)\r\n```\r\n\r\nOne problem is that due to the current type system (it will change in 0.7 if I get it correctly) it is not easy to write something like\r\n\r\n```julia\r\nstruct RootSearchState{CONTAINER, T}\r\n    working::CONTAINER{T}\r\n    outputs::CONTAINER{Root{T}}\r\nend\r\n```\r\n\r\nFor now the `RootSearchState` is therefore more general than needed and no check is performed to see if the two fields are compatible.\r\n\r\nAnother problem is that the syntax is yet very verbose. One of the reason for that is that the `outputs` set must be provided. In principle, its type can be inferred from the type of the `working` set, however `DataStructures` do not provide a nice way of doing as far as I know (`Base` provides the `similar` function which does exactly that). I do not know what is the best strategy for us, requesting both fields or implementing the `similar` function (or something similar... ^^') for supported container types.\r\n\r\nI post this here as a work in progress as I would appreciate feedback and be sure that we can agree on this design before going further to implement what is missing:\r\n  - Cleaner syntax\r\n  - Several default strategies\r\n  - Integration with the `roots` function\r\n  - Examples\r\n  - Tests","created_at":"2018-05-30T23:08:18Z","updated_at":"2018-07-17T12:40:28Z","closed_at":null,"merged_at":null,"merge_commit_sha":"f43569e2b1f1cab91eb388245c50489f90c86860","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/JuliaIntervals/IntervalRootFinding.jl/pulls/72/commits","review_comments_url":"https://api.github.com/repos/JuliaIntervals/IntervalRootFinding.jl/pulls/72/comments","review_comment_url":"https://api.github.com/repos/JuliaIntervals/IntervalRootFinding.jl/pulls/comments{/number}","comments_url":"https://api.github.com/repos/JuliaIntervals/IntervalRootFinding.jl/issues/72/comments","statuses_url":"https://api.github.com/repos/JuliaIntervals/IntervalRootFinding.jl/statuses/5fccaac14bedad3da9791a931b338bd5f9dce00f","head":{"label":"Kolaru:simple_custom_strat","ref":"simple_custom_strat","sha":"5fccaac14bedad3da9791a931b338bd5f9dce00f","user":{"login":"Kolaru","id":17861033,"node_id":"MDQ6VXNlcjE3ODYxMDMz","avatar_url":"https://avatars2.githubusercontent.com/u/17861033?v=4","gravatar_id":"","url":"https://api.github.com/users/Kolaru","html_url":"https://github.com/Kolaru","followers_url":"https://api.github.com/users/Kolaru/followers","following_url":"https://api.github.com/users/Kolaru/following{/other_user}","gists_url":"https://api.github.com/users/Kolaru/gists{/gist_id}","starred_url":"https://api.github.com/users/Kolaru/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Kolaru/subscriptions","organizations_url":"https://api.github.com/users/Kolaru/orgs","repos_url":"https://api.github.com/users/Kolaru/repos","events_url":"https://api.github.com/users/Kolaru/events{/privacy}","received_events_url":"https://api.github.com/users/Kolaru/received_events","type":"User","site_admin":false},"repo":{"id":129175367,"node_id":"MDEwOlJlcG9zaXRvcnkxMjkxNzUzNjc=","name":"IntervalRootFinding.jl","full_name":"Kolaru/IntervalRootFinding.jl","owner":{"login":"Kolaru","id":17861033,"node_id":"MDQ6VXNlcjE3ODYxMDMz","avatar_url":"https://avatars2.githubusercontent.com/u/17861033?v=4","gravatar_id":"","url":"https://api.github.com/users/Kolaru","html_url":"https://github.com/Kolaru","followers_url":"https://api.github.com/users/Kolaru/followers","following_url":"https://api.github.com/users/Kolaru/following{/other_user}","gists_url":"https://api.github.com/users/Kolaru/gists{/gist_id}","starred_url":"https://api.github.com/users/Kolaru/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Kolaru/subscriptions","organizations_url":"https://api.github.com/users/Kolaru/orgs","repos_url":"https://api.github.com/users/Kolaru/repos","events_url":"https://api.github.com/users/Kolaru/events{/privacy}","received_events_url":"https://api.github.com/users/Kolaru/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/Kolaru/IntervalRootFinding.jl","description":"Find all roots of a function in a guaranteed way with Julia","fork":true,"url":"https://api.github.com/repos/Kolaru/IntervalRootFinding.jl","forks_url":"https://api.github.com/repos/Kolaru/IntervalRootFinding.jl/forks","keys_url":"https://api.github.com/repos/Kolaru/IntervalRootFinding.jl/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Kolaru/IntervalRootFinding.jl/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Kolaru/IntervalRootFinding.jl/teams","hooks_url":"https://api.github.com/repos/Kolaru/IntervalRootFinding.jl/hooks","issue_events_url":"https://api.github.com/repos/Kolaru/IntervalRootFinding.jl/issues/events{/number}","events_url":"https://api.github.com/repos/Kolaru/IntervalRootFinding.jl/events","assignees_url":"https://api.github.com/repos/Kolaru/IntervalRootFinding.jl/assignees{/user}","branches_url":"https://api.github.com/repos/Kolaru/IntervalRootFinding.jl/branches{/branch}","tags_url":"https://api.github.com/repos/Kolaru/IntervalRootFinding.jl/tags","blobs_url":"https://api.github.com/repos/Kolaru/IntervalRootFinding.jl/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Kolaru/IntervalRootFinding.jl/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Kolaru/IntervalRootFinding.jl/git/refs{/sha}","trees_url":"https://api.github.com/repos/Kolaru/IntervalRootFinding.jl/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Kolaru/IntervalRootFinding.jl/statuses/{sha}","languages_url":"https://api.github.com/repos/Kolaru/IntervalRootFinding.jl/languages","stargazers_url":"https://api.github.com/repos/Kolaru/IntervalRootFinding.jl/stargazers","contributors_url":"https://api.github.com/repos/Kolaru/IntervalRootFinding.jl/contributors","subscribers_url":"https://api.github.com/repos/Kolaru/IntervalRootFinding.jl/subscribers","subscription_url":"https://api.github.com/repos/Kolaru/IntervalRootFinding.jl/subscription","commits_url":"https://api.github.com/repos/Kolaru/IntervalRootFinding.jl/commits{/sha}","git_commits_url":"https://api.github.com/repos/Kolaru/IntervalRootFinding.jl/git/commits{/sha}","comments_url":"https://api.github.com/repos/Kolaru/IntervalRootFinding.jl/comments{/number}","issue_comment_url":"https://api.github.com/repos/Kolaru/IntervalRootFinding.jl/issues/comments{/number}","contents_url":"https://api.github.com/repos/Kolaru/IntervalRootFinding.jl/contents/{+path}","compare_url":"https://api.github.com/repos/Kolaru/IntervalRootFinding.jl/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Kolaru/IntervalRootFinding.jl/merges","archive_url":"https://api.github.com/repos/Kolaru/IntervalRootFinding.jl/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Kolaru/IntervalRootFinding.jl/downloads","issues_url":"https://api.github.com/repos/Kolaru/IntervalRootFinding.jl/issues{/number}","pulls_url":"https://api.github.com/repos/Kolaru/IntervalRootFinding.jl/pulls{/number}","milestones_url":"https://api.github.com/repos/Kolaru/IntervalRootFinding.jl/milestones{/number}","notifications_url":"https://api.github.com/repos/Kolaru/IntervalRootFinding.jl/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Kolaru/IntervalRootFinding.jl/labels{/name}","releases_url":"https://api.github.com/repos/Kolaru/IntervalRootFinding.jl/releases{/id}","deployments_url":"https://api.github.com/repos/Kolaru/IntervalRootFinding.jl/deployments","created_at":"2018-04-12T01:31:27Z","updated_at":"2018-04-12T01:31:29Z","pushed_at":"2018-07-12T12:38:01Z","git_url":"git://github.com/Kolaru/IntervalRootFinding.jl.git","ssh_url":"git@github.com:Kolaru/IntervalRootFinding.jl.git","clone_url":"https://github.com/Kolaru/IntervalRootFinding.jl.git","svn_url":"https://github.com/Kolaru/IntervalRootFinding.jl","homepage":"","size":732,"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":"other","name":"Other","spdx_id":null,"url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"JuliaIntervals:master","ref":"master","sha":"25ebe4c63ae693a49b8eba42560f4f96d8cc9127","user":{"login":"JuliaIntervals","id":26843058,"node_id":"MDEyOk9yZ2FuaXphdGlvbjI2ODQzMDU4","avatar_url":"https://avatars1.githubusercontent.com/u/26843058?v=4","gravatar_id":"","url":"https://api.github.com/users/JuliaIntervals","html_url":"https://github.com/JuliaIntervals","followers_url":"https://api.github.com/users/JuliaIntervals/followers","following_url":"https://api.github.com/users/JuliaIntervals/following{/other_user}","gists_url":"https://api.github.com/users/JuliaIntervals/gists{/gist_id}","starred_url":"https://api.github.com/users/JuliaIntervals/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/JuliaIntervals/subscriptions","organizations_url":"https://api.github.com/users/JuliaIntervals/orgs","repos_url":"https://api.github.com/users/JuliaIntervals/repos","events_url":"https://api.github.com/users/JuliaIntervals/events{/privacy}","received_events_url":"https://api.github.com/users/JuliaIntervals/received_events","type":"Organization","site_admin":false},"repo":{"id":87006091,"node_id":"MDEwOlJlcG9zaXRvcnk4NzAwNjA5MQ==","name":"IntervalRootFinding.jl","full_name":"JuliaIntervals/IntervalRootFinding.jl","owner":{"login":"JuliaIntervals","id":26843058,"node_id":"MDEyOk9yZ2FuaXphdGlvbjI2ODQzMDU4","avatar_url":"https://avatars1.githubusercontent.com/u/26843058?v=4","gravatar_id":"","url":"https://api.github.com/users/JuliaIntervals","html_url":"https://github.com/JuliaIntervals","followers_url":"https://api.github.com/users/JuliaIntervals/followers","following_url":"https://api.github.com/users/JuliaIntervals/following{/other_user}","gists_url":"https://api.github.com/users/JuliaIntervals/gists{/gist_id}","starred_url":"https://api.github.com/users/JuliaIntervals/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/JuliaIntervals/subscriptions","organizations_url":"https://api.github.com/users/JuliaIntervals/orgs","repos_url":"https://api.github.com/users/JuliaIntervals/repos","events_url":"https://api.github.com/users/JuliaIntervals/events{/privacy}","received_events_url":"https://api.github.com/users/JuliaIntervals/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/JuliaIntervals/IntervalRootFinding.jl","description":"Find all roots of a function in a guaranteed way with Julia","fork":false,"url":"https://api.github.com/repos/JuliaIntervals/IntervalRootFinding.jl","forks_url":"https://api.github.com/repos/JuliaIntervals/IntervalRootFinding.jl/forks","keys_url":"https://api.github.com/repos/JuliaIntervals/IntervalRootFinding.jl/keys{/key_id}","collaborators_url":"https://api.github.com/repos/JuliaIntervals/IntervalRootFinding.jl/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/JuliaIntervals/IntervalRootFinding.jl/teams","hooks_url":"https://api.github.com/repos/JuliaIntervals/IntervalRootFinding.jl/hooks","issue_events_url":"https://api.github.com/repos/JuliaIntervals/IntervalRootFinding.jl/issues/events{/number}","events_url":"https://api.github.com/repos/JuliaIntervals/IntervalRootFinding.jl/events","assignees_url":"https://api.github.com/repos/JuliaIntervals/IntervalRootFinding.jl/assignees{/user}","branches_url":"https://api.github.com/repos/JuliaIntervals/IntervalRootFinding.jl/branches{/branch}","tags_url":"https://api.github.com/repos/JuliaIntervals/IntervalRootFinding.jl/tags","blobs_url":"https://api.github.com/repos/JuliaIntervals/IntervalRootFinding.jl/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/JuliaIntervals/IntervalRootFinding.jl/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/JuliaIntervals/IntervalRootFinding.jl/git/refs{/sha}","trees_url":"https://api.github.com/repos/JuliaIntervals/IntervalRootFinding.jl/git/trees{/sha}","statuses_url":"https://api.github.com/repos/JuliaIntervals/IntervalRootFinding.jl/statuses/{sha}","languages_url":"https://api.github.com/repos/JuliaIntervals/IntervalRootFinding.jl/languages","stargazers_url":"https://api.github.com/repos/JuliaIntervals/IntervalRootFinding.jl/stargazers","contributors_url":"https://api.github.com/repos/JuliaIntervals/IntervalRootFinding.jl/contributors","subscribers_url":"https://api.github.com/repos/JuliaIntervals/IntervalRootFinding.jl/subscribers","subscription_url":"https://api.github.com/repos/JuliaIntervals/IntervalRootFinding.jl/subscription","commits_url":"https://api.github.com/repos/JuliaIntervals/IntervalRootFinding.jl/commits{/sha}","git_commits_url":"https://api.github.com/repos/JuliaIntervals/IntervalRootFinding.jl/git/commits{/sha}","comments_url":"https://api.github.com/repos/JuliaIntervals/IntervalRootFinding.jl/comments{/number}","issue_comment_url":"https://api.github.com/repos/JuliaIntervals/IntervalRootFinding.jl/issues/comments{/number}","contents_url":"https://api.github.com/repos/JuliaIntervals/IntervalRootFinding.jl/contents/{+path}","compare_url":"https://api.github.com/repos/JuliaIntervals/IntervalRootFinding.jl/compare/{base}...{head}","merges_url":"https://api.github.com/repos/JuliaIntervals/IntervalRootFinding.jl/merges","archive_url":"https://api.github.com/repos/JuliaIntervals/IntervalRootFinding.jl/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/JuliaIntervals/IntervalRootFinding.jl/downloads","issues_url":"https://api.github.com/repos/JuliaIntervals/IntervalRootFinding.jl/issues{/number}","pulls_url":"https://api.github.com/repos/JuliaIntervals/IntervalRootFinding.jl/pulls{/number}","milestones_url":"https://api.github.com/repos/JuliaIntervals/IntervalRootFinding.jl/milestones{/number}","notifications_url":"https://api.github.com/repos/JuliaIntervals/IntervalRootFinding.jl/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/JuliaIntervals/IntervalRootFinding.jl/labels{/name}","releases_url":"https://api.github.com/repos/JuliaIntervals/IntervalRootFinding.jl/releases{/id}","deployments_url":"https://api.github.com/repos/JuliaIntervals/IntervalRootFinding.jl/deployments","created_at":"2017-04-02T18:19:31Z","updated_at":"2018-07-09T02:37:50Z","pushed_at":"2018-07-17T12:00:46Z","git_url":"git://github.com/JuliaIntervals/IntervalRootFinding.jl.git","ssh_url":"git@github.com:JuliaIntervals/IntervalRootFinding.jl.git","clone_url":"https://github.com/JuliaIntervals/IntervalRootFinding.jl.git","svn_url":"https://github.com/JuliaIntervals/IntervalRootFinding.jl","homepage":"","size":715,"stargazers_count":23,"watchers_count":23,"language":"Julia","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":6,"mirror_url":null,"archived":false,"open_issues_count":32,"license":{"key":"other","name":"Other","spdx_id":null,"url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":6,"open_issues":32,"watchers":23,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/JuliaIntervals/IntervalRootFinding.jl/pulls/72"},"html":{"href":"https://github.com/JuliaIntervals/IntervalRootFinding.jl/pull/72"},"issue":{"href":"https://api.github.com/repos/JuliaIntervals/IntervalRootFinding.jl/issues/72"},"comments":{"href":"https://api.github.com/repos/JuliaIntervals/IntervalRootFinding.jl/issues/72/comments"},"review_comments":{"href":"https://api.github.com/repos/JuliaIntervals/IntervalRootFinding.jl/pulls/72/comments"},"review_comment":{"href":"https://api.github.com/repos/JuliaIntervals/IntervalRootFinding.jl/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/JuliaIntervals/IntervalRootFinding.jl/pulls/72/commits"},"statuses":{"href":"https://api.github.com/repos/JuliaIntervals/IntervalRootFinding.jl/statuses/5fccaac14bedad3da9791a931b338bd5f9dce00f"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"gwater"}}