Spec-Zone.ru › NumPy 2.0

Как внести вклад в документацию NumPy

Это руководство поможет вам определить, что внести, и как отправить свой вклад в официальную документацию NumPy.

Встречи команды документации

Сообщество NumPy поставило перед собой твердую цель улучшить документацию. Мы проводим регулярные встречи по документации в Zoom (даты объявляются на списке рассылки numpy-discussion), и все желающие могут принять в них участие. Свяжитесь с нами, если у вас есть вопросы или вам нужна помощь в ваших первых шагах – мы с удовольствием поможем. Протоколы записываются на hackmd.io и хранятся в репозитории NumPy Archive.

Что нужно

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

Нам не хватает документов с более широким охватом – учебников, руководств и объяснений. Отправка отчетов об ошибках также является способом внесения вклада. Мы обсуждаем оба аспекта.

Внесение исправлений

Мы с нетерпением ждем отчетов об ошибках в документации и их исправлений. Но, чтобы справиться с самыми сложными проблемами, нам приходится откладывать или игнорировать некоторые отчеты об ошибках. Вот лучшие ошибки, на которые стоит обратить внимание.

В первую очередь стоит обратить внимание на технические неточности – пропущенный параметр в строке документации, неточное описание функции/параметра/метода и так далее. Также в приоритете другие «структурные» ошибки, такие как неработающие ссылки. Все эти исправления легко проверить и внедрить. Вы можете отправить запрос на вытягивание (PR) с исправлением, если знаете как это сделать; в противном случае, пожалуйста, откройте вопрос.

Опечатки и орфографические ошибки стоят ниже; мы приветствуем сообщения об них, но не всегда можем исправить их оперативно. Эти ошибки тоже могут быть обработаны в виде запросов на вытягивание или вопросов.

Очевидные ошибки формулировок (например, пропущенное «не») относятся к категории опечаток, но другие переформулировки – даже грамматические – требуют взвешенного решения, что повышает планку. Протестируйте возможность решения, сначала представив исправление как вопрос.

У некоторых функций/объектов, таких как numpy.ndarray.transpose, numpy.array и др., определенных в модулях расширений C, строки документации определены отдельно в _add_newdocs.py

Внесение новых страниц

Ваши трудности при работе с нашими документами – лучшее руководство о том, что необходимо исправить.

Если вы напишете отсутствующий документ, вы присоединитесь к фронту открытого исходного кода, но это значительный вклад, просто чтобы сообщить нам, чего не хватает. Если вы хотите составить документ, обсудите свои мысли на списке рассылки для получения дополнительных идей и отзывов. Если вы хотите сообщить нам о пробеле, откройте вопрос. См. этот вопрос для примера.

Если вы ищете темы, наша официальная дорожная карта документации — Предложение по улучшению NumPy (NEP), NEP 44 — Реструктуризация документации NumPy. Он определяет области, в которых нашим документам нужна помощь, и перечисляет несколько дополнений, которые мы хотели бы видеть, включая записные книжки Jupyter.

Структура документации

Существуют формулы для написания полезных документов, и четыре формулы охватывают практически все. Существует четыре формулы, потому что существует четыре категории документов – tutorial, how-to guide, explanation, и reference. Понимание того, что документы делятся таким образом, принадлежит Даньеле Проциде и его фреймворку Diátaxis. Когда вы начинаете документ или предлагаете его, имейте в виду, к какому типу он относится.

Учебники NumPy

В дополнение к документации, которая является частью исходного дерева NumPy, вы можете отправлять контент в формате Jupyter Notebook на страницу Учебники NumPy. Этот набор учебных материалов и учебных пособий призван предоставить высококачественные ресурсы от проекта NumPy, как для самостоятельного обучения, так и для преподавания курсов. Эти ресурсы разрабатываются в отдельном репозитории GitHub, numpy-tutorials, где вы можете ознакомиться с существующими блокнотами, открыть вопросы, чтобы предложить новые темы, или отправить свои учебные материалы в виде запросов на вытягивание.

Больше о внесении вклада

Не беспокойтесь, если английский не ваш родной язык или если у вас есть только черновой вариант. Открытый исходный код – это совместная работа сообщества. Постарайтесь сделать все возможное – мы поможем исправить проблемы.

Изображения и реальные данные делают текст более интересным и эффективным, но убедитесь, что используемые вами изображения имеют соответствующие лицензии и доступны. Опять же, даже эскиз рисунка могут быть доработаны другими.

