Pandas: [Boa primeira edição] TST: Proibir pytest.raises vazio

Criado em 14 jan. 2020  ·  51Comentários  ·  Fonte: pandas-dev/pandas

Os usuários finais contam com mensagens de erro para fins de depuração. Portanto, é importante que nos certifiquemos de que as mensagens de erro corretas sejam exibidas dependendo do erro disparado.

A ideia central é converter isso:

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

Para isso:

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

Você pode ler mais sobre pytest.raises aqui .


Nota:

Caso a mensagem de erro levantada seja uma mensagem de erro externa (o que significa que não é específico do pandas), você deve usar external_error_raised vez de pytest.raises .

o uso de external_error_raised é __exatamente__ como pytest.raises a única diferença é que você não passa o argumento match .

Por exemplo:

import pandas._testing as tm

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

Keynotes:

  • Não se esqueça de vincular este problema em seu PR, cole isto
https://github.com/pandas-dev/pandas/issues/30999

em seu PR.

  • Por favor, comente o que você está planejando trabalhar, para que não façamos o dobro do trabalho (não precisa me citar, você pode apenas declarar o que está planejando trabalhar, mas lembre-se de verificar se algo já foi levado).

  • Se um arquivo / arquivos que deveriam ser marcados como "concluídos" (como se não houvesse mais trabalho a fazer) não estiverem marcados como "concluídos", por favor, comente informando-me sobre isso (e mencionando-me colocando @MomIsBestFriend no corpo do comentário, então saberei onde procurar).


Para gerar a lista completa sozinho, você pode executar:

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

Você também pode executá-lo em um único arquivo, como:

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

Se um arquivo contiver pytest.raises nua, o script produzirá o seguinte:

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

O que significa que em pandas/tests/arithmetic/test_numeric.py na linha 553 há apenas pytest.raises


A lista atual é:

  • [x] pandas / tests / io / pytables / test_timezones.py
  • [] pandas / tests / generic / methods / test_pipe.py
  • [] pandas / tests / reshape / merge / test_merge_asof.py
  • [] pandas / tests / extension / base / reduce.py
  • [x] pandas / tests / arrays / test_datetimelike.py
  • [] pandas / tests / extension / test_boolean.py
  • [] pandas / tests / extension / base / getitem.py
  • [] pandas / tests / arrays / boolean / test_arithmetic.py
  • [] pandas / tests / extension / base / setitem.py
  • [] pandas / tests / indexes / interval / test_astype.py
  • [] pandas / tests / io / parser / test_network.py
  • [] pandas / tests / extension / test_integer.py
  • [] pandas / tests / indexing / multiindex / test_partial.py
  • [] pandas / tests / io / parser / test_python_parser_only.py
  • [] pandas / tests / io / test_html.py
  • [] pandas / tests / reductions / test_stat_reductions.py
  • [] pandas / tests / dtypes / test_inference.py
  • [] pandas / tests / plotting / test_hist_method.py
  • [] pandas / tests / series / apply / test_series_apply.py
  • [] pandas / tests / io / excel / test_xlrd.py
  • [] pandas / tests / indexes / test_common.py
  • [] pandas / tests / util / test_assert_series_equal.py
  • [] pandas / tests / extension / base / ops.py
  • [] pandas / tests / io / test_clipboard.py
  • [] pandas / tests / plotting / frame / test_frame_color.py
  • [] pandas / tests / window / moment / test_moments_ewm.py
  • [] pandas / tests / io / test_gbq.py
  • [] pandas / tests / reductions / test_reductions.py
  • [] pandas / tests / io / test_feather.py
  • [] pandas / tests / resample / test_resampler_grouper.py
  • [] pandas / tests / indexes / multi / test_indexing.py
  • [] pandas / tests / io / test_common.py
  • [] pandas / tests / io / test_sql.py
  • [] pandas / tests / plotting / test_series.py
  • [] pandas / tests / io / test_fsspec.py
  • [] pandas / tests / extension / test_floating.py
  • [] pandas / tests / indexes / multi / test_setops.py
  • [] pandas / tests / reshape / test_get_dummies.py
  • [] pandas / tests / plotting / frame / test_frame_subplots.py
  • [] pandas / tests / plotting / test_backend.py
  • [] pandas / tests / generic / methods / test_sample.py
  • [] pandas / tests / plotting / test_boxplot_method.py
  • [] pandas / tests / io / test_parquet.py
  • [] pandas / tests / extension / test_string.py
  • [] pandas / tests / io / pytables / test_complex.py
  • [] pandas / tests / indexes / test_numpy_compat.py
  • [] pandas / tests / io / test_gcs.py
  • [] pandas / tests / io / sas / test_sas7bdat.py
  • [] pandas / tests / window / test_apply.py
  • [] pandas / tests / series / test_ufunc.py
  • [] pandas / tests / plotting / frame / test_frame.py
  • [] pandas / tests / reshape / test_union_categoricals.py
  • [] pandas / tests / io / json / test_ujson.py
  • [] pandas / tests / indexing / test_coercion.py
  • [] pandas / tests / io / pytables / test_store.py
  • [] pandas / tests / computation / test_compat.py
  • [] pandas / tests / io / json / test_pandas.py
  • [] pandas / tests / io / json / test_json_table_schema.py

    - [] pandas / tests / scalar / test_nat.py

