[M] Move non-course-related files to misc
This commit is contained in:
@@ -0,0 +1,263 @@
|
||||
# Group 1 (Cluster A)
|
||||
|
||||
`JLP315H1` - [3.0L] [Language Acquisition](https://artsci.calendar.utoronto.ca/course/JLP315H1)
|
||||
|
||||
### PSY 100
|
||||
|
||||
`PSY194H1` - [2.0S] [The Psychology of Student Success](https://artsci.calendar.utoronto.ca/course/PSY194H1)
|
||||
`PSY195H1` - [2.0S] [The Science of Babies](https://artsci.calendar.utoronto.ca/course/PSY195H1)
|
||||
`PSY197H1` - [2.0S] [The Individual and Society](https://artsci.calendar.utoronto.ca/course/PSY197H1)
|
||||
|
||||
### PSY 200
|
||||
|
||||
`PSY210H1` - [3.0L] [Introduction to Developmental Psychology](https://artsci.calendar.utoronto.ca/course/PSY210H1)
|
||||
`PSY220H1` - [3.0L] [Introduction to Social Psychology](https://artsci.calendar.utoronto.ca/course/PSY220H1)
|
||||
`PSY230H1` - [3.0L] [Personality and Its Transformations](https://artsci.calendar.utoronto.ca/course/PSY230H1)
|
||||
`PSY240H1` - [3.0L] [Introduction to Abnormal Psychology](https://artsci.calendar.utoronto.ca/course/PSY240H1)
|
||||
|
||||
### PSY 300
|
||||
|
||||
`PSY311H1` - [3.0L] [Social Development](https://artsci.calendar.utoronto.ca/course/PSY311H1)
|
||||
`PSY312H1` - [3.0L] [Cognitive Development](https://artsci.calendar.utoronto.ca/course/PSY312H1)
|
||||
`PSY313H1` - [3.0L] [Psychology of Aging](https://artsci.calendar.utoronto.ca/course/PSY313H1)
|
||||
`PSY316H1` - [3.0L] [Perceptual Development](https://artsci.calendar.utoronto.ca/course/PSY316H1)
|
||||
`PSY319H1` - [3.0P] [Developmental Laboratory](https://artsci.calendar.utoronto.ca/course/PSY319H1)
|
||||
`PSY320H1` - [3.0L] [Social Psychology: Attitudes](https://artsci.calendar.utoronto.ca/course/PSY320H1)
|
||||
`PSY321H1` - [3.0L] [Cross-Cultural Psychology](https://artsci.calendar.utoronto.ca/course/PSY321H1)
|
||||
`PSY322H1` - [3.0L] [Intergroup Relations](https://artsci.calendar.utoronto.ca/course/PSY322H1)
|
||||
`PSY323H1` - [3.0L] [Sex Roles and Behaviour](https://artsci.calendar.utoronto.ca/course/PSY323H1)
|
||||
`PSY324H1` - [3.0L] [Moral Thought and Behaviour](https://artsci.calendar.utoronto.ca/course/PSY324H1)
|
||||
`PSY326H1` - [3.0L] [Social Cognition](https://artsci.calendar.utoronto.ca/course/PSY326H1)
|
||||
`PSY328H1` - [3.0L] [Psychology and the Law](https://artsci.calendar.utoronto.ca/course/PSY328H1)
|
||||
`PSY329H1` - [3.0P] [Social Psychology Laboratory](https://artsci.calendar.utoronto.ca/course/PSY329H1)
|
||||
`PSY330H1` - [3.0L] [Psychological Measurement](https://artsci.calendar.utoronto.ca/course/PSY330H1)
|
||||
`PSY331H1` - [3.0L] [Social Psychology of Emotion](https://artsci.calendar.utoronto.ca/course/PSY331H1)
|
||||
`PSY332H1` - [3.0L] [Organizational Behaviour](https://artsci.calendar.utoronto.ca/course/PSY332H1)
|
||||
`PSY333H1` - [3.0L] [Health Psychology](https://artsci.calendar.utoronto.ca/course/PSY333H1)
|
||||
`PSY336H1` - [3.0L] [Positive Psychology](https://artsci.calendar.utoronto.ca/course/PSY336H1)
|
||||
`PSY337H1` - [3.0L] [Advanced Personality Psychology](https://artsci.calendar.utoronto.ca/course/PSY337H1)
|
||||
`PSY339H1` - [3.0P] [Individual Differences Laboratory](https://artsci.calendar.utoronto.ca/course/PSY339H1)
|
||||
`PSY341H1` - [3.0L] [Psychopathologies of Childhood](https://artsci.calendar.utoronto.ca/course/PSY341H1)
|
||||
`PSY342H1` - [3.0L] [Cognition and Psychopathology](https://artsci.calendar.utoronto.ca/course/PSY342H1)
|
||||
`PSY343H1` - [3.0L] [Theories of Psychopathology and Psychotherapy](https://artsci.calendar.utoronto.ca/course/PSY343H1)
|
||||
`PSY349H1` - [3.0P] [Laboratory in Social Psychological Field Methods](https://artsci.calendar.utoronto.ca/course/PSY349H1)
|
||||
|
||||
### PSY 400
|
||||
|
||||
`PSY410H1` - [2.0S] [Developmental Psychology Seminar](https://artsci.calendar.utoronto.ca/course/PSY410H1)
|
||||
`PSY414H1` - [3.0L] [Moral Development](https://artsci.calendar.utoronto.ca/course/PSY414H1)
|
||||
`PSY417H1` - [3.0L] [Aging and Social Cognition](https://artsci.calendar.utoronto.ca/course/PSY417H1)
|
||||
`PSY420H1` - [2.0S] [Social Psychology Seminar](https://artsci.calendar.utoronto.ca/course/PSY420H1)
|
||||
`PSY421H1` - [3.0L] [Person Perception](https://artsci.calendar.utoronto.ca/course/PSY421H1)
|
||||
`PSY424H1` - [3.0L] [Social Psychology of Interpersonal Relationships](https://artsci.calendar.utoronto.ca/course/PSY424H1)
|
||||
`PSY425H1` - [3.0L] [Self-Consciousness](https://artsci.calendar.utoronto.ca/course/PSY425H1)
|
||||
`PSY426H1` - [3.0L] [Motivational Theories in Social Psychology](https://artsci.calendar.utoronto.ca/course/PSY426H1)
|
||||
`PSY427H1` - [3.0L] [Media Psychology](https://artsci.calendar.utoronto.ca/course/PSY427H1)
|
||||
`PSY428H1` - [3.0L] [Critical Psychology](https://artsci.calendar.utoronto.ca/course/PSY428H1)
|
||||
`PSY430H1` - [2.0S] [Personality Seminar](https://artsci.calendar.utoronto.ca/course/PSY430H1)
|
||||
`PSY434H1` - [3.0L] [Maps of Meaning: The Architecture of Belief](https://artsci.calendar.utoronto.ca/course/PSY434H1)
|
||||
`PSY435H1` - [3.0L] [Environmental Psychology](https://artsci.calendar.utoronto.ca/course/PSY435H1)
|
||||
`PSY440H1` - [2.0S] [Abnormal Psychology Seminar](https://artsci.calendar.utoronto.ca/course/PSY440H1)
|
||||
`PSY450H1` - [3.0L] [History of Psychology](https://artsci.calendar.utoronto.ca/course/PSY450H1)
|
||||
|
||||
# Group 1 (Cluster B)
|
||||
|
||||
`JLP374H1` - [3.0L] [Psychology of Language](https://artsci.calendar.utoronto.ca/course/JLP374H1)
|
||||
`JLP471H1` - [2.0S] [Advanced Psycholinguistics](https://artsci.calendar.utoronto.ca/course/JLP471H1)
|
||||
|
||||
### PSY 100
|
||||
|
||||
`PSY196H1` - [2.0S] [Critical Periods, Brain Plasticity and Development](https://artsci.calendar.utoronto.ca/course/PSY196H1)
|
||||
`PSY198H1` - [2.0S] [The Psychology of Magic](https://artsci.calendar.utoronto.ca/course/PSY198H1)
|
||||
`PSY199H1` - [2.0S] [Psychology and History of Drug Use](https://artsci.calendar.utoronto.ca/course/PSY199H1)
|
||||
|
||||
### PSY 200
|
||||
|
||||
`PSY260H1` - [3.0L] [Introduction to Learning and Plasticity](https://artsci.calendar.utoronto.ca/course/PSY260H1)
|
||||
`PSY270H1` - [3.0L] [Introduction to Cognitive Psychology](https://artsci.calendar.utoronto.ca/course/PSY270H1)
|
||||
`PSY280H1` - [3.0L] [Introduction to Sensation and Perception](https://artsci.calendar.utoronto.ca/course/PSY280H1)
|
||||
`PSY290H1` - [3.0L] [Behavioural Neuroscience](https://artsci.calendar.utoronto.ca/course/PSY290H1)
|
||||
|
||||
### PSY 300
|
||||
|
||||
`PSY312H1` - [3.0L] [Cognitive Development](https://artsci.calendar.utoronto.ca/course/PSY312H1)
|
||||
`PSY316H1` - [3.0L] [Perceptual Development](https://artsci.calendar.utoronto.ca/course/PSY316H1)
|
||||
`PSY359H1` - [3.0P] [Human Neuroimaging Laboratory](https://artsci.calendar.utoronto.ca/course/PSY359H1)
|
||||
`PSY360H1` - [3.0L] [Associative Learning](https://artsci.calendar.utoronto.ca/course/PSY360H1)
|
||||
`PSY362H1` - [3.0L] [Animal Cognition](https://artsci.calendar.utoronto.ca/course/PSY362H1)
|
||||
`PSY369H1` - [3.0P] [Psychobiology Laboratory](https://artsci.calendar.utoronto.ca/course/PSY369H1)
|
||||
`PSY370H1` - [3.0L] [Thinking and Reasoning](https://artsci.calendar.utoronto.ca/course/PSY370H1)
|
||||
`PSY371H1` - [3.0L] [Higher Cognitive Processes](https://artsci.calendar.utoronto.ca/course/PSY371H1)
|
||||
`PSY372H1` - [3.0L] [Human Memory](https://artsci.calendar.utoronto.ca/course/PSY372H1)
|
||||
`PSY378H1` - [3.0L] [Engineering Psychology](https://artsci.calendar.utoronto.ca/course/PSY378H1)
|
||||
`PSY379H1` - [3.0P] [Human Memory and Learning Laboratory](https://artsci.calendar.utoronto.ca/course/PSY379H1)
|
||||
`PSY380H1` - [3.0L] [Vision Science](https://artsci.calendar.utoronto.ca/course/PSY380H1)
|
||||
`PSY389H1` - [3.0P] [Perception Laboratory](https://artsci.calendar.utoronto.ca/course/PSY389H1)
|
||||
`PSY390H1` - [3.0L] [Behavioural Genetics](https://artsci.calendar.utoronto.ca/course/PSY390H1)
|
||||
`PSY395H1` - [3.0L] [Neuroethics](https://artsci.calendar.utoronto.ca/course/PSY395H1)
|
||||
`PSY396H1` - [3.0L] [Neurochemical Basis of Behaviour](https://artsci.calendar.utoronto.ca/course/PSY396H1)
|
||||
`PSY397H1` - [3.0L] [Biological Rhythms](https://artsci.calendar.utoronto.ca/course/PSY397H1)
|
||||
|
||||
### PSY 400
|
||||
|
||||
`PSY450H1` - [3.0L] [History of Psychology](https://artsci.calendar.utoronto.ca/course/PSY450H1)
|
||||
`PSY460H1` - [2.0S] [Seminar in Learning](https://artsci.calendar.utoronto.ca/course/PSY460H1)
|
||||
`PSY470H1` - [2.0S] [Seminar in Human Memory](https://artsci.calendar.utoronto.ca/course/PSY470H1)
|
||||
`PSY471H1` - [2.0S] [Seminar in Cognition](https://artsci.calendar.utoronto.ca/course/PSY471H1)
|
||||
`PSY473H1` - [3.0L] [Social Cognitive Neuroscience](https://artsci.calendar.utoronto.ca/course/PSY473H1)
|
||||
`PSY475H1` - [3.0L] [Attention and Performance](https://artsci.calendar.utoronto.ca/course/PSY475H1)
|
||||
`PSY480H1` - [2.0S] [Seminar in Perception](https://artsci.calendar.utoronto.ca/course/PSY480H1)
|
||||
`PSY490H1` - [2.0S] [Seminar in Behavioural Neuroscience](https://artsci.calendar.utoronto.ca/course/PSY490H1)
|
||||
`PSY492H1` - [3.0L] [Neurobiology of Learning and Memory](https://artsci.calendar.utoronto.ca/course/PSY492H1)
|
||||
`PSY493H1` - [3.0L] [Cognitive Neuroscience](https://artsci.calendar.utoronto.ca/course/PSY493H1)
|
||||
`PSY494H1` - [3.0L] [Physiology and Psychology of Emotion](https://artsci.calendar.utoronto.ca/course/PSY494H1)
|
||||
`PSY495H1` - [3.0L] [Sex and the Brain](https://artsci.calendar.utoronto.ca/course/PSY495H1)
|
||||
`PSY496H1` - [3.0L] [Cognitive Dysfunction in Neurological Disorders](https://artsci.calendar.utoronto.ca/course/PSY496H1)
|
||||
`PSY497H1` - [2.0S] [Seminar in Biological Timing](https://artsci.calendar.utoronto.ca/course/PSY497H1)
|
||||
|
||||
|
||||
# Group 1 (Cluster C)
|
||||
|
||||
### PSY 200
|
||||
|
||||
`PSY201H1` - [3.0L] [Statistics I](https://artsci.calendar.utoronto.ca/course/PSY201H1)
|
||||
`PSY202H1` - [3.0L] [Statistics II](https://artsci.calendar.utoronto.ca/course/PSY202H1)
|
||||
`PSY203H1` - [3.0P] [Psychological Research](https://artsci.calendar.utoronto.ca/course/PSY203H1)
|
||||
`PSY204H1` - [3.0L] [Psychology Careers and Applications](https://artsci.calendar.utoronto.ca/course/PSY204H1)
|
||||
`PSY299H1` - [0.0N] [Research Opportunity Program](https://artsci.calendar.utoronto.ca/course/PSY299H1)
|
||||
`PSY299Y1` - [0.0N] [Research Opportunity Program](https://artsci.calendar.utoronto.ca/course/PSY299Y1)
|
||||
|
||||
### PSY 300
|
||||
|
||||
`PSY305H1` - [3.0L] [The Treatment of Psychological Data](https://artsci.calendar.utoronto.ca/course/PSY305H1)
|
||||
`PSY306Y0` - [4.0L] [Special Topics in Psychology Abroad](https://artsci.calendar.utoronto.ca/course/PSY306Y0)
|
||||
`PSY307H1` - [3.0L] [Special Topics in Psychology](https://artsci.calendar.utoronto.ca/course/PSY307H1)
|
||||
`PSY308H1` - [3.0L] [Special Topics in Psychology](https://artsci.calendar.utoronto.ca/course/PSY308H1)
|
||||
`PSY399H1` - [0.0N] [Research Opportunity Program](https://artsci.calendar.utoronto.ca/course/PSY399H1)
|
||||
`PSY399Y1` - [0.0N] [Research Opportunity Program](https://artsci.calendar.utoronto.ca/course/PSY399Y1)
|
||||
|
||||
### PSY 400
|
||||
|
||||
`PSY402H1` - [2.0S] [Psychology Seminar](https://artsci.calendar.utoronto.ca/course/PSY402H1)
|
||||
`PSY403H1` - [2.0S] [Psychology Seminar](https://artsci.calendar.utoronto.ca/course/PSY403H1)
|
||||
`PSY404H1` - [2.0S] [Psychology Seminar](https://artsci.calendar.utoronto.ca/course/PSY404H1)
|
||||
`PSY405H1` - [0.0N] [Individual Projects](https://artsci.calendar.utoronto.ca/course/PSY405H1)
|
||||
`PSY405Y1` - [0.0N] [Individual Projects](https://artsci.calendar.utoronto.ca/course/PSY405Y1)
|
||||
`PSY406H1` - [0.0N] [Individual Projects](https://artsci.calendar.utoronto.ca/course/PSY406H1)
|
||||
`PSY406Y1` - [0.0N] [Individual Projects](https://artsci.calendar.utoronto.ca/course/PSY406Y1)
|
||||
`PSY407H1` - [3.0L] [Special Topics in Psychology](https://artsci.calendar.utoronto.ca/course/PSY407H1)
|
||||
`PSY408H1` - [3.0L] [Special Topics in Psychology](https://artsci.calendar.utoronto.ca/course/PSY408H1)
|
||||
|
||||
|
||||
# Group 2
|
||||
|
||||
### Biology
|
||||
|
||||
`BIO120H1` - [2.0L/1.25P] [Adaptation and Biodiversity](https://artsci.calendar.utoronto.ca/course/BIO120H1)
|
||||
`BIO130H1` - [3.0L/1.25P] [Molecular and Cell Biology](https://artsci.calendar.utoronto.ca/course/BIO130H1)
|
||||
`BIO220H1` - [2.0L/1.25P] [From Genomes to Ecosystems in a Changing World](https://artsci.calendar.utoronto.ca/course/BIO220H1)
|
||||
`BIO270H1` - [2.0L/0.75P] [Animal Physiology I](https://artsci.calendar.utoronto.ca/course/BIO270H1)
|
||||
`BIO271H1` - [2.0L/0.75P] [Animal Physiology II](https://artsci.calendar.utoronto.ca/course/BIO271H1)
|
||||
`EEB313H1` - [2.0L/2.0P] [Quantitative Methods in R for Biology](https://artsci.calendar.utoronto.ca/course/EEB313H1)
|
||||
|
||||
### Buddhism
|
||||
|
||||
`BPM232H1` - [3.0L] [Buddhist Psychology](https://artsci.calendar.utoronto.ca/course/BPM232H1)
|
||||
`BPM332H1` - [3.0L] [Buddhism and Psychotherapy](https://artsci.calendar.utoronto.ca/course/BPM332H1)
|
||||
`BPM333H1` - [3.0L] [Buddhism and Cognitive Science](https://artsci.calendar.utoronto.ca/course/BPM333H1)
|
||||
`BPM335H1` - [3.0L] [Meditation and the Body](https://artsci.calendar.utoronto.ca/course/BPM335H1)
|
||||
`BPM336H1` - [3.0L] [Special Topics in Buddhism, Psychology and Mental Health](https://artsci.calendar.utoronto.ca/course/BPM336H1)
|
||||
`BPM337H1` - [3.0L] [Special Topics in Buddhism, Psychology and Mental Health](https://artsci.calendar.utoronto.ca/course/BPM337H1)
|
||||
`BPM338H1` - [3.0L] [Exploring Mindful Awareness](https://artsci.calendar.utoronto.ca/course/BPM338H1)
|
||||
`BPM339H1` - [3.0L] [Yogacara Buddhism and Western Psychology](https://artsci.calendar.utoronto.ca/course/BPM339H1)
|
||||
`BPM432H1` - [3.0L] [Advanced Special Topics in Buddhism, Psychology and Mental Health](https://artsci.calendar.utoronto.ca/course/BPM432H1)
|
||||
`BPM433H1` - [3.0S] [Advanced Special Topics in Buddhism, Psychology and Mental Health](https://artsci.calendar.utoronto.ca/course/BPM433H1)
|
||||
`BPM438H1` - [3.0S] [Mindfulness Meditation: Science and Research](https://artsci.calendar.utoronto.ca/course/BPM438H1)
|
||||
|
||||
### Cognitive Science
|
||||
|
||||
`COG250Y1` - [6.5L] [Introduction to Cognitive Science](https://artsci.calendar.utoronto.ca/course/COG250Y1)
|
||||
`COG260H1` - [2.0L/1.0P] [Data, Computation, and the Mind](https://artsci.calendar.utoronto.ca/course/COG260H1)
|
||||
`COG341H1` - [3.0L] [Issues in Cognitive Science I: Attention, Perception, and Consciousness](https://artsci.calendar.utoronto.ca/course/COG341H1)
|
||||
`COG342H1` - [3.0L] [Issues in Cognitive Science II: Concepts, Theories of Mind, and Cognitive Evolution](https://artsci.calendar.utoronto.ca/course/COG342H1)
|
||||
`COG343H1` - [2.0L/1.0P] [Issues in Cognitive Science III: Computational Cognition](https://artsci.calendar.utoronto.ca/course/COG343H1)
|
||||
|
||||
### Criminology
|
||||
|
||||
`CRI365H1` - [3.0L] [Crime and Mind](https://artsci.calendar.utoronto.ca/course/CRI365H1)
|
||||
`CRI431H1` - [2.0S] [Mental Health, Morality & Legal Controls ](https://artsci.calendar.utoronto.ca/course/CRI431H1)
|
||||
|
||||
### Economics
|
||||
|
||||
`ECO423H1` - [2.0L/1.0T] [Economics and Biosocial Data](https://artsci.calendar.utoronto.ca/course/ECO423H1)
|
||||
`EDS261H1` - [3.0L] [Child and Adolescent Development in Education](https://artsci.calendar.utoronto.ca/course/EDS261H1)
|
||||
|
||||
### Neurobiology
|
||||
|
||||
`HMB200H1` - [2.0L/1.0T] [Introduction to Neuroscience](https://artsci.calendar.utoronto.ca/course/HMB200H1)
|
||||
`HMB300H1` - [2.0L/1.0T] [Neurobiology of Behaviour](https://artsci.calendar.utoronto.ca/course/HMB300H1)
|
||||
`HMB310H1` - [1.0L/3.0P] [Laboratory in Neuroscience](https://artsci.calendar.utoronto.ca/course/HMB310H1)
|
||||
`HMB320H1` - [2.0L/0.3T/0.8P] [Neuroanatomy](https://artsci.calendar.utoronto.ca/course/HMB320H1)
|
||||
`HMB420H1` - [1.0L/1.0S] [Seminar in Neurobiology of Behaviour](https://artsci.calendar.utoronto.ca/course/HMB420H1)
|
||||
`HMB440H1` - [2.0L] [Dementia](https://artsci.calendar.utoronto.ca/course/HMB440H1)
|
||||
`HMB460H1` - [1.0L/1.0S] [Seminars in Neurobiology of Mental Health](https://artsci.calendar.utoronto.ca/course/HMB460H1)
|
||||
`HMB473H1` - [1.5L/0.8P/0.5S] [Exercise and Mental Health](https://artsci.calendar.utoronto.ca/course/HMB473H1)
|
||||
|
||||
### Linguistics
|
||||
|
||||
`JLS472H1` - [3.0L] [Child Language Disorders](https://artsci.calendar.utoronto.ca/course/JLS472H1)
|
||||
`JLS473H1` - [3.0L] [Adult Speech and Language Disorders](https://artsci.calendar.utoronto.ca/course/JLS473H1)
|
||||
`LIN101H1` - [2.0L/1.0T] [Introduction to Linguistics: Sound Structure](https://artsci.calendar.utoronto.ca/course/LIN101H1)
|
||||
`LIN102H1` - [2.0L/1.0P] [Introduction to Linguistics: Sentence Structure and Meaning](https://artsci.calendar.utoronto.ca/course/LIN102H1)
|
||||
`LIN200H1` - [2.0L/1.0T] [Introduction to Language](https://artsci.calendar.utoronto.ca/course/LIN200H1)
|
||||
`LIN402H1` - [3.0L] [Linguistic Typology and Constructed Languages](https://artsci.calendar.utoronto.ca/course/LIN402H1)
|
||||
|
||||
### Philosophy
|
||||
|
||||
`PHL240H1` - [3.0L] [Persons, Minds and Bodies](https://artsci.calendar.utoronto.ca/course/PHL240H1)
|
||||
`PHL243H1` - [3.0L] [Philosophy of Human Sexuality](https://artsci.calendar.utoronto.ca/course/PHL243H1)
|
||||
`PHL244H1` - [3.0L] [Human Nature](https://artsci.calendar.utoronto.ca/course/PHL244H1)
|
||||
`PHL319H1` - [3.0L] [Philosophy and Psychoanalytic Theory](https://artsci.calendar.utoronto.ca/course/PHL319H1)
|
||||
`PHL340H1` - [3.0L] [Issues in Philosophy of Mind](https://artsci.calendar.utoronto.ca/course/PHL340H1)
|
||||
`PHL342H1` - [3.0L] [Minds and Machines](https://artsci.calendar.utoronto.ca/course/PHL342H1)
|
||||
`PHL383H1` - [3.0L] [Ethics and Mental Health](https://artsci.calendar.utoronto.ca/course/PHL383H1)
|
||||
|
||||
### Physiology
|
||||
|
||||
`PSL201Y1` - [3.7L/2.0P] [Basic Human Physiology](https://artsci.calendar.utoronto.ca/course/PSL201Y1)
|
||||
`PSL300H1` - [3.0L/0.4T] [Human Physiology I](https://artsci.calendar.utoronto.ca/course/PSL300H1)
|
||||
`PSL440Y1` - [8.0L] [Neuroscience: Systems and Behaviour](https://artsci.calendar.utoronto.ca/course/PSL440Y1)
|
||||
|
||||
### Religion
|
||||
|
||||
`RLG106H1` - [2.0L] [Happiness](https://artsci.calendar.utoronto.ca/course/RLG106H1)
|
||||
`RLG211H1` - [2.0L/1.0T] [Psychology of Religion](https://artsci.calendar.utoronto.ca/course/RLG211H1)
|
||||
`RLG301H1` - [2.0L] [Religion on the Couch: Freud and Jung on Religion](https://artsci.calendar.utoronto.ca/course/RLG301H1)
|
||||
`RLG421H1` - [2.0S] [Fragments of Redemption: Sigmund Freud and Theodor Adorno](https://artsci.calendar.utoronto.ca/course/RLG421H1)
|
||||
|
||||
### Sociology
|
||||
|
||||
`SOC213H1` - [2.0L] [Sociological Social Psychology](https://artsci.calendar.utoronto.ca/course/SOC213H1)
|
||||
`SOC363H1` - [2.0L] [Sociology of Mental Health and Mental Disorders](https://artsci.calendar.utoronto.ca/course/SOC363H1)
|
||||
`SOC412H1` - [2.0L] [Medicalization of Deviance](https://artsci.calendar.utoronto.ca/course/SOC412H1)
|
||||
`VIC106H1` - [2.0S] [Psychology and Society](https://artsci.calendar.utoronto.ca/course/VIC106H1)
|
||||
`VIC206H1` - [2.0S] [Psychology and Society](https://artsci.calendar.utoronto.ca/course/VIC206H1)
|
||||
`VIC278H1` - [2.0S] [Modelling Evil and Disease](https://artsci.calendar.utoronto.ca/course/VIC278H1)
|
||||
|
||||
### Others
|
||||
|
||||
`ENG384Y1` - [6.0L] [Literature and Psychoanalysis](https://artsci.calendar.utoronto.ca/course/ENG384Y1)
|
||||
`HIS489H1` - [2.0S] [The History of Psychiatry and Psychiatric Illness](https://artsci.calendar.utoronto.ca/course/HIS489H1)
|
||||
`HPS110H1` - [2.0L/0.8T] [The Science of Human Nature](https://artsci.calendar.utoronto.ca/course/HPS110H1)
|
||||
`HPS200H1` - [2.0L] [Science and Values](https://artsci.calendar.utoronto.ca/course/HPS200H1)
|
||||
`RSM260H1` - [2.0L] [Organizational Behaviour](https://artsci.calendar.utoronto.ca/course/RSM260H1)
|
||||
`RSM353H1` - [2.0L] [Consumer Behaviour](https://artsci.calendar.utoronto.ca/course/RSM353H1)
|
||||
`WGS372H1` - [2.0L] [Women and Psychology/ Psychoanalysis](https://artsci.calendar.utoronto.ca/course/WGS372H1)
|
||||
`IRE260H1` - [3.0L] [Organizational Behaviour](https://artsci.calendar.utoronto.ca/course/IRE260H1)
|
||||
`JFP450H1` - [2.0L] [Indigenous Issues in Health and Healing](https://artsci.calendar.utoronto.ca/course/JFP450H1)
|
||||
`NEW302Y1` - [4.0L/2.0S] [C.G. Jung: Stories, Patterns, Symbols](https://artsci.calendar.utoronto.ca/course/NEW302Y1)
|
||||
`NEW303H1` - [1.0L/1.0S] [Hypotheses of the Unconscious](https://artsci.calendar.utoronto.ca/course/NEW303H1)
|
||||
`NFS489H1` - [3.0L] [Nutritional Neurosciences](https://artsci.calendar.utoronto.ca/course/NFS489H1)
|
||||
`PCL200H1` - [2.0L] [Drugs & the Brain](https://artsci.calendar.utoronto.ca/course/PCL200H1)
|
||||
`PCL475H1` - [3.0L/1.0T] [Neuropsychopharmacology 1](https://artsci.calendar.utoronto.ca/course/PCL475H1)
|
||||
`PCL476H1` - [3.0L/1.0T] [Neuropsychopharmacology 2](https://artsci.calendar.utoronto.ca/course/PCL476H1)
|
||||
@@ -0,0 +1,8 @@
|
||||
`PHL240H1` - [3.0L] [Persons, Minds and Bodies](https://artsci.calendar.utoronto.ca/course/PHL240H1)
|
||||
`PHL245H1` - [3.0L] [Modern Symbolic Logic](https://artsci.calendar.utoronto.ca/course/PHL245H1)
|
||||
`PHL246H1` - [3.0L] [Probability and Inductive Logic](https://artsci.calendar.utoronto.ca/course/PHL246H1)
|
||||
`PHL345H1` - [3.0L] [Intermediate Logic](https://artsci.calendar.utoronto.ca/course/PHL345H1)
|
||||
`PHL347H1` - [3.0L] [Modal Logic and Philosophical Applications of Logic](https://artsci.calendar.utoronto.ca/course/PHL347H1)
|
||||
`PHL348H1` - [3.0L] [Logic and Computation](https://artsci.calendar.utoronto.ca/course/PHL348H1)
|
||||
`PHL349H1` - [3.0L] [Set Theory](https://artsci.calendar.utoronto.ca/course/PHL349H1)
|
||||
`PHL355H1` - [3.0L] [Philosophy of Natural Science](https://artsci.calendar.utoronto.ca/course/PHL355H1)
|
||||
@@ -0,0 +1,70 @@
|
||||
// ==UserScript==
|
||||
// @name UCheck Completer
|
||||
// @namespace http://tampermonkey.net/
|
||||
// @version 0.1
|
||||
// @description Automatically complete ucheck.utoronto.ca
|
||||
// @author UTSG Computer Science Department
|
||||
// @include https://ucheck.utoronto.ca/*
|
||||
// @icon https://www.google.com/s2/favicons?domain=utoronto.ca
|
||||
// @grant none
|
||||
// ==/UserScript==
|
||||
|
||||
// Load JQuery
|
||||
function loadJS(url)
|
||||
{
|
||||
const head = document.getElementsByTagName('head')[0];
|
||||
const script = document.createElement('script');
|
||||
script.type = 'text/javascript';
|
||||
script.src = url;
|
||||
script.onload = () => console.log(`${url} loaded.`)
|
||||
head.appendChild(script);
|
||||
}
|
||||
loadJS('https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js')
|
||||
|
||||
// Report no symptoms on the report symptoms page
|
||||
function report()
|
||||
{
|
||||
// Repeat
|
||||
let task = setInterval(() =>
|
||||
{
|
||||
// Check if it's done
|
||||
let submit = $('span:contains(Submit)')
|
||||
if (!submit.parent()[0].classList.contains('Mui-disabled'))
|
||||
{
|
||||
console.log('Done, clicking submit')
|
||||
clearInterval(task)
|
||||
submit.click()
|
||||
}
|
||||
|
||||
// Click no buttons
|
||||
// Old method: select by class (doesn't work because class names are randomized.
|
||||
// Array.from(document.querySelectorAll('.sc-qbELi.eWIawQ')).filter(it => it.querySelector('span').innerHTML === 'No').forEach(it => it.click())
|
||||
// New method: select by content and filter by color (white means unselected)
|
||||
$('span:contains(No)').parent().filter((i, it) => $(it).css('background-color') === 'rgb(255, 255, 255)').click()
|
||||
|
||||
// Scroll to bottom
|
||||
window.scrollTo(0, document.body.scrollHeight);
|
||||
|
||||
}, 100)
|
||||
}
|
||||
|
||||
// On the right site
|
||||
if (window.location.hostname === 'ucheck.utoronto.ca')
|
||||
{
|
||||
// On home page
|
||||
if (window.location.pathname.replace('/', '') === '')
|
||||
{
|
||||
// Only run if not already green
|
||||
if (!$('p:contains(you do not report symptoms)'))
|
||||
{
|
||||
// Enter into the report screen
|
||||
$('.MuiButton-label').click()
|
||||
}
|
||||
}
|
||||
|
||||
// Report screen
|
||||
if (window.location.pathname === '/questionnaire')
|
||||
{
|
||||
report()
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,75 @@
|
||||
import math
|
||||
|
||||
import numpy as np
|
||||
from matplotlib import pyplot as plt
|
||||
|
||||
|
||||
# def convert_from_c(c: int):
|
||||
# k = c + 273.15
|
||||
# assert k >= 0
|
||||
#
|
||||
# scale = [273.15, 0, 37, 100]
|
||||
# mapping = [273.15, 0, 50, 100]
|
||||
#
|
||||
# i_scale = [scale[i + 1] - scale[i] for i in range(len(scale) - 1)]
|
||||
# i_mapping = [mapping[i + 1] - mapping[i] for i in range(len(mapping) - 1)]
|
||||
#
|
||||
# s_scale = []
|
||||
# for s in scale:
|
||||
# s_scale.append(s + 0 if len(s_scale) == 0 else s_scale[-1])
|
||||
# s_mapping = []
|
||||
# for m in mapping:
|
||||
# s_mapping.append(m + 0 if len(s_mapping) == 0 else s_mapping[-1])
|
||||
#
|
||||
# # 分不同部分单独 scale
|
||||
# temp = []
|
||||
# for d in s_scale:
|
||||
# temp.append(min(d, max(k, 0)))
|
||||
# k -= d
|
||||
#
|
||||
# s = 0
|
||||
# for i in range(len(scale) - 1):
|
||||
# s += temp[i] / i_scale[i] * i_mapping[i]
|
||||
# s += temp[-1]
|
||||
# s -= 273.15
|
||||
# return s
|
||||
|
||||
|
||||
def piecewise(c: int):
|
||||
if c < 0:
|
||||
return c
|
||||
if c < 37:
|
||||
return c / 37 * 50
|
||||
if c < 100:
|
||||
return 50 + (c - 37) / (100 - 37) * (100 - 50)
|
||||
return 100 + (c - 100)
|
||||
|
||||
|
||||
def plot_eq(f, lower, upper, step=0.1):
|
||||
x_p = list(np.arange(lower, upper, step=step))
|
||||
y_p = [f(x) for x in x_p]
|
||||
plt.plot(x_p, y_p, color='#ffcccc')
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
xt = [-273.15, 0, 37, 100, 200]
|
||||
yt = [-273.15, 0, 50, 100, 200]
|
||||
plt.xticks(xt)
|
||||
plt.yticks(yt)
|
||||
for x in xt:
|
||||
plt.axvline(x, color='lightgray')
|
||||
for y in yt:
|
||||
plt.axhline(y, color='lightgray')
|
||||
plot_eq(piecewise, -273.15, 200)
|
||||
|
||||
# plot_eq(lambda x: 201.8125 + (-201.8125) / (1 + (x / 101.6479) ** 1.098977), -237.15, 200)
|
||||
# plot_eq(lambda x: 381.2003 * math.e ** (-(x - 407.029) ** 2/(2 * 163.9733 ** 2)), 0, 200 + 273.15)
|
||||
# plot_eq(lambda x: -437.3297 + 3.773026 * x - 0.004290584 * x ** 2, 0, 200 + 273.15)
|
||||
# plot_eq(lambda x: 3229.053 - 31.29614*x + 0.1066366*x ** 2 - 0.0001159774*x ** 3, 0, 200 + 273.15)
|
||||
# plt.xticks([x + 273.15 for x in xt], [str(x) for x in xt])
|
||||
# plt.yticks([x + 273.15 for x in yt], [str(x) for x in yt])
|
||||
|
||||
plt.ylabel("°C++ (Degrees Celsius++)")
|
||||
plt.xlabel("°C (Degrees Celsius)")
|
||||
plt.show()
|
||||
# convert_from_c(10)
|
||||
@@ -0,0 +1,24 @@
|
||||
import re
|
||||
|
||||
import requests
|
||||
|
||||
|
||||
def get_course_info(id: str):
|
||||
link = f'https://artsci.calendar.utoronto.ca/course/{id}'
|
||||
html = requests.get(link).text
|
||||
|
||||
name: str = re.findall(r'(?<=<h1 class="title page-title">).*(?=<)', html)[0]
|
||||
name = ': '.join(name.split(': ')[1:])
|
||||
|
||||
hours_raw = re.findall(r'(?<=<div class="field__item"><p>).*(?=<)', html)
|
||||
hours: str = '0N' if len(hours_raw) == 0 else hours_raw[0]
|
||||
hours = '/'.join([str(int(it[:-1]) / 12) + it[-1] for it in hours.split('/')])
|
||||
|
||||
return {'id': id, 'name': name, 'link': link, 'hours': hours,
|
||||
'full': f'`{id}` - [{hours}] [{name}]({link})'}
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
sep = input('Please enter the separator (Eg. a comma): ')
|
||||
l = input(f'Please enter course codes separated by "{sep}": ')
|
||||
[print(get_course_info(it.strip().strip(' '))['full'] + ' ') for it in l.split(sep)]
|
||||
@@ -0,0 +1,7 @@
|
||||
# Output two different ways you can enter a time duration on the microwave
|
||||
if __name__ == '__main__':
|
||||
while True:
|
||||
s = int(input())
|
||||
print(f'{s // 60}:{s % 60:02}')
|
||||
if s >= 60:
|
||||
print(f'{s // 60 - 1}:{s - (s // 60 - 1) * 60:02}')
|
||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,155 @@
|
||||
<div class="anchor-links">
|
||||
<h1 id="anchor-links">Anchor Links</h1>
|
||||
<h3>1. Working with Data</h3>
|
||||
<a href="#anchor-01-01">1.1 The Different Types of Data</a>
|
||||
<a href="#anchor-01-02">1.2 Introducing the Python Programming Language</a>
|
||||
<a href="#anchor-01-03">1.3 Representing Data in Python</a>
|
||||
<a href="#anchor-01-04">1.4 Storing Data in Variables</a>
|
||||
<a href="#anchor-01-05">1.5 Building Up Data with Comprehensions</a>
|
||||
<a href="#anchor-01-06">1.6 Application: Representing Colour</a>
|
||||
<h3>2. Functions</h3>
|
||||
<a href="#anchor-02-01">2.1 Python’s Built-In Functions</a>
|
||||
<a href="#anchor-02-02">2.2 Defining Our Own Functions</a>
|
||||
<a href="#anchor-02-03">2.3 Local Variables and Function Scope</a>
|
||||
<a href="#anchor-02-04">2.4 Importing Modules</a>
|
||||
<a href="#anchor-02-05">2.5 The Function Design Recipe</a>
|
||||
<a href="#anchor-02-06">2.6 Testing Functions I: <code>doctest</code> and <code>pytest</code></a>
|
||||
<a href="#anchor-02-07">2.7 Type Conversion Functions</a>
|
||||
<a href="#anchor-02-08">2.8 Application: Representing Text</a>
|
||||
<h3>3. Formal Logic</h3>
|
||||
<a href="#anchor-03-01">3.1 Propositional Logic</a>
|
||||
<a href="#anchor-03-02">3.2 Predicate Logic</a>
|
||||
<a href="#anchor-03-03">3.3 Filtering Collections</a>
|
||||
<a href="#anchor-03-04">3.4 Conditional Execution</a>
|
||||
<a href="#anchor-03-05">3.5 Simplifying If Statements</a>
|
||||
<a href="#anchor-03-06">3.6 <code>if __name__ == '__main__'</code></a>
|
||||
<a href="#anchor-03-07">3.7 Function Specification</a>
|
||||
<a href="#anchor-03-08">3.8 Richer Type Annotations</a>
|
||||
<a href="#anchor-03-09">3.9 Working With Definitions</a>
|
||||
<a href="#anchor-03-10">3.10 Testing Functions II: <code>hypothesis</code></a>
|
||||
<a href="#anchor-03-11">3.11 Working with Multiple Quantifiers</a>
|
||||
<h3>4. Working with Complex Data</h3>
|
||||
<a href="#anchor-04-01">4.1 Tabular Data</a>
|
||||
<a href="#anchor-04-02">4.2 Defining Our Own Data Types, Part 1</a>
|
||||
<a href="#anchor-04-03">4.3 Defining Our Own Data Types, Part 2</a>
|
||||
<a href="#anchor-04-04">4.4 Repeated Execution: Loops</a>
|
||||
<a href="#anchor-04-05">4.5 For Loop Variations</a>
|
||||
<a href="#anchor-04-06">4.6 Index-Based For loops</a>
|
||||
<a href="#anchor-04-07">4.7 Nested For Loops</a>
|
||||
<h3>5. Modifying Values and Variables</h3>
|
||||
<a href="#anchor-05-01">5.1 Variable Reassignment and Object Mutation</a>
|
||||
<a href="#anchor-05-02">5.2 Operations on Mutable Data Types</a>
|
||||
<a href="#anchor-05-03">5.3 The Full Python Memory Model: Introduction</a>
|
||||
<a href="#anchor-05-04">5.4 Aliasing and “Mutation at a Distance”</a>
|
||||
<a href="#anchor-05-05">5.5 The Full Python Memory Model: Function Calls</a>
|
||||
<a href="#anchor-05-06">5.6 Testing Functions III: Testing Mutation</a>
|
||||
<h3>6. Formal Proofs</h3>
|
||||
<a href="#anchor-06-01">6.1 An Introduction to Number Theory</a>
|
||||
<a href="#anchor-06-02">6.2 Proofs with Number Theory</a>
|
||||
<a href="#anchor-06-03">6.3 Proofs and Algorithms I: Primality Testing</a>
|
||||
<a href="#anchor-06-04">6.4 Proof by Cases and Disproofs</a>
|
||||
<a href="#anchor-06-05">6.5 Greatest Common Divisor</a>
|
||||
<a href="#anchor-06-06">6.6 Proofs and Algorithms II: Computing the Greatest Common Divisor</a>
|
||||
<a href="#anchor-06-07">6.7 Modular Arithmetic</a>
|
||||
<h3>7. Cryptography</h3>
|
||||
<a href="#anchor-07-01">7.1 Introduction to Cryptography</a>
|
||||
<a href="#anchor-07-02">7.2 The One-Time Pad and Perfect Secrecy</a>
|
||||
<a href="#anchor-07-03">7.3 Computing Shared Secret Keys</a>
|
||||
<a href="#anchor-07-04">7.4 The RSA Cryptosystem</a>
|
||||
<a href="#anchor-07-05">7.5 Implementing RSA in Python</a>
|
||||
<a href="#anchor-07-06">7.6 Application: Securing Online Communications</a>
|
||||
<h3>8. Analyzing Algorithm Running Time</h3>
|
||||
<a href="#anchor-08-01">8.1 An Introduction to Running Time</a>
|
||||
<a href="#anchor-08-02">8.2 Comparing Asymptotic Function Growth with Big-O</a>
|
||||
<a href="#anchor-08-03">8.3 Big-O, Omega, Theta</a>
|
||||
<a href="#anchor-08-04">8.4 Analyzing Algorithm Running Time</a>
|
||||
<a href="#anchor-08-05">8.5 Analyzing Comprehensions and While Loops</a>
|
||||
<a href="#anchor-08-06">8.6 Analyzing Built-In Data Type Operations</a>
|
||||
<a href="#anchor-08-07">8.7 Worst-Case Running Time Analysis</a>
|
||||
<a href="#anchor-08-08">8.8 Testing Functions IV: Efficiency</a>
|
||||
<h3>9. Abstraction, Classes, and Software Design</h3>
|
||||
<a href="#anchor-09-01">9.1 An Introduction to Abstraction</a>
|
||||
<a href="#anchor-09-02">9.2 Defining Our Own Data Types, Part 3</a>
|
||||
<a href="#anchor-09-03">9.3 Data Types, Abstract and Concrete</a>
|
||||
<a href="#anchor-09-04">9.4 Stacks</a>
|
||||
<a href="#anchor-09-05">9.5 Exceptions as a Part of the Public Interface</a>
|
||||
<a href="#anchor-09-06">9.6 Queues</a>
|
||||
<a href="#anchor-09-07">9.7 Priority Queues</a>
|
||||
<a href="#anchor-09-08">9.8 Defining a Shared Public Interface with Inheritance</a>
|
||||
<a href="#anchor-09-09">9.9 The <code>object</code> Superclass</a>
|
||||
<h3>10. Building a Simulation</h3>
|
||||
<a href="#anchor-10-01">10.1 The Problem Domain: Food Delivery Networks</a>
|
||||
<a href="#anchor-10-02">10.2 Object-Oriented Modelling of Our Problem Domain</a>
|
||||
<a href="#anchor-10-03">10.3 A “Manager” Class</a>
|
||||
<a href="#anchor-10-04">10.4 Food Delivery Events</a>
|
||||
<a href="#anchor-10-05">10.5 Creating a Discrete-Event Simulation</a>
|
||||
<h3>A. Python Reference</h3>
|
||||
<a href="#anchor-A--01">A.1 Python Built-In Function Reference</a>
|
||||
<a href="#anchor-A--02">A.2 Python Built-In Data Types Reference</a>
|
||||
<a href="#anchor-A--03">A.3 Python Special Method Reference</a>
|
||||
<a href="#anchor-A--04">A.4 Python Exceptions Reference</a>
|
||||
<a href="#anchor-A--05">A.5 Python Syntax Diagrams</a>
|
||||
<h3>B. Python Libraries</h3>
|
||||
<a href="#anchor-B--01">B.1 <code>doctest</code></a>
|
||||
<a href="#anchor-B--02">B.2 <code>pytest</code></a>
|
||||
<a href="#anchor-B--03">B.3 <code>python-ta</code></a>
|
||||
<a href="#anchor-B--04">B.4 <code>typing</code></a>
|
||||
<a href="#anchor-B--05">B.5 <code>pdb</code></a>
|
||||
<h3>C. Math Reference</h3>
|
||||
<a href="#anchor-C--01">C.1 Summations and Products</a>
|
||||
<a href="#anchor-C--02">C.2 Inequalities</a>
|
||||
<a id="anchors-button" href="#anchor-links">Links</a>
|
||||
</div>
|
||||
|
||||
<style>
|
||||
a:link
|
||||
{
|
||||
text-decoration: underline;
|
||||
background: unset;
|
||||
text-shadow: unset;
|
||||
}
|
||||
|
||||
.anchor-links a
|
||||
{
|
||||
display: block;
|
||||
font-size: 1.2em;
|
||||
text-decoration: none !important;
|
||||
}
|
||||
|
||||
#anchors-button
|
||||
{
|
||||
display: flex;
|
||||
flex-flow: column;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
|
||||
position: fixed;
|
||||
bottom: 20px;
|
||||
left: 20px;
|
||||
text-decoration: none !important;
|
||||
|
||||
width: 80px;
|
||||
height: 45px;
|
||||
font-family: 'Roboto', sans-serif;
|
||||
font-size: 11px;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 2px;
|
||||
font-weight: 500;
|
||||
color: #000;
|
||||
background-color: #fff;
|
||||
border: none;
|
||||
border-radius: 45px;
|
||||
box-shadow: 0 8px 15px rgba(0, 0, 0, 0.1);
|
||||
transition: all 0.3s ease 0s;
|
||||
cursor: pointer;
|
||||
outline: none;
|
||||
}
|
||||
|
||||
#anchors-button:hover {
|
||||
background-color: #2EE59D;
|
||||
box-shadow: 0px 15px 20px rgba(46, 229, 157, 0.4);
|
||||
color: #fff;
|
||||
transform: translateY(-7px);
|
||||
}
|
||||
</style>
|
||||
<script src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js" type="text/javascript"></script>
|
||||
+129
@@ -0,0 +1,129 @@
|
||||
"""
|
||||
Since the final test is open-notes, I've made this script to combine all course notes into one html
|
||||
file, so I can ctrl+F without needing to find which chapter some definition is from.
|
||||
"""
|
||||
import binascii
|
||||
import os
|
||||
import re
|
||||
import secrets
|
||||
from pathlib import Path
|
||||
|
||||
import requests
|
||||
|
||||
|
||||
def write(file: str, text: str) -> None:
|
||||
"""
|
||||
Write text to a file
|
||||
|
||||
:param file: File path
|
||||
:param text: Text
|
||||
:return: None
|
||||
"""
|
||||
if '/' in file:
|
||||
Path(file).parent.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
with open(file, 'w', encoding='utf-8') as f:
|
||||
f.write(text)
|
||||
|
||||
|
||||
def read(file: str) -> str:
|
||||
"""
|
||||
Read file content
|
||||
|
||||
:param file: File path (will be converted to lowercase)
|
||||
:return: None
|
||||
"""
|
||||
with open(file, 'r', encoding='utf-8') as f:
|
||||
return f.read()
|
||||
|
||||
|
||||
def get(url: str) -> str:
|
||||
req = requests.get(url)
|
||||
req.encoding = req.apparent_encoding
|
||||
return req.text
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
host = 'https://www.teach.cs.toronto.edu'
|
||||
baseurl = f'{host}/~csc110y/fall/notes/'
|
||||
basedir = 'notes'
|
||||
|
||||
r = get(baseurl)
|
||||
|
||||
# Replace references
|
||||
g: set[str] = set(re.findall('(?<=href=").*?(?=")', r))
|
||||
for href in g:
|
||||
url = href
|
||||
filename = href.replace('~', '-')
|
||||
if not (url.startswith('//') or url.startswith('http')):
|
||||
if url.startswith('/'):
|
||||
url = host + url
|
||||
else:
|
||||
url = baseurl + url
|
||||
else:
|
||||
filename = filename.split("//")[1]
|
||||
|
||||
if filename.endswith('/'):
|
||||
filename += 'index.html'
|
||||
|
||||
r = r.replace(href, filename)
|
||||
path = os.path.join(basedir, filename)
|
||||
if os.path.isfile(path):
|
||||
continue
|
||||
|
||||
content = get(url)
|
||||
write(path, content)
|
||||
|
||||
write(os.path.join(basedir, 'index.html'), r)
|
||||
|
||||
# Create full file
|
||||
r = re.sub('<[/]*(section|p).*?>', '', r)
|
||||
r = r.replace('<a href="www.teach.cs.toronto.edu/-csc110y/fall/notes/index.html">CSC110 Course Notes Home</a>',
|
||||
'{INJECT_HERE}')
|
||||
|
||||
links: list[str] = re.findall('<a.*?>.*?</a>', r)
|
||||
for link in links:
|
||||
uid = secrets.token_hex(5)
|
||||
href: str = re.findall('(?<=href=").*?(?=")', link)[0]
|
||||
anchor = '-'.join([i[:2] for i in href.split('/')])
|
||||
html = read(os.path.join(basedir, href))
|
||||
html = re.sub('<(!DOCTYPE|html|/html|body|/body).*?>', '', html)
|
||||
html = re.sub('<(head|div style="display:none"|footer)>.*?</(head|div|footer)>', '', html,
|
||||
flags=re.DOTALL)
|
||||
# Replace IDs
|
||||
ids = set(re.findall('(?<=id=").*?(?=")', html))
|
||||
for id in ids:
|
||||
html = html.replace(f'"{id}"', f'"{id}-{uid}"')
|
||||
html = html.replace(f'"#{id}"', f'"#{id}-{uid}"')
|
||||
|
||||
if '<section>' in html and '</section>' not in html:
|
||||
html += '</section>'
|
||||
|
||||
# Download images
|
||||
g: set[str] = set(re.findall('(?<=src=").*?(?=")', html))
|
||||
for src in g:
|
||||
if src.startswith('//') or src.startswith('http'):
|
||||
continue
|
||||
path = os.path.join(basedir, src)
|
||||
# if os.path.isfile(path):
|
||||
# continue
|
||||
|
||||
if src.startswith('/'):
|
||||
url = host + src
|
||||
else:
|
||||
url = baseurl + f'{href.split("/")[-2]}/' + src
|
||||
|
||||
print(url)
|
||||
img_data = requests.get(url).content
|
||||
Path(path).parent.mkdir(parents=True, exist_ok=True)
|
||||
with open(path, 'wb') as f:
|
||||
f.write(img_data)
|
||||
|
||||
r = r.replace(link, f'<a id="anchor-{anchor}"></a>' + html)
|
||||
# print(link.replace(href, f'#anchor-{anchor}'))
|
||||
|
||||
r = r.replace('{INJECT_HERE}', read('scrape-addon.html'))
|
||||
write(os.path.join(basedir, 'full.html'), r)
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
node_modules
|
||||
dist
|
||||
.parcel-cache
|
||||
*.log
|
||||
@@ -0,0 +1,6 @@
|
||||
const serveStatic = require("serve-static");
|
||||
|
||||
module.exports = function (app) {
|
||||
app.use(serveStatic("node_modules/@ffmpeg/core/dist"));
|
||||
app.use(serveStatic("data"));
|
||||
};
|
||||
@@ -0,0 +1,15 @@
|
||||
# anichart-template
|
||||
|
||||
Quick start anichart project.
|
||||
|
||||
## Start
|
||||
|
||||
``` bash
|
||||
parcel index.html --open
|
||||
```
|
||||
|
||||
## Build
|
||||
|
||||
``` build
|
||||
parcel build index.html
|
||||
```
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 39 KiB |
@@ -0,0 +1,7 @@
|
||||
id,date,value
|
||||
A,2021-01-01,1
|
||||
A,2021-01-02,2
|
||||
A,2021-01-03,3
|
||||
B,2021-01-01,2
|
||||
B,2021-01-02,3
|
||||
B,2021-01-03,1
|
||||
|
@@ -0,0 +1,10 @@
|
||||
<html>
|
||||
<head>
|
||||
<title>Anichart Typescript</title>
|
||||
<meta charset="UTF-8" />
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<script type="module" src="src/index.ts"></script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"name": "anichart-template",
|
||||
"version": "1.0.1",
|
||||
"description": "Starter of anichart.js.",
|
||||
"scripts": {
|
||||
"start": "parcel index.html --open",
|
||||
"build": "parcel build index.html"
|
||||
},
|
||||
"dependencies": {
|
||||
"anichart": "2.3.1-alpha",
|
||||
"serve-static": "^1.14.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"parcel": "^2.0.0-rc.0",
|
||||
"typescript": "^4.3.5"
|
||||
},
|
||||
"keywords": [
|
||||
"chart",
|
||||
"data",
|
||||
"anichart"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
import * as ANI from "anichart";
|
||||
|
||||
const stage = new ANI.Stage();
|
||||
stage.options.fps = 60;
|
||||
stage.options.sec = 40;
|
||||
|
||||
const userid: {[id: string]: string} = {
|
||||
'user1868166081': '桂',
|
||||
}
|
||||
|
||||
// Bar chart
|
||||
ANI.recourse.loadCSV("./output.csv", "data");
|
||||
let bar = new ANI.BarChart({
|
||||
dateLabelOptions: {},
|
||||
});
|
||||
|
||||
// Disable name display
|
||||
bar.barInfoFormat = (id, meta, data) => ''
|
||||
bar.showRankLabel = false
|
||||
console.log(bar.data);
|
||||
|
||||
|
||||
// Avatars
|
||||
for (let key in userid) {
|
||||
let user = userid[key]
|
||||
ANI.recourse.loadImage(`./avatar/${user}.jpg`, user);
|
||||
}
|
||||
|
||||
stage.canvas.width = 1920;
|
||||
stage.canvas.height = 1080;
|
||||
const rect = new ANI.Rect({
|
||||
shape: { width: 1920, height: 1080 },
|
||||
fillStyle: "#1e1e1e",
|
||||
});
|
||||
stage.addChild(rect);
|
||||
stage.addChild(bar);
|
||||
|
||||
const center = new ANI.Text({ text: "uwu", font: 'Microsoft Yahei UI' })
|
||||
center.fontSize = 90
|
||||
stage.addChild(center);
|
||||
|
||||
stage.play();
|
||||
stage.output = true;
|
||||
|
||||
// new ANI.MapChart({});
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"strict": true,
|
||||
"module": "commonjs",
|
||||
"jsx": "preserve",
|
||||
"esModuleInterop": true,
|
||||
"sourceMap": true,
|
||||
"allowJs": false,
|
||||
"lib": ["es6", "dom"],
|
||||
"rootDir": "src",
|
||||
"moduleResolution": "node"
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,47 @@
|
||||
import io
|
||||
import os
|
||||
|
||||
import json5
|
||||
import requests
|
||||
|
||||
if __name__ == '__main__':
|
||||
"""
|
||||
This method doesn't work
|
||||
"""
|
||||
token = os.environ.get('tg-bot-token')
|
||||
|
||||
with io.open('userid_to_name.json5', mode='r', encoding='utf-8') as f:
|
||||
userid_to_name = json5.loads(f.read())
|
||||
|
||||
for user_id in userid_to_name:
|
||||
user = userid_to_name[user_id]
|
||||
|
||||
# Get photo
|
||||
r = requests.get(f'https://api.telegram.org/bot{token}/getUserProfilePhotos',
|
||||
params={'user_id': user_id[4:]})
|
||||
|
||||
o = r.json()
|
||||
if 'result' not in o:
|
||||
print(f'Result not in o for {user}')
|
||||
print(o)
|
||||
continue
|
||||
|
||||
o = o['result']
|
||||
if o['total_count'] == 0:
|
||||
print(f'Total count is 0 for user {user}')
|
||||
continue
|
||||
|
||||
photo = max(o['photos'][0], key=lambda x: x['height'])
|
||||
|
||||
# Get file
|
||||
r = requests.get(f'https://api.telegram.org/bot{token}/getFile',
|
||||
params={'file_id': photo['file_id']})
|
||||
o = r.json()['result']
|
||||
|
||||
# Download file
|
||||
r = requests.get(f'https://api.telegram.org/file/bot{token}/{o["file_path"]}',
|
||||
params={'file_id': photo['file_id']})
|
||||
|
||||
# Write file
|
||||
with io.open(f'avatars/{userid_to_name[user_id]}.jpg', 'wb') as f:
|
||||
f.write(r.content)
|
||||
@@ -0,0 +1,29 @@
|
||||
import json
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
import matplotlib.pyplot as plt
|
||||
|
||||
if __name__ == '__main__':
|
||||
file = "./result-full.json"
|
||||
start = '2021-06-25T12:01:01'
|
||||
end = '2021-11-02T14:01:01'
|
||||
|
||||
with open(file, 'r') as f:
|
||||
obj = json.load(f)
|
||||
|
||||
messages: list = obj['messages']
|
||||
messages = [m for m in messages if start < m['date'] < end
|
||||
and m['type'] == 'message'
|
||||
# and m['from'] == 'Hykilpikonna'
|
||||
]
|
||||
|
||||
timezone_delta = timedelta(hours=12)
|
||||
dates = [datetime.fromisoformat(m['date']) - timezone_delta for m in messages]
|
||||
|
||||
plt.xticks(rotation=90)
|
||||
plt.tight_layout()
|
||||
plt.hist(dates, bins=300, color='#ffcccc')
|
||||
plt.show()
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,61 @@
|
||||
import io
|
||||
import json
|
||||
import json5
|
||||
|
||||
if __name__ == '__main__':
|
||||
"""
|
||||
|
||||
"""
|
||||
file = "./result.json"
|
||||
start = '2021-06-25T12:01:01'
|
||||
end = '2021-11-02T14:01:01'
|
||||
|
||||
with io.open(file, mode='r', encoding="utf-8") as f:
|
||||
content = f.read()
|
||||
obj = json.loads(content)
|
||||
|
||||
with io.open('userid_to_name.json5', mode='r', encoding='utf-8') as f:
|
||||
userid_to_name = json5.loads(f.read())
|
||||
|
||||
messages: list = obj['messages']
|
||||
messages = [m for m in messages if True
|
||||
# and start < m['date'] < end
|
||||
and m['type'] == 'message'
|
||||
# and m['from'] == 'Hykilpikonna'
|
||||
]
|
||||
|
||||
date_data = {}
|
||||
for m in messages:
|
||||
date = m['date'][:10]
|
||||
if date not in date_data:
|
||||
date_data[date] = {}
|
||||
user = m['from_id']
|
||||
if user not in userid_to_name:
|
||||
userid_to_name[user] = m['from']
|
||||
user = userid_to_name[user]
|
||||
if user not in date_data[date]:
|
||||
date_data[date][user] = 0
|
||||
date_data[date][user] += 1
|
||||
|
||||
print(userid_to_name)
|
||||
|
||||
user_totals = {}
|
||||
lines = ['id,date,value']
|
||||
for date in date_data:
|
||||
users = date_data[date]
|
||||
for u in users:
|
||||
if u not in user_totals:
|
||||
user_totals[u] = []
|
||||
user_totals[u].append(users[u])
|
||||
|
||||
for u in user_totals:
|
||||
if u not in users:
|
||||
user_totals[u].append(0)
|
||||
total = sum(user_totals[u][-7:])
|
||||
if u in userid_to_name:
|
||||
u = userid_to_name[u]
|
||||
lines.append(f'{u},{date},{total}')
|
||||
|
||||
with io.open('output.csv', mode='w', encoding='utf-8') as f:
|
||||
f.write('\n'.join(lines))
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
import os
|
||||
from datetime import datetime
|
||||
from pathlib import Path
|
||||
from typing import Tuple
|
||||
|
||||
|
||||
def parse_name(name: str) -> Tuple[datetime, str]:
|
||||
name = name[3:]
|
||||
ext = name[name.rindex('.'):]
|
||||
date = name[:8]
|
||||
date = datetime.strptime(date, '%Y%m%d')
|
||||
return date, ext
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
# List files
|
||||
files = list(os.listdir('../'))
|
||||
files.sort()
|
||||
|
||||
# Filter files that starts with GMT
|
||||
files = [f for f in files if f.startswith('GMT')]
|
||||
|
||||
# Videos only
|
||||
vids = [f for f in files if f.endswith('mp4')]
|
||||
for v in vids:
|
||||
# Parse name
|
||||
date, ext = parse_name(v)
|
||||
date = date.strftime('%Y %m-%d')
|
||||
os.rename(v, date + ext)
|
||||
front = v[:28]
|
||||
related = [f for f in files if f not in vids and f.startswith(front)]
|
||||
for file in related:
|
||||
ext = file[file.index('.'):]
|
||||
Path(date).mkdir(parents=True, exist_ok=True)
|
||||
os.rename(file, date + '/' + date + ext)
|
||||
|
||||
print(files)
|
||||
Reference in New Issue
Block a user