{"action":"created","comment":{"url":"https://api.github.com/repos/rust-lang-nursery/rand/pulls/comments/194167830","pull_request_review_id":127298362,"id":194167830,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDE5NDE2NzgzMA==","diff_hunk":"@@ -110,116 +117,204 @@ pub fn sample_slice<R, T>(rng: &mut R, slice: &[T], amount: usize) -> Vec<T>\n ///\n /// let mut rng = thread_rng();\n /// let values = vec![5, 6, 1, 3, 4, 6, 7];\n-/// println!(\"{:?}\", seq::sample_slice_ref(&mut rng, &values, 3));\n+/// println!(\"{:?}\", seq::sample_slice_ref(&mut rng, &values, 3, true));\n /// ```\n-pub fn sample_slice_ref<'a, R, T>(rng: &mut R, slice: &'a [T], amount: usize) -> Vec<&'a T>\n+///\n+/// [`sample_indices`]: fn.sample_indices.html\n+pub fn sample_slice_ref<'a, R, T>(rng: &mut R, slice: &'a [T], amount: usize,\n+    shuffled: bool) -> Vec<&'a T>\n     where R: Rng + ?Sized\n {\n-    let indices = sample_indices(rng, slice.len(), amount);\n+    let indices = sample_indices(rng, slice.len(), amount, shuffled);\n \n     let mut out = Vec::with_capacity(amount);\n-    out.extend(indices.iter().map(|i| &slice[*i]));\n+    out.extend(indices.iter().map(|i| &slice[*i as usize]));\n     out\n }\n \n-/// Randomly sample exactly `amount` indices from `0..length`.\n+/// Randomly sample exactly `amount` distinct indices from `0..length`.\n ///\n-/// The values are non-repeating and in random order.\n+/// If `shuffled == true` then the sampled values will be fully shuffled;\n+/// otherwise the values may only partially shuffled, depending on the\n+/// algorithm used (i.e. biases may exist in the ordering of sampled elements).\n+/// Depending on the algorithm used internally, full shuffling may add\n+/// significant overhead for `amount` > 10 or so, but not more than double\n+/// the time and often much less.\n ///\n-/// This implementation uses `O(amount)` time and memory.\n+/// This method is used internally by the slice sampling methods, but it can\n+/// sometimes be useful to have the indices themselves so this is provided as\n+/// an alternative.\n ///\n-/// This method is used internally by the slice sampling methods, but it can sometimes be useful to\n-/// have the indices themselves so this is provided as an alternative.\n+/// The implementation used is not specified; we automatically select the\n+/// fastest available implementation for the `length` and `amount` parameters\n+/// (based on detailed profiling on an Intel Haswell CPU). Roughly speaking,\n+/// complexity is `O(amount)`, except that when `amount` is small, performance\n+/// is closer to `O(amount^2)`, and when `length` is close to `amount` then\n+/// `O(length)`.\n ///\n-/// Panics if `amount > length`\n-pub fn sample_indices<R>(rng: &mut R, length: usize, amount: usize) -> Vec<usize>\n+/// Note that we only support `u32` indices since this covers the vast majority\n+/// of uses, and performance is significantly better than with `u64`.\n+/// \n+/// If an allocation-free `no_std` function is required, it is suggested\n+/// to adapt the internal `sample_indices_floyd` implementation.\n+///\n+/// Panics if `amount > length` or if `length` is not reprentable as a `u32`.\n+pub fn sample_indices<R>(rng: &mut R, length: usize, amount: usize,\n+    shuffled: bool) -> Vec<u32>\n     where R: Rng + ?Sized,\n {\n     if amount > length {\n-        panic!(\"`amount` must be less than or equal to `slice.len()`\");\n+        panic!(\"`amount` of samples must be less than or equal to `length`\");\n     }\n-\n-    // We are going to have to allocate at least `amount` for the output no matter what. However,\n-    // if we use the `cached` version we will have to allocate `amount` as a HashMap as well since\n-    // it inserts an element for every loop.\n-    //\n-    // Therefore, if `amount >= length / 2` then inplace will be both faster and use less memory.\n-    // In fact, benchmarks show the inplace version is faster for length up to about 20 times\n-    // faster than amount.\n-    //\n-    // TODO: there is probably even more fine-tuning that can be done here since\n-    // `HashMap::with_capacity(amount)` probably allocates more than `amount` in practice,\n-    // and a trade off could probably be made between memory/cpu, since hashmap operations\n-    // are slower than array index swapping.\n-    if amount >= length / 20 {\n-        sample_indices_inplace(rng, length, amount)\n+    if length > (::core::u32::MAX as usize) {\n+        panic!(\"`length` is not representable as `u32`\");\n+    }\n+    let amount = amount as u32;\n+    let length = length as u32;\n+    \n+    // Choice of algorithm here depends on both length and amount. See:\n+    // https://github.com/rust-lang-nursery/rand/pull/479\n+    // We do some calculations with u64 to avoid overflow.\n+\n+    if amount < 442 {\n+        const C: [[u64; 2]; 2] = [[5, 45], [50, 350]];\n+        let j = if length < 500_000 { 0 } else { 1 };\n+        let m4 = 6 * amount as u64;\n+        if C[0][j] * (length as u64) < (C[1][j] + m4) * amount as u64 {\n+            sample_indices_inplace(rng, length, amount)\n+        } else if shuffled {\n+            sample_indices_floyd_shuffled(rng, length, amount)","path":"src/seq.rs","position":141,"original_position":141,"commit_id":"40e7431411331f756049a982729eee762b7e2edd","original_commit_id":"40e7431411331f756049a982729eee762b7e2edd","user":{"login":"dhardy","id":134893,"node_id":"MDQ6VXNlcjEzNDg5Mw==","avatar_url":"https://avatars1.githubusercontent.com/u/134893?v=4","gravatar_id":"","url":"https://api.github.com/users/dhardy","html_url":"https://github.com/dhardy","followers_url":"https://api.github.com/users/dhardy/followers","following_url":"https://api.github.com/users/dhardy/following{/other_user}","gists_url":"https://api.github.com/users/dhardy/gists{/gist_id}","starred_url":"https://api.github.com/users/dhardy/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dhardy/subscriptions","organizations_url":"https://api.github.com/users/dhardy/orgs","repos_url":"https://api.github.com/users/dhardy/repos","events_url":"https://api.github.com/users/dhardy/events{/privacy}","received_events_url":"https://api.github.com/users/dhardy/received_events","type":"User","site_admin":false},"body":"Hmm, I guess it could be. I should have benchmarked that!","created_at":"2018-06-08T20:06:18Z","updated_at":"2018-06-08T20:06:18Z","html_url":"https://github.com/rust-lang-nursery/rand/pull/479#discussion_r194167830","pull_request_url":"https://api.github.com/repos/rust-lang-nursery/rand/pulls/479","author_association":"COLLABORATOR","_links":{"self":{"href":"https://api.github.com/repos/rust-lang-nursery/rand/pulls/comments/194167830"},"html":{"href":"https://github.com/rust-lang-nursery/rand/pull/479#discussion_r194167830"},"pull_request":{"href":"https://api.github.com/repos/rust-lang-nursery/rand/pulls/479"}},"in_reply_to_id":194141402},"pull_request":{"url":"https://api.github.com/repos/rust-lang-nursery/rand/pulls/479","id":190683792,"node_id":"MDExOlB1bGxSZXF1ZXN0MTkwNjgzNzky","html_url":"https://github.com/rust-lang-nursery/rand/pull/479","diff_url":"https://github.com/rust-lang-nursery/rand/pull/479.diff","patch_url":"https://github.com/rust-lang-nursery/rand/pull/479.patch","issue_url":"https://api.github.com/repos/rust-lang-nursery/rand/issues/479","number":479,"state":"open","locked":false,"title":"seq: use Floyd's combination algorithm to sample indices","user":{"login":"dhardy","id":134893,"node_id":"MDQ6VXNlcjEzNDg5Mw==","avatar_url":"https://avatars1.githubusercontent.com/u/134893?v=4","gravatar_id":"","url":"https://api.github.com/users/dhardy","html_url":"https://github.com/dhardy","followers_url":"https://api.github.com/users/dhardy/followers","following_url":"https://api.github.com/users/dhardy/following{/other_user}","gists_url":"https://api.github.com/users/dhardy/gists{/gist_id}","starred_url":"https://api.github.com/users/dhardy/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dhardy/subscriptions","organizations_url":"https://api.github.com/users/dhardy/orgs","repos_url":"https://api.github.com/users/dhardy/repos","events_url":"https://api.github.com/users/dhardy/events{/privacy}","received_events_url":"https://api.github.com/users/dhardy/received_events","type":"User","site_admin":false},"body":"Adapt #144 for sampling indices\r\n\r\nThis isn't the fully generic implementation that @burdges wrote; we could make this more generic. I'm guessing we could include an arbitrary lower bound without performance overhead (since the compiler can probably eliminate a constant of 0), and could also use generic typing.\r\n\r\nI'm not really sure if it should be committed like this. It cleans up the code and improves performance in some cases, but isn't optimal in others. We could keep the old `sample_indices_inplace` and just replace `sample_indices_cache`.\r\n\r\n```\r\n# before\r\ntest gen_1k_sample_iter              ... bench:         390 ns/iter (+/- 4) = 2625 MB/s                                                \r\ntest misc_sample_indices_100_of_1k   ... bench:         806 ns/iter (+/- 8)                                                            \r\ntest misc_sample_indices_10_of_1k    ... bench:         594 ns/iter (+/- 9)                                                            \r\ntest misc_sample_indices_50_of_1k    ... bench:         472 ns/iter (+/- 8)                                                            \r\ntest misc_sample_iter_10_of_100      ... bench:       1,072 ns/iter (+/- 15)                                                           \r\ntest misc_sample_slice_10_of_100     ... bench:         160 ns/iter (+/- 2)                                                            \r\ntest misc_sample_slice_ref_10_of_100 ... bench:         160 ns/iter (+/- 2)                                                            \r\n# after                                                                                                       \r\ntest gen_1k_sample_iter              ... bench:         391 ns/iter (+/- 27) = 2618 MB/s\r\ntest misc_sample_indices_100_of_1k   ... bench:       2,031 ns/iter (+/- 39)\r\ntest misc_sample_indices_10_of_1k    ... bench:          90 ns/iter (+/- 1)\r\ntest misc_sample_indices_50_of_1k    ... bench:         649 ns/iter (+/- 11)\r\ntest misc_sample_iter_10_of_100      ... bench:       1,083 ns/iter (+/- 16)\r\ntest misc_sample_slice_10_of_100     ... bench:         157 ns/iter (+/- 1)\r\ntest misc_sample_slice_ref_10_of_100 ... bench:         158 ns/iter (+/- 3)                                                      \r\n````","created_at":"2018-05-25T20:09:32Z","updated_at":"2018-06-08T20:06:18Z","closed_at":null,"merged_at":null,"merge_commit_sha":"fdf9aeb47db6cdf6c0d948813e460fae4172e089","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[{"id":626813540,"node_id":"MDU6TGFiZWw2MjY4MTM1NDA=","url":"https://api.github.com/repos/rust-lang-nursery/rand/labels/B-API","name":"B-API","color":"ff8000","default":false},{"id":866995411,"node_id":"MDU6TGFiZWw4NjY5OTU0MTE=","url":"https://api.github.com/repos/rust-lang-nursery/rand/labels/D-review","name":"D-review","color":"fbca04","default":false},{"id":776652113,"node_id":"MDU6TGFiZWw3NzY2NTIxMTM=","url":"https://api.github.com/repos/rust-lang-nursery/rand/labels/T-sequences","name":"T-sequences","color":"bf8f00","default":false}],"milestone":null,"commits_url":"https://api.github.com/repos/rust-lang-nursery/rand/pulls/479/commits","review_comments_url":"https://api.github.com/repos/rust-lang-nursery/rand/pulls/479/comments","review_comment_url":"https://api.github.com/repos/rust-lang-nursery/rand/pulls/comments{/number}","comments_url":"https://api.github.com/repos/rust-lang-nursery/rand/issues/479/comments","statuses_url":"https://api.github.com/repos/rust-lang-nursery/rand/statuses/40e7431411331f756049a982729eee762b7e2edd","head":{"label":"dhardy:sample_floyd","ref":"sample_floyd","sha":"40e7431411331f756049a982729eee762b7e2edd","user":{"login":"dhardy","id":134893,"node_id":"MDQ6VXNlcjEzNDg5Mw==","avatar_url":"https://avatars1.githubusercontent.com/u/134893?v=4","gravatar_id":"","url":"https://api.github.com/users/dhardy","html_url":"https://github.com/dhardy","followers_url":"https://api.github.com/users/dhardy/followers","following_url":"https://api.github.com/users/dhardy/following{/other_user}","gists_url":"https://api.github.com/users/dhardy/gists{/gist_id}","starred_url":"https://api.github.com/users/dhardy/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dhardy/subscriptions","organizations_url":"https://api.github.com/users/dhardy/orgs","repos_url":"https://api.github.com/users/dhardy/repos","events_url":"https://api.github.com/users/dhardy/events{/privacy}","received_events_url":"https://api.github.com/users/dhardy/received_events","type":"User","site_admin":false},"repo":{"id":98670438,"node_id":"MDEwOlJlcG9zaXRvcnk5ODY3MDQzOA==","name":"rand","full_name":"dhardy/rand","owner":{"login":"dhardy","id":134893,"node_id":"MDQ6VXNlcjEzNDg5Mw==","avatar_url":"https://avatars1.githubusercontent.com/u/134893?v=4","gravatar_id":"","url":"https://api.github.com/users/dhardy","html_url":"https://github.com/dhardy","followers_url":"https://api.github.com/users/dhardy/followers","following_url":"https://api.github.com/users/dhardy/following{/other_user}","gists_url":"https://api.github.com/users/dhardy/gists{/gist_id}","starred_url":"https://api.github.com/users/dhardy/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dhardy/subscriptions","organizations_url":"https://api.github.com/users/dhardy/orgs","repos_url":"https://api.github.com/users/dhardy/repos","events_url":"https://api.github.com/users/dhardy/events{/privacy}","received_events_url":"https://api.github.com/users/dhardy/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/dhardy/rand","description":null,"fork":true,"url":"https://api.github.com/repos/dhardy/rand","forks_url":"https://api.github.com/repos/dhardy/rand/forks","keys_url":"https://api.github.com/repos/dhardy/rand/keys{/key_id}","collaborators_url":"https://api.github.com/repos/dhardy/rand/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/dhardy/rand/teams","hooks_url":"https://api.github.com/repos/dhardy/rand/hooks","issue_events_url":"https://api.github.com/repos/dhardy/rand/issues/events{/number}","events_url":"https://api.github.com/repos/dhardy/rand/events","assignees_url":"https://api.github.com/repos/dhardy/rand/assignees{/user}","branches_url":"https://api.github.com/repos/dhardy/rand/branches{/branch}","tags_url":"https://api.github.com/repos/dhardy/rand/tags","blobs_url":"https://api.github.com/repos/dhardy/rand/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/dhardy/rand/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/dhardy/rand/git/refs{/sha}","trees_url":"https://api.github.com/repos/dhardy/rand/git/trees{/sha}","statuses_url":"https://api.github.com/repos/dhardy/rand/statuses/{sha}","languages_url":"https://api.github.com/repos/dhardy/rand/languages","stargazers_url":"https://api.github.com/repos/dhardy/rand/stargazers","contributors_url":"https://api.github.com/repos/dhardy/rand/contributors","subscribers_url":"https://api.github.com/repos/dhardy/rand/subscribers","subscription_url":"https://api.github.com/repos/dhardy/rand/subscription","commits_url":"https://api.github.com/repos/dhardy/rand/commits{/sha}","git_commits_url":"https://api.github.com/repos/dhardy/rand/git/commits{/sha}","comments_url":"https://api.github.com/repos/dhardy/rand/comments{/number}","issue_comment_url":"https://api.github.com/repos/dhardy/rand/issues/comments{/number}","contents_url":"https://api.github.com/repos/dhardy/rand/contents/{+path}","compare_url":"https://api.github.com/repos/dhardy/rand/compare/{base}...{head}","merges_url":"https://api.github.com/repos/dhardy/rand/merges","archive_url":"https://api.github.com/repos/dhardy/rand/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/dhardy/rand/downloads","issues_url":"https://api.github.com/repos/dhardy/rand/issues{/number}","pulls_url":"https://api.github.com/repos/dhardy/rand/pulls{/number}","milestones_url":"https://api.github.com/repos/dhardy/rand/milestones{/number}","notifications_url":"https://api.github.com/repos/dhardy/rand/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/dhardy/rand/labels{/name}","releases_url":"https://api.github.com/repos/dhardy/rand/releases{/id}","deployments_url":"https://api.github.com/repos/dhardy/rand/deployments","created_at":"2017-07-28T17:04:25Z","updated_at":"2018-05-30T16:00:57Z","pushed_at":"2018-06-08T09:57:54Z","git_url":"git://github.com/dhardy/rand.git","ssh_url":"git@github.com:dhardy/rand.git","clone_url":"https://github.com/dhardy/rand.git","svn_url":"https://github.com/dhardy/rand","homepage":"http://doc.rust-lang.org/rand","size":94190,"stargazers_count":2,"watchers_count":2,"language":"Rust","has_issues":true,"has_projects":false,"has_downloads":true,"has_wiki":false,"has_pages":true,"forks_count":2,"mirror_url":null,"archived":false,"open_issues_count":6,"license":{"key":"other","name":"Other","spdx_id":null,"url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":2,"open_issues":6,"watchers":2,"default_branch":"master"}},"base":{"label":"rust-lang-nursery:master","ref":"master","sha":"276c8be320710330ad51a72f304f16475c8ae8cc","user":{"login":"rust-lang-nursery","id":14631425,"node_id":"MDEyOk9yZ2FuaXphdGlvbjE0NjMxNDI1","avatar_url":"https://avatars1.githubusercontent.com/u/14631425?v=4","gravatar_id":"","url":"https://api.github.com/users/rust-lang-nursery","html_url":"https://github.com/rust-lang-nursery","followers_url":"https://api.github.com/users/rust-lang-nursery/followers","following_url":"https://api.github.com/users/rust-lang-nursery/following{/other_user}","gists_url":"https://api.github.com/users/rust-lang-nursery/gists{/gist_id}","starred_url":"https://api.github.com/users/rust-lang-nursery/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rust-lang-nursery/subscriptions","organizations_url":"https://api.github.com/users/rust-lang-nursery/orgs","repos_url":"https://api.github.com/users/rust-lang-nursery/repos","events_url":"https://api.github.com/users/rust-lang-nursery/events{/privacy}","received_events_url":"https://api.github.com/users/rust-lang-nursery/received_events","type":"Organization","site_admin":false},"repo":{"id":30227790,"node_id":"MDEwOlJlcG9zaXRvcnkzMDIyNzc5MA==","name":"rand","full_name":"rust-lang-nursery/rand","owner":{"login":"rust-lang-nursery","id":14631425,"node_id":"MDEyOk9yZ2FuaXphdGlvbjE0NjMxNDI1","avatar_url":"https://avatars1.githubusercontent.com/u/14631425?v=4","gravatar_id":"","url":"https://api.github.com/users/rust-lang-nursery","html_url":"https://github.com/rust-lang-nursery","followers_url":"https://api.github.com/users/rust-lang-nursery/followers","following_url":"https://api.github.com/users/rust-lang-nursery/following{/other_user}","gists_url":"https://api.github.com/users/rust-lang-nursery/gists{/gist_id}","starred_url":"https://api.github.com/users/rust-lang-nursery/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rust-lang-nursery/subscriptions","organizations_url":"https://api.github.com/users/rust-lang-nursery/orgs","repos_url":"https://api.github.com/users/rust-lang-nursery/repos","events_url":"https://api.github.com/users/rust-lang-nursery/events{/privacy}","received_events_url":"https://api.github.com/users/rust-lang-nursery/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/rust-lang-nursery/rand","description":"A Rust library for random number generation.","fork":false,"url":"https://api.github.com/repos/rust-lang-nursery/rand","forks_url":"https://api.github.com/repos/rust-lang-nursery/rand/forks","keys_url":"https://api.github.com/repos/rust-lang-nursery/rand/keys{/key_id}","collaborators_url":"https://api.github.com/repos/rust-lang-nursery/rand/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/rust-lang-nursery/rand/teams","hooks_url":"https://api.github.com/repos/rust-lang-nursery/rand/hooks","issue_events_url":"https://api.github.com/repos/rust-lang-nursery/rand/issues/events{/number}","events_url":"https://api.github.com/repos/rust-lang-nursery/rand/events","assignees_url":"https://api.github.com/repos/rust-lang-nursery/rand/assignees{/user}","branches_url":"https://api.github.com/repos/rust-lang-nursery/rand/branches{/branch}","tags_url":"https://api.github.com/repos/rust-lang-nursery/rand/tags","blobs_url":"https://api.github.com/repos/rust-lang-nursery/rand/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/rust-lang-nursery/rand/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/rust-lang-nursery/rand/git/refs{/sha}","trees_url":"https://api.github.com/repos/rust-lang-nursery/rand/git/trees{/sha}","statuses_url":"https://api.github.com/repos/rust-lang-nursery/rand/statuses/{sha}","languages_url":"https://api.github.com/repos/rust-lang-nursery/rand/languages","stargazers_url":"https://api.github.com/repos/rust-lang-nursery/rand/stargazers","contributors_url":"https://api.github.com/repos/rust-lang-nursery/rand/contributors","subscribers_url":"https://api.github.com/repos/rust-lang-nursery/rand/subscribers","subscription_url":"https://api.github.com/repos/rust-lang-nursery/rand/subscription","commits_url":"https://api.github.com/repos/rust-lang-nursery/rand/commits{/sha}","git_commits_url":"https://api.github.com/repos/rust-lang-nursery/rand/git/commits{/sha}","comments_url":"https://api.github.com/repos/rust-lang-nursery/rand/comments{/number}","issue_comment_url":"https://api.github.com/repos/rust-lang-nursery/rand/issues/comments{/number}","contents_url":"https://api.github.com/repos/rust-lang-nursery/rand/contents/{+path}","compare_url":"https://api.github.com/repos/rust-lang-nursery/rand/compare/{base}...{head}","merges_url":"https://api.github.com/repos/rust-lang-nursery/rand/merges","archive_url":"https://api.github.com/repos/rust-lang-nursery/rand/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/rust-lang-nursery/rand/downloads","issues_url":"https://api.github.com/repos/rust-lang-nursery/rand/issues{/number}","pulls_url":"https://api.github.com/repos/rust-lang-nursery/rand/pulls{/number}","milestones_url":"https://api.github.com/repos/rust-lang-nursery/rand/milestones{/number}","notifications_url":"https://api.github.com/repos/rust-lang-nursery/rand/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/rust-lang-nursery/rand/labels{/name}","releases_url":"https://api.github.com/repos/rust-lang-nursery/rand/releases{/id}","deployments_url":"https://api.github.com/repos/rust-lang-nursery/rand/deployments","created_at":"2015-02-03T05:59:32Z","updated_at":"2018-06-08T10:00:28Z","pushed_at":"2018-06-08T20:03:44Z","git_url":"git://github.com/rust-lang-nursery/rand.git","ssh_url":"git@github.com:rust-lang-nursery/rand.git","clone_url":"https://github.com/rust-lang-nursery/rand.git","svn_url":"https://github.com/rust-lang-nursery/rand","homepage":"https://crates.io/crates/rand","size":85970,"stargazers_count":212,"watchers_count":212,"language":"Rust","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":141,"mirror_url":null,"archived":false,"open_issues_count":48,"license":{"key":"other","name":"Other","spdx_id":null,"url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":141,"open_issues":48,"watchers":212,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/rust-lang-nursery/rand/pulls/479"},"html":{"href":"https://github.com/rust-lang-nursery/rand/pull/479"},"issue":{"href":"https://api.github.com/repos/rust-lang-nursery/rand/issues/479"},"comments":{"href":"https://api.github.com/repos/rust-lang-nursery/rand/issues/479/comments"},"review_comments":{"href":"https://api.github.com/repos/rust-lang-nursery/rand/pulls/479/comments"},"review_comment":{"href":"https://api.github.com/repos/rust-lang-nursery/rand/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/rust-lang-nursery/rand/pulls/479/commits"},"statuses":{"href":"https://api.github.com/repos/rust-lang-nursery/rand/statuses/40e7431411331f756049a982729eee762b7e2edd"}},"author_association":"COLLABORATOR"}}
{"actor":{"display_login":"dhardy"}}