libnano / primer3-py

Simple oligo analysis and primer design
https://libnano.github.io/primer3-py
GNU General Public License v2.0
157 stars 43 forks source link

Giving a dict to `misprime_lib` causes `OSError` #101

Closed jonathanronen closed 1 year ago

jonathanronen commented 1 year ago

I took the example from the documentation for a design_primers run, and tried to add a Dict[str,str] for the mis-priming library (misprime_lib). I get an OS error: failed to allocate memory, although the system has plenty of ram available.

Am I using it wrong, or is this a bug? Or does primer3 really need more than 10gb of RAM for a single entry dict?

Code:

primer3.bindings.design_primers(
    seq_args={
        'SEQUENCE_ID': 'MH1000',
        'SEQUENCE_TEMPLATE': 'GCTTGCATGCCTGCAGGTCGACTCTAGAGGATCCCCCTACATTTT'
                             'AGCATCAGTGAGTACAGCATGCTTACTGGAAGAGAGGGTCATGCA'
                             'ACAGATTAGGAGGTAAGTTTGCAAAGGCAGGCTAAGGAGGAGACG'
                             'CACTGAATGCCATGGTAAGAACTCTGGACATAAAAATATTGGAAG'
                             'TTGTTGAGCAAGTNAAAAAAATGTTTGGAAGTGTTACTTTAGCAA'
                             'TGGCAAGAATGATAGTATGGAATAGATTGGCAGAATGAAGGCAAA'
                             'ATGATTAGACATATTGCATTAAGGTAAAAAATGATAACTGAAGAA'
                             'TTATGTGCCACACTTATTAATAAGAAAGAATATGTGAACCTTGCA'
                             'GATGTTTCCCTCTAGTAG',
        'SEQUENCE_INCLUDED_REGION': [36,342]
    },
    global_args={
        'PRIMER_OPT_SIZE': 20,
        'PRIMER_PICK_INTERNAL_OLIGO': 1,
        'PRIMER_INTERNAL_MAX_SELF_END': 8,
        'PRIMER_MIN_SIZE': 18,
        'PRIMER_MAX_SIZE': 25,
        'PRIMER_OPT_TM': 60.0,
        'PRIMER_MIN_TM': 57.0,
        'PRIMER_MAX_TM': 63.0,
        'PRIMER_MIN_GC': 20.0,
        'PRIMER_MAX_GC': 80.0,
        'PRIMER_MAX_POLY_X': 100,
        'PRIMER_INTERNAL_MAX_POLY_X': 100,
        'PRIMER_SALT_MONOVALENT': 50.0,
        'PRIMER_DNA_CONC': 50.0,
        'PRIMER_MAX_NS_ACCEPTED': 0,
        'PRIMER_MAX_SELF_ANY': 12,
        'PRIMER_MAX_SELF_END': 8,
        'PRIMER_PAIR_MAX_COMPL_ANY': 12,
        'PRIMER_PAIR_MAX_COMPL_END': 8,
        'PRIMER_PRODUCT_SIZE_RANGE': [
            [75,100],[100,125],[125,150],
            [150,175],[175,200],[200,225]
        ],
    },
    misprime_lib={
        "SEQ1": "CACCATGGAGCTCCTGATATTAAAGGCGAATGCCATT",
    }
)

Error:

OSError                                   Traceback (most recent call last)
File /opt/venv/lib/python3.8/site-packages/primer3/thermoanalysis.pyx:1166, in primer3.thermoanalysis._ThermoAnalysis._set_globals_and_seq_args()

File /opt/venv/lib/python3.8/site-packages/primer3/thermoanalysis.pyx:1408, in primer3.thermoanalysis.pdh_create_seq_lib()

OSError: Could not allocate memory for seq_lib

The above exception was the direct cause of the following exception:

OSError                                   Traceback (most recent call last)
Cell In [157], line 1
----> 1 primer3.bindings.design_primers(
      2     seq_args={
      3         'SEQUENCE_ID': 'MH1000',
      4         'SEQUENCE_TEMPLATE': 'GCTTGCATGCCTGCAGGTCGACTCTAGAGGATCCCCCTACATTTT'
      5                              'AGCATCAGTGAGTACAGCATGCTTACTGGAAGAGAGGGTCATGCA'
      6                              'ACAGATTAGGAGGTAAGTTTGCAAAGGCAGGCTAAGGAGGAGACG'
      7                              'CACTGAATGCCATGGTAAGAACTCTGGACATAAAAATATTGGAAG'
      8                              'TTGTTGAGCAAGTNAAAAAAATGTTTGGAAGTGTTACTTTAGCAA'
      9                              'TGGCAAGAATGATAGTATGGAATAGATTGGCAGAATGAAGGCAAA'
     10                              'ATGATTAGACATATTGCATTAAGGTAAAAAATGATAACTGAAGAA'
     11                              'TTATGTGCCACACTTATTAATAAGAAAGAATATGTGAACCTTGCA'
     12                              'GATGTTTCCCTCTAGTAG',
     13         'SEQUENCE_INCLUDED_REGION': [36,342]
     14     },
     15     global_args={
     16         'PRIMER_OPT_SIZE': 20,
     17         'PRIMER_PICK_INTERNAL_OLIGO': 1,
     18         'PRIMER_INTERNAL_MAX_SELF_END': 8,
     19         'PRIMER_MIN_SIZE': 18,
     20         'PRIMER_MAX_SIZE': 25,
     21         'PRIMER_OPT_TM': 60.0,
     22         'PRIMER_MIN_TM': 57.0,
     23         'PRIMER_MAX_TM': 63.0,
     24         'PRIMER_MIN_GC': 20.0,
     25         'PRIMER_MAX_GC': 80.0,
     26         'PRIMER_MAX_POLY_X': 100,
     27         'PRIMER_INTERNAL_MAX_POLY_X': 100,
     28         'PRIMER_SALT_MONOVALENT': 50.0,
     29         'PRIMER_DNA_CONC': 50.0,
     30         'PRIMER_MAX_NS_ACCEPTED': 0,
     31         'PRIMER_MAX_SELF_ANY': 12,
     32         'PRIMER_MAX_SELF_END': 8,
     33         'PRIMER_PAIR_MAX_COMPL_ANY': 12,
     34         'PRIMER_PAIR_MAX_COMPL_END': 8,
     35         'PRIMER_PRODUCT_SIZE_RANGE': [
     36             [75,100],[100,125],[125,150],
     37             [150,175],[175,200],[200,225]
     38         ],
     39     },
     40     misprime_lib={
     41         "SEQ1": "CACCATGGAGCTCCTGATATTAAAGGCGAATGCCATT",
     42     }
     43 )

File /opt/venv/lib/python3.8/site-packages/primer3/bindings.py:549, in design_primers(seq_args, global_args, misprime_lib, mishyb_lib)
    528 def design_primers(
    529         seq_args: Dict[str, Any],
    530         global_args: Dict[str, Any],
    531         misprime_lib: Optional[Dict[str, Any]] = None,
    532         mishyb_lib: Optional[Dict[str, Any]] = None,
    533 ) -> Dict[str, Any]:
    534     '''Run the Primer3 design process.
    535 
    536     Args:
   (...)
    547 
    548     '''
--> 549     return THERMO_ANALYSIS.run_design(
    550         global_args=global_args,
    551         seq_args=seq_args,
    552         misprime_lib=misprime_lib,
    553         mishyb_lib=mishyb_lib,
    554     )

File /opt/venv/lib/python3.8/site-packages/primer3/thermoanalysis.pyx:1215, in primer3.thermoanalysis._ThermoAnalysis.run_design()

File /opt/venv/lib/python3.8/site-packages/primer3/thermoanalysis.pyx:1185, in primer3.thermoanalysis._ThermoAnalysis._set_globals_and_seq_args()

OSError: 
grinner commented 1 year ago

Thanks for catching this bug @jonathanronen

PR #102 addresses the missing allocation and furthermore, missing tests (my fault for not covering). Please take a look, but this should address your issues in a 1.2.1 bug fix release.

grinner commented 1 year ago

fixed with PR #103