Маланчев К. Л.

Маланчев Константин Леонидович

Описание курса:

Современный исследователь в сфере теоретической астрофизики, астрономии и небесной механики должен владеть не только знаниями в своей узкой предметной области, но и широкими познаниями в математике и физике, умением говорить и писать на английском языке, пользоваться системами подготовки текстов к публикации. К этому списку нужно добавить и умение программировать. Процесс написания программ требует не только базовых знаний об алгоритмах и работе компьютера, которые студент получает на первых курсах, но и практических знаний в области конкретных языков программирования, библиотек и инструментов разработки. Настоящий курс предлагает слушателю познакомиться или развить имеющиеся навыки программирования на языке 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.

Предусмотрен зачет в форме сдачи индивидуального проекта, в рамках выполняемой студентом научной работы.