Pandas: [Хороший первый выпуск] TST: запретить использование только pytest.raises

Созданный на 14 янв. 2020  ·  51Комментарии  ·  Источник: pandas-dev/pandas

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

Основная идея состоит в том, чтобы преобразовать это:

with pytest.raises(klass):
    # Some code that raise an error

К этому:

with pytest.raises(klass, match=msg):
    # Some code that raise an error

Вы можете узнать больше о pytest.raises здесь .


Примечание:

В случае, если появившееся сообщение об ошибке является внешним сообщением об ошибке (что означает, что это не относится к пандам), вы должны использовать external_error_raised вместо pytest.raises .

использование external_error_raised __exactly__ как pytest.raises той лишь разницей, что вы не передаете аргумент match .

Например:

import pandas._testing as tm

def test_foo():
    with tm.external_error_raised(ValueError):
        raise ValueError("foo")

Ключевые моменты:

  • Не забудьте связать этот вопрос в своем PR, вставьте это
https://github.com/pandas-dev/pandas/issues/30999

в вашем PR.

  • Прокомментируйте, над чем вы планируете работать, чтобы мы не выполняли двойную работу (не нужно упоминать меня, вы можете просто заявить, над чем вы планируете работать, просто не забудьте проверить, не что-то уже занято).

  • Если файл / файлы, которые должны быть помечены как «выполненные» (как будто больше нет работы), не помечены как «выполненные», прокомментируйте, сообщив мне об этом (и упомянув меня, поставив @MomIsBestFriend в теле комментария, так что я знаю, где искать).


Чтобы самостоятельно сгенерировать полный список, вы можете запустить:

python scripts/validate_unwanted_patterns.py -vt="bare_pytest_raises" pandas/tests/

Вы также можете запустить его для одного файла, например:

python scripts/validate_unwanted_patterns.py -vt="bare_pytest_raises" pandas/tests/PATH/TO/SPECIFIC/FILE.py

Если файл содержит пустой pytest.raises , сценарий выдаст следующее:

pandas/tests/arithmetic/test_numeric.py:553:Bare pytests raise have been found. Please pass in the argument 'match' as well the exception

Это означает, что в pandas/tests/arithmetic/test_numeric.py в строке 553 есть пустой pytest.raises


