agentsclimarketplace

Reverse complement

Skill BioTender-max/awesome-bio-agent-skills/skills/bioskills/reverse-complement

Generate reverse complements and complements of DNA/RNA sequences using Biopython. Use when working with opposite strands, primer design, or converting between template and coding strands.From its SKILL.md

Install
npx -y skills add BioTender-max/awesome-bio-agent-skills --skill reverse-complement

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.

SKILL.md

6.5 KB, ~1.7k tokens by cl100k_base, as published. Nobody here has run it

Version Compatibility

Reference examples tested with: BioPython 1.83+, samtools 1.19+

Before using code patterns, verify installed versions match. If versions differ:

  • Python: pip show <package> then help(module.function) to check signatures

If code throws ImportError, AttributeError, or TypeError, introspect the installed package and adapt the example to match the actual API rather than retrying.

Reverse Complement

Generate complementary and reverse complementary sequences using Biopython.

"Get the reverse complement" → Produce the 5'-to-3' sequence of the opposite strand.

  • Python: seq.reverse_complement() (BioPython Seq)
  • CLI: samtools faidx ref.fa region --reverse-complement

Required Import

from Bio.Seq import Seq

Core Methods

reverse_complement()

Returns the reverse complement (5' to 3' of the opposite strand).

seq = Seq('ATGCGATCG')
rc = seq.reverse_complement()  # Returns Seq('CGATCGCAT')

This is the most commonly used operation - it gives you the sequence of the opposite strand in the conventional 5' to 3' direction.

complement()

Returns the complement without reversing.

seq = Seq('ATGCGATCG')
comp = seq.complement()  # Returns Seq('TACGCTAGC')

Less commonly used - gives the opposite strand but in 3' to 5' direction.

reverse_complement_rna()

For RNA sequences (uses U instead of T):

rna = Seq('AUGCGAUCG')
rc_rna = rna.reverse_complement_rna()  # Returns Seq('CGAUCGCAU')

complement_rna()

rna = Seq('AUGCGAUCG')
comp_rna = rna.complement_rna()  # Returns Seq('UACGCUAGC')

Base Pairing Rules

DNA

BaseComplement
AT
TA
GC
CG

RNA

BaseComplement
AU
UA
GC
CG

Ambiguous Bases (IUPAC)

CodeBasesComplement
RA/GY
YC/TR
SG/CS
WA/TW
KG/TM
MA/CK
BC/G/TV
DA/G/TH
HA/C/TD
VA/C/GB
NA/C/G/TN

Biopython handles IUPAC ambiguity codes correctly.

Code Patterns

Basic Reverse Complement

seq = Seq('ATGCGATCGATCG')
rc = seq.reverse_complement()
print(f'Original: 5\'-{seq}-3\'')
print(f'RevComp:  5\'-{rc}-3\'')

Visualize Double-Stranded DNA

def show_dsdna(seq):
    comp = seq.complement()
    print(f"5'-{seq}-3'")
    print(f"   {'|' * len(seq)}")
    print(f"3'-{comp}-5'")

seq = Seq('ATGCGATCG')
show_dsdna(seq)

Check if Sequence is Palindrome (Self-Complementary)

def is_palindrome(seq):
    return seq == seq.reverse_complement()

seq1 = Seq('GAATTC')  # EcoRI site - palindrome
seq2 = Seq('ATGCGA')  # Not a palindrome
print(f'GAATTC is palindrome: {is_palindrome(seq1)}')
print(f'ATGCGA is palindrome: {is_palindrome(seq2)}')

Reverse Complement a FASTA File

Goal: Produce a new FASTA file with all sequences reverse-complemented.

Approach: Parse records, create new SeqRecords with .reverse_complement(), write to output.

from Bio import SeqIO
from Bio.SeqRecord import SeqRecord

def reverse_complement_records(records):
    for record in records:
        yield SeqRecord(
            record.seq.reverse_complement(),
            id=record.id + '_rc',
            description=record.description + ' reverse complement'
        )

records = SeqIO.parse('sequences.fasta', 'fasta')
SeqIO.write(reverse_complement_records(records), 'sequences_rc.fasta', 'fasta')

Primer Design Helper

def design_primer_pair(template, start, end):
    '''Design forward and reverse primers for a region'''
    forward = template[start:start + 20]
    reverse = template[end - 20:end].reverse_complement()
    return forward, reverse

template = Seq('ATGCGATCGATCGATCGATCGATCGATCGATCGATCGATCG')
fwd, rev = design_primer_pair(template, 0, 40)
print(f'Forward primer (5\'-3\'): {fwd}')
print(f'Reverse primer (5\'-3\'): {rev}')

Handle Both Strands in Analysis

Goal: Search for a motif on both DNA strands.

Approach: Search the forward sequence, then search its reverse complement. Convert positions on the reverse strand back to forward-strand coordinates.

def search_both_strands(seq, motif):
    '''Search for a motif on both strands'''
    motif = Seq(motif)
    results = []
    pos = seq.find(motif)
    while pos != -1:
        results.append(('+', pos))
        pos = seq.find(motif, pos + 1)
    rc = seq.reverse_complement()
    pos = rc.find(motif)
    while pos != -1:
        results.append(('-', len(seq) - pos - len(motif)))
        pos = rc.find(motif, pos + 1)
    return results

seq = Seq('ATGCGAATTCGATCGATGAATTCGATC')
hits = search_both_strands(seq, 'GAATTC')
for strand, pos in hits:
    print(f'Found on {strand} strand at position {pos}')

Common Use Cases

TaskMethod
Get opposite strandreverse_complement()
Primer for opposite strandreverse_complement() of target region
Template strand from codingreverse_complement()
Check palindromeseq == seq.reverse_complement()
Search both strandsSearch original and reverse_complement

Common Errors

ErrorCauseSolution
Wrong bases in resultMixing DNA/RNA methodsUse reverse_complement_rna() for RNA
TypeErrorPassing string instead of SeqWrap in Seq() first

Decision Tree

Need to work with strand orientation?
├── Get opposite strand sequence (5' to 3')?
│   └── Use reverse_complement()
├── Get base-paired sequence (same direction)?
│   └── Use complement()
├── Working with RNA?
│   └── Use reverse_complement_rna()
├── Check if restriction site (palindrome)?
│   └── seq == seq.reverse_complement()
└── Designing primers?
    └── Reverse primer = reverse_complement() of 3' end

Related Skills

  • seq-objects - Create Seq objects to complement
  • transcription-translation - Six-frame translation uses reverse complement
  • motif-search - Search both strands for motifs
  • restriction-analysis/restriction-sites - Restriction sites are often palindromic
  • alignment-files/sam-bam-basics - BAM FLAG indicates read strand; use samtools view -f 16 for reverse

What ships with it: 4 files

6.0 KB alongside SKILL.md, 3 of them executable

examples/

Keep looking

Skills are one crate of 325,949. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.