Current Courses

This course focuses on both interesting examples of groups, as well as abstract groups. We covered subgroups, mappings between groups (eg isomorphisms and monomorphisms), cosets, and more.

Completed Courses

Introduction to important concepts like ideas on Absolute Knowledge, the existence of a universal Scientific Method used throughout history, and mechanisms of scientific change and progress.
Divide and Conquer, Dynamic and Linear Programming, Greedy Algorithms, Network Flows. The course had a focus on theoretical proofs around complexity and correctness. Included introduction to NP-Completeness.
Topics in biotechnology, recombinant RNA, and applications in health, agriculture and the environment.
An introduction to probabilistic models for machine learning. Probabilistic Graphical Models, sampling algorithms, variational inference, and other statistical methods to learn probability models on data.
Introduction to Deep Learning with PyTorch, taught by Professors Bo Wang and Jimmy Ba. Convolutional, recurrent, and transformer architectures among topics covered.
Working with Dr. Anna Goldenberg and Sana Tonekaboni, I worked on a Bayesian non-parametric model to learn states of time series data. I worked on finding and running baseline methods, and incorporating a normalizing flow architecture into our model.
This history and philosophy of science course covered major developments in the world of mathematics after 1700. Covered various tools developed during this period for exploration and measurement of celestial bodies, counting problems in number theory, and the introduction of new mathematical frameworks and objects that revolutionized the field.
This course covered a variety of topics including greek constructions of numbers, important ideas in modular arithmetic like Fermat's Little Theorem, and countability of sets.
Continuing research on Representation Learning for time series data.
"Fields, complex numbers, vector spaces over a field, linear transformations, matrix of a linear transformation, kernel, range, dimension theorem, isomorphisms, change of basis, eigenvalues, eigenvectors, diagonalizability, real and complex inner products, spectral theorem, adjoint/self-adjoint/normal linear operators, triangular form, nilpotent mappings, Jordan canonical form." Link
"At a time when headline-making AI breakthroughs are an almost daily occurrence, it might seem that we are on the cusp of living with artificial systems that match or exceed human intelligence. But there are longstanding philosophical challenges around the definition of intelligence, how we measure it, and what machines could really be capable of, that still need addressing. For example, could a machine ever be conscious, or creative, or have common-sense? How close are we to building human-level AI? What do we need to get us there? This course aims to explore these questions in greater depth." Link
"Introduction to basic concepts in computer vision. Extraction of image features at multiple scales. Robust estimation of model parameters. Multiview geometry and reconstruction. Image motion estimation and tracking. Object recognition. Topics in scene understanding as time permits." Link
"An introduction to methods for automated learning of relationships on the basis of empirical data. Classification and regression using nearest neighbour methods, decision trees, linear models, and neural networks. Clustering algorithms. Problems of overfitting and of assessing accuracy. Basics of reinforcement learning." Link
This is a course required for the CS degree at UofT. While I have no intention of doing any hardware related work in my career, it is quite cool to understand at the deepest possible level how computers actually work. We started with the chemical composition of simple MOSFET transistors, quickly abstracted to logic gates (AND, OR, XOR, etc), and then built our way up to memory devices and sequential circuits that utilized a clock. We later learned about the MIPS architecture and the full datapath for CPUs that use this architecture.
This course gave an introduction to important concepts in multivariable calculus. We learned about how different curves behave in 3D space, vector functions, line integrals, divergence, curl, and more. "Parametric equations and polar coordinates. Vectors, vector functions and space curves. Differential and integral calculus of functions of several variables. Line integrals and surface integrals and classic vector calculus theorems. Examples from life sciences and physical science applications." Link
"Theories and algorithms that capture (or approximate) some of the core elements of computational intelligence. Topics include: search; logical representations and reasoning, classical automated planning, representing and reasoning with uncertainty, learning, decision making (planning) under uncertainty. Assignments provide practical experience, in both theory and programming, of the core topics." Link
"Algorithm analysis: worst-case, average-case, and amortized complexity. Expected worst-case complexity, randomized quicksort and selection. Standard abstract data types, such as graphs, dictionaries, priority queues, and disjoint sets. A variety of data structures for implementing these abstract data types, such as balanced search trees, hashing, heaps, and disjoint forests. Design and comparison of data structures. Introduction to lower bounds." Link
"This course offers a concise introduction to ethics in computing, distilled from the ethical and social discussions carried on by today's academic and popular commentators. This course covers a wide range of topics within this area including the philosophical framework for analyzing computer ethics; the impact of computer technology on security, privacy and intellectual property, digital divide, and gender and racial discrimination; the ethical tensions with Artificial Intelligence around future of work and humanity, the emerging role of online social media over voice, inclusion, and democracy; and the environmental consequences of computing." Link
"Software techniques in a Unix-style environment, using scripting languages and a machine-oriented programming language (typically C). What goes on in the operating system when programs are executed. Core topics: creating and using software tools, pipes and filters, file processing, shell programming, processes, system calls, signals, basic network programming." Link
This is an unofficial course put on by the club I'm apart of (UofT AI). Here is the link to the syllabus, showing what we covered.
This introductory software design and development course taught the core concepts of good design: SOLID design principles, Clean Architecture, and common design patterns. During this course I learned the ropes of Java in order to work on a team of 7 people over the course of 2 months or so to design and develop a large program based on the provided specifications. We heavily utilized Git Version Control for this project.
This course builds on the foundation built in CSC165. We covered complete induction, structural induction, the principle of well ordering, and their applications in formal language theory (including finite state automaton), algorithmic complexity proofs, and recursive and iterative algorithm correctness proofs.
An introduction to linear algebra. Topics covered included systems of linear equations, matrix algebra, linear independence and dependence, linear transformations, determinants, eigenvalues, eigenvectors, eigenspaces, and diagonalization of matrices.
This proof based statistics course provides a mathematically rigorous introduction to probability. We covered various continuous and discrete distributions, learned about moments and moment generating functions for these distributions. We covered conditional and joint distributions, as well as conditional expectations, the Law of Total Expectation, and the Law of Total Variance. We also defined and proved the Law of Large Numbers and the Central Limit Theorem.
This is an introductory programming course in Python. We learned important principles of OOP, recursion, Unit Testing, and some good coding practices. We also used memory models to better understand the performance of some Abstract Data Types (Linked Lists, Stacks, Queues, etc) over others. We also learned various sorting algorithms.
This course introduces important concepts in predicate logic and proof writing, and applies it in various domains. Over the course of the semester I learned to write proofs for graph theory, algorithm runtime analysis, and number theory.
In this first year (single variable) proof based calculus course I learned how to write proofs for various domains within calculus. From epsilon delta proofs for limits, to proving the Fundamental Theorem of Calculus, and quite a lot in between.
This intro philosophy course asks many interesting questions about the nature of science. We learned about underdetermination, Hume's problem with induction, the importance of falsifiability (Karl Popper), and the structure of how scientific revolutions work (Thomas Kuhn).
This course is a combined introductory micro/macro economics course. We learned important concepts in how competitive markets function (at a basic level), and how external forces like government fiscal/monetary policy can impact it.
In this introductory linguistics course I learned various concepts in syntax, morphology, and phrase structure.