NOTA:

A lista pode mudar conforme os arquivos são movidos / renomeados constantemente.


Pegou quase tudo de # 23922, que foi originalmente aberto por @gfyoung.

Style Testing good first issue

Todos 51 comentários

Eu vou levar:

  • [x] pandas / tests / test_common.py
  • [x] pandas / tests / test_downstream.py
  • [x] pandas / tests / test_errors.py
  • [x] pandas / tests / test_lib.py
  • [x] pandas / tests / test_take.py
  • [x] pandas / tests / internals / test_internals.py
  • [x] pandas / tests / window / test_rolling.py

Vou começar a trabalhar em:

pandas / tests / arithmetic / test_numeric.py
pandas / tests / arithmetic / test_object.py
pandas / tests / arithmetic / test_period.py
pandas / tests / arithmetic / test_timedelta64.py
pandas / tests / arrays / interval / test_interval.py

@ gdex1 Espero que isso ajude você :)

(Os números representam o número da linha)

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 a lista não foi gerada por grep -r -e "pytest.raises([a-zA-Z]*)" pandas/tests -l na verdade, foi gerada pelo script em # 30755 (um tipo de validação chamado bare_pytest_raises ), colocarei instruções no corpo do problema, uma vez é mesclado: smile:

@MomIsBestFriend irei ajudar com:
pandas / tests / base / test_constructors.py
pandas / tests / base / test_ops.py

Eu posso cuidar disso:
@MomIsBestFriend

pandas / tests / io / test_html.py
pandas / tests / io / test_parquet.py
pandas / tests / io / test_sql.py
pandas / tests / io / test_stata.py
pandas / tests / plotting / test_backend.py
pandas / tests / plotting / test_boxplot_method.py
pandas / tests / plotting / test_frame.py
pandas / tests / plotting / test_hist_method.py
pandas / tests / plotting / test_series.py
pandas / tests / reductions / test_reductions.py

@MomIsBestFriend houve bastante discussão em https://github.com/pandas-dev/pandas/issues/23922 sobre isso. Porque, para repetir o que eu disse lá: não acho que devemos declarar "cegamente" todas as mensagens de erro.

Algumas coisas que foram ditas naquele tópico: limitá-lo a mensagens de erro interno, limitar a correspondência a algumas palavras-chave da mensagem, evitar padrões complicados.

Além disso, acho que a afirmação de mensagens de erro deve ir de mãos dadas com a verificação real se é uma mensagem de erro boa e clara, e potencialmente melhorando isso.

Pode ser bom destilar uma lista de pontos de atenção da discussão na outra edição para colocar aqui.

@jorisvandenbossche

@MomIsBestFriend houve bastante discussão em # 23922 sobre isso. Porque, para repetir o que eu disse lá: não acho que devemos declarar "cegamente" todas as mensagens de erro.

Eu concordo totalmente, mas o problema é que os recém-chegados não sabem quais mensagens de erro declarar e quais mensagens de erro não declarar, se de alguma forma definirmos regras sobre quais mensagens de erro declarar e quais não declarar, e ao mesmo tempo manter essa questão "amigável para iniciantes", vai ser ótimo (IMO).

Além disso, se planejamos aplicar isso no IC, precisamos de alguma forma marcar o que bare pytest raises são "nus" de propósito (comentário IMO com o estilo de isort: skip é suficiente), e também outros as pessoas saberão que um determinado bare pytest raise está vazio de propósito.

Algumas coisas que foram ditas naquele tópico: limitá-lo a mensagens de erro interno, limitar a correspondência a algumas palavras-chave da mensagem, evitar padrões complicados.

Não vejo por que não gostaríamos de testar as mensagens de erro interno. Você pode explicar ainda mais?

