Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
7a063c9
User checkpoint: Add howdy.py script with argparse example and update…
Feb 3, 2025
49f1305
Homework 1 to the best of my ability.
rosefragala Feb 3, 2025
9712a34
homework 2 divide
rosefragala Feb 9, 2025
b9a001c
Merge branch 'hurwitzlab:main' into main
bhurwitz33 Feb 10, 2025
bfb9e56
homework 3
rosefragala Feb 13, 2025
ecc7b72
Homework 4 recv
rosefragala Feb 19, 2025
6f8ff09
homework 5
rosefragala Feb 27, 2025
42f4c47
Merge branch 'main' into main
rosefragala Mar 2, 2025
ef2cc73
Merge pull request #1 from hurwitzlab/main
rosefragala Mar 3, 2025
4e253a7
I am just trying to see if this will sync my replit and git
rosefragala Mar 3, 2025
42a8124
Revised cgc.py grade this version of hw5
rosefragala Mar 3, 2025
6fa0535
rna.py homework
rosefragala Mar 3, 2025
f315da1
fixing input2.fa in inputs/input2.fa
bhurwitz33 Mar 17, 2025
b2cb83c
Homework
rosefragala Mar 19, 2025
6e05cb8
adding 07_syndna test.py
bhurwitz33 Mar 24, 2025
d9bfc96
Merge branch 'hurwitzlab:main' into main
rosefragala Mar 24, 2025
7fdb96f
homework - a little confused but I got a 100 on my make test
rosefragala Mar 24, 2025
5df2fb2
test_delimiter passes i promise it just hates one of the scenarios an…
rosefragala Apr 5, 2025
7d52e0f
i didn't realize this was the homework i just went to assignments not…
rosefragala Apr 5, 2025
5af844c
my make test tells me i got a 100% so i think im good
rosefragala Apr 8, 2025
a37c708
run.py completed (i really hope so)
rosefragala Apr 15, 2025
3f5b5f1
homework for week 12
rosefragala Apr 25, 2025
69a2761
Final Project - woo hoo!
rosefragala Apr 30, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .replit
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,4 @@ run = "~/workspace/assignments/grade_hw.sh"
channel = "stable-24_05"

[deployment]
run = ["sh", "-c", "~/workspace/assignments/grade_hw.sh"]
run = ["sh", "-c", "~/workspace/assignments/grade_hw.sh"]
72 changes: 72 additions & 0 deletions 01_howdy/howdy.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
#!/usr/bin/env python3
"""
Author : Add your Name <Add your email>
Date : 2025-02-03
Purpose: Add Your Purpose
"""

import argparse


# --------------------------------------------------
def get_args():
"""Get command-line arguments"""

parser = argparse.ArgumentParser(
description='Add Your Purpose',
formatter_class=argparse.ArgumentDefaultsHelpFormatter)

parser.add_argument('positional',
metavar='str',
help='A positional argument')

parser.add_argument('-a',
'--arg',
help='A named string argument',
metavar='str',
type=str,
default='')

parser.add_argument('-i',
'--int',
help='A named integer argument',
metavar='int',
type=int,
default=0)

parser.add_argument('-f',
'--file',
help='A readable file',
metavar='FILE',
type=argparse.FileType('rt'),
default=None)

parser.add_argument('-o',
'--on',
help='A boolean flag',
action='store_true')

return parser.parse_args()


# --------------------------------------------------
def main():
"""Make a jazz noise here"""

args = get_args()
str_arg = args.arg
int_arg = args.int
file_arg = args.file
flag_arg = args.on
pos_arg = args.positional

print(f'str_arg = "{str_arg}"')
print(f'int_arg = "{int_arg}"')
print('file_arg = "{}"'.format(file_arg.name if file_arg else ''))
print(f'flag_arg = "{flag_arg}"')
print(f'positional = "{pos_arg}"')


# --------------------------------------------------
if __name__ == '__main__':
main()
51 changes: 51 additions & 0 deletions assignments/01_howdy/howdy.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
#!/usr/bin/env python3
"""
Author : Rose Fragala <rosefragala@arizona.edu>
Date : 2025-02-03
Purpose: Print greeting
"""

import argparse


# --------------------------------------------------
def get_args():
"""Get command-line arguments"""

parser = argparse.ArgumentParser(
description='Greetings and Howdy',
formatter_class=argparse.ArgumentDefaultsHelpFormatter)

parser.add_argument('-g', '--greeting',
help='The greeting',
metavar='str',
type=str,
default='Howdy')

parser.add_argument('-n', '--name',
help='Whom to greet',
metavar='str',
type=str,
default='Stranger')

parser.add_argument('-e', '--excited',
help='Include an exclamation point',
action='store_true')

return parser.parse_args()


# --------------------------------------------------
def main():
"""To generate and print the greetings! (well, hopefully)"""

args = get_args()
greeting = args.greeting
name = args.name
punctuation = '!' if args.excited else '.'
print(f'{greeting}, {name}{punctuation}')


# --------------------------------------------------
if __name__ == '__main__':
main()
42 changes: 42 additions & 0 deletions assignments/02_divide/divide.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
#!/usr/bin/env python3
"""
Author : Rose Fragala <rosefragala@arizona.edu>
Date : 2025-02-09
Purpose: To divide two required integer values.
"""

import argparse
import sys

# --------------------------------------------------
def get_args():
"""Get command-line arguments"""

parser = argparse.ArgumentParser(
description='Add Your Purpose',
formatter_class=argparse.ArgumentDefaultsHelpFormatter)

parser = argparse.ArgumentParser(description= 'Divide two numbers')
parser.add_argument('INT', type = int, nargs = 2, help = 'Numbers to divide')

return parser.parse_args()


# --------------------------------------------------
def main():
"""Perform Integer Division"""

