natural_comparison_key: faster sort keys for names without digits
Mantenedores costumam responder em até 1 dia
Avaliação
- Dificuldade
- 2/5
- Tempo estimado
- 1-3 horas
- Facilidade para iniciantes
- 76/100
- Tipo de issue
- Bug
- Clareza
- Claramente especificada
- Status de atividade
- Ativa
- Stack de tecnologia
- python
- Domínio
- performance
Direção de pesquisa
Comece por natural_comparison_key em src/graphql/pyutils/natural_compare.py e leia tests/pyutils/test_natural_compare.py. Verifique se o caminho rápido proposto e a atribuição de fatia preservam as chaves existentes e, em seguida, execute o arquivo de teste indicado. A tarefa estará concluída quando os testes passarem e a otimização mantiver as chaves inalteradas.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
natural_comparison_key in src/graphql/pyutils/natural_compare.py runs for every name when lexicographic_sort_schema sorts a schema. It is also used by suggestion_list and sort_value_node.
Problem
The function always splits the name with a regex. Then it walks the parts with zip and itertools.cycle inside a generator. Most GraphQL names (userName, createdAt) have no digits. For these names, this work always gives the same one-item tuple (name,).
Numbers
I measured the current code and a small change with timeit (CPython 3.12, Linux). The table shows the time to compute the keys for each list of names.
| Situation | Current | Proposed | Change |
|---|---|---|---|
| GitHub schema names (3323 names) | 2.11 ms | 0.34 ms | 84% faster |
Letters only, userName (5000 names) |
3.00 ms | 0.38 ms | 88% faster |
Underscore names, USER_NAME (5000 names) |
3.09 ms | 1.83 ms | 41% faster |
Names with numbers, field12x3 (5000 names) |
5.61 ms | 3.72 ms | 34% faster |
Proposed fix
Return (key,) early when key.isalpha() is true, because such a name cannot contain a decimal digit. For other names, keep the regex split and replace the digit parts in one slice assignment instead of the zip/cycle generator. The keys stay exactly the same, and the existing tests in tests/pyutils/test_natural_compare.py pass.
Environment
- graphql-core
mainat 1d505c1 - CPython 3.12, Linux x86_64
- Linguagem predominante
- Python
- Estrelas
- 534
- Forks
- 159
- Merge médio
- 1d 18h
- PRs com merge (30d)
- 9
Preparar o ambiente
- Sem Dockerfile nem arquivo Docker Compose
- Tem um modelo de pull request
- Sem guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de graphql-python/graphql-core
-
collect_fields spends extra time on selections without directivesTalvez já em andamento Um pull request vinculado a esta issue está aberto ou já foi mesclado. Aberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
graphql-python/graphql-core#315 ·
Mantenedores costumam responder em até 1 dia
-
is_printable_as_block_string checks each character in a Python loopTalvez já em andamento Um pull request vinculado a esta issue está aberto ou já foi mesclado. Aberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 83/100
graphql-python/graphql-core#312 ·
Mantenedores costumam responder em até 1 dia
-
Make is_awaitable faster for values that are not awaitableTalvez já em andamento Um pull request vinculado a esta issue está aberto ou já foi mesclado. Aberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 72/100
graphql-python/graphql-core#308 ·
Mantenedores costumam responder em até 1 dia
-
assert_name checks each character in a Python generatorTalvez já em andamento @swayamdudhela assumiu há 2 dias. Aberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 76/100
graphql-python/graphql-core#304 · 4 comentários ·
Mantenedores costumam responder em até 1 dia
-
coerce_input_literal spends extra time on type checks and non-null recursionTalvez já em andamento Um pull request vinculado a esta issue está aberto ou já foi mesclado. Aberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
graphql-python/graphql-core#302 ·
Mantenedores costumam responder em até 1 dia
Todas as issues de graphql-python/graphql-core
Issues semelhantes
-
`destroy` sans terminal répond « Aborted. » au lieu de réclamer `--yes` comme `clean` et `reset`Abertabug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 85/100
stephrobert/dsoxlab#354 ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 77/100
jasonacox/pypowerwall#472 ·
Mantenedores costumam responder em até 1 dia
-
[Bug]: DoubleMLRDDData accepts a score_col that is no data column (as in its docstring example); the running variable then becomes a covariate and RDFlex failsTalvez já em andamento @vrjdev assumiu hoje. Aberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
DoubleML/doubleml-for-py#455 ·
Mantenedores costumam responder em até 1 dia
-
[Bug]: Python mod.Box[T] annotation gets a false generic_arg edge that replaces the parameter_type one ('is' on tree-sitter nodes)Talvez já em andamento @rohit-jsfreaky assumiu hoje. Aberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 88/100
Graphify-Labs/graphify#5110 · 1 comentário ·
Mantenedores costumam responder em até 2 dias
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
assafelovic/gpt-researcher#2277 ·
Mantenedores costumam responder em até 10 dias