diff --git a/requirements.txt b/requirements.txt index 4d9ac87d..3c403296 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,4 @@ beautifulsoup4==4.11.1 lxml==4.9.3 requests==2.31.0 +tomli>=2.0.1; python_version < "3.11" diff --git a/scrapers/overrides.json b/scrapers/overrides.json deleted file mode 100644 index 0967ef42..00000000 --- a/scrapers/overrides.json +++ /dev/null @@ -1 +0,0 @@ -{} diff --git a/scrapers/overrides.toml.d/11.toml b/scrapers/overrides.toml.d/11.toml new file mode 100644 index 00000000..1bb5b3e1 --- /dev/null +++ b/scrapers/overrides.toml.d/11.toml @@ -0,0 +1,123 @@ +#:schema ./override-schema.json +# Course 11 special subjects (spring + iap 2025) +# https://dusp.mit.edu/subjects + +['11.S187'] +name = '(Un)Dead Geographies: The Afterlife of Urban Plans' +level = 'U' +lectureUnits = 3 +labUnits = 0 +preparationUnits = 9 +isVariableUnits = false +meets = '11.S945' +description = ''' +Every landscape represents an incomplete or interrupted plan that tells time and intention. Physical landscapes provide evidence of successful, failed and emergent development plans, but only the learned eye sees beyond the material culture of the street. “Death” offers a way to conceptualize the unseen, underground, the underneath, the liminal space between what we know, what is actual and what is yet to be. Linking social theory, geography, public policy and planning history, this course asks: How can planners and critical observers of the built environment begin to access the collection of meanings that script the movement, stasis and location of everyday users? In other words, how do we move beyond official maps, plans and histories to consider contested meanings of place as they are lived, exchanged and created. Through weekly examinations of first person documentary accounts including ethnography, historical fiction, autobiography, film and novels, students will analyze the social, political and geographic impact of various land development strategies in the U.S. and beyond. Displacement defines a major theme of this course -- students will examine: 1) How does this happen? 2) What have been subsequent local responses? And, 3) What are the lasting consequences of population dispersals? + +Informed by ethnographic method and archival immersion, this course will provide students with an interdisciplinary framework for identifying and describing the social impact of place-based change and capital movement. Students will develop a critical understanding of urban planning informed by resident-authored analysis across time and space.''' +terms = ["SP"] +sectionKinds = ['lecture'] +lectureRawSections = ['9-451/TR/0/9.30-11'] +lectureSections = [[[[63, 3], [93, 3]], '9-451']] +repeat = false +url = 'https://dusp.mit.edu/subjects' + +['11.S938'] +name = 'Landscape + Infrastructure for the Anthropocene' +level = 'G' +lectureUnits = 3 +labUnits = 0 +preparationUnits = 9 +isVariableUnits = false +description = '''This seminar investigates the need for new ways to think about landscape + infrastructure as the impacts of climate change alters the way we design and live in urbanized areas. We will focus on the planning, design, and implementation of real physical infrastructures (versus policies and other soft infrastructure levers). This class begins by acknowledging that humanity has entered into a new geologic epoch termed the Anthropocene, defined by anthropogenic impacts on the planet. Important questions about landscape + infrastructure for the Anthropocene will be explored: Where do planners/designers have agency to mitigate with newly imagined infrastructures for our changing cities and planetary health? At what scale is infrastructure an appropriate response to an environmental problem? How does one evaluate effectiveness and other trade-offs / costs / benefits of resiliency? Can one build consensus among key players / constituents around what is happening and how the designed response addresses needs? How do designers or planners gain political, financial, and social support to guarantee that build out and maintenance are implemented as envisioned?''' +terms = ['SP'] +repeat = false +url = 'https://dusp.mit.edu/subjects' + +['11.S939'] +name = 'Making Good on Baltimore as a Just City: Building Solutions For A Vacant Housing Crisis' +lectureUnits = 8 +labUnits = 0 +preparationUnits = 4 +isVariableUnits = false +description = ''' +Making Good on Baltimore as a Just City: Building Solutions For A Vacant Housing Crisis, as a practicum will have students immersed in two related projects: Develop a complex revitalization plan for a neglected city neighborhood using the case scenario, The Urban Plan (UP) and complete deliverables for a real client, Flight Blight Baltimore. The UP case scenario activities examine the nexus between development and urban planning. Students will go through an eight-stage development process model, and the material will cover idea conception, feasibility, planning, financing, market analysis, contract negotiation, construction, and asset management. Other topics discussed include but are not limited to market analysis, site acquisition, due diligence, zoning, entitlements, approvals, site planning, building design, construction, financing, leasing, and ongoing management and disposition. + +Working on a project for a client will allow students to solve a community challenge in real-time, pushing students to rethink the concept of stakeholder engagement in vacant housing underutilized infrastructure in Baltimore. Students will engage the idea of using citizen engineers to explore how the current demolish vacant building initiative by the City of Baltimore can integrate resident perspective in the city’s neighborhood stabilization initiatives. Part of this course will also explore how emerging vacant building assessment digital technology certification in the job market is linked to just banking and economies. The primary deliverables will center on data collection and analysis, and mapping. During the practicum experience, students will create their personal theory of practice, develop reflective practice strategies, and learn and deploy community engagement strategies.''' +terms = ['SP'] +repeat = false +url = 'https://dusp.mit.edu/subjects' + +['11.S940'] +name = 'Urban Economics Research Design' +level = 'G' +lectureUnits = 2 +labUnits = 0 +preparationUnits = 7 +isVariableUnits = false +description = '''This seminar provides an in-depth exploration of urban economics, examining six pivotal studies to reveal the nuances of research design in this domain. It delves into the genesis, development, analysis, substantiation, composition, presentation, expansion, publication, and application of research ideas in urban settings. Specifically designed for graduate students, particularly PhD candidates, in the Department of Urban Studies and Planning (DUSP) at MIT, the course maintains a limited enrollment of 20 students to foster a concentrated and interactive learning environment.''' +terms = ['SP'] +repeat = false +url = 'https://dusp.mit.edu/subjects' + +['11.S943'] +name = 'Bills and Billions: Policymaking and Planning in an New Era of Transformation in US Cities and States' +level = 'G' +lectureUnits = 3 +labUnits = 0 +preparationUnits = 9 +isVariableUnits = false +description = '''This course will engage with the theory and practice of planning and public policy making, examining how these two fields intersect and are evolving in the context of current national and global priorities including challenges to the dominant paradigms of neoliberalism and globalization as well as the passage of historic legislation in the U.S. in the past year. Classic literature in these fields will be augmented with readings and discussions around themes relevant to the current context such as race, ethnicity and equity, sustainability, labor, industrial strategy and inclusive growth, innovation and equity and geographic diversity. The course will bring in speakers across these topics in the form of policymakers and planners from cities and states across the US as well as in the federal government to learn how they are planning and implementing new policies, how this has changed if at all compared to the past, and how they are positioned to potentially access and invest the unprecedented new federal funding that will be coming to cities and states in the next 5-10 years. Students will write multiple policy memos on relevant topics throughout the course as well as be paired with partner cities/states to develop in-depth briefs for policymakers and community leaders on ‘ideas and issues to consider’ when applying for and implementing new federal programs and policies.''' +terms = ['SP'] +repeat = false +url = 'https://dusp.mit.edu/subjects' + +['11.S944'] +name = 'Green Finance: Mobilizing Capital to Transition to a Net-zero Economy' +level = 'G' +lectureUnits = 3 +labUnits = 0 +preparationUnits = 9 +isVariableUnits = false +description = '''Addressing climate change and the transition to a net zero economy will require large scale financing across multiple sectors and for a diverse set of projects. This course will provide graduate students with knowledge and skills specific to financing projects and creating financial institutions, polices and tools to accelerate the transition to a net zero economy while also advancing racial and economic equity. Topics covered will include: 1) the varied financing tools, products and services used in green finance; 2) how mission-driven financial intermediaries work and different intermediary models applicable to green finance; 3) the financing needs and issues of different economic/energy use sectors and the role of green finance in addressing them; and 4) explore how to address systemic racism in the finance system and advance racial and economic justice through green finance. Students will work on a client project to gain experience in designing proposals/solutions to address a green financing need or problem.''' +terms = ['SP'] +sectionKinds = ['lecture'] +lectureRawSections = ['9-451/TR/0/9.30-11'] +lectureSections = [[[[63, 3], [93, 3]], '9-451']] +repeat = false +url = 'https://dusp.mit.edu/subjects' + +['11.S945'] +name = '(Un)Dead Geographies: The Afterlife of Urban Plans' +level = 'G' +lectureUnits = 3 +labUnits = 0 +preparationUnits = 9 +isVariableUnits = false +meets = '11.S187' +description = ''' +Every landscape represents an incomplete or interrupted plan that tells time and intention. Physical landscapes provide evidence of successful, failed and emergent development plans, but only the learned eye sees beyond the material culture of the street. “Death” offers a way to conceptualize the unseen, underground, the underneath, the liminal space between what we know, what is actual and what is yet to be. Linking social theory, geography, public policy and planning history, this course asks: How can planners and critical observers of the built environment begin to access the collection of meanings that script the movement, stasis and location of everyday users? In other words, how do we move beyond official maps, plans and histories to consider contested meanings of place as they are lived, exchanged and created. Through weekly examinations of first person documentary accounts including ethnography, historical fiction, autobiography, film and novels, students will analyze the social, political and geographic impact of various land development strategies in the U.S. and beyond. Displacement defines a major theme of this course -- students will examine: 1) How does this happen? 2) What have been subsequent local responses? And, 3) What are the lasting consequences of population dispersals? + +Informed by ethnographic method and archival immersion, this course will provide students with an interdisciplinary framework for identifying and describing the social impact of place-based change and capital movement. Students will develop a critical understanding of urban planning informed by resident-authored analysis across time and space.''' +terms = ['SP'] +sectionKinds = ['lecture'] +lectureRawSections = ['9-451/TR/0/9.30-11'] +lectureSections = [[[[63, 3], [93, 3]], '9-451']] +repeat = false +url = 'https://dusp.mit.edu/subjects' + +['11.S950'] +name = 'Transportation Data & Applications' +level = 'G' +lectureUnits = 2 +labUnits = 0 +preparationUnits = 1 +isVariableUnits = false +description = ''' +The objective of this IAP course is to address the question: how in overall terms can we improve transportation systems – not just the technology, but the underlying human systems – using data? Subsidiary questions include: what can data do, and what can’t it do? What do practitioners need to know about the data now available: where does it come from? How is it generated? Who owns it? How can it be used for decision-making? What skills are needed? What do different segments of society – the public sector, the private sector, individual travelers – need to do? What are the challenges? What can be learned from history, and from other disciplines? + +This course is designed to slot in between existing course offerings that cover technical topics (like data analysis, modeling, visualization, and optimization) and equity/social-justice issues, providing students an opportunity to develop their own understanding of transportation data and its applications, so that they can give full consideration to the technical and social approaches covered in other classes. + +A single focus question will be presented as the basis for the course’s primary case study: how many transportation fatalities occurred in the U.S. in 2022? This will require not simple data crunching, but thoughtful “human” analysis using questions such as those above, since the point of the course is to demonstrate that there is no single, authoritative answer, and that students’ critical application of understanding the entire data lifecycle is key to approaching professional challenges.''' +terms = ['JA'] +repeat = false +url = 'https://dusp.mit.edu/subjects' diff --git a/scrapers/overrides.toml.d/2.toml b/scrapers/overrides.toml.d/2.toml new file mode 100644 index 00000000..5172473e --- /dev/null +++ b/scrapers/overrides.toml.d/2.toml @@ -0,0 +1,97 @@ +#:schema ./override-schema.json +# Course 2 special subjects +# https://meche.mit.edu/featured-classes + +['2.S981'] +name = 'Engineering of Nanoscale Materials' +level = 'G' +lectureUnits = 4 +labUnits = 0 +preparationUnits = 8 +isVariableUnits = false +prereq = 'Physics II (GIR) or permission of instructor (undergrad can take it upon approval)' +description = ''' +“Engineering of nanoscale materials” is designed for graduate students who want to pursueadvanced study in Micro/Nano technology. The course provides in-depth knowledge aboutlow dimensional materials (0D, 1D, and 2D) aswell as thin film 3D materials and theirapplications. Throughout the semester, methodsto fabricate nanoscale materials will betaught. Then students will go through fundamentallevels of i) thinfilm mechanics:stress/strain in films and thin film failureincluding delamination, cracking, and buckling, ii)phase equilibrium and diffusion in thin film solids, and iii) electronic/photonic properties ofnanoscale materials. With those knowledges, students will finally learn about the applicationsof such low dimensional materials. This isa 12-unit subject with two lectures (3 hour) andone recitation (1 hour)''' +url = 'https://meche.mit.edu/featured-classes' + +['2.S990'] +name = 'Fiber and Textile Engineering' +lectureUnits = 3 +labUnits = 0 +preparationUnits = 3 +isVariableUnits = false +description = ''' +The course will outline underlying physical and engineering principles that are used in engineering and manufacturing of fibers and textiles. These include fundamentals of polymer science, mechanical, thermal, and moisture transport engineering of fibrous media, visual color science and engineering, and friction and wear of polymer and composite fibrous materials. The students will practice analyzing how the material and structure of woven, knitted, and nonwoven textiles translates into their strength, stretchability, abrasion resistance, visible color and reflectance, passive cooling or heating, and anti-microbial and self-cleaning properties. + +Students will study and analyze real-life examples including different commercial and specialty textiles and will learn to use the life cycle assessment analysis to identify and prioritize the materials, processes, and designs that have the greatest potential for the reduction the environmental impact of the textile and garment production. They will also study examples of textile/garment-related patent applications and will practice drafting applications for their design ideas. + +Prereq (Grad): None/Prereq (Recommended Undergrad): 2.00, 2.001, 2.051''' +url = 'https://sboriskina.mit.edu/mit-courses-2020-2021' + +['2.S992'] +name = 'Teaching and Learning Mechanical Engineering with Generative AI' +level = 'G' +lectureUnits = 6 +labUnits = 0 +preparationUnits = 6 +isVariableUnits = false +prereq = 'an undergraduate degree in Mechanical Engineering; proficiency in Matlab or Python. (UG can particpate with permission of instructor)' +description = ''' +Large Language Model (LLM) capabilities and environments. Use of GPT-4 in Mechanical Engineering: development of effective system and interactive prompts; critical assessment of GPT-generated results. Application of GPT to teaching and learning: solid mechanics, heat transfer, dynamics, and mechanical design. GPT user models: teacher and student roles. GPT for coding. GPT as database. GPT for image processing. GPT for symbolic computation. GPT for natural language interfaces. GPT for problem-solving en- vironments. GPT as test student. GPT as tutor. Projects requiring Matlab or Python programming within GPT-4 API and Chat contexts. Enrollment limited to 15 students.''' +url = 'https://meche.mit.edu/featured-classes' + +['2.S994'] +name = 'Pappalardo Lab Apprentice' +level = 'U' +lectureUnits = 6 +labUnits = 0 +preparationUnits = 6 +isVariableUnits = false +prereq = '2.670, 2.007, and permission from the instructor' +description = ''' +The Pappalardo Apprentice series is designed to further develop fabrication skills, and provide mentor training and opportunities for peer-to-peer mentoring. Our objective is to push the boundaries of the lab experience, further developing your skills and the workspace as one of the safest, most productive, positive, and creative labs on campus. The program has two primary areas of emphasis: + +1. Peer mentoring. You will be an undergraduate lab assistant for 2.007. This will require signing-on to a regularly scheduled 2.007 lab section and an additional three-hour lab block, to assist 2.007 students with fabrication, including machining, hand-tool use, materials and supplies assistance, brainstorming, and general peer-to-peer support. + +2. Project work.Apprentices will participate in a series of seminars and clinics to refresh and further their fabrication knowledge and hands-on skills, including mill and lathe use, CAD/CAM, patternmaking, and casting (for senior project). Weekly seminars and practicum cover a variety of topics such as shop best practices, machine setup, chip formation, fixturing, material selection, and physical metallurgy. Junior apprentices will fabricate a Stirling engine and returning senior apprentices will focus on copper alloys, continuing to fabricate a replica of an 1899 anchor windlass from the Herreshoff Manufacturing Company, used on the famous New York 70 class sloops. Lab use for project work will be scheduled around 2.007 and requires apprentices to be largely self-directed. + +This is a limited enrollment course, and students are encouraged to apply by sending resume and portfolio to pappalardolab@mit.edu, by midnight, December 31, 2023, with subject line “Pappalardo Lab Apprentice Application”. We will respond by January 19, 2024.''' +url = 'https://meche.mit.edu/featured-classes' + +['2.S977'] +name = "Founder's Journey: Launching and Scaling Hardware Startups" +level = 'U' +lectureUnits = 4 +labUnits = 0 +preparationUnits = 8 +isVariableUnits = false +description = ''' +Find and activate your entrepreneurial energy. What road are you embarking upon in starting a company, and what obstacles threaten your success? What is the core problem you’re solving? What else and who else will you need? If you’re thinking about starting a company, this class will enable you to learn by doing. You will solve real-life hardware startup problems, with the help of mentors and leaders from the Boston tech ecosystem. Topics you’ll explore include: challenges related to intellectual property negotiations with large incumbents; servicing equipment out in the wild; finding product-market fit; resolving manufacturing and quality issues; scaling up; and reaching strong gross margins. You’ll hear from guest speakers who will share their experiences – successful and unsuccessful – traveling this rocky path with its moments of crisis and triumph. + +Although we will cover the basics of new venture creation, this is not a class about writing a business plan. Rather it’s about grasping the essence of the journey you’re about to undertake, and understanding the mindset required to be an entrepreneur developing a mechanical product. You will learn critical thinking skills that will help you assess the viability of a particular technology before you spend the years required to build a physical product. This class provides an exploration of leadership, innovation, and creativity as seen through the lens of a mechanical tech startup founder. You will gain broad insight into what’s required to turn a novel vision into a useful product.''' +url = 'https://meche.mit.edu/featured-classes' + +['2.S979'] +name = "Founder's Journey: Launching and Scaling Hardware Startups" +level = 'G' +lectureUnits = 4 +labUnits = 0 +preparationUnits = 8 +isVariableUnits = false +description = ''' +Find and activate your entrepreneurial energy. What road are you embarking upon in starting a company, and what obstacles threaten your success? What is the core problem you’re solving? What else and who else will you need? If you’re thinking about starting a company, this class will enable you to learn by doing. You will solve real-life hardware startup problems, with the help of mentors and leaders from the Boston tech ecosystem. Topics you’ll explore include: challenges related to intellectual property negotiations with large incumbents; servicing equipment out in the wild; finding product-market fit; resolving manufacturing and quality issues; scaling up; and reaching strong gross margins. You’ll hear from guest speakers who will share their experiences – successful and unsuccessful – traveling this rocky path with its moments of crisis and triumph. + +Although we will cover the basics of new venture creation, this is not a class about writing a business plan. Rather it’s about grasping the essence of the journey you’re about to undertake, and understanding the mindset required to be an entrepreneur developing a mechanical product. You will learn critical thinking skills that will help you assess the viability of a particular technology before you spend the years required to build a physical product. This class provides an exploration of leadership, innovation, and creativity as seen through the lens of a mechanical tech startup founder. You will gain broad insight into what’s required to turn a novel vision into a useful product.''' +url = 'https://meche.mit.edu/featured-classes' + +['2.S999'] +name = 'Science and Technologies for Climate' +level = 'G' +lectureUnits = 3 +labUnits = 0 +preparationUnits = 3 +isVariableUnits = false +prereq = 'None' +description = ''' +This seminar will explore challenges and opportunities of climate actions to decarbonize and reduce global temperature raise. We will welcome guest lecturers to share scientific challenges, recent discoveries, research translation, technology innovations, techno-economics and policy. Intended for undergraduate and graduate students who have interests to learn and get involved in energy and environment sustainability.''' +url = 'https://meche.mit.edu/featured-classes' diff --git a/scrapers/overrides.toml.d/6.toml b/scrapers/overrides.toml.d/6.toml new file mode 100644 index 00000000..f0901acd --- /dev/null +++ b/scrapers/overrides.toml.d/6.toml @@ -0,0 +1,361 @@ +#:schema ./override-schema.json +# Course 6 special subjects (IAP) +# https://www.eecs.mit.edu/academics/iap-offerings/iap-2025/ + +['6.S088'] +name = 'Algorithmic Problem Solving' +level = 'U' +lectureUnits = 3 +labUnits = 0 +preparationUnits = 3 +isVariableUnits = false +description = ''' +Each week, we will cover algorithmic techniques and practice coding challenges, with an emphasis on problem-solving. Class format will be a lecture followed by problem-solving sessions. Days will alternate between beginner and advanced lectures on the same topic. Beginner lectures are designed for students without any prior algorithmic knowledge, while advanced lectures are designed for students who are confident in the beginner lecture material. Problem-solving sessions will contain both beginner and advanced problems, designed for students of all levels. Lectures and problem sessions will cover ideas and skills not practiced in Course 6 classes such as 6.1010 and 6.1210.''' +url = 'https://www.eecs.mit.edu/academics/iap-offerings/iap-2025/' + +['6.S092'] +name = 'The Art and Science of PCB Design' +level = 'U' +lectureUnits = 3 +labUnits = 0 +preparationUnits = 3 +isVariableUnits = false +description = ''' +The Art and Science of PCB Design is an introductory course into the fundamental aspects of developing electronic systems on printed circuit boards (PCBs). This course will heavily focus on providing hands-on labs with electronic design tools actively used in industry towards designing a primary course project resulting with the physical assembly of a PCB-based device. Students will gain experience in designing systems, conducting SPICE simulations, drawing schematics, and creating a PCB layout. Complexed topics in electrical and PCB design will be explored, including from guest speakers and through advanced simulations. This class is intended for students of all skill-levels but at a minimum requires a basic understanding of circuit analysis, which will be applied towards learning how to implement real devices. + +Prerequisites: Understanding of basic circuit analysis provided in 6.200, 2.678, or equivalent. Prospective students who have not taken 6.200, 2.678, or an equivalent class will be required to pass a staff-created open-book pretest, prior to the start of IAP, that covers required circuit knowledge for the course. More information can be found at the course website: pcb.mit.edu''' +url = 'https://pcb.mit.edu/' + +['6.S093'] +name = 'How to ship almost anything with AI' +level = 'U' +lectureUnits = 3 +labUnits = 0 +preparationUnits = 3 +isVariableUnits = false +description = ''' +The rise of large language models has transformed software development and prototyping. Now, a single engineer can build and launch a full-scale app in hours or days. Mastering rapid prototyping is crucial, empowering students to become 10x developers. This course teaches AI-driven rapid prototyping, equipping students to design and ship apps quickly. You’ll gain hands-on experience building and launching AI-first web apps using the latest AI-driven dev tools. We cover full-stack essentials, from creating a simple next.js page to deploying a genAI model to the cloud. The course includes 6 lectures, 3 mini-projects, and a final project. + +Due to the limited availability, students need to apply through a form at iap.sundai.club.''' +url = 'https://www.eecs.mit.edu/academics/iap-offerings/iap-2025/' + +['6.S094'] +name = 'The Architecture of The Mind: Computational Psychology' +level = 'U' +description = ''' +This course provides a rigorous introduction to psychological theories in engineering terms, and provides hands-on machine learning practices. Designed for students interested in learning how psychological processes and social cognition can be modeled computationally, and how these models can be used as tools to better understand ourselves and others, and in the future, transform our understanding of human experience. This course is one of the first psychology courses, designed for engineers interested in understanding the human condition, while using machine learning as a tool to “navigate” the human mind. The covered topics include: applying machine learning to model complex cognitive processes of social cognition; using probabilistic programming and Bayesian machine learning to simulate and predict human behavior; using mechanistic computational models to predict and modulate brain signals in response to stimuli.''' +url = 'https://www.eecs.mit.edu/academics/iap-offerings/iap-2025/' + +['6.S095'] +name = 'Probability Problem Solving' +level = 'U' +lectureUnits = 3 +labUnits = 0 +preparationUnits = 3 +isVariableUnits = false +description = ''' +6.S095 is a survey of problem solving techniques in probability, random variables, and stochastic processes. It picks up from a standard introduction to the subject and goes towards more advanced techniques. The first half of 6.S095 reviews standard concepts in probability while introducing much more involved applications of these topics, while the second half will introduce adjacent areas of exploration. The aim of this class is to develop problem solving ability and mathematical maturity that will enable students to succeed in advanced and graduate-level EECS classes that involve probability such as 6.1220 (6.046), 6.7710 (6.262), 6.7720 (6.265), 6.7800 (6.437), 6.7810 (6.438), and 6.5220 (6.856). + +The class runs in two tracks: a standard track that has greater focus on problem solving in fundamental probability concepts, and an advanced track that solidifies problem solving skills in more advanced probability techniques. Each track will have 7 lectures, each with a corresponding recitation and problem set.''' +url = 'https://www.eecs.mit.edu/academics/iap-offerings/iap-2025/' + +['6.S097'] +name = 'Ultrafast Photonics' +level = 'U' +lectureUnits = 3 +labUnits = 0 +preparationUnits = 3 +isVariableUnits = false +description = ''' +Knowledge of the fundamentals of ultrafast photonics is becoming increasingly valuable as ultrafast optical sources become more ubiquitous with an ever-growing number of applications. Relatively compact ultrafast optical sources with pulse durations ranging from nanoseconds down to femtoseconds are now commercially available across a broad range of wavelengths. Current applications are wide-ranging and include biological imaging, quantum optical technologies, chemical sensing, and precision measurements of time and distance among many others. During this IAP course, we will cover the essentials of ultrafast photonics. Topics will include: (1) the science of ultrafast laser pulses and their interaction with matter; (2) the technology to generate and manipulate ultrafast pulses of light; and (3) an overview of select applications of ultrafast photonics systems. This course will serve as a foundation for those interested in experimental and/or theoretical work involving ultrafast optical systems. Some basic knowledge of Fourier analysis, differential equations, and electromagnetic waves is assumed.''' +url = 'https://www.eecs.mit.edu/academics/iap-offerings/iap-2025/' + +['6.S099'] +name = 'Machine Learning Challenge for Biomedical Discoveries' +level = 'U' +lectureUnits = 3 +labUnits = 0 +preparationUnits = 3 +isVariableUnits = false +description = ''' +Scientists are increasingly turning to machine learning challenges, or competitions that require participants to build and evaluate machine learning models over a given period of time to solve a problem. The Eric and Wendy Schmidt Center at the Broad Institute of MIT and Harvard organizes global machine learning challenges to leverage machine learning for solving key biomedical problems and to help prioritize what experiments biologists could run next – creating the next steps in disease diagnostics and treatment. + +In this class, students will participate in the Schmidt Center’s machine learning challenge and apply their machine learning skills to help solve a key biomedical problem. + +Students will learn the basics of genomics and data analysis needed to succeed in the challenge. Top-scoring submissions will be validated in a lab at the Broad Institute, and winners will be eligible for monetary prizes and paper authorship.''' +url = 'https://www.eecs.mit.edu/academics/iap-offerings/iap-2025/' + + +['6.S183'] +name = 'A Practical Introduction to Diffusion Models -- From Algorithms to Implementation' +level = 'U' +lectureUnits = 3 +labUnits = 0 +preparationUnits = 3 +isVariableUnits = false +description = ''' +Diffusion models are a class of generative models that iteratively refine noise into structured data. Although initially developed for image generation, they have been successful in many other domains such as robotics and molecular design. In this course we will introduce the basics of diffusion models and demonstrate how to build them from the ground up, culminating in a simple but powerful library to train diffusion models on custom data, as well as using state-of-the-art pretrained models for a variety of downstream tasks. + +This is an introductory course targeted at students and researchers who wish to learn about diffusion models and explore their applications to new domains, or those currently working with diffusion models and want to understand how to effectively modify and adapt them for their specific applications. ''' +url = 'https://www.eecs.mit.edu/academics/iap-offerings/iap-2025/' + +['6.S184'] +name = 'Generative AI with Stochastic Differential Equations: Theory and Practice of Flow and Diffusion Models' +level = 'U' +lectureUnits = 3 +labUnits = 0 +preparationUnits = 3 +isVariableUnits = false +description = ''' +Diffusion and flow models are the cutting edge generative AI methods for images, videos, and many other data types. This course offers a comprehensive introduction for students and researchers seeking a deeper mathematical understanding of these models. Lectures will teach the core mathematical concepts necessary to understand diffusion models, including stochastic differential equations and the Fokker-Planck equation, and will provide a step-by-step explanation of the components of each model. Labs will accompany each lecture allowing students to gain practical, hands-on experience with the concepts learned in a guided manner. At the end of the class, students will have built a latent diffusion model from scratch – and along the way, will have gained hands-on experience with the mathematical toolbox of stochastic analysis that is useful in many other fields. This course is ideal for those who want to explore the frontiers of generative AI through a mix of theory and practice. We recommend some prior experience with probability theory and deep learning.''' +url = 'https://diffusion.csail.mit.edu/' + +['6.S975'] +name = 'Generative AI with Stochastic Differential Equations: Theory and Practice of Flow and Diffusion Models' +level = 'G' +lectureUnits = 3 +labUnits = 0 +preparationUnits = 3 +isVariableUnits = false +description = ''' +Diffusion and flow models are the cutting edge generative AI methods for images, videos, and many other data types. This course offers a comprehensive introduction for students and researchers seeking a deeper mathematical understanding of these models. Lectures will teach the core mathematical concepts necessary to understand diffusion models, including stochastic differential equations and the Fokker-Planck equation, and will provide a step-by-step explanation of the components of each model. Labs will accompany each lecture allowing students to gain practical, hands-on experience with the concepts learned in a guided manner. At the end of the class, students will have built a latent diffusion model from scratch – and along the way, will have gained hands-on experience with the mathematical toolbox of stochastic analysis that is useful in many other fields. This course is ideal for those who want to explore the frontiers of generative AI through a mix of theory and practice. We recommend some prior experience with probability theory and deep learning.''' +url = 'https://diffusion.csail.mit.edu/' + +['6.S186'] +name = 'Modern Robot Learning: Hands-on Tutorial' +level = 'U' +lectureUnits = 3 +labUnits = 0 +preparationUnits = 3 +isVariableUnits = false +description = ''' +This course provides a comprehensive, hands-on introduction to training robots using state-of-the-art machine learning techniques. Key topics include data collection, machine learning methods such as Action Chunking Transformer (ACT) and/or Diffusion Policy, environment modeling in the MuJoCo simulator, and Real2Sim/Sim2Real techniques. Students will teleoperate a simulated robot in augmented reality via the Apple Vision Pro, and train a machine learning model to autonomously complete a task of their own design. The course culminates in a competition, judged on both robot performance and creativity of the chosen task. A solid working knowledge of Python and a basic understanding of machine learning are prerequisites. The course focuses entirely on the project, with no additional assignments.''' +url = 'https://www.eecs.mit.edu/academics/iap-offerings/iap-2025/' + +['6.S191'] +name = 'Introduction to Deep Learning' +level = 'U' +lectureUnits = 3 +labUnits = 0 +preparationUnits = 3 +isVariableUnits = false +description = ''' +Introductory course on deep learning methods with applications to computer vision, natural language processing, biology, and more! Students will gain foundational knowledge of deep learning algorithm and get practical experience in building neural networks in TensorFlow and PyTorch. Course concludes with a project proposal competition with feedback from staff and a panel of industry sponsors.''' +url = 'https://www.eecs.mit.edu/academics/iap-offerings/iap-2025/' + +['6.S192'] +name = 'Adventures in Embedded Machine Learning' +level = 'U' +lectureUnits = 3 +labUnits = 0 +preparationUnits = 3 +isVariableUnits = false +description = ''' +Enrollment: Limited: Advance sign-up wit Prof. Leeb required +Sign-up: by IAP Pre-Registration Deadline + +Attendance: Participants must attend all sessions every day, January 21,22, 23 9 AM to 5 PM +Prereq: Short readings before each seminar day. + +A 3-day in-depth course focused on exploring the use of software tools, microcontrollers and communication concepts such as Bluetooth® Low Energy to create and implement Machine Learning projects. We will be using Infineon PSoC™ 6 development kits (provided by Infineon). + +The first two days will focus on lectures and instructor-led labs. The last day will consist of student teams creating a Machine Learning project. + +Infineon Imagimob Studio and ModusToolbox™ IDE and its features will be explored and explained. Students will receive in-depth instruction and will complete exercises related to: + +• Imagimob Studio and ModusToolbox™IDEs +• Using the Bluetooth® LE and WiFi radios +• The Infineon CY8CKIT-062S2-AIPSoC™Architecture and development environment +• The kit contains multiple sensors on board such as RADAR, IMU, barometric air pressure, other sensors can be interfaced via the QWICC interface. + +Some programming experience is required. Experience with C programming is helpful but not required. + +PERMISSION OF INSTRUCTOR IS REQUIRED TO REGISTER. Email sbleeb@mit.edu for permission before registering. Registering for this course is a FIRM commitment to attend; others will be turned away to make room for you. + +Sponsor(s): Electrical Engineering and Computer Science +Contact: Steven Leeb, sbleeb@mit.edu''' +url = 'https://www.eecs.mit.edu/academics/iap-offerings/iap-2025/' + +['6.S917'] +name = 'Tube and Early Transistor Circuits' +level = 'U' +lectureUnits = 3 +labUnits = 0 +preparationUnits = 3 +isVariableUnits = false +description = ''' +This class will study vacuum tubes, early transistors, and other historically adjacent developments, as well as build some circuits using them. Labs will involve building a FM crystal receiver, a audio tube amplifier (that you can keep provided it passes safety inspection), and several germanium transistor circuits. There will be short psets on theory and practice. Prerequisite are be 6.2000 (6.002). Enrollment may be limited.''' +url = 'https://www.eecs.mit.edu/academics/iap-offerings/iap-2025/' + +['6.S918'] +name = 'Optical Computing in the Era of AI' +level = 'U' +lectureUnits = 3 +labUnits = 0 +preparationUnits = 3 +isVariableUnits = false +description = ''' +We live in an age of big machine learning models, where modern deep neural networks comprise hundreds of billions of parameters. As these models continue to scale, the ever-growing requirements on energy efficiency and computation speed have sparked a new industry in designing specialized computing hardware optimized for neural networks. + +In this constantly evolving landscape of technology, light-based computing, commonly referred to as "optical" or "photonic" computing, is a revolutionary paradigm shift promising higher computing frequency and less energy consumption than traditional digital computing. This course aims to introduce students to this exciting and rapidly growing field, focusing particularly on: + +1. How can light be used for computing, and why should we build optical computing hardware? + +2. What are the fundamental devices used for photonic computing? + +3. What are the current and emerging research topics at the intersection of optics and AI hardware? + +This course will integrate lectures, lab tours, demos, and a final team presentation on new research areas in photonic computing.''' +url = 'https://www.eecs.mit.edu/academics/iap-offerings/iap-2025/' + +# Course 6 special subjects (spring) +# https://www.eecs.mit.edu/academics/subject-updates/special-subjects-spring-2025/ + +['6.S041'] +name = 'Algorithmic and Human Decision-Making' +level = 'U' +lectureUnits = 3 +labUnits = 0 +preparationUnits = 9 +isVariableUnits = false +prereqs = '(6.3700 or 6.3800 or 18.05 or 18.600 or 14.300 or 14.32) and (6.3900 or 6.C01)' +description = ''' +Introduces students to problems at the intersection of algorithmic and human decision-making, focusing on problem domains such as criminal justice, the health care system, labor market, and others. Introduces the foundations in computer science, economics and psychology needed to integrate our behavioral understanding of people into machine learning. Topics include supervised learning, decision-making under uncertainty, behavioral economics, recommendation systems, and fairness/discrimination. Guest lectures by experts designing live algorithms in these domains, and culminates in student projects.''' +url = 'https://www.eecs.mit.edu/academics/subject-updates/special-subjects-spring-2025/' + +['6.S057'] +name = 'Verified Software Engineering' +level = 'U' +lectureUnits = 4 +labUnits = 0 +preparationUnits = 8 +isVariableUnits = false +prereqs = '6.1010 and 6.1200' +description = ''' +Practical application of formal-verification tools to specify and verify the correctness of software. Foundational concepts include pre- and postconditions, loop invariants, ghost state, data abstraction, and specification techniques. Lab assignments give hands-on experience in specifying and verifying a variety of software components.''' +url = 'https://www.eecs.mit.edu/academics/subject-updates/special-subjects-spring-2025/' + +['6.S077'] +name = 'Life Science & Semiconductor' +level = 'U' +lectureUnits = 3 +labUnits = 0 +preparationUnits = 3 +isVariableUnits = false +prereqs = '6.2000' +description = ''' +In this course we review the important role of semiconductor devices in patient monitoring and point of care. This includes technologies such as electrochemical, ultrasonic, magnetic, optical, and RF sensing modalities. We cover some of the basics of each device as well as physics and biology of device/human interaction. + +More information and QR code can be found here: http://bit.ly/lifesciencesemiconductormitcourse''' +url = 'https://www.eecs.mit.edu/academics/subject-updates/special-subjects-spring-2025/' + +['6.S897'] +name = 'Life Science & Semiconductor' +level = 'G' +lectureUnits = 3 +labUnits = 0 +preparationUnits = 3 +isVariableUnits = false +prereqs = '6.2000' +description = ''' +In this course we review the important role of semiconductor devices in patient monitoring and point of care. This includes technologies such as electrochemical, ultrasonic, magnetic, optical, and RF sensing modalities. We cover some of the basics of each device as well as physics and biology of device/human interaction. + +More information and QR code can be found here: http://bit.ly/lifesciencesemiconductormitcourse''' +url = 'https://www.eecs.mit.edu/academics/subject-updates/special-subjects-spring-2025/' + +['6.S899'] +name = 'Learning of Time Series with Interventions' +level = 'G' +lectureUnits = 3 +labUnits = 0 +preparationUnits = 9 +isVariableUnits = false +prereqs = '(6.3700 or 6.3800) and (6.3720 or permission of instructor)' +description = ''' +This course is different from most existing courses as it focuses on time series analysis (with and without interventions). The closest related courses are either in control (linear systems) or machine learning (graduate machine learning). But neither of these courses do proper coverage of time series analysis.''' +url = 'https://www.eecs.mit.edu/academics/subject-updates/special-subjects-spring-2025/' + +['6.S950'] +name = 'Global Business of Quantum Computing' +level = 'G' +lectureUnits = 2 +labUnits = 0 +preparationUnits = 1 +isVariableUnits = false +prereqs = '' +description = ''' +Quantum Computing (QC) offers the potential to solve certain types of problems for human kind; problems that are today, prohibitive for traditional computing. It could lead to exciting breakthroughs in areas such as improved efficiency in logistics chains, increased battery performance for cars or helping to find new pharmaceutical treatments. But what is hype and what is realistic given the development of the field in recent years and its current trajectory? What role do scientists, engineers, managers, entrepreneurs, policy makers and other stakeholders play? This course provides multiple viewpoints including academic, industry and governmental. You will hear from leading MIT faculty and pioneering practitioners in the field. We will demystify topics such as trapped ion and superconducting qubits.''' +url = 'https://www.eecs.mit.edu/academics/subject-updates/special-subjects-spring-2025/' + +['6.S954'] +name = 'Computer Vision and Planetary Health' +level = 'G' +lectureUnits = 3 +labUnits = 0 +preparationUnits = 9 +isVariableUnits = false +prereqs = '6.8300 or 6.7960 or permission of instructor' +description = ''' +CV and Deep Learning are the closest, but there are several other AI courses that are relevant. This is the first course offering to focus on application-driven innovation in computer vision motivated by open, impactful challenges in planetary health, including biodiversity loss, ecosystem instability, carbon sequestration, wildlife conservation, prioritization of land to protect, and more generally the intersection of CV and the nature-based SDGs.''' +url = 'https://www.eecs.mit.edu/academics/subject-updates/special-subjects-spring-2025/' + +['6.S963'] +name = 'Beyond Models – Applying Data Science/AI Effectively' +level = 'G' +lectureUnits = 2 +labUnits = 1 +preparationUnits = 3 +isVariableUnits = false +prereqs = '6.3900 or similar study of machine learning and 15.085 or 15.077 or 18.05 similar study of statistics.' +description = ''' +Comprehensively presents the breadth of considerations needed to apply data science and data-driven AI techniques successfully. Students will learn the landscape of challenges, a unique rubric for systematically evaluating them, and then see the rubric’s application to a variety of case studies. Through a combination of readings including the 2022 book, (Data Science in Context, Foundations, Challenges, and Opportunities), lectures, and in-class discussions, students will delve deeply into seven sets of implementation- and requirements-oriented challenges: from data gathering to meeting ethical, legal, and societal needs. Students will present in class and write a short (5-10 pages but carefully crafted) paper individually or in groups of two undertaking a careful analysis of a complex application of data science/ML, aiming at post-class publication on a web-site. The instructor will advise the students on their projects during small, custom-scheduled recitation sections. This class will provide students with additional skills needed to perform/lead successful data science/ML efforts (as data scientists, engineers, or product managers), and it will provide a better understanding of future opportunities in research, business, and public policy. Enrollment is limited and class participation is required.''' +url = 'https://www.eecs.mit.edu/academics/subject-updates/special-subjects-spring-2025/' + +['6.S966'] +name = 'Symmetry and its Application to Machine Learning and Scientific Computing' +level = 'G' +lectureUnits = 3 +labUnits = 0 +preparationUnits = 9 +isVariableUnits = false +prereqs = '18.06 or 18.061, 6.100A, 6.1210' +description = ''' +Introduces the use of group representation theory to construct symmetry-preserving algorithms for machine learning. Emphases the connection between topics in math and physics and machine learning. Students will implement core mathematical concepts in code to build algorithms that can operate on graphs, geometry, scientific data, and other structured data to preserve the symmetries of these domains. Topics covered include: Euclidean and permutation groups, group representations: regular, reducible, and irreducible, tensor products, statistics and sampling of group representation vector spaces, and symmetry-breaking mechanisms.''' +url = 'https://www.eecs.mit.edu/academics/subject-updates/special-subjects-spring-2025/' + +['6.S982'] +name = 'Diffusion Models: From Theory to Practice' +level = 'G' +lectureUnits = 3 +labUnits = 0 +preparationUnits = 9 +isVariableUnits = false +prereqs = 'machine learning (6.7900 or similar), probability (6.3700, 18.600 or similar), linear algebra (18.06, 6.C06 or similar), and calculus (18.02 or similar)' +description = ''' +Deep generative models have found a plethora of applications in Machine Learning, and various other scientific and applied fields, used for sampling complex, high-dimensional distributions and leveraged in downstream analyses involving such distributions. This course focuses on the foundations, applications and frontier challenges of diffusion-based generative models, which over the recent years have become the prominent approach to generative modeling across a wide range of data modalities and form the backbone of industry-scale systems like AlphaFold 3, DALL-E, and Stable Diffusion. Topics include mathematical aspects of diffusion-based models (including forward and inverse diffusion processes, Fokker-Planck equations, computational and statistical complexity aspects of score estimation), the use of diffusion models in downstream analyses tasks (such as inverse problems), extensions of diffusion models (including rectified flows, stochastic interpolants, and Schrödinger bridges), and frontier challenges motivated by practical considerations (including consistency models, guidance, training with noisy data).''' +url = 'https://www.eecs.mit.edu/academics/subject-updates/special-subjects-spring-2025/' + +['6.S987'] +name = 'Physics and Engineering of Superconducting Qubits' +level = 'G' +lectureUnits = 3 +labUnits = 0 +preparationUnits = 9 +isVariableUnits = false +prereqs = '6.728 or 8.06 or equivalent' +description = ''' +This course introduces the physics and engineering of superconducting qubits for quantum information processing for graduate and upper-level undergraduate students. Topics will include (1) an introduction to superconductivity and Hamiltonian engineering; (2) superconducting qubits, cavities, and microwave cavity quantum electrodynamics; (3) the theory and microwave engineering of qubit control and measurement; (4) noise, decoherence, dynamical error''' +url = 'https://www.eecs.mit.edu/academics/subject-updates/special-subjects-spring-2025/' + +['6.S988'] +name = 'Mathematical Statistics: A Non-Asymptotic Approach' +level = 'G' +lectureUnits = 3 +labUnits = 0 +preparationUnits = 9 +isVariableUnits = false +prereqs = '6.7700 and 18.06 and 18.6501, or permission on instructor' +description = ''' +Introduces students to modern non-asymptotic statistical analysis. Topics include high-dimensional models, nonparametric regression, covariance estimation, principal component analysis, oracle inequalities, prediction and margin analysis for classification. Develops a rigorous probabilistic toolkit, including tail bounds and a basic theory of empirical processes.''' +meets = '18.656, IDS.160, 9.521' +url = 'https://www.eecs.mit.edu/academics/subject-updates/special-subjects-spring-2025/' diff --git a/scrapers/overrides.toml.d/override-schema.json b/scrapers/overrides.toml.d/override-schema.json new file mode 100644 index 00000000..1f0cb6dd --- /dev/null +++ b/scrapers/overrides.toml.d/override-schema.json @@ -0,0 +1,237 @@ +{ + "$schema": "https://json-schema.org/draft-07/schema", + "title": "Class Override", + "description": "Overrides for classes in the scraper", + "type": "object", + "additionalProperties": { + "type": "object", + "additionalProperties": false, + "properties": { + "number": { + "type": "string", + "description": "Class number, e.g. \"6.3900\"" + }, + "oldNumber": { + "type": "string", + "description": "Old class number, e.g. \"6.036\"" + }, + "course": { + "type": "string", + "description": "Course number, e.g. \"6\"" + }, + "subject": { + "type": "string", + "description": "Subject number without course, e.g. \"3900\"" + }, + "tba": { + "type": "boolean", + "description": "True if some section is not scheduled yet" + }, + "sectionKinds": { + "type": "array", + "uniqueItems": true, + "description": "Kinds of sections (among LECTURE, RECITATION, LAB, DESIGN) that exist", + "items": { + "type": "string", + "enum": ["lecture", "recitation", "lab", "design"] + } + }, + "lectureSections": { + "type": "array", + "description": "Lecture timeslots and rooms", + "items": { "$ref": "#/$defs/rawSection" } + }, + "recitationSections": { + "type": "array", + "description": "Recitation timeslots and rooms", + "items": { "$ref": "#/$defs/rawSection" } + }, + "labSections": { + "type": "array", + "description": "Lab timeslots and rooms", + "items": { "$ref": "#/$defs/rawSection" } + }, + "designSections": { + "type": "array", + "description": "Design timeslots and rooms", + "items": { "$ref": "#/$defs/rawSection" } + }, + "lectureRawSections": { + "type": "array", + "description": "Raw lecture times, e.g. T9.301-11 or TR1,F2", + "items": { "type": "string" } + }, + "recitationRawSections": { + "type": "array", + "description": "Raw recitation times, e.g. T9.301-11 or TR1,F2 ", + "items": { "type": "string" } + }, + "labRawSections": { + "type": "array", + "description": "Raw lab times, e.g. T9.301-11 or TR1,F2", + "items": { "type": "string" } + }, + "designRawSections": { + "type": "array", + "description": "Raw design times, e.g. T9.301-11 or TR1,F2", + "items": { "type": "string" } + }, + "hassH": { + "type": "boolean", + "description": "True if HASS-H" + }, + "hassA": { + "type": "boolean", + "description": "True if HASS-A" + }, + "hassS": { + "type": "boolean", + "description": "True if HASS-S" + }, + "hassE": { + "type": "boolean", + "description": "True if HASS-E" + }, + "cih": { + "type": "boolean", + "description": "True if CI-H" + }, + "cihw": { + "type": "boolean", + "description": "True if CI-HW" + }, + "rest": { + "type": "boolean", + "description": "True if REST" + }, + "lab": { + "type": "boolean", + "description": "True if institute lab" + }, + "partLab": { + "type": "boolean", + "description": "True if partial institute lab" + }, + "lectureUnits": { + "type": "number", + "description": "Lecture or recitation units" + }, + "labUnits": { + "type": "number", + "description": "Lab or field work units" + }, + "preparationUnits": { + "type": "number", + "description": "Outside class units" + }, + "isVariableUnits": { + "type": "boolean", + "description": "Does this class have an arranged number of units?\nIf true, lectureUnits, labUnits, preparationUnits are set to zero." + }, + "level": { + "type": "string", + "description": "Level: \"U\" undergrad, \"G\" grad", + "enum": ["U", "G"] + }, + "same": { + "type": "string", + "description": "Comma-separated list of classes with same number, e.g. \"21A.103, WGS.225\"" + }, + "meets": { + "type": "string", + "description": "Comma-separated list of classes it meets with" + }, + "terms": { + "type": "array", + "description": "Terms class is offered", + "items": { + "type": "string", + "enum": ["FA", "JA", "SP", "SU"] + } + }, + "prereqs": { + "type": "string", + "description": "Prereqs, no specific format (but usually contains class numbers)" + }, + "description": { + "type": "string", + "description": "Description (~paragraph that appears in catalog)" + }, + "name": { + "type": "string", + "description": "Name of class e.g. \"Algebra I\"" + }, + "inCharge": { + "type": "string", + "description": "(Person) in-charge, e.g. \"Alyssa Hacker\"" + }, + "virtualStatus": { + "type": "boolean", + "description": "True if meeting virtually" + }, + "nonext": { + "type": "boolean", + "description": "True if NOT offered next year" + }, + "repeat": { + "type": "boolean", + "description": "True if class can be repeated for credit" + }, + "url": { + "type": "string", + "description": "Class website" + }, + "final": { + "type": "boolean", + "description": "True if has final" + }, + "half": { + "description": "1 or 2 if first / second half", + "oneOf": [ + { + "type": "number", + "enum": [1, 2] + }, + { + "type": "boolean", + "enum": [false] + } + ] + }, + "limited": { + "type": "boolean", + "description": "True if limited enrollment" + }, + "rating": { + "type": "number", + "description": "Rating (out of 7.0) from evals" + }, + "hours": { + "type": "number", + "description": "Hours per week from evals" + }, + "size": { + "type": "number", + "description": "Class size from evals" + } + } + }, + "$defs": { + "rawTimeSlot": { + "type": "array", + "description": "Raw timeslot format: [start slot, length of timeslot].", + "prefixItems": [{ "type": "number" }, { "type": "number" }] + }, + "rawSection": { + "type": "array", + "description": "Raw section format: [[[10, 2], [70, 2]], \"34-101\".", + "prefixItems": [ + { + "type": "array", + "items": { "$ref": "#/$defs/rawTimeSlot" } + }, + { "type": "string" } + ] + } + } +} diff --git a/scrapers/package.py b/scrapers/package.py index 3a80871f..542a70b6 100644 --- a/scrapers/package.py +++ b/scrapers/package.py @@ -16,6 +16,14 @@ import datetime import json import utils +import os +import os.path +import sys + +if sys.version_info >= (3, 11): + import tomllib +else: + import tomli as tomllib def load_json_data(jsonfile): @@ -32,6 +40,24 @@ def load_json_data(jsonfile): return json.load(f) +def load_toml_data(tomldir): + """ + Loads data from the provided directory that consists exclusively of TOML files + + Args: + * tomldir (str): The directory to load from + + Returns: + * dict: The data contained within the directory + """ + out = {} + for fname in os.listdir(tomldir): + if fname.endswith(".toml"): + with open(os.path.join(tomldir, fname), "rb") as f: + out.update(tomllib.load(f)) + return out + + def merge_data(datasets, keys_to_keep): """ Combines the provided datasets, retaining only keys from keys_to_keep. @@ -61,7 +87,7 @@ def run(): fireroad_presem = load_json_data("fireroad-presem.json") fireroad_sem = load_json_data("fireroad-sem.json") catalog = load_json_data("catalog.json") - overrides = load_json_data("overrides.json") + overrides = load_toml_data("overrides.toml.d") # The key needs to be in BOTH fireroad and catalog to make it: # If it's not in Fireroad, it's not offered in this semester (fall, etc.).