{"action":"created","comment":{"url":"https://api.github.com/repos/JuliaDiffEq/DelayDiffEq.jl/pulls/comments/136842018","pull_request_review_id":60437445,"id":136842018,"diff_hunk":"@@ -48,77 +73,49 @@ end\n Calculate next step of `integrator`.\n \"\"\"\n @muladd function perform_step!(integrator::DDEIntegrator)\n-    # cache error estimate of integrator and interpolation data of interval [tprev, t]\n-    # (maybe with already updated entry k[1] = fsalfirst == fsallast, if k[1] points to\n-    # fsalfirst) to be able to reset the corresponding variables in case calculation results\n-    # in numbers that are not finite\n-    recursivecopy!(integrator.k_cache, integrator.k)\n-    integrator.integrator.EEst = integrator.EEst\n-\n-    # add additional interpolation steps\n-    OrdinaryDiffEq.ode_addsteps!(integrator.integrator, integrator.f)\n+    # reset ODE integrator to cached values if last step failed\n+    if !integrator.integrator.accept_step\n+        if typeof(integrator.u) <: AbstractArray\n+            recursivecopy!(integrator.integrator.u, integrator.sol.u[end])\n+        else\n+            integrator.integrator.u = integrator.sol.u[end]\n+        end\n+        integrator.integrator.t = integrator.sol.t[end]\n+        integrator.integrator.tprev = integrator.sol.t[integrator.prev2_idx]\n+        integrator.integrator.dt = integrator.integrator.dtcache\n \n-    # perform always at least one calculation\n-    perform_step!(integrator, integrator.cache)\n+        # u(tprev) is not modified hence we do not have to copy it\n+        integrator.integrator.uprev = integrator.sol.u[integrator.prev2_idx]\n \n-    if typeof(integrator.prob) <: ConstantLagDDEProblem\n-        #warn(\"ConstantLagDDEProblem is deprecated. Use DDEProblem instead.\")\n-        neutral = false\n-        constant_lags = integrator.prob.lags\n-    else\n-        neutral = integrator.prob.neutral\n-        constant_lags = integrator.prob.constant_lags\n+        # do not have to reset interpolation data in initial time step since always a\n+        # constant extrapolation is used (and interpolation data of solution at initial\n+        # time point is not complete!)\n+        if length(integrator.sol.t) > 1\n+            recursivecopy!(integrator.integrator.k, integrator.sol.k[end])\n+        end\n     end\n \n-    # if dt is greater than the minimal lag, then use a fixed-point iteration\n-    if isempty(constant_lags) ||\n-       (integrator.dt > minimum(constant_lags) && isfinite(integrator.EEst))\n+    # reset boolean which indicates whether history function was evaluated at a time point\n+    # past the final point of the current solution\n+    integrator.integrator.isout = false\n \n-        # update cached error estimate of integrator\n-        integrator.integrator.EEst = integrator.EEst\n+    # perform always at least one calculation\n+    perform_step!(integrator, integrator.cache)\n \n-        # save dt, u(tprev) and interpolation data of interval [tprev, t] of ODE\n-        # integrator since they are overwritten by fixed-point iteration\n-        if typeof(integrator.uprev_cache) <: AbstractArray\n-            recursivecopy!(integrator.uprev_cache, integrator.integrator.uprev)\n-        else\n-            integrator.uprev_cache = integrator.integrator.uprev\n-        end\n-        recursivecopy!(integrator.k_integrator_cache,\n-                       view(integrator.integrator.k, 1:integrator.kshortsize))\n-        integrator.integrator.dtcache = integrator.integrator.dt\n-\n-        # move ODE integrator to interval [t, t+dt] to use interpolation of ODE integrator\n-        # in the next iterations when evaluating the history function\n-        integrator.integrator.t = integrator.t + integrator.dt\n-        integrator.integrator.tprev = integrator.t\n-        integrator.integrator.dt = integrator.dt\n-        if typeof(integrator.integrator.uprev) <: AbstractArray\n-            recursivecopy!(integrator.integrator.uprev, integrator.uprev)\n-        else\n-            integrator.integrator.uprev = integrator.uprev\n-        end\n+    # if the history function was evaluated at time points past the final time point of the\n+    # solution, i.e. returned extrapolated values, continue with a fixed-point iteration\n+    if integrator.integrator.isout\n+        # update ODE integrator to next time interval together with correct interpolation\n+        advance_ode_integrator!(integrator)","path":"src/integrator_interface.jl","position":169,"original_position":169,"commit_id":"8c60a5fb4dd29cdc532ab428d797609b46390a61","original_commit_id":"8c60a5fb4dd29cdc532ab428d797609b46390a61","user":{"login":"ChrisRackauckas","id":1814174,"avatar_url":"https://avatars2.githubusercontent.com/u/1814174?v=4","gravatar_id":"","url":"https://api.github.com/users/ChrisRackauckas","html_url":"https://github.com/ChrisRackauckas","followers_url":"https://api.github.com/users/ChrisRackauckas/followers","following_url":"https://api.github.com/users/ChrisRackauckas/following{/other_user}","gists_url":"https://api.github.com/users/ChrisRackauckas/gists{/gist_id}","starred_url":"https://api.github.com/users/ChrisRackauckas/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ChrisRackauckas/subscriptions","organizations_url":"https://api.github.com/users/ChrisRackauckas/orgs","repos_url":"https://api.github.com/users/ChrisRackauckas/repos","events_url":"https://api.github.com/users/ChrisRackauckas/events{/privacy}","received_events_url":"https://api.github.com/users/ChrisRackauckas/received_events","type":"User","site_admin":false},"body":"Don't know what this is yet.","created_at":"2017-09-04T15:19:14Z","updated_at":"2017-09-04T15:19:14Z","html_url":"https://github.com/JuliaDiffEq/DelayDiffEq.jl/pull/34#discussion_r136842018","pull_request_url":"https://api.github.com/repos/JuliaDiffEq/DelayDiffEq.jl/pulls/34","author_association":"OWNER","_links":{"self":{"href":"https://api.github.com/repos/JuliaDiffEq/DelayDiffEq.jl/pulls/comments/136842018"},"html":{"href":"https://github.com/JuliaDiffEq/DelayDiffEq.jl/pull/34#discussion_r136842018"},"pull_request":{"href":"https://api.github.com/repos/JuliaDiffEq/DelayDiffEq.jl/pulls/34"}}},"pull_request":{"url":"https://api.github.com/repos/JuliaDiffEq/DelayDiffEq.jl/pulls/34","id":139164709,"html_url":"https://github.com/JuliaDiffEq/DelayDiffEq.jl/pull/34","diff_url":"https://github.com/JuliaDiffEq/DelayDiffEq.jl/pull/34.diff","patch_url":"https://github.com/JuliaDiffEq/DelayDiffEq.jl/pull/34.patch","issue_url":"https://api.github.com/repos/JuliaDiffEq/DelayDiffEq.jl/issues/34","number":34,"state":"open","locked":false,"title":"Add interpolants and change order of interpolation updates","user":{"login":"devmotion","id":26102,"avatar_url":"https://avatars3.githubusercontent.com/u/26102?v=4","gravatar_id":"","url":"https://api.github.com/users/devmotion","html_url":"https://github.com/devmotion","followers_url":"https://api.github.com/users/devmotion/followers","following_url":"https://api.github.com/users/devmotion/following{/other_user}","gists_url":"https://api.github.com/users/devmotion/gists{/gist_id}","starred_url":"https://api.github.com/users/devmotion/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/devmotion/subscriptions","organizations_url":"https://api.github.com/users/devmotion/orgs","repos_url":"https://api.github.com/users/devmotion/repos","events_url":"https://api.github.com/users/devmotion/events{/privacy}","received_events_url":"https://api.github.com/users/devmotion/received_events","type":"User","site_admin":false},"body":"This is a quite large update. Changes are:\r\n- new discontinuities (arising from callbacks) are also added as time stops [this change alone causes the only regression in `events.jl`; just applying that change to master leads to the same regression]\r\n- behaviour of ODE integrator is changed: currently ODE integrator and its interpolation data are only updated to the next interval `[t, t+dt]` during fixed-point iterations and directly before saving; with this PR it will always be updated to `[t, t+dt]` directly after calculating the next step and only be reset to the last interval `[tprev, t]` at the beginning of `perform_step!` if the last step failed. The advantage is that any evaluations of the history function (e.g. in callbacks when interpolating back) will already use the newest calculations; with the current approach they might again do a bad extrapolation as initially in `perform_steps!`.\r\n- systematic updates of interpolation data: every time when the interpolation data of the ODE integrator is updated or moved to the next interval we instead update the current interpolation data or the one just calculated for the next interval of the DDE integrator and copy it then to the ODE integrator. The advantage is that then these updates will always use the old interpolation data of the ODE integrator when evaluating the history function. Currently updates of the first interpolation steps might change results for the last interpolation steps because the first updates already change the history function, so we can get undesired side effects. This can not happen when interpolation steps are added to the DDE integrator first (but we have to specify `tprev`, since `integrator.tprev != integrator.integrator.tprev` when moving the ODE integrator to the next interval!).\r\n- constant extrapolation in the initial time step: currently extrapolation of the history function at the initial time step will fail since correctly `dt = 0` for the ODE integrator. This does not matter for constant delays since the initial time step is always chosen such that `dt < minimum(lag)` but this can not be ensured for dependent lags. Hence a special constant extrapolation of `integrator.u` is added to the history function in case `integrator.dt == 0`.\r\n- initial interpolations of lazy interpolants: currently lazy interpolants fail if the time step is chosen such that in the calculation of additional interpolation steps the history function has to be evaluated at a point in the current time interval (this happens e.g. for the Mackey-Glass equation `prob_dde_mackey`, one of the new problems in DiffEqProblemLibrary). The evaluation will try to interpolate but has to add the additional steps first - so it can just not work. However, similar to the extrapolation that is necessary for implicit steps it will now fallback to a Hermite interpolant which then can be improved by further iterations using this first interpolation.\r\n- better detection of implicit steps: instead of checking `dt > maximum(lag)` which will not work if not all constant lags are specified or additionally dependent lags exist it is now checked whether the history function was evaluated at a time point past the final time point of the solution, i.e. whether an extrapolation was used, during the initial calculation of the next step in `perform_step!`. This is done by setting `integrator.isout = true` which is always reset before this initial calculation. If an extrapolation occurred fixed-point iterations will be executed, otherwise not. This works for arbitrary delays and even without delays.\r\n- update of \"internals\" after modifications by callbacks: a method `reeval_internals_due_to_modification!` for DDEIntegrator is added which will update the interpolation data of both the DDE integrator (again done first, using the \"old\" interpolation of the ODE integrator when evaluating the history function) and the ODE integrator (copy from DDE integrator), and the time interval of the ODE integrator.\r\n- remove caches: since every step is saved reset of ODE integrators after failed steps is (at least partly) easy - we can just set it to the last time interval of the solution. The final element of the solution and its associated interpolation data will always be the values of the last time step and its interpolation data - however, this does not have to hold for the second-to-last element since callbacks can lead to additional savings. Hence the index of the `tprev` and `u(tprev)` in the solution arrays has to be saved and updated after successful steps. `dt` is still cached to avoid subtractions if possible.\r\n- improved reduction of solution: it now also checks whether a time point of the solution is required for the interpolation at `tmax` up to which the solution should be reduced. However, it still does not work with callbacks, it will just remove the added steps again (maybe this can be fixed by just adding those additional points to `saveat` as well...).","created_at":"2017-09-04T14:02:42Z","updated_at":"2017-09-04T15:19:14Z","closed_at":null,"merged_at":null,"merge_commit_sha":"49578ca810cfe774a9d6c988d1b2f126e391046a","assignee":null,"assignees":[],"requested_reviewers":[],"milestone":null,"commits_url":"https://api.github.com/repos/JuliaDiffEq/DelayDiffEq.jl/pulls/34/commits","review_comments_url":"https://api.github.com/repos/JuliaDiffEq/DelayDiffEq.jl/pulls/34/comments","review_comment_url":"https://api.github.com/repos/JuliaDiffEq/DelayDiffEq.jl/pulls/comments{/number}","comments_url":"https://api.github.com/repos/JuliaDiffEq/DelayDiffEq.jl/issues/34/comments","statuses_url":"https://api.github.com/repos/JuliaDiffEq/DelayDiffEq.jl/statuses/8c60a5fb4dd29cdc532ab428d797609b46390a61","head":{"label":"devmotion:interpolants","ref":"interpolants","sha":"8c60a5fb4dd29cdc532ab428d797609b46390a61","user":{"login":"devmotion","id":26102,"avatar_url":"https://avatars3.githubusercontent.com/u/26102?v=4","gravatar_id":"","url":"https://api.github.com/users/devmotion","html_url":"https://github.com/devmotion","followers_url":"https://api.github.com/users/devmotion/followers","following_url":"https://api.github.com/users/devmotion/following{/other_user}","gists_url":"https://api.github.com/users/devmotion/gists{/gist_id}","starred_url":"https://api.github.com/users/devmotion/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/devmotion/subscriptions","organizations_url":"https://api.github.com/users/devmotion/orgs","repos_url":"https://api.github.com/users/devmotion/repos","events_url":"https://api.github.com/users/devmotion/events{/privacy}","received_events_url":"https://api.github.com/users/devmotion/received_events","type":"User","site_admin":false},"repo":{"id":96329195,"name":"DelayDiffEq.jl","full_name":"devmotion/DelayDiffEq.jl","owner":{"login":"devmotion","id":26102,"avatar_url":"https://avatars3.githubusercontent.com/u/26102?v=4","gravatar_id":"","url":"https://api.github.com/users/devmotion","html_url":"https://github.com/devmotion","followers_url":"https://api.github.com/users/devmotion/followers","following_url":"https://api.github.com/users/devmotion/following{/other_user}","gists_url":"https://api.github.com/users/devmotion/gists{/gist_id}","starred_url":"https://api.github.com/users/devmotion/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/devmotion/subscriptions","organizations_url":"https://api.github.com/users/devmotion/orgs","repos_url":"https://api.github.com/users/devmotion/repos","events_url":"https://api.github.com/users/devmotion/events{/privacy}","received_events_url":"https://api.github.com/users/devmotion/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/devmotion/DelayDiffEq.jl","description":"DiffEq solvers for delay differential equations","fork":true,"url":"https://api.github.com/repos/devmotion/DelayDiffEq.jl","forks_url":"https://api.github.com/repos/devmotion/DelayDiffEq.jl/forks","keys_url":"https://api.github.com/repos/devmotion/DelayDiffEq.jl/keys{/key_id}","collaborators_url":"https://api.github.com/repos/devmotion/DelayDiffEq.jl/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/devmotion/DelayDiffEq.jl/teams","hooks_url":"https://api.github.com/repos/devmotion/DelayDiffEq.jl/hooks","issue_events_url":"https://api.github.com/repos/devmotion/DelayDiffEq.jl/issues/events{/number}","events_url":"https://api.github.com/repos/devmotion/DelayDiffEq.jl/events","assignees_url":"https://api.github.com/repos/devmotion/DelayDiffEq.jl/assignees{/user}","branches_url":"https://api.github.com/repos/devmotion/DelayDiffEq.jl/branches{/branch}","tags_url":"https://api.github.com/repos/devmotion/DelayDiffEq.jl/tags","blobs_url":"https://api.github.com/repos/devmotion/DelayDiffEq.jl/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/devmotion/DelayDiffEq.jl/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/devmotion/DelayDiffEq.jl/git/refs{/sha}","trees_url":"https://api.github.com/repos/devmotion/DelayDiffEq.jl/git/trees{/sha}","statuses_url":"https://api.github.com/repos/devmotion/DelayDiffEq.jl/statuses/{sha}","languages_url":"https://api.github.com/repos/devmotion/DelayDiffEq.jl/languages","stargazers_url":"https://api.github.com/repos/devmotion/DelayDiffEq.jl/stargazers","contributors_url":"https://api.github.com/repos/devmotion/DelayDiffEq.jl/contributors","subscribers_url":"https://api.github.com/repos/devmotion/DelayDiffEq.jl/subscribers","subscription_url":"https://api.github.com/repos/devmotion/DelayDiffEq.jl/subscription","commits_url":"https://api.github.com/repos/devmotion/DelayDiffEq.jl/commits{/sha}","git_commits_url":"https://api.github.com/repos/devmotion/DelayDiffEq.jl/git/commits{/sha}","comments_url":"https://api.github.com/repos/devmotion/DelayDiffEq.jl/comments{/number}","issue_comment_url":"https://api.github.com/repos/devmotion/DelayDiffEq.jl/issues/comments{/number}","contents_url":"https://api.github.com/repos/devmotion/DelayDiffEq.jl/contents/{+path}","compare_url":"https://api.github.com/repos/devmotion/DelayDiffEq.jl/compare/{base}...{head}","merges_url":"https://api.github.com/repos/devmotion/DelayDiffEq.jl/merges","archive_url":"https://api.github.com/repos/devmotion/DelayDiffEq.jl/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/devmotion/DelayDiffEq.jl/downloads","issues_url":"https://api.github.com/repos/devmotion/DelayDiffEq.jl/issues{/number}","pulls_url":"https://api.github.com/repos/devmotion/DelayDiffEq.jl/pulls{/number}","milestones_url":"https://api.github.com/repos/devmotion/DelayDiffEq.jl/milestones{/number}","notifications_url":"https://api.github.com/repos/devmotion/DelayDiffEq.jl/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/devmotion/DelayDiffEq.jl/labels{/name}","releases_url":"https://api.github.com/repos/devmotion/DelayDiffEq.jl/releases{/id}","deployments_url":"https://api.github.com/repos/devmotion/DelayDiffEq.jl/deployments","created_at":"2017-07-05T14:37:16Z","updated_at":"2017-07-05T14:37:17Z","pushed_at":"2017-09-04T14:17:53Z","git_url":"git://github.com/devmotion/DelayDiffEq.jl.git","ssh_url":"git@github.com:devmotion/DelayDiffEq.jl.git","clone_url":"https://github.com/devmotion/DelayDiffEq.jl.git","svn_url":"https://github.com/devmotion/DelayDiffEq.jl","homepage":null,"size":128,"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,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"JuliaDiffEq:master","ref":"master","sha":"7dee2d53d52b14696de5ed2d7589e9d1ef82088f","user":{"login":"JuliaDiffEq","id":21238080,"avatar_url":"https://avatars3.githubusercontent.com/u/21238080?v=4","gravatar_id":"","url":"https://api.github.com/users/JuliaDiffEq","html_url":"https://github.com/JuliaDiffEq","followers_url":"https://api.github.com/users/JuliaDiffEq/followers","following_url":"https://api.github.com/users/JuliaDiffEq/following{/other_user}","gists_url":"https://api.github.com/users/JuliaDiffEq/gists{/gist_id}","starred_url":"https://api.github.com/users/JuliaDiffEq/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/JuliaDiffEq/subscriptions","organizations_url":"https://api.github.com/users/JuliaDiffEq/orgs","repos_url":"https://api.github.com/users/JuliaDiffEq/repos","events_url":"https://api.github.com/users/JuliaDiffEq/events{/privacy}","received_events_url":"https://api.github.com/users/JuliaDiffEq/received_events","type":"Organization","site_admin":false},"repo":{"id":78314834,"name":"DelayDiffEq.jl","full_name":"JuliaDiffEq/DelayDiffEq.jl","owner":{"login":"JuliaDiffEq","id":21238080,"avatar_url":"https://avatars3.githubusercontent.com/u/21238080?v=4","gravatar_id":"","url":"https://api.github.com/users/JuliaDiffEq","html_url":"https://github.com/JuliaDiffEq","followers_url":"https://api.github.com/users/JuliaDiffEq/followers","following_url":"https://api.github.com/users/JuliaDiffEq/following{/other_user}","gists_url":"https://api.github.com/users/JuliaDiffEq/gists{/gist_id}","starred_url":"https://api.github.com/users/JuliaDiffEq/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/JuliaDiffEq/subscriptions","organizations_url":"https://api.github.com/users/JuliaDiffEq/orgs","repos_url":"https://api.github.com/users/JuliaDiffEq/repos","events_url":"https://api.github.com/users/JuliaDiffEq/events{/privacy}","received_events_url":"https://api.github.com/users/JuliaDiffEq/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/JuliaDiffEq/DelayDiffEq.jl","description":"DiffEq solvers for delay differential equations","fork":false,"url":"https://api.github.com/repos/JuliaDiffEq/DelayDiffEq.jl","forks_url":"https://api.github.com/repos/JuliaDiffEq/DelayDiffEq.jl/forks","keys_url":"https://api.github.com/repos/JuliaDiffEq/DelayDiffEq.jl/keys{/key_id}","collaborators_url":"https://api.github.com/repos/JuliaDiffEq/DelayDiffEq.jl/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/JuliaDiffEq/DelayDiffEq.jl/teams","hooks_url":"https://api.github.com/repos/JuliaDiffEq/DelayDiffEq.jl/hooks","issue_events_url":"https://api.github.com/repos/JuliaDiffEq/DelayDiffEq.jl/issues/events{/number}","events_url":"https://api.github.com/repos/JuliaDiffEq/DelayDiffEq.jl/events","assignees_url":"https://api.github.com/repos/JuliaDiffEq/DelayDiffEq.jl/assignees{/user}","branches_url":"https://api.github.com/repos/JuliaDiffEq/DelayDiffEq.jl/branches{/branch}","tags_url":"https://api.github.com/repos/JuliaDiffEq/DelayDiffEq.jl/tags","blobs_url":"https://api.github.com/repos/JuliaDiffEq/DelayDiffEq.jl/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/JuliaDiffEq/DelayDiffEq.jl/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/JuliaDiffEq/DelayDiffEq.jl/git/refs{/sha}","trees_url":"https://api.github.com/repos/JuliaDiffEq/DelayDiffEq.jl/git/trees{/sha}","statuses_url":"https://api.github.com/repos/JuliaDiffEq/DelayDiffEq.jl/statuses/{sha}","languages_url":"https://api.github.com/repos/JuliaDiffEq/DelayDiffEq.jl/languages","stargazers_url":"https://api.github.com/repos/JuliaDiffEq/DelayDiffEq.jl/stargazers","contributors_url":"https://api.github.com/repos/JuliaDiffEq/DelayDiffEq.jl/contributors","subscribers_url":"https://api.github.com/repos/JuliaDiffEq/DelayDiffEq.jl/subscribers","subscription_url":"https://api.github.com/repos/JuliaDiffEq/DelayDiffEq.jl/subscription","commits_url":"https://api.github.com/repos/JuliaDiffEq/DelayDiffEq.jl/commits{/sha}","git_commits_url":"https://api.github.com/repos/JuliaDiffEq/DelayDiffEq.jl/git/commits{/sha}","comments_url":"https://api.github.com/repos/JuliaDiffEq/DelayDiffEq.jl/comments{/number}","issue_comment_url":"https://api.github.com/repos/JuliaDiffEq/DelayDiffEq.jl/issues/comments{/number}","contents_url":"https://api.github.com/repos/JuliaDiffEq/DelayDiffEq.jl/contents/{+path}","compare_url":"https://api.github.com/repos/JuliaDiffEq/DelayDiffEq.jl/compare/{base}...{head}","merges_url":"https://api.github.com/repos/JuliaDiffEq/DelayDiffEq.jl/merges","archive_url":"https://api.github.com/repos/JuliaDiffEq/DelayDiffEq.jl/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/JuliaDiffEq/DelayDiffEq.jl/downloads","issues_url":"https://api.github.com/repos/JuliaDiffEq/DelayDiffEq.jl/issues{/number}","pulls_url":"https://api.github.com/repos/JuliaDiffEq/DelayDiffEq.jl/pulls{/number}","milestones_url":"https://api.github.com/repos/JuliaDiffEq/DelayDiffEq.jl/milestones{/number}","notifications_url":"https://api.github.com/repos/JuliaDiffEq/DelayDiffEq.jl/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/JuliaDiffEq/DelayDiffEq.jl/labels{/name}","releases_url":"https://api.github.com/repos/JuliaDiffEq/DelayDiffEq.jl/releases{/id}","deployments_url":"https://api.github.com/repos/JuliaDiffEq/DelayDiffEq.jl/deployments","created_at":"2017-01-08T01:36:44Z","updated_at":"2017-07-29T12:35:00Z","pushed_at":"2017-09-04T14:17:54Z","git_url":"git://github.com/JuliaDiffEq/DelayDiffEq.jl.git","ssh_url":"git@github.com:JuliaDiffEq/DelayDiffEq.jl.git","clone_url":"https://github.com/JuliaDiffEq/DelayDiffEq.jl.git","svn_url":"https://github.com/JuliaDiffEq/DelayDiffEq.jl","homepage":null,"size":108,"stargazers_count":2,"watchers_count":2,"language":"Julia","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":5,"mirror_url":null,"open_issues_count":6,"forks":5,"open_issues":6,"watchers":2,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/JuliaDiffEq/DelayDiffEq.jl/pulls/34"},"html":{"href":"https://github.com/JuliaDiffEq/DelayDiffEq.jl/pull/34"},"issue":{"href":"https://api.github.com/repos/JuliaDiffEq/DelayDiffEq.jl/issues/34"},"comments":{"href":"https://api.github.com/repos/JuliaDiffEq/DelayDiffEq.jl/issues/34/comments"},"review_comments":{"href":"https://api.github.com/repos/JuliaDiffEq/DelayDiffEq.jl/pulls/34/comments"},"review_comment":{"href":"https://api.github.com/repos/JuliaDiffEq/DelayDiffEq.jl/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/JuliaDiffEq/DelayDiffEq.jl/pulls/34/commits"},"statuses":{"href":"https://api.github.com/repos/JuliaDiffEq/DelayDiffEq.jl/statuses/8c60a5fb4dd29cdc532ab428d797609b46390a61"}},"author_association":"MEMBER"}}
{"actor":{"display_login":"ChrisRackauckas"}}