"""
Package pcr designs and simulates simple PCR reactions.

PCR, or polymerase chain reaction, is a method developed in 1983 to copy DNA
templates using small fragments of synthesized single-stranded DNA, amplifying
those DNA templates to ~x1,000,000,000 their starting concentration. These small
fragments, referred to as "primers" or "oligos", can be designed on a computer
and then synthesized for amplifying a variety of different templates.

This package allows users to simulate a PCR reaction or design new primers to
amplify a given template. This package assumes perfect annealing to template at
a target temperature, so should only be used for PCR reactions where this is a
reasonable assumption.

If you are trying to simulate amplification out of a large pool, such as an
oligo pool, use the `Simulate` rather than `SimulateSimple` function to detect
if there is concatemerization happening in your multiplex reaction. In most
other cases, use `SimulateSimple`.

IMPORTANT! The targetTm in all functions is specifically for Taq polymerase.

"""
# python wrapper for package github.com/bebop/poly/primers/pcr within overall package poly
# This is what you import to use the package.
# File is generated by gopy. Do not edit.
# gopy pkg -vm=python3 github.com/bebop/poly

# the following is required to enable dlopen to open the _go.so file
import os,sys,inspect,collections
try:
	import collections.abc as _collections_abc
except ImportError:
	_collections_abc = collections

cwd = os.getcwd()
currentdir = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe())))
os.chdir(currentdir)
from . import _poly
from . import go

os.chdir(cwd)

# to use this code in your end-user python file, import it as follows:
# from poly import pcr
# and then refer to everything using pcr. prefix
# packages imported by this package listed below:

from . import primers
from . import transform



# ---- Types ---


#---- Enums from Go (collections of consts with same type) ---


#---- Constants from Go: Python can only ask that you please don't change these! ---


# ---- Global Variables: can only use functions to access ---


# ---- Interfaces ---


# ---- Structs ---


# ---- Slices ---


# ---- Maps ---


# ---- Constructors ---


# ---- Functions ---
def Simulate(sequences, targetTm, circular, primerList):
	"""Simulate([]str sequences, float targetTm, bool circular, []str primerList) []str, str
	
	Simulate simulates a PCR reaction, including concatemerization analysis. It
	takes in a list of sequences and list of primers, produces all possible PCR
	fragments in a given reaction, and then attempts to see if the output
	fragments can amplify themselves. If they can, concatemerization is occurring
	in your reaction, which can lead to confusing results. The variable
	`circular` is for if the target template is circular, like a plasmid.
	"""
	return go.Slice_string(handle=_poly.pcr_Simulate(sequences.handle, targetTm, circular, primerList.handle))
def SimulateSimple(sequences, targetTm, circular, primerList):
	"""SimulateSimple([]str sequences, float targetTm, bool circular, []str primerList) []str
	
	SimulateSimple simulates a PCR reaction. It takes in a list of sequences and
	a list of primers, with support for complex multiplex reactions, produces
	a list of all possible PCR fragments from such a reaction. It does not
	detect concatemerization, which could be useful or very detrimental to
	your reactions. The variable `circular` is for if the target template is
	circular, like a plasmid.
	"""
	return go.Slice_string(handle=_poly.pcr_SimulateSimple(sequences.handle, targetTm, circular, primerList.handle))