На данный момент форматы данных, принимаемые NumPy, — это те же форматы, которые используются другими Python-библиотеками для научных вычислений, такими как pandas, SciPy или Matplotlib. Мы разрабатываем пакет для поддержки большего количества форматов; обратитесь к нам за подробностями.

Документация NumPy хранится в исходном дереве кода. Чтобы включить ваш документ в базу данных документации, необходимо загрузить дерево, собрать его и отправить запрос на вытягивание. Если GitHub и запросы на вытягивание вам незнакомы, ознакомьтесь с нашим Руководством по внесению вклада.

Наш язык разметки — reStructuredText (rST), который более сложен, чем Markdown. Sphinx, инструмент, который многие Python-проекты используют для создания и связывания документации проекта, преобразует rST в HTML и другие форматы. Дополнительные сведения о rST можно найти в кратком руководстве по reStructuredText или в руководстве по reStructuredText

Внесение вклада косвенно

Если вы найдете внешний материал, который может быть полезным дополнением к документации NumPy, сообщите нам об этом, отправив вопрос.

Вам не нужно вносить вклад непосредственно в документацию, чтобы внести вклад в NumPy. Вы внесли свой вклад, если написали учебник на своем блоге, создали видео на YouTube или ответили на вопросы на Stack Overflow и других сайтах.

Стиль документации

Документация для пользователя

  • В общем случае, мы следуем руководству по стилю документации разработчиков Google для руководства пользователя.
  • Стиль NumPy регулирует случаи, когда:

    • У Google нет руководства, или
    • Мы предпочитаем не использовать стиль Google

    Наши текущие правила:

    • Мы склоняем index к indices, а не к indexes, следуя прецеденту numpy.indices.
    • Для согласованности мы также склоняем matrix к matrices.
  • Грамматические вопросы, недостаточно подробно рассмотренные в правилах NumPy или Google, решаются на основе раздела «Грамматика и использование» в последнем издании Справочника по стилю Чикагского университета.
  • Мы приветствуем уведомления о случаях, которые необходимо добавить в правила стиля NumPy.

Строки документации

При использовании Sphinx в сочетании с конвенциями NumPy, вы должны использовать numpydoc расширение, чтобы ваши строки документации обрабатывались правильно. Например, Sphinx извлечет Parameters раздел из вашей строки документации и преобразует его в список полей. Использование numpydoc также позволит избежать ошибок reStructuredText, создаваемых обычным Sphinx, когда он сталкивается с соглашениями NumPy для строк документации, такими как заголовки разделов (например, -------------), которых Sphinx не ожидает найти в строках документации.

Его можно получить от:

  • numpydoc на PyPI
  • numpydoc на GitHub

Обратите внимание, что для документации внутри NumPy не обязательно выполнять import numpy as np в начале примера.

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

Документирование кода C/C++

NumPy использует Doxygen для анализа специально отформатированных блоков комментариев C/C++. Это создаёт XML-файлы, которые преобразуются с помощью Breathe в RST, используемый Sphinx.

Процесс документирования состоит из трёх этапов:

1. Написание блоков комментариев

Хотя пока ещё не установлен единый стиль комментирования, Javadoc предпочтительнее других из-за сходства с существующими неиндексированными блоками комментариев.

Примечание

Пожалуйста, см. “Документирование кода”.

Вот как выглядит стиль Javadoc:

/**
 * This a simple brief.
 *
 * And the details goes here.
 * Multi lines are welcome.
 *
 * @param  num  leave a comment for parameter num.
 * @param  str  leave a comment for the second parameter.
 * @return      leave a comment for the returned value.
 */
int doxy_javadoc_example(int num, const char *str);

А вот как это отображается:

Предупреждение

doxygenfunction: Unable to resolve function “doxy_javadoc_example” with arguments None in doxygen xml output for project “numpy” from directory: ../build/doxygen/xml. Potential matches:

- int doxy_javadoc_example(int num, const char *str)
- int doxy_javadoc_example(int num, const char *str)
- int doxy_javadoc_example(int num, const char *str)

Для комментариев в строке можно использовать тройной слеш. Например:

/**
 *  Template to represent limbo numbers.
 *
 *  Specializations for integer types that are part of nowhere.
 *  It doesn't support with any real types.
 *
 *  @param Tp Type of the integer. Required to be an integer type.
 *  @param N  Number of elements.
*/
template<typename Tp, std::size_t N>
class DoxyLimbo {
 public:
    /// Default constructor. Initialize nothing.
    DoxyLimbo();
    /// Set Default behavior for copy the limbo.
    DoxyLimbo(const DoxyLimbo<Tp, N> &l);
    /// Returns the raw data for the limbo.
    const Tp *data();
 protected:
    Tp p_data[N]; ///< Example for inline comment.
};