Текущий список:

  • [x] панды / тесты / io / pytables / test_timezones.py
  • [] панды / тесты / общий / методы / test_pipe.py
  • [] панды / тесты / изменить форму / слияние / test_merge_asof.py
  • [] панды / тесты / расширение / база / reduce.py
  • [x] панды / тесты / массивы / test_datetimelike.py
  • [] панды / тесты / расширение / test_boolean.py
  • [] панды / тесты / расширение / база / getitem.py
  • [] панды / тесты / массивы / логические / test_arithmetic.py
  • [] панды / тесты / расширение / база / setitem.py
  • [] панды / тесты / индексы / интервал / test_astype.py
  • [] панды / тесты / io / парсер / test_network.py
  • [] панды / тесты / расширение / test_integer.py
  • [] панды / тесты / индексирование / мультииндекс / test_partial.py
  • [] панды / тесты / io / парсер / test_python_parser_only.py
  • [] панды / тесты / io / test_html.py
  • [] панды / тесты / сокращения / test_stat_reductions.py
  • [] панды / тесты / dtypes / test_inference.py
  • [] панды / тесты / построение / test_hist_method.py
  • [] панды / тесты / серии / применить / test_series_apply.py
  • [] панды / тесты / io / excel / test_xlrd.py
  • [] панды / тесты / индексы / test_common.py
  • [] панды / тесты / util / test_assert_series_equal.py
  • [] панды / тесты / расширение / база / ops.py
  • [] панды / тесты / io / test_clipboard.py
  • [] панды / тесты / построение / кадр / test_frame_color.py
  • [] панды / тесты / окно / моменты / test_moments_ewm.py
  • [] панды / тесты / io / test_gbq.py
  • [] панды / тесты / сокращения / test_reductions.py
  • [] панды / тесты / io / test_feather.py
  • [] панды / тесты / resample / test_resampler_grouper.py
  • [] панды / тесты / индексы / мульти / test_indexing.py
  • [] панды / тесты / io / test_common.py
  • [] панды / тесты / io / test_sql.py
  • [] панды / тесты / построение / test_series.py
  • [] панды / тесты / io / test_fsspec.py
  • [] панды / тесты / расширение / test_floating.py
  • [] панды / тесты / индексы / мульти / test_setops.py
  • [] панды / тесты / reshape / test_get_dummies.py
  • [] панды / тесты / построение / кадр / test_frame_subplots.py
  • [] панды / тесты / построение / test_backend.py
  • [] панды / тесты / общий / методы / test_sample.py
  • [] панды / тесты / построение / test_boxplot_method.py
  • [] панды / тесты / io / test_parquet.py
  • [] панды / тесты / расширение / test_string.py
  • [] панды / тесты / io / pytables / test_complex.py
  • [] панды / тесты / индексы / test_numpy_compat.py
  • [] панды / тесты / io / test_gcs.py
  • [] панды / тесты / io / sas / test_sas7bdat.py
  • [] панды / тесты / окно / test_apply.py
  • [] панды / тесты / серии / test_ufunc.py
  • [] панды / тесты / построение / кадр / test_frame.py
  • [] панды / тесты / reshape / test_union_categoricals.py
  • [] панды / тесты / io / json / test_ujson.py
  • [] панды / тесты / индексация / test_coercion.py
  • [] панды / тесты / io / pytables / test_store.py
  • [] панды / тесты / вычисления / test_compat.py
  • [] панды / тесты / io / json / test_pandas.py
  • [] панды / тесты / io / json / test_json_table_schema.py

    - [] панды / тесты / скаляр / test_nat.py

ЗАМЕТКА:

Список может меняться по мере постоянного перемещения / переименования файлов.


Взял почти все из # 23922, который изначально был открыт @gfyoung.

Style Testing good first issue

Все 51 Комментарий

Я возьму:

  • [x] панды / тесты / test_common.py
  • [x] панды / тесты / test_downstream.py
  • [x] панды / тесты / test_errors.py
  • [x] панды / тесты / test_lib.py
  • [x] панды / тесты / test_take.py
  • [x] панды / тесты / внутренности / test_internals.py
  • [x] панды / тесты / окно / test_rolling.py

Начну работать над:

панды / тесты / арифметика / test_numeric.py
панды / тесты / арифметика / test_object.py
панды / тесты / арифметика / test_period.py
панды / тесты / арифметика / test_timedelta64.py
панды / тесты / массивы / интервал / test_interval.py

@ gdex1 Надеюсь, это вам поможет :)

(Цифры представляют номер строки)

pandas/tests/arithmetic/test_numeric.py:138
pandas/tests/arithmetic/test_numeric.py:141
pandas/tests/arithmetic/test_numeric.py:190
pandas/tests/arithmetic/test_numeric.py:208
pandas/tests/arithmetic/test_numeric.py:210
pandas/tests/arithmetic/test_numeric.py:212
pandas/tests/arithmetic/test_numeric.py:214
pandas/tests/arithmetic/test_numeric.py:232
pandas/tests/arithmetic/test_numeric.py:234
pandas/tests/arithmetic/test_numeric.py:236
pandas/tests/arithmetic/test_numeric.py:238
pandas/tests/arithmetic/test_numeric.py:519
pandas/tests/arithmetic/test_numeric.py:610
pandas/tests/arithmetic/test_numeric.py:615
pandas/tests/arithmetic/test_numeric.py:617
pandas/tests/arithmetic/test_numeric.py:795
pandas/tests/arithmetic/test_numeric.py:798
pandas/tests/arithmetic/test_numeric.py:819
pandas/tests/arithmetic/test_object.py:140
pandas/tests/arithmetic/test_object.py:152
pandas/tests/arithmetic/test_object.py:154
pandas/tests/arithmetic/test_object.py:278
pandas/tests/arithmetic/test_object.py:280
pandas/tests/arithmetic/test_object.py:282
pandas/tests/arithmetic/test_object.py:284
pandas/tests/arithmetic/test_object.py:298
pandas/tests/arithmetic/test_object.py:301
pandas/tests/arithmetic/test_object.py:315
pandas/tests/arithmetic/test_object.py:318



