"""
Package primers provides utilities for creating primers and DNA barcodes.

Primers are short sequences of DNA that can be used to amplify DNA sequences
and they are the workhorse of modern molecular biology.

Essentially primers are short pieces of single stranded DNA that can
bind to a target sequence of single stranded DNA. These primers serve as a
marker for polymerases (the enzyme Poly is named after!) to bind and start adding
free floating nucleotides (ACTGs) to a single strand piece of DNA to form a
double stranded piece of DNA.

This is a crucial step in the process of PCR (polymerase chain reaction).
https://en.wikipedia.org/wiki/Polymerase_chain_reaction

You can read more about that at the link above but just know that an absolute huge
number of protocols from diagnostics to plasmid cloning use these primers so they're
super important.

"""
# python wrapper for package github.com/bebop/poly/primers 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 primers
# and then refer to everything using primers. prefix
# packages imported by this package listed below:

from . import checks
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 CreateBarcodes(length, maxSubSequence):
	"""CreateBarcodes(int length, int maxSubSequence) []str
	
	CreateBarcodes is a simplified version of CreateBarcodesWithBannedSequences with sane defaults.
	"""
	return go.Slice_string(handle=_poly.primers_CreateBarcodes(length, maxSubSequence))
def CreateBarcodesGcRange(length, maxSubSequence, minGcContent, maxGcContent):
	"""CreateBarcodesGcRange(int length, int maxSubSequence, float minGcContent, float maxGcContent) []str
	
	CreateBarcodesGcRange creates a list of barcodes within a given GC range.
	"""
	return go.Slice_string(handle=_poly.primers_CreateBarcodesGcRange(length, maxSubSequence, minGcContent, maxGcContent))
def MarmurDoty(sequence):
	"""MarmurDoty(str sequence) float
	
	MarmurDoty calculates the melting point of an extremely short DNA sequence (<15 bp) using a modified Marmur Doty formula [Marmur J & Doty P (1962). Determination of the base composition of deoxyribonucleic acid from its thermal denaturation temperature. J Mol Biol, 5, 109-118.]
	"""
	return _poly.primers_MarmurDoty(sequence)
def MeltingTemp(sequence):
	"""MeltingTemp(str sequence) float
	
	MeltingTemp calls SantaLucia with default inputs for primer and salt concentration.
	"""
	return _poly.primers_MeltingTemp(sequence)
def NucleobaseDeBruijnSequence(substringLength):
	"""NucleobaseDeBruijnSequence(int substringLength) str
	
	NucleobaseDeBruijnSequence generates a DNA DeBruijn sequence with alphabet ATGC. DeBruijn sequences are basically a string with all unique substrings of an alphabet represented exactly once. Code is adapted from https://rosettacode.org/wiki/De_Bruijn_sequences#Go
	"""
	return _poly.primers_NucleobaseDeBruijnSequence(substringLength)


