Compare commits
	
		
			13 Commits
		
	
	
		
			0.13.0
			...
			features/f
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| f8d92a4aad | |||
| 34bf02c75a | |||
| 3cb10a4609 | |||
| 1776f5aa51 | |||
| 96d715fdcb | |||
| e088d1080b | |||
| 8ffc7c7fb5 | |||
| af7edf0942 | |||
| 481870db97 | |||
| 62fdada9c1 | |||
| 3074997db6 | |||
| 3d6f36a722 | |||
| bbd9e67c8c | 
							
								
								
									
										3
									
								
								.vscode/extensions.json
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								.vscode/extensions.json
									
									
									
									
										vendored
									
									
								
							@@ -1,5 +1,6 @@
 | 
			
		||||
{
 | 
			
		||||
    "recommendations": [
 | 
			
		||||
        "piotrpalarz.vscode-gitignore-generator"
 | 
			
		||||
        "piotrpalarz.vscode-gitignore-generator",
 | 
			
		||||
        "gruntfuggly.todo-tree"
 | 
			
		||||
    ]
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										6
									
								
								Jenkinsfile
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								Jenkinsfile
									
									
									
									
										vendored
									
									
								
							@@ -36,7 +36,9 @@ pipeline {
 | 
			
		||||
            parallel {
 | 
			
		||||
                stage ("git.reslate.systems") {
 | 
			
		||||
                    when {
 | 
			
		||||
                        branch '**/main'
 | 
			
		||||
                        not {
 | 
			
		||||
                            tag '*.*.*'
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    environment {
 | 
			
		||||
@@ -49,7 +51,7 @@ pipeline {
 | 
			
		||||
                }
 | 
			
		||||
                stage ("pypi.org") {
 | 
			
		||||
                    when {
 | 
			
		||||
                        tag '*.*'
 | 
			
		||||
                        tag '*.*.*'
 | 
			
		||||
                    }
 | 
			
		||||
                    environment {
 | 
			
		||||
                        TOKEN = credentials('pypi.org')
 | 
			
		||||
 
 | 
			
		||||
@@ -1,44 +0,0 @@
 | 
			
		||||
{% set name = "autoBIGS.engine" %}
 | 
			
		||||
{% set version = "0.12.1.dev1+gb8cebb8.d20250221" %}
 | 
			
		||||
 | 
			
		||||
package:
 | 
			
		||||
  name: {{ name|lower|replace(".", "-") }}
 | 
			
		||||
  version: {{ version }}
 | 
			
		||||
 | 
			
		||||
source:
 | 
			
		||||
  url: file:///workspaces/autoBIGS.engine/dist/autobigs_engine-0.12.1.dev1%2Bgb8cebb8.d20250221.tar.gz
 | 
			
		||||
  sha256: c86441b94f935cfa414ff28ca4c026a070e0fb15988ea3bb7d1a942859a09b16
 | 
			
		||||
 | 
			
		||||
build:
 | 
			
		||||
  noarch: python
 | 
			
		||||
  script: {{ PYTHON }} -m pip install . -vv --no-deps --no-build-isolation
 | 
			
		||||
  number: 0
 | 
			
		||||
  run_exports:
 | 
			
		||||
    - {{ pin_subpackage( name|lower|replace(".", "-"), max_pin="x.x") }}
 | 
			
		||||
requirements:
 | 
			
		||||
  host:
 | 
			
		||||
    - python >=3.12
 | 
			
		||||
    - setuptools >=64
 | 
			
		||||
    - setuptools-scm >=8
 | 
			
		||||
    - pip
 | 
			
		||||
  run:
 | 
			
		||||
    - python >=3.12
 | 
			
		||||
    - biopython ==1.85
 | 
			
		||||
    - aiohttp ==3.11.*
 | 
			
		||||
 | 
			
		||||
test:
 | 
			
		||||
  imports:
 | 
			
		||||
    - autobigs
 | 
			
		||||
  commands:
 | 
			
		||||
    - pip check
 | 
			
		||||
  requires:
 | 
			
		||||
    - pip
 | 
			
		||||
 | 
			
		||||
about:
 | 
			
		||||
  summary: A library to rapidly fetch fetch MLST profiles given sequences for various diseases.
 | 
			
		||||
  license: GPL-3.0-or-later
 | 
			
		||||
  license_file: LICENSE
 | 
			
		||||
  home: https://github.com/Syph-and-VPD-Lab/autoBIGS.engine
 | 
			
		||||
extra:
 | 
			
		||||
  recipe-maintainers:
 | 
			
		||||
    - Harrison Deng
 | 
			
		||||
@@ -9,7 +9,7 @@ import shutil
 | 
			
		||||
import tempfile
 | 
			
		||||
from typing import Any, AsyncGenerator, AsyncIterable, Coroutine, Iterable, Mapping, Sequence, Set, Union
 | 
			
		||||
 | 
			
		||||
from aiohttp import ClientSession, ClientTimeout
 | 
			
		||||
from aiohttp import ClientOSError, ClientSession, ClientTimeout, ServerDisconnectedError
 | 
			
		||||
 | 
			
		||||
from autobigs.engine.reading import read_fasta
 | 
			
		||||
from autobigs.engine.structures.alignment import PairwiseAlignment
 | 
			
		||||
@@ -43,11 +43,12 @@ class BIGSdbMLSTProfiler(AbstractAsyncContextManager):
 | 
			
		||||
 | 
			
		||||
class RemoteBIGSdbMLSTProfiler(BIGSdbMLSTProfiler):
 | 
			
		||||
 | 
			
		||||
    def __init__(self, database_api: str, database_name: str, scheme_id: int):
 | 
			
		||||
    def __init__(self, database_api: str, database_name: str, scheme_id: int, retry_requests: int = 5):
 | 
			
		||||
        self._retry_limit = retry_requests
 | 
			
		||||
        self._database_name = database_name
 | 
			
		||||
        self._scheme_id = scheme_id
 | 
			
		||||
        self._base_url = f"{database_api}/db/{self._database_name}/schemes/{self._scheme_id}/"
 | 
			
		||||
        self._http_client = ClientSession(self._base_url, timeout=ClientTimeout(60))
 | 
			
		||||
        self._http_client = ClientSession(self._base_url, timeout=ClientTimeout(300))
 | 
			
		||||
 | 
			
		||||
    async def __aenter__(self):
 | 
			
		||||
        return self
 | 
			
		||||
@@ -57,40 +58,59 @@ class RemoteBIGSdbMLSTProfiler(BIGSdbMLSTProfiler):
 | 
			
		||||
        uri_path = "sequence"
 | 
			
		||||
        if isinstance(query_sequence_strings, str) or isinstance(query_sequence_strings, NamedString):
 | 
			
		||||
            query_sequence_strings = [query_sequence_strings]
 | 
			
		||||
        
 | 
			
		||||
        for sequence_string in query_sequence_strings:
 | 
			
		||||
            async with self._http_client.post(uri_path, json={
 | 
			
		||||
                "sequence": sequence_string if isinstance(sequence_string, str) else sequence_string.sequence,
 | 
			
		||||
                "partial_matches": True
 | 
			
		||||
            }) as response:
 | 
			
		||||
                sequence_response: dict = await response.json()
 | 
			
		||||
            attempts = 0
 | 
			
		||||
            success = False
 | 
			
		||||
            last_error = None
 | 
			
		||||
            while not success and attempts < self._retry_limit:
 | 
			
		||||
                attempts += 1
 | 
			
		||||
                request = self._http_client.post(uri_path, json={
 | 
			
		||||
                    "sequence": sequence_string if isinstance(sequence_string, str) else sequence_string.sequence,
 | 
			
		||||
                    "partial_matches": True
 | 
			
		||||
                })
 | 
			
		||||
                try:
 | 
			
		||||
                    async with request as response:
 | 
			
		||||
                        sequence_response: dict = await response.json()
 | 
			
		||||
 | 
			
		||||
                if "exact_matches" in sequence_response:
 | 
			
		||||
                    # loci -> list of alleles with id and loci
 | 
			
		||||
                    exact_matches: dict[str, Sequence[dict[str, str]]] = sequence_response["exact_matches"]  
 | 
			
		||||
                    for allele_loci, alleles in exact_matches.items():
 | 
			
		||||
                        for allele in alleles:
 | 
			
		||||
                            alelle_id = allele["allele_id"]
 | 
			
		||||
                            result_allele = Allele(allele_locus=allele_loci, allele_variant=alelle_id, partial_match_profile=None)
 | 
			
		||||
                            yield result_allele if isinstance(sequence_string, str) else (sequence_string.name, result_allele)
 | 
			
		||||
                elif "partial_matches" in sequence_response:
 | 
			
		||||
                    partial_matches: dict[str, dict[str, Union[str, float, int]]] = sequence_response["partial_matches"] 
 | 
			
		||||
                    for allele_loci, partial_match in partial_matches.items():
 | 
			
		||||
                        if len(partial_match) <= 0:
 | 
			
		||||
                            continue
 | 
			
		||||
                        partial_match_profile = AlignmentStats(
 | 
			
		||||
                            percent_identity=float(partial_match["identity"]),
 | 
			
		||||
                            mismatches=int(partial_match["mismatches"]),
 | 
			
		||||
                            gaps=int(partial_match["gaps"]),
 | 
			
		||||
                            match_metric=int(partial_match["bitscore"])
 | 
			
		||||
                        )
 | 
			
		||||
                        result_allele = Allele(
 | 
			
		||||
                            allele_locus=allele_loci,
 | 
			
		||||
                            allele_variant=str(partial_match["allele"]),
 | 
			
		||||
                            partial_match_profile=partial_match_profile
 | 
			
		||||
                        )
 | 
			
		||||
                        yield result_allele if isinstance(sequence_string, str) else (sequence_string.name, result_allele)
 | 
			
		||||
                        if "exact_matches" in sequence_response:
 | 
			
		||||
                            # loci -> list of alleles with id and loci
 | 
			
		||||
                            exact_matches: dict[str, Sequence[dict[str, str]]] = sequence_response["exact_matches"]  
 | 
			
		||||
                            for allele_loci, alleles in exact_matches.items():
 | 
			
		||||
                                for allele in alleles:
 | 
			
		||||
                                    alelle_id = allele["allele_id"]
 | 
			
		||||
                                    result_allele = Allele(allele_locus=allele_loci, allele_variant=alelle_id, partial_match_profile=None)
 | 
			
		||||
                                    yield result_allele if isinstance(sequence_string, str) else (sequence_string.name, result_allele)
 | 
			
		||||
                        elif "partial_matches" in sequence_response:
 | 
			
		||||
                            partial_matches: dict[str, dict[str, Union[str, float, int]]] = sequence_response["partial_matches"] 
 | 
			
		||||
                            for allele_loci, partial_match in partial_matches.items():
 | 
			
		||||
                                if len(partial_match) <= 0:
 | 
			
		||||
                                    continue
 | 
			
		||||
                                partial_match_profile = AlignmentStats(
 | 
			
		||||
                                    percent_identity=float(partial_match["identity"]),
 | 
			
		||||
                                    mismatches=int(partial_match["mismatches"]),
 | 
			
		||||
                                    gaps=int(partial_match["gaps"]),
 | 
			
		||||
                                    match_metric=int(partial_match["bitscore"])
 | 
			
		||||
                                )
 | 
			
		||||
                                result_allele = Allele(
 | 
			
		||||
                                    allele_locus=allele_loci,
 | 
			
		||||
                                    allele_variant=str(partial_match["allele"]),
 | 
			
		||||
                                    partial_match_profile=partial_match_profile
 | 
			
		||||
                                )
 | 
			
		||||
                                yield result_allele if isinstance(sequence_string, str) else (sequence_string.name, result_allele)
 | 
			
		||||
                        else:
 | 
			
		||||
                            raise NoBIGSdbMatchesException(self._database_name, self._scheme_id, sequence_string.name if isinstance(sequence_string, NamedString) else None)
 | 
			
		||||
                except (ConnectionError, ServerDisconnectedError, ClientOSError) as e: # Errors we will retry
 | 
			
		||||
                    last_error = e
 | 
			
		||||
                    success = False
 | 
			
		||||
                    await asyncio.sleep(5) # In case the connection issue is due to rate issues
 | 
			
		||||
                else:
 | 
			
		||||
                    raise NoBIGSdbMatchesException(self._database_name, self._scheme_id, sequence_string.name if isinstance(sequence_string, NamedString) else None)
 | 
			
		||||
                    success = True
 | 
			
		||||
            if not success and last_error is not None:
 | 
			
		||||
                try:
 | 
			
		||||
                    raise last_error
 | 
			
		||||
                except (ConnectionError, ServerDisconnectedError, ClientOSError) as e: # Non-fatal errors
 | 
			
		||||
                    yield Allele("error", "error", None)
 | 
			
		||||
 | 
			
		||||
    async def determine_mlst_st(self, alleles: Union[AsyncIterable[Union[Allele, tuple[str, Allele]]], Iterable[Union[Allele, tuple[str, Allele]]]]) -> Union[MLSTProfile, NamedMLSTProfile]:
 | 
			
		||||
        uri_path = "designations"
 | 
			
		||||
@@ -113,23 +133,43 @@ class RemoteBIGSdbMLSTProfiler(BIGSdbMLSTProfiler):
 | 
			
		||||
        request_json = {
 | 
			
		||||
            "designations": allele_request_dict
 | 
			
		||||
        }
 | 
			
		||||
        async with self._http_client.post(uri_path, json=request_json) as response:
 | 
			
		||||
            response_json: dict = await response.json()
 | 
			
		||||
            allele_set: Set[Allele] = set()
 | 
			
		||||
            response_json.setdefault("fields", dict())
 | 
			
		||||
            scheme_fields_returned: dict[str, str] = response_json["fields"]
 | 
			
		||||
            scheme_fields_returned.setdefault("ST", "unknown")
 | 
			
		||||
            scheme_fields_returned.setdefault("clonal_complex", "unknown")
 | 
			
		||||
            scheme_exact_matches: dict = response_json["exact_matches"]
 | 
			
		||||
            for exact_match_locus, exact_match_alleles in scheme_exact_matches.items():
 | 
			
		||||
                allele_set.add(Allele(exact_match_locus, exact_match_alleles[0]["allele_id"], None))
 | 
			
		||||
            if len(allele_set) == 0:
 | 
			
		||||
                raise ValueError("Passed in no alleles.")
 | 
			
		||||
            result_mlst_profile = MLSTProfile(allele_set, scheme_fields_returned["ST"], scheme_fields_returned["clonal_complex"])
 | 
			
		||||
            if len(names_list) > 0:
 | 
			
		||||
                result_mlst_profile = NamedMLSTProfile(str(tuple(names_list)) if len(set(names_list)) > 1 else names_list[0], result_mlst_profile)
 | 
			
		||||
            return result_mlst_profile
 | 
			
		||||
 | 
			
		||||
        attempts = 0
 | 
			
		||||
        success = False
 | 
			
		||||
        last_error = None
 | 
			
		||||
        while attempts < self._retry_limit and not success:
 | 
			
		||||
            attempts += 1
 | 
			
		||||
            try:
 | 
			
		||||
                async with self._http_client.post(uri_path, json=request_json) as response:
 | 
			
		||||
                    response_json: dict = await response.json()
 | 
			
		||||
                    allele_set: Set[Allele] = set()
 | 
			
		||||
                    response_json.setdefault("fields", dict())
 | 
			
		||||
                    scheme_fields_returned: dict[str, str] = response_json["fields"]
 | 
			
		||||
                    scheme_fields_returned.setdefault("ST", "unknown")
 | 
			
		||||
                    scheme_fields_returned.setdefault("clonal_complex", "unknown")
 | 
			
		||||
                    scheme_exact_matches: dict = response_json["exact_matches"]
 | 
			
		||||
                    for exact_match_locus, exact_match_alleles in scheme_exact_matches.items():
 | 
			
		||||
                        allele_set.add(Allele(exact_match_locus, exact_match_alleles[0]["allele_id"], None))
 | 
			
		||||
                    if len(allele_set) == 0:
 | 
			
		||||
                        raise ValueError("Passed in no alleles.")
 | 
			
		||||
                    result_mlst_profile = MLSTProfile(allele_set, scheme_fields_returned["ST"], scheme_fields_returned["clonal_complex"])
 | 
			
		||||
                    if len(names_list) > 0:
 | 
			
		||||
                        result_mlst_profile = NamedMLSTProfile(str(tuple(names_list)) if len(set(names_list)) > 1 else names_list[0], result_mlst_profile)
 | 
			
		||||
                    return result_mlst_profile
 | 
			
		||||
            except (ConnectionError, ServerDisconnectedError, ClientOSError) as e:
 | 
			
		||||
                last_error = e
 | 
			
		||||
                success = False
 | 
			
		||||
                await asyncio.sleep(5)
 | 
			
		||||
            else:
 | 
			
		||||
                success = True
 | 
			
		||||
        try:
 | 
			
		||||
            if last_error is not None:
 | 
			
		||||
                raise last_error
 | 
			
		||||
        except (ConnectionError, ServerDisconnectedError, ClientOSError) as e:
 | 
			
		||||
                result_mlst_profile = NamedMLSTProfile((str(tuple(names_list)) if len(set(names_list)) > 1 else names_list[0]) + ":Error", None)
 | 
			
		||||
        raise ValueError("Last error was not recorded.")
 | 
			
		||||
 | 
			
		||||
                    
 | 
			
		||||
    async def profile_string(self, query_sequence_strings: Iterable[Union[NamedString, str]]) -> Union[NamedMLSTProfile, MLSTProfile]:
 | 
			
		||||
        alleles = self.determine_mlst_allele_variants(query_sequence_strings)
 | 
			
		||||
        return await self.determine_mlst_st(alleles)
 | 
			
		||||
@@ -211,6 +251,16 @@ class BIGSdbIndex(AbstractAsyncContextManager):
 | 
			
		||||
 | 
			
		||||
    async def build_profiler_from_seqdefdb(self, local: bool, dbseqdef_name: str, scheme_id: int) -> BIGSdbMLSTProfiler:
 | 
			
		||||
        return get_BIGSdb_MLST_profiler(local, await self.get_bigsdb_api_from_seqdefdb(dbseqdef_name), dbseqdef_name, scheme_id)
 | 
			
		||||
    
 | 
			
		||||
    async def get_scheme_loci(self, dbseqdef_name: str, scheme_id: int) -> list[str]:
 | 
			
		||||
        uri_path = f"{await self.get_bigsdb_api_from_seqdefdb(dbseqdef_name)}/db/{dbseqdef_name}/schemes/{scheme_id}"
 | 
			
		||||
        async with self._http_client.get(uri_path) as response:
 | 
			
		||||
            response_json = await response.json()
 | 
			
		||||
            loci = response_json["loci"]
 | 
			
		||||
            results = []
 | 
			
		||||
            for locus in loci:
 | 
			
		||||
                results.append(path.basename(locus))
 | 
			
		||||
            return results
 | 
			
		||||
 | 
			
		||||
    async def close(self):
 | 
			
		||||
        await self._http_client.close()
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,6 @@
 | 
			
		||||
import asyncio
 | 
			
		||||
from io import TextIOWrapper
 | 
			
		||||
from os import path
 | 
			
		||||
from typing import Any, AsyncGenerator, Iterable, Union
 | 
			
		||||
from Bio import SeqIO
 | 
			
		||||
 | 
			
		||||
@@ -9,7 +10,7 @@ async def read_fasta(handle: Union[str, TextIOWrapper]) -> Iterable[NamedString]
 | 
			
		||||
    fasta_sequences = asyncio.to_thread(SeqIO.parse, handle=handle, format="fasta")
 | 
			
		||||
    results = []
 | 
			
		||||
    for fasta_sequence in await fasta_sequences:
 | 
			
		||||
        results.append(NamedString(fasta_sequence.id, str(fasta_sequence.seq)))
 | 
			
		||||
        results.append(NamedString("{0}:{1}".format(path.basename(handle.name if isinstance(handle, TextIOWrapper) else handle), fasta_sequence.id), str(fasta_sequence.seq)))
 | 
			
		||||
    return results
 | 
			
		||||
 | 
			
		||||
async def read_multiple_fastas(handles: Iterable[Union[str, TextIOWrapper]]) -> AsyncGenerator[Iterable[NamedString], Any]:
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
from collections import defaultdict
 | 
			
		||||
import csv
 | 
			
		||||
from os import PathLike
 | 
			
		||||
from typing import AsyncIterable, Collection, Mapping, Sequence, Union
 | 
			
		||||
from typing import AsyncIterable, Collection, Iterable, Mapping, Sequence, Union
 | 
			
		||||
 | 
			
		||||
from autobigs.engine.structures.mlst import Allele, MLSTProfile, NamedMLSTProfile
 | 
			
		||||
 | 
			
		||||
@@ -17,7 +17,7 @@ def alleles_to_text_map(alleles: Collection[Allele]) -> Mapping[str, Union[Seque
 | 
			
		||||
            result[locus] = tuple(result[locus]) # type: ignore
 | 
			
		||||
    return dict(result)
 | 
			
		||||
 | 
			
		||||
async def write_mlst_profiles_as_csv(mlst_profiles_iterable: AsyncIterable[NamedMLSTProfile], handle: Union[str, bytes, PathLike[str], PathLike[bytes]]) -> Sequence[str]:
 | 
			
		||||
async def write_mlst_profiles_as_csv(mlst_profiles_iterable: AsyncIterable[NamedMLSTProfile], handle: Union[str, bytes, PathLike[str], PathLike[bytes]], allele_names: Iterable[str]) -> Sequence[str]:
 | 
			
		||||
    failed = list()
 | 
			
		||||
    with open(handle, "w", newline='') as filehandle:
 | 
			
		||||
        header = None
 | 
			
		||||
@@ -30,7 +30,7 @@ async def write_mlst_profiles_as_csv(mlst_profiles_iterable: AsyncIterable[Named
 | 
			
		||||
                continue
 | 
			
		||||
            allele_mapping = alleles_to_text_map(mlst_profile.alleles)
 | 
			
		||||
            if writer is None:
 | 
			
		||||
                header = ["id", "st", "clonal-complex", *sorted(allele_mapping.keys())]
 | 
			
		||||
                header = ["id", "st", "clonal-complex", *sorted(allele_names)]
 | 
			
		||||
                writer = csv.DictWriter(filehandle, fieldnames=header)
 | 
			
		||||
                writer.writeheader()
 | 
			
		||||
            row_dictionary = {
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,7 @@ import pytest
 | 
			
		||||
from autobigs.engine.analysis import bigsdb
 | 
			
		||||
from autobigs.engine.structures import mlst
 | 
			
		||||
from autobigs.engine.structures.genomics import NamedString
 | 
			
		||||
from autobigs.engine.structures.mlst import Allele, MLSTProfile
 | 
			
		||||
from autobigs.engine.structures.mlst import Allele, MLSTProfile, NamedMLSTProfile
 | 
			
		||||
from autobigs.engine.exceptions.database import NoBIGSdbExactMatchesException, NoBIGSdbMatchesException
 | 
			
		||||
from autobigs.engine.analysis.bigsdb import BIGSdbIndex, BIGSdbMLSTProfiler, RemoteBIGSdbMLSTProfiler
 | 
			
		||||
 | 
			
		||||
@@ -131,11 +131,21 @@ class TestBIGSdbMLSTProfiler:
 | 
			
		||||
        async with bigsdb.get_BIGSdb_MLST_profiler(local_db, database_api, database_name, scheme_id) as dummy_profiler:
 | 
			
		||||
            async for named_profile in dummy_profiler.profile_multiple_strings(generate_async_iterable(dummy_sequences)):
 | 
			
		||||
                name, profile = named_profile.name, named_profile.mlst_profile
 | 
			
		||||
                assert profile is not None
 | 
			
		||||
                assert isinstance(profile, MLSTProfile)
 | 
			
		||||
                assert profile.clonal_complex == expected_profile.clonal_complex
 | 
			
		||||
                assert profile.sequence_type == expected_profile.sequence_type
 | 
			
		||||
 | 
			
		||||
    async def test_bigsdb_profile_named_string_no_repeat_name(self, local_db, database_api, database_name, scheme_id, seq_path: str, feature_seqs_path: str, expected_profile: MLSTProfile, bad_profile: MLSTProfile):
 | 
			
		||||
        sequence = get_first_sequence_from_fasta(seq_path)
 | 
			
		||||
        async with bigsdb.get_BIGSdb_MLST_profiler(local_db, database_api, database_name, scheme_id) as dummy_profiler:
 | 
			
		||||
            named_profile = await dummy_profiler.profile_string([NamedString("BX470248.1", sequence)])
 | 
			
		||||
            assert isinstance(named_profile, NamedMLSTProfile)
 | 
			
		||||
            name, profile = named_profile.name, named_profile.mlst_profile
 | 
			
		||||
            assert isinstance(profile, MLSTProfile)
 | 
			
		||||
            assert profile.clonal_complex == expected_profile.clonal_complex
 | 
			
		||||
            assert profile.sequence_type == expected_profile.sequence_type
 | 
			
		||||
            assert name == "BX470248.1"
 | 
			
		||||
 | 
			
		||||
    async def test_bigsdb_profile_multiple_strings_exactmatch_fail_second_no_stop(self, local_db, database_api, database_name, scheme_id, seq_path: str, feature_seqs_path: str, expected_profile: MLSTProfile, bad_profile: MLSTProfile):
 | 
			
		||||
        valid_seq = get_first_sequence_from_fasta(seq_path)
 | 
			
		||||
        dummy_sequences = [[NamedString("seq1", valid_seq)], [NamedString("should_fail", gene_scrambler(valid_seq, 0.3))], [NamedString("seq3", valid_seq)]]
 | 
			
		||||
@@ -212,3 +222,12 @@ class TestBIGSdbIndex:
 | 
			
		||||
                assert isinstance(profile, MLSTProfile)
 | 
			
		||||
                assert profile.clonal_complex == "ST-2 complex"
 | 
			
		||||
                assert profile.sequence_type == "1"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    @pytest.mark.parametrize(["bigsdb_name", "scheme_id", "expected"], [
 | 
			
		||||
        ("pubmlst_bordetella_seqdef", 3, ["adk", "fumC", "glyA", "tyrB", "icd", "pepA", "pgm"])
 | 
			
		||||
    ])
 | 
			
		||||
    async def test_bigsdb_index_fetches_loci_names(self, bigsdb_name, scheme_id, expected):
 | 
			
		||||
        async with BIGSdbIndex() as bigsdb_index:
 | 
			
		||||
            loci = await bigsdb_index.get_scheme_loci(bigsdb_name, scheme_id)
 | 
			
		||||
            assert set(loci) == set(expected)
 | 
			
		||||
@@ -4,4 +4,9 @@ from autobigs.engine.reading import read_fasta
 | 
			
		||||
async def test_fasta_reader_not_none():
 | 
			
		||||
    named_strings = await read_fasta("tests/resources/tohama_I_bpertussis.fasta")
 | 
			
		||||
    for named_string in named_strings:
 | 
			
		||||
        assert named_string.name == "BX470248.1"
 | 
			
		||||
        assert named_string.name is not None
 | 
			
		||||
 | 
			
		||||
async def test_fasta_reader_name_contains_file_and_id():
 | 
			
		||||
    named_strings = await read_fasta("tests/resources/tohama_I_bpertussis.fasta")
 | 
			
		||||
    for named_string in named_strings:
 | 
			
		||||
        assert named_string.name == "tohama_I_bpertussis.fasta:BX470248.1"
 | 
			
		||||
 
 | 
			
		||||
@@ -27,15 +27,28 @@ async def test_column_order_is_same_as_expected_file(dummy_alphabet_mlst_profile
 | 
			
		||||
    dummy_profiles = [dummy_alphabet_mlst_profile]
 | 
			
		||||
    with tempfile.TemporaryDirectory() as temp_dir:
 | 
			
		||||
        output_path = path.join(temp_dir, "out.csv")
 | 
			
		||||
        await write_mlst_profiles_as_csv(iterable_to_asynciterable(dummy_profiles), output_path)
 | 
			
		||||
        await write_mlst_profiles_as_csv(iterable_to_asynciterable(dummy_profiles), output_path, ["A", "D", "B", "C"])
 | 
			
		||||
        with open(output_path) as csv_handle:
 | 
			
		||||
            csv_reader = reader(csv_handle)
 | 
			
		||||
            lines = list(csv_reader)
 | 
			
		||||
            target_columns = lines[4:]
 | 
			
		||||
            target_columns = lines[0][3:]
 | 
			
		||||
            assert target_columns == sorted(target_columns)
 | 
			
		||||
 | 
			
		||||
async def test_csv_writing_sample_name_not_repeated_when_single_sequence(dummy_alphabet_mlst_profile):
 | 
			
		||||
    dummy_profiles = [dummy_alphabet_mlst_profile]
 | 
			
		||||
    with tempfile.TemporaryDirectory() as temp_dir:
 | 
			
		||||
        output_path = path.join(temp_dir, "out.csv")
 | 
			
		||||
        await write_mlst_profiles_as_csv(iterable_to_asynciterable(dummy_profiles), output_path, ["A", "D", "B", "C"])
 | 
			
		||||
        with open(output_path) as csv_handle:
 | 
			
		||||
            csv_reader = reader(csv_handle)
 | 
			
		||||
            lines = list(csv_reader)
 | 
			
		||||
            sample_name = lines[1][0]
 | 
			
		||||
            assert sample_name == "name"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
async def test_alleles_to_text_map_mapping_is_correct(dummy_alphabet_mlst_profile: NamedMLSTProfile):
 | 
			
		||||
    mapping = alleles_to_text_map(dummy_alphabet_mlst_profile.mlst_profile.alleles) # type: ignore
 | 
			
		||||
    assert dummy_alphabet_mlst_profile.mlst_profile is not None
 | 
			
		||||
    mapping = alleles_to_text_map(dummy_alphabet_mlst_profile.mlst_profile.alleles)
 | 
			
		||||
    expected_mapping = {
 | 
			
		||||
        "A": "1",
 | 
			
		||||
        "B": "1",
 | 
			
		||||
@@ -45,3 +58,13 @@ async def test_alleles_to_text_map_mapping_is_correct(dummy_alphabet_mlst_profil
 | 
			
		||||
    for allele_name, allele_ids in mapping.items():
 | 
			
		||||
        assert allele_name in expected_mapping
 | 
			
		||||
        assert allele_ids == expected_mapping[allele_name]
 | 
			
		||||
 | 
			
		||||
async def test_csv_writing_includes_asterisk_for_non_exact(dummy_alphabet_mlst_profile: NamedMLSTProfile):
 | 
			
		||||
    dummy_profiles = [dummy_alphabet_mlst_profile]
 | 
			
		||||
    with tempfile.TemporaryDirectory() as temp_dir:
 | 
			
		||||
        output_path = path.join(temp_dir, "out.csv")
 | 
			
		||||
        await write_mlst_profiles_as_csv(iterable_to_asynciterable(dummy_profiles), output_path, ["A", "D", "B", "C"])
 | 
			
		||||
        with open(output_path) as csv_handle:
 | 
			
		||||
            csv_reader = reader(csv_handle)
 | 
			
		||||
            lines = list(csv_reader)
 | 
			
		||||
            assert '*' in lines[1][5]
 | 
			
		||||
							
								
								
									
										133
									
								
								tests/resources/B3913_bpertussis_minimized_features.fasta
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										133
									
								
								tests/resources/B3913_bpertussis_minimized_features.fasta
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,133 @@
 | 
			
		||||
>lcl|CP011447.1_gene_2762 [gene=adk] [locus_tag=B3913_2762] [location=2916440..2917096] [gbkey=Gene]
 | 
			
		||||
ATGCGTCTCATTCTGCTCGGACCGCCCGGAGCCGGCAAAGGCACCCAAGCCGCCTTTCTCACCCAACACT
 | 
			
		||||
ACGGCATCCCGCAGATATCCACCGGTGACATGCTGCGCGCCGCCGTCAAGGCCGGCACGCCGCTGGGCCT
 | 
			
		||||
GGAAGCCAAGAAGGTCATGGACGCGGGCGGCCTGGTCTCGGACGACCTGATCATCGGCCTGGTGCGCGAT
 | 
			
		||||
CGCCTGACCCAGCCCGATTGCGCCAACGGCTACCTGTTCGACGGTTTCCCGCGCACCATCCCGCAGGCCG
 | 
			
		||||
ACGCGCTCAAGAGCGCCGGCATCGCGCTGGATTACGTGGTCGAGATCGAAGTGCCGGAAAGCGACATCAT
 | 
			
		||||
CGAACGCATGAGCGAACGCCGCGTGCACCCGGCCAGCGGCCGCAGCTACCACGTACGCTTCAATCCGCCC
 | 
			
		||||
AAGGCCGAAGGCGTGGACGACGTCACGGGCGAACCGCTGGTGCAGCGCGACGACGACCGCGAGGAAACCG
 | 
			
		||||
TGCGCCATCGTCTCAACGTCTACCAGAACCAGACCCGCCCGCTGGTCGACTACTACTCGTCCTGGGCCCA
 | 
			
		||||
GTCCGATGCCGCCGCGGCGCCCAAGTACCGCAAGATCTCCGGCGTCGGCTCGGTCGACGAAATCAAGAGC
 | 
			
		||||
CGCCTGTCGCAGGCTCTGCAGAGCTAA
 | 
			
		||||
>lcl|CP011447.1_gene_253 [gene=fumC] [locus_tag=B3913_0253] [location=257438..258829] [gbkey=Gene]
 | 
			
		||||
ATGAAAACCCGCACCGAAAAAGACACTTTCGGCCCGATCGAGGTGCCCGAGCAGCACCTGTGGGGCGCGC
 | 
			
		||||
AGACCCAGCGCTCGCTGCATTTCTTCGCGATCTCGACCGAGAAGATGCCGGTGCCGCTGGTCGCCGCCAT
 | 
			
		||||
GGCACGCCTGAAGCGCGCCGCCGCCAAGGTCAACGCCGAGCTGGGCGAGCTGGATCCGCAGGTCGCAGAC
 | 
			
		||||
GCCATCATGCGGGCCGCCGATGAGGTGATCGCCGGCAAGTGGCCCGACGAGTTTCCGCTGTCGGTCTGGC
 | 
			
		||||
AGACCGGCTCGGGCACGCAGAGCAACATGAACATGAACGAGGTGCTGGCCAACCGCGCCTCCGAGCTGCT
 | 
			
		||||
GGGCGGCGAGCGCGGCGAAGGCCGCAAGGTGCACCCCAACGACCACGTGAACCGGGGCCAGTCGTCCAAC
 | 
			
		||||
GATACCTTTCCGACCGCCATGCACGTGGCCGCCGCGGTCGAGGTCGAGCACCGCGTGCTGCCCGCCCTGA
 | 
			
		||||
AGGCGTTGCGCGGCACGCTGGCCGCCAAGAGCGCGGCGTTCTACGACATCGTCAAGATCGGTCGCACCCA
 | 
			
		||||
TTTGCAGGACGCCACCCCGTTGACGCTGGGCCAGGAGATCTCCGGCTACGTGGCGCAGCTGGACCTGGCC
 | 
			
		||||
GAGCAGCAGATCCGCGCGACGCTGGCCGGCCTGCACCAGCTGGCCATCGGCGGCACGGCGGTGGGCACCG
 | 
			
		||||
GCCTGAACGCGCATCCGCAGTTCAGCGCCAAGGTATCGGCCGAACTGGCCCATGACACGGGCAGCGCGTT
 | 
			
		||||
CGTGTCGGCGCCCAACAAGTTCCAGGCGCTGGCTTCGCACGAGGCGCTGCTGTTCGCGCACGGCGCCTTG
 | 
			
		||||
AAGACGCTGGCCGCCGGCCTGATGAAGATCGCCAACGATGTGCGCTGGCTGGCCAGCGGCCCGCGCTCGG
 | 
			
		||||
GGCTGGGCGAAATCAGCATTCCCGAGAACGAGCCGGGCAGCTCCATCATGCCGGGCAAGGTCAACCCGAC
 | 
			
		||||
CCAGTGCGAAGCCGTCACGATGCTGGCCGCGCAGGTCATGGGCAACGACGTGGCCATCAATGTCGGCGGG
 | 
			
		||||
GCCAGCGGCAACTTCGAGCTGAACGTCTTCAAGCCGCTGGTGATCCACAATTTCCTGCAGTCGGTGCGCC
 | 
			
		||||
TGCTGGCCGACGGCATGGTCAGCTTCGACAAGCACTGCGCGGCCGGCATCGAGCCCAACCGCGAGCGCAT
 | 
			
		||||
CACCGAGCTGGTCGAGCGTTCGCTGATGCTGGTGACTGCGCTCAACCCGCACATCGGCTACGACAAGGCC
 | 
			
		||||
GCGCAGATCGCCAAGAAGGCGCACAAGGAAAACCTGTCGCTGAAAGAGGCGGCGCTGGCGCTGGGGCACC
 | 
			
		||||
TGACCGAGGCGCAGTTCGCCGAGTGGGTGGTGCCGGGCGACATGACCAACGCGCGCCGCTAG
 | 
			
		||||
>lcl|CP011447.1_gene_2963 [gene=glyA] [locus_tag=B3913_2963] [location=complement(3129365..3130612)] [gbkey=Gene]
 | 
			
		||||
ATGTTCAACCGCAACCTGACCCTCGACCAGGTGGATCCCGACGTCTGGGCCGCCATCCAGAAAGAAGACG
 | 
			
		||||
TACGCCAGGAACAGCACATCGAGCTGATCGCGTCCGAGAACTACGCCAGCCCCGCCGTGATGCAGGCCCA
 | 
			
		||||
GGGCACGCAACTGACCAACAAGTATGCGGAAGGCTACCCGGGCAAGCGCTACTACGGCGGTTGCGAGTAC
 | 
			
		||||
GTCGACGTGGTCGAGCAGCTGGCCATCGACCGCCTGAAGCAGATTTTCGGCGCCGAGGCCGCCAACGTGC
 | 
			
		||||
AGCCGAACTCCGGCTCGCAGGCCAACCAGGGCGTGTACATGGCGGTGCTCAAGCCGGGCGATACCGTGCT
 | 
			
		||||
GGGCATGAGCCTGGCCGAAGGCGGTCACCTGACGCACGGCGCGTCGGTCAACGCCTCGGGCAAGCTGTAC
 | 
			
		||||
AACTTCGTGCCCTACGGCCTGGACGCCGACGAGGTGCTGGACTACGCCCAGGTCGAGCGGCTGACCAAGG
 | 
			
		||||
AACACAAGCCCAAGCTGATCGTGGCCGGCGCCTCCGCGTACGCGCTGCACATCGACTTCGAGCGCATGGC
 | 
			
		||||
GCGCATCGCCCACGACAACGGCGCGCTGTTCATGGTGGACATCGCCCACTATGCCGGCCTGGTGGCCGGC
 | 
			
		||||
GGCGCCTATCCCAACCCGGTGCCGCACGCCGATTTCGTCACCTCCACCACGCACAAGTCGCTGCGCGGCC
 | 
			
		||||
CGCGCGGCGGCGTCATCATGATGAAGGCCGAGTTCGAGAAGGCCGTCAATTCGGCCATCTTCCCGGGCAT
 | 
			
		||||
CCAGGGCGGTCCGCTGATGCACGTCATCGCGGCCAAGGCCGTGGCCTTCAAGGAAGCGCTGTCGCCCGAG
 | 
			
		||||
TTCCAGGATTACGCCCAGCAGGTCGTCAAGAACGCCAAGGTGCTGGCCGATACGCTGGTCAAGCGCGGCC
 | 
			
		||||
TGCGCATCGTGTCGGGCAGGACCGAAAGCCACGTCATGCTGGTGGACCTGCGTCCCAAGGGCATTACCGG
 | 
			
		||||
CAAGGAAGCGGAAGCGGTGCTGGGCCAGGCCCACATCACGGTCAACAAGAACGCCATTCCCAACGACCCG
 | 
			
		||||
GAAAAGCCCTTCGTGACCAGCGGCATCCGCCTGGGCACTCCGGCCATGACCACCCGCGGCTTCAAGGAGG
 | 
			
		||||
CCGAGGCCGAGCTGACCGCCAACCTGATCGCCGACGTGCTGGACAATCCGCGCGACGAGGCGAACATCGC
 | 
			
		||||
CGCGGTGCGCGCGCGGGTCAATGAACTGACCGCCCGCCTGCCCGTCTACGGCAACTGA
 | 
			
		||||
>lcl|CP011447.1_gene_2473 [gene=icd] [locus_tag=B3913_2473] [location=complement(2605674..2606930)] [gbkey=Gene]
 | 
			
		||||
ATGTCCTATCAACATATCAAGGTTCCCACTGGGGGCCAAAAAATCACGGTCAACGCCGATTACTCGCTGA
 | 
			
		||||
ATGTGCCCGATCAGGTCATCATTCCGGTCATCGAGGGTGACGGTACGGGCGCCGACATCACGCCGGTGAT
 | 
			
		||||
GATTAAGGTCGTCGACGCGGCCGTGCAGAAGGCCTATGCGGGCAAGCGCAAGATCCACTGGATGGAAGTC
 | 
			
		||||
TACGCCGGCGAGAAGGCCACCAAGGTCTACGGCCCGGACGTCTGGCTGCCCGAGGAAACCCTCGACGCCG
 | 
			
		||||
TCAAGGACTACGTGGTGTCGATCAAGGGTCCGCTGACCACGCCGGTCGGCGGCGGCATCCGTTCGCTGAA
 | 
			
		||||
CGTGGCGCTGCGCCAGCAGCTGGACCTGTATGTCTGCCTGCGCCCGGTGCGCTACTTCAAGGGCGTGCCC
 | 
			
		||||
TCGCCGGTGCGCGAGCCCGAGAAGACCGACATGGTCATCTTCCGCGAGAACTCGGAAGACATCTACGCGG
 | 
			
		||||
GCATCGAGTACATGGCCGAGTCCGAGCAGGCCAAGGACCTGATCCAGTACCTGCAGACCAAGCTGGGCGT
 | 
			
		||||
GACCAAGATCCGCTTCCCGAACACCTCGTCGATCGGCATCAAGCCGGTTTCGCGCGAAGGCACCGAGCGC
 | 
			
		||||
CTGGTGCGCAAGGCGCTGCAGTACGCCATCGACAATGACCGCGCCTCGGTGACCCTGGTCCACAAGGGCA
 | 
			
		||||
ACATCATGAAGTTCACGGAAGGCGGCTTCCGCGACTGGGGCTACGCCCTGGCCCAGAACGAGTTCGGCGC
 | 
			
		||||
GCAGCCGATCGACGGCGGCCCGTGGTGCAAGTTCAAGAATCCCAAGACGGGTCGCGAGATCATCGTCAAG
 | 
			
		||||
GATTCGATCGCCGACGCCTTCCTGCAGCAGATCCTGCTGCGTCCGGCCGAATACGACGTGATCGCCACGC
 | 
			
		||||
TGAACCTGAACGGCGACTACATCTCCGACGCGCTGGCCGCGCAAGTGGGCGGCATCGGCATTGCCCCGGG
 | 
			
		||||
CGCCAACCTGTCGGATTCCGTGGCCATGTTCGAAGCCACCCACGGCACCGCGCCGAAGTACGCGGGCAAG
 | 
			
		||||
GACTACGTGAACCCCGGTTCCGAAATCCTGTCGGCCGAAATGATGCTGCGCCACATGGGCTGGACCGAGG
 | 
			
		||||
CCGCCGACCTGATCATCGCCAGCATGGAGAAATCCATCCTGTCCAAGAAGGTCACCTATGACTTCGCCCG
 | 
			
		||||
TCTGCTCGAAGGCGCCACCCAGGTGTCGTGCTCGGGCTTCGGTCAGGTCATGATCGACAATATGTAA
 | 
			
		||||
>lcl|CP011447.1_gene_2403 [gene=pepA] [locus_tag=B3913_2403] [location=2531836..2533335] [gbkey=Gene]
 | 
			
		||||
ATGGAATTTAGCACACAGACCACTGCCTCCCTGCATCAGATCAAGACTGCGGCCCTGGCCGTCGGCGTCT
 | 
			
		||||
TCGCCGACGGCGTGCTCAGCGCCGCCGCCGAAGTCATCGACCGCGCCAGCCACGGTGCCGTGGCCGCCGT
 | 
			
		||||
GGTGAAAAGCGAGTTCCGCGGCCGCACCGGCAGCACGCTGGTGCTGCGCAGCCTGGCCGGCGTCAGCGCC
 | 
			
		||||
CAGCGCGTGGTGCTGGTGGGCCTGGGCAAGCAGGCCGAATACAACGCCCGCGCGCACGCCAGCGCCGAAC
 | 
			
		||||
AGGCGTTCGCCGCGGCGTGCGTCGCGGCCCAGGTGGGCGAAGGCGTGTCGACCCTGGCCGGCGTGGCCAT
 | 
			
		||||
CGAGGGCGTGCCGGTGCGCGCCCGCGCGCGCAGCGCCGCCATCGCCGCGGGCGCGGCGGCCTACCATTAC
 | 
			
		||||
GATGCGACGTTCGGCAAGGCCAATCGCGACGCCCGCCCCAGGTTGAAGAAAATCGTCCAGGTGGTCGACC
 | 
			
		||||
GCGCGGCCTCCGCGCAGGCGCAGCTGGGCCTGCGCGAAGGCGCGGCCATCGCCCACGGCATGGAATTGAC
 | 
			
		||||
CCGCACGCTGGGCAACCTGCCCGGCAACGTGTGCACGCCGGCCTATCTCGGCAATACCGCCAAGAAACTG
 | 
			
		||||
GCGCGCGAATTCAAGAGCCTCAAGGTCGAGGTGCTCGAACGCAAGCAGGTCGAGGCGCTGGGCATGGGCT
 | 
			
		||||
CGTTCCTCTCGGTCGCGCGCGGCTCGGAAGAACCGCTGCGCTTCATCGTGCTGCGCCATGCCGGCAAGCC
 | 
			
		||||
CGCCAAGAAGGACAAGGCCGGCCCGGTCGTCCTGGTGGGCAAGGGCATCACCTTCGATGCTGGCGGCATC
 | 
			
		||||
TCGCTCAAGCCGGCCGCCACGATGGACGAAATGAAGTACGACATGTGCGGCGCGGCCAGCGTGCTGGGCA
 | 
			
		||||
CGTTCCGCGCCCTGGCCGAGCTGGAGCTGCCGCTGGATGTGGTGGGCCTGATCGCGGCGTGCGAGAACCT
 | 
			
		||||
GCCCAGCGGCAAGGCCAACAAGCCCGGCGACGTGGTCACCAGCATGTCGGGCCAGACCATCGAGATCCTC
 | 
			
		||||
AACACCGACGCCGAAGGCCGCCTGGTGCTGTGCGATGCCCTGACCTACGCCGAGCGCTTCAAGCCCGCGG
 | 
			
		||||
CCGTGATCGACATCGCCACGTTGACCGGCGCCTGCGTGGTAGCCCTGGGCAACGTCAATAGCGGCCTGTT
 | 
			
		||||
CTCCAAGGACGACGCGCTGGCCGACGCGCTGCTGGCCGCCAGCCGCCAGTCGCTCGACCCGGCCTGGCGC
 | 
			
		||||
CTGCCGCTGGACGATGCCTACCAGGACCAGCTCAAGTCCAACTTCGCCGACATCGCCAACATCGGCGGCC
 | 
			
		||||
CCCCGGCCGGCGCGGTCACGGCGGCCTGCTTCCTGTCGCGCTTCACCAAGGCTTATCCGTGGGCGCACCT
 | 
			
		||||
GGACATCGCCGGCACGGCCTGGCGCGGCGGCAAGGACAAGGGCGCCACCGGCCGGCCGGTGCCGCTGCTG
 | 
			
		||||
ATGCAGTACCTGCTGGACCAGGCAGGCTGA
 | 
			
		||||
>lcl|CP011447.1_gene_3165 [gene=pgm] [locus_tag=B3913_3165] [location=3355021..3356403] [gbkey=Gene]
 | 
			
		||||
GTGGCGCACCCCTTTCCCGCATCGGTCTACAAGGCGTACGACATCCGTGGCTCGGTTCCCGACCAGCTCG
 | 
			
		||||
ACCCGGTATTCGCCCGGGCGCTGGGCCGCGCCCTGGCCGCCAGCGCCCGCGCGCAGGGCATCGGCGCCCT
 | 
			
		||||
GGTGGTCGGCCGCGACGGCCGCCTGAGCAGCCCCGACCTGGCCGGCGCGCTGCAGGAAGGCATCATGGAA
 | 
			
		||||
GGCGGCGTGGACACCCTGGACATCGGCCAGGTGCCCACGCCGCTGGTCTATTTCGCGGCGCACATCCAGG
 | 
			
		||||
GCACGGGCTCGGGCGTGGCGGTCACCGGCAGCCACAACCCGCCGCAGTACAACGGCTTCAAGATGATGAT
 | 
			
		||||
GGGCGGCCAGGCCCTGTACGGCCCGGCCGTGCAGGCGCTGCGCCCGGCCATGCTGGCGCCGGCTGCGGCG
 | 
			
		||||
CCGGGCACCTGGGGCGAACGCCGCCAGCTCGATGTCGTCCCCGCCTATATCGAGCGCATCGTGTCCGACG
 | 
			
		||||
TGAAGCTGGCGCGCCCCATGAAGATCGCCGTCGACTGCGGCAATGGCGTGGCCGGCGCCCTGGCGCCGCA
 | 
			
		||||
ACTGTTCCGCGCGCTGGGTTGCGAAGTGGACGAGCTCTATTGCGAGGTCGACGGCACGTTTCCCAACCAC
 | 
			
		||||
CATCCCGACCCGGCCGAACCGCGCAACCTGCAGGACCTGATCGCCCATGTCACCAGCACCGACTGCGAGC
 | 
			
		||||
TGGGCCTGGCCTTCGACGGCGACGGCGACCGCCTCGGCGTGGTGACCAAGTCCGGCCAGATCATCTGGCC
 | 
			
		||||
CGACCGCCAGCTGATCCTGTTCGCCCGCGACGTGCTGGCCCGCTGTCCCGGCGCGACCATCATCTATGAC
 | 
			
		||||
GTCAAGTGCAGCCAGCACGTGGGCGTGGCCATCGAGCAAAGCGGCGGCGTGCCGCTGATGTGGCAGACTG
 | 
			
		||||
GCCATTCGCTGGTGAAGGCCAAGCTGGCCGAGACCGGCGCGCCGCTGGCCGGCGAGATGAGCGGCCATAT
 | 
			
		||||
CTTCTTCAAGGAGCGCTGGTACGGCTTCGACGACGGCCTGTACACCGGCGCCCGCCTGCTGGAAATCGTC
 | 
			
		||||
TCCCGCGAAACCGATGCGTCGCGCCCGCTGGAGGCCCTGCCGCAGGCGCTGTCGACCCCCGAGCTCAAGC
 | 
			
		||||
TGGAGATGGCCGAGGGCGAGCCGCATGCGCTGATCGCCGCCCTGCAGCAGCAGGGCGAGTTCGCCAGCGC
 | 
			
		||||
CAGCCGGCTGGTTACGATAGACGGCGTGCGCGCGGAATACCCGGACGGCTTCGGGCTGGCGCGCGCCTCC
 | 
			
		||||
AATACCACCCCCGTCGTCGTGCTGCGCTTCGAAGCGGAGACCGAGCCGGGCCTGGCCCGCATCCAGCAGG
 | 
			
		||||
AATTCCGCCAGCAGCTGCTGCGGCTGGCTCCGCAAGCCAAACTGCCCTTCTGA
 | 
			
		||||
>lcl|CP011447.1_gene_2110 [gene=tyrB] [locus_tag=B3913_2110] [location=2214524..2215726] [gbkey=Gene]
 | 
			
		||||
ATGAGCACTCTTTTCGCTTCCGTCGAACTCGCGCCGCGCGACCCCATTCTTGGCCTGAACGAACAGTACA
 | 
			
		||||
ACGCCGATACCCGTCCCGGCAAAGTGAACCTGGGCGTGGGCGTGTACTACGACGACGAAGGCCGCATCCC
 | 
			
		||||
GCTGCTTCAGGCCGTGCGCAAGGCCGAGGTGGCCCGCATCGAAGCCGCCGCCGCCCGCGGCTATCTGCCG
 | 
			
		||||
ATCGAAGGCATCGCGGGGTACAACAAGGGTGCGCAGGCGCTGCTGCTGGGCGCCGACTCGCCGCTGGCCG
 | 
			
		||||
CCGAAGGCCGCGTGCTGACCGCGCAGGCCCTGGGCGGCACCGGCGCGCTGAAGATCGGCGCCGACTTCCT
 | 
			
		||||
GCGCCAGCTGCTGCCGCAGTCCAAGGTCCTCATCAGCGACCCCAGCTGGGAAAACCACCGCGCCCTGTTC
 | 
			
		||||
GAGCGCGCCGGCTTCCCGGTCGAGACCTACGCTTATTACGATGCCGCCACCCATGGCCTGAACTTCGAAG
 | 
			
		||||
CCATGCTGGCCGCCCTGCAGGCCGCGCCCGAACAGACCATCGTGGTGCTGCACGCCTGCTGCCACAACCC
 | 
			
		||||
GACCGGCGTCGATCCCACGCCGCAACAGTGGGAACAGATCGCCGCCGTGGTCAAGGCGCGCAACCTGGTG
 | 
			
		||||
CCGTTCCTCGACATCGCCTACCAGGGCTTCGGCGAAGGCCTGGAGCAGGACGCCGCCGTGGTGCGCATGT
 | 
			
		||||
TCGCCGAGCTCGACCTGACCATGTTCATCAGCTCGTCGTTCTCCAAGTCCTTCTCGCTGTATGGCGAGCG
 | 
			
		||||
GGTCGGGGCCCTGACCGTGGTGGCCGGCAGCAAGGACGAGGCCGCCCGCGTGCTCAGCCAGCTCAAGCGC
 | 
			
		||||
GTGATCCGCACCAACTACTCCAACCCGCCCACCCACGGCGGCACCGTGGTGTCCACGGTCCTGAACACAC
 | 
			
		||||
CCGAGCTGTTCGCGCTCTGGGAAAATGAACTGGCCGGCATGCGCGACCGCATCCGCCTGATGCGCAAGGA
 | 
			
		||||
GCTGGTCGAGAAGATCAAGACCCAGGGCGTGGCGCAGGACTTCAGCTTCGTGCTGGCGCAGCGCGGCATG
 | 
			
		||||
TTCTCGTACTCGGGCCTGACCGCCGCCCAGGTCGATCGCCTGCGCGAAGAGCACGGCATCTACGCGGTCT
 | 
			
		||||
CCAGCGGCCGCATCTGCGTGGCCGCGCTCAACAGCCGCAACATCGACGCGGTCGCGGCCGGCATCGCCGC
 | 
			
		||||
GGTGCTGAAGTAG
 | 
			
		||||
							
								
								
									
										133
									
								
								tests/resources/B3921_bpertussis_minimized_features.fasta
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										133
									
								
								tests/resources/B3921_bpertussis_minimized_features.fasta
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,133 @@
 | 
			
		||||
>lcl|CP011448.1_cds_ALH77808.1_2459 [gene=adk] [locus_tag=B3921_2764] [protein=adenylate kinase] [protein_id=ALH77808.1] [location=2918521..2919177] [gbkey=CDS]
 | 
			
		||||
ATGCGTCTCATTCTGCTCGGACCGCCCGGAGCCGGCAAAGGCACCCAAGCCGCCTTTCTCACCCAACACT
 | 
			
		||||
ACGGCATCCCGCAGATATCCACCGGTGACATGCTGCGCGCCGCCGTCAAGGCCGGCACGCCGCTGGGCCT
 | 
			
		||||
GGAAGCCAAGAAGGTCATGGACGCGGGCGGCCTGGTCTCGGACGACCTGATCATCGGCCTGGTGCGCGAT
 | 
			
		||||
CGCCTGACCCAGCCCGATTGCGCCAACGGCTACCTGTTCGACGGTTTCCCGCGCACCATCCCGCAGGCCG
 | 
			
		||||
ACGCGCTCAAGAGCGCCGGCATCGCGCTGGATTACGTGGTCGAGATCGAAGTGCCGGAAAGCGACATCAT
 | 
			
		||||
CGAACGCATGAGCGAACGCCGCGTGCACCCGGCCAGCGGCCGCAGCTACCACGTACGCTTCAATCCGCCC
 | 
			
		||||
AAGGCCGAAGGCGTGGACGACGTCACGGGCGAACCGCTGGTGCAGCGCGACGACGACCGCGAGGAAACCG
 | 
			
		||||
TGCGCCATCGTCTCAACGTCTACCAGAACCAGACCCGCCCGCTGGTCGACTACTACTCGTCCTGGGCCCA
 | 
			
		||||
GTCCGATGCCGCCGCGGCGCCCAAGTACCGCAAGATCTCCGGCGTCGGCTCGGTCGACGAAATCAAGAGC
 | 
			
		||||
CGCCTGTCGCAGGCTCTGCAGAGCTAA
 | 
			
		||||
>lcl|CP011448.1_cds_ALH75563.1_214 [gene=fumC] [locus_tag=B3921_0253] [protein=fumarate hydratase] [protein_id=ALH75563.1] [location=257428..258819] [gbkey=CDS]
 | 
			
		||||
ATGAAAACCCGCACCGAAAAAGACACTTTCGGCCCGATCGAGGTGCCCGAGCAGCACCTGTGGGGCGCGC
 | 
			
		||||
AGACCCAGCGCTCGCTGCATTTCTTCGCGATCTCGACCGAGAAGATGCCGGTGCCGCTGGTCGCCGCCAT
 | 
			
		||||
GGCACGCCTGAAGCGCGCCGCCGCCAAGGTCAACGCCGAGCTGGGCGAGCTGGATCCGCAGGTCGCAGAC
 | 
			
		||||
GCCATCATGCGGGCCGCCGATGAGGTGATCGCCGGCAAGTGGCCCGACGAGTTTCCGCTGTCGGTCTGGC
 | 
			
		||||
AGACCGGCTCGGGCACGCAGAGCAACATGAACATGAACGAGGTGCTGGCCAACCGCGCCTCCGAGCTGCT
 | 
			
		||||
GGGCGGCGAGCGCGGCGAAGGCCGCAAGGTGCACCCCAACGACCACGTGAACCGGGGCCAGTCGTCCAAC
 | 
			
		||||
GATACCTTTCCGACCGCCATGCACGTGGCCGCCGCGGTCGAGGTCGAGCACCGCGTGCTGCCCGCCCTGA
 | 
			
		||||
AGGCGTTGCGCGGCACGCTGGCCGCCAAGAGCGCGGCGTTCTACGACATCGTCAAGATCGGTCGCACCCA
 | 
			
		||||
TTTGCAGGACGCCACCCCGTTGACGCTGGGCCAGGAGATCTCCGGCTACGTGGCGCAGCTGGACCTGGCC
 | 
			
		||||
GAGCAGCAGATCCGCGCGACGCTGGCCGGCCTGCACCAGCTGGCCATCGGCGGCACGGCGGTGGGCACCG
 | 
			
		||||
GCCTGAACGCGCATCCGCAGTTCAGCGCCAAGGTATCGGCCGAACTGGCCCATGACACGGGCAGCGCGTT
 | 
			
		||||
CGTGTCGGCGCCCAACAAGTTCCAGGCGCTGGCTTCGCACGAGGCGCTGCTGTTCGCGCACGGCGCCTTG
 | 
			
		||||
AAGACGCTGGCCGCCGGCCTGATGAAGATCGCCAACGATGTGCGCTGGCTGGCCAGCGGCCCGCGCTCGG
 | 
			
		||||
GGCTGGGCGAAATCAGCATTCCCGAGAACGAGCCGGGCAGCTCCATCATGCCGGGCAAGGTCAACCCGAC
 | 
			
		||||
CCAGTGCGAAGCCGTCACGATGCTGGCCGCGCAGGTCATGGGCAACGACGTGGCCATCAATGTCGGCGGG
 | 
			
		||||
GCCAGCGGCAACTTCGAGCTGAACGTCTTCAAGCCGCTGGTGATCCACAATTTCCTGCAGTCGGTGCGCC
 | 
			
		||||
TGCTGGCCGACGGCATGGTCAGCTTCGACAAGCACTGCGCGGCCGGCATCGAGCCCAACCGCGAGCGCAT
 | 
			
		||||
CACCGAGCTGGTCGAGCGTTCGCTGATGCTGGTGACTGCGCTCAACCCGCACATCGGCTACGACAAGGCC
 | 
			
		||||
GCGCAGATCGCCAAGAAGGCGCACAAGGAAAACCTGTCGCTGAAAGAGGCGGCGCTGGCGCTGGGGCACC
 | 
			
		||||
TGACCGAGGCGCAGTTCGCCGAGTGGGTGGTGCCGGGCGACATGACCAACGCGCGCCGCTAG
 | 
			
		||||
>lcl|CP011448.1_cds_ALH77981.1_2632 [gene=glyA] [locus_tag=B3921_2965] [protein=serine hydroxymethyltransferase] [protein_id=ALH77981.1] [location=complement(3131372..3132619)] [gbkey=CDS]
 | 
			
		||||
ATGTTCAACCGCAACCTGACCCTCGACCAGGTGGATCCCGACGTCTGGGCCGCCATCCAGAAAGAAGACG
 | 
			
		||||
TACGCCAGGAACAGCACATCGAGCTGATCGCGTCCGAGAACTACGCCAGCCCCGCCGTGATGCAGGCCCA
 | 
			
		||||
GGGCACGCAACTGACCAACAAGTATGCGGAAGGCTACCCGGGCAAGCGCTACTACGGCGGTTGCGAGTAC
 | 
			
		||||
GTCGACGTGGTCGAGCAGCTGGCCATCGACCGCCTGAAGCAGATTTTCGGCGCCGAGGCCGCCAACGTGC
 | 
			
		||||
AGCCGAACTCCGGCTCGCAGGCCAACCAGGGCGTGTACATGGCGGTGCTCAAGCCGGGCGATACCGTGCT
 | 
			
		||||
GGGCATGAGCCTGGCCGAAGGCGGTCACCTGACGCACGGCGCGTCGGTCAACGCCTCGGGCAAGCTGTAC
 | 
			
		||||
AACTTCGTGCCCTACGGCCTGGACGCCGACGAGGTGCTGGACTACGCCCAGGTCGAGCGGCTGACCAAGG
 | 
			
		||||
AACACAAGCCCAAGCTGATCGTGGCCGGCGCCTCCGCGTACGCGCTGCACATCGACTTCGAGCGCATGGC
 | 
			
		||||
GCGCATCGCCCACGACAACGGCGCGCTGTTCATGGTGGACATCGCCCACTATGCCGGCCTGGTGGCCGGC
 | 
			
		||||
GGCGCCTATCCCAACCCGGTGCCGCACGCCGATTTCGTCACCTCCACCACGCACAAGTCGCTGCGCGGCC
 | 
			
		||||
CGCGCGGCGGCGTCATCATGATGAAGGCCGAGTTCGAGAAGGCCGTCAATTCGGCCATCTTCCCGGGCAT
 | 
			
		||||
CCAGGGCGGTCCGCTGATGCACGTCATCGCGGCCAAGGCCGTGGCCTTCAAGGAAGCGCTGTCGCCCGAG
 | 
			
		||||
TTCCAGGATTACGCCCAGCAGGTCGTCAAGAACGCCAAGGTGCTGGCCGATACGCTGGTCAAGCGCGGCC
 | 
			
		||||
TGCGCATCGTGTCGGGCAGGACCGAAAGCCACGTCATGCTGGTGGACCTGCGTCCCAAGGGCATTACCGG
 | 
			
		||||
CAAGGAAGCGGAAGCGGTGCTGGGCCAGGCCCACATCACGGTCAACAAGAACGCCATTCCCAACGACCCG
 | 
			
		||||
GAAAAGCCCTTCGTGACCAGCGGCATCCGCCTGGGCACTCCGGCCATGACCACCCGCGGCTTCAAGGAGG
 | 
			
		||||
CCGAGGCCGAGCTGACCGCCAACCTGATCGCCGACGTGCTGGACAATCCGCGCGACGAGGCGAACATCGC
 | 
			
		||||
CGCGGTGCGCGCGCGGGTCAATGAACTGACCGCCCGCCTGCCCGTCTACGGCAACTGA
 | 
			
		||||
>lcl|CP011448.1_cds_ALH77547.1_2198 [gene=icd] [locus_tag=B3921_2474] [protein=isocitrate dehydrogenase] [protein_id=ALH77547.1] [location=complement(2606706..2607962)] [gbkey=CDS]
 | 
			
		||||
ATGTCCTATCAACATATCAAGGTTCCCACTGGGGGCCAAAAAATCACGGTCAACGCCGATTACTCGCTGA
 | 
			
		||||
ATGTGCCCGATCAGGTCATCATTCCGGTCATCGAGGGTGACGGTACGGGCGCCGACATCACGCCGGTGAT
 | 
			
		||||
GATTAAGGTCGTCGACGCGGCCGTGCAGAAGGCCTATGCGGGCAAGCGCAAGATCCACTGGATGGAAGTC
 | 
			
		||||
TACGCCGGCGAGAAGGCCACCAAGGTCTACGGCCCGGACGTCTGGCTGCCCGAGGAAACCCTCGACGCCG
 | 
			
		||||
TCAAGGACTACGTGGTGTCGATCAAGGGTCCGCTGACCACGCCGGTCGGCGGCGGCATCCGTTCGCTGAA
 | 
			
		||||
CGTGGCGCTGCGCCAGCAGCTGGACCTGTATGTCTGCCTGCGCCCGGTGCGCTACTTCAAGGGCGTGCCC
 | 
			
		||||
TCGCCGGTGCGCGAGCCCGAGAAGACCGACATGGTCATCTTCCGCGAGAACTCGGAAGACATCTACGCGG
 | 
			
		||||
GCATCGAGTACATGGCCGAGTCCGAGCAGGCCAAGGACCTGATCCAGTACCTGCAGACCAAGCTGGGCGT
 | 
			
		||||
GACCAAGATCCGCTTCCCGAACACCTCGTCGATCGGCATCAAGCCGGTTTCGCGCGAAGGCACCGAGCGC
 | 
			
		||||
CTGGTGCGCAAGGCGCTGCAGTACGCCATCGACAATGACCGCGCCTCGGTGACCCTGGTCCACAAGGGCA
 | 
			
		||||
ACATCATGAAGTTCACGGAAGGCGGCTTCCGCGACTGGGGCTACGCCCTGGCCCAGAACGAGTTCGGCGC
 | 
			
		||||
GCAGCCGATCGACGGCGGCCCGTGGTGCAAGTTCAAGAATCCCAAGACGGGTCGCGAGATCATCGTCAAG
 | 
			
		||||
GATTCGATCGCCGACGCCTTCCTGCAGCAGATCCTGCTGCGTCCGGCCGAATACGACGTGATCGCCACGC
 | 
			
		||||
TGAACCTGAACGGCGACTACATCTCCGACGCGCTGGCCGCGCAAGTGGGCGGCATCGGCATTGCCCCGGG
 | 
			
		||||
CGCCAACCTGTCGGATTCCGTGGCCATGTTCGAAGCCACCCACGGCACCGCGCCGAAGTACGCGGGCAAG
 | 
			
		||||
GACTACGTGAACCCCGGTTCCGAAATCCTGTCGGCCGAAATGATGCTGCGCCACATGGGCTGGACCGAGG
 | 
			
		||||
CCGCCGACCTGATCATCGCCAGCATGGAGAAATCCATCCTGTCCAAGAAGGTCACCTATGACTTCGCCCG
 | 
			
		||||
TCTGCTCGAAGGCGCCACCCAGGTGTCGTGCTCGGGCTTCGGTCAGGTCATGATCGACAATATGTAA
 | 
			
		||||
>lcl|CP011448.1_cds_ALH77480.1_2131 [gene=pepA] [locus_tag=B3921_2404] [protein=leucyl aminopeptidase] [protein_id=ALH77480.1] [location=2532868..2534367] [gbkey=CDS]
 | 
			
		||||
ATGGAATTTAGCACACAGACCACTGCCTCCCTGCATCAGATCAAGACTGCGGCCCTGGCCGTCGGCGTCT
 | 
			
		||||
TCGCCGACGGCGTGCTCAGCGCCGCCGCCGAAGTCATCGACCGCGCCAGCCACGGTGCCGTGGCCGCCGT
 | 
			
		||||
GGTGAAAAGCGAGTTCCGCGGCCGCACCGGCAGCACGCTGGTGCTGCGCAGCCTGGCCGGCGTCAGCGCC
 | 
			
		||||
CAGCGCGTGGTGCTGGTGGGCCTGGGCAAGCAGGCCGAATACAACGCCCGCGCGCACGCCAGCGCCGAAC
 | 
			
		||||
AGGCGTTCGCCGCGGCGTGCGTCGCGGCCCAGGTGGGCGAAGGCGTGTCGACCCTGGCCGGCGTGGCCAT
 | 
			
		||||
CGAGGGCGTGCCGGTGCGCGCCCGCGCGCGCAGCGCCGCCATCGCCGCGGGCGCGGCGGCCTACCATTAC
 | 
			
		||||
GATGCGACGTTCGGCAAGGCCAATCGCGACGCCCGCCCCAGGTTGAAGAAAATCGTCCAGGTGGTCGACC
 | 
			
		||||
GCGCGGCCTCCGCGCAGGCGCAGCTGGGCCTGCGCGAAGGCGCGGCCATCGCCCACGGCATGGAATTGAC
 | 
			
		||||
CCGCACGCTGGGCAACCTGCCCGGCAACGTGTGCACGCCGGCCTATCTCGGCAATACCGCCAAGAAACTG
 | 
			
		||||
GCGCGCGAATTCAAGAGCCTCAAGGTCGAGGTGCTCGAACGCAAGCAGGTCGAGGCGCTGGGCATGGGCT
 | 
			
		||||
CGTTCCTCTCGGTCGCGCGCGGCTCGGAAGAACCGCTGCGCTTCATCGTGCTGCGCCATGCCGGCAAGCC
 | 
			
		||||
CGCCAAGAAGGACAAGGCCGGCCCGGTCGTCCTGGTGGGCAAGGGCATCACCTTCGATGCTGGCGGCATC
 | 
			
		||||
TCGCTCAAGCCGGCCGCCACGATGGACGAAATGAAGTACGACATGTGCGGCGCGGCCAGCGTGCTGGGCA
 | 
			
		||||
CGTTCCGCGCCCTGGCCGAGCTGGAGCTGCCGCTGGATGTGGTGGGCCTGATCGCGGCGTGCGAGAACCT
 | 
			
		||||
GCCCAGCGGCAAGGCCAACAAGCCCGGCGACGTGGTCACCAGCATGTCGGGCCAGACCATCGAGATCCTC
 | 
			
		||||
AACACCGACGCCGAAGGCCGCCTGGTGCTGTGCGATGCCCTGACCTACGCCGAGCGCTTCAAGCCCGCGG
 | 
			
		||||
CCGTGATCGACATCGCCACGTTGACCGGCGCCTGCGTGGTAGCCCTGGGCAACGTCAATAGCGGCCTGTT
 | 
			
		||||
CTCCAAGGACGACGCGCTGGCCGACGCGCTGCTGGCCGCCAGCCGCCAGTCGCTCGACCCGGCCTGGCGC
 | 
			
		||||
CTGCCGCTGGACGATGCCTACCAGGACCAGCTCAAGTCCAACTTCGCCGACATCGCCAACATCGGCGGCC
 | 
			
		||||
CCCCGGCCGGCGCGGTCACGGCGGCCTGCTTCCTGTCGCGCTTCACCAAGGCTTATCCGTGGGCGCACCT
 | 
			
		||||
GGACATCGCCGGCACGGCCTGGCGCGGCGGCAAGGACAAGGGCGCCACCGGCCGGCCGGTGCCGCTGCTG
 | 
			
		||||
ATGCAGTACCTGCTGGACCAGGCAGGCTGA
 | 
			
		||||
>lcl|CP011448.1_cds_ALH78163.1_2814 [gene=pgm] [locus_tag=B3921_3166] [protein=phosphoglucomutase] [protein_id=ALH78163.1] [location=3355979..3357361] [gbkey=CDS]
 | 
			
		||||
GTGGCGCACCCCTTTCCCGCATCGGTCTACAAGGCGTACGACATCCGTGGCTCGGTTCCCGACCAGCTCG
 | 
			
		||||
ACCCGGTATTCGCCCGGGCGCTGGGCCGCGCCCTGGCCGCCAGCGCCCGCGCGCAGGGCATCGGCGCCCT
 | 
			
		||||
GGTGGTCGGCCGCGACGGCCGCCTGAGCAGCCCCGACCTGGCCGGCGCGCTGCAGGAAGGCATCATGGAA
 | 
			
		||||
GGCGGCGTGGACACCCTGGACATCGGCCAGGTGCCCACGCCGCTGGTCTATTTCGCGGCGCACATCCAGG
 | 
			
		||||
GCACGGGCTCGGGCGTGGCGGTCACCGGCAGCCACAACCCGCCGCAGTACAACGGCTTCAAGATGATGAT
 | 
			
		||||
GGGCGGCCAGGCCCTGTACGGCCCGGCCGTGCAGGCGCTGCGCCCGGCCATGCTGGCGCCGGCTGCGGCG
 | 
			
		||||
CCGGGCACCTGGGGCGAACGCCGCCAGCTCGATGTCGTCCCCGCCTATATCGAGCGCATCGTGTCCGACG
 | 
			
		||||
TGAAGCTGGCGCGCCCCATGAAGATCGCCGTCGACTGCGGCAATGGCGTGGCCGGCGCCCTGGCGCCGCA
 | 
			
		||||
ACTGTTCCGCGCGCTGGGTTGCGAAGTGGACGAGCTCTATTGCGAGGTCGACGGCACGTTTCCCAACCAC
 | 
			
		||||
CATCCCGACCCGGCCGAACCGCGCAACCTGCAGGACCTGATCGCCCATGTCACCAGCACCGACTGCGAGC
 | 
			
		||||
TGGGCCTGGCCTTCGACGGCGACGGCGACCGCCTCGGCGTGGTGACCAAGTCCGGCCAGATCATCTGGCC
 | 
			
		||||
CGACCGCCAGCTGATCCTGTTCGCCCGCGACGTGCTGGCCCGCTGTCCCGGCGCGACCATCATCTATGAC
 | 
			
		||||
GTCAAGTGCAGCCAGCACGTGGGCGTGGCCATCGAGCAAAGCGGCGGCGTGCCGCTGATGTGGCAGACTG
 | 
			
		||||
GCCATTCGCTGGTGAAGGCCAAGCTGGCCGAGACCGGCGCGCCGCTGGCCGGCGAGATGAGCGGCCATAT
 | 
			
		||||
CTTCTTCAAGGAGCGCTGGTACGGCTTCGACGACGGCCTGTACACCGGCGCCCGCCTGCTGGAAATCGTC
 | 
			
		||||
TCCCGCGAAACCGATGCGTCGCGCCCGCTGGAGGCCCTGCCGCAGGCGCTGTCGACCCCCGAGCTCAAGC
 | 
			
		||||
TGGAGATGGCCGAGGGCGAGCCGCATGCGCTGATCGCCGCCCTGCAGCAGCAGGGCGAGTTCGCCAGCGC
 | 
			
		||||
CAGCCGGCTGGTTACGATAGACGGCGTGCGCGCGGAATACCCGGACGGCTTCGGGCTGGCGCGCGCCTCC
 | 
			
		||||
AATACCACCCCCGTCGTCGTGCTGCGCTTCGAAGCGGAGACCGAGCCGGGCCTGGCCCGCATCCAGCAGG
 | 
			
		||||
AATTCCGCCAGCAGCTGCTGCGGCTGGCTCCGCAAGCCAAACTGCCCTTCTGA
 | 
			
		||||
>lcl|CP011448.1_cds_ALH77215.1_1866 [gene=tyrB] [locus_tag=B3921_2112] [protein=aromatic amino acid aminotransferase] [protein_id=ALH77215.1] [location=2216606..2217808] [gbkey=CDS]
 | 
			
		||||
ATGAGCACTCTTTTCGCTTCCGTCGAACTCGCGCCGCGCGACCCCATTCTTGGCCTGAACGAACAGTACA
 | 
			
		||||
ACGCCGATACCCGTCCCGGCAAAGTGAACCTGGGCGTGGGCGTGTACTACGACGACGAAGGCCGCATCCC
 | 
			
		||||
GCTGCTTCAGGCCGTGCGCAAGGCCGAGGTGGCCCGCATCGAAGCCGCCGCCGCCCGCGGCTATCTGCCG
 | 
			
		||||
ATCGAAGGCATCGCGGGGTACAACAAGGGTGCGCAGGCGCTGCTGCTGGGCGCCGACTCGCCGCTGGCCG
 | 
			
		||||
CCGAAGGCCGCGTGCTGACCGCGCAGGCCCTGGGCGGCACCGGCGCGCTGAAGATCGGCGCCGACTTCCT
 | 
			
		||||
GCGCCAGCTGCTGCCGCAGTCCAAGGTCCTCATCAGCGACCCCAGCTGGGAAAACCACCGCGCCCTGTTC
 | 
			
		||||
GAGCGCGCCGGCTTCCCGGTCGAGACCTACGCTTATTACGATGCCGCCACCCATGGCCTGAACTTCGAAG
 | 
			
		||||
CCATGCTGGCCGCCCTGCAGGCCGCGCCCGAACAGACCATCGTGGTGCTGCACGCCTGCTGCCACAACCC
 | 
			
		||||
GACCGGCGTCGATCCCACGCCGCAACAGTGGGAACAGATCGCCGCCGTGGTCAAGGCGCGCAACCTGGTG
 | 
			
		||||
CCGTTCCTCGACATCGCCTACCAGGGCTTCGGCGAAGGCCTGGAGCAGGACGCCGCCGTGGTGCGCATGT
 | 
			
		||||
TCGCCGAGCTCGACCTGACCATGTTCATCAGCTCGTCGTTCTCCAAGTCCTTCTCGCTGTATGGCGAGCG
 | 
			
		||||
GGTCGGGGCCCTGACCGTGGTGGCCGGCAGCAAGGACGAGGCCGCCCGCGTGCTCAGCCAGCTCAAGCGC
 | 
			
		||||
GTGATCCGCACCAACTACTCCAACCCGCCCACCCACGGCGGCACCGTGGTGTCCACGGTCCTGAACACAC
 | 
			
		||||
CCGAGCTGTTCGCGCTCTGGGAAAATGAACTGGCCGGCATGCGCGACCGCATCCGCCTGATGCGCAAGGA
 | 
			
		||||
GCTGGTCGAGAAGATCAAGACCCAGGGCGTGGCGCAGGACTTCAGCTTCGTGCTGGCGCAGCGCGGCATG
 | 
			
		||||
TTCTCGTACTCGGGCCTGACCGCCGCCCAGGTCGATCGCCTGCGCGAAGAGCACGGCATCTACGCGGTCT
 | 
			
		||||
CCAGCGGCCGCATCTGCGTGGCCGCGCTCAACAGCCGCAACATCGACGCGGTCGCGGCCGGCATCGCCGC
 | 
			
		||||
GGTGCTGAAGTAG
 | 
			
		||||
		Reference in New Issue
	
	Block a user