md5-634e15eb80aa764171dbacd11a06b70b



pandas/tests/arithmetic/test_timedelta64.py:51
pandas/tests/arithmetic/test_timedelta64.py:445
pandas/tests/arithmetic/test_timedelta64.py:607
pandas/tests/arithmetic/test_timedelta64.py:609
pandas/tests/arithmetic/test_timedelta64.py:703
pandas/tests/arithmetic/test_timedelta64.py:705
pandas/tests/arithmetic/test_timedelta64.py:707
pandas/tests/arithmetic/test_timedelta64.py:709
pandas/tests/arithmetic/test_timedelta64.py:741
pandas/tests/arithmetic/test_timedelta64.py:743
pandas/tests/arithmetic/test_timedelta64.py:960
pandas/tests/arithmetic/test_timedelta64.py:972
pandas/tests/arithmetic/test_timedelta64.py:1028
pandas/tests/arithmetic/test_timedelta64.py:1037
pandas/tests/arithmetic/test_timedelta64.py:1039
pandas/tests/arithmetic/test_timedelta64.py:1502
pandas/tests/arithmetic/test_timedelta64.py:1505
pandas/tests/arithmetic/test_timedelta64.py:1508
pandas/tests/arithmetic/test_timedelta64.py:1511
pandas/tests/arithmetic/test_timedelta64.py:1536
pandas/tests/arithmetic/test_timedelta64.py:1591
pandas/tests/arithmetic/test_timedelta64.py:1783
pandas/tests/arithmetic/test_timedelta64.py:1785
pandas/tests/arithmetic/test_timedelta64.py:1911
pandas/tests/arithmetic/test_timedelta64.py:1960
pandas/tests/arithmetic/test_timedelta64.py:1962
pandas/tests/arithmetic/test_timedelta64.py:1968



md5-634e15eb80aa764171dbacd11a06b70b



pandas/tests/arrays/interval/test_interval.py:155

@gfyoung список не был сгенерирован grep -r -e "pytest.raises([a-zA-Z]*)" pandas/tests -l на самом деле, он был сгенерирован скриптом в # 30755 (тип проверки называется bare_pytest_raises ), я помещу инструкции в тело задачи, один раз он сливается: smile:

@MomIsBestFriend Я помогу с:
панды / тесты / база / test_constructors.py
панды / тесты / база / test_ops.py

Я могу позаботиться об этом:
@MomIsBestFriend

панды / тесты / io / test_html.py
панды / тесты / io / test_parquet.py
панды / тесты / io / test_sql.py
панды / тесты / io / test_stata.py
панды / тесты / построение / test_backend.py
панды / тесты / построение / test_boxplot_method.py
панды / тесты / построение / test_frame.py
панды / тесты / построение / test_hist_method.py
панды / тесты / построение / test_series.py
панды / тесты / сокращения / test_reductions.py

@MomIsBestFriend было довольно много обсуждения в https://github.com/pandas-dev/pandas/issues/23922, которое собиралось об этом. Потому что, повторюсь, как я там сказал: я не думаю, что мы должны «вслепую» утверждать все сообщения об ошибках.

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

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

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

@jorisvandenbossche

@MomIsBestFriend в # 23922 было довольно много дискуссий по этому поводу. Потому что, повторюсь, как я там сказал: я не думаю, что мы должны «вслепую» утверждать все сообщения об ошибках.