А вот как это отображается:

template<typenameTp,std::size_tN>
classDoxyLimbo

Шаблон для представления чисел в состоянии limbo.

Специализации для целочисленных типов, которые являются частью ниоткуда. Он не поддерживает никакие реальные типы.

Param Tp:

Тип целого числа. Должен быть целочисленным типом.

Param N:

Количество элементов.

Открытые функции

DoxyLimbo()

Конструктор по умолчанию. Ничего не инициализирует.

DoxyLimbo(constDoxyLimbo<Tp,N>&l)

Устанавливает поведение по умолчанию для копирования limbo.

constTp*data()

Возвращает необработанные данные для limbo.

DoxyLimbo()

Конструктор по умолчанию. Ничего не инициализирует.

DoxyLimbo(constDoxyLimbo<Tp,N>&l)

Устанавливает поведение по умолчанию для копирования limbo.

constTp*data()

Возвращает необработанные данные для limbo.

DoxyLimbo()

Конструктор по умолчанию. Ничего не инициализирует.

DoxyLimbo(constDoxyLimbo<Tp,N>&l)

Устанавливает поведение по умолчанию для копирования limbo.

constTp*data()

Возвращает необработанные данные для limbo.

Защищённые атрибуты

Tpp_data[N]

Пример для комментария в строке.

Общие теги Doxygen:

Примечание

Для получения информации о других тегах/командах, пожалуйста, посмотрите https://www.doxygen.nl/manual/commands.html

@brief

Начинает абзац, служащий кратким описанием. По умолчанию первое предложение блока документации автоматически обрабатывается как краткое описание, поскольку параметр JAVADOC_AUTOBRIEF включён в конфигурации doxygen.

@details

Так же как @brief начинает краткое описание, @details начинает подробное описание. Можно также начать новый абзац (пустая строка), тогда команда @details не нужна.

@param

Начинает описание параметра для параметра функции с именем <parameter-name>, за которым следует описание параметра. Проверяется существование параметра, и выдаётся предупреждение, если документация этого (или любого другого) параметра отсутствует или не присутствует в объявлении или определении функции.

@return

Начинает описание возвращаемого значения для функции. Несколько соседних команд @return будут объединены в один абзац. Описание @return заканчивается, когда встречается пустая строка или какая-либо другая команда секционирования.

@code/@endcode

Начинает/завершает блок кода. Блок кода обрабатывается иначе, чем обычный текст. Он интерпретируется как исходный код.

@rst/@endrst

Начинает/завершает блок разметки reST.

Пример

Посмотрите на следующий пример:

/**
 * A comment block contains reST markup.
 * @rst
 * .. note::
 *
 *   Thanks to Breathe_, we were able to bring it to Doxygen_
 *
 * Some code example::
 *
 *   int example(int x) {
 *       return x * 2;
 *   }
 * @endrst
 */
void doxy_reST_example(void);

А вот как это отображается:

Предупреждение

doxygenfunction: Unable to resolve function “doxy_reST_example” with arguments None in doxygen xml output for project “numpy” from directory: ../build/doxygen/xml. Potential matches:

- void doxy_reST_example(void)
- void doxy_reST_example(void)
- void doxy_reST_example(void)

2. Подготовка данных для Doxygen

Не все заголовочные файлы собираются автоматически. Вам необходимо добавить требуемые пути к заголовочным файлам C/C++ в файлы конфигурации Doxygen.

Файлы подконфигурации имеют уникальное имя .doxyfile, которое обычно можно найти рядом с каталогами, содержащими документированные заголовочные файлы. Вам нужно создать новый файл конфигурации, если он отсутствует в папке на уровне (2-уровневой) папки с заголовочными файлами, которые вы хотите добавить.

Файлы подконфигурации могут принимать любые из настроек Doxygen, но не должны перезаписывать или повторно инициализировать какие-либо опции конфигурации, а использовать только оператор конкатенации «+=». Например:

# to specify certain headers
INPUT += @CUR_DIR/header1.h \
         @CUR_DIR/header2.h