Vejo o ponto que você apontou em https://github.com/pandas-dev/pandas/issues/23922#issuecomment -458551763, e sou +1 nisso, mas sou +2 (se isso fizer sentido) em https://github.com/pandas-dev/pandas/issues/23922#issuecomment -458733117 e https://github.com/pandas-dev/pandas/issues/ 23922 # issuecomment -458735169 porque IMO o benefício é maior que o custo.

Além disso, acho que a afirmação de mensagens de erro deve ir de mãos dadas com a verificação real se é uma mensagem de erro boa e clara, e potencialmente melhorando isso.

Concordo absolutamente.

Pode ser bom destilar uma lista de pontos de atenção da discussão na outra edição para colocar aqui.

Eu li a conversa no # 23922, mas não vi nada que valha a pena colocar na IMO como uma "nota" no corpo da edição. Você pode, por favor, apontar coisas que esqueci?

Eu li a conversa no # 23922, mas não vi nada que valha a pena colocar na IMO como uma "nota" no corpo da edição. Você pode, por favor, apontar coisas que esqueci?

Também não vejo muito mais a acrescentar sobre esse assunto.

Eu concordo totalmente, mas o problema é que os recém-chegados não sabem quais mensagens de erro declarar e quais mensagens de erro não declarar, se de alguma forma definirmos regras sobre quais mensagens de erro declarar e quais não declarar, e ao mesmo tempo manter essa questão "amigável para iniciantes", vai ser ótimo (IMO).

Além disso, se planejamos aplicar isso no CI, precisamos de alguma forma marcar quais aumentos de pytest nus são "nus" de propósito (comentário IMO com o estilo de isort: pular é suficiente), e também para que outras pessoas saibam que um determinado aumento de pytest puro é simples de propósito.

Em parte, essas são as razões pelas quais escolher e escolher quais testar e quais não testar não é a direção que eu preferiria. Eu também acrescentaria que às vezes verificamos strings de mensagem de erro em blocos except , portanto, boas mensagens de erro também nos beneficiam durante o desenvolvimento.

Além disso, se essas mensagens "internas" não são tão importantes, por que temos uma mensagem de erro em primeiro lugar? Em seguida, criaria um auxiliar que declarasse que a mensagem está vazia.

Não vejo por que não gostaríamos de testar as mensagens de erro interno. Você pode explicar ainda mais?

Então eu disse "limite a mensagens de erro internas", enquanto "interno" pode ser um pouco ambíguo ... Eu quis dizer: mensagens de erro que se originam do próprio pandas, e é claro que queremos testá-las. Mas então eu quis dizer que nós (IMO) não devemos testar muitas mensagens de erro externas , ou seja: mensagens vindas de, por exemplo, numpy ou outras bibliotecas. O Numpy pode mudá-los, e então nossos testes começam a falhar devido a uma mudança cosmética em numpy (e isso não é hipotético, aconteceu na semana passada, eu acho).

Agora, usei "interno" em um contexto diferente em https://github.com/pandas-dev/pandas/pull/30998#discussion_r366726966. Ali, eu quis dizer uma mensagem de erro interna orientada ao desenvolvedor que nunca deveria ser apresentada ao usuário. IMO, esses não são importantes para testar exatamente com a mensagem de erro.

Vejo o ponto que você apontou em # 23922 (comentário) e recebo +1 sobre isso, mas recebo +2 (se isso fizer algum sentido) em # 23922 (comentário) e # 23922 (comentário) porque IMO o benefício é maior que o custo.

Vamos colocar o comentário de @simonjayhawkins ao qual você tem um link aqui:

Estou trabalhando na suposição, talvez incorretamente, de que será benéfico para

  1. identificar testes que podem ser parametrizados
  2. identificar testes que devem ser divididos
  3. melhor compreensão do modo de falha testado
  4. adicionar indiretamente mais documentação aos testes
  5. identificar onde as mensagens de erro podem ser mais consistentes
  6. identificar testes que são redundantes
  7. ajude a melhorar as mensagens de erro
  8. identifique os testes que estão sendo aprovados pelo motivo errado.

Todas essas coisas são úteis, concordo plenamente. Mas isso não é simples, e se quisermos tirar essas coisas desse problema, então esse problema não é para iniciantes. Claro, os iniciantes não precisam fazer todas essas coisas de uma vez, mas ainda tenho a sensação de que os PRs adicionando afirmações estão muitas vezes perto de "adicionar cegamente a mensagem de erro atual à chamada de pytest.raises" sem fazer qualquer mais (os pontos acima).

