Маланчев Константин Леонидович
Описание курса:
Современный исследователь в сфере теоретической астрофизики, астрономии и небесной механики должен владеть не только знаниями в своей узкой предметной области, но и широкими познаниями в математике и физике, умением говорить и писать на английском языке, пользоваться системами подготовки текстов к публикации. К этому списку нужно добавить и умение программировать. Процесс написания программ требует не только базовых знаний об алгоритмах и работе компьютера, которые студент получает на первых курсах, но и практических знаний в области конкретных языков программирования, библиотек и инструментов разработки. Настоящий курс предлагает слушателю познакомиться или развить имеющиеся навыки программирования на языке Python. В последние пять лет этот язык стал де-факто стандартом быстрого создания программ во многих областях науки. Для Python написано большое количество библиотек, в том числе предназначенных для научных целей, в том числе теоретической и практической астрофизики. Спецкурс рассчитан на семестр семинарских занятий, предусматривается отчётность в виде сдачи индивидуального проекта и зачёта. Спецкурс предназначен для студентов, обладающих базовыми навыками программирования на каком-либо языке, знакомство с языком Python необязательно.
План курса:
1. Введение: рассказ о Python и особенностях научного программирования. Почему в 2018 году следует использовать третью версию Python и не стоит использовать вторую. Числовые типы данных. Условные операторы, циклы.
2. Основные типы данных, продолжение: бинарные переменные, списки, кортежи,
словари, множества. Строки и их форматирование.
3. Функции: позиционные и именованные аргументы, значения аргументов по
умолчанию, распаковка и упаковка аргументов. Документация с помощью
docstring. Итераторы, итерируемые объекты и генераторы. Написание модулей и
система импорта.
4. Интерактивная оболочка Jupyter. Чтение и запись файлов.
5. Модуль для линейной алгебры и многомерных массивов numpy. Создание и
изменение одномерных и многомерных массивов.
6. Чтение и запись табличных данных с помощью модулей numpy и pandas.
Построение графиков с помощью модуля matplotlib.
7. Модуль scipy: интегрирование, интерполяция и оптимизация. Краткий обзор
других возможностей.
8. Введение в astropy: физические и астрономические константы, размерные
вычисления, небесные координаты, работа с изображениями, чтение и запись
данных.
9. Примеры использования модулей astropy, astroquery и photutils. Получение
космологических параметров из диаграммы Хаббла по выборке JLA. Нахождение
вспыхивающих объектов на нескольких снимках одного участка неба.
10. Создание программных пакетов.
11. Введение в объектно-ориентированное программирование на языке Python:
классы, магические методы.
12. Тестирование кода. Особенности модульного тестирования в научных
программах. Применимость интеграционного тестирования в научных программах.
13. Веб-фреймворк Django и парадигма модель—шаблон—представление.
14. Короткие доклады слушателей курса о модулях стандартной библиотеки или
научных модулях. Например, argparse, date/datetime, cosmopy и т.д.
15. Параллельное исполнение кода на Python. Многопоточность и её
ограничения в CPython. Многопроцессорное выполнение и его ограничения в
связи с сериализацией данных с помощью модуля стандартной библиотеки
pickle.
16. Взаимодействие Python с программным кодом на других языках. Язык Cython
и использование библиотек и кода на языках C/C++ в Python.
Предусмотрен зачет в форме сдачи индивидуального проекта, в рамках выполняемой студентом научной работы.