# to add all headers in certain path
INPUT += @CUR_DIR/to/headers
# to define certain macros
PREDEFINED += C_MACRO(X)=X
# to enable certain branches
PREDEFINED += NPY_HAVE_FEATURE \
              NPY_HAVE_FEATURE2

Примечание

@CUR_DIR — это константа-шаблон, возвращающая путь к текущей папке файла подконфигурации.

3. Директивы включения

Breathe предоставляет широкий спектр пользовательских директив для преобразования документов, созданных Doxygen, в файлы reST.

Примечание

Дополнительную информацию можно найти в разделе «Директивы и переменные конфигурации»

Общие директивы:

doxygenfunction

Эта директива генерирует соответствующий вывод для одной функции. Имя функции должно быть уникальным в проекте.

.. doxygenfunction:: <function name>
    :outline:
    :no-link:

Пример использования можно посмотреть здесь.

doxygenclass

Эта директива генерирует соответствующий вывод для одного класса. Она принимает стандартные параметры проекта, пути, схемы и опции без ссылок, а также дополнительные опции members, protected-members, private-members, undoc-members, membergroups и members-only:

.. doxygenclass:: <class name>
   :members: [...]
   :protected-members:
   :private-members:
   :undoc-members:
   :membergroups: ...
   :members-only:
   :outline:
   :no-link:

Более подробную информацию и пример использования можно найти в документации по классам Doxygen.

doxygennamespace

Эта директива генерирует соответствующий вывод для содержимого пространства имен. Она принимает стандартные параметры проекта, пути, схемы и опции без ссылок, а также дополнительные опции content-only, members, protected-members, private-members и undoc-members. Для ссылки на вложенное пространство имен необходимо указать полный путь, например, foo::bar для пространства имен bar внутри пространства имен foo.

.. doxygennamespace:: <namespace>
   :content-only:
   :outline:
   :members:
   :protected-members:
   :private-members:
   :undoc-members:
   :no-link:

Более подробную информацию и пример использования можно найти в документации по пространствам имен Doxygen.

doxygengroup

Эта директива генерирует соответствующий вывод для содержимого группы Doxygen. Группа Doxygen может быть объявлена с помощью специальной разметки Doxygen в комментариях к исходному коду, как описано в документации Doxygen по группам. Она принимает стандартные параметры проекта, пути, схемы и опции без ссылок, а также дополнительные опции content-only, members, protected-members, private-members и undoc-members.

.. doxygengroup:: <group name>
   :content-only:
   :outline:
   :members:
   :protected-members:
   :private-members:
   :undoc-members:
   :no-link:
   :inner:

Более подробную информацию и пример использования можно найти в документации по группам Doxygen.

Директива устаревшего кода

Если функция, модуль или API находится в режиме legacy (устаревший), то есть сохраняется для обратной совместимости, но не рекомендуется к использованию в новом коде, вы можете использовать директиву .. legacy::.

По умолчанию, если используется без аргументов, директива legacy сгенерирует следующий вывод:

Устаревший

Этот подмодуль считается устаревшим и больше не будет получать обновлений. Это также может означать его удаление в будущих версиях NumPy.

Мы настоятельно рекомендуем также добавить пользовательское сообщение, например, ссылку на новый API, заменяющий старый:

.. legacy::

   For more details, see :ref:`distutils-status-migration`.

Это сообщение будет добавлено к стандартному сообщению и создаст следующий вывод:

Устаревший

Этот подмодуль считается устаревшим и больше не будет получать обновлений. Это также может означать его удаление в будущих версиях NumPy. Для получения дополнительной информации см. Статус numpy.distutils и рекомендации по миграции.

Наконец, если вы хотите упомянуть функцию, метод (или любой другой пользовательский объект) вместо подмодуля, вы можете использовать необязательный аргумент:

.. legacy:: function

Это создаст следующий вывод:

Устаревший

Эта функция считается устаревшей и больше не будет получать обновлений. Это также может означать её удаление в будущих версиях NumPy.

Чтение документации

  • Ведущий организатор технических авторов Write the Docs проводит конференции, предоставляет обучающие ресурсы и управляет каналом Slack.
  • «Каждый инженер — также писатель», — говорит Google в своей коллекции ресурсов по технической документации, которая включает бесплатные онлайн-курсы для разработчиков по планированию и написанию документов.
  • Software Carpentry стремится обучать исследователей программному обеспечению. Помимо предоставления учебного плана, сайт объясняет, как эффективно представлять идеи.

© 2005–2024 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/2.0/dev/howto-docs.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API