!7g      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                                  ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~    !!!!"Character interface(c) Dominik Schrempf 2018GPL-3dominik.schrempf@gmail.comunstableportableNone$ elynx-seq7IUPAC characters with a mapping to extended characters. elynx-seq2An extended character type with gaps and unknowns. elynx-seqA set of characters forms an "#. At the moment, D is used, since none of the alphabets has more than 255 characters. elynx-seqWrite characters. elynx-seqRead characters.  elynx-seqConversion to .  elynx-seqConversion from .  elynx-seqConversion to .  elynx-seqConversion from .  elynx-seq"Is the character a gap or unknown? elynx-seqCheck if a IUPAC & is unknown (e.g., N for nucleotides). elynx-seq)Is the given character a IUPAC character? elynx-seq,Is the given character a standard character? elynx-seq3Convert between character classes. May throw error.   &Amino acid related types and functions(c) Dominik Schrempf 2018GPL-3dominik.schrempf@gmail.comunstableportableNone@AHV' elynx-seq Amino acids.!" #$%&'!" #$%&'&Amino acid related types and functions(c) Dominik Schrempf 2018GPL-3dominik.schrempf@gmail.comunstableportableNone@AHV+=3 elynx-seq Amino acids.354B6CAD=;7H8>E@?9:<FGI354B6CAD=;7H8>E@?9:<FGI&Amino acid related types and functions(c) Dominik Schrempf 2018GPL-3dominik.schrempf@gmail.comunstableportableNone@AHV.U elynx-seq Amino acids.UWkVdXecf_]YnZl`gba[\^hiojmUWkVdXecf_]YnZl`gba[\^hiojm&Amino acid related types and functions(c) Dominik Schrempf 2018GPL-3dominik.schrempf@gmail.comunstableportableNone@AHV1| elynx-seq Amino acids.|~}|~}Alphabet characters(c) Dominik Schrempf 2019GPL-3dominik.schrempf@gmail.comunstableportableNone@AHV9  elynx-seqUAlphabet characters; abstracted so that representation can be changed at some point. elynx-seqConversion of s. elynx-seqConversion of s. elynx-seqConversion of s. elynx-seqConversion of s. elynx-seqConversion of s. elynx-seqConversion of s. elynx-seqConversion of s. elynx-seqConversion of s. &Alphabets store hereditary information(c) Dominik Schrempf 2019GPL-3dominik.schrempf@gmail.comunstableportableNoneFW elynx-seqAlphabet specification. * is used because it provides fast lookups. elynx-seqStandard characters. elynx-seqGap characters. elynx-seqUnknown characters. elynx-seqOther IUPAC codes. elynx-seqAll characters in the alphabet. elynx-seq<Convert from IUPAC to the corresponding standard characters. elynx-seq%Available alphabets; for details see . elynx-seqVerbose alphabet name. elynx-seq4Get the alphabet specification for a given alphabet. elynx-seqTest if standard character. elynx-seq Test if gap. elynx-seqTest if unknown. elynx-seq?Test if extended IUPAC character (excluding gaps and unknowns). elynx-seqTest if member of alphabet."Summarize statistics for alphabets(c) Dominik Schrempf 2019GPL-3dominik.schrempf@gmail.comunstableportableNoneQ elynx-seqEntropy of vector. elynx-seq3Effective number of used characters measured using @. The result only makes sense when the sum of the array is 1.0. elynx-seqProbability of homoplasy of vector. The result is the probability of binomially sampling the same character twice and only makes sense when the sum of the array is 1.0. elynx-seq3Effective number of used characters measured using @. The result only makes sense when the sum of the array is 1.0. elynx-seqIFor a given code vector of characters, calculate frequency of characters.  Nucleotides(c) Dominik Schrempf 2018GPL-3dominik.schrempf@gmail.comunstableportableNone@AHVS elynx-seq Nucleotides. *State space of the boundary mutation model(c) Dominik Schrempf 2017GPLv3dominik.schrempf@gmail.comunstablenon-portable (not tested)None> elynx-seqA boundary mutation model state is either a boundary state or a polymorphic state. The population size has to be larger than one; the allele count has to be larger than one and lower than the population size, otherwise there be dragons.Another possibility would be: v data State = Bnd Allele | Ply AlleleCount Allele Allele data StateComplete = StateComplete PopulationSize State l But then, I think it is more important that the information is kept in one, at the cost of some overhead. elynx-seqPopulation size. elynx-seqPopulation size. elynx-seq Allele count. elynx-seq$The absolute frequency of an allele. elynx-seqIThe population size has to be larger than one otherwise there be dragons. elynx-seqAlleles are just nucleotides at the moment. However, I want to keep the code such that it can be extended easily to codons or amino acids. elynx-seqThe number of alleles. elynx-seqL.ByteString representation of ; without surrounding brackets. elynx-seq(Fixed population size when converting a R to or from a number. In this case, a fixed population size is necessary so that toEnum . fromEnum == id#. When converting from a number to 7, the population size has to be given or assumed (see `) anyways. Especially when performing IO, the same number should always correspond to the same  (bijection). ; has been set such that the size of the state space is 256. elynx-seqSet the population size of a ; validity of resulting  is checked. elynx-seqSee . Does not check if resulting  is valid. elynx-seqFor a given population size , convert a number  to . elynx-seqConvert  to a number  for the given population size $. Back conversion can be done with  , with the same population size. elynx-seqGSorted list of all possible PoMo states for a specific population size. elynx-seqhThe state space of the boundary mutation model for four alleles and a population size N is 4 + 6*(N-1). elynx-seq\Check if two states are connected. By definition, states are NOT connected with themselves. elynx-seqA fixed population size  is assumed. elynx-seq3Enumeration only works when the population size is . Only then, toEnum . fromEnum == id$ can be guaranteed. This is because toEnum :: State< is only defined if the population size is known. See also , and , as well as, . elynx-seqA total order on the boundary mutation model states. In general, Bnd < Ply. Then, sorting happens according to the order population size, first allele, second allele, allele count. It may be beneficial to reverse the allele count order (i.e., make a polymorphic state with higher allele count show up before a polymorphic state with lower allele count, this would move some polymorphic states closer to their respective boundaries), !Nucleotides with IUPAC characters(c) Dominik Schrempf 2018GPL-3dominik.schrempf@gmail.comunstableportableNone@AHVi elynx-seq NucleotideIs. 0Extended nucleotides including gaps and unknowns(c) Dominik Schrempf 2018GPL-3dominik.schrempf@gmail.comunstableportableNone@AHV elynx-seqExtended nucleotides. "Codons are triplets of nucleotides(c) Dominik Schrempf 2019GPL-3dominik.schrempf@gmail.comunstableportableNone% elynx-seqUniversal codes.( elynx-seq"Codons are triplets of characters.* elynx-seq0Unsafe conversion from list with three elements.+ elynx-seq2Unsafe conversion from vector with three elements., elynx-seq=Translate a codon to amino acids including translation stops.- elynx-seqTranslate a codon to amino acids including translation stops. Translate codons including gaps to amino acid gaps. XXX: Be careful, single or two character gaps could have led to a reading frame shift and hence, the translated sequence may be bogus.. elynx-seq,Translate a codon to amino acids including translation stops. Translate gap triplets to amino acid gaps, and triplets including unknowns to amino acid unknowns. XXX: Be careful, also translates other IUPAC characters at the moment (to amino acid Xs)! translateI :: UniversalCode -> Codon NI.NucleotideI -> AI.AminoAcidI translateI _ (Codon (NI.N, _, _ )) = AI.X translateI _ (Codon (_ , NI.N, _ )) = AI.X translateI _ (Codon (_, _, NI.N)) = AI.X translateI code codon = C.convert . translateX code . convert $ codon %&'()*+,-. ()*+%&',-.Rate matrix helper functions(c) Dominik Schrempf 2017GPLv3dominik.schrempf@gmail.comunstablenon-portable (not tested)None 9 elynx-seq)Stationary distribution of a rate matrix.: elynx-seqA matrix of exchangeabilities, we have q = e * pi, where q is a rate matrix, e is the exchangeability matrix and pi is the diagonal matrix containing the stationary frequency distribution.; elynx-seq$A rate matrix is just a real matrix.< elynx-seq2Get average number of substitutions per unit time.= elynx-seqNormalizes a Markov process generator such that one event happens per unit time. Calculates stationary distribution from rate matrix.> elynx-seqzNormalizes a Markov process generator such that one event happens per unit time. Stationary distribution has to be given.? elynx-seqASet the diagonal entries of a matrix such that the rows sum to 0.@ elynx-seq6Extract the exchangeability matrix from a rate matrix.A elynx-seq.Convert exchangeability matrix to rate matrix.B elynx-seq!Get stationary distribution from ;. Involves eigendecomposition. If the given matrix does not satisfy the required properties of transition rate matrices and no eigenvector with an eigenvalue nearly equal to 0 is found, an error is thrown. Is there an easier way to calculate the stationary distribution or a better way to handle errors (of course I could use the Maybe monad, but then the error report is just delayed to the calling function)? 9:;<=>?@AB ;:9<=>?@AB$Stationary distributions and weights(c) Dominik Schrempf 2019GPL-3dominik.schrempf@gmail.comunstableportableNone C elynx-seq%Stationary distribution of C10 model.D elynx-seqWeights of C10 model.E elynx-seq%Stationary distribution of C20 model.F elynx-seqWeights of C20 model.G elynx-seq%Stationary distribution of C30 model.H elynx-seqWeights of C30 model.I elynx-seq%Stationary distribution of C40 model.J elynx-seqWeights of C40 model.K elynx-seq%Stationary distribution of C50 model.L elynx-seqWeights of C50 model.M elynx-seq%Stationary distribution of C60 model.N elynx-seqWeights of C60 model. CDEFGHIJKLMN CDEFGHIJKLMN'Data type describing substitution model(c) Dominik Schrempf 2019GPL-3dominik.schrempf@gmail.comunstableportableNone O elynx-seqDComplete definition of a substitution model. Create instances with Z.P elynx-seq8Parameters of substitution model. May be the empty list.Q elynx-seq=Name of substitution model; abstracted and subject to change.X elynx-seq.Calculate rate matrix from substitution model.Y elynx-seq Get scale of substitution model.Z elynx-seqCreate normalized O. See ].[ elynx-seqCreate UNNORMALIZED O. See Z.\ elynx-seq7Scale the rate of a substitution model by given factor.] elynx-seq]Normalize a substitution model, so that, on average, one substitution happens per unit time.^ elynx-seqAbbend to name._ elynx-seqESummarize a substitution model; lines to be printed to screen or log.OPQTUVWXYZ[\]^_QPOTVWUXYZ[\]^_%Substitution models using nucleotides(c) Dominik Schrempf 2019GPL-3dominik.schrempf@gmail.comunstableportableNone͵ elynx-seqJC model matrix.` elynx-seqJC substitution model.a elynx-seqHKY substitution model.`a`a<Mixture models are a set of substitution models with weights(c) Dominik Schrempf 2019GPL-3dominik.schrempf@gmail.comunstableportableNoneb elynx-seq@A mixture model component has a weight and a substitution model.d elynx-seqMixture model component weight.g elynx-seq$A mixture model with its components.l elynx-seqPGet alphabet used with mixture model. Throws error if components use different s.m elynx-seq Get weights.n elynx-seqGet substitution models.o elynx-seq:Create a mixture model from a list of substitution models.p elynx-seqConcatenate mixture models.q elynx-seq3Scale all substitution models of the mixture model.r elynx-seqWGlobally normalize a mixture model so that on average one event happens per unit time.s elynx-seq?Append byte string to all substitution models of mixture model.t elynx-seq#Checks if a mixture model is valid. XXX: For the future, a proper way of creating mixture models might be of interest. For example, not exporting the constructor nor the record fields and providing an algebraic way of creating mixture models (empty and addComponent which performs necessary checks).u elynx-seqJSummarize a mixture model component; lines to be printed to screen or log.v elynx-seq@Summarize a mixture model; lines to be printed to screen or log.bcdghklmnopqrstuvdbcghklmnopqrstuvPhylogenetic model(c) Dominik Schrempf 2019GPL-3dominik.schrempf@gmail.comunstableportableNonew elynx-seqgA phylogenetic model is a mixture model or a substitution model. More complicated models may be added.z elynx-seq%Extract code from phylogenetic model.{ elynx-seqESummarize a phylogenetic model; lines to be printed to screen or log.wyxz{wyxz{!Discrete gamma rate heterogeneity(c) Dominik Schrempf 2019GPL-3dominik.schrempf@gmail.comunstableportableNone~ elynx-seq5Short summary of gamma rate heterogeneity parameters. elynx-seqFor a given number of rate categories, a gamma shape parameter alpha and a substitution model, compute the scaled substitution models corresponding to the gamma rates.~~&Empiricial distribution mixture models(c) Dominik Schrempf 2019GPL-3dominik.schrempf@gmail.comunstableportableNone0 elynx-seqQAn empirical mixture model component has a weight and a stationary distribution. elynx-seqqCreate an EDM model from components and a substitution module construction manual from stationary distributions.#Amino acid rate matrices such as LG(c) Dominik Schrempf 2019GPL-3dominik.schrempf@gmail.comunstableportableNone elynx-seqLG substitution model. elynx-seqMLG substitution model with maybe a name and a custom stationary distribution. elynx-seqMLG substitution model with maybe a name and a custom stationary distribution. elynx-seqLG substitution model. elynx-seqMLG substitution model with maybe a name and a custom stationary distribution. elynx-seqMLG substitution model with maybe a name and a custom stationary distribution. elynx-seqPoisson substitution model. elynx-seqRPoisson substitution model with maybe a name and a custom stationary distribution.C10 to C60 models(c) Dominik Schrempf 2019GPL-3dominik.schrempf@gmail.comunstableportableNone  elynx-seqSCreate CXX model with given number of components and probably with custom weights. elynx-seq C10 model. elynx-seq C20 model. elynx-seq C30 model. elynx-seq C40 model. elynx-seq C50 model. elynx-seq C60 model. elynx-seqC10 model with custom weights. elynx-seqC20 model with custom weights. elynx-seqC30 model with custom weights. elynx-seqC40 model with custom weights. elynx-seqC50 model with custom weights. elynx-seqC60 model with custom weights.Various default values(c) Dominik Schrempf 2018GPL-3dominik.schrempf@gmail.comunstableportableSafe  elynx-seq5Space reserved for sequence names when printing them. elynx-seq,The length shown when summarizing sequences. elynx-seq(How many sequences are shown in summary. elynx-seqField width for tables.Hereditary sequences(c) Dominik Schrempf 2018GPL-3dominik.schrempf@gmail.comunstableportableNone elynx-seq:Sequences have a name, a code and hopefully a lot of data. elynx-seq'The vector of characters of a sequence. elynx-seq For now,  s are just s. elynx-seq+Convert byte string to sequence characters. elynx-seq+Convert sequence characters to byte string. elynx-seqShow a  , untrimmed. elynx-seqShow a list of  s, untrimmed. elynx-seqHeader printed before  list. elynx-seqTrim and show a . elynx-seqTrim and show a list of s. elynx-seqTrim and show a list of s. elynx-seqCalculate length of . elynx-seq Check if all s have equal length. elynx-seqFind the longest  in a list. elynx-seq7Count number of gaps or unknown characters in sequence. elynx-seqTrim to given length. elynx-seqConcatenate two sequences. s have to match. elynx-seq%Concatenate a list of sequences, see . elynx-seq Only take 's that are shorter than a given number. elynx-seq Only take &s that are longer than a given number.4Multi sequence alignment related types and functions(c) Dominik Schrempf 2018GPL-3dominik.schrempf@gmail.comunstableportableNone6i elynx-seqA collection of sequences. elynx-seqPFrequency data; do not store the actual characters, but only their frequencies. elynx-seqNumber of sites. elynx-seqNumber of sequences. elynx-seqCreate  from a list of s. elynx-seqConversion to list of s. elynx-seqShow a  , untrimmed. elynx-seqShow a  , untrimmed. elynx-seqShow a  in text form. elynx-seq Similar to  but with different Header. elynx-seq Join two Es vertically. That is, add more sequences to an alignment. See also . elynx-seqConcatenate two Cs horizontally. That is, add more sites to an alignment. See also . elynx-seqConcatenate a list of s horizontally. See . elynx-seqaOnly keep columns with standard characters. Alignment columns with IUPAC characters are removed. elynx-seqNFilter columns with proportion of standard character larger than given number. elynx-seq5Only keep columns without gaps or unknown characters. elynx-seq?Calculcate frequency of characters in multi sequence alignment. elynx-seqDiversity analysis. See . elynx-seqDiversity analysis. See . elynx-seqUCount the number of standard (i.e., not extended IUPAC) characters in the alignment. elynx-seq*Count the number of gaps in the alignment. elynx-seq8Count the number of unknown characters in the alignment. elynx-seq7Sample the given sites from a multi sequence alignment. elynx-seqHRandomly sample a given number of sites of the multi sequence alignment.Translate sequences(c) Dominik Schrempf 2019GPL-3dominik.schrempf@gmail.comunstableportableNone9 elynx-seqTranslate a sequence from  or  to .Write a counts file(c) Dominik Schrempf 2017GPLv3dominik.schrempf@gmail.comunstablenon-portable (not tested)NoneA elynx-seq(The set of boundary states for one site. elynx-seqThe position on the chromosome. elynx-seqThe chromosome name. elynx-seqThe names of the populations. elynx-seq)The number of sites that will be printed. elynx-seqFCompose the header using the number of sites and the population names. elynx-seq#Get a data line in the counts file. elynx-seqConvert data to a counts file.Export Fasta sequences(c) Dominik Schrempf 2018GPL-3dominik.schrempf@gmail.comunstableportableNoneE elynx-seq Convert a  to Fasta format. elynx-seqConvert a list 7s to Fasta format. A newline is added between any two s.6Import stationary distributions from Phylobayes format(c) Dominik Schrempf 2019GPL-3dominik.schrempf@gmail.comunstableportableNoneI! elynx-seq Shortcut. elynx-seq6Parse stationary distributions from Phylobayes format.Import Fasta sequences(c) Dominik Schrempf 2018GPL-3dominik.schrempf@gmail.comunstableportableNoneL elynx-seq Shortcut. elynx-seqParse a sequence of characters. elynx-seqParse a Fasta file with given . Markov process helpers(c) Dominik Schrempf 2019GPL-3dominik.schrempf@gmail.comunstableportableNoneY elynx-seq&Make type signatures a little clearer. elynx-seq7A probability matrix, P_ij(t) = Pr (X_t = j | X_0 = i). elynx-seqxThe important matrix that gives the probabilities to move from one state to another in a specific time (branch length). elynx-seqMove from a given state to a new one according to a transition probability matrix (for performance reasons this probability matrix needs to be given as a list of generators, see  \https://hackage.haskell.org/package/distribution-1.1.0.0/docs/Data-Distribution-Sample.html). This function is the bottleneck of the simulator and takes up most of the computation time. However, I was not able to find a faster implementation than the one from Data.Distribution.!FFunctions to work with transition probability matrices on rooted trees(c) Dominik Schrempf 2017GPLv3dominik.schrempf@gmail.comunstablenon-portable (not tested)Noneg elynx-seqSimulate a number of sites for a given substitution model. Only the states at the leafs are retained. The states at internal nodes are removed. This has a lower memory footprint. elynx-seqSimulate a number of sites for a given substitution model. Keep states at internal nodes. The result is a tree with the list of simulated states as node labels. elynx-seqSimulate a number of sites for a given set of substitution models with corresponding weights. Forget states at internal nodes. See also . elynx-seqSimulate a number of sites for a given set of substitution models with corresponding weights. Keep states at internal nodes. See also .$Safeg^%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWX89:;<=>?@ABCDEFGHIJKYLZ[\]^_`abcde89:;<=>?@ABCDEFGHIJKfghiYLjklmnopqrstuv89:;<=>?@ABCDEFGHIJKwxyz{|}~+,-./01*&'#234  8 9 = H        8 9 = H  J G B @ F K g : > I C L  8 9 = H L            !!"#$%&'()*+! $,-./0123456789:;<=>??@ABCDEFGHIJKLMNO(PQRSTTUVWXYZ[\]^_`abcdefghijklmnopqrstuv  w x y!z!{!|!}~~  gFIs$$$$$$$$&elynx-seq-0.0.1-F2WSYLj8Yg639guC9DinkLELynx.Data.Character.CharacterELynx.Data.Character.AminoAcidXELynx.Data.Character.AminoAcidSELynx.Data.Character.AminoAcidIELynx.Data.Character.AminoAcidELynx.Data.Alphabet.CharacterELynx.Data.Alphabet.Alphabet)ELynx.Data.Alphabet.DistributionDiversityELynx.Data.Character.Nucleotide%ELynx.Data.Character.BoundaryMutation ELynx.Data.Character.NucleotideI ELynx.Data.Character.NucleotideXELynx.Data.Character.Codon#ELynx.Data.MarkovProcess.RateMatrix&ELynx.Data.MarkovProcess.CXXModelsData*ELynx.Data.MarkovProcess.SubstitutionModel#ELynx.Data.MarkovProcess.Nucleotide%ELynx.Data.MarkovProcess.MixtureModel#ELynx.Data.MarkovProcess.PhyloModel/ELynx.Data.MarkovProcess.GammaRateHeterogeneity!ELynx.Data.MarkovProcess.EDMModel"ELynx.Data.MarkovProcess.AminoAcid"ELynx.Data.MarkovProcess.CXXModelsELynx.Data.Sequence.DefaultsELynx.Data.Sequence.Sequence*ELynx.Data.Sequence.MultiSequenceAlignmentELynx.Data.Sequence.Translate ELynx.Export.Sequence.CountsFileELynx.Export.Sequence.Fasta-ELynx.Import.MarkovProcess.EDMModelPhylobayesELynx.Import.Sequence.FastaELynx.Simulate.MarkovProcess%ELynx.Simulate.MarkovProcessAlongTreeELynx.Data.AlphabetAlphabetPaths_elynx_seq CharacterIunknowniupac toStandard CharacterXgap CharactertoWordfromWordtoCharfromChartoString fromStringisGap isUnknownisIUPAC isStandardconvert AminoAcidXACDEFGHIKLMNPQRSTVWYGap$fShowAminoAcidX$fReadAminoAcidX$fEqAminoAcidX$fOrdAminoAcidX$fEnumAminoAcidX$fBoundedAminoAcidX$fCharacterXAminoAcidX$fCharacterAminoAcidX$fVectorVectorAminoAcidX$fMVectorMVectorAminoAcidX$fUnboxAminoAcidX AminoAcidSStop$fShowAminoAcidS$fReadAminoAcidS$fEqAminoAcidS$fOrdAminoAcidS$fEnumAminoAcidS$fBoundedAminoAcidS$fCharacterXAminoAcidS$fCharacterAminoAcidS$fVectorVectorAminoAcidS$fMVectorMVectorAminoAcidS$fUnboxAminoAcidS AminoAcidIJBZX$fShowAminoAcidI$fReadAminoAcidI$fEqAminoAcidI$fOrdAminoAcidI$fEnumAminoAcidI$fBoundedAminoAcidI$fCharacterIAminoAcidI$fCharacterXAminoAcidI$fCharacterAminoAcidI$fVectorVectorAminoAcidI$fMVectorMVectorAminoAcidI$fUnboxAminoAcidI AminoAcid$fShowAminoAcid$fReadAminoAcid $fEqAminoAcid$fOrdAminoAcid$fEnumAminoAcid$fBoundedAminoAcid$fCharacterAminoAcid$fVectorVectorAminoAcid$fMVectorMVectorAminoAcid$fUnboxAminoAcidtoCVecfromCVec$fReadCharacter$fShowCharacter $fEqCharacter$fOrdCharacter$fBoundedCharacter$fVectorVectorCharacter$fMVectorMVectorCharacter$fUnboxCharacter AlphabetSpecstdalltoStdDNADNAXDNAIProteinProteinXProteinSProteinIalphabetNameVerbose alphabetSpecisStdisMember$fShowAlphabet$fReadAlphabet $fEqAlphabet $fOrdAlphabet$fEnumAlphabet$fBoundedAlphabetentropy kEffEntropy homoplasy kEffHomoplasyfrequencyCharacters Nucleotide$fShowNucleotide$fReadNucleotide$fEqNucleotide$fOrdNucleotide$fEnumNucleotide$fBoundedNucleotide$fCharacterNucleotide$fVectorVectorNucleotide$fMVectorMVectorNucleotide$fUnboxNucleotideStateBndPlybndNbndAplyNplyIplyAplyB AlleleCountPopulationSizeAllele showCountsnFixedsetPopulationSize fromIndexWithtoIndex stateSpacestateSpaceSize neighbors$fBoundedState $fEnumState $fOrdState $fReadState $fEqState NucleotideIU$fShowNucleotideI$fReadNucleotideI$fEqNucleotideI$fOrdNucleotideI$fEnumNucleotideI$fBoundedNucleotideI$fCharacterINucleotideI$fCharacterXNucleotideI$fCharacterNucleotideI$fVectorVectorNucleotideI$fMVectorMVectorNucleotideI$fUnboxNucleotideI NucleotideX$fShowNucleotideX$fReadNucleotideX$fEqNucleotideX$fOrdNucleotideX$fEnumNucleotideX$fBoundedNucleotideX$fCharacterXNucleotideX$fCharacterNucleotideX$fVectorVectorNucleotideX$fMVectorMVectorNucleotideX$fUnboxNucleotideX UniversalCodeStandardVertebrateMitochondrialCodonunsafeFromList unsafeFromVec translate translateX translateI $fShowCodon $fReadCodon $fEqCodon $fOrdCodon$fShowUniversalCode$fReadUniversalCode$fEqUniversalCode$fOrdUniversalCode$fEnumUniversalCode$fBoundedUniversalCodeStationaryDistributionExchangeabilityMatrix RateMatrix totalRate normalize normalizeWith setDiagonaltoExchangeabilityMatrixfromExchangeabilityMatrixgetStationaryDistribution c10StatDists c10Weights c20StatDists c20Weights c30StatDists c30Weights c40StatDists c40Weights c50StatDists c50Weights c60StatDists c60WeightsSubstitutionModelParamsName$fShowSubstitutionModel$fReadSubstitutionModelalphabetexchangeabilityMatrixnamestationaryDistribution getRateMatrixsubstitutionModel unnormalizedscale appendName summarizejchky ComponentWeight$fShowComponent$fReadComponent MixtureModel$fShowMixtureModel$fReadMixtureModel getAlphabet getWeightsgetSubstitutionModelsfromSubstitutionModels concatenateisValidsummarizeComponent PhyloModel$fShowPhyloModel$fReadPhyloModelsummarizeGammaRateHeterogeneityexpand EDMComponentedmModellglgCustomlgCustomUnnormalizedwag wagCustomwagCustomUnnormalizedpoisson poissonCustomcxxdefSequenceNameWidthdefSequenceSummaryLengthdefSequenceListSummaryNumber defFieldWidthSequenceSequenceCharacters SequenceName $fEqSequence characters toCharactersfromCharacters showSequenceshowSequenceListsequenceListHeadersummarizeSequencesummarizeSequenceListsummarizeSequenceListBodylengthSequence equalLengthlongest trimSequenceconcatenateSeqsfilterShorterThanfilterLongerThan$fShowSequenceMultiSequenceAlignment$fReadMultiSequenceAlignment$fShowMultiSequenceAlignment$fEqMultiSequenceAlignment FrequencyData msaLength msaNSequencesfromSequenceListtoSequenceListshowMSA summarizeMSAmsaJoinmsaConcatenatemsasConcatenatefilterColumnsOnlyStdfilterColumnsStdfilterColumnsNoGapstoFrequencyDatacountIUPACChars countGaps countUnknowns subSamplerandomSubSample translateSeq DataOneSitePosChromPopulationNames toCountsFilesequenceToFastasequencesToFastaParser phylobayes fastaSequencefasta ProbMatrix probMatrixjump!simulateAndFlattenNSitesAlongTreesimulateNSitesAlongTree-simulateAndFlattenNSitesAlongTreeMixtureModel#simulateNSitesAlongTreeMixtureModelbaseGHC.WordWord8ghc-prim GHC.TypesCharGHC.BaseStringcontainers-0.6.0.1Data.Set.InternalSetnAllelesunsafeSetPopulationSizeIntjcExchc10c20c30c40c50c60c10CustomWeightsc20CustomWeightsc30CustomWeightsc40CustomWeightsc50CustomWeightsc60CustomWeightsbytestring-0.10.8.2Data.ByteString.Lazy.Internal ByteStringNSitesheaderdataLineversion getBinDir getLibDir getDynLibDir getDataDir getLibexecDir getSysconfDirgetDataFileName