Além disso, se os pontos acima são o que torna este exercício útil, acho que são instruções mais concretas sobre isso que é útil colocar no topo desta questão.


Para ser claro, eu sou a favor de melhores mensagens de erro e melhores testes, afirmando que temos e mantemos essas mensagens de erro boas. Mas também temos tempo limitado e cada RP requer tempo e esforço para fazer e revisar, e a questão é onde o esforço é mais bem gasto.
IMO, seria mais útil, em vez disso, focar em "consertar aumentos de pytest" em vez de focar em "melhorar as mensagens de erro" (e, ao fazer isso, testá-las melhor).

Além disso, se os pontos acima são o que torna este exercício útil, acho que são instruções mais concretas sobre isso que é útil colocar no topo desta questão.

Pode fazer sentido criar um problema maior para rastreá-los (outros problemas que valem a pena incluir nesse problema são https://github.com/pandas-dev/pandas/issues/19159 e https://github.com/pandas- dev / pandas / issues / 21575).

Esta parte em si é independente e muito acessível para iniciantes.

@gfyoung, como essas questões que você vincula estão relacionadas a esta discussão?

Eles estão relacionados ao comentário que você introduziu explicitamente de @simonjayhawkins

31072 contém a única correspondência que falta em stata.py

Como dizendo aqui https://github.com/pandas-dev/pandas/pull/31091#issuecomment -575422207 Estou com a ideia de @jorisvandenbossche , que não testaremos mensagens de erro de pacotes externos, Alguma ideia de como marcar aqueles?

Se realmente não quisermos testar certas mensagens de erro (eu poderia optar por mensagens externas para ser justo), acho que deveríamos apenas criar uma função auxiliar como esta:

~ pythondef external_error_raised (exceção_esperada):return pytest.raises (exceção_esperada, correspondência = Nenhum)~

Isso deixará claro para nossos eus futuros que este é um erro não-pandas, e o match=None serve para apaziguar qualquer verificação de linting que desenvolvemos para aumentos de pytest simples.

Se realmente não quisermos testar certas mensagens de erro (eu poderia optar por mensagens externas para ser justo), acho que deveríamos apenas criar uma função auxiliar como esta:

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

Isso deixará claro para os nossos futuros eus que este é um erro não-pandas, e o match=None serve para apaziguar qualquer verificação de linting que desenvolvemos para aumentos de pytest simples.

+1 nisso.

Eu realmente gosto dessa ideia, podemos torná-la uma convenção para nossos testes?

Se uma função está testando se uma função / método está gerando um erro, e o erro é um erro externo, simplesmente colocamos match=None em "pytest.raises```.

podemos torná-lo uma convenção para nossos testes?

Com isso, quero dizer incluir uma seção no guia de contribuição .

Se uma função está testando se uma função / método está gerando um erro, e o erro é um erro externo, simplesmente colocamos match = None em "pytest.raises```.

Eu preferiria a função auxiliar, pois você não teria que pensar em adicioná-la. Além disso, o nome do auxiliar é muito mais claro por que estamos fazendo isso.

Se realmente não quisermos testar certas mensagens de erro (eu poderia optar por mensagens externas para ser justo), acho que deveríamos apenas criar uma função auxiliar como esta:

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

Isso deixará claro para os nossos futuros eus que este é um erro não-pandas, e o match=None serve para apaziguar qualquer verificação de linting que desenvolvemos para aumentos de pytest simples.

@gfyoung onde você recomenda colocar esta função auxiliar? (como se estivesse em qual arquivo?)

pandas._testing

Olá,

Eu gostaria de trabalhar em:

pandas / tests / arrays / interval / test_ops.py
pandas / tests / arrays / test_array.py
pandas / tests / arrays / test_boolean.py

Olá - eu gostaria de trabalhar em:

pandas / tests / arithmetic / test_period.py
pandas / tests / arithmetic / test_timedelta64.py

Olá a todos, vou levar o seguinte:

pandas / tests / computation / test_compat.py
pandas / tests / computation / test_eval.py
pandas / tests / dtypes / cast / test_upcast.py
pandas / tests / dtypes / test_dtypes.py

@MomIsBestFriend este já foi feito, mas não está marcado como concluído:
pandas / tests / arithmetic / test_numeric.py

ATUALIZAR

@MomIsBestFriend estes também:
pandas / tests / arithmetic / test_period.py
pandas / tests / arrays / test_integer.py
pandas / tests / arrays / test_period.py

Estes estão incluídos em # 31852

pandas / tests / extension / decimal / test_decimal.py
pandas / tests / extension / json / test_json.py
pandas / tests / extension / test_boolean.py
pandas / tests / extension / test_categorical.py
pandas / tests / frame / indexing / test_categorical.py
pandas / tests / frame / indexing / test_indexing.py
pandas / tests / frame / indexing / test_where.py
pandas / tests / frame / methods / test_explode.py
pandas / tests / frame / methods / test_isin.py
pandas / tests / frame / methods / test_quantile.py
pandas / tests / frame / methods / test_round.py
pandas / tests / frame / methods / test_sort_values.py
pandas / tests / frame / methods / test_to_dict.py

eu vou levar

pandas / tests / io / excel / test_readers.py
pandas / tests / io / excel / test_writers.py
pandas / tests / io / excel / test_xlwt.py
pandas / tests / io /ataformas / test_format.py
pandas / tests / io / formata / test_style.py
pandas / tests / io / formata / test_to_latex.py

@MomIsBestFriend
Estes são feitos sem a marca:

  • pandas / tests / indexes / datetimes / test_astype.py

pandas / tests / indexes / datetimes / test_tools.py não existe

Eu farei:

  • pandas / tests / indexes / datetimes / test_constructors.py
  • pandas / tests / indexes / datetimes / test_date_range.py
  • pandas / tests / indexes / datetimes / test_indexing.py
  • pandas / tests / indexes / datetimes / test_shift.py
  • pandas / tests / indexes / datetimes / test_timezones.py

Eu atualizei a postagem original, agora que existe um script para detectar apenas pytest raises Incluí instruções sobre como usá-lo, se alguém ainda tiver dúvidas, você é mais do que bem-vindo :)

