#!/usr/bin/env python3
"""
Week 9 - Prefixes: UN-, RE-, DIS- (CORRECTED VERSION)
Fixes from original:
- All stories rewritten with natural word usage
- "dishonest" only used for people who lie (never for things)
- Monday "Add the Prefix" expanded to 8 items
- Teacher Guide included
"""
import os, sys
sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..'))
from monday_wp import generate_monday
from tuesday_wp import generate_tuesday
from wednesday_wp import generate_wednesday
from thursday_wp import generate_thursday
from friday_wp import generate_friday
from teacher_guide import generate_teacher_guide
week_dir = os.path.join(os.path.dirname(__file__))
week_num = 9
topic_label = "Prefixes: UN-, RE-, DIS-"
# ─── Word List (12 words) ─────────────────────────────────────────────────────
words = [
("unhappy", "un + happy", "not happy, sad"),
("unpack", "un + pack", "take things out of a container"),
("unknown", "un + known", "not known, not familiar"),
("return", "re + turn", "go or come back"),
("disagree", "dis + agree", "have a different opinion"),
("remake", "re + make", "make again"),
("discover", "dis + cover", "find for the first time"),
("dishonest", "dis + honest", "not honest, tells lies"),
("unsafe", "un + safe", "not safe, dangerous"),
("reopen", "re + open", "open again"),
("dislike", "dis + like", "not like, don't enjoy"),
("remove", "re + move", "take away, move away"),
]
WORD_NAMES = [w[0] for w in words]
# ─── Prefix Examples ──────────────────────────────────────────────────────────
prefix_examples = [
"un- = not (unhappy = not happy)",
"un- = opposite action (unpack = take apart)",
"re- = again (return = turn again, come back)",
"re- = back (remove = move away)",
"dis- = not (dishonest = not honest, unsafe = not safe)",
"dis- = opposite action (discover = take cover away)",
]
# ─── Learning Text ────────────────────────────────────────────────────────────
learning_text = (
"A <strong>prefix</strong> is a group of letters added to the <strong>beginning</strong> of a word "
"to change its meaning. This week we are learning three prefixes: "
"<strong>un-</strong> (means 'not'), <strong>re-</strong> (means 'again'), "
"and <strong>dis-</strong> (means 'not' or 'opposite')."
)
# ─── MONDAY DATA ──────────────────────────────────────────────────────────────
MONDAY_STORY = (
'When Maya walked into her new classroom, she felt <strong>unhappy</strong>. '
'She did not know anyone yet. The teacher said, "Please <strong>unpack</strong> your backpacks." '
'Maya sat next to a boy who was <strong>unknown</strong> to her. '
'He smiled and said, "I will <strong>return</strong> your crayons after we finish." '
'They started talking and never <strong>disagree</strong>d about what game to play. '
'"Let\'s <strong>remake</strong> this paper tower," Maya said, and they built one even taller. '
'Maya began to <strong>discover</strong> that new schools can be fun. '
'She learned that some people are <strong>dishonest</strong>, but her new friend always told the truth. '
'The playground had a slide that looked <strong>unsafe</strong>, so they found something better. '
'At lunch, they had to <strong>reopen</strong> their snack bags. '
'Maya did not <strong>dislike</strong> the new school after all. '
'She started to <strong>remove</strong> her worried feelings.'
)
monday_sort_labels = ["un-", "re-", "dis-"]
monday_fill_data = [
("She felt very __________ on her first day.", "unhappy"),
("Please __________ your lunch bag.", "unpack"),
("The answer was __________ to everyone.", "unknown"),
("I will __________ the book to the library.", "return"),
("I __________ with your idea.", "disagree"),
("We had to __________ the broken toy.", "remake"),
("They __________ a new animal.", "discover"),
("He is not __________ — he always tells the truth.", "dishonest"),
]
monday_opposite_words = [
"unhappy", "unknown", "dishonest", "unsafe", "dislike", "remove"
]
monday_sentence_words = WORD_NAMES[:8]
monday_add_prefix_data = [
("happy", "un-", "unhappy"),
("pack", "un-", "unpack"),
("known", "un-", "unknown"),
("turn", "re-", "return"),
("agree", "dis-", "disagree"),
("make", "re-", "remake"),
("cover", "dis-", "discover"),
("safe", "un-", "unsafe"),
]
grammar_note = "Grammar Focus: <strong>Pronouns</strong> — words that replace nouns (he, she, it, they, we, you, I)."
grammar_deep = (
"Pronouns help us avoid repeating the same name over and over. "
"Instead of saying 'Maya sat down. Maya smiled. Maya talked,' "
"we can say 'Maya sat down. <strong>She</strong> smiled. <strong>She</strong> talked.'"
)
grammar_practice = [
"The boy and the girl played together. (______)",
"Tom dropped his pencil. (______ dropped it.)",
"The cat and the dog ran outside. (______ ran outside.)",
"Maya is my friend. (______ is my friend.)",
"The teacher opened the door. (______ opened it.)",
"Jake and I went to lunch. (______ went to lunch.)",
]
# ─── TUESDAY DATA ─────────────────────────────────────────────────────────────
TUESDAY_READING = (
'The school library was <strong>unknown</strong> to most students because it was very old. '
'One day, Leo <strong>discover</strong>ed a secret door behind the bookshelves. '
'"We should <strong>reopen</strong> this door and see what is inside," he said. '
'His friend Sam <strong>disagree</strong>d. "It might be <strong>unsafe</strong>!" '
'But Leo was not <strong>dishonest</strong> — he really wanted to learn, not play. '
'Together they <strong>removed</strong> the old boards from the door. '
'Inside they found boxes to <strong>unpack</strong>. '
'The boxes had old books that needed to be <strong>remake</strong>n — the covers were torn. '
'Sam was not <strong>unhappy</strong> anymore. This was exciting! '
'"We do not <strong>dislike</strong> this surprise!" said Sam with a smile. '
'The librarian decided to <strong>return</strong> the books to the shelves for everyone to read.'
)
tuesday_comp_questions = [
"What did Leo discover behind the bookshelves?",
"Why did Sam disagree at first?",
"What was inside the secret room?",
"How did Sam feel by the end?",
]
tuesday_word_part_examples = [
"un- at the start = NOT (unhappy = not happy)",
"re- at the start = AGAIN (return = turn again)",
"dis- at the start = NOT (disagree = not agree)",
"Prefixes go at the BEGINNING of words",
]
tuesday_word_part_hunt = {
"match": ["unhappy", "unpack", "unknown", "return", "disagree", "remake"],
"decoy": ["happy", "pack", "know", "turn", "agree", "safe"],
}
tuesday_swap_data = [
("The door was closed.", ("closed", "unknown"), ("unknown", "unopened")),
]
tuesday_builder_prompts = [
("Write about finding something new.", "discover"),
("Write about going back somewhere.", "return"),
("Write about having a different opinion.", "disagree"),
]
tuesday_remember_boxes = [
("Remember!", "A prefix goes at the BEGINNING of a word. un-happy, re-turn, dis-agree."),
("Tip!", "Look for un-, re-, and dis- at the start of words you read."),
]
tuesday_identify_data = [
("unhappy", "What is the prefix? What does it mean?"),
("return", "What is the prefix? What does it mean?"),
("dishonest", "What is the prefix? What does it mean?"),
("reopen", "What is the prefix? What does it mean?"),
]
# ─── WEDNESDAY DATA ───────────────────────────────────────────────────────────
WEDNESDAY_READING = (
'Captain Rosa had a map to an <strong>unknown</strong> island. '
'Her crew was <strong>unhappy</strong> because they wanted to go home. '
'"I <strong>disagree</strong> with this trip," said Pete, the tallest sailor. '
'"We should <strong>return</strong> to the shore right now," Pete said again. '
'Captain Rosa did not <strong>dislike</strong> Pete\'s feelings, but she knew they had to try. '
'They <strong>removed</strong> the cover from the map and saw the island ahead. '
'On the island, they <strong>discovered</strong> a hidden cave. '
'They had to <strong>unpack</strong> their supplies carefully near the cave. '
'Inside the cave was an old boat that they could <strong>remake</strong> into a new ship. '
'Pete was not being <strong>dishonest</strong> — he really was scared of being lost. '
'The old cave looked <strong>unsafe</strong> without a flashlight, so Captain Rosa lit a torch. '
'They <strong>reopened</strong> their map and found the way home.'
)
wednesday_vocab_question = (
'In the story, what does "discover" mean?<br>'
'A) To lose something<br>'
'B) To find something for the first time<br>'
'C) To hide something<br>'
'D) To break something'
)
wednesday_syn_ant_words = [
"unhappy", "unknown", "disagree", "discover", "dishonest", "unsafe"
]
wednesday_word_web_center = "prefix"
wednesday_word_web_instruction = "Write 4 words that start with un-, re-, or dis-."
wednesday_sentence_sort_data = [
"The boy disagreed with his friend",
"They discovered a secret cave",
"Please unpack your bag",
]
wednesday_correct_sentences = [
"the boy was dishonest about his homework",
"we discovered an unknown island",
"it is unsafe to climb that tree",
]
wednesday_fill_data = [
("She was __________ when her friend moved away.", "unhappy"),
("I __________ with your answer — I think it is wrong.", "disagree"),
("The explorers __________ a new cave.", "discover"),
("That cliff is __________ — don\'t climb it.", "unsafe"),
("He is __________ — he always tells the truth.", "dishonest"),
]
wednesday_context_clue = (
'Read this sentence: "The old bridge was <strong>unsafe</strong>, so the sign said '
'"Do Not Cross." The bridge looked broken and wobbly."<br><br>'
'What does "unsafe" mean? Use the clues in the sentence to help you.'
)
wednesday_learning_skills = [
"Using context clues to find word meanings",
"Identifying prefixes in reading",
"Building vocabulary with synonyms and antonyms"
]
wednesday_word_families = [
("happy", ["unhappy"]),
("pack", ["unpack"]),
("turn", ["return"]),
("agree", ["disagree"]),
("make", ["remake"]),
("cover", ["discover"]),
]
# ─── THURSDAY DATA ────────────────────────────────────────────────────────────
THURSDAY_STORY = (
'Detective Sam had to <strong>discover</strong> who took the treasure from the school. '
'The <strong>unknown</strong> thief left no fingerprints at all. '
'"We must <strong>reopen</strong> the case file," Sam told his partner. '
'His partner did not <strong>disagree</strong> — they both wanted to solve it. '
'They <strong>removed</strong> the old evidence bag and checked every clue. '
'The guard was not <strong>dishonest</strong> — he told the truth about everything he saw. '
'"We need to <strong>return</strong> to the room where it happened," Sam decided. '
'When they <strong>remake</strong> their search plan, they found a hidden key under the rug. '
'They <strong>unpacked</strong> the dusty box behind the painting. '
'No one felt <strong>unhappy</strong> when the treasure was found. '
'The principal did not <strong>dislike</strong> having the treasure back. '
'The broken window made the room <strong>unsafe</strong>, so they called for repairs.'
)
thursday_remember_text = (
"Prefix un- = NOT (unhappy = not happy)\n"
"Prefix re- = AGAIN (return = come back)\n"
"Prefix dis- = NOT or OPPOSITE (disagree = not agree)\n"
"Always look at the BEGINNING of the word for the prefix!"
)
thursday_comp_questions = [
"What did Detective Sam have to discover?",
"Why did Sam want to reopen the case file?",
"Where did they find the hidden key?",
"Was the guard honest or dishonest? How do you know?",
]
thursday_sentence_sort_data = [
"The boy disagreed with his sister",
"They discovered a hidden treasure",
"The bridge is unsafe to cross",
]
thursday_detective_words = [
"unhppy", "unpak", "unkown", "retun", "disgree"
]
thursday_swap_data = [
("The door was closed forever.", ("closed", "unknown"), ("unknown", "unopened")),
]
thursday_map_word = "discover"
thursday_para_prompts = [
"Write about a time you discovered something new. Use 2 spelling words.",
"Write about something you disagree with a friend about. Use 2 spelling words.",
]
thursday_build_words = [
("pack", "un-", "take out"),
("turn", "re-", "come back"),
("agree", "dis-", "not agree"),
("safe", "un-", "dangerous"),
("honest", "dis-", "not honest"),
]
thursday_story_prompt = "Write a story about a mystery. Use at least 5 spelling words with prefixes."
# ─── FRIDAY DATA ──────────────────────────────────────────────────────────────
FRIDAY_REVIEW_STORY = (
'On the last day of Prefix Week, our class had a spelling party. '
'We decorated with maps to <strong>unknown</strong> places and <strong>discover</strong>y flags. '
'Jake brought a puppet named <strong>Unhappy</strong> who always needed a friend. '
'Sarah built a paper <strong>disagree</strong> machine that made funny sounds. '
'I had to <strong>unpack</strong> the party supplies from a big box. '
'Our teacher said our work was not <strong>dishonest</strong> — every student did their own work. '
'When the party ended, we had to <strong>return</strong> all the decorations to the closet. '
'No one wanted to <strong>remove</strong> their party hats. '
'We even <strong>remake</strong>d our spelling posters with better drawings. '
'Our teacher said the old gym was too <strong>unsafe</strong> for parties, so we stayed in the classroom. '
'Everyone agreed we did not <strong>dislike</strong> learning about prefixes. '
'Our teacher said we had <strong>reopened</strong> our love for spelling!'
)
friday_story_questions = [
"What was the puppet named?",
"What did I have to unpack?",
"Where did the decorations go?",
"Why did they not use the gym?",
]
friday_opposite_words = [
"unhappy", "unknown", "dishonest", "unsafe", "dislike", "remove"
]
friday_builder_words = [
"discover", "return", "disagree", "remake", "reopen"
]
friday_journal_words = [
"unhappy", "return", "disagree", "discover", "dishonest", "remove"
]
# ─── Sort Answers for Monday ─────────────────────────────────────────────────
monday_sort_answers = {
"un-": ["unhappy", "unpack", "unknown", "unsafe"],
"re-": ["return", "remake", "reopen", "remove"],
"dis-": ["disagree", "discover", "dishonest", "dislike"],
}
# ══════════════════════════════════════════════════════════════════════════════
# GENERATE ALL DAYS
# ══════════════════════════════════════════════════════════════════════════════
print("=" * 60)
print("Week 9 - Prefixes: UN-, RE-, DIS- (CORRECTED)")
print("=" * 60)
# Remove old corrupted files
for day in ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Teacher_Guide"]:
day_dir = os.path.join(week_dir, day)
if os.path.exists(day_dir):
for f in os.listdir(day_dir):
if f.endswith('.pdf'):
os.remove(os.path.join(day_dir, f))
print(f" Removed old: {day}/{f}")
# ── MONDAY ──
print("\n[Monday]...")
generate_monday(
week_dir=week_dir,
week_num=week_num,
day_name="Monday",
topic_label=topic_label,
words=words,
learning_text=learning_text,
prefix_examples=prefix_examples,
grammar_note=grammar_note,
grammar_deep=grammar_deep,
grammar_practice=grammar_practice,
story_text=MONDAY_STORY,
sort_labels=monday_sort_labels,
sort_title="Prefix Sort",
sort_instruction="Sort each word under the correct prefix: un-, re-, or dis-.",
fill_data=monday_fill_data,
opposite_words=monday_opposite_words,
sentence_words=monday_sentence_words,
add_prefix_data=monday_add_prefix_data,
)
# ── TUESDAY ──
print("\n[Tuesday]...")
generate_tuesday(
week_dir=week_dir,
week_num=week_num,
day_name="Tuesday",
topic_label=topic_label,
words=words,
learning_text=learning_text,
word_part_examples=tuesday_word_part_examples,
remember_boxes=tuesday_remember_boxes,
reading_text=TUESDAY_READING,
comp_questions=tuesday_comp_questions,
word_part_hunt=tuesday_word_part_hunt,
word_part_hunt_instruction="Check each word that contains a prefix: un-, re-, or dis-.",
word_part_hunt_title="Prefix Hunt",
swap_data=tuesday_swap_data,
builder_prompts=tuesday_builder_prompts,
identify_data=tuesday_identify_data,
)
# ── WEDNESDAY ──
print("\n[Wednesday]...")
generate_wednesday(
week_dir=week_dir,
week_num=week_num,
day_name="Wednesday",
topic_label=topic_label,
words=words,
learning_text=learning_text,
learning_skills=wednesday_learning_skills,
reading_passage=WEDNESDAY_READING,
vocab_question=wednesday_vocab_question,
syn_ant_words=wednesday_syn_ant_words,
word_web_center=wednesday_word_web_center,
word_web_instruction=wednesday_word_web_instruction,
sentence_sort_data=wednesday_sentence_sort_data,
correct_sentences=wednesday_correct_sentences,
fill_data=wednesday_fill_data,
context_clue=wednesday_context_clue,
word_families=wednesday_word_families,
)
# ── THURSDAY ──
print("\n[Thursday]...")
generate_thursday(
week_dir=week_dir,
week_num=week_num,
day_name="Thursday",
topic_label=topic_label,
words=words,
learning_text=learning_text,
remember_text=thursday_remember_text,
story_text=THURSDAY_STORY,
comp_questions=thursday_comp_questions,
sentence_sort_data=thursday_sentence_sort_data,
detective_words=thursday_detective_words,
swap_data=thursday_swap_data,
map_word=thursday_map_word,
para_prompts=thursday_para_prompts,
build_words=thursday_build_words,
story_prompt=thursday_story_prompt,
)
# ── FRIDAY ──
print("\n[Friday]...")
generate_friday(
week_dir=week_dir,
week_num=week_num,
day_name="Friday",
topic_label=topic_label,
words=words,
review_story=FRIDAY_REVIEW_STORY,
story_questions=friday_story_questions,
opposite_words=friday_opposite_words,
builder_words=friday_builder_words,
journal_words=friday_journal_words,
)
# ── TEACHER GUIDE ──
print("\n[Teacher Guide]...")
generate_teacher_guide(
week_dir=week_dir,
week_num=week_num,
phonics_label=topic_label,
words=words,
monday_phonics_explanation=(
"Today we are learning that prefixes are letter groups added to the "
"BEGINNING of words to change their meaning. un- = not, re- = again, dis- = not/opposite."
),
monday_grammar_focus="Pronouns",
monday_grammar_explanation=(
"Pronouns (he, she, it, they, we, you, I) replace nouns so we don't repeat the same name. "
"Have students identify pronouns in the story and practice replacing names."
),
monday_story_text=MONDAY_STORY,
monday_sort_labels=["un-", "re-", "dis-"],
monday_sort_answers=[
["unhappy", "unpack", "unknown", "unsafe"],
["return", "remake", "reopen", "remove"],
["disagree", "discover", "dishonest", "dislike"],
],
monday_fill_answers=["unhappy", "unpack", "unknown", "return", "disagree", "remake", "discover", "dishonest"],
monday_opposite_answers=[
("unhappy", "happy"), ("unknown", "known"), ("dishonest", "honest"),
("unsafe", "safe"), ("dislike", "like"), ("remove", "add"),
],
monday_sentence_words=monday_sentence_words,
tuesday_phonics_explanation="Practice identifying prefixes in reading. Students should recognize un-, re-, dis- at the start of words.",
tuesday_scramble_answers=[],
tuesday_comp_questions=tuesday_comp_questions,
tuesday_comp_answers=[
"Leo discovered a secret door behind the bookshelves.",
"Sam disagreed because he thought it might be unsafe.",
"Inside they found boxes with old books.",
"Sam was excited and not unhappy anymore.",
],
tuesday_pattern_hunt_answers={
"match": ["unhappy", "unpack", "unknown", "return", "disagree", "remake"],
"decoy": ["happy", "pack", "know", "turn", "agree", "safe"],
},
tuesday_swap_answers=["The door was unopened forever."],
tuesday_builder_prompts=tuesday_builder_prompts,
wednesday_phonics_explanation="Deepen understanding through vocabulary. Use context clues to figure out prefix meanings.",
wednesday_vocab_q_answer="B) To find something for the first time",
wednesday_vocab_q_question='What does "discover" mean?',
wednesday_syn_ant_words=wednesday_syn_ant_words,
wednesday_word_web_center="prefix",
wednesday_word_web_suggestions=["unhappy", "return", "disagree", "discover", "reopen", "remove"],
wednesday_sort_answers={
"sentences": wednesday_sentence_sort_data,
"correct_order": wednesday_sentence_sort_data,
},
wednesday_correct_answers=[
("the boy was dishonest about his homework", "The boy was dishonest about his homework."),
("we discovered an unknown island", "We discovered an unknown island."),
("it is unsafe to climb that tree", "It is unsafe to climb that tree."),
],
wednesday_fill_answers=["unhappy", "disagree", "discover", "unsafe", "dishonest"],
wednesday_context_clue_answer="Unsafe means dangerous or not safe to use.",
wednesday_context_clue_question='What does "unsafe" mean in the sentence about the bridge?',
wednesday_dictation_words=WORD_NAMES,
thursday_phonics_explanation="Production day — using prefixes actively in writing and creative expression.",
thursday_comp_questions=thursday_comp_questions,
thursday_comp_answers=[
"Detective Sam had to discover who took the treasure.",
"Sam wanted to reopen the case to find new clues.",
"They found the hidden key under the rug.",
"The guard was honest — he told the truth about everything.",
],
thursday_sort_answers={},
thursday_detective_answers=[
("unhppy", "unhappy"), ("unpak", "unpack"), ("unkown", "unknown"),
("retun", "return"), ("disgree", "disagree"),
],
thursday_swap_answers=["The door was unopened forever."],
thursday_map_word="discover",
thursday_map_suggestions=[
"Prefix: dis-", "Base word: cover",
"Meaning: find for the first time",
"Sentence: We discovered a secret cave.",
],
thursday_para_prompts=thursday_para_prompts,
friday_phonics_explanation="Review and assessment day. Students show what they learned about prefixes all week.",
friday_test_answers=WORD_NAMES,
friday_story_questions=friday_story_questions,
friday_story_answers=[
"The puppet was named Unhappy.",
"I had to unpack the party supplies.",
"The decorations went back to the closet.",
"The gym was too unsafe for parties.",
],
friday_opposite_answers=[
("unhappy", "happy"), ("unknown", "known"), ("dishonest", "honest"),
("unsafe", "safe"), ("dislike", "like"), ("remove", "add"),
],
friday_builder_words=friday_builder_words,
friday_journal_words=friday_journal_words,
)
print("\n" + "=" * 60)
print("Week 9 COMPLETE — all PDFs generated!")
print("=" * 60)