{"action":"created","comment":{"url":"https://api.github.com/repos/JuliaLang/julia/pulls/comments/29102388","id":29102388,"diff_hunk":"@@ -279,112 +279,62 @@ done(a::Array,i) = (i > length(a))\n \n ## Indexing: getindex ##\n \n-getindex(a::Array) = arrayref(a,1)\n-\n-getindex(A::Array, i0::Real) = arrayref(A,to_index(i0))\n-getindex(A::Array, i0::Real, i1::Real) = arrayref(A,to_index(i0),to_index(i1))\n-getindex(A::Array, i0::Real, i1::Real, i2::Real) =\n-    arrayref(A,to_index(i0),to_index(i1),to_index(i2))\n-getindex(A::Array, i0::Real, i1::Real, i2::Real, i3::Real) =\n-    arrayref(A,to_index(i0),to_index(i1),to_index(i2),to_index(i3))\n-getindex(A::Array, i0::Real, i1::Real, i2::Real, i3::Real,  i4::Real) =\n-    arrayref(A,to_index(i0),to_index(i1),to_index(i2),to_index(i3),to_index(i4))\n-getindex(A::Array, i0::Real, i1::Real, i2::Real, i3::Real,  i4::Real, i5::Real) =\n-    arrayref(A,to_index(i0),to_index(i1),to_index(i2),to_index(i3),to_index(i4),to_index(i5))\n-\n-getindex(A::Array, i0::Real, i1::Real, i2::Real, i3::Real,  i4::Real, i5::Real, I::Real...) =\n-    arrayref(A,to_index(i0),to_index(i1),to_index(i2),to_index(i3),to_index(i4),to_index(i5),to_index(I)...)\n-\n-# Fast copy using copy! for UnitRange\n-function getindex(A::Array, I::UnitRange{Int})\n-    lI = length(I)\n-    X = similar(A, lI)\n-    if lI > 0\n-        copy!(X, 1, A, first(I), lI)\n-    end\n-    return X\n-end\n-\n-function getindex{T<:Real}(A::Array, I::AbstractVector{T})\n-    return [ A[i] for i in to_index(I) ]\n-end\n-function getindex{T<:Real}(A::Range, I::AbstractVector{T})\n-    return [ A[i] for i in to_index(I) ]\n-end\n-function getindex(A::Range, I::AbstractVector{Bool})\n-    checkbounds(A, I)\n-    return [ A[i] for i in to_index(I) ]\n-end\n-\n-\n-# logical indexing\n-# (when the indexing is provided as an Array{Bool} or a BitArray we can be\n-# sure about the behaviour and use unsafe_getindex; in the general case\n-# we can't and must use getindex, otherwise silent corruption can happen)\n-\n-@generated function getindex_bool_1d(A::Array, I::AbstractArray{Bool})\n-    idxop = I <: Union(Array{Bool}, BitArray) ? :unsafe_getindex : :getindex\n-    quote\n-        checkbounds(A, I)\n-        n = sum(I)\n-        out = similar(A, n)\n-        c = 1\n-        for i = 1:length(I)\n-            if $idxop(I, i)\n-                @inbounds out[c] = A[i]\n-                c += 1\n-            end\n-        end\n-        out\n-    end\n+# While these are redundant with the abstract fallbacks, the compiler is much\n+# better at hoisting bounds checks from within arrayref than `checkbounds`\n+getindex(A::Array, i1::Int) = arrayref(A, i1)\n+unsafe_getindex(A::Array, i1::Int) = @inbounds return arrayref(A, i1)\n+\n+# Fast copy using copy! for UnitRange and Colon\n+# This will outperform abstract fallbacks, but disabled for now as a stress test\n+# TODO: re-enable this!\n+# function getindex(A::Array, I::UnitRange{Int})\n+#     lI = length(I)\n+#     X = similar(A, lI)\n+#     copy!(X, 1, A, first(I), lI)\n+#     return X\n+# end\n+# function unsafe_getindex(A::Array, I::UnitRange{Int})\n+#     lI = length(I)\n+#     X = similar(A, lI)\n+#     if lI > 0\n+#         unsafe_copy!(X, 1, A, first(I), lI)\n+#     end\n+#     return X\n+# end\n+# getindex(A::Array, c::Colon) = unsafe_getindex(A, c)\n+# function unsafe_getindex(A::Array, ::Colon)\n+#     lI = length(A)\n+#     X = similar(A, lI)\n+#     if lI > 0\n+#         unsafe_copy!(X, 1, A, 1, lI)\n+#     end\n+#     return X\n+# end","path":"base/array.jl","position":92,"original_position":92,"commit_id":"70d365e57409c0b30bd9cfd59213c3157531ee19","original_commit_id":"70d365e57409c0b30bd9cfd59213c3157531ee19","user":{"login":"timholy","id":1525481,"avatar_url":"https://avatars.githubusercontent.com/u/1525481?v=3","gravatar_id":"","url":"https://api.github.com/users/timholy","html_url":"https://github.com/timholy","followers_url":"https://api.github.com/users/timholy/followers","following_url":"https://api.github.com/users/timholy/following{/other_user}","gists_url":"https://api.github.com/users/timholy/gists{/gist_id}","starred_url":"https://api.github.com/users/timholy/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/timholy/subscriptions","organizations_url":"https://api.github.com/users/timholy/orgs","repos_url":"https://api.github.com/users/timholy/repos","events_url":"https://api.github.com/users/timholy/events{/privacy}","received_events_url":"https://api.github.com/users/timholy/received_events","type":"User","site_admin":false},"body":"I assume you still want these commented out, but a reminder about your TODO","created_at":"2015-04-25T17:34:23Z","updated_at":"2015-04-25T17:34:23Z","html_url":"https://github.com/JuliaLang/julia/pull/10525#discussion_r29102388","pull_request_url":"https://api.github.com/repos/JuliaLang/julia/pulls/10525","_links":{"self":{"href":"https://api.github.com/repos/JuliaLang/julia/pulls/comments/29102388"},"html":{"href":"https://github.com/JuliaLang/julia/pull/10525#discussion_r29102388"},"pull_request":{"href":"https://api.github.com/repos/JuliaLang/julia/pulls/10525"}}},"pull_request":{"url":"https://api.github.com/repos/JuliaLang/julia/pulls/10525","id":31205611,"html_url":"https://github.com/JuliaLang/julia/pull/10525","diff_url":"https://github.com/JuliaLang/julia/pull/10525.diff","patch_url":"https://github.com/JuliaLang/julia/pull/10525.patch","issue_url":"https://api.github.com/repos/JuliaLang/julia/issues/10525","number":10525,"state":"open","locked":false,"title":"RFC: Give AbstractArrays smart and performant indexing behaviors for free","user":{"login":"mbauman","id":154641,"avatar_url":"https://avatars.githubusercontent.com/u/154641?v=3","gravatar_id":"","url":"https://api.github.com/users/mbauman","html_url":"https://github.com/mbauman","followers_url":"https://api.github.com/users/mbauman/followers","following_url":"https://api.github.com/users/mbauman/following{/other_user}","gists_url":"https://api.github.com/users/mbauman/gists{/gist_id}","starred_url":"https://api.github.com/users/mbauman/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mbauman/subscriptions","organizations_url":"https://api.github.com/users/mbauman/orgs","repos_url":"https://api.github.com/users/mbauman/repos","events_url":"https://api.github.com/users/mbauman/events{/privacy}","received_events_url":"https://api.github.com/users/mbauman/received_events","type":"User","site_admin":false},"body":"~~This is still a work in progress, but I'd like to get some feedback on the architecture and design here before applying this same sort of scheme to `setindex!`.~~\r\n\r\nThe basic idea is that the only getindex method defined in base for abstract arrays is `getindex(::AbstractArray, I...)`. And the only methods that an AbstractArray subtype must define are `size` and just one `getindex` method:\r\n\r\n```julia\r\ngetindex(::T, ::Int) # if linearindexing(T) == LinearFast()\r\ngetindex(::T, ::Int, ::Int, #=...ndims(A) indices...=#) if LinearSlow()\r\n```\r\n\r\nUnfortunately, it is currently impossible to express the latter method for arbitrary dimensionalities, but in practice it's not a big issue: most LinearSlow() arrays have a fixed dimension.\r\n\r\nThis is achieved through dispatch on an internal `_getindex` method, which recomputes the indices such that it can call the canonical `getindex` method that the user must define.  If the user has not defined their canonical method, it will fall back to an error method in `_getindex`.  I use similar scheme for `unsafe_getindex`, with the exception that we can fallback to the safe version if the subtype hasn't defined the canonical unsafe method.  This enables fast vector indexing by checking bounds of the index vectors instead of on each element.  And once `@inbounds` is extensible, AbstractArrays will be able to support it by default.\r\n\r\nThe difficulty with all this redirection is that an extra function call can wreck indexing performance, and it can be hard to avoid.  ~~I've had particular difficulty getting good performance with `CartesianIndexes`, and I still lag in performance there by 20x for big arrays.  I think call site inline annotations would be a magic bullet, but there may be other tricks we can use, too.  I've not looked into this very carefully yet, though.~~ (Fixed with a more sensible inlining strategy)\r\n\r\nTL/DR:\r\n\r\nIn my cursory performance tests [hacked onto Tim's indexing perf suite from his reshape work](https://gist.github.com/mbauman/39bb490ce2bee52417f1) (more tests are needed), I'm close to matching *or outperforming* master with `Array` with only these definitions:\r\n\r\n```julia\r\njulia> methods(getindex, (Array, Any...))\r\n3-element Array{Any,1}:\r\n getindex(A::Array{T,N},i::Int) at array.jl:304\r\n getindex{T<:Real}(A::Array{T,N},I::Range{T<:Real}) at array.jl:347 # Needed for bootstrap\r\n getindex(A::AbstractArray{T,N},I...) at abstractarray.jl:492\r\n```\r\n\r\n(Of course, in places where we're not quite able to close the gap we can always reinstate the specialized methods. This is just a very useful stress-test of both functionality and performance.)\r\n\r\ncc: @timholy ","created_at":"2015-03-15T19:30:00Z","updated_at":"2015-04-25T17:34:23Z","closed_at":null,"merged_at":null,"merge_commit_sha":"208d1166f8b3cfcf2b8b04bec6cbb0a2321810e3","assignee":null,"milestone":{"url":"https://api.github.com/repos/JuliaLang/julia/milestones/11","html_url":"https://github.com/JuliaLang/julia/milestones/0.4.0","labels_url":"https://api.github.com/repos/JuliaLang/julia/milestones/11/labels","id":748886,"number":11,"title":"0.4.0","description":"For tracking release-defining items for 0.4: important new features, breaking changes, and blocking bugs.\r\n\r\nAfter a brief period for deciding scope, adding issues to this milestone is not allowed. Once the items in this milestone are done, 0.4 will enter its stabilizing period and a release candidate can be made soon after.","creator":{"login":"JeffBezanson","id":744556,"avatar_url":"https://avatars.githubusercontent.com/u/744556?v=3","gravatar_id":"","url":"https://api.github.com/users/JeffBezanson","html_url":"https://github.com/JeffBezanson","followers_url":"https://api.github.com/users/JeffBezanson/followers","following_url":"https://api.github.com/users/JeffBezanson/following{/other_user}","gists_url":"https://api.github.com/users/JeffBezanson/gists{/gist_id}","starred_url":"https://api.github.com/users/JeffBezanson/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/JeffBezanson/subscriptions","organizations_url":"https://api.github.com/users/JeffBezanson/orgs","repos_url":"https://api.github.com/users/JeffBezanson/repos","events_url":"https://api.github.com/users/JeffBezanson/events{/privacy}","received_events_url":"https://api.github.com/users/JeffBezanson/received_events","type":"User","site_admin":false},"open_issues":24,"closed_issues":40,"state":"open","created_at":"2014-08-10T18:13:46Z","updated_at":"2015-04-25T05:06:40Z","due_on":"2015-06-20T18:30:00Z","closed_at":null},"commits_url":"https://api.github.com/repos/JuliaLang/julia/pulls/10525/commits","review_comments_url":"https://api.github.com/repos/JuliaLang/julia/pulls/10525/comments","review_comment_url":"https://api.github.com/repos/JuliaLang/julia/pulls/comments{/number}","comments_url":"https://api.github.com/repos/JuliaLang/julia/issues/10525/comments","statuses_url":"https://api.github.com/repos/JuliaLang/julia/statuses/70d365e57409c0b30bd9cfd59213c3157531ee19","head":{"label":"JuliaLang:mb/abstractsmarts","ref":"mb/abstractsmarts","sha":"70d365e57409c0b30bd9cfd59213c3157531ee19","user":{"login":"JuliaLang","id":743164,"avatar_url":"https://avatars.githubusercontent.com/u/743164?v=3","gravatar_id":"","url":"https://api.github.com/users/JuliaLang","html_url":"https://github.com/JuliaLang","followers_url":"https://api.github.com/users/JuliaLang/followers","following_url":"https://api.github.com/users/JuliaLang/following{/other_user}","gists_url":"https://api.github.com/users/JuliaLang/gists{/gist_id}","starred_url":"https://api.github.com/users/JuliaLang/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/JuliaLang/subscriptions","organizations_url":"https://api.github.com/users/JuliaLang/orgs","repos_url":"https://api.github.com/users/JuliaLang/repos","events_url":"https://api.github.com/users/JuliaLang/events{/privacy}","received_events_url":"https://api.github.com/users/JuliaLang/received_events","type":"Organization","site_admin":false},"repo":{"id":1644196,"name":"julia","full_name":"JuliaLang/julia","owner":{"login":"JuliaLang","id":743164,"avatar_url":"https://avatars.githubusercontent.com/u/743164?v=3","gravatar_id":"","url":"https://api.github.com/users/JuliaLang","html_url":"https://github.com/JuliaLang","followers_url":"https://api.github.com/users/JuliaLang/followers","following_url":"https://api.github.com/users/JuliaLang/following{/other_user}","gists_url":"https://api.github.com/users/JuliaLang/gists{/gist_id}","starred_url":"https://api.github.com/users/JuliaLang/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/JuliaLang/subscriptions","organizations_url":"https://api.github.com/users/JuliaLang/orgs","repos_url":"https://api.github.com/users/JuliaLang/repos","events_url":"https://api.github.com/users/JuliaLang/events{/privacy}","received_events_url":"https://api.github.com/users/JuliaLang/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/JuliaLang/julia","description":"The Julia Language: A fresh approach to technical computing.","fork":false,"url":"https://api.github.com/repos/JuliaLang/julia","forks_url":"https://api.github.com/repos/JuliaLang/julia/forks","keys_url":"https://api.github.com/repos/JuliaLang/julia/keys{/key_id}","collaborators_url":"https://api.github.com/repos/JuliaLang/julia/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/JuliaLang/julia/teams","hooks_url":"https://api.github.com/repos/JuliaLang/julia/hooks","issue_events_url":"https://api.github.com/repos/JuliaLang/julia/issues/events{/number}","events_url":"https://api.github.com/repos/JuliaLang/julia/events","assignees_url":"https://api.github.com/repos/JuliaLang/julia/assignees{/user}","branches_url":"https://api.github.com/repos/JuliaLang/julia/branches{/branch}","tags_url":"https://api.github.com/repos/JuliaLang/julia/tags","blobs_url":"https://api.github.com/repos/JuliaLang/julia/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/JuliaLang/julia/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/JuliaLang/julia/git/refs{/sha}","trees_url":"https://api.github.com/repos/JuliaLang/julia/git/trees{/sha}","statuses_url":"https://api.github.com/repos/JuliaLang/julia/statuses/{sha}","languages_url":"https://api.github.com/repos/JuliaLang/julia/languages","stargazers_url":"https://api.github.com/repos/JuliaLang/julia/stargazers","contributors_url":"https://api.github.com/repos/JuliaLang/julia/contributors","subscribers_url":"https://api.github.com/repos/JuliaLang/julia/subscribers","subscription_url":"https://api.github.com/repos/JuliaLang/julia/subscription","commits_url":"https://api.github.com/repos/JuliaLang/julia/commits{/sha}","git_commits_url":"https://api.github.com/repos/JuliaLang/julia/git/commits{/sha}","comments_url":"https://api.github.com/repos/JuliaLang/julia/comments{/number}","issue_comment_url":"https://api.github.com/repos/JuliaLang/julia/issues/comments{/number}","contents_url":"https://api.github.com/repos/JuliaLang/julia/contents/{+path}","compare_url":"https://api.github.com/repos/JuliaLang/julia/compare/{base}...{head}","merges_url":"https://api.github.com/repos/JuliaLang/julia/merges","archive_url":"https://api.github.com/repos/JuliaLang/julia/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/JuliaLang/julia/downloads","issues_url":"https://api.github.com/repos/JuliaLang/julia/issues{/number}","pulls_url":"https://api.github.com/repos/JuliaLang/julia/pulls{/number}","milestones_url":"https://api.github.com/repos/JuliaLang/julia/milestones{/number}","notifications_url":"https://api.github.com/repos/JuliaLang/julia/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/JuliaLang/julia/labels{/name}","releases_url":"https://api.github.com/repos/JuliaLang/julia/releases{/id}","created_at":"2011-04-21T07:01:50Z","updated_at":"2015-04-25T17:25:18Z","pushed_at":"2015-04-25T16:46:14Z","git_url":"git://github.com/JuliaLang/julia.git","ssh_url":"git@github.com:JuliaLang/julia.git","clone_url":"https://github.com/JuliaLang/julia.git","svn_url":"https://github.com/JuliaLang/julia","homepage":"http://julialang.org/","size":195881,"stargazers_count":5410,"watchers_count":5410,"language":"Julia","has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":1141,"mirror_url":null,"open_issues_count":1224,"forks":1141,"open_issues":1224,"watchers":5410,"default_branch":"master"}},"base":{"label":"JuliaLang:master","ref":"master","sha":"8bcdb3fa91129f09a05cc7071b195018d254863c","user":{"login":"JuliaLang","id":743164,"avatar_url":"https://avatars.githubusercontent.com/u/743164?v=3","gravatar_id":"","url":"https://api.github.com/users/JuliaLang","html_url":"https://github.com/JuliaLang","followers_url":"https://api.github.com/users/JuliaLang/followers","following_url":"https://api.github.com/users/JuliaLang/following{/other_user}","gists_url":"https://api.github.com/users/JuliaLang/gists{/gist_id}","starred_url":"https://api.github.com/users/JuliaLang/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/JuliaLang/subscriptions","organizations_url":"https://api.github.com/users/JuliaLang/orgs","repos_url":"https://api.github.com/users/JuliaLang/repos","events_url":"https://api.github.com/users/JuliaLang/events{/privacy}","received_events_url":"https://api.github.com/users/JuliaLang/received_events","type":"Organization","site_admin":false},"repo":{"id":1644196,"name":"julia","full_name":"JuliaLang/julia","owner":{"login":"JuliaLang","id":743164,"avatar_url":"https://avatars.githubusercontent.com/u/743164?v=3","gravatar_id":"","url":"https://api.github.com/users/JuliaLang","html_url":"https://github.com/JuliaLang","followers_url":"https://api.github.com/users/JuliaLang/followers","following_url":"https://api.github.com/users/JuliaLang/following{/other_user}","gists_url":"https://api.github.com/users/JuliaLang/gists{/gist_id}","starred_url":"https://api.github.com/users/JuliaLang/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/JuliaLang/subscriptions","organizations_url":"https://api.github.com/users/JuliaLang/orgs","repos_url":"https://api.github.com/users/JuliaLang/repos","events_url":"https://api.github.com/users/JuliaLang/events{/privacy}","received_events_url":"https://api.github.com/users/JuliaLang/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/JuliaLang/julia","description":"The Julia Language: A fresh approach to technical computing.","fork":false,"url":"https://api.github.com/repos/JuliaLang/julia","forks_url":"https://api.github.com/repos/JuliaLang/julia/forks","keys_url":"https://api.github.com/repos/JuliaLang/julia/keys{/key_id}","collaborators_url":"https://api.github.com/repos/JuliaLang/julia/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/JuliaLang/julia/teams","hooks_url":"https://api.github.com/repos/JuliaLang/julia/hooks","issue_events_url":"https://api.github.com/repos/JuliaLang/julia/issues/events{/number}","events_url":"https://api.github.com/repos/JuliaLang/julia/events","assignees_url":"https://api.github.com/repos/JuliaLang/julia/assignees{/user}","branches_url":"https://api.github.com/repos/JuliaLang/julia/branches{/branch}","tags_url":"https://api.github.com/repos/JuliaLang/julia/tags","blobs_url":"https://api.github.com/repos/JuliaLang/julia/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/JuliaLang/julia/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/JuliaLang/julia/git/refs{/sha}","trees_url":"https://api.github.com/repos/JuliaLang/julia/git/trees{/sha}","statuses_url":"https://api.github.com/repos/JuliaLang/julia/statuses/{sha}","languages_url":"https://api.github.com/repos/JuliaLang/julia/languages","stargazers_url":"https://api.github.com/repos/JuliaLang/julia/stargazers","contributors_url":"https://api.github.com/repos/JuliaLang/julia/contributors","subscribers_url":"https://api.github.com/repos/JuliaLang/julia/subscribers","subscription_url":"https://api.github.com/repos/JuliaLang/julia/subscription","commits_url":"https://api.github.com/repos/JuliaLang/julia/commits{/sha}","git_commits_url":"https://api.github.com/repos/JuliaLang/julia/git/commits{/sha}","comments_url":"https://api.github.com/repos/JuliaLang/julia/comments{/number}","issue_comment_url":"https://api.github.com/repos/JuliaLang/julia/issues/comments{/number}","contents_url":"https://api.github.com/repos/JuliaLang/julia/contents/{+path}","compare_url":"https://api.github.com/repos/JuliaLang/julia/compare/{base}...{head}","merges_url":"https://api.github.com/repos/JuliaLang/julia/merges","archive_url":"https://api.github.com/repos/JuliaLang/julia/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/JuliaLang/julia/downloads","issues_url":"https://api.github.com/repos/JuliaLang/julia/issues{/number}","pulls_url":"https://api.github.com/repos/JuliaLang/julia/pulls{/number}","milestones_url":"https://api.github.com/repos/JuliaLang/julia/milestones{/number}","notifications_url":"https://api.github.com/repos/JuliaLang/julia/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/JuliaLang/julia/labels{/name}","releases_url":"https://api.github.com/repos/JuliaLang/julia/releases{/id}","created_at":"2011-04-21T07:01:50Z","updated_at":"2015-04-25T17:25:18Z","pushed_at":"2015-04-25T16:46:14Z","git_url":"git://github.com/JuliaLang/julia.git","ssh_url":"git@github.com:JuliaLang/julia.git","clone_url":"https://github.com/JuliaLang/julia.git","svn_url":"https://github.com/JuliaLang/julia","homepage":"http://julialang.org/","size":195881,"stargazers_count":5410,"watchers_count":5410,"language":"Julia","has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":1141,"mirror_url":null,"open_issues_count":1224,"forks":1141,"open_issues":1224,"watchers":5410,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/JuliaLang/julia/pulls/10525"},"html":{"href":"https://github.com/JuliaLang/julia/pull/10525"},"issue":{"href":"https://api.github.com/repos/JuliaLang/julia/issues/10525"},"comments":{"href":"https://api.github.com/repos/JuliaLang/julia/issues/10525/comments"},"review_comments":{"href":"https://api.github.com/repos/JuliaLang/julia/pulls/10525/comments"},"review_comment":{"href":"https://api.github.com/repos/JuliaLang/julia/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/JuliaLang/julia/pulls/10525/commits"},"statuses":{"href":"https://api.github.com/repos/JuliaLang/julia/statuses/70d365e57409c0b30bd9cfd59213c3157531ee19"}}}}