Я полностью согласен, но проблема в том, что новички не знают, какие сообщения об ошибках утверждать и какие сообщения об ошибках не утверждать, если мы каким-то образом определим правила о том, какие сообщения об ошибках утверждать, а какие не утверждать, и в то же время сохраняя этот вопрос "для новичков", будет здорово (ИМО).

Кроме того, если мы планируем применить это в CI, нам нужно каким-то образом отметить, что bare pytest raises намеренно "голые" (достаточно комментария IMO в стиле isort: skip ), а также другие люди будут знать, что конкретный bare pytest raise намеренно пуст.

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

Я не понимаю, почему мы не хотели бы тестировать внутренние сообщения об ошибках, не могли бы вы уточнить еще больше?

Я вижу то, что вы указали в https://github.com/pandas-dev/pandas/issues/23922#issuecomment -458551763, и я на это +1 , но я +2 (если это имеет смысл) на https://github.com/pandas-dev/pandas/issues/23922#issuecomment -458733117 и https://github.com/pandas-dev/pandas/issues/ 23922 # issuecomment -458735169, потому что IMO выгода больше, чем стоимость.

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

Абсолютно согласен.

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

Я прочитал беседу по номеру 23922, но я не увидел ничего, что ИМО стоило бы поместить в виде «примечания» в тело проблемы. Не могли бы вы указать на то, что я пропустил?

Я прочитал беседу по номеру 23922, но я не увидел ничего, что ИМО стоило бы поместить в виде «примечания» в тело проблемы. Не могли бы вы указать на то, что я пропустил?

Я тоже не вижу ничего нового, что можно было бы добавить по этому поводу.

Я полностью согласен, но проблема в том, что новички не знают, какие сообщения об ошибках утверждать и какие сообщения об ошибках не утверждать, если мы каким-то образом определим правила о том, какие сообщения об ошибках утверждать, а какие не утверждать, и в то же время сохраняя этот вопрос "для новичков", будет здорово (ИМО).

Кроме того, если мы планируем обеспечить это в CI, нам нужно как-то отметить, какие простые запросы pytest являются «голыми» намеренно (комментарий IMO со стилем isort: skip достаточно), а также, чтобы другие люди знали, что конкретный голый pytest поднять голый нарочно.

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

Кроме того, если эти «внутренние» сообщения не так важны, почему у нас вообще появляется сообщение об ошибке? Затем я бы просто создал помощника, который затем подтвердил бы, что сообщение пусто.

Я не понимаю, почему мы не хотели бы тестировать внутренние сообщения об ошибках, не могли бы вы уточнить еще больше?

Итак, я сказал «ограничение на количество сообщений о внутренних ошибках», в то время как «внутренние» могут быть немного двусмысленными ... Я имел в виду: сообщения об ошибках, которые исходят от самих pandas, и, конечно же, мы хотим их протестировать. Но я имел в виду, что мы (IMO) не должны тестировать слишком много внешних сообщений об ошибках, то есть сообщений, поступающих, например, из numpy или других библиотек. Numpy может их изменить, а затем наши тесты начинают терпеть неудачу из-за косметического изменения в numpy (и это не гипотетически, это произошло только на прошлой неделе, я думаю).

Теперь я использовал «внутренний» в другом контексте в https://github.com/pandas-dev/pandas/pull/30998#discussion_r366726966. Я имел в виду внутреннее сообщение об ошибке, ориентированное на разработчика, которое никогда не должно сообщаться пользователю. ИМО, это не важно, чтобы тестировать именно с сообщением об ошибке.

Я вижу то, что вы указали в # 23922 (комментарий), и я +1 к этому, но я +2 (если это имеет какой-либо смысл) на # 23922 (комментарий) и # 23922 (комментарий), потому что ИМО выгода больше, чем стоимость.

Давайте поместим комментарий ссылаетесь здесь:

Я исхожу из предположения, возможно, неверно, что это будет полезно для

  1. определить тесты, которые можно параметризовать
  2. определить тесты, которые следует разделить
  3. лучшее понимание протестированного режима отказа
  4. косвенно добавить дополнительную документацию к тестам
  5. определить, где сообщения об ошибках могут быть более последовательными
  6. определить тесты, которые являются избыточными
  7. помогите улучшить сообщения об ошибках
  8. определить тесты, которые в настоящее время сдают по неправильной причине.

Это все полезные вещи, я полностью согласен. Но это непросто, и если мы хотим решить эту проблему, то эта проблема не для новичков. Конечно, новичкам не нужно делать все это сразу, но у меня все еще есть ощущение, что эти PR, добавляющие утверждения, часто довольно близки к «слепому добавлению текущего сообщения об ошибке в вызов pytest.raises» без каких-либо действий. далее (по пунктам выше).

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


Чтобы быть ясным, я за лучшие сообщения об ошибках и лучшие тесты, подтверждающие, что у нас есть и поддерживающие эти сообщения об ошибках. Но у нас также есть ограниченное время, и каждый PR требует времени и усилий, чтобы сделать и проанализировать, и вопрос в том, на что лучше всего потратить усилия.
ИМО, было бы более полезно вместо этого сосредоточиться на «исправлении простых повышений pytest», а не на «улучшении сообщений об ошибках» (и при этом лучше тестировать их).

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

Возможно, имеет смысл создать более крупную проблему для их отслеживания (другие проблемы, которые стоит включить в такую ​​проблему, - это https://github.com/pandas-dev/pandas/issues/19159 и https://github.com/pandas- dev / pandas / issues / 21575).

Эта часть самодостаточна и очень доступна для начинающих.

@gfyoung, как вопросы, на которые вы

Они относятся к комментарию, который вы явно представили от @simonjayhawkins.

31072 содержит одно отсутствующее совпадение в stata.py

Как говорится здесь https://github.com/pandas-dev/pandas/pull/31091#issuecomment -575422207 Я согласен с идеей

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

~ питонdef external_error_raised (ожидаемое_ исключение):вернуть pytest.raises (ожидаемое_ исключение, совпадение = нет)~

Это даст нам понять, что это ошибка, не связанная с пандами, и match=None служит для успокоения любой проверки линтинга, которую мы разрабатываем для простых рейзов pytest .

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

def external_error_raised(expected_exception):
   return pytest.raises(expected_exception, match=None)

Это даст нам понять, что это ошибка, не связанная с пандами, и match=None служит для успокоения любой проверки линтинга, которую мы разрабатываем для простых pytest рейзов.

+1 на это.

Мне очень нравится эта идея, можем ли мы сделать ее условной для наших тестов?

Если функция проверяет, вызывает ли функция / метод ошибку, а ошибка является внешней ошибкой, мы просто помещаем match=None в «pytest.raises».

мы можем сделать это условием для наших тестов?

Под этим я подразумеваю включение раздела в руководство по содействию .

Если функция проверяет, вызывает ли функция / метод ошибку, а ошибка является внешней ошибкой, мы просто помещаем match = None в «pytest.raises».

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

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

def external_error_raised(expected_exception):
   return pytest.raises(expected_exception, match=None)

Это даст нам понять, что это ошибка, не связанная с пандами, и match=None служит для успокоения любой проверки линтинга, которую мы разрабатываем для простых pytest рейзов.

@gfyoung где вы рекомендуете разместить эту вспомогательную функцию? (как будто в каком файле?)

pandas._testing

Привет,

Я бы хотел поработать:

панды / тесты / массивы / интервал / test_ops.py
панды / тесты / массивы / test_array.py
панды / тесты / массивы / test_boolean.py

Здравствуйте! Я бы хотел поработать:

панды / тесты / арифметика / test_period.py
панды / тесты / арифметика / test_timedelta64.py

Всем привет, возьму следующее:

панды / тесты / вычисления / test_compat.py
панды / тесты / вычисления / test_eval.py
панды / тесты / dtypes / cast / test_upcast.py
панды / тесты / dtypes / test_dtypes.py

@MomIsBestFriend это уже сделано, но не отмечено как выполненное:
панды / тесты / арифметика / test_numeric.py

ОБНОВИТЬ

@MomIsBestFriend тоже:
панды / тесты / арифметика / test_period.py
панды / тесты / массивы / test_integer.py
панды / тесты / массивы / test_period.py

Они включены в # 31852

панды / тесты / расширение / десятичный / test_decimal.py
панды / тесты / расширение / json / test_json.py
панды / тесты / расширение / test_boolean.py
панды / тесты / расширение / test_categorical.py
панды / тесты / кадр / индексация / test_categorical.py
панды / тесты / кадр / индексация / test_indexing.py
панды / тесты / кадр / индексация / test_where.py
панды / тесты / кадр / методы / test_explode.py
панды / тесты / кадр / методы / test_isin.py
панды / тесты / кадр / методы / test_quantile.py
панды / тесты / кадр / методы / test_round.py
панды / тесты / кадр / методы / test_sort_values.py
панды / тесты / кадр / методы / test_to_dict.py

Я возьму

панды / тесты / io / Excel / test_readers.py
панды / тесты / io / Excel / test_writers.py
панды / тесты / io / Excel / test_xlwt.py
панды / тесты / io / форматы / test_format.py
панды / тесты / io / форматы / test_style.py
панды / тесты / io / форматы / test_to_latex.py

@MomIsBestFriend
Эти сделаны без отметки:

  • панды / тесты / индексы / datetime / test_astype.py

pandas / tests / indexes / datetimes / test_tools.py не существует

Я сделаю:

  • панды / тесты / индексы / datetimes / test_constructors.py
  • панды / тесты / индексы / datetimes / test_date_range.py
  • панды / тесты / индексы / datetimes / test_indexing.py
  • панды / тесты / индексы / datetimes / test_shift.py
  • панды / тесты / индексы / datetimes / test_timezones.py

Я обновил исходный пост, теперь, когда есть скрипт для обнаружения голого pytest raises я включил инструкции по его использованию, если у кого-то все еще есть вопросы, вы можете их задать :)

