{"id":39761089,"url":"https://github.com/agormp/sequencelib","last_synced_at":"2026-01-18T11:38:03.120Z","repository":{"id":57465832,"uuid":"419270077","full_name":"agormp/sequencelib","owner":"agormp","description":"Library for analyzing and manipulating DNA and protein sequences","archived":false,"fork":false,"pushed_at":"2025-04-10T10:05:26.000Z","size":1549,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-10-22T01:53:46.456Z","etag":null,"topics":["bioinformatics","library","python"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/agormp.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-10-20T09:43:01.000Z","updated_at":"2025-04-10T10:05:30.000Z","dependencies_parsed_at":"2025-04-10T09:36:12.747Z","dependency_job_id":"760cac3e-26e7-4582-bc33-3133989e2ee3","html_url":"https://github.com/agormp/sequencelib","commit_stats":{"total_commits":92,"total_committers":2,"mean_commits":46.0,"dds":"0.010869565217391353","last_synced_commit":"db6decc8a3eb2d2a01b565a9cb9a1713928a9dac"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/agormp/sequencelib","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/agormp%2Fsequencelib","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/agormp%2Fsequencelib/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/agormp%2Fsequencelib/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/agormp%2Fsequencelib/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/agormp","download_url":"https://codeload.github.com/agormp/sequencelib/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/agormp%2Fsequencelib/sbom","scorecard":{"id":170992,"data":{"date":"2025-08-11","repo":{"name":"github.com/agormp/sequencelib","commit":"afc91903779521826f150f4e419d5f823844c642"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3,"checks":[{"name":"Code-Review","score":0,"reason":"Found 0/30 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: GNU General Public License v3.0: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'main'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}}]},"last_synced_at":"2025-08-16T16:27:15.934Z","repository_id":57465832,"created_at":"2025-08-16T16:27:15.935Z","updated_at":"2025-08-16T16:27:15.935Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28535169,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-18T10:13:46.436Z","status":"ssl_error","status_checked_at":"2026-01-18T10:13:11.045Z","response_time":98,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bioinformatics","library","python"],"created_at":"2026-01-18T11:38:03.024Z","updated_at":"2026-01-18T11:38:03.095Z","avatar_url":"https://github.com/agormp.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# sequencelib\n\n![](https://img.shields.io/badge/version-2.23.2-blue)\n[![PyPI downloads](https://static.pepy.tech/personalized-badge/sequencelib?period=total\u0026units=none\u0026left_color=black\u0026right_color=blue\u0026left_text=PyPI%20downloads\u0026service=github)](https://pepy.tech/project/sequencelib)\n\nUsing the classes and methods in sequencelib.py, you can read and write text files containing DNA or protein sequences (aligned or unaligned), and analyze or manipulate these sequences in various ways\n\n**Note:** Much of the functionality in `sequencelib` is also available through the command-line tool [seqconverter](https://github.com/agormp/seqconverter)\n\n## Availability\n\nThe sequencelib.py module is available on GitHub: https://github.com/agormp/sequencelib and on PyPI: https://pypi.org/project/sequencelib/\n\n## Installation\n\n```\npython3 -m pip install sequencelib\n```\n\nUpgrading to latest version:\n\n```\npython3 -m pip install --upgrade sequencelib\n```\n\n\n## Quick Start Tutorial for sequencelib\n\n**Note: under construction. This version mostly generated using chatGPT with some editing**\n\nThis quick start guide introduces some basic functionalities of `sequencelib`.\n\n### Loading Sequences\n\n`sequencelib` supports various file formats: `fasta`, `nexus`, `clustal`, `phylip`, `raw`, `tab`, `how`, and `genbank`. It automatically detects the file format:\n\n### Reading Unaligned Sequences\n\n```python\nimport sequencelib as sq\n\nseqfile = sq.Seqfile(\"seqfilename.fasta\")\nseqset = seqfile.read_seqs()\n```\n\n### Iterate over sequences\n```python\nfor seq in seqset:\n    print(seq.name, len(seq))\n```\n\n### Reading Aligned Sequences\n\n```python\nimport sequencelib as sq\n\nseqfile = sq.Seqfile(\"alignment.fasta\")\nalignment = seqfile.read_alignment()\n\nprint(\"Number of sequences:\", len(alignment))\nprint(\"Alignment length:\", alignment.alignlen())\n```\n\n\n### Find Columns with More than 50% Gaps\n\n```python\nnseqs = len(alignment)\ngapcols = []\nfor i in range(alignment.alignlen()):\n    col = alignment.getcolumn(i)\n    gapfrac = col.count(\"-\") / nseqs\n    if gapfrac \u003e= 0.5:\n        gapcols.append(i)\n```\n\n### Export Alignment to File\n\n```python\nwith open(\"gapcols.fasta\", \"w\") as f:\n    f.write(subalignment.fasta())\n\nwith open(\"gapcols.nexus\", \"w\") as f:\n    f.write(subalignment.nexus())\n\nwith open(\"gapcols.clustal\", \"w\") as f:\n    f.write(subalignment.clustal())\n```\n\n### Analyzing Individual Columns\n\nDirectly access columns and analyze their conservation:\n\n```python\ncolumn = subalignment.getcolumn(0)\nif len(set(column)) \u003e 1:\n    print(\"This column is not conserved\")\n```\n\n### Mapping Sequence and Alignment Positions\n\nMap positions between sequence (without gaps) and alignment:\n\n```python\nalignpos_0index = alignment.seqpos2alignpos(\"seq1\", 41)  # Index starts at 0\nalignpos_1index = alignment.seqpos2alignpos(\"seq1\", 42, slicesyntax=False) # Index starts at 1\n```\n\nConvert from alignment position to sequence position:\n\n```python\nseqpos, gapstatus = alignment.alignpos2seqpos(\"seq1\", 153)\nif gapstatus:\n    print(f\"Alignment position is a gap; closest preceding residue is at sequence position {seqpos}\")\n```\n\n### Working with Individual Sequences\n\nEach sequence object has multiple attributes and methods:\n\n```python\nseq = seqset[0]\nprint(seq.name)\nprint(len(seq))\nprint(seq.fasta())\n\nshuffled_seq = seq.shuffle()\nprotein_seq = seq.translate()\n```\n\n### Window Iteration\n\nIterate through sequence windows:\n\n```python\nfor seqwindow in seq.windows(wsize=30):\n    print(seqwindow.fasta())\n```\n\n### More Features\n\nThe `sequencelib` library contains many additional functionalities such as:\n\n- Calculating pairwise sequence distances\n- Removing conserved or ambiguous columns\n- Reverse complementing DNA sequences\n- Handling complex alignments with partitions\n\n\n## SequenceLib: Class and Method Reference\n\n---\n\n### Class: `Sequence`\nBase class representing a biological sequence (DNA, protein, or other types).\n\n#### Constructor\n```python\nSequence(name, seq, annotation='', comments='', check_alphabet=False, degap=False)\n```\n\n- **name**: Identifier for the sequence.\n- **seq**: The actual biological sequence string.\n- **annotation**: Annotation information for each residue.\n- **comments**: Additional metadata or notes.\n- **check_alphabet**: Checks sequence against allowed alphabet symbols.\n- **degap**: Removes gap characters (`-`).\n\n#### Methods\n\n- `__len__()`: Returns the length of the sequence.\n- `__getitem__(index)`: Allows indexing and slicing of the sequence.\n- `__setitem__(index, residue)`: Modifies residue at a given index.\n- `__str__()`: Returns FASTA-formatted string.\n- `copy_seqobject()`: Returns a deep copy of the sequence object.\n- `rename(newname)`: Changes the sequence name.\n- `subseq(start, stop, slicesyntax=True, rename=False)`: Extracts subsequence between start and stop positions.\n- `subseqpos(poslist, namesuffix=None)`: Creates subsequence from specified positions.\n- `appendseq(other)`: Appends another sequence at the end.\n- `prependseq(other)`: Prepends another sequence at the start.\n- `windows(wsize, stepsize=1, l_overhang=0, r_overhang=0, padding=\"X\", rename=False)`: Iterates over windows of the sequence.\n- `remgaps()`: Removes gaps from the sequence.\n- `shuffle()`: Randomly shuffles the sequence residues.\n- `indexfilter(keeplist)`: Keeps only residues at specified positions.\n- `seqdiff(other, zeroindex=True)`: Lists differences between two sequences.\n- `hamming(other)`: Computes Hamming distance (absolute differences).\n- `hamming_ignoregaps(other)`: Computes Hamming distance, ignoring gaps.\n- `pdist(other)`: Computes proportional differences per site.\n- `pdist_ignoregaps(other)`: Computes proportional differences, ignoring gaps.\n- `pdist_ignorechars(other, igchars)`: Proportional differences ignoring specified characters.\n- `residuecounts()`: Counts residues and returns a dictionary.\n- `composition(ignoregaps=True, ignoreambig=False)`: Calculates composition as frequencies.\n- `findgaps()`: Identifies gap positions.\n- `fasta(width=60, nocomments=False)`: Returns FASTA format representation.\n- `how(width=80, nocomments=False)`: Returns HOW format representation.\n- `gapencoded()`: Encodes gaps as binary (1/0) string.\n- `tab(nocomments=False)`: Returns TAB format representation.\n- `raw()`: Returns sequence in raw format.\n\n---\n\n### Class: `DNA_sequence(Sequence)`\nSpecialized sequence class for DNA sequences. Has access to all the methods in its base class (Sequence) in addition to the ones listed here.\n\n#### Methods\n- `revcomp()`: Returns reverse complement.\n- `translate(reading_frame=1)`: Translates DNA to protein sequence.\n\n---\n\n### Class: `Protein_sequence(Sequence)`\nSpecialized sequence class for protein sequences. Has access to all the methods in its base class (Sequence).\n\n---\n\n### Class: `Sequences_base`\nAbstract base class for sequence collections. Should not be instantiated directly. All methods here can be used in both Seq_alignment and Seq_set objects.\n\n#### Methods\n\n- `__len__()`: Returns the number of sequences.\n- `__getitem__(index)`: Accesses sequences via indexing or slicing.\n- `__setitem__(index, value)`: Sets sequences by integer index.\n- `__eq__(other)`: Checks equality with another sequence collection.\n- `__ne__(other)`: Checks inequality with another sequence collection.\n- `__str__()`: Returns FASTA format of the collection.\n- `sortnames(reverse=False)`: Alphabetically sorts sequences by name.\n- `addseq(seq, silently_discard_dup_name=False)`: Adds a sequence object.\n- `addseqset(other, silently_discard_dup_name=False)`: Adds sequences from another collection.\n- `remseq(name)`: Removes sequence by name.\n- `remseqs(namelist)`: Removes multiple sequences.\n- `changeseqname(oldname, newname, fix_dupnames=False)`: Renames a sequence.\n- `getseq(name)`: Retrieves sequence by name.\n- `subset(namelist)`: Extracts a subset by names.\n- `subsample(samplesize)`: Randomly selects a subset.\n- `subseq(start, stop, slicesyntax=True, rename=True, aln_name=None, aln_name_number=False)`: Extracts subset by positions.\n- `getnames()`: Returns a list of sequence names.\n- `range(rangefrom, rangeto)`: In-place subset of sequences.\n- `removedupseqs()`: Removes duplicate sequences.\n- `group_identical_seqs()`: Groups identical sequences.\n- `residuecounts()`: Counts residues across all sequences.\n- `composition(ignoregaps=True, ignoreambig=False)`: Computes frequency composition.\n- `clean_names(illegal=\":;,()[]\", rep=\"_\")`: Cleans illegal characters from names.\n- `rename_numbered(basename, namefile=None)`: Renames sequences numerically.\n- `rename_regexp(old_regex, new_string, namefile=None)`: Renames sequences using regex.\n- `transname(namefile)`: Renames sequences using a mapping file.\n- `revcomp()`: Reverse complements all sequences.\n- `translate(reading_frame=1)`: Translates all sequences (DNA only).\n- `fasta(width=60, nocomments=False)`: FASTA format.\n- `how(width=60, nocomments=False)`: HOW format.\n- `tab(nocomments=False)`: TAB format.\n- `raw()`: RAW format.\n\n---\n\n### Class: `Seq_alignment(Sequences_base)`\nRepresents aligned sequences. This class also has access to all methods defined in base class (Sequences_base).\n\n#### Methods\n\n- `alignlen()`: Length of the alignment.\n- `getcolumn(i)`: Retrieves column by index.\n- `columns()`: Iterates over columns.\n- `samplecols(samplesize)`: Randomly samples columns.\n- `conscols()`: Lists conserved columns.\n- `varcols()`: Lists variable columns.\n- `gappycols()`: Lists columns with gaps.\n- `site_summary()`: Summarizes alignment sites.\n- `indexfilter(keeplist)`: Keeps columns by indices.\n- `remcols(discardlist)`: Removes columns by indices.\n- `remambigcol()`: Removes ambiguous columns.\n- `remfracambigcol(frac)`: Removes columns with high ambiguity fraction.\n- `remgapcol()`: Removes columns with gaps.\n- `remfracgapcol(frac)`: Removes columns with high gap fraction.\n- `remendgapcol(frac=0.5)`: Removes end-gap columns.\n- `remconscol()`: Removes conserved columns.\n- `findgaps()`: Identifies gap positions.\n- `gap_encode()`: Binary encodes gaps.\n- `seqpos2alignpos(seqname, seqpos, slicesyntax=True)`: Maps sequence to alignment position.\n- `alignpos2seqpos(seqname, alignpos, slicesyntax=True)`: Maps alignment to sequence position.\n- `shannon(countgaps=True)`: Computes Shannon entropy.\n- `consensus()`: Generates consensus sequence.\n- `phylip(width=60)`: PHYLIP format.\n- `clustal(width=60)`: CLUSTAL format.\n- `nexus(width=60, print_partitioned=False)`: NEXUS format.\n- `charsetblock()`: Generates MrBayes charset block for partitioned analyses.\n- `mbpartblock()`: Generates detailed MrBayes block (charset, partitions, models, MCMC) for partitioned analyses.\n- `bestblock()`: Generates MrBayes BEST block for species-tree analyses (taxsets, charsets, BEST parameters).\n- `nexuspart()`: Generates Nexus-formatted MrBayes block with partition and model specifications.\n\n\n---\n\n### Class `Seqfile_reader`\n\nBase class for reading sequence files. Typically, you do not instantiate this class directly.\n\n#### Methods:\n\n- `makeseq(name, seq, annotation=\"\", comments=\"\")`\n  - **Description:** Creates and returns a sequence object based on provided type information.\n\n- `readseq()`\n  - **Description:** Reads a single sequence from a file and returns it as a sequence object.\n\n- `read_seqs(silently_discard_dup_name=False)`\n  - **Description:** Reads all sequences and returns a `Seq_set` object.\n\n- `read_alignment(silently_discard_dup_name=False)`\n  - **Description:** Reads aligned sequences, returning a `Seq_alignment` object.\n\n---\n\n### Class `Fastafilehandle`\n\nClass for handling FASTA files.\n\n#### Methods:\n\n- `__init__(filename, seqtype=\"autodetect\", check_alphabet=False, degap=False, nameishandle=False)`\n  - **Description:** Initializes a FASTA file reader, performs format checks.\n\n- `__next__()`\n  - **Description:** Parses and returns the next sequence as a sequence object.\n\n---\n\n### Class `Howfilehandle`\n\nClass for reading HOW-formatted files.\n\n#### Methods:\n\n- `__init__(...)`\n- `__next__()`\n\n---\n\n### Class `Genbankfilehandle`\n\nClass for reading GenBank files.\n\n#### Methods:\n\n- `__init__(...)`\n- `__next__()`\n- `find_LOCUS()`\n- `read_metadata()`\n- `extract_annotation(metadata)`\n- `extract_name(metadata)`\n- `read_genbankseq()`\n\n---\n\n### Class `Tabfilehandle`\n\nHandles tab-delimited sequence files.\n\n#### Methods:\n\n- `__init__(...)`\n- `__next__()`\n\n---\n\n### Class `Rawfilehandle`\n\nHandles raw-format sequence files.\n\n#### Methods:\n\n- `__init__(...)`\n- `__next__()`\n\n---\n\n### Class `Alignfile_reader`\n\nBase class for alignment files.\n\n#### Methods:\n\n- `makeseq(name, seq, annotation=\"\", comments=\"\")`\n- `read_seqs(silently_discard_dup_name=False)`\n\n---\n\n### Class `Clustalfilehandle`\n\nReads Clustal-formatted alignment files.\n\n#### Methods:\n\n- `__init__(...)`\n- `read_alignment(silently_discard_dup_name=False)`\n\n---\n\n### Class `Phylipfilehandle`\n\nHandles Phylip-formatted alignment files.\n\n#### Methods:\n\n- `__init__(...)`\n- `read_alignment(silently_discard_dup_name=False)`\n\n---\n\n### Class `Nexusfilehandle`\n\nHandles Nexus-formatted alignment files.\n\n#### Methods:\n\n- `__init__(...)`\n- `read_alignment(silently_discard_dup_name=False)`\n\n---\n\n### Class `Stockholmfilehandle`\n\nReads Stockholm-formatted alignment files.\n\n#### Methods:\n\n- `__init__(...)`\n- `read_alignment(silently_discard_dup_name=False)`\n\n---\n\n### Class `Seqfile`\n\nFactory class to autodetect file formats and instantiate the correct file handler.\n\n#### Methods:\n\n- `__new__(klass, filename, filetype=\"autodetect\", ...)`\n\nAutomatically selects the appropriate sequence or alignment reader based on file contents or explicitly provided file type.\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fagormp%2Fsequencelib","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fagormp%2Fsequencelib","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fagormp%2Fsequencelib/lists"}