<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
</head>
<body bgcolor="#ffffff" text="#000000">
Well, given that there is no actual guarantee of the iteration
order, there is no guarantee of the distribution of the picks.<br>
<br>
I know it is not likely, but we can't prove it is impossible that
this strategy answers always the same element. All we need is
extremely bad luck so the collections are rehashed following the
RNG! In practice, what is possible, is that the distribution is not
exactly uniform.<br>
<br>
Another problem is with reproducibility of the results. In tests, or
any other situation where you need to guarantee the same results, it
is usually enough to use the same seeds for the RNGs. In these
cases, results would not be reproducible, because there is no
guarantee of sequencing between successive runs. Especially if the
image is restarted, or the data is recreated, in a different image.<br>
<br>
What I'd assume is that the user knows what they are doing. Maybe a
warning in a comment in those methods is in order.<br>
<br>
Thanks,<br>
<br>
On 5/13/2022 7:11 PM, Luciano Notarfrancesco via Cuis-dev wrote:
<blockquote
cite="mid:CAL5GDyrxBJS9LRKZpcQ_M6DOFqOX3XU+py0T6T-Hv=8K20QR8Q@mail.gmail.com"
type="cite">
<meta http-equiv="Context-Type" content="text/html; charset=UTF-8">
<div>What do you mean by good random properties? It should be
uniformly distributed. Do you see any problem in
Collection>>#atRandom: or Bag>>#atRandom:?</div>
<div><br>
</div>
<div>Thanks!</div>
<div>Luciano</div>
<div><br>
<div>
<div>On Sat, 14 May 2022 at 4:57 AM Juan Vuletich <<a
moz-do-not-send="true" href="mailto:JuanVuletich@zoho.com">JuanVuletich@zoho.com</a>>
wrote:<br>
</div>
<blockquote>
<div> Anyone using #atRandom: on a non-sequenceable
collection should be aware that no good random properties
can be guaranteed, right?<br>
<br>
Anyway, just pushed to GitHub.<br>
<br>
Thanks,</div>
<div><br>
<br>
On 5/9/2022 7:56 AM, Luciano Notarfrancesco via Cuis-dev
wrote:
<blockquote type="cite">
<div>Juan, please don't forget to look at the changeset
in my previous mail when you have time.
<div><br>
</div>
<div>Here are some additional tweaks. I reimplemented
Collection>>#identityIncludes: using
#allSatisfy: instead of #do:, in this way it is fast
for Bags too, and it mirrors the implementation of
Collection>>#includes:.</div>
<div><br>
</div>
<div>I also implemented a fast Bag>>#atRandom:,
and implemented a general
Collection>>#atRandom:. Originally #atRandom:
was not implemented in Collection, so I implemented
a generic version that only assumes the collection
understands #size and #do:.</div>
<div><br>
</div>
<div>Thanks,</div>
<div>Luciano</div>
</div>
<br>
<div>
<div>On Tue, May 3, 2022 at 7:54 AM Luciano
Notarfrancesco <<a moz-do-not-send="true"
href="mailto:luchiano@gmail.com">luchiano@gmail.com</a>>
wrote:<br>
</div>
<blockquote>
<div>Here are some more methods that take advantage
of the structure of a Bag (#allSatisfy:,
#anySatisfy:, #max:, #min:, #sum:, etc).
<div><br>
</div>
<div>Also made some tweaks to some methods in
Collection to call existing methods instead of
reimplementing, in order to simplify the changes
in Bag (otherwise. for example, I'd have to
implement #sum, #sum: and #sum:ifEmpty: in Bag
instead of only implementing #sum:ifEmpty). And
I changed Collection>>#product to produce
an error when the collection is empty instead of
returning 1 (to be consistent with
Collection>>#sum:).</div>
<div><br>
</div>
<div>All base image tests pass, but please review.
<div><br>
</div>
<div>Also, while running tests I got a walkback
on BitBltCanvasEngine, see the attached log.</div>
</div>
</div>
</blockquote>
</div>
</blockquote>
<br>
<br>
<pre>--
Juan Vuletich
<a moz-do-not-send="true" href="http://www.cuis-smalltalk.org">www.cuis-smalltalk.org</a>
<a moz-do-not-send="true" href="https://github.com/Cuis-Smalltalk/Cuis-Smalltalk-Dev">https://github.com/Cuis-Smalltalk/Cuis-Smalltalk-Dev</a>
<a moz-do-not-send="true" href="https://github.com/jvuletich">https://github.com/jvuletich</a>
<a moz-do-not-send="true" href="https://www.linkedin.com/in/juan-vuletich-75611b3">https://www.linkedin.com/in/juan-vuletich-75611b3</a>
<a moz-do-not-send="true" href="https://independent.academia.edu/JuanVuletich">https://independent.academia.edu/JuanVuletich</a>
<a moz-do-not-send="true" href="https://www.researchgate.net/profile/Juan-Vuletich">https://www.researchgate.net/profile/Juan-Vuletich</a>
<a moz-do-not-send="true" href="https://patents.justia.com/inventor/juan-manuel-vuletich">https://patents.justia.com/inventor/juan-manuel-vuletich</a>
<a moz-do-not-send="true" href="https://twitter.com/JuanVuletich">https://twitter.com/JuanVuletich</a></pre>
</div>
</blockquote>
</div>
</div>
</blockquote>
<br>
<br>
<pre class="moz-signature" cols="72">--
Juan Vuletich
<a class="moz-txt-link-abbreviated" href="http://www.cuis-smalltalk.org">www.cuis-smalltalk.org</a>
<a class="moz-txt-link-freetext" href="https://github.com/Cuis-Smalltalk/Cuis-Smalltalk-Dev">https://github.com/Cuis-Smalltalk/Cuis-Smalltalk-Dev</a>
<a class="moz-txt-link-freetext" href="https://github.com/jvuletich">https://github.com/jvuletich</a>
<a class="moz-txt-link-freetext" href="https://www.linkedin.com/in/juan-vuletich-75611b3">https://www.linkedin.com/in/juan-vuletich-75611b3</a>
<a class="moz-txt-link-freetext" href="https://independent.academia.edu/JuanVuletich">https://independent.academia.edu/JuanVuletich</a>
<a class="moz-txt-link-freetext" href="https://www.researchgate.net/profile/Juan-Vuletich">https://www.researchgate.net/profile/Juan-Vuletich</a>
<a class="moz-txt-link-freetext" href="https://patents.justia.com/inventor/juan-manuel-vuletich">https://patents.justia.com/inventor/juan-manuel-vuletich</a>
<a class="moz-txt-link-freetext" href="https://twitter.com/JuanVuletich">https://twitter.com/JuanVuletich</a></pre>
</body>
</html>