Я возьму,

панды / тесты / арифметика / test_timedelta64.py

панды / тесты / скаляр / отметка времени / test_arithmetic.py
панды / тесты / скаляр / отметка времени / test_comparisons.py
панды / тесты / скаляр / отметка времени / test_constructors.py
панды / тесты / скаляр / отметка времени / test_timezones.py
панды / тесты / скаляр / отметка времени / test_unary_ops.py

кажется, все тесты в пандах / tests / scalar / timestamp / уже исправлены.

$ git checkout master
Already on 'master'
$ python scripts/validate_unwanted_patterns.py -vt="bare_pytest_raises"  pandas/tests/scalar/timestamp/
$ 

pandas / tests / array / test_boolean.py => отсутствует.

я говорю
панды / тесты / массивы / интервал / test_ops.py
панды / тесты / массивы / test_datetimelike.py

панды / тесты / groupby / test_categorical.py
панды / тесты / groupby / test_groupby.py
панды / тесты / groupby / test_timegrouper.py

панды / тесты / арифметика / test_timedelta64.py => # 33010

pandas / tests / scalar / timestamp / test_arithmetic.py => нет проблем
pandas / tests / scalar / timestamp / test_comparisons.py => нет проблем
pandas / tests / scalar / timestamp / test_constructors.py => нет проблем
pandas / tests / scalar / timestamp / test_timezones.py => нет проблем
pandas / tests / scalar / timestamp / test_unary_ops.py => нет проблем

pandas / tests / array / test_boolean.py => отсутствует.

панды / тесты / массивы / интервал / test_ops.py => # 33010
панды / тесты / массивы / test_datetimelike.py => # 33010