Eu vou levar,

pandas / tests / arithmetic / test_timedelta64.py

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

parece que todos os testes em pandas / tests / escalar / timestamp / já estão corrigidos.

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

pandas / tests / arrays / test_boolean.py => está faltando.

estou levando
pandas / tests / arrays / interval / test_ops.py
pandas / tests / arrays / test_datetimelike.py

pandas / tests / groupby / test_categorical.py
pandas / tests / groupby / test_groupby.py
pandas / tests / groupby / test_timegrouper.py

pandas / tests / arithmetic / test_timedelta64.py => # 33010

pandas / tests / scalar / timestamp / test_arithmetic.py => nenhum problema
pandas / tests / scalar / timestamp / test_comparisons.py => nenhum problema
pandas / tests / scalar / timestamp / test_constructors.py => nenhum problema
pandas / tests / scalar / timestamp / test_timezones.py => nenhum problema
pandas / tests / scalar / timestamp / test_unary_ops.py => nenhum problema

pandas / tests / arrays / test_boolean.py => está faltando.

pandas / tests / arrays / interval / test_ops.py => # 33010
pandas / tests / arrays / test_datetimelike.py => # 33010

pandas / tests / groupby / test_categorical.py => # 33144
pandas / tests / groupby / test_groupby.py => nenhum problema
pandas / tests / groupby / test_timegrouper.py => nenhum problema

pandas / tests / indexes / categorical / test_category.py => nenhum problema
pandas / tests / indexes / common.py # 33144
pandas / tests / indexes / datetimelike.py # 33144

pandas / tests / indexes / interval / test_astype.py => todos os testes afetados estão marcados como xfailed, ainda precisamos consertar, então como?

pandas / tests / indexes / multi / test_compat.py # 33144
pandas / tests / indexes / multi / test_duplicates.py => nenhum problema
pandas / tests / indexes / multi / test_format.py => arquivo não encontrado.
pandas / tests / indexes / multi / test_reshape.py # 33144
pandas / tests / indexes / multi / test_setops.py => nenhum problema
pandas / tests / indexes / multi / test_sorting.py # 33144

@ sumanau7 você listou os arquivos que está pegando? Estou trabalhando em alguns dos arquivos que vejo que você mesclou.

Feito com

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

Estou trabalhando com

pandas / tests / indexes / ranges / test_constructors.py
pandas / tests / indexes / ranges / test_range.py
pandas / tests / indexing / multiindex / test_chaining_and_caching.py
pandas / tests / indexing / multiindex / test_partial.py
pandas / tests / series / indexing / test_alter_index.py
pandas / tests / arrays / boolean / test_function.py

Trabalhando em:

pandas/tests/reshape/merge/test_multi.py

