Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Biopython is a comprehensive set of freely available Python tools for biological computation. It provides functionality for sequence manipulation, file I/O, database access, structural bioinformatics, phylogenetics, and many other bioinformatics tasks.
.claude/skills/lingxling-biopython/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-17 | ✗→✓ | ▲ Improved | 324% | 0% |
| case-04 | ✓→✗ | ▼ Worse | 206% | 0% |
| case-06 | ✓→✗ | ▼ Worse | 78% | 0% |
| case-01 | ✓→✓ | = Same ✓ | 148% | 0% |
| case-02 | ✓→✓ | = Same ✓ | 140% | 0% |
Biopython is a comprehensive set of freely available Python tools for biological computation. It provides functionality for sequence manipulation, file I/O, database access, structural bioinformatics, phylogenetics, and many other bioinformatics tasks. The current version is Biopython 1.85 (released January 2025), which supports Python 3 and requires NumPy.
Use this skill when:
Biopython is organized into modular sub-packages, each addressing specific bioinformatics domains:
Install Biopython using pip (requires Python 3 and NumPy):
pythonuv pip install biopython
For NCBI database access, always set your email address (required by NCBI):
pythonfrom Bio import Entrez Entrez.email = "your.email@example.com" # Optional: API key for higher rate limits (10 req/s instead of 3 req/s) Entrez.api_key = "your_api_key_here"
This skill provides comprehensive documentation organized by functionality area. When working on a task, consult the relevant reference documentation:
Reference: references/sequence_io.md
Use for:
Quick example:
pythonfrom Bio import SeqIO # Read sequences from FASTA file for record in SeqIO.parse("sequences.fasta", "fasta"): print(f"{record.id}: {len(record.seq)} bp") # Convert GenBank to FASTA SeqIO.convert("input.gb", "genbank", "output.fasta", "fasta")
Reference: references/alignment.md
Use for:
Quick example:
pythonfrom Bio import Align # Pairwise alignment aligner = Align.PairwiseAligner() aligner.mode = 'global' alignments = aligner.align("ACCGGT", "ACGGT") print(alignments[0])
Reference: references/databases.md
Use for:
Quick example:
pythonfrom Bio import Entrez Entrez.email = "your.email@example.com" # Search PubMed handle = Entrez.esearch(db="pubmed", term="biopython", retmax=10) results = Entrez.read(handle) handle.close() print(f"Found {results['Count']} results")
Reference: references/blast.md
Use for:
Quick example:
pythonfrom Bio.Blast import NCBIWWW, NCBIXML # Run BLAST search result_handle = NCBIWWW.qblast("blastn", "nt", "ATCGATCGATCG") blast_record = NCBIXML.read(result_handle) # Display top hits for alignment in blast_record.alignments[:5]: print(f"{alignment.title}: E-value={alignment.hsps[0].expect}")
Reference: references/structure.md
Use for:
Quick example:
pythonfrom Bio.PDB import PDBParser # Parse structure parser = PDBParser(QUIET=True) structure = parser.get_structure("1crn", "1crn.pdb") # Calculate distance between alpha carbons chain = structure[0]["A"] distance = chain[10]["CA"] - chain[20]["CA"] print(f"Distance: {distance:.2f} Å")
Reference: references/phylogenetics.md
Use for:
Quick example:
pythonfrom Bio import Phylo # Read and visualize tree tree = Phylo.read("tree.nwk", "newick") Phylo.draw_ascii(tree) # Calculate distance distance = tree.distance("Species_A", "Species_B") print(f"Distance: {distance:.3f}")
Reference: references/advanced.md
Use for:
Quick example:
pythonfrom Bio.SeqUtils import gc_fraction, molecular_weight from Bio.Seq import Seq seq = Seq("ATCGATCGATCG") print(f"GC content: {gc_fraction(seq):.2%}") print(f"Molecular weight: {molecular_weight(seq, seq_type='DNA'):.2f} g/mol")
When a user asks about a specific Biopython task:
Example search patterns for reference files:
bash# Find information about specific functions grep -n "SeqIO.parse" references/sequence_io.md # Find examples of specific tasks grep -n "BLAST" references/blast.md # Find information about specific concepts grep -n "alignment" references/alignment.md
Follow these principles when writing Biopython code:
python from Bio import SeqIO, Entrez from Bio.Seq import Seq
python Entrez.email = "your.email@example.com"
python # Common formats: "fasta", "genbank", "fastq", "clustal", "phylip"
python with open("file.fasta") as handle: records = SeqIO.parse(handle, "fasta")
python for record in SeqIO.parse("large_file.fasta", "fasta"): # Process one record at a time
python try: handle = Entrez.efetch(db="nucleotide", id=accession) except HTTPError as e: print(f"Error: {e}")
pythonfrom Bio import Entrez, SeqIO Entrez.email = "your.email@example.com" # Fetch sequence handle = Entrez.efetch(db="nucleotide", id="EU490707", rettype="gb", retmode="text") record = SeqIO.read(handle, "genbank") handle.close() print(f"Description: {record.description}") print(f"Sequence length: {len(record.seq)}")
pythonfrom Bio import SeqIO from Bio.SeqUtils import gc_fraction for record in SeqIO.parse("sequences.fasta", "fasta"): # Calculate statistics gc = gc_fraction(record.seq) length = len(record.seq) # Find ORFs, translate, etc. protein = record.seq.translate() print(f"{record.id}: {length} bp, GC={gc:.2%}")
pythonfrom Bio.Blast import NCBIWWW, NCBIXML from Bio import Entrez, SeqIO Entrez.email = "your.email@example.com" # Run BLAST result_handle = NCBIWWW.qblast("blastn", "nt", sequence) blast_record = NCBIXML.read(result_handle) # Get top hit accessions accessions = [aln.accession for aln in blast_record.alignments[:5]] # Fetch sequences for acc in accessions: handle = Entrez.efetch(db="nucleotide", id=acc, rettype="fasta", retmode="text") record = SeqIO.read(handle, "fasta") handle.close() print(f">{record.description}")
pythonfrom Bio import AlignIO, Phylo from Bio.Phylo.TreeConstruction import DistanceCalculator, DistanceTreeConstructor # Read alignment alignment = AlignIO.read("alignment.fasta", "fasta") # Calculate distances calculator = DistanceCalculator("identity") dm = calculator.get_distance(alignment) # Build tree constructor = DistanceTreeConstructor() tree = constructor.nj(dm) # Visualize Phylo.draw_ascii(tree)
Solution: This is just a warning. Set Entrez.email to suppress it.
Solution: Check that IDs/accessions are valid and properly formatted.
Solution: Verify file format matches the specified format string.
Solution: Ensure sequences are aligned before using AlignIO or MultipleSeqAlignment.
Solution: Use local BLAST for large-scale searches, or cache results.
Solution: Use PDBParser(QUIET=True) to suppress warnings, or investigate structure quality.
To locate information in reference files, use these search patterns:
bash# Search for specific functions grep -n "function_name" references/*.md # Find examples of specific tasks grep -n "example" references/sequence_io.md # Find all occurrences of a module grep -n "Bio.Seq" references/*.md
Biopython provides comprehensive tools for computational molecular biology. When using this skill:
references/ directoryThe modular reference documentation ensures detailed, searchable information for every major Biopython capability.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | pass→pass | 9,533 | 16,884 | +77% | 1 | 1 | 0% | 1,872 | 4,650 | +148% | 0 | 0 | — |
case-02 | pass→pass | 14,167 | 6,814 | -52% | 1 | 1 | 0% | 1,931 | 4,631 | +140% | 0 | 0 | — |
case-03 | pass→pass | 15,906 | 11,131 | -30% | 1 | 1 | 0% | 2,343 | 5,514 | +135% | 0 | 0 | — |
case-04 | pass→fail | 17,750 | 27,726 | +56% | 1 | 1 | 0% | 1,504 | 4,598 | +206% | 0 | 0 | — |
case-05 | pass→pass | 8,043 | 5,986 | -26% | 1 | 1 | 0% | 1,154 | 4,629 | +301% | 0 | 0 | — |
case-06 | pass→fail | 13,851 | 6,089 | -56% | 1 | 1 | 0% | 2,117 | 3,763 | +78% | 0 | 0 | — |
case-07 | pass→pass | 14,156 | 7,517 | -47% | 1 | 1 | 0% | 2,109 | 4,839 | +129% | 0 | 0 | — |
case-08 | pass→pass | 9,779 | 5,486 | -44% | 1 | 1 | 0% | 1,747 | 4,324 | +148% | 0 | 0 | — |
case-22 | pass→pass | 22,481 | 12,108 | -46% | 1 | 1 | 0% | 3,231 | 5,639 | +75% | 0 | 0 | — |
case-09 | pass→pass | 6,700 | 4,449 | -34% | 1 | 1 | 0% | 1,203 | 4,321 | +259% | 0 | 0 | — |
case-10 | pass→pass | 10,993 | 5,829 | -47% | 1 | 1 | 0% | 1,608 | 4,326 | +169% | 0 | 0 | — |
case-11 | pass→pass | 10,926 | 4,583 | -58% | 1 | 1 | 0% | 1,595 | 4,140 | +160% | 0 | 0 | — |
case-12 | pass→pass | 4,514 | 4,246 | -6% | 1 | 1 | 0% | 599 | 4,071 | +580% | 0 | 0 | — |
case-13 | pass→pass | 9,813 | 6,123 | -38% | 1 | 1 | 0% | 1,735 | 4,404 | +154% | 0 | 0 | — |
case-14 | pass→pass | 7,127 | 4,080 | -43% | 1 | 1 | 0% | 1,196 | 4,061 | +240% | 0 | 0 | — |
case-15 | pass→pass | 7,850 | 4,261 | -46% | 1 | 1 | 0% | 1,020 | 4,209 | +313% | 0 | 0 | — |
case-16 | pass→pass | 13,177 | 8,545 | -35% | 1 | 1 | 0% | 2,086 | 5,015 | +140% | 0 | 0 | — |
case-17 | fail→pass | 12,179 | 7,103 | -42% | 1 | 1 | 0% | 1,059 | 4,495 | +324% | 0 | 0 | — |
case-18 | pass→pass | 11,085 | 7,383 | -33% | 1 | 1 | 0% | 1,420 | 4,772 | +236% | 0 | 0 | — |
case-19 | pass→pass | 9,601 | 7,325 | -24% | 1 | 1 | 0% | 1,580 | 4,722 | +199% | 0 | 0 | — |
case-20 | pass→pass | 16,396 | 11,511 | -30% | 1 | 1 | 0% | 2,569 | 5,433 | +111% | 0 | 0 | — |
case-21 | pass→pass | 17,688 | 12,312 | -30% | 1 | 1 | 0% | 2,488 | 5,784 | +132% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 21 counted toward the lift figure. The other 1 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of -5 percentage points is the difference between those two pass rates over the 21 comparable cases. 2 cases got worse with the skill loaded, and they are included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.