<div dir="ltr"><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small;color:rgb(0,0,0)">Thank you for all of your suggestions. </div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small;color:rgb(0,0,0)"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small;color:rgb(0,0,0)">I've made updates to the 'testseq' function. I've detailed the changes below. You can view the code on my github: <a href="https://github.com/Adil-Iqbal/Personal-Projects/blob/master/Test%20Sequence/testseq.py">https://github.com/Adil-Iqbal/Personal-Projects/blob/master/Test%20Sequence/testseq.py</a></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small;color:rgb(0,0,0)"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small;color:rgb(0,0,0)">I agree with Peter that perhaps Scripts would be a better location for this function. All of the utilities in SeqUtils seem to be augmenting already existing sequences. "testseq" seems a bit out of place. </div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small;color:rgb(0,0,0)"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small;color:rgb(0,0,0)">I have instantiated the Random class as suggested by Andrew and everything is working as intended. "testseq" should not be interfering with any other code in Biopython.</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small;color:rgb(0,0,0)"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small;color:rgb(0,0,0)">I have also now added Biopython Warnings to better communicate with the end user.</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small;color:rgb(0,0,0)">Thanks for the suggestion Andrew. </div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small;color:rgb(0,0,0)"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small;color:rgb(0,0,0)">I ran into some issues when I tried to simplify the seeding code. I made some notes during testing, I'll copy paste them below:</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small;color:rgb(0,0,0)"><pre style="font-family:"Courier New";font-size:9pt"><span style="color:rgb(0,128,128);font-weight:bold">My design goal is to write a function that is both able to produce unique sequences with<br></span><span style="color:rgb(0,128,128);font-weight:bold">each function call AND able to pass the doctests reliably.<br></span><span style="color:rgb(0,128,128);font-weight:bold">Unfortunately, the random seeding seems to have some odd behavior. I will detail them below:<br></span><span style="color:rgb(0,128,128);font-weight:bold">1. If I have NEVER seeded the RNG, the function will re-seed the RNG every time it is called --<br></span><span style="color:rgb(0,128,128);font-weight:bold">thereby by producing unique sequences with each function call. Unfortunately, this approach lead to<br></span><span style="color:rgb(0,128,128);font-weight:bold">the doctest failures and could not be utilized.<br></span><span style="color:rgb(0,128,128);font-weight:bold">2. If I seed the RNG, and then REMOVE the seed to try and reproduce earlier behavior, the<br></span><span style="color:rgb(0,128,128);font-weight:bold">behavior changes to seed the RNG using the system date and time (You can read about this in the<br></span><span style="color:rgb(0,128,128);font-weight:bold">python documentation. "random.seed(a=None)") Such behavior can only produce a unique sequence<br></span><span style="color:rgb(0,128,128);font-weight:bold">once every second. If the function is called more than once per second, e.g. in a for-loop, the<br></span><span style="color:rgb(0,128,128);font-weight:bold">design-goal fails.<br></span><span style="color:rgb(0,128,128);font-weight:bold">3. My solution to the above problems was to have the global variable "shuffle_seed" which<br></span><span style="color:rgb(0,128,128);font-weight:bold">increments with each function call. When the "shuffle_seed" global seeds the RNG, it results<br></span><span style="color:rgb(0,128,128);font-weight:bold">in a different sequence every time. And since it's use is turned off by default, the doctests<br></span><span style="color:rgb(0,128,128);font-weight:bold">will always be passed. The issue now is that it requires the use of a global variable -- which<br></span><span style="color:rgb(0,128,128);font-weight:bold">may be undesirable. However, as of Python version 2.7, there is no upper limit to how large integers<br></span><span style="color:rgb(0,128,128);font-weight:bold">can be. The max limit is dictated by the system space, which on a 32-bit system is [(2^31)-1].<br></span><span style="color:rgb(0,128,128);font-weight:bold">It is difficult to think of a use-case that could test such a generous boundry. Though, if it is not a<br></span><span style="color:rgb(0,128,128);font-weight:bold">satisfactory solution, I can try something else. I'm open to suggestions.</span></pre></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small;color:rgb(0,0,0)"><br></div><div><div class="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div style="font-family:arial;font-size:small"><div style="font-family:arial,helvetica,sans-serif;color:rgb(0,0,0);display:inline">Best </div>Regards,</div><div style="font-size:small"><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small;color:rgb(0,0,0)">​Adil Iqbal</div></div></div></div></div></div></div></div></div>
</div>