Eu vou levar:
pandas / tests / window / moment / test_moments_ewm.py
pandas / tests / window / moment / test_moments_rolling.py
pandas / tests / window / test_dtypes.py
pandas / tests / window / test_ewm.py
pandas / tests / window / test_expanding.py
pandas / tests / window / test_timeseries_window.py

Eu também levarei:

  • pandas / tests / frame / methods / test_assign.py
  • pandas / tests / frame / methods / test_at_time.py
  • pandas / tests / frame / methods / test_between_time.py
  • pandas / tests / frame / methods / test_first_and_last.py
  • pandas / tests / frame / methods / test_interpolate.py
  • pandas / tests / frame / methods / test_replace.py
  • pandas / tests / frame / test_query_eval.py

Oi,
Sou um novo desenvolvedor do projeto e gostaria de ajudar com isso. Qual dos testes restantes é melhor para um iniciante?

Obrigado,
Kevin

Oi,
Sou um novo desenvolvedor do projeto e gostaria de ajudar com isso. Qual dos testes restantes é melhor para um iniciante?

Obrigado,
Kevin

Bem-vindo - eu não acho que nenhum desses seja mais fácil ou mais difícil do que qualquer outro, qualquer um seria um bom lugar para começar

Estou recebendo um erro ao executar o script 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>

Ocorre durante a leitura de 'pandas / tests / test_strings.py' Todos os arquivos são codificados como cp1252.

Eu queria executar o script para verificar quais testes ainda não foram concluídos para evitar a duplicação de trabalho.

A maioria dos NotImplementedError s não tem uma mensagem específica para ser correspondida, eu sei que meio que vai contra o propósito, mas é uma boa ideia alterá-los para pytest.raises(NotImplementedError, match=None) apenas para silenciar o linter ?

Eu vou levar:

  • pandas / tests / tools / test_to_datetime.py
  • pandas / tests / tseries / offsets / test_offsets.py

para iniciar.

-Kevin

Eu sou novo nisso, então vou começar com isso:

  • pandas / tests / tseries / offsets / test_ticks.py

Olá, sou novo em contribuir. Obrigado pelo texto claro na edição. Começarei pegando pandas/tests/generic/test_duplicate_labels.py e tentarei mais alguns se der certo.

Vou começar com pandas / tests / arrays / test_datetimelike.py.
Além disso, se você não pode executar python scripts/validate_unwanted_patterns.py -vt="bare_pytest_raises" pandas/tests/ sucesso, tente
python scripts/validate_unwanted_patterns.py -vt="bare_pytest_raises" pandas/tests/**/*.py vez disso

A maneira mais fácil de executá-lo agora seria adicionar

    -   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/

para .pre-commit-config.yaml na seção - repo: local e, em seguida, execute

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

Eu atualizei o problema com os arquivos pendentes restantes

Eu posso levar estes:

  • [x] pandas / tests / io / pytables / test_timezones.py
  • [] pandas / tests / generic / methods / test_pipe.py
  • [] pandas / tests / reshape / merge / test_merge_asof.py
  • [] pandas / tests / extension / base / reduce.py
  • [] pandas / tests / extension / base / getitem.py
  • pandas / tests / arrays / test_datetimelike.py

Estes são os 5 primeiros da lista até hoje.

@marktgraham Se você ainda não fez test_datetime.py . Por favor, deixe como está, pois estou prestes a fazer um PR

@ liaoaoyuan97 não se preocupe, ainda não toquei em test_datetimelike.py .

Em vez disso, pegarei pandas / tests / extension / base / getitem.py.

validate_unwanted_patterns.py levanta um erro da minha parte

$ 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/'

Parece estar relacionado com # 37419, talvez?

Tentei com a abordagem proposta por @MarcoGorelli e funcionou perfeitamente.

A maneira mais fácil de executá-lo agora seria adicionar

    -   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/

para .pre-commit-config.yaml na seção - repo: local e, em seguida, execute

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

Faz sentido adicionar isso a .pre-commit-config.yaml e depois atualizar as instruções neste tópico?

Faz sentido adicionar isso ao .pre-commit-config.yaml e, em seguida, atualizar as instruções neste tópico?

Vamos adicioná-lo a .pre-commit-config.yaml assim que todos os erros que levanta forem corrigidos, sim

Parece estar relacionado com # 37419, talvez?

Não, está relacionado a # 37379 (que é quando movemos este script para pré-commit, portanto, não era mais necessário que ele rodasse em diretórios)

Esta página foi útil?
0 / 5 - 0 avaliações