панды / тесты / groupby / test_categorical.py => # 33144
pandas / tests / groupby / test_groupby.py => нет проблем
pandas / tests / groupby / test_timegrouper.py => нет проблем

pandas / tests / indexes / category / test_category.py => нет проблем
панды / тесты / индексы / common.py # 33144
панды / тесты / индексы / datetimelike.py # 33144

pandas / tests / indexes / interval / test_astype.py => все затронутые тесты помечены как xfailed, нам все еще нужно исправить, так как?

панды / тесты / индексы / мульти / test_compat.py # 33144
pandas / tests / indexes / multi / test_duplicates.py => нет проблем
pandas / tests / indexes / multi / test_format.py => файл не найден.
панды / тесты / индексы / мульти / test_reshape.py # 33144
pandas / tests / indexes / multi / test_setops.py => нет проблем
панды / тесты / индексы / мульти / test_sorting.py # 33144

@ sumanau7 вы перечислили файлы, которые вы принимаете? Я работаю над некоторыми файлами, которые, как я вижу, вы объединили.

Сделано с

pandas/tests/indexes/categorical/test_category.py
pandas/tests/indexes/period/test_constructors.py
pandas/tests/indexes/period/test_join.py
pandas/tests/indexes/period/test_partial_slicing.py
pandas/tests/indexes/period/test_setops.py
pandas/tests/indexes/timedeltas/test_delete.py

Я работаю с

панды / тесты / индексы / диапазоны / test_constructors.py
панды / тесты / индексы / диапазоны / test_range.py
панды / тесты / индексация / мультииндекс / test_chaining_and_caching.py
панды / тесты / индексация / мультииндекс / test_partial.py
панды / тесты / серии / индексация / test_alter_index.py
панды / тесты / массивы / логические / test_function.py

Работа над:

pandas/tests/reshape/merge/test_multi.py

Я возьму:
панды / тесты / окно / моменты / test_moments_ewm.py
панды / тесты / окно / моменты / test_moments_rolling.py
панды / тесты / окно / test_dtypes.py
панды / тесты / окно / test_ewm.py
панды / тесты / окно / test_expanding.py
панды / тесты / окно / test_timeseries_window.py

Я также возьму:

  • панды / тесты / кадр / методы / test_assign.py
  • панды / тесты / кадр / методы / test_at_time.py
  • панды / тесты / кадр / методы / test_between_time.py
  • панды / тесты / кадр / методы / test_first_and_last.py
  • панды / тесты / кадр / методы / test_interpolate.py
  • панды / тесты / кадр / методы / test_replace.py
  • панды / тесты / кадр / test_query_eval.py

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

Спасибо,
Кевин

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

Спасибо,
Кевин

Добро пожаловать - я не думаю, что какие-либо из них легче или сложнее, чем другие, с любого из них можно было бы начать

Я получаю сообщение об ошибке при запуске скрипта validate_unwanted_patterns.py:

Traceback (most recent call last):
  File "C:\Users\Kevom\git\pandas\scripts\validate_unwanted_patterns.py", line 397, in <module>
    main(
  File "C:\Users\Kevom\git\pandas\scripts\validate_unwanted_patterns.py", line 352, in main
    for line_number, msg in function(file_obj):
  File "C:\Users\Kevom\git\pandas\scripts\validate_unwanted_patterns.py", line 88, in bare_pytest_raises
    contents = file_obj.read()
  File "C:\Program Files (x86)\Python\lib\encodings\cp1252.py", line 23, in decode
    return codecs.charmap_decode(input,self.errors,decoding_table)[0]
UnicodeDecodeError: 'charmap' codec can't decode byte 0x8d in position 76843: character maps to <undefined>

Это происходит при чтении pandas / tests / test_strings.py. Все файлы имеют кодировку cp1252.

Я хотел запустить сценарий, чтобы дважды проверить, какие тесты еще не завершены, чтобы избежать дублирования работы.

Большинство NotImplementedError s не имеют конкретного сообщения, которое нужно сопоставить, я знаю, что это своего рода поражение цели, но было бы неплохо изменить их на pytest.raises(NotImplementedError, match=None) просто чтобы заглушить линтер ?

Я возьму:

  • панды / тесты / инструменты / test_to_datetime.py
  • панды / тесты / tseries / смещения / test_offsets.py

начать.

-Кевин

Я новичок в этом, поэтому начну с этого:

  • панды / тесты / tseries / смещения / test_ticks.py

Здравствуйте, я новичок в участии. Спасибо за четкое описание вопроса. Я начну с pandas/tests/generic/test_duplicate_labels.py и попробую еще, если получится.

Для начала возьму pandas / tests / array / test_datetimelike.py.
Кроме того, если вы не можете запустить python scripts/validate_unwanted_patterns.py -vt="bare_pytest_raises" pandas/tests/ успешно, попробуйте
python scripts/validate_unwanted_patterns.py -vt="bare_pytest_raises" pandas/tests/**/*.py вместо

Самый простой способ запустить его сейчас - добавить

    -   id: unwanted-patterns-bare-pytest-raises
        name: Check for use of bare use of pytest raises
        language: python
        entry: python scripts/validate_unwanted_patterns.py --validation-type="bare_pytest_raises"
        types: [python]
        files: ^pandas/tests/

в .pre-commit-config.yaml в разделе - repo: local , а затем запустите

pre-commit run unwanted-patterns-bare-pytest-raises --all-files.

Я обновил проблему с оставшимися незавершенными файлами

Я могу взять эти:

  • [x] панды / тесты / io / pytables / test_timezones.py
  • [] панды / тесты / общий / методы / test_pipe.py
  • [] панды / тесты / изменить форму / слияние / test_merge_asof.py
  • [] панды / тесты / расширение / база / reduce.py
  • [] панды / тесты / расширение / база / getitem.py
  • панды / тесты / массивы / test_datetimelike.py

На сегодняшний день это первая пятерка в списке.

@marktgraham Если вы еще не сделали test_datetime.py . Пожалуйста, оставьте это в покое, так как я собираюсь устроить пиар

@ liaoaoyuan97, не беспокойтесь, я еще не трогал test_datetimelike.py .

Вместо этого я возьму pandas / tests / extension / base / getitem.py.

validate_unwanted_patterns.py вызывает ошибку с моей стороны

$ python scripts/validate_unwanted_patterns.py -vt="bare_pytest_raises" pandas/tests/
Traceback (most recent call last):
  File "scripts/validate_unwanted_patterns.py", line 479, in <module>
    output_format=args.format,
  File "scripts/validate_unwanted_patterns.py", line 435, in main
    with open(file_path, encoding="utf-8") as file_obj:
IsADirectoryError: [Errno 21] Is a directory: 'pandas/tests/'

Возможно, это связано с # 37419?

Я пробовал использовать подход, предложенный @MarcoGorelli, и работал отлично.

Самый простой способ запустить его сейчас - добавить

    -   id: unwanted-patterns-bare-pytest-raises
        name: Check for use of bare use of pytest raises
        language: python
        entry: python scripts/validate_unwanted_patterns.py --validation-type="bare_pytest_raises"
        types: [python]
        files: ^pandas/tests/

в .pre-commit-config.yaml в разделе - repo: local , а затем запустите

pre-commit run unwanted-patterns-bare-pytest-raises --all-files.

Есть ли смысл добавить это в .pre-commit-config.yaml а затем обновить инструкции в этой ветке?

Имеет ли смысл добавить это в .pre-commit-config.yaml, а затем обновить инструкции в этом потоке?

Мы добавим его в .pre-commit-config.yaml только все возникающие ошибки будут исправлены, да

Возможно, это связано с # 37419?

Нет, это связано с # 37379 (когда мы переместили этот скрипт на предварительную фиксацию, поэтому больше не было необходимости запускать его в каталогах)

Была ли эта страница полезной?
0 / 5 - 0 рейтинги