namespace BioFS

[<AutoOpen>]
module Complements =

    let Complements: Map<SequenceType, Map<char, char>> =
        [ DNA,
          [ 'A', 'T'
            'C', 'G'
            'G', 'C'
            'T', 'A'
            'W', 'W'
            'S', 'S'
            'M', 'K'
            'K', 'M'
            'R', 'Y'
            'Y', 'R'
            'B', 'V'
            'D', 'H'
            'H', 'D'
            'V', 'B'
            'N', 'N' ]
          |> Map.ofList
          RNA,
          [ 'A', 'U'
            'C', 'G'
            'G', 'C'
            'U', 'A'
            'W', 'W'
            'S', 'S'
            'M', 'K'
            'K', 'M'
            'R', 'Y'
            'Y', 'R'
            'B', 'V'
            'D', 'H'
            'H', 'D'
            'V', 'B'
            'N', 'N' ]
          |> Map.ofList ]
        |> Map.ofList

    let Codons: Map<string, char> =
        [ "GCU", 'A'
          "GCC", 'A'
          "GCA", 'A'
          "GCG", 'A'
          "UGU", 'C'
          "UGC", 'C'
          "GAU", 'D'
          "GAC", 'D'
          "GAA", 'E'
          "GAG", 'E'
          "UUU", 'F'
          "UUC", 'F'
          "GGU", 'G'
          "GGC", 'G'
          "GGA", 'G'
          "GGG", 'G'
          "CAU", 'H'
          "CAC", 'H'
          "AUA", 'I'
          "AUU", 'I'
          "AUC", 'I'
          "AAA", 'K'
          "AAG", 'K'
          "UUA", 'L'
          "UUG", 'L'
          "CUU", 'L'
          "CUC", 'L'
          "CUA", 'L'
          "CUG", 'L'
          "AUG", 'M'
          "AAU", 'N'
          "AAC", 'N'
          "CCU", 'P'
          "CCC", 'P'
          "CCA", 'P'
          "CCG", 'P'
          "CAA", 'Q'
          "CAG", 'Q'
          "CGU", 'R'
          "CGC", 'R'
          "CGA", 'R'
          "CGG", 'R'
          "AGA", 'R'
          "AGG", 'R'
          "UCU", 'S'
          "UCC", 'S'
          "UCA", 'S'
          "UCG", 'S'
          "AGU", 'S'
          "AGC", 'S'
          "ACU", 'T'
          "ACC", 'T'
          "ACA", 'T'
          "ACG", 'T'
          "GUU", 'V'
          "GUC", 'V'
          "GUA", 'V'
          "GUG", 'V'
          "UGG", 'W'
          "UAU", 'Y'
          "UAC", 'Y'
          "UAA", 'X'
          "UAG", 'X'
          "UGA", 'X' ]
        |> Map.ofList