args = get_args()
num1, num2 = args.INT
if num2 == 0:
print('usage: divide.py [-h] INT INT', file=sys.stderr)
print('Cannot divide by zero, dum-dum!', file=sys.stderr)
sys.exit(1)

result = num1 // num2
print(f'{num1} / {num2} = {result}')


# --------------------------------------------------
if __name__ == '__main__':
main()
58 changes: 58 additions & 0 deletions assignments/03_dna/dna.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
#!/usr/bin/env python3
"""
Author : Rose Fragala <rosefragala@arizona.edu>
Date : 2025-02-13
Purpose: count tetranucleotide frequency
"""

import argparse

# --------------------------------------------------


def get_args():
"""Get command-line arguments"""

parser = argparse.ArgumentParser(
description='Tetranucleotide frequency',
formatter_class=argparse.ArgumentDefaultsHelpFormatter)

parser.add_argument('DNA',
metavar='DNA',
help='Input DNA sequence')
return parser.parse_args()


# --------------------------------------------------


def count_nucleotides(dna):
"""Count tetranucleotide frequency"""
counts = {"A": 0, "C": 0, "G": 0, "T": 0}
dna = dna.replace("\n", "").replace("\t", "").replace(" ", "")

for nucleotide in dna:
if nucleotide in counts:
counts[nucleotide] += 1
else:
raise ValueError(
f"Invalid character in DNA sequence: {nucleotide}")
return counts


# --------------------------------------------------


def main():
"""Make a jazz noise here"""

args = get_args()
dna = args.DNA.upper().strip()
counts = count_nucleotides(dna)

print(counts["A"], counts["C"], counts["G"], counts["T"])


# --------------------------------------------------
if __name__ == '__main__':
main()
60 changes: 60 additions & 0 deletions assignments/04_revc/revc.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
#!/usr/bin/env python3
"""
Author : Rose Fragala <rosefragala@arizona.edu>
Date : 2025-02-19
Purpose: Print the reverse complement of a DNA sequence
"""


import argparse


COMPLEMENTS = str.maketrans("ACGTacgt", "TGCAtgca")


# --------------------------------------------------


def get_args():
"""Get command-line arguments"""

parser = argparse.ArgumentParser(
description='Print the reverse complement of DNA',
formatter_class=argparse.ArgumentDefaultsHelpFormatter)

parser.add_argument('DNA',
metavar='DNA',
help='Input sequence or file')

return parser.parse_args()


# --------------------------------------------------


def reverse_complement(dna: str) -> str:
"""Return the reverse complement of a DNA sequence"""
return dna[::-1].translate(COMPLEMENTS)


# --------------------------------------------------


def main():
"""Make a jazz noise here"""

args = get_args()
input_data = args.DNA

try:
with open(input_data, 'rt', encoding='utf-8') as file:
dna = file.read().strip()
except FileNotFoundError:
dna = input_data.strip()

print(reverse_complement(dna))


# --------------------------------------------------
if __name__ == '__main__':
main()
1 change: 1 addition & 0 deletions assignments/04_revc/tests/inputs/input1.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
AAAACCCGGT
1 change: 1 addition & 0 deletions assignments/04_revc/tests/inputs/output1.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
ACCGGGTTTT
1 change: 1 addition & 0 deletions assignments/04_revc/tests/inputs/output2.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
TTTAAACCC
74 changes: 74 additions & 0 deletions assignments/05_gc/cgc.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
#!/usr/bin/env python3
"""
Author : Rose Fragala <rosefragala@arizona.edu>
Date : 2025-02-26
Purpose: To compute GC content in sequencing reads
"""

import argparse
import sys


# --------------------------------------------------


def get_args():
"""Get command-line arguments"""

parser = argparse.ArgumentParser(
description='Compute GC content',
formatter_class=argparse.ArgumentDefaultsHelpFormatter)

parser.add_argument('file',
metavar='FILE',
type=argparse.FileType('rt'),
nargs='?',
default=sys.stdin,
help='Input sequence file')

return parser.parse_args()


# --------------------------------------------------


def gc_content(dna):
"""Calculate GC content of a sequence"""
gc_count = sum(1 for base in dna if base in 'GC')
return (gc_count / len(dna)) * 100 if dna else 0


# --------------------------------------------------


def main():
"""Make a jazz noise here"""

args = get_args()
dna = {}
seq_id = None

for line in args.file:
line = line.strip()
if line.startswith('>'):
seq_id = line[1:]
dna[seq_id] = ''
elif seq_id:
dna[seq_id] += line

max_gc_id = None
max_gc_value = -1

for seq_id, dna in dna.items():
gc_val = gc_content(dna)
if gc_val > max_gc_value:
max_gc_id, max_gc_value = seq_id, gc_val
if max_gc_id is not None:
print(f'{max_gc_id} {max_gc_value:.6f}')
else:
print("No valid sequences found.", file=sys.stderr)


# --------------------------------------------------
if __name__ == '__main__':
main()
9 changes: 9 additions & 0 deletions assignments/05_gc/tests/inputs/1.fa
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
>Rosalind_6404
CCTGCGGAAGATCGGCACTAGAATAGCCAGAACCGTTTCTCTGAGGCTTCCGGCCTTCCC
TCCCACTAATAATTCTGAGG
>Rosalind_5959
CCATCGGTAGCGCATCCTTAGTCCAATTAAGTCCCTATCCAGGCGCTCCGCCGAAGGTCT
ATATCCATTTGTCAGCAGACACGC
>Rosalind_0808
CCACCCTCGTGGTATGGCTAGGCATTCAGGAACCGGAGAACGCTTCAGACCAGCCCGGAC
TGGGAACCTGCGGGCAGTAGGTGGAAT
Loading