<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=utf-8"><meta name=Generator content="Microsoft Word 15 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
        {mso-style-priority:34;
        margin-top:0in;
        margin-right:0in;
        margin-bottom:0in;
        margin-left:.5in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
.MsoChpDefault
        {mso-style-type:export-only;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
/* List Definitions */
@list l0
        {mso-list-id:1404597250;
        mso-list-type:hybrid;
        mso-list-template-ids:-1704151412 -1 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
@list l0:level1
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l0:level2
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l0:level3
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        text-indent:-9.0pt;}
@list l0:level4
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l0:level5
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l0:level6
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        text-indent:-9.0pt;}
@list l0:level7
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l0:level8
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l0:level9
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        text-indent:-9.0pt;}
ol
        {margin-bottom:0in;}
ul
        {margin-bottom:0in;}
--></style></head><body lang=EN-US link=blue vlink="#954F72"><div class=WordSection1><p class=MsoNormal>It can be anything, but “good practice” is to use a number that would have 2 properties:</p><p class=MsoNormal><o:p> </o:p></p><ol style='margin-top:0in' start=1 type=1><li class=MsoListParagraph style='margin-left:0in;mso-list:l0 level1 lfo1'>When expressed as binary number, it would have a large number of both 0s and 1s</li><li class=MsoListParagraph style='margin-left:0in;mso-list:l0 level1 lfo1'>The total number of digits in the binary representation is somewhere between 32 and 128.</li></ol><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The binary representation of the one I chose (by mashing numbers) is:</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>'0b10011110000100100101100111001110010001101111111001100111100011000101001111111100100010000'</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This has 43 0s and 46 1s.</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Many people just use 0, which is fine in the sense that the stream should have the same properties as if any of 2**N number were chosen. Simple choices so, however, have a slight consequence in the sense that these generate strange dependence across researchers if everyone uses a small number of seeds (e.g., 0 or 1234).</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Kevin</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><o:p> </o:p></p><div style='mso-element:para-border-div;border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in'><p class=MsoNormal style='border:none;padding:0in'><b>From: </b><a href="mailto:evgeny.burovskiy@gmail.com">Evgeni Burovski</a><br><b>Sent: </b>Monday, June 29, 2020 4:01 PM<br><b>To: </b><a href="mailto:numpy-discussion@python.org">Discussion of Numerical Python</a><br><b>Subject: </b>Re: [Numpy-discussion] reseed random generator (1.19)</p></div><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Thanks Kevin!</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>A possibly dumb follow-up question: in your example,</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>> entropy = 382193877439745928479635728</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>is it relevant that `entropy` is a long integer? I.e., what are the</p><p class=MsoNormal>constraints on its value, can one use</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>entropy = 1234 or</p><p class=MsoNormal>entropy = 0 or</p><p class=MsoNormal>entropy = 1</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>instead?</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>On Mon, Jun 29, 2020 at 5:37 PM Kevin Sheppard</p><p class=MsoNormal><kevin.k.sheppard@gmail.com> wrote:</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> The best practice is to use a SeedSequence to spawn child SeedSequences, and then to use these children to initialize your generators or bit generators.</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> from numpy.random import SeedSequence, Generator, PCG64, default_rng</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> entropy = 382193877439745928479635728</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> seed_seq = SeedSequence(entropy)</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> NUM_STREAMS = 2**15</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> children = seed_seq.spawn(NUM_STREAMS)</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> # if you want the current best bit generator, which may change</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> rngs = [default_rng(child) for child in children]</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> # If you want the most control across version, set the bit generator</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> # this uses PCG64, which is the current default. Each bit generator needs to be wrapped in a generator</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> rngs = [Generator(PCG64(child)) for child in children]</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> Kevin</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> From: Evgeni Burovski</p><p class=MsoNormal>> Sent: Monday, June 29, 2020 2:21 PM</p><p class=MsoNormal>> To: Discussion of Numerical Python</p><p class=MsoNormal>> Subject: Re: [Numpy-discussion] reseed random generator (1.19)</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> (apologies for jumping into a conversation)</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> So what is the recommendation for instantiating a number of generators</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> with manually controlled seeds?</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> The use case is running a series of MC simulations with reproducible</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> streams. The runs are independent and are run in parallel in separate</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> OS processes, where I do not control the time each process starts</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> (jobs are submitted to the batch queue), so default seeding seems</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> dubious?</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> Previously, I would just do roughly</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> seeds = [1234, 1235, 1236, ...]</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> rngs = [np.random.RandomState(seed) for seed in seeds]</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> ...</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> and each process operates with its own `rng`.</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> What would be the recommended way with the new `Generator` framework?</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> A human-friendly way would be preferable if possible.</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> Thanks,</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> Evgeni</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> On Mon, Jun 29, 2020 at 3:20 PM Kevin Sheppard</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> <kevin.k.sheppard@gmail.com> wrote:</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> ></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> > If you want to use the same entropy-initialized generator for temporarily-reproducible experiments, then you can use</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> ></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> ></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> ></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> > gen = np.random.default_rng()</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> ></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> > state = gen.bit_generator.state</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> ></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> > gen.standard_normal()</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> ></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> > # 0.5644742559549797, will vary across runs</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> ></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> > gen.bit_generator.state = state</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> ></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> > gen.standard_normal()</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> ></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> > # Always the same as before 0.5644742559549797</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> ></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> ></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> ></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> > The equivalent to the old way of calling seed to reseed is:</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> ></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> ></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> ></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> > SEED = 918273645</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> ></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> > gen = np.random.default_rng(SEED)</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> ></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> > gen.standard_normal()</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> ></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> > # 0.12345677</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> ></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> > gen = np.random.default_rng(SEED)</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> ></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> > gen.standard_normal()</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> ></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> > # Identical value</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> ></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> ></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> ></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> > Rather than reseeding the same object, you just create a new object. At some point in the development of Generator both methods were timed and there was no performance to reusing the same object by reseeding.</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> ></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> ></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> ></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> > Kevin</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> ></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> ></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> ></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> ></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> ></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> ></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> ></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> > From: Neal Becker</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> > Sent: Monday, June 29, 2020 1:01 PM</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> > To: Discussion of Numerical Python</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> > Subject: Re: [Numpy-discussion] reseed random generator (1.19)</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> ></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> ></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> ></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> > I was using this to reset the generator, in order to repeat the same sequence again for testing purposes.</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> ></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> ></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> ></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> > On Wed, Jun 24, 2020 at 6:40 PM Robert Kern <robert.kern@gmail.com> wrote:</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> ></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> > On Wed, Jun 24, 2020 at 3:31 PM Neal Becker <ndbecker2@gmail.com> wrote:</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> ></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> > Consider the following:</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> ></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> ></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> ></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> > from numpy.random import default_rng</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> > rs = default_rng()</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> ></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> ></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> ></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> > Now how do I re-seed the generator?</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> ></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> > I thought perhaps rs.bit_generator.seed(), but there is no such attribute.</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> ></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> ></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> ></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> > In general, reseeding an existing generator instance is not a good practice. What effect are you trying to accomplish? I assume that you are asking this because you are currently using `RandomState.seed()`. In what circumstances?</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> ></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> ></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> ></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> > The raw `bit_generator.state` property *can* be assigned to, in order to support some advanced use cases (mostly involving de/serialization and similar kinds of meta-programming tasks). It's also been helpful for me to construct worst-case scenarios for testing parallel streams. But it quite deliberately bypasses the notion of deriving the state from a human-friendly seed number.</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> ></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> ></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> ></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> > --</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> ></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> > Robert Kern</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> ></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> > _______________________________________________</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> > NumPy-Discussion mailing list</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> > NumPy-Discussion@python.org</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> > https://mail.python.org/mailman/listinfo/numpy-discussion</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> ></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> ></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> ></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> ></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> > --</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> ></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> > Those who don't understand recursion are doomed to repeat it</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> ></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> ></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> ></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> > _______________________________________________</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> > NumPy-Discussion mailing list</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> > NumPy-Discussion@python.org</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> > https://mail.python.org/mailman/listinfo/numpy-discussion</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> _______________________________________________</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> NumPy-Discussion mailing list</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> NumPy-Discussion@python.org</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> https://mail.python.org/mailman/listinfo/numpy-discussion</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> _______________________________________________</p><p class=MsoNormal>> NumPy-Discussion mailing list</p><p class=MsoNormal>> NumPy-Discussion@python.org</p><p class=MsoNormal>> https://mail.python.org/mailman/listinfo/numpy-discussion</p><p class=MsoNormal>_______________________________________________</p><p class=MsoNormal>NumPy-Discussion mailing list</p><p class=MsoNormal>NumPy-Discussion@python.org</p><p class=MsoNormal>https://mail.python.org/mailman/listinfo/numpy-discussion</p><p class=MsoNormal><o:p> </o:p></p></div></body></html>