Report of the Internship
ON
PYTHON PROGRAMMING
Company Name: CodeAlpha
Location: Work from Home
BY
Student Name: Sarvendu Sen
Roll Number: 24437
Registration Number: 24101090053
Diploma in Electronics and Communication Engineering
Government Polytechnic, Ranchi
Ranchi (Jharkhand)
(2025)
CERTIFICATE OF APPROVAL
The foregoing INTERNSHIP REPORT entitled PYTHON PROGRAMMING is
hereby approved as a creditable work on the topic and has been presented by
Sarvendu Sen (Roll No.: 24437, Reg. No.: 24101090053) in a satisfactory manner
to warrant its acceptance as a prerequisite to the diploma for which it has been
submitted.
It is understood that by this approval, the undersigned do not necessarily endorse
any conclusion drawn or opinion expressed therein, but approve the INTERNSHIP
REPORT for the purpose for which it is submitted.
(Internal Examiner) (External Examiner)
Head of Department
Diploma in Electronics and Communication Engineering
Government Polytechnic, Ranchi, Jharkhand
(2025)
ACKNOWLEDGEMENT
I take this opportunity to express my sincere gratitude to all those who have
contributed towards the successful completion of my internship and this report.
First and foremost, I extend my heartfelt thanks to my guide and Head of
Department, Prof. (Prof. Name), Department of Electronics and Communication
Engineering, whose invaluable suggestions, constant encouragement, and expert
guidance have helped me in the preparation of this report.
I am also thankful to all the faculty and technical staff members of the department
for their kind support and cooperation during my course of study and internship
period.
My special thanks go to the team at CodeAlpha, who provided me with the
opportunity to work as a Python Programming Intern from 05/07/2025 to
05/08/2025. Despite their busy schedules, they guided me, shared their expertise,
and gave me practical exposure to programming concepts, which enhanced my
skills and confidence.
Lastly, I wish to express my gratitude to my friends and family for their moral
support, motivation, and encouragement throughout the internship and report
preparation.
Sarvendu Sen
PYTHON PROGRAMMING TRAINING SCHEDULE
SL.
MODULE TOPICS COVERED DAYS
NO
Introduction to Overview of Python, Installation, IDEs, Running Python
1 1–2
Python Programs, Syntax & Indentation
Variables, Data Types, Operators, Type Casting, Input/
2 Python Basics 3–5
Output, Comments
If-Else, Loops (for, while), Nested Loops, Break &
3 Control Structures 6–8
Continue
Functions & Defining Functions, Arguments, Return Values, Lambda
4 9 – 11
Modules Functions, Creating & Importing Modules
Data Structures in
5 Lists, Tuples, Sets, Dictionaries, List Comprehension 12 – 15
Python
Reading/Writing Files, Working with Text & CSV Files,
6 File Handling 16 – 18
Exception Handling
Object-Oriented Classes, Objects, Methods, Inheritance, Polymorphism,
7 19 – 21
Programming Encapsulation
NumPy Basics, Pandas for Data Handling, Matplotlib for
8 Python Libraries 22 – 26
Data Visualization
Building a Simple Data Analysis Tool / Automation
9 Mini Project 27 – 30
Script using Python
INDEX
1. Introduction
2. Tools and Frameworks Used
3. Data and Methodology
4. Python Programming Concepts
4.1 Variables and Data Types
4.2 Control Structures
4.3 Functions and Modules
4.4 Data Structures
4.5 File Handling
4.6 Object-Oriented Programming
4.7 Python Libraries
5. Project Execution
5.1 Problem Statement
5.2 Development Process
5.3 Testing and Debugging
6. Results
7. Conclusion
INTRODUCTION
Python is a high-level, interpreted, and versatile programming language known for
its simplicity and readability. Due to its clear syntax and vast collection of libraries,
Python is widely used in various domains, including data science, web
development, automation, artificial intelligence, and more.
The Python Programming Internship at CodeAlpha was designed to enhance
my understanding of programming concepts through a structured learning process.
The internship duration was from 05/07/2025 to 05/08/2025, during which I gained
practical knowledge of Python fundamentals, advanced features, and application
development.
This internship provided a hands-on learning environment where I worked on small
tasks and a mini-project that involved applying Python concepts to solve real-world
problems. The training covered a wide range of topics, starting from the basics of
Python syntax to advanced modules such as NumPy, Pandas, and Matplotlib.
Through this internship, I developed a deeper understanding of problem-solving
techniques, code optimization, and best practices in programming. It has also
improved my logical thinking skills, coding efficiency, and confidence to work on
independent projects.
TOOLS AND FRAMEWORKS USED
During the Python Programming Internship at CodeAlpha, the following tools and
frameworks were used to complete training exercises and project work:
1. Python (Version 3.x) – The core programming language used for all tasks
and project development.
2. Integrated Development Environments (IDEs):
- PyCharm – For writing, running, and debugging Python code efficiently.
- Jupyter Notebook – For interactive coding, especially while working with
data analysis libraries.
- VS Code – For lightweight coding and quick script execution.
3. Command Line / Terminal – To execute Python scripts, manage virtual
environments, and install packages.
4. Pip (Python Package Manager) – For installing and managing Python
libraries.
5. Libraries:
- NumPy – For numerical computations.
- Pandas – For data manipulation and analysis.
- Matplotlib – For creating visualizations and graphs.
- Requests – For making HTTP requests in automation tasks.
6. Git & GitHub – For version control and hosting code repositories.
7. Operating System – Windows / Linux environment for development and
testing.
These tools and frameworks were essential in implementing the concepts learned
and in building the final mini-project successfully.
DATA AND METHODOLOGY
The internship followed a structured approach to ensure progressive learning and
practical application of Python programming concepts. The methodology included:
1. Data
The data used during the internship varied based on the exercises and the mini-
project:
• Sample Datasets – CSV and text files for practicing file handling, Pandas,
and data visualization.
• User Input Data – Real-time inputs taken through scripts for logical problem-
solving exercises.
• API Data – JSON responses from public APIs for testing Python’s Requests
library.
2. Methodology
The internship was carried out in three main phases:
Phase 1 – Fundamentals Learning
• Understanding Python syntax, variables, data types, control structures, and
functions.
• Hands-on coding exercises for each concept to ensure clarity.
Phase 2 – Practical Implementation
• Working with Python’s built-in and external libraries.
• Implementing small tasks such as data sorting, filtering, and visualization.
• Learning Object-Oriented Programming (OOP) for structured and reusable
code.
Phase 3 – Mini Project Development
• Selecting a problem statement related to data analysis.
• Gathering sample datasets and cleaning data using Pandas.
• Performing analysis and visualizing results with Matplotlib.
• Testing and debugging the final solution.
This structured methodology ensured that the learning was progressive, practical,
and result-oriented.
PYTHON PROGRAMMING CONCEPTS
During the internship at CodeAlpha, the following Python programming concepts
and modules were covered in detail:
1.1 Variables and Data Types
• Understanding variables and memory allocation.
• Working with basic data types: integers, floats, strings, booleans.
• Type casting between different data types.
1.2 Control Structures
• Decision-making using if, elif, and else.
• Looping with for and while loops.
• Using break, continue, and pass statements for flow control.
1.3 Functions and Modules
• Creating and calling user-defined functions.
• Passing parameters and returning values.
• Anonymous functions using lambda.
• Creating and importing custom modules.
1.4 Data Structures
• Lists: indexing, slicing, and list comprehensions.
• Tuples: immutability and use cases.
• Sets: unique element storage and set operations.
• Dictionaries: key-value pairs, iteration, and dictionary methods.
1.5 File Handling
• Opening, reading, and writing files using open() function.
• Working with text, CSV, and JSON files.
• Using exception handling for error-free file operations.
1.6 Object-Oriented Programming (OOP)
• Creating classes and objects.
• Instance and class variables.
• Inheritance, polymorphism, encapsulation, and abstraction.
1.7 Python Libraries
• NumPy: Arrays, mathematical operations, and array slicing.
• Pandas: DataFrames, reading and cleaning data, filtering, and grouping.
• Matplotlib: Creating bar charts, line graphs, and scatter plots.
• Requests: Sending GET/POST requests and parsing API data.
PROJECT EXECUTION
During the final phase of the internship, I developed a Mini Project titled "Quiz
Application" using Python.
The goal of this project was to create an interactive console-based quiz program
that tests a user’s knowledge on various topics and provides instant feedback.
5.1 Problem Statement
Many learners enjoy practicing their knowledge through quizzes, but manually
creating and checking quizzes can be time-consuming. This project automates the
quiz process using Python.
5.2 Development Process
Step 1 – Designing Questions
• Prepared a set of multiple-choice questions stored in a Python dictionary.
• Each question had four options and one correct answer.
Step 2 – Implementing the Quiz Logic
• Used for loops to display each question and accept user input.
• Checked the answers against the correct options and updated the score.
Step 3 – Feedback Mechanism
• Provided instant feedback after each question, indicating whether the answer
was correct or wrong.
Step 4 – Final Score Display
• At the end of the quiz, displayed the total score and percentage.
Step 5 – Enhancements
• Added error handling to ensure valid input (only accepting options A/B/C/D).
• Randomized question order using the random module.
5.3 Key Python Concepts Used
• Dictionaries and Lists for storing questions and options.
• Loops and Conditional Statements for quiz flow.
• Functions for modular and reusable code.
• Random module for shuffling questions.
PROJECT DESIGN
The Quiz Application was designed using a simple modular architecture to ensure
clarity, flexibility, and ease of maintenance. The design process involved identifying
the main components of the quiz system and their interactions.
A. System Architecture
The project follows a linear flow where the program:
1. Loads the questions and options.
2. Displays each question to the user.
3. Accepts and validates user input.
4. Checks the answer and updates the score.
5. Shows feedback after each question.
6. Displays the final score at the end.
Code of the Project
app.py
import streamlit as st
import time
from quiz_data import QUIZ_SETS
from quiz_manager import QuizManager
def initialize_session_state():
"""Initialize session state variables"""
if 'quiz_manager' not in st.session_state:
st.session_state.quiz_manager = None
if 'current_quiz' not in st.session_state:
st.session_state.current_quiz = None
if 'quiz_started' not in st.session_state:
st.session_state.quiz_started = False
if 'quiz_completed' not in st.session_state:
st.session_state.quiz_completed = False
if 'start_time' not in st.session_state:
st.session_state.start_time = None
if 'question_start_time' not in st.session_state:
st.session_state.question_start_time = None
def reset_quiz():
"""Reset quiz state"""
st.session_state.quiz_manager = None
st.session_state.current_quiz = None
st.session_state.quiz_started = False
st.session_state.quiz_completed = False
st.session_state.start_time = None
st.session_state.question_start_time = None
def display_quiz_selection():
"""Display quiz selection interface"""
st.title("🧠 Quiz Application")
st.markdown("### Welcome! Choose a quiz to get started:")
# Display available quizzes
quiz_options = list(QUIZ_SETS.keys())
for i, quiz_name in enumerate(quiz_options):
quiz_info = QUIZ_SETS[quiz_name]
col1, col2 = st.columns([3, 1])
with col1:
st.markdown(f"**{quiz_name}**")
st.markdown(f"📝 {len(quiz_info['questions'])} questions")
st.markdown(f"⏱ {quiz_info['time_limit']} seconds per question")
st.markdown(f"📊 Difficulty: {quiz_info['difficulty']}")
with col2:
if st.button(f"Start Quiz", key=f"start_{i}"):
st.session_state.current_quiz = quiz_name
st.session_state.quiz_manager = QuizManager(quiz_info)
st.session_state.quiz_started = True
st.session_state.start_time = time.time()
st.session_state.question_start_time = time.time()
st.rerun()
st.divider()
def display_quiz_interface():
"""Display the main quiz interface"""
quiz_manager = st.session_state.quiz_manager
current_question_idx = quiz_manager.current_question
question_data = quiz_manager.get_current_question()
if question_data is None:
st.session_state.quiz_completed = True
st.rerun()
return
# Header with progress and timer
col1, col2, col3 = st.columns([2, 1, 1])
with col1:
st.title(f"📝 {st.session_state.current_quiz}")
with col2:
progress = (current_question_idx + 1) / len(quiz_manager.questions)
st.metric("Progress", f"{current_question_idx + 1}/{len(quiz_manager.questions)}")
st.progress(progress)
with col3:
# Question timer
elapsed_time = time.time() - st.session_state.question_start_time
time_limit = quiz_manager.quiz_data['time_limit']
remaining_time = max(0, time_limit - elapsed_time)
if remaining_time > 0:
st.metric("Time Left", f"{int(remaining_time)}s")
# Auto-advance if time runs out
if remaining_time <= 0:
quiz_manager.submit_answer(None) # No answer selected
st.session_state.question_start_time = time.time()
st.rerun()
else:
st.metric("Time Left", "0s")
st.error("⏰ Time's up!")
st.divider()
# Question display
st.markdown(f"### Question {current_question_idx + 1}")
st.markdown(f"**{question_data['question']}**")
# Answer options
selected_answer = st.radio(
"Choose your answer:",
question_data['options'],
key=f"question_{current_question_idx}",
index=None
)
# Navigation buttons
col1, col2, col3 = st.columns([1, 1, 1])
with col1:
if current_question_idx > 0:
if st.button("⬅ Previous"):
quiz_manager.previous_question()
st.session_state.question_start_time = time.time()
st.rerun()
with col2:
if selected_answer is not None:
if st.button("Submit Answer", type="primary"):
quiz_manager.submit_answer(selected_answer)
st.session_state.question_start_time = time.time()
st.rerun()
else:
st.button("Submit Answer", disabled=True, help="Please select an answer")
with col3:
if current_question_idx < len(quiz_manager.questions) - 1:
if st.button("Skip ➡ "):
quiz_manager.submit_answer(None) # Skip question
st.session_state.question_start_time = time.time()
st.rerun()
else:
if st.button("Finish Quiz", type="secondary"):
if selected_answer is not None:
quiz_manager.submit_answer(selected_answer)
st.session_state.quiz_completed = True
st.rerun()
# Show current answers summary
st.divider()
st.markdown("### Your Answers So Far:")
answers_summary = quiz_manager.get_answers_summary()
for i, answer in enumerate(answers_summary):
if i <= current_question_idx:
status = "✅ " if answer is not None else "⏭ " if i < current_question_idx else "❓ "
answer_text = answer if answer else "Skipped" if i < current_question_idx else "Not
answered"
st.markdown(f"**Q{i+1}:** {status} {answer_text}")
def display_results():
"""Display quiz results"""
quiz_manager = st.session_state.quiz_manager
results = quiz_manager.get_results()
st.title("🎉 Quiz Complete!")
st.balloons()
# Overall score
st.metric(
label="Your Score",
value=f"{results['score']}/{results['total_questions']}",
delta=f"{results['percentage']:.1f}%"
)
# Time taken
total_time = time.time() - st.session_state.start_time
st.metric("Total Time", f"{int(total_time // 60)}m {int(total_time % 60)}s")
# Performance feedback
if results['percentage'] >= 80:
st.success("🌟 Excellent work! You've mastered this topic!")
elif results['percentage'] >= 60:
st.info("👍 Good job! You have a solid understanding.")
else:
st.warning("📚 Keep studying! You'll do better next time.")
st.divider()
# Detailed results
st.markdown("### Detailed Results:")
for i, (question_data, user_answer, is_correct) in enumerate(zip(
quiz_manager.questions,
results['user_answers'],
results['correct_answers']
)):
with st.expander(f"Question {i+1}: {'✅ ' if is_correct else '❌ '}"):
st.markdown(f"**{question_data['question']}**")
st.markdown(f"**Your answer:** {user_answer if user_answer else 'Not answered'}")
st.markdown(f"**Correct answer:** {question_data['correct_answer']}")
if not is_correct:
st.markdown(f"**Explanation:** {question_data.get('explanation', 'No explanation
available.')}")
col1, col2 = st.columns(2)
with col1:
if st.button("🔄 Retake Quiz", type="primary"):
# Restart the same quiz
quiz_info = QUIZ_SETS[st.session_state.current_quiz]
st.session_state.quiz_manager = QuizManager(quiz_info)
st.session_state.quiz_completed = False
st.session_state.start_time = time.time()
st.session_state.question_start_time = time.time()
st.rerun()
with col2:
if st.button("🏠 Back to Quiz Selection"):
reset_quiz()
st.rerun()
def main():
"""Main application function"""
st.set_page_config(
page_title="Quiz Application",
page_icon="🧠 ",
layout="wide",
initial_sidebar_state="collapsed"
)
initialize_session_state()
if not st.session_state.quiz_started:
display_quiz_selection()
elif st.session_state.quiz_completed:
display_results()
else:
display_quiz_interface()
if __name__ == "__main__":
main()
appdata.py
import streamlit as st
import time
from quiz_data import QUIZ_SETS
from quiz_manager import QuizManager
def initialize_session_state():
"""Initialize session state variables"""
if 'quiz_manager' not in st.session_state:
st.session_state.quiz_manager = None
if 'current_quiz' not in st.session_state:
st.session_state.current_quiz = None
if 'quiz_started' not in st.session_state:
st.session_state.quiz_started = False
if 'quiz_completed' not in st.session_state:
st.session_state.quiz_completed = False
if 'start_time' not in st.session_state:
st.session_state.start_time = None
if 'question_start_time' not in st.session_state:
st.session_state.question_start_time = None
def reset_quiz():
"""Reset quiz state"""
st.session_state.quiz_manager = None
st.session_state.current_quiz = None
st.session_state.quiz_started = False
st.session_state.quiz_completed = False
st.session_state.start_time = None
st.session_state.question_start_time = None
def display_quiz_selection():
"""Display quiz selection interface"""
st.title("🧠 Quiz Application")
st.markdown("### Welcome! Choose a quiz to get started:")
# Display available quizzes
quiz_options = list(QUIZ_SETS.keys())
for i, quiz_name in enumerate(quiz_options):
quiz_info = QUIZ_SETS[quiz_name]
col1, col2 = st.columns([3, 1])
with col1:
st.markdown(f"**{quiz_name}**")
st.markdown(f"📝 {len(quiz_info['questions'])} questions")
st.markdown(f"⏱ {quiz_info['time_limit']} seconds per question")
st.markdown(f"📊 Difficulty: {quiz_info['difficulty']}")
with col2:
if st.button(f"Start Quiz", key=f"start_{i}"):
st.session_state.current_quiz = quiz_name
st.session_state.quiz_manager = QuizManager(quiz_info)
st.session_state.quiz_started = True
st.session_state.start_time = time.time()
st.session_state.question_start_time = time.time()
st.rerun()
st.divider()
def display_quiz_interface():
"""Display the main quiz interface"""
quiz_manager = st.session_state.quiz_manager
current_question_idx = quiz_manager.current_question
question_data = quiz_manager.get_current_question()
if question_data is None:
st.session_state.quiz_completed = True
st.rerun()
return
# Header with progress and timer
col1, col2, col3 = st.columns([2, 1, 1])
with col1:
st.title(f"📝 {st.session_state.current_quiz}")
with col2:
progress = (current_question_idx + 1) / len(quiz_manager.questions)
st.metric("Progress", f"{current_question_idx + 1}/{len(quiz_manager.questions)}")
st.progress(progress)
with col3:
# Question timer
elapsed_time = time.time() - st.session_state.question_start_time
time_limit = quiz_manager.quiz_data['time_limit']
remaining_time = max(0, time_limit - elapsed_time)
if remaining_time > 0:
st.metric("Time Left", f"{int(remaining_time)}s")
# Auto-advance if time runs out
if remaining_time <= 0:
quiz_manager.submit_answer(None) # No answer selected
st.session_state.question_start_time = time.time()
st.rerun()
else:
st.metric("Time Left", "0s")
st.error("⏰ Time's up!")
st.divider()
# Question display
st.markdown(f"### Question {current_question_idx + 1}")
st.markdown(f"**{question_data['question']}**")
# Answer options
selected_answer = st.radio(
"Choose your answer:",
question_data['options'],
key=f"question_{current_question_idx}",
index=None
)
# Navigation buttons
col1, col2, col3 = st.columns([1, 1, 1])
with col1:
if current_question_idx > 0:
if st.button("⬅ Previous"):
quiz_manager.previous_question()
st.session_state.question_start_time = time.time()
st.rerun()
with col2:
if selected_answer is not None:
if st.button("Submit Answer", type="primary"):
quiz_manager.submit_answer(selected_answer)
st.session_state.question_start_time = time.time()
st.rerun()
else:
st.button("Submit Answer", disabled=True, help="Please select an answer")
with col3:
if current_question_idx < len(quiz_manager.questions) - 1:
if st.button("Skip ➡ "):
quiz_manager.submit_answer(None) # Skip question
st.session_state.question_start_time = time.time()
st.rerun()
else:
if st.button("Finish Quiz", type="secondary"):
if selected_answer is not None:
quiz_manager.submit_answer(selected_answer)
st.session_state.quiz_completed = True
st.rerun()
# Show current answers summary
st.divider()
st.markdown("### Your Answers So Far:")
answers_summary = quiz_manager.get_answers_summary()
for i, answer in enumerate(answers_summary):
if i <= current_question_idx:
status = "✅ " if answer is not None else "⏭ " if i < current_question_idx else "❓ "
answer_text = answer if answer else "Skipped" if i < current_question_idx else "Not
answered"
st.markdown(f"**Q{i+1}:** {status} {answer_text}")
def display_results():
"""Display quiz results"""
quiz_manager = st.session_state.quiz_manager
results = quiz_manager.get_results()
st.title("🎉 Quiz Complete!")
st.balloons()
# Overall score
st.metric(
label="Your Score",
value=f"{results['score']}/{results['total_questions']}",
delta=f"{results['percentage']:.1f}%"
)
# Time taken
total_time = time.time() - st.session_state.start_time
st.metric("Total Time", f"{int(total_time // 60)}m {int(total_time % 60)}s")
# Performance feedback
if results['percentage'] >= 80:
st.success("🌟 Excellent work! You've mastered this topic!")
elif results['percentage'] >= 60:
st.info("👍 Good job! You have a solid understanding.")
else:
st.warning("📚 Keep studying! You'll do better next time.")
st.divider()
# Detailed results
st.markdown("### Detailed Results:")
for i, (question_data, user_answer, is_correct) in enumerate(zip(
quiz_manager.questions,
results['user_answers'],
results['correct_answers']
)):
with st.expander(f"Question {i+1}: {'✅ ' if is_correct else '❌ '}"):
st.markdown(f"**{question_data['question']}**")
st.markdown(f"**Your answer:** {user_answer if user_answer else 'Not answered'}")
st.markdown(f"**Correct answer:** {question_data['correct_answer']}")
if not is_correct:
st.markdown(f"**Explanation:** {question_data.get('explanation', 'No explanation
available.')}")
# Action buttons
col1, col2 = st.columns(2)
with col1:
if st.button("🔄 Retake Quiz", type="primary"):
# Restart the same quiz
quiz_info = QUIZ_SETS[st.session_state.current_quiz]
st.session_state.quiz_manager = QuizManager(quiz_info)
st.session_state.quiz_completed = False
st.session_state.start_time = time.time()
st.session_state.question_start_time = time.time()
st.rerun()
with col2:
if st.button("🏠 Back to Quiz Selection"):
reset_quiz()
st.rerun()
def main():
"""Main application function"""
st.set_page_config(
page_title="Quiz Application",
page_icon="🧠 ",
layout="wide",
initial_sidebar_state="collapsed"
)
initialize_session_state()
# Handle quiz flow
if not st.session_state.quiz_started:
display_quiz_selection()
elif st.session_state.quiz_completed:
display_results()
else:
display_quiz_interface()
if __name__ == "__main__":
main()
SCREENSHOT OF THE PROJECT
Home Page
Next Page
Result Page
RESULT
Project Outcomes
1. Fully Functional Quiz Program
◦ The application successfully conducted quizzes in the console,
accepted answers, and calculated scores.
2. User Interaction
◦ The program provided immediate feedback, making the quiz engaging
for the user.
3. Flexibility
◦ The quiz could be easily updated with new questions and topics.
Skills Acquired
• Designing and structuring a Python application.
• Working with data structures effectively.
• Implementing user input validation and feedback mechanisms.
Overall Learning
This project helped me practice Python basics and control flow, improve problem-
solving, and gain confidence in building interactive applications.
CONCLUSION
The Python Programming Internship at CodeAlpha from 05/07/2025 to
05/08/2025 was a rewarding learning experience that strengthened my
programming skills.
Through structured learning and the development of a Quiz Application, I was able
to:
• Understand and apply Python fundamentals.
• Work with data structures, loops, and functions.
• Implement user interaction and feedback mechanisms in a program.
The Quiz Application demonstrated my ability to combine programming logic, data
handling, and modular design into a functional project. This hands-on experience
boosted my confidence to develop more advanced applications in the future.
I am thankful to CodeAlpha for providing this internship opportunity and to all
mentors and faculty members for their guidance and support.