diff --git a/.github/workflows/translations.yml b/.github/workflows/translations.yml new file mode 100644 index 0000000000..d7a39957eb --- /dev/null +++ b/.github/workflows/translations.yml @@ -0,0 +1,31 @@ +name: Translations + +on: + push: + branches: + - main + workflow_dispatch: + +jobs: + translations: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - name: Install Python + uses: actions/setup-python@v4 + with: + python-version: 3 + cache: pip + - name: Install dependencies + run: | + python -m pip install -r requirements.txt + - name: Generate translation templates + run: | + make translations + - name: Commit and push changes + run: | + git config --global user.email "actions@github.com" + git config --global user.name "GitHub Actions" + git add locales/**/*.po + git commit -m "Update translations" --allow-empty + git push diff --git a/Makefile b/Makefile index 6e5ee16931..d39c61f270 100644 --- a/Makefile +++ b/Makefile @@ -8,6 +8,7 @@ BUILDDIR = _build SPHINXOPTS = -W --keep-going -n SPHINXBUILD = $(VENVDIR)/bin/sphinx-build SPHINXLINT = $(VENVDIR)/bin/sphinx-lint +SPHINXINTL = $(VENVDIR)/bin/sphinx-intl PAPER = # Internal variables. @@ -200,3 +201,18 @@ include/release-cycle.mmd: include/release-cycle.json .PHONY: versions versions: include/branches.csv include/end-of-life.csv include/release-cycle.mmd @echo Release cycle data generated. + +.PHONY: translations +translations: ensure-venv pot update-po + +.PHONY: pot +pot: + $(SPHINXBUILD) -b gettext $(ALLSPHINXOPTS) $(BUILDDIR)/pot + # Set Report-Msgid-Bugs-To (which comes empty) and remove trailing whitespace from Project-Id-Version + sed -i $(BUILDDIR)/pot/devguide.pot \ + -e 's|^"Report-Msgid-Bugs-To:.*|"Report-Msgid-Bugs-To: https://github.com/python/devguide/issues\\n"|' \ + -e '/^"Project-Id-Version: /s/ \\n"/\\n"/' + +.PHONY: update-po +update-po: + $(SPHINXINTL) update -p $(BUILDDIR)/pot diff --git a/conf.py b/conf.py index c899822f83..aae9751844 100644 --- a/conf.py +++ b/conf.py @@ -153,3 +153,6 @@ copybutton_prompt_text = "$" # https://sphinx-copybutton.readthedocs.io/en/latest/use.html#honor-line-continuation-characters-when-copying-multline-snippets copybutton_line_continuation_character = "\\" + +# Generate a single pot/po file (instead of one pot/po for each rst file) +gettext_compact = 'devguide' diff --git a/locales/pt_BR/LC_MESSAGES/devguide.po b/locales/pt_BR/LC_MESSAGES/devguide.po new file mode 100644 index 0000000000..8a23a3b4ac --- /dev/null +++ b/locales/pt_BR/LC_MESSAGES/devguide.po @@ -0,0 +1,21199 @@ +# Brazilian Portuguese translation for devguide +# Copyright (C) 2011-2022, Python Software Foundation +# This file is distributed under the same license as the Python Developer's +# Guide package. +# Rafael Fontenelle , 2022. +# +msgid "" +msgstr "" +"Project-Id-Version: Python Developer's Guide\n" +"Report-Msgid-Bugs-To: https://github.com/python/devguide/issues\n" +"POT-Creation-Date: 2022-12-23 22:30-0300\n" +"PO-Revision-Date: 2022-12-23 23:40-0300\n" +"Last-Translator: Rafael Fontenelle \n" +"Language-Team: Brazilian Portuguese \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.11.0\n" +"Language: pt_BR\n" +"Plural-Forms: nplurals=2; plural=(n > 1)\n" +"X-Generator: Gtranslator 42.0\n" + +#: ../../advanced-tools/clang.rst:5 +msgid "Dynamic Analysis with Clang" +msgstr "Análise dinâmica com Clang" + +#: ../../advanced-tools/clang.rst:9 +msgid "" +"This document describes how to use Clang to perform analysis on Python and " +"its libraries. In addition to performing the analysis, the document will " +"cover downloading, building and installing the latest Clang/LLVM combination " +"(which is currently 3.4)." +msgstr "" +"Este documento descreve como usar o Clang para realizar análises em Python e " +"suas bibliotecas. Além de realizar a análise, o documento abordará o " +"download, a criação e a instalação da combinação Clang/LLVM mais recente " +"(que atualmente é 3.4)." + +#: ../../advanced-tools/clang.rst:14 +msgid "" +"This document does not cover interpreting the findings. For a discussion of " +"interpreting results, see Marshall Clow's `Testing libc++ with -" +"fsanitize=undefined `_. " +"The blog posting is a detailed examinations of issues uncovered by Clang in " +"``libc++``." +msgstr "" +"Este documento não abrange a interpretação dos resultados. Para uma " +"discussão sobre a interpretação dos resultados, consulte `Testing libc++ " +"with -fsanitize=undefined `_ de Marshall Clow. A postagem do blog é um exame detalhado dos problemas " +"descobertos pelo Clang em ``libc++``." + +#: ../../advanced-tools/clang.rst:21 +msgid "What is Clang?" +msgstr "O que é Clang?" + +#: ../../advanced-tools/clang.rst:23 +msgid "" +"Clang is the C, C++ and Objective C front-end for the LLVM compiler. The " +"front-end provides access to LLVM's optimizer and code generator. The " +"sanitizers - or checkers - are hooks into the code generation phase to " +"instrument compiled code so suspicious behavior is flagged." +msgstr "" +"Clang é o front-end de C, C++ e Objective C para o compilador LLVM. O front-" +"end fornece acesso ao otimizador e gerador de código do LLVM. Os " +"sanitizadores - ou verificadores - são ganchos na fase de geração de código " +"para instrumentar o código compilado, de modo que o comportamento suspeito " +"seja sinalizado." + +#: ../../advanced-tools/clang.rst:29 +msgid "What are Sanitizers?" +msgstr "O que são sanitizadores?" + +#: ../../advanced-tools/clang.rst:31 +msgid "" +"Clang sanitizers are runtime checkers used to identify suspicious and " +"undefined behavior. The checking occurs at runtime with actual runtime " +"parameters so false positives are kept to a minimum." +msgstr "" +"Sanitizadores Clang são verificadores de tempo de execução usados para " +"identificar comportamentos suspeitos e indefinidos. A verificação ocorre no " +"tempo de execução com os parâmetros de tempo de execução reais, de modo que " +"os falsos positivos sejam reduzidos ao mínimo." + +#: ../../advanced-tools/clang.rst:35 +msgid "" +"There are a number of sanitizers available, but two that should be used on a " +"regular basis are the Address Sanitizer (or ASan) and the Undefined Behavior " +"Sanitizer (or UBSan). ASan is invoked with the compiler option ``-" +"fsanitize=address``, and UBSan is invoked with ``-fsanitize=undefined``. " +"The flags are passed through ``CFLAGS`` and ``CXXFLAGS``, and sometimes " +"through ``CC`` and ``CXX`` (in addition to the compiler)." +msgstr "" +"Há vários sanitizadores disponíveis, mas dois que devem ser usados " +"regularmente são o Address Sanitizer (ou ASan) e o Undefined Behavior " +"Sanitizer (ou UBSan). Em português, o ASan seria sanitizador de endereço e " +"UBSan seria sanitizador de comportador indefinido. ASan é invocado com a " +"opção do compilador ``-fsanitize=address``, e UBSan é invocado com ``-" +"fsanitize=undefined``. Os sinalizadores, ou *flags*, são passados através de " +"``CFLAGS`` e ``CXXFLAGS``, e algumas vezes através de ``CC`` e ``CXX`` (além " +"do compilador)." + +#: ../../advanced-tools/clang.rst:42 +msgid "" +"A complete list of sanitizers can be found at `Controlling Code Generation " +"`_." +msgstr "" +"Uma lista completa de sanitizadores pode ser encontrada em `Controlling Code " +"Generation `_." + +#: ../../advanced-tools/clang.rst:47 +msgid "" +"Because sanitizers operate at runtime on real program parameters, its " +"important to provide a complete set of positive and negative self tests." +msgstr "" +"Como os sanitizadores operam em tempo de execução em parâmetros reais do " +"programa, é importante fornecer um conjunto completo de autotestes positivos " +"e negativos." + +#: ../../advanced-tools/clang.rst:50 +msgid "" +"Clang and its sanitizers have strengths (and weaknesses). Its just one tool " +"in the war chest to uncovering bugs and improving code quality. Clang should " +"be used to compliment other methods, including Code Reviews, Valgrind, " +"Coverity, etc." +msgstr "" +"Clang e seus sanitizadores têm pontos fortes (e fracos). É apenas uma " +"ferramenta no baú de guerra para descobrir bugs e melhorar a qualidade do " +"código. O Clang deve ser usado para complementar outros métodos, incluindo " +"Code Reviews, Valgrind, Coverity, etc." + +#: ../../advanced-tools/clang.rst:56 +msgid "Clang/LLVM Setup" +msgstr "Instalação de Clang/LLVM" + +#: ../../advanced-tools/clang.rst:58 +msgid "" +"This portion of the document covers downloading, building and installing " +"Clang and LLVM. There are three components to download and build. They are " +"the LLVM compiler, the compiler front end and the compiler runtime library." +msgstr "" +"Esta parte do documento abrange o download, a criação e a instalação do " +"Clang e do LLVM. Existem três componentes para baixar e compilar. Eles são o " +"compilador LLVM, o front-end do compilador e a biblioteca de tempo de " +"execução do compilador." + +#: ../../advanced-tools/clang.rst:62 +msgid "" +"In preparation you should create a scratch directory. Also ensure you are " +"using Python 2 and not Python 3. Python 3 will cause the build to fail." +msgstr "" +"Em preparação, você deve criar um diretório temporário. Além disso, " +"verifique se você está usando o Python 2 e não o Python 3. O Python 3 fará " +"com que a compilação falhe." + +#: ../../advanced-tools/clang.rst:66 +msgid "Download, Build and Install" +msgstr "Baixar, compilar e instalar" + +#: ../../advanced-tools/clang.rst:68 +msgid "" +"Perform the following to download, build and install the Clang/LLVM 3.4. ::" +msgstr "" +"Execute o seguinte para baixar, compilar e instalar o Clang/LLVM 3.4. ::" + +#: ../../advanced-tools/clang.rst:96 +msgid "" +"If you receive an error ``'LibraryDependencies.inc' file not found``, then " +"ensure you are utilizing Python 2 and not Python 3. If you encounter the " +"error after switching to Python 2, then delete everything and start over." +msgstr "" +"Se você receber um erro ``'LibraryDependencies.inc' file not found``, " +"certifique-se de estar utilizando o Python 2 e não o Python 3. Se você " +"encontrar o erro após mudar para o Python 2, exclua tudo e comece de novo." + +#: ../../advanced-tools/clang.rst:100 +msgid "" +"After ``make install`` executes, the compilers will be installed in ``/usr/" +"local/bin`` and the various libraries will be installed in ``/usr/local/lib/" +"clang/3.4/lib/linux/``:" +msgstr "" +"Após a execução do ``make install``, os compiladores serão instalados em ``/" +"usr/local/bin`` e as várias bibliotecas serão instaladas em ``/usr/local/lib/" +"clang/3.4/lib/linux/``:" + +#: ../../advanced-tools/clang.rst:113 +msgid "" +"On macOS, the libraries are installed in ``/usr/local/lib/clang/3.3/lib/" +"darwin/``:" +msgstr "" +"No macOS, as bibliotecas são instaladas em ``/usr/local/lib/clang/3.3/lib/" +"darwin/``:" + +#: ../../advanced-tools/clang.rst:128 +msgid "" +"You should never have to add the libraries to a project. Clang will handle " +"it for you. If you find you cannot pass the ``-fsanitize=XXX`` flag through " +"``make``'s implicit variables (``CFLAGS``, ``CXXFLAGS``, ``CC``, " +"``CXXFLAGS``, ``LDFLAGS``) during ``configure``, then you should modify the " +"makefile after configuring to ensure the flag is passed through the compiler." +msgstr "" +"Você nunca deve ter que adicionar as bibliotecas a um projeto. Clang cuidará " +"disso para você. Se você achar que não pode passar o sinalizador ``-" +"fsanitize=XXX`` através das variáveis implícitas do ``make`` (``CFLAGS``, " +"``CXXFLAGS``, ``CC``, ``CXXFLAGS`` , ``LDFLAGS``) durante o ``configure``, " +"então você deve modificar o makefile após a configuração para garantir que o " +"sinalizador seja passado pelo compilador." + +#: ../../advanced-tools/clang.rst:135 +msgid "" +"The installer does not install all the components needed on occasion. For " +"example, you might want to run a ``scan-build`` or examine the results with " +"``scan-view``. You can copy the components by hand with: ::" +msgstr "" +"O instalador ocasionalmente não instala todos os componentes necessários. " +"Por exemplo, você pode querer executar um ``scan-build`` ou examinar os " +"resultados com ``scan-view``. Você pode copiar os componentes manualmente " +"com: ::" + +#: ../../advanced-tools/clang.rst:146 +msgid "" +"Because the installer does not install all the components needed on " +"occasion, you should not delete the scratch directory until you are sure " +"things work as expected. If a library is missing, then you should search for " +"it in the Clang/LLVM build directory." +msgstr "" +"Como o instalador não instala todos os componentes necessários " +"ocasionalmente, você não deve excluir o diretório temporário até ter certeza " +"de que tudo está funcionando conforme o esperado. Se uma biblioteca estiver " +"faltando, você deve procurá-la no diretório de compilação Clang/LLVM." + +#: ../../advanced-tools/clang.rst:152 +msgid "Python Build Setup" +msgstr "Configuração da compilação do Python" + +#: ../../advanced-tools/clang.rst:154 +msgid "" +"This portion of the document covers invoking Clang and LLVM with the options " +"required so the sanitizers analyze Python with under its test suite. Two " +"checkers are used - ASan and UBSan." +msgstr "" +"Esta parte do documento aborda a invocação do Clang e do LLVM com as opções " +"necessárias para que os sanitizadores analisem o Python em seu conjunto de " +"testes. Dois verificadores são usados - ASan e UBSan." + +#: ../../advanced-tools/clang.rst:158 +msgid "" +"Because the sanitizers are runtime checkers, its best to have as many " +"positive and negative self tests as possible. You can never have enough self " +"tests." +msgstr "" +"Como os sanitizadores são verificadores de tempo de execução, é melhor ter " +"tantos autotestes positivos e negativos quanto possível. Você nunca pode ter " +"autotestes suficientes." + +#: ../../advanced-tools/clang.rst:161 +msgid "" +"The general idea is to compile and link with the sanitizer flags. At link " +"time, Clang will include the needed runtime libraries. However, you can't " +"use ``CFLAGS`` and ``CXXFLAGS`` to pass the options through the compiler to " +"the linker because the makefile rules for ``BUILDPYTHON``, ``_testembed`` " +"and ``_freeze_importlib`` don't use the implicit variables." +msgstr "" +"A ideia geral é compilar e vincular com os sinalizadores do sanitizador. No " +"momento de vinculação ou *link*, o Clang incluirá as bibliotecas de tempo de " +"execução necessárias. No entanto, você não pode usar ``CFLAGS`` e " +"``CXXFLAGS`` para passar as opções através do compilador para o vinculador, " +"ou *linker*, porque as regras do makefile para ``BUILDPYTHON``, " +"``_testembed`` e ``_freeze_importlib`` não use as variáveis implícitas." + +#: ../../advanced-tools/clang.rst:167 +msgid "" +"As a workaround to the absence of flags to the linker, you can pass the " +"sanitizer options by way of the compilers - ``CC`` and ``CXX``. Passing the " +"flags though the compiler is used below, but passing them through " +"``LDFLAGS`` is also reported to work." +msgstr "" +"Como solução para a ausência de sinalizadores para o vinculador, você pode " +"passar as opções do higienizador por meio dos compiladores - ``CC`` e " +"``CXX``. Passar os sinalizadores pelo compilador é usado abaixo, mas passá-" +"los através do ``LDFLAGS`` também funciona." + +#: ../../advanced-tools/clang.rst:173 +msgid "Building Python" +msgstr "Compilando o Python" + +#: ../../advanced-tools/clang.rst:175 +msgid "" +"To begin, export the variables of interest with the desired sanitizers. Its " +"OK to specify both sanitizers: ::" +msgstr "" +"Para começar, exporte as variáveis de interesse com os sanitizadores " +"desejados. Não há problema em especificar os dois sanitizadores: ::" + +#: ../../advanced-tools/clang.rst:182 +msgid "Or: ::" +msgstr "Ou: ::" + +#: ../../advanced-tools/clang.rst:188 +msgid "" +"The ``-fno-sanitize=vptr`` removes vtable checks that are part of UBSan from " +"C++ projects due to noise. Its not needed with Python, but you will likely " +"need it for other C++ projects." +msgstr "" +"O ``-fno-sanitize=vptr`` remove verificações a vtable que fazem parte do " +"UBSan de projetos C++ devido ao ruído. Não é necessário com o Python, mas " +"você provavelmente precisará dele para outros projetos C++." + +#: ../../advanced-tools/clang.rst:192 +msgid "After exporting ``CC`` and ``CXX``, ``configure`` as normal:" +msgstr "Após exportar ``CC`` e ``CXX``, execute o ``configure`` normalmente:" + +#: ../../advanced-tools/clang.rst:207 +msgid "Next is a standard ``make`` (formatting added for clarity):" +msgstr "" +"O próximo é um ``make`` padrão (formatação adicionada para maior clareza):" + +#: ../../advanced-tools/clang.rst:222 +msgid "Finally is ``make test`` (formatting added for clarity):" +msgstr "" +"Por fim, temos ``make test`` (formatação adicionada para maior clareza):" + +#: ../../advanced-tools/clang.rst:236 +msgid "" +"If you are using the address sanitizer, its important to pipe the output " +"through ``asan_symbolize.py`` to get a good trace. For example, from Issue " +"20953 during compile (formatting added for clarity):" +msgstr "" +"Se você estiver usando o sanitizador de endereços, é importante canalizar a " +"saída através de ``asan_symbolize.py`` para obter um bom rastreamento ou " +"*trace*. Por exemplo, da edição 20953 durante a compilação (formatação " +"adicionada para maior clareza):" + +#: ../../advanced-tools/clang.rst:305 +msgid "" +"``asan_symbolize.py`` is supposed to be installed during ``make install``. " +"If its not installed, then look in the Clang/LLVM build directory for it and " +"copy it to ``/usr/local/bin``." +msgstr "" +"``asan_symbolize.py`` deve ser instalado durante o ``make install``. Se não " +"estiver instalado, procure-o no diretório de compilação do Clang/LLVM e " +"copie-o para ``/usr/local/bin``." + +#: ../../advanced-tools/clang.rst:310 +msgid "Blacklisting (Ignoring) Findings" +msgstr "Bloqueando (ignorando) descobertas" + +#: ../../advanced-tools/clang.rst:314 +msgid "" +"Clang allows you to alter the behavior of sanitizer tools for certain source-" +"level by providing a special blacklist file at compile-time. The blacklist " +"is needed because it reports every instance of an issue, even if the issue " +"is reported 10's of thousands of time in un-managed library code." +msgstr "" +"O Clang permite que você altere o comportamento das ferramentas do " +"sanitizador para determinado nível de origem, fornecendo um arquivo de lista " +"negra especial em tempo de compilação. A lista de bloqueio é necessária " +"porque relata todas as instâncias de um problema, mesmo que o problema seja " +"relatado dezenas de milhares de vezes em código de biblioteca não gerenciado." + +#: ../../advanced-tools/clang.rst:319 +msgid "" +"You specify the blacklist with ``-fsanitize-blacklist=XXX``. For example::" +msgstr "" +"Você especifica a lista de bloqueio com ``-fsanitize-blacklist=XXX``. Por " +"exemplo::" + +#: ../../advanced-tools/clang.rst:323 +msgid "" +"``my_blacklist.txt`` would then contain entries such as the following. The " +"entry will ignore a bug in ``libc++``'s ``ios`` formatting functions::" +msgstr "" +"``my_blacklist.txt`` conteria entradas como as seguintes. A entrada irá " +"ignorar um bug nas funções de formatação ``ios`` do ``libc++``::" + +#: ../../advanced-tools/clang.rst:328 +msgid "" +"As an example with Python 3.4.0, ``audioop.c`` will produce a number of " +"findings::" +msgstr "" +"Como um exemplo com Python 3.4.0, ``audioop.c`` produzirá uma série de " +"descobertas::" + +#: ../../advanced-tools/clang.rst:344 +msgid "" +"One of the function of interest is ``audioop_getsample_impl`` (flagged at " +"line 422), and the blacklist entry would include::" +msgstr "" +"Uma das funções de interesse é ``audioop_getsample_impl`` (sinalizada na " +"linha 422), e a entrada da lista negra incluiria::" + +#: ../../advanced-tools/clang.rst:349 +msgid "Or, you could ignore the entire file with::" +msgstr "Ou você pode ignorar o arquivo inteiro com::" + +#: ../../advanced-tools/clang.rst:353 +msgid "" +"Unfortunately, you won't know what to blacklist until you run the sanitizer." +msgstr "" +"Infelizmente, você não saberá o que colocar na lista de bloqueio até " +"executar o sanitizador." + +#: ../../advanced-tools/clang.rst:355 +msgid "" +"The documentation is available at `Sanitizer special case list `_." +msgstr "" +"A documentação está disponível em `Lista de casos especiais do sanitizador " +"`_." + +#: ../../advanced-tools/coverity.rst:5 +msgid "Coverity Scan" +msgstr "Coverity Scan" + +#: ../../advanced-tools/coverity.rst:7 +msgid "" +"Coverity Scan is a free service for static code analysis of Open Source " +"projects. It is based on Coverity's commercial product and is able to " +"analyze C, C++ and Java code." +msgstr "" +"Coverity Scan (em português, varredura de cobertura) é um serviço gratuito " +"para análise de código estático de projetos de código aberto. Ele é baseado " +"no produto comercial da Coverity e é capaz de analisar códigos C, C++ e Java." + +#: ../../advanced-tools/coverity.rst:11 +msgid "" +"Coverity's static code analysis doesn't run the code. Instead of that it " +"uses abstract interpretation to gain information about the code's control " +"flow and data flow. It's able to follow all possible code paths that a " +"program may take. For example the analyzer understands that ``malloc()`` " +"returns a memory that must be freed with ``free()`` later. It follows all " +"branches and function calls to see if all possible combinations free the " +"memory. The analyzer is able to detect all sorts of issues like resource " +"leaks (memory, file descriptors), NULL dereferencing, use after free, " +"unchecked return values, dead code, buffer overflows, integer overflows, " +"uninitialized variables, and many more." +msgstr "" +"A análise de código estático do Coverity não executa o código. Em vez disso, " +"ele usa interpretação abstrata para obter informações sobre o fluxo de " +"controle e o fluxo de dados do código. É capaz de seguir todos os caminhos " +"de código possíveis que um programa pode seguir. Por exemplo, o analisador " +"entende que ``malloc()`` retorna uma memória que deve ser liberada com " +"``free()`` posteriormente. Ele segue todos os ramos e chamadas de função " +"para ver se todas as combinações possíveis liberam a memória. O analisador é " +"capaz de detectar todos os tipos de problemas, como vazamentos de recursos " +"(memória, descritores de arquivo), desreferenciação de NULL, uso após " +"liberação, valores de retorno não verificados, código morto, estouros de " +"buffer, estouros de número inteiro, variáveis não inicializadas e muito mais." + +#: ../../advanced-tools/coverity.rst:24 +msgid "Access to analysis reports" +msgstr "Acesso a relatórios de análise" + +#: ../../advanced-tools/coverity.rst:26 +msgid "" +"The results are available on the `Coverity Scan`_ website. In order to " +"access the results you have to create an account yourself. Then go to " +"*Projects using Scan* and add yourself to the Python project. New members " +"must be approved by an admin (see `Contact`_)." +msgstr "" +"Os resultados estão disponíveis no site do `Coverity Scan`_. Para acessar os " +"resultados, você mesmo deve criar uma conta. Em seguida, vá para *Projects " +"using Scan* e adicione-se ao projeto Python. Novos membros devem ser " +"aprovados por um administrador (consulte `Contact`_)." + +#: ../../advanced-tools/coverity.rst:31 +msgid "" +"Access is restricted to Python core developers only. Other individuals may " +"be given access at our own discretion, too. Every now and then Coverity " +"detects a critical issue in Python's code -- new analyzers may even find new " +"bugs in mature code. We don't want to disclose issues prematurely." +msgstr "" +"O acesso é restrito apenas aos desenvolvedores principais do Python. Outros " +"indivíduos também podem ter acesso a nosso próprio critério. De vez em " +"quando, o Coverity detecta um problema crítico no código do Python - novos " +"analisadores podem até encontrar novos bugs no código maduro. Não queremos " +"divulgar questões prematuramente." + +#: ../../advanced-tools/coverity.rst:38 +msgid "Building and uploading analysis" +msgstr "Compilando e enviando análises" + +#: ../../advanced-tools/coverity.rst:40 +msgid "" +"The process is automated. A script checks out the code, runs ``cov-build`` " +"and uploads the latest analysis to Coverity. Since Coverity has limited the " +"maximum number of builds per week Python is analyzed every second day. The " +"build runs on a dedicated virtual machine on PSF's infrastructure at OSU " +"Open Source Labs. The process is maintained by Christian Heimes (see " +"`Contact`_). At present only the tip is analyzed with the 64bit Linux tools." +msgstr "" +"O processo é automatizado. Um script verifica o código, executa ``cov-" +"build`` e envia a análise mais recente para o Coverity. Como o Coverity " +"limitou o número máximo de compilações por semana, o Python é analisado a " +"cada dois dias. A compilação é executada em uma máquina virtual dedicada na " +"infraestrutura do PSF no OSU Open Source Labs. O processo é mantido por " +"Christian Heimes (ver `Contact`_). No momento, apenas a dica é analisada com " +"as ferramentas do Linux de 64 bits." + +#: ../../advanced-tools/coverity.rst:49 +msgid "Known limitations" +msgstr "Limitações conhecidas" + +#: ../../advanced-tools/coverity.rst:51 +msgid "Some aspects of Python's C code are not yet understood by Coverity." +msgstr "" +"Alguns aspectos do código C do Python ainda não são compreendidos pelo " +"Coverity." + +#: ../../advanced-tools/coverity.rst:54 +msgid "False positives" +msgstr "Falsos-positivos" + +#: ../../advanced-tools/coverity.rst:59 +msgid "``Py_BuildValue(\"N\", PyObject*)``" +msgstr "``Py_BuildValue(\"N\", PyObject*)``" + +#: ../../advanced-tools/coverity.rst:57 +msgid "" +"Coverity doesn't understand that ``N`` format char passes the object along " +"without touching its reference count. On this ground the analyzer detects a " +"resource leak. CID 719685" +msgstr "" +"O Coverity não entende que o caractere de formato ``N`` passa o objeto sem " +"tocar em sua contagem de referência. Com base nisso, o analisador detecta um " +"vazamento de recursos. CID 719685" + +#: ../../advanced-tools/coverity.rst:64 +msgid "``PyLong_FromLong()`` for negative values" +msgstr "``PyLong_FromLong()`` para valores negativos" + +#: ../../advanced-tools/coverity.rst:62 +msgid "" +"Coverity claims that ``PyLong_FromLong()`` and other ``PyLong_From*()`` " +"functions cannot handle a negative value because the value might be used as " +"an array index in ``get_small_int()``. CID 486783" +msgstr "" +"Coverity afirma que ``PyLong_FromLong()`` e outras funções " +"``PyLong_From*()`` não podem lidar com um valor negativo porque o valor pode " +"ser usado como um índice de array em ``get_small_int()``. CID 486783" + +#: ../../advanced-tools/coverity.rst:68 +msgid "``PyLong_FromLong()`` for n in [-5 ... +255]" +msgstr "``PyLong_FromLong()`` para n em [-5 ... +255]" + +#: ../../advanced-tools/coverity.rst:67 +msgid "" +"For integers in the range of Python's small int cache the ``PyLong_From*()`` " +"function can never fail and never returns NULL. CID 1058291" +msgstr "" +"Para inteiros no intervalo de cache com small int do Python, a função " +"``PyLong_From*()`` pode nunca falhar e nunca retorna NULL. CID 1058291" + +#: ../../advanced-tools/coverity.rst:75 +msgid "``PyArg_ParseTupleAndKeywords(args, kwargs, \"s#\", &data, &length)``" +msgstr "``PyArg_ParseTupleAndKeywords(args, kwargs, \"s#\", &data, &length)``" + +#: ../../advanced-tools/coverity.rst:71 +msgid "" +"Some functions use the format char combination such as ``s#``, ``u#`` or " +"``z#`` to get data and length of a character array. Coverity doesn't " +"recognize the relation between data and length. Sometimes it detects a " +"buffer overflow if data is written to a fixed size buffer although ``length " +"<= sizeof(buffer)``. CID 486613" +msgstr "" +"Algumas funções usam a combinação de caracteres de formato como ``s#``, " +"``u#`` ou ``z#`` para obter dados e comprimento de um array de caracteres. " +"Coverity não reconhece a relação entre dados e comprimento. Às vezes, ele " +"detecta um estouro de buffer se os dados forem gravados em um buffer de " +"tamanho fixo, embora ``lenght <= sizeof(buffer)``. CID 486613" + +#: ../../advanced-tools/coverity.rst:81 +msgid "``path_converter()`` dereferencing after null check" +msgstr "``path_converter()`` ser desreferenciado após verificação de null" + +#: ../../advanced-tools/coverity.rst:78 +msgid "" +"The ``path_converter()`` function in ``posixmodule.c`` makes sure that " +"either ``path_t.narrow`` or ``path_t.wide`` is filled unless ``path_t." +"nullable`` is explicitly enabled. CID 719648" +msgstr "" +"A função ``path_converter()`` em ``posixmodule.c`` garante que ``path_t." +"narrow`` ou ``path_t.wide`` seja preenchido, a menos que ``path_t.nullable`` " +"esteja explicitamente ativado. CID 719648" + +#: ../../advanced-tools/coverity.rst:84 +msgid "Modeling" +msgstr "Modelagem" + +#: ../../advanced-tools/coverity.rst:86 +msgid "" +"Modeling is explained in the *Coverity Help Center* which is available in " +"the help menu of `Coverity Connect`_. `coverity_model.c`_ contains a copy of " +"Python's modeling file for Coverity. Please keep the copy in sync with the " +"model file in *Analysis Settings* of `Coverity Scan`_." +msgstr "" +"A modelagem (em inglês, modeling) é explicada no *Coverity Help Center* que " +"está disponível no menu de ajuda do `Coverity Connect`_. `coverity_model.c`_ " +"contém uma cópia do arquivo de modelagem Python para Coverity. Por favor, " +"mantenha a cópia sincronizada com o arquivo de modelo em *Analysis Settings* " +"de `Coverity Scan`_." + +#: ../../advanced-tools/coverity.rst:93 +msgid "Workflow" +msgstr "Fluxo de trabalho" + +#: ../../advanced-tools/coverity.rst:96 +msgid "False positive and intentional issues" +msgstr "Falsos positivos e problemas intencionais" + +#: ../../advanced-tools/coverity.rst:98 +msgid "" +"If the problem is listed under `Known limitations`_ then please set the " +"classification to either \"False positive\" or \"Intentional\", the action " +"to \"Ignore\", owner to your own account and add a comment why the issue is " +"considered false positive or intentional." +msgstr "" +"Se o problema estiver listado em `Limitações conhecidas`_, defina a " +"classificação como \"Falso positivo\" ou \"Intencional\", a ação como " +"\"Ignorar\", proprietário da sua própria conta e adicione um comentário " +"sobre o motivo pelo qual o problema é considerado falso positivo ou " +"intencional." + +#: ../../advanced-tools/coverity.rst:103 +msgid "" +"If you think it's a new false positive or intentional then please contact an " +"admin. The first step should be an updated to Python's `Modeling`_ file." +msgstr "" +"Se você acha que é um novo falso positivo ou intencional, entre em contato " +"com um administrador. A primeira etapa deve ser uma atualização para o " +"arquivo de `modelagem`_ do Python." + +#: ../../advanced-tools/coverity.rst:108 +msgid "Positive issues" +msgstr "Questões positivas" + +#: ../../advanced-tools/coverity.rst:110 +msgid "" +"You should always create an issue unless it's really a trivial case. Please " +"add the full url to the ticket under *Ext. Reference* and add the CID " +"(Coverity ID) to both the ticket and the checkin message. It makes it much " +"easier to understand the relation between tickets, fixes and Coverity issues." +msgstr "" +"Você deve sempre criar um problema, a menos que seja realmente um caso " +"trivial. Por favor, adicione o URL completo ao ticket em *Ext. Reference* e " +"adicione o CID (Coverity ID) tanto no ticket quanto na mensagem de check-in. " +"Fica muito mais fácil entender a relação entre tickets, correções e " +"problemas de Coverity." + +#: ../../advanced-tools/coverity.rst:117 ../../documentation/translating.rst:16 +msgid "Contact" +msgstr "Contato" + +#: ../../advanced-tools/coverity.rst:119 +msgid "" +"Please include both Brett and Christian in any mail regarding Coverity. " +"Mails to Coverity should go through Brett or Christian, too." +msgstr "" +"Por favor, inclua Brett e Christian em qualquer correspondência sobre " +"Coverity. As correspondências para a Coverity também devem passar por Brett " +"ou Christian." + +#: ../../advanced-tools/coverity.rst:123 +msgid "Christian Heimes " +msgstr "Christian Heimes " + +#: ../../advanced-tools/coverity.rst:123 +msgid "" +"admin, maintainer of build machine, intermediary between Python and Coverity" +msgstr "" +"administrador, mantenedor da máquina de compilação, intermediário entre " +"Python e Coverity" + +#: ../../advanced-tools/coverity.rst:126 +msgid "Brett Cannon " +msgstr "Brett Cannon " + +#: ../../advanced-tools/coverity.rst:126 +msgid "co-admin" +msgstr "co-administrador" + +#: ../../advanced-tools/coverity.rst:130 +msgid "Dakshesh Vyas " +msgstr "Dakshesh Vyas " + +#: ../../advanced-tools/coverity.rst:129 +msgid "Technical Manager - Coverity Scan" +msgstr "Gerente Técnico - Coverity Scan" + +#: ../../advanced-tools/coverity.rst:134 +msgid "`Coverity Scan FAQ `_" +msgstr "`FAQ do Coverity Scan `_" + +#: ../../advanced-tools/gdb.rst:5 +msgid "GDB support" +msgstr "Suporte ao GDB" + +#: ../../advanced-tools/gdb.rst:9 +msgid "" +"If you experience low-level problems such as crashes or deadlocks (e.g. when " +"tinkering with parts of CPython which are written in C), it can be " +"convenient to use a low-level debugger such as gdb in order to diagnose and " +"fix the issue. By default, however, gdb (or any of its front-ends) doesn't " +"know about high-level information specific to the CPython interpreter, such " +"as which Python function is currently executing, or what type or value has a " +"given Python object represented by a standard ``PyObject *`` pointer. We " +"hereafter present two ways to overcome this limitation." +msgstr "" +"Se você tiver problemas de baixo nível, como travamentos ou *deadlocks* (por " +"exemplo, ao mexer em partes do CPython escritas em C), pode ser conveniente " +"usar um depurador de baixo nível, como o gdb, para diagnosticar e corrigir o " +"problema. Por padrão, no entanto, o gdb (ou qualquer um de seus front-ends) " +"não conhece informações de alto nível específicas do interpretador CPython, " +"como qual função Python está sendo executada no momento ou qual tipo ou " +"valor tem um determinado objeto Python representado por um ponteiro " +"``PyObject *`` padrão. Apresentamos a seguir duas maneiras de superar essa " +"limitação." + +#: ../../advanced-tools/gdb.rst:21 +msgid "GDB 7 and later" +msgstr "GDB 7 e posterior" + +#: ../../advanced-tools/gdb.rst:23 +msgid "" +"In gdb 7, support for `extending gdb with Python `_ was added. When CPython is " +"built you will notice a ``python-gdb.py`` file in the root directory of your " +"checkout. Read the module docstring for details on how to use the file to " +"enhance gdb for easier debugging of a CPython process." +msgstr "" +"No gdb 7, o suporte para `estender o gdb com Python `_ foi adicionado. Quando o " +"CPython for construído, você notará um arquivo ``python-gdb.py`` no " +"diretório raiz do seu checkout. Leia a documentação do módulo para obter " +"detalhes sobre como usar o arquivo para aprimorar o gdb para facilitar a " +"depuração de um processo CPython." + +#: ../../advanced-tools/gdb.rst:29 +msgid "" +"To activate support, you must add the directory containing ``python-gdb.py`` " +"to GDB's \"auto-load-safe-path\". Put this in your ``~/.gdbinit`` file::" +msgstr "" +"Para ativar o suporte, você deve adicionar o diretório contendo ``python-gdb." +"py`` ao \"auto-load-safe-path\" do GDB. Coloque isso no seu arquivo ``~/." +"gdbinit``::" + +#: ../../advanced-tools/gdb.rst:34 +msgid "You can also add multiple paths, separated by ``:``." +msgstr "Você também pode adicionar vários caminhos, separados por ``:``." + +#: ../../advanced-tools/gdb.rst:36 +msgid "" +"This is what a backtrace looks like (truncated) when this extension is " +"enabled::" +msgstr "" +"É assim que um backtrace se parece (truncado) quando esta extensão está " +"habilitada::" + +#: ../../advanced-tools/gdb.rst:55 +msgid "" +"(Notice how the dictionary argument to ``PyDict_GetItemString`` is displayed " +"as its ``repr()``, rather than an opaque ``PyObject *`` pointer.)" +msgstr "" +"(Observe como o argumento do dicionário para ``PyDict_GetItemString`` é " +"exibido como seu ``repr()``, em vez de um ponteiro ``PyObject *`` opaco.)" + +#: ../../advanced-tools/gdb.rst:58 +msgid "" +"The extension works by supplying a custom printing routine for values of " +"type ``PyObject *``. If you need to access lower-level details of an " +"object, then cast the value to a pointer of the appropriate type. For " +"example::" +msgstr "" +"A extensão funciona fornecendo uma rotina de impressão personalizada para " +"valores do tipo ``PyObject *``. Se você precisar acessar detalhes de nível " +"inferior de um objeto, converta o valor em um ponteiro do tipo apropriado. " +"Por exemplo::" + +#: ../../advanced-tools/gdb.rst:81 +msgid "" +"The pretty-printers try to closely match the ``repr()`` implementation of " +"the underlying implementation of Python, and thus vary somewhat between " +"Python 2 and Python 3." +msgstr "" +"Os *pretty-printters* tentam corresponder de perto à implementação " +"``repr()`` da implementação subjacente do Python e, portanto, variam um " +"pouco entre o Python 2 e o Python 3." + +#: ../../advanced-tools/gdb.rst:85 +msgid "" +"An area that can be confusing is that the custom printer for some types look " +"a lot like gdb's built-in printer for standard types. For example, the " +"pretty-printer for a Python 3 ``int`` gives a ``repr()`` that is not " +"distinguishable from a printing of a regular machine-level integer::" +msgstr "" +"Uma área que pode ser confusa é que a impressora personalizada para alguns " +"tipos se parece muito com a impressora integrada do gdb para tipos padrão. " +"Por exemplo, o *pretty-printer* para Python 3 ``int`` dá um ``repr()`` que " +"não é distinguível de uma impressão de um inteiro regular no nível da " +"máquina::" + +#: ../../advanced-tools/gdb.rst:100 +msgid "" +"A similar confusion can arise with the ``str`` type, where the output looks " +"a lot like gdb's built-in printer for ``char *``::" +msgstr "" +"Uma confusão semelhante pode surgir com o tipo ``str``, onde a saída se " +"parece muito com a impressora interna do gdb para ``char *``::" + +#: ../../advanced-tools/gdb.rst:106 +msgid "" +"The pretty-printer for ``str`` instances defaults to using single-quotes (as " +"does Python's ``repr`` for strings) whereas the standard printer for ``char " +"*`` values uses double-quotes and contains a hexadecimal address::" +msgstr "" +"O *pretty-printer* para instâncias ``str`` assume como padrão o uso de aspas " +"simples (assim como o ``repr`` do Python para strings), enquanto o *printer* " +"padrão para valores ``char *`` usa aspas duplas e contém um endereço " +"hexadecimal ::" + +#: ../../advanced-tools/gdb.rst:113 +msgid "" +"Here's how to see the implementation details of a ``str`` instance (for " +"Python 3, where a ``str`` is a ``PyUnicodeObject *``)::" +msgstr "" +"Veja como ver os detalhes de implementação de uma instância ``str`` (para " +"Python 3, onde um ``str`` é um ``PyUnicodeObject *``)::" + +#: ../../advanced-tools/gdb.rst:120 +msgid "" +"As well as adding pretty-printing support for ``PyObject *``, the extension " +"adds a number of commands to gdb:" +msgstr "" +"Além de adicionar suporte a *pretty-print* para ``PyObject *``, a extensão " +"adiciona vários comandos ao gdb:" + +#: ../../advanced-tools/gdb.rst:142 +msgid "``py-list``" +msgstr "``py-list``" + +#: ../../advanced-tools/gdb.rst:124 +msgid "" +"List the Python source code (if any) for the current frame in the selected " +"thread. The current line is marked with a \">\"::" +msgstr "" +"Lista o código-fonte Python (se houver) para o quadro atual na thread " +"selecionada. A linha atual é marcada com um \">\"::" + +#: ../../advanced-tools/gdb.rst:140 +msgid "" +"Use ``py-list START`` to list at a different line number within the python " +"source, and ``py-list START,END`` to list a specific range of lines within " +"the python source." +msgstr "" +"Use ``py-list START`` para listar em um número de linha diferente dentro da " +"fonte python, e ``py-list START,END`` para listar um intervalo específico de " +"linhas dentro da fonte do python." + +#: ../../advanced-tools/gdb.rst:192 +msgid "``py-up`` and ``py-down``" +msgstr "``py-up`` e ``py-down``" + +#: ../../advanced-tools/gdb.rst:145 +msgid "" +"The ``py-up`` and ``py-down`` commands are analogous to gdb's regular ``up`` " +"and ``down`` commands, but try to move at the level of CPython frames, " +"rather than C frames." +msgstr "" +"Os comandos ``py-up`` e ``py-down`` são análogos aos comandos regulares " +"``up`` e ``down`` do gdb, mas tente mover no nível de quadros CPython, em " +"vez de quadros C." + +#: ../../advanced-tools/gdb.rst:149 +msgid "" +"gdb is not always able to read the relevant frame information, depending on " +"the optimization level with which CPython was compiled. Internally, the " +"commands look for C frames that are executing ``PyEval_EvalFrameEx`` (which " +"implements the core bytecode interpreter loop within CPython) and look up " +"the value of the related ``PyFrameObject *``." +msgstr "" +"O gdb nem sempre é capaz de ler as informações relevantes do quadro, " +"dependendo do nível de otimização com o qual o CPython foi compilado. " +"Internamente, os comandos procuram quadros C que estão executando " +"``PyEval_EvalFrameEx`` (que implementa o laço do interpretador de bytecode " +"principal dentro do CPython) e procuram o valor do ``PyFrameObject *`` " +"relacionado." + +#: ../../advanced-tools/gdb.rst:155 +msgid "They emit the frame number (at the C level) within the thread." +msgstr "Eles emitem o número do quadro (no nível C) dentro da thread." + +#: ../../advanced-tools/gdb.rst:157 ../../advanced-tools/gdb.rst:198 +#: ../../documentation/markup.rst:1169 +msgid "For example::" +msgstr "Por exemplo::" + +#: ../../advanced-tools/gdb.rst:170 +msgid "so we're at the top of the python stack. Going back down::" +msgstr "então estamos no topo da pilha do python. Voltando para baixo::" + +#: ../../advanced-tools/gdb.rst:192 +msgid "and we're at the bottom of the python stack." +msgstr "e estamos no final da pilha do python." + +#: ../../advanced-tools/gdb.rst:215 +msgid "``py-bt``" +msgstr "``py-bt``" + +#: ../../advanced-tools/gdb.rst:195 +msgid "" +"The ``py-bt`` command attempts to display a Python-level backtrace of the " +"current thread." +msgstr "" +"O comando ``py-bt`` tenta exibir um *backtrace* no nível do Python da thread " +"atual." + +#: ../../advanced-tools/gdb.rst:214 +msgid "" +"The frame numbers correspond to those displayed by gdb's standard " +"``backtrace`` command." +msgstr "" +"Os números dos quadros correspondem àqueles exibidos pelo comando " +"``backtrace`` padrão do gdb." + +#: ../../advanced-tools/gdb.rst:230 +msgid "``py-print``" +msgstr "``py-print``" + +#: ../../advanced-tools/gdb.rst:218 +msgid "" +"The ``py-print`` command looks up a Python name and tries to print it. It " +"looks in locals within the current thread, then globals, then finally " +"builtins::" +msgstr "" +"O comando ``py-print`` procura um nome Python e tenta imprimi-lo. Ele " +"procura locais dentro da thread atual, depois globais e, finalmente, " +"embutidos::" + +#: ../../advanced-tools/gdb.rst:239 +msgid "``py-locals``" +msgstr "``py-locals``" + +#: ../../advanced-tools/gdb.rst:233 +msgid "" +"The ``py-locals`` command looks up all Python locals within the current " +"Python frame in the selected thread, and prints their representations::" +msgstr "" +"O comando ``py-locals`` procura todos os locais do Python dentro do quadro " +"atual do Python na thread selecionada e imprime suas representações::" + +#: ../../advanced-tools/gdb.rst:241 +msgid "" +"You can of course use other gdb commands. For example, the ``frame`` " +"command takes you directly to a particular frame within the selected thread. " +"We can use it to go a specific frame shown by ``py-bt`` like this::" +msgstr "" +"É claro que você pode usar outros comandos gdb. Por exemplo, o comando " +"``frame`` leva você diretamente a um quadro específico dentro da thread " +"selecionada. Podemos usá-lo para ir a um quadro específico mostrado por ``py-" +"bt`` assim::" + +#: ../../advanced-tools/gdb.rst:260 +msgid "" +"The ``info threads`` command will give you a list of the threads within the " +"process, and you can use the ``thread`` command to select a different one::" +msgstr "" +"O comando ``info threads`` lhe dará uma lista das threads dentro do " +"processo, e você pode usar o comando ``thread`` para selecionar um " +"diferente::" + +#: ../../advanced-tools/gdb.rst:268 +msgid "" +"You can use ``thread apply all COMMAND`` or (``t a a COMMAND`` for short) to " +"run a command on all threads. You can use this with ``py-bt`` to see what " +"every thread is doing at the Python level::" +msgstr "" +"Você pode usar ``thread apply all COMANDO`` ou (``t a a COMANDO`` para " +"abreviar) para executar um comando em todos os threads. Você pode usar isso " +"com ``py-bt`` para ver o que cada thread está fazendo no nível do Python::" + +#: ../../advanced-tools/gdb.rst:300 +msgid "This is only available for Python 2.7, 3.2 and higher." +msgstr "Isso está disponível apenas para Python 2.7, 3.2 e superior." + +#: ../../advanced-tools/gdb.rst:304 +msgid "GDB 6 and earlier" +msgstr "GDB 6 ou anterior" + +#: ../../advanced-tools/gdb.rst:306 +msgid "" +"The file at ``Misc/gdbinit`` contains a gdb configuration file which " +"provides extra commands when working with a CPython process. To register " +"these commands permanently, either copy the commands to your personal gdb " +"configuration file or symlink ``~/.gdbinit`` to ``Misc/gdbinit``. To use " +"these commands from a single gdb session without registering them, type " +"``source Misc/gdbinit`` from your gdb session." +msgstr "" +"O arquivo em ``Misc/gdbinit`` contém um arquivo de configuração gdb que " +"fornece comandos extras ao trabalhar com um processo CPython. Para registrar " +"esses comandos permanentemente, copie os comandos para seu arquivo de " +"configuração gdb pessoal ou crie um link simbólico ``~/.gdbinit`` para " +"``Misc/gdbinit``. Para usar esses comandos de uma única sessão gdb sem " +"registrá-los, digite ``source Misc/gdbinit`` de sua sessão gdb." + +#: ../../advanced-tools/gdb.rst:315 +msgid "Updating auto-load-safe-path to allow test_gdb to run" +msgstr "" +"Atualizando auto-load-safe-path para permitir que test_gdb seja executado" + +#: ../../advanced-tools/gdb.rst:317 +msgid "" +"``test_gdb`` attempts to automatically load additional Python specific hooks " +"into gdb in order to test them. Unfortunately, the command line options it " +"uses to do this aren't always supported correctly." +msgstr "" +"``test_gdb`` tenta carregar automaticamente ganchos adicionais específicos " +"do Python no gdb para testá-los. Infelizmente, as opções de linha de comando " +"que ele usa para fazer isso nem sempre são suportadas corretamente." + +#: ../../advanced-tools/gdb.rst:321 +msgid "" +"If ``test_gdb`` is being skipped with an \"auto-loading has been declined\" " +"message, then it is necessary to identify any Python build directories as " +"auto-load safe. One way to achieve this is to add a line like the following " +"to ``~/.gdbinit`` (edit the specific list of paths as appropriate)::" +msgstr "" +"Se ``test_gdb`` estiver sendo ignorado com uma mensagem \"auto-loading has " +"been failed\", então é necessário identificar quaisquer diretórios de " +"construção do Python como seguros para carregamento automático. Uma maneira " +"de conseguir isso é adicionar uma linha como a seguinte a ``~/.gdbinit`` " +"(edite a lista específica de caminhos conforme apropriado)::" + +#: ../../advanced-tools/gdb.rst:330 +msgid "GDB tips" +msgstr "Dicas de GDB" + +#: ../../advanced-tools/gdb.rst:332 +msgid "" +"Learning to use GDB effectively improves your chances of successfully " +"debugging problems with Python's internals." +msgstr "" +"Aprender a usar o GDB efetivamente melhora suas chances de depurar com " +"sucesso problemas internos do Python." + +#: ../../advanced-tools/gdb.rst:336 +msgid "Saving and loading breakpoints" +msgstr "Salvando e carregando pontos de interrupção" + +#: ../../advanced-tools/gdb.rst:338 +msgid "" +"With extended exposure to particular parts of the Python runtime, you might " +"find it helpful to define a routine set of breakpoints and commands to " +"execute when they are hit. For convenience, save your breakpoints to a file " +"and load them in future sessions using the ``save breakpoints`` command::" +msgstr "" +"Com a exposição estendida a partes específicas do tempo de execução do " +"Python, pode ser útil definir um conjunto de rotina de pontos de interrupção " +"e comandos a serem executados quando forem atingidos. Por conveniência, " +"salve seus pontos de interrupção em um arquivo e carregue-os em sessões " +"futuras usando o comando ``save breakpoints``::" + +#: ../../advanced-tools/gdb.rst:346 +msgid "" +"You can edit the file to your heart's content, then load it in a later " +"session::" +msgstr "" +"Você pode editar o arquivo como quiser e carregá-lo em uma sessão posterior::" + +#: ../../advanced-tools/gdb.rst:353 +msgid "Breaking at labels" +msgstr "Interrompendo em rótulos" + +#: ../../advanced-tools/gdb.rst:355 +msgid "" +"You will most often set breakpoints at the start of functions, but this " +"approach is less helpful when debugging the runtime virtual machine, since " +"the main interpreter loop function, ``_PyEval_EvalFrameDefault``, is well " +"over 4,000 lines long as of Python 3.12. Fortunately, among the `many ways " +"to set breakpoints `_, you can break at C labels, such as those generated " +"for computed gotos. If you are debugging an interpreter compiled with " +"computed goto support (generally true, certainly when using GCC), each " +"instruction will be prefaced with a label named ``TARGET_``, e." +"g., ``TARGET_LOAD_CONST``. You can then set a breakpoint with a command " +"like::" +msgstr "" +"Na maioria das vezes, você definirá pontos de interrupção no início das " +"funções, mas essa abordagem é menos útil ao depurar a máquina virtual de " +"tempo de execução, pois a principal função de laço do interpretador, " +"``_PyEval_EvalFrameDefault``, tem mais de 4.000 linhas desde o Python 3.12. " +"Felizmente, entre as `muitas maneiras de definir pontos de interrupção " +"`_, " +"você pode interromper em rótulos C, como aqueles gerados para *gotos*\\s " +"computados. Se você estiver depurando um interpretador compilado com suporte " +"a *goto* computado (geralmente verdadeiro, certamente ao usar o GCC), cada " +"instrução será prefaciada com um rótulo chamado ``TARGET_``, por " +"exemplo, ``TARGET_LOAD_CONST``. Você pode então definir um ponto de " +"interrupção com um comando como::" + +#: ../../advanced-tools/gdb.rst:370 +msgid "" +"Add commands, save to a file, then reload in future sessions without " +"worrying that the starting line number of individual instructions change " +"over time." +msgstr "" +"Adicione comandos, salve em um arquivo e recarregue em sessões futuras sem " +"se preocupar com a mudança do número da linha inicial de instruções " +"individuais com o tempo." + +#: ../../advanced-tools/index.rst:3 +msgid "Advanced Tools" +msgstr "Ferramentas avançadas" + +#: ../../core-developers/become-core-developer.rst:6 +msgid "How to Become a Core Developer" +msgstr "Como se tornar um desenvolvedor core" + +#: ../../core-developers/become-core-developer.rst:9 +msgid "What it Takes" +msgstr "O que é preciso" + +#: ../../core-developers/become-core-developer.rst:11 +msgid "" +"When you have consistently contributed patches which meet quality standards " +"without requiring extensive rewrites prior to being committed, you may " +"qualify for commit privileges and become a core developer of Python. You " +"must also work well with other core developers (and people in general) as " +"you become an ambassador for the Python project." +msgstr "" +"Quando você contribui consistentemente com patches que atendem aos padrões " +"de qualidade sem exigir reescritas extensas antes de ser confirmado, você " +"pode se qualificar para privilégios de fazer commits e se tornar um " +"desenvolvedor core do Python. Você também deve trabalhar bem com outros " +"desenvolvedores cores (e pessoas em geral) ao se tornar um embaixador do " +"projeto Python." + +#: ../../core-developers/become-core-developer.rst:17 +msgid "" +"Typically a core developer will offer you the chance to gain commit " +"privilege. The person making the offer will become your mentor and watch " +"your commits for a while to make sure you understand the development " +"process. If other core developers agree that you should gain commit " +"privileges you are then extended an official offer. How core developers come " +"to that agreement are outlined in :pep:`13`." +msgstr "" +"Normalmente, um desenvolvedor core oferece a você a chance de obter " +"privilégio de fazer commits. A pessoa que fizer a oferta se tornará seu " +"mentor e observará seus commits por um tempo para garantir que você entenda " +"o processo de desenvolvimento. Se outros desenvolvedores principais " +"concordarem que você deve obter privilégios de fazer commits, você receberá " +"uma oferta oficial. Como os desenvolvedores cores chegam a esse acordo está " +"descrito em :pep:`13`." + +#: ../../core-developers/become-core-developer.rst:26 +msgid "Gaining Commit Privileges" +msgstr "Ganhando privilégios de fazer commit" + +#: ../../core-developers/become-core-developer.rst:28 +msgid "The steps to gaining commit privileges are:" +msgstr "As etapas para obter privilégios de fazer commit são:" + +#: ../../core-developers/become-core-developer.rst:30 +msgid "" +"A core developer starts a poll in the `Committers category`_ on the `Python " +"Discourse`_ (``discuss.python.org``)" +msgstr "" +"Um desenvolvedor core inicia uma votação na `categoria Committers`_ no " +"`Python Discourse`_ (``discuss.python.org``)" + +#: ../../core-developers/become-core-developer.rst:33 +msgid "Open for 7 days" +msgstr "Aberta por 7 dias" + +#: ../../core-developers/become-core-developer.rst:34 +msgid "Results shown upon close" +msgstr "Resultados mostrados ao fechar" + +#: ../../core-developers/become-core-developer.rst:36 +msgid "The poll is announced on the `python-committers mailing list`_" +msgstr "A votação é anunciada na lista de discussão `python-committers`_" + +#: ../../core-developers/become-core-developer.rst:37 +msgid "" +"Wait for the poll to close and see if the results confirm your membership as " +"per the voting results required by :pep:`13`" +msgstr "" +"Aguarde o encerramento da votação e veja se os resultados confirmam sua " +"adesão de acordo com os resultados da votação exigidos pela :pep:`13`" + +#: ../../core-developers/become-core-developer.rst:39 +msgid "" +"The person who nominated you emails the steering council with your email " +"address and a request that the council either accept or reject the proposed " +"membership" +msgstr "" +"A pessoa que indicou você envia um e-mail ao conselho diretor com seu " +"endereço de e-mail e uma solicitação para que o conselho aceite ou rejeite a " +"adesão proposta" + +#: ../../core-developers/become-core-developer.rst:42 +msgid "" +"Assuming the steering council does not object, a member of the council will " +"email you asking for:" +msgstr "" +"Supondo que o conselho diretor não se oponha, um membro do conselho enviará " +"um e-mail a você solicitando:" + +#: ../../core-developers/become-core-developer.rst:45 +msgid "Account details as required by 🔒 https://github.com/python/voters/" +msgstr "" +"Detalhes da conta conforme exigido por 🔒 https://github.com/python/voters/" + +#: ../../core-developers/become-core-developer.rst:47 +msgid "" +"Your preferred email address to subscribe to the python-committers mailing " +"list with" +msgstr "" +"Seu endereço de e-mail preferido para se inscrever na lista de discussão " +"python-committers com" + +#: ../../core-developers/become-core-developer.rst:49 +msgid "" +"A reminder about the `Code of Conduct`_ and to report issues to the PSF " +"Conduct WG" +msgstr "" +"Um lembrete sobre o `Código de Conduta`_ e para relatar problemas ao PSF " +"Conduct WG (em português, grupo de trabalho de conduta da PSF)" + +#: ../../core-developers/become-core-developer.rst:52 +msgid "" +"Once you have provided the pertinent details, your various new privileges " +"will be turned on" +msgstr "" +"Depois de fornecer os detalhes pertinentes, seus vários novos privilégios " +"serão ativados" + +#: ../../core-developers/become-core-developer.rst:54 +msgid "Your details will be added to 🔒 https://github.com/python/voters/" +msgstr "Seus detalhes serão adicionados a 🔒 https://github.com/python/voters/" + +#: ../../core-developers/become-core-developer.rst:55 +msgid "" +"They will update the devguide to publicly list your team membership at :ref:" +"`developers`" +msgstr "" +"Eles atualizarão o guia de desenvolvimento para listar publicamente os " +"membros de sua equipe em :ref:`developers`" + +#: ../../core-developers/become-core-developer.rst:57 +msgid "" +"An announcement email by the steering council member handling your new " +"membership will be sent to the Committers Discourse category" +msgstr "" +"Um e-mail de anúncio do membro do conselho diretor que está lidando com sua " +"nova associação será enviado para a categoria Comitters do Discourse" + +#: ../../core-developers/committing.rst:4 +msgid "Accepting Pull Requests" +msgstr "Aceitando pull requests" + +#: ../../core-developers/committing.rst:8 +msgid "" +"This page is a step-by-step guide for core developers who need to assess, " +"merge, and possibly backport a pull request on the main repository." +msgstr "" +"Esta página é um guia passo a passo para desenvolvedores core que precisam " +"avaliar, mesclar e possivelmente fazer o *backport* de uma pull request no " +"repositório principal." + +#: ../../core-developers/committing.rst:12 +msgid "Assessing a pull request" +msgstr "Avaliação de uma pull request" + +#: ../../core-developers/committing.rst:14 +msgid "" +"Before you can accept a pull request, you need to make sure that it is ready " +"to enter the public source tree. Ask yourself the following questions:" +msgstr "" +"Antes de aceitar uma pull request, você precisa ter certeza de que ela está " +"pronta para entrar na árvore de origem pública. Pergunte a você mesmo as " +"seguintes questões:" + +#: ../../core-developers/committing.rst:19 +msgid "**Are there ongoing discussions at the issue tracker?**" +msgstr "**Existem discussões em andamento no rastreador de problemas?**" + +#: ../../core-developers/committing.rst:18 +msgid "" +"Read the linked issue. If there are ongoing discussions, then we need to " +"have a resolution there before we can merge the pull request." +msgstr "" +"Leia o relatório de problema vinculado. Se houver discussões em andamento, " +"precisamos ter uma resolução antes de podermos mesclar a pull request." + +#: ../../core-developers/committing.rst:24 +msgid "**Was the pull request first made against the appropriate branch?**" +msgstr "**A pull request foi feita primeiro no branch apropriado?**" + +#: ../../core-developers/committing.rst:22 +msgid "" +"The only branch that receives new features is ``main``, the in-development " +"branch. Pull requests should only target bug-fix branches if an issue " +"appears in only that version and possibly older versions." +msgstr "" +"O único branch (em português, ramificação) que recebe novos recursos é " +"``main``, o branch em desenvolvimento. Os pull requests só devem ter como " +"alvo branches de correção de bug se um problema aparecer apenas nessa versão " +"e possivelmente em versões mais antigas." + +#: ../../core-developers/committing.rst:29 +msgid "**Are the changes acceptable?**" +msgstr "**As mudanças são aceitáveis?**" + +#: ../../core-developers/committing.rst:27 +msgid "" +"If you want to share your work-in-progress code on a feature or bugfix, then " +"you can open a ``WIP``-prefixed pull request, publish patches on the `issue " +"tracker`_, or create a public fork of the repository." +msgstr "" +"Se você deseja compartilhar seu código de trabalho em andamento (em inglês, " +"*work-in-progress*) em uma versão de *feature* (recurso) ou *bugfix* " +"(correção de bug), então você pode abrir uma pull request com prefixo " +"``WIP``, publicar patches no `rastreador de problemas`_ ou criar um fork " +"público do repositório." + +#: ../../core-developers/committing.rst:32 +msgid "**Do the checks on the pull request show that the test suite passes?**" +msgstr "" +"**As verificações na pull request mostram que o conjunto de testes foi " +"aprovado?**" + +#: ../../core-developers/committing.rst:32 +msgid "Make sure that all of the status checks are passing." +msgstr "Certifique-se de que todas as verificações de status estejam passando." + +#: ../../core-developers/committing.rst:36 +msgid "**Is the patch in a good state?**" +msgstr "**O patch está em bom estado?**" + +#: ../../core-developers/committing.rst:35 +msgid "" +"Check :ref:`patch` and :ref:`helptriage` to review what is expected of a " +"patch." +msgstr "" +"Confira :ref:`patch` e :ref:`helptriage` para revisar o que se espera de um " +"patch." + +#: ../../core-developers/committing.rst:44 +msgid "" +"**Does the patch break backwards-compatibility without a strong reason?**" +msgstr "" +"**O patch quebra a compatibilidade com versões anteriores sem um motivo " +"forte?**" + +#: ../../core-developers/committing.rst:39 +msgid "" +":ref:`Run the entire test suite ` to make sure that everything " +"still passes. If there is a change to the semantics, then there needs to be " +"a strong reason, because it will cause some peoples' code to break. If you " +"are unsure if the breakage is worth it, then ask on the `Core Development " +"Discourse category `__." +msgstr "" +":ref:`Execute todo o conjunto de testes ` para garantir que tudo " +"passe. Se houver uma alteração na semântica, deve haver um motivo forte, " +"porque isso fará com que o código de algumas pessoas seja quebrado. Se você " +"não tem certeza se a quebra vale a pena, pergunte na `categoria Core " +"Development do Discourse `__." + +#: ../../core-developers/committing.rst:49 +msgid "**Does documentation need to be updated?**" +msgstr "**A documentação precisa ser atualizada?**" + +#: ../../core-developers/committing.rst:47 +msgid "" +"If the pull request introduces backwards-incompatible changes (e.g. " +"deprecating or removing a feature), then make sure that those changes are " +"reflected in the documentation before you merge the pull request." +msgstr "" +"Se a pull request introduzir alterações incompatíveis com versões anteriores " +"(por exemplo, depreciação ou remoção de um recurso), certifique-se de que " +"essas alterações sejam refletidas na documentação antes de mesclar a pull " +"request." + +#: ../../core-developers/committing.rst:58 +msgid "" +"**Were appropriate labels added to signify necessary backporting of the pull " +"request?**" +msgstr "" +"**Os rótulos apropriados foram adicionados para indicar o backporting " +"necessário da pull request?**" + +#: ../../core-developers/committing.rst:52 +msgid "" +"If it is determined that a pull request needs to be backported into one or " +"more of the maintenance branches, then a core developer can apply the label " +"``needs backport to X.Y`` to the pull request. Once the backport pull " +"request has been created, remove the ``needs backport to X.Y`` label from " +"the original pull request. (Only core developers and members of the :ref:" +"`Python Triage Team ` can apply labels to GitHub pull requests)." +msgstr "" +"Se for determinado que uma pull request precisa ser portada para um ou mais " +"dos branches de manutenção, então um desenvolvedor core pode aplicar o " +"rótulo ``needs backport to X.Y`` à pull request. Depois que a pull request " +"de backport tiver sido criada, remova o rótulo ``needs backport to X.Y`` da " +"pull request original. (Apenas desenvolvedores core e membros do :ref:" +"`Python Triage Team ` (em português, equipe de triagem) podem " +"aplicar rótulos às pull requests do GitHub)." + +#: ../../core-developers/committing.rst:68 +msgid "" +"**Does the pull request pass a check indicating that the submitter has " +"signed the CLA?**" +msgstr "" +"**A pull request passa por uma verificação indicando que o remetente assinou " +"o CLA?**" + +#: ../../core-developers/committing.rst:61 +msgid "" +"Make sure that the contributor has signed a `Contributor Licensing Agreement " +"`_ (CLA), unless their " +"change has no possible intellectual property associated with it (e.g. fixing " +"a spelling mistake in documentation). The `CPython CLA Bot `_ checks whether the author has signed the CLA, " +"and replies in the PR if they haven't. For further questions about the CLA " +"process, write to contributors@python.org." +msgstr "" +"Certifique-se de que o colaborador tenha assinado um `Contrato de " +"licenciamento de colaborador `_ (CLA), a menos que sua alteração não tenha propriedade intelectual " +"possível associada a ela (por exemplo, corrigindo um erro de ortografia na " +"documentação). O `bot CPython CLA `_ verifica se o autor assinou o CLA e responde no PR se não o fez. Para " +"mais perguntas sobre o processo CLA, escreva para contribuidores@python.org." + +#: ../../core-developers/committing.rst:76 +msgid "" +"**Were** ``What's New in Python`` **and** ``Misc/NEWS.d/next`` **updated?**" +msgstr "" +"``What's New in Python`` **e** ``Misc/NEWS.d/next`` **foram atualizados?**" + +#: ../../core-developers/committing.rst:71 +msgid "" +"If the change is particularly interesting for end users (e.g. new features, " +"significant improvements, or backwards-incompatible changes), then an entry " +"in the ``What's New in Python`` document (in ``Doc/whatsnew/``) should be " +"added as well. Changes that affect only documentation generally do not " +"require a ``NEWS`` entry. (See the following section for more information.)" +msgstr "" +"Se a alteração for particularmente interessante para os usuários finais (por " +"exemplo, novos recursos, melhorias significativas ou alterações " +"incompatíveis com versões anteriores), uma entrada no documento ``What's New " +"in Python`` (em ``Doc/whatsnew/``) deve ser adicionado também. Alterações " +"que afetam apenas a documentação geralmente não requerem uma entrada " +"``NEWS``. (Consulte a seção a seguir para obter mais informações.)" + +#: ../../core-developers/committing.rst:81 +msgid "Updating NEWS and What's New in Python" +msgstr "Atualizando NEWS e What's New in Python" + +#: ../../core-developers/committing.rst:83 +msgid "" +"Almost all changes made to the code base deserve an entry in ``Misc/NEWS." +"d``. If the change is particularly interesting for end users (e.g. new " +"features, significant improvements, or backwards-incompatible changes), then " +"an entry in the ``What's New in Python`` document (in ``Doc/whatsnew/``) " +"should be added as well. Changes that affect documentation only generally do " +"not require a ``NEWS`` entry." +msgstr "" +"Quase todas as alterações feitas no código base merecem uma entrada em " +"``Misc/NEWS.d``. Se a alteração for particularmente interessante para os " +"usuários finais (por exemplo, novos recursos, melhorias significativas ou " +"alterações incompatíveis com versões anteriores), uma entrada no documento " +"``What's New in Python`` (em ``Doc/whatsnew/``) deve ser adicionado também. " +"Alterações que afetam apenas a documentação geralmente não requerem uma " +"entrada ``NEWS``." + +#: ../../core-developers/committing.rst:90 +msgid "" +"There are two notable exceptions to this general principle, and they both " +"relate to changes that:" +msgstr "" +"Há duas exceções notáveis a esse princípio geral, e ambas se relacionam a " +"mudanças que:" + +#: ../../core-developers/committing.rst:93 +msgid "Already have a ``NEWS`` entry" +msgstr "Já tem uma entrada no ``NEWS``" + +#: ../../core-developers/committing.rst:94 +msgid "" +"Have not yet been included in any formal release (including alpha and beta " +"releases)" +msgstr "" +"Ainda não foram incluídos em nenhuma versão formal (incluindo versões alfa e " +"beta)" + +#: ../../core-developers/committing.rst:97 +msgid "These are the two exceptions:" +msgstr "Estas são as duas exceções:" + +#: ../../core-developers/committing.rst:99 +msgid "" +"**If a change is reverted prior to release**, then the corresponding entry " +"is simply removed. Otherwise, a new entry must be added noting that the " +"change has been reverted (e.g. when a feature is released in an alpha and " +"then cut prior to the first beta)." +msgstr "" +"**Se uma alteração for revertida antes do lançamento**, a entrada " +"correspondente será simplesmente removida. Caso contrário, uma nova entrada " +"deve ser adicionada observando que a alteração foi revertida (por exemplo, " +"quando um recurso é lançado em um alfa e depois cortado antes do primeiro " +"beta)." + +#: ../../core-developers/committing.rst:104 +msgid "" +"**If a change is a fix (or other adjustment) to an earlier unreleased change " +"and the original** ``NEWS`` **entry remains valid**, then no additional " +"entry is needed." +msgstr "" +"**Se uma alteração for uma correção (ou outro ajuste) para uma alteração " +"anterior não lançada e a entrada original no** ``NEWS`` **permanecer " +"válida**, nenhuma entrada adicional será necessária." + +#: ../../core-developers/committing.rst:108 +msgid "" +"If a change needs an entry in ``What's New in Python``, then it is very " +"likely not suitable for including in a maintenance release." +msgstr "" +"Se uma mudança precisa de uma entrada em ``What's New in Python``, então " +"provavelmente não é adequado para incluir em uma versão de manutenção." + +#: ../../core-developers/committing.rst:111 +msgid "" +"``NEWS`` entries go into the ``Misc/NEWS.d`` directory as individual files. " +"The ``NEWS`` entry can be created by using `blurb-it `_, or the `blurb `_ tool " +"and its ``blurb add`` command." +msgstr "" +"Entradas no ``NEWS`` vão para o diretório ``Misc/NEWS.d`` como arquivos " +"individuais. A entrada ``NEWS`` pode ser criada usando `blurb-it `_ ou a ferramenta `blurb `_ e seu comando ``blurb add``." + +#: ../../core-developers/committing.rst:116 +msgid "" +"If you are unable to use the tool, then you can create the ``NEWS`` entry " +"file manually. The ``Misc/NEWS.d`` directory contains a sub-directory named " +"``next``, which contains various sub-directories representing " +"classifications for what was affected (e.g. ``Misc/NEWS.d/next/Library`` for " +"changes relating to the standard library). The file name itself should be in " +"the format ``.gh-issue-..rst``:" +msgstr "" +"Se você não conseguir usar a ferramenta, então você pode criar o arquivo de " +"entrada ``NEWS`` manualmente. O diretório ``Misc/NEWS.d`` contém um " +"subdiretório chamado ``next``, que contém vários subdiretórios representando " +"classificações para o que foi afetado (por exemplo, ``Misc/NEWS.d/next/" +"Library`` para alterações relacionadas à biblioteca padrão). O próprio nome " +"do arquivo deve estar no formato ``.gh-issue-." +".rst``:" + +#: ../../core-developers/committing.rst:123 +msgid "" +"```` is today's date joined with a hyphen (``-``) to the current " +"time, in the ``YYYY-MM-DD-hh-mm-ss`` format (e.g. ``2017-05-27-16-46-23``)." +msgstr "" +"```` é a data de hoje unida com um hífen (``-``) à hora atual, no " +"formato ``YYYY-MM-DD-hh-mm-ss`` (por exemplo, ``2017-27-05-16-46-23``)." + +#: ../../core-developers/committing.rst:125 +msgid "" +"```` is the issue number the change is for (e.g. ``12345`` for " +"``gh-issue-12345``)." +msgstr "" +"```` é o número do *issue* (relatório de problema do GitHub) " +"para o qual a alteração é (por exemplo, ``12345`` para ``gh-issue-12345``)." + +#: ../../core-developers/committing.rst:127 +msgid "" +"```` is a unique string to guarantee that the file name is unique " +"across branches (e.g. ``Yl4gI2``). It is typically six characters long, but " +"it can be any length of letters and numbers. Its uniqueness can be satisfied " +"by typing random characters on your keyboard." +msgstr "" +"```` é uma string única para garantir que o nome do arquivo seja " +"único entre os branches (por exemplo, ``Yl4gI2``). Geralmente tem seis " +"caracteres, mas pode ter qualquer comprimento de letras e números. Sua " +"singularidade pode ser satisfeita digitando caracteres aleatórios em seu " +"teclado." + +#: ../../core-developers/committing.rst:132 +msgid "" +"As a result, a file name can look something like ``Misc/NEWS.d/next/" +"Library/2017-05-27-16-46-23.gh-issue-12345.Yl4gI2.rst``." +msgstr "" +"Como resultado, um nome de arquivo pode se parecer com ``Misc/NEWS.d/next/" +"Library/2017-05-27-16-46-23.gh-issue-12345.Yl4gI2.rst``." + +#: ../../core-developers/committing.rst:135 +msgid "" +"The contents of a ``NEWS`` file should be valid reStructuredText. An 80 " +"character column width should be used. There is no indentation or leading " +"marker in the file (e.g. ``-``). There is also no need to start the entry " +"with the issue number since it is part of the file name. You can use :ref:" +"`inline markups ` too. Here is an example of a ``NEWS`` " +"entry::" +msgstr "" +"O conteúdo de um arquivo ``NEWS`` deve ser reStructuredText válido. Uma " +"largura de coluna de 80 caracteres deve ser usada. Não há recuo ou marcador " +"inicial no arquivo (por exemplo, ``-``). Também não há necessidade de " +"iniciar a entrada com o número do relatório de problema, pois ele faz parte " +"do nome do arquivo. Você pode usar :ref:`marcações em linha `, ou *inline*, também. Aqui está um exemplo de uma entrada ``NEWS``::" + +#: ../../core-developers/committing.rst:145 +msgid "" +"The inline Sphinx roles like ``:func:`` can be used help readers find more " +"information. You can build HTML and verify that the link target is " +"appropriate by using :ref:`make html `." +msgstr "" +"As funções em linha do Sphinx como ``:func:`` podem ser usadas para ajudar " +"os leitores a encontrar mais informações. Você pode construir HTML e " +"verificar se o destino do link é apropriado usando :ref:`make html `." + +#: ../../core-developers/committing.rst:149 +msgid "" +"While Sphinx roles can be beneficial to readers, they are not required. " +"Inline ````code blocks```` can be used instead." +msgstr "" +"Embora as funções (ou *roles*) do Sphinx possam ser benéficas para os " +"leitores, eles não são obrigatórios. Os ````blocos de código```` em linha " +"podem ser usados em seu lugar." + +#: ../../core-developers/committing.rst:154 +msgid "Working with Git_" +msgstr "Trabalhando com Git_" + +#: ../../core-developers/committing.rst:157 ../../index.rst:90 +#: ../../index.rst:127 +msgid ":ref:`gitbootcamp`" +msgstr ":ref:`gitbootcamp`" + +#: ../../core-developers/committing.rst:159 +msgid "" +"As a core developer, you have the ability to push changes to the official " +"Python repositories, so you need to be careful with your workflow:" +msgstr "" +"Como desenvolvedor core, você pode enviar alterações aos repositórios " +"oficiais do Python, portanto, tenha cuidado com seu fluxo de trabalho:" + +#: ../../core-developers/committing.rst:162 +msgid "" +"**You should not push new branches to the main repository.** You can still " +"use them in the fork that you use for the development of patches. You can " +"also push these branches to a separate public repository for maintenance " +"work before it is integrated into the main repository." +msgstr "" +"**Você não deve enviar novos branches para o repositório principal.** Você " +"ainda pode usá-los no fork que você usa para o desenvolvimento de patches. " +"Você também pode enviar esses branches para um repositório público separado " +"para trabalho de manutenção antes de ser integrado ao repositório principal." + +#: ../../core-developers/committing.rst:167 +msgid "" +"**You should not commit directly into the** ``main`` **branch, or any of the " +"maintenance branches.** You should commit against your own feature branch, " +"and then create a pull request." +msgstr "" +"**Você não deve fazer commit diretamente no branch** ``main`` **, ou em " +"qualquer um dos branches de manutenção.** Você deve fazer commit em relação " +"ao seu próprio branch de recurso, e então criar uma pull request." + +#: ../../core-developers/committing.rst:171 +msgid "" +"**For a small change, you can make a quick edit through the GitHub web UI.** " +"If you choose to use the web UI, be aware that GitHub will create a new " +"branch in the main CPython repository rather than in your fork. Delete this " +"newly created branch after it has been merged into the ``main`` branch or " +"any of the maintenance branches. To keep the CPython repository tidy, remove " +"the new branch within a few days." +msgstr "" +"**Para uma pequena alteração, você pode fazer uma edição rápida por meio da " +"interface web de usuário do GitHub.** Se optar por usar a interface web do " +"usuário, saiba que o GitHub criará um novo branch no repositório principal " +"do CPython em vez de em seu fork. Exclua este ramo recém-criado após ele ter " +"sido mesclado no branch ``main`` ou em qualquer um dos branches de " +"manutenção. Para manter o repositório CPython organizado, remova o novo " +"branch em alguns dias." + +#: ../../core-developers/committing.rst:178 +msgid "" +"Keep a fork of the main repository, since it will allow you to revert all " +"local changes (even committed ones) if you're not happy with your local " +"clone." +msgstr "" +"Mantenha um fork do repositório principal, pois isso permitirá que você " +"reverta todas as alterações locais (mesmo as já \"commitadas\") se não " +"estiver satisfeito com seu clone local." + +#: ../../core-developers/committing.rst:189 +msgid "Seeing active branches" +msgstr "Vendo branches ativos" + +#: ../../core-developers/committing.rst:191 +msgid "" +"If you use ``git branch``, then you will see a :ref:`list of branches " +"`. The only branch that receives new features is ``main``, the " +"in-development branch. The other branches receive only bug fixes or security " +"fixes." +msgstr "" +"Se você usar ``git branch``, então você verá uma :ref:`lista de branches " +"`. O único branch que recebe novos recursos é ``main``, o " +"branch em desenvolvimento. Os outros branches recebem apenas correções de " +"bugs ou correções de segurança." + +#: ../../core-developers/committing.rst:200 +msgid "Backporting changes to an older version" +msgstr "Fazendo backport de alterações para uma versão mais antiga" + +#: ../../core-developers/committing.rst:202 +msgid "" +"If it is determined that a pull request needs to be backported into one or " +"more of the maintenance branches, then a core developer can apply the label " +"``needs backport to X.Y`` to the pull request." +msgstr "" +"Se for determinado que uma pull request precisa ser portada para um ou mais " +"dos branches de manutenção, então um desenvolvedor principal pode aplicar o " +"rótulo ``needs backport to X.Y`` à pull request." + +#: ../../core-developers/committing.rst:206 +msgid "" +"After the pull request has been merged, miss-islington (bot) will first try " +"to do the backport automatically. If miss-islington is unable to do it, then " +"the pull request author or the core developer who merged it should look into " +"backporting it themselves, using the backport generated by cherry_picker.py_ " +"as a starting point." +msgstr "" +"Depois que a pull request foi mesclada, miss-islington (bot) primeiro " +"tentará fazer o backport automaticamente. Se miss-islington não puder fazer " +"isso, o autor da pull request ou o desenvolvedor core que a mesclou deve " +"procurar fazer o backport por conta própria, usando o backport gerado por " +"cherry_picker.py_ como ponto de partida." + +#: ../../core-developers/committing.rst:212 +msgid "" +"You can get the commit hash from the original pull request, or you can use " +"``git log`` on the ``main`` branch. To display the 10 most recent commit " +"hashes and their first line of the commit, use the following command::" +msgstr "" +"Você pode obter o hash de commit do pull request original ou pode usar ``git " +"log`` no branch ``main``. Para exibir os 10 hashes de commit mais recentes e " +"sua primeira linha do commit, use o seguinte comando::" + +#: ../../core-developers/committing.rst:220 +msgid "" +"You can prefix the backport pull request with the branch, and reference the " +"pull request number from ``main``. Here is an example::" +msgstr "" +"Você pode prefixar o pull request do backport com o branch, e referenciar o " +"número do pull request de ``main``. Aqui está um exemplo::" + +#: ../../core-developers/committing.rst:225 +msgid "" +"Here \"gh-12345\" is the GitHub *issue* number, and \"GH-NNNN\" is the " +"number of the original *pull request*. Note that cherry_picker.py_ adds the " +"branch prefix automatically." +msgstr "" +"Aqui, \"gh-12345\" é o número do *issue* do GitHub e \"GH-NNNN\" é o número " +"do *pull request* original. Observe que cherry_picker.py_ adiciona o prefixo " +"do branch automaticamente." + +#: ../../core-developers/committing.rst:229 +msgid "" +"Once the backport pull request has been created, remove the ``needs backport " +"to X.Y`` label from the original pull request. (Only core developers and " +"members of the :ref:`Python Triage Team ` can apply labels to " +"GitHub pull requests)." +msgstr "" +"Depois que a pull request de backport tiver sido criada, remova o rótulo " +"``needs backport to X.Y`` da pull request original. (Apenas desenvolvedores " +"cores e membros da equipe de triagem, a :ref:`Python Triage Team `, podem aplicar rótulos às pull requests do GitHub)." + +#: ../../core-developers/committing.rst:238 +msgid "Reverting a merged pull request" +msgstr "Revertendo uma pull request mesclada" + +#: ../../core-developers/committing.rst:240 +msgid "" +"To revert a merged pull request, press the ``Revert`` button at the bottom " +"of the pull request. That will bring up the page to create a new pull " +"request where the commit can be reverted. It will also create a new branch " +"on the main CPython repository. Delete the branch once the pull request has " +"been merged." +msgstr "" +"Para reverter uma pull request mesclada, pressione o botão ``Revert`` na " +"parte inferior da pull request. Isso abrirá a página para criar uma nova " +"pull request onde o commit pode ser revertido. Ele também criará um novo " +"branch no repositório principal do CPython. Exclua o branch assim que a pull " +"request for mesclada." + +#: ../../core-developers/committing.rst:246 +msgid "" +"Always include the reason for reverting the commit to help others understand " +"why it was done. The reason should be included as part of the commit " +"message. Here is an example::" +msgstr "" +"Sempre inclua o motivo da reversão do commit para ajudar os outros a " +"entender por que isso foi feito. O motivo deve ser incluído como parte da " +"mensagem do commit. Aqui está um exemplo::" + +#: ../../core-developers/developer-log.rst:5 +msgid "Developer Log" +msgstr "Log de desenvolvedores" + +#: ../../core-developers/developer-log.rst:7 +msgid "" +"This page lists the historical members of the Python development team. (The " +"master list is kept in a private repository due to containing sensitive " +"contact information.)" +msgstr "" +"Esta página lista os membros históricos da equipe de desenvolvimento do " +"Python. (A lista principal é mantida em um repositório privado por conter " +"informações de contato confidenciais.)" + +#: ../../core-developers/developer-log.rst:1 +#: ../../developer-workflow/development-cycle.rst:261 +#: ../../developer-workflow/development-cycle.rst:308 +msgid "Name" +msgstr "Nome" + +#: ../../core-developers/developer-log.rst:1 +msgid "GitHub username" +msgstr "Usuário no GitHub" + +#: ../../core-developers/developer-log.rst:1 +msgid "Joined" +msgstr "Data de entrada" + +#: ../../core-developers/developer-log.rst:1 +msgid "Left" +msgstr "Data de saída" + +#: ../../core-developers/developer-log.rst:1 +msgid "Notes" +msgstr "Observações" + +#: ../../core-developers/developers.csv:1 +msgid "Shantanu Jain" +msgstr "Shantanu Jain" + +#: ../../core-developers/developers.csv:1 +msgid "hauntsaninja" +msgstr "hauntsaninja" + +#: ../../core-developers/developers.csv:1 +msgid "2022-12-19" +msgstr "2022-12-19" + +#: ../../core-developers/developers.csv:1 +msgid "Kumar Aditya" +msgstr "Kumar Aditya" + +#: ../../core-developers/developers.csv:1 +msgid "kumaraditya303" +msgstr "kumaraditya303" + +#: ../../core-developers/developers.csv:1 +msgid "2022-11-21" +msgstr "2022-11-21" + +#: ../../core-developers/developers.csv:1 +msgid "Hugo van Kemenade" +msgstr "Hugo van Kemenade" + +#: ../../core-developers/developers.csv:1 +msgid "hugovk" +msgstr "hugovk" + +#: ../../core-developers/developers.csv:1 +msgid "Alex Waygood" +msgstr "Alex Waygood" + +#: ../../core-developers/developers.csv:1 +msgid "AlexWaygood" +msgstr "AlexWaygood" + +#: ../../core-developers/developers.csv:1 +msgid "2022-10-18" +msgstr "2022-10-18" + +#: ../../core-developers/developers.csv:1 +msgid "Filipe Laíns" +msgstr "Filipe Laíns" + +#: ../../core-developers/developers.csv:1 ../../core-developers/experts.rst:226 +msgid "FFY00" +msgstr "FFY00" + +#: ../../core-developers/developers.csv:1 +msgid "2022-10-17" +msgstr "2022-10-17" + +#: ../../core-developers/developers.csv:1 +msgid "Erlend Egeberg Aasland" +msgstr "Erlend Egeberg Aasland" + +#: ../../core-developers/developers.csv:1 +msgid "erlend-aasland" +msgstr "erlend-aasland" + +#: ../../core-developers/developers.csv:1 +msgid "2022-05-05" +msgstr "2022-05-05" + +#: ../../core-developers/developers.csv:1 +msgid "Jelle Zijlstra" +msgstr "Jelle Zijlstra" + +#: ../../core-developers/developers.csv:1 +msgid "JelleZijlstra" +msgstr "JelleZijlstra" + +#: ../../core-developers/developers.csv:1 +msgid "2022-02-15" +msgstr "2022-02-15" + +#: ../../core-developers/developers.csv:1 +msgid "Dennis Sweeney" +msgstr "Dennis Sweeney" + +#: ../../core-developers/developers.csv:1 +msgid "sweeneyde" +msgstr "sweeneyde" + +#: ../../core-developers/developers.csv:1 +msgid "2022-02-02" +msgstr "2022-02-02" + +#: ../../core-developers/developers.csv:1 +msgid "Ken Jin" +msgstr "Ken Jin" + +#: ../../core-developers/developers.csv:1 +msgid "Fidget-Spinner" +msgstr "Fidget-Spinner" + +#: ../../core-developers/developers.csv:1 +msgid "2021-08-26" +msgstr "2021-08-26" + +#: ../../core-developers/developers.csv:1 +msgid "Ammar Askar" +msgstr "Ammar Askar" + +#: ../../core-developers/developers.csv:1 +msgid "ammaraskar" +msgstr "ammaraskar" + +#: ../../core-developers/developers.csv:1 +msgid "2021-07-30" +msgstr "2021-07-30" + +#: ../../core-developers/developers.csv:1 +msgid "Irit Katriel" +msgstr "Irit Katriel" + +#: ../../core-developers/developers.csv:1 ../../core-developers/experts.rst:242 +msgid "iritkatriel" +msgstr "iritkatriel" + +#: ../../core-developers/developers.csv:1 +msgid "2021-05-10" +msgstr "2021-05-10" + +#: ../../core-developers/developers.csv:1 +msgid "Batuhan Taskaya" +msgstr "Batuhan Taskaya" + +#: ../../core-developers/developers.csv:1 ../../core-developers/experts.rst:188 +msgid "isidentical" +msgstr "isidentical" + +#: ../../core-developers/developers.csv:1 +msgid "2020-11-08" +msgstr "2020-11-08" + +#: ../../core-developers/developers.csv:1 +msgid "Brandt Bucher" +msgstr "Brandt Bucher" + +#: ../../core-developers/developers.csv:1 +msgid "brandtbucher" +msgstr "brandtbucher" + +#: ../../core-developers/developers.csv:1 +msgid "2020-09-14" +msgstr "2020-09-14" + +#: ../../core-developers/developers.csv:1 +msgid "Lysandros Nikolaou" +msgstr "Lysandros Nikolaou" + +#: ../../core-developers/developers.csv:1 +msgid "lysnikolaou" +msgstr "lysnikolaou" + +#: ../../core-developers/developers.csv:1 +msgid "2020-06-29" +msgstr "2020-06-29" + +#: ../../core-developers/developers.csv:1 +msgid "Kyle Stanley" +msgstr "Kyle Stanley" + +#: ../../core-developers/developers.csv:1 +msgid "aeros" +msgstr "aeros" + +#: ../../core-developers/developers.csv:1 +msgid "2020-04-14" +msgstr "2020-04-14" + +#: ../../core-developers/developers.csv:1 +msgid "Dong-hee Na" +msgstr "Dong-hee Na" + +#: ../../core-developers/developers.csv:1 +msgid "corona10" +msgstr "corona10" + +#: ../../core-developers/developers.csv:1 +msgid "2020-04-08" +msgstr "2020-04-08" + +#: ../../core-developers/developers.csv:1 +msgid "Karthikeyan Singaravelan" +msgstr "Karthikeyan Singaravelan" + +#: ../../core-developers/developers.csv:1 +msgid "tirkarthi" +msgstr "tirkarthi" + +#: ../../core-developers/developers.csv:1 +msgid "2019-12-31" +msgstr "2019-12-31" + +#: ../../core-developers/developers.csv:1 +msgid "Joannah Nanjekye" +msgstr "Joannah Nanjekye" + +#: ../../core-developers/developers.csv:1 +msgid "nanjekyejoannah" +msgstr "nanjekyejoannah" + +#: ../../core-developers/developers.csv:1 +msgid "2019-09-23" +msgstr "2019-09-23" + +#: ../../core-developers/developers.csv:1 +msgid "Abhilash Raj" +msgstr "Abhilash Raj" + +#: ../../core-developers/developers.csv:1 +msgid "maxking" +msgstr "maxking" + +#: ../../core-developers/developers.csv:1 +msgid "2019-08-06" +msgstr "2019-08-06" + +#: ../../core-developers/developers.csv:1 +msgid "Paul Ganssle" +msgstr "Paul Ganssle" + +#: ../../core-developers/developers.csv:1 +msgid "pganssle" +msgstr "pganssle" + +#: ../../core-developers/developers.csv:1 +msgid "2019-06-15" +msgstr "2019-06-15" + +#: ../../core-developers/developers.csv:1 +msgid "Stéphane Wirtel" +msgstr "Stéphane Wirtel" + +#: ../../core-developers/developers.csv:1 +msgid "matrixise" +msgstr "matrixise" + +#: ../../core-developers/developers.csv:1 +msgid "2019-04-08" +msgstr "2019-04-08" + +#: ../../core-developers/developers.csv:1 +msgid "Stefan Behnel" +msgstr "Stefan Behnel" + +#: ../../core-developers/developers.csv:1 +msgid "scoder" +msgstr "scoder" + +#: ../../core-developers/developers.csv:1 +msgid "Cheryl Sabella" +msgstr "Cheryl Sabella" + +#: ../../core-developers/developers.csv:1 +msgid "csabella" +msgstr "csabella" + +#: ../../core-developers/developers.csv:1 +msgid "2019-02-19" +msgstr "2019-02-19" + +#: ../../core-developers/developers.csv:1 +msgid "Lisa Roach" +msgstr "Lisa Roach" + +#: ../../core-developers/developers.csv:1 +msgid "lisroach" +msgstr "lisroach" + +#: ../../core-developers/developers.csv:1 +msgid "2018-09-14" +msgstr "2018-09-14" + +#: ../../core-developers/developers.csv:1 +msgid "Emily Morehouse" +msgstr "Emily Morehouse" + +#: ../../core-developers/developers.csv:1 +msgid "emilyemorehouse" +msgstr "emilyemorehouse" + +#: ../../core-developers/developers.csv:1 +#: ../../developer-workflow/development-cycle.rst:310 +msgid "Pablo Galindo" +msgstr "Pablo Galindo" + +#: ../../core-developers/developers.csv:1 +#: ../../developer-workflow/development-cycle.rst:310 +msgid "pablogsal" +msgstr "pablogsal" + +#: ../../core-developers/developers.csv:1 +msgid "2018-06-06" +msgstr "2018-06-06" + +#: ../../core-developers/developers.csv:1 +msgid "Mark Shannon" +msgstr "Mark Shannon" + +#: ../../core-developers/developers.csv:1 +msgid "markshannon" +msgstr "markshannon" + +#: ../../core-developers/developers.csv:1 +msgid "2018-05-15" +msgstr "2018-05-15" + +#: ../../core-developers/developers.csv:1 +msgid "Petr Viktorin" +msgstr "Petr Viktorin" + +#: ../../core-developers/developers.csv:1 +msgid "encukou" +msgstr "encukou" + +#: ../../core-developers/developers.csv:1 +msgid "2018-04-16" +msgstr "2018-04-16" + +#: ../../core-developers/developers.csv:1 +msgid "Nathaniel J. Smith" +msgstr "Nathaniel J. Smith" + +#: ../../core-developers/developers.csv:1 +msgid "njsmith" +msgstr "njsmith" + +#: ../../core-developers/developers.csv:1 +msgid "2018-01-25" +msgstr "2018-01-25" + +#: ../../core-developers/developers.csv:1 +msgid "Julien Palard" +msgstr "Julien Palard" + +#: ../../core-developers/developers.csv:1 +msgid "JulienPalard" +msgstr "JulienPalard" + +#: ../../core-developers/developers.csv:1 +msgid "2017-12-08" +msgstr "2017-12-08" + +#: ../../core-developers/developers.csv:1 +msgid "Ivan Levkivskyi" +msgstr "Ivan Levkivskyi" + +#: ../../core-developers/developers.csv:1 +msgid "ilevkivskyi" +msgstr "ilevkivskyi" + +#: ../../core-developers/developers.csv:1 +msgid "2017-12-06" +msgstr "2017-12-06" + +#: ../../core-developers/developers.csv:1 +msgid "Carol Willing" +msgstr "Carol Willing" + +#: ../../core-developers/developers.csv:1 +msgid "willingc" +msgstr "willingc" + +#: ../../core-developers/developers.csv:1 +msgid "2017-05-24" +msgstr "2017-05-24" + +#: ../../core-developers/developers.csv:1 ../../core-developers/experts.rst:333 +#: ../../developer-workflow/development-cycle.rst:326 +msgid "Mariatta" +msgstr "Mariatta" + +#: ../../core-developers/developers.csv:1 +msgid "2017-01-27" +msgstr "2017-01-27" + +#: ../../core-developers/developers.csv:1 +msgid "Xiang Zhang" +msgstr "Xiang Zhang" + +#: ../../core-developers/developers.csv:1 +msgid "zhangyangyu" +msgstr "zhangyangyu" + +#: ../../core-developers/developers.csv:1 +msgid "2016-11-21" +msgstr "2016-11-21" + +#: ../../core-developers/developers.csv:1 +msgid "Inada Naoki" +msgstr "Inada Naoki" + +#: ../../core-developers/developers.csv:1 +msgid "methane" +msgstr "methane" + +#: ../../core-developers/developers.csv:1 +msgid "2016-09-26" +msgstr "2016-09-26" + +#: ../../core-developers/developers.csv:1 +msgid "Xavier de Gaye" +msgstr "Xavier de Gaye" + +#: ../../core-developers/developers.csv:1 +msgid "xdegaye" +msgstr "xdegaye" + +#: ../../core-developers/developers.csv:1 +msgid "2016-06-03" +msgstr "2016-06-03" + +#: ../../core-developers/developers.csv:1 +msgid "Privileges relinquished on 2018-01-25" +msgstr "Privilégios renunciados em 2018-01-25" + +#: ../../core-developers/developers.csv:1 +msgid "Davin Potts" +msgstr "Davin Potts" + +#: ../../core-developers/developers.csv:1 +msgid "applio" +msgstr "applio" + +#: ../../core-developers/developers.csv:1 +msgid "2016-03-06" +msgstr "2016-03-06" + +#: ../../core-developers/developers.csv:1 +msgid "Martin Panter" +msgstr "Martin Panter" + +#: ../../core-developers/developers.csv:1 +msgid "vadmium" +msgstr "vadmium" + +#: ../../core-developers/developers.csv:1 +msgid "2015-08-10" +msgstr "2015-08-10" + +#: ../../core-developers/developers.csv:1 +msgid "2020-11-26" +msgstr "2020-11-26" + +#: ../../core-developers/developers.csv:1 +msgid "Paul Moore" +msgstr "Paul Moore" + +#: ../../core-developers/developers.csv:1 ../../core-developers/experts.rst:273 +msgid "pfmoore" +msgstr "pfmoore" + +#: ../../core-developers/developers.csv:1 +msgid "2015-03-15" +msgstr "2015-03-15" + +#: ../../core-developers/developers.csv:1 +msgid "Robert Collins" +msgstr "Robert Collins" + +#: ../../core-developers/developers.csv:1 +msgid "rbtcollins" +msgstr "rbtcollins" + +#: ../../core-developers/developers.csv:1 +msgid "2014-10-16" +msgstr "2014-10-16" + +#: ../../core-developers/developers.csv:1 +msgid "To work on unittest" +msgstr "Para trabalhar no unittest" + +#: ../../core-developers/developers.csv:1 +msgid "Berker Peksağ" +msgstr "Berker Peksağ" + +#: ../../core-developers/developers.csv:1 +#: ../../developer-workflow/development-cycle.rst:320 +msgid "berkerpeksag" +msgstr "berkerpeksag" + +#: ../../core-developers/developers.csv:1 +msgid "2014-06-26" +msgstr "2014-06-26" + +#: ../../core-developers/developers.csv:1 +msgid "Steve Dower" +msgstr "Steve Dower" + +#: ../../core-developers/developers.csv:1 +msgid "zooba" +msgstr "zooba" + +#: ../../core-developers/developers.csv:1 +msgid "2014-05-10" +msgstr "2014-05-10" + +#: ../../core-developers/developers.csv:1 +msgid "Kushal Das" +msgstr "Kushal Das" + +#: ../../core-developers/developers.csv:1 +msgid "kushaldas" +msgstr "kushaldas" + +#: ../../core-developers/developers.csv:1 +msgid "2014-04-14" +msgstr "2014-04-14" + +#: ../../core-developers/developers.csv:1 +msgid "Steven D'Aprano" +msgstr "Steven D'Aprano" + +#: ../../core-developers/developers.csv:1 +msgid "stevendaprano" +msgstr "stevendaprano" + +#: ../../core-developers/developers.csv:1 +msgid "2014-02-08" +msgstr "2014-02-08" + +#: ../../core-developers/developers.csv:1 +msgid "For statistics module" +msgstr "Para o módulo statistics" + +#: ../../core-developers/developers.csv:1 +msgid "Yury Selivanov" +msgstr "Yury Selivanov" + +#: ../../core-developers/developers.csv:1 ../../core-developers/experts.rst:105 +#: ../../core-developers/experts.rst:140 ../../core-developers/experts.rst:246 +msgid "1st1" +msgstr "1st1" + +#: ../../core-developers/developers.csv:1 +msgid "2014-01-23" +msgstr "2014-01-23" + +#: ../../core-developers/developers.csv:1 +#: ../../getting-started/getting-help.rst:105 +msgid "Zachary Ware" +msgstr "Zachary Ware" + +#: ../../core-developers/developers.csv:1 +msgid "zware" +msgstr "zware" + +#: ../../core-developers/developers.csv:1 +msgid "2013-11-02" +msgstr "2013-11-02" + +#: ../../core-developers/developers.csv:1 +#: ../../developer-workflow/development-cycle.rst:267 +msgid "Donald Stufft" +msgstr "Donald Stufft" + +#: ../../core-developers/developers.csv:1 +#: ../../developer-workflow/development-cycle.rst:267 +msgid "dstufft" +msgstr "dstufft" + +#: ../../core-developers/developers.csv:1 +msgid "2013-08-14" +msgstr "2013-08-14" + +#: ../../core-developers/developers.csv:1 +msgid "Ethan Furman" +msgstr "Ethan Furman" + +#: ../../core-developers/developers.csv:1 +msgid "ethanfurman" +msgstr "ethanfurman" + +#: ../../core-developers/developers.csv:1 +msgid "2013-05-11" +msgstr "2013-05-11" + +#: ../../core-developers/developers.csv:1 +msgid "Serhiy Storchaka" +msgstr "Serhiy Storchaka" + +#: ../../core-developers/developers.csv:1 ../../core-developers/experts.rst:68 +#: ../../core-developers/experts.rst:169 +msgid "serhiy-storchaka" +msgstr "serhiy-storchaka" + +#: ../../core-developers/developers.csv:1 +msgid "2012-12-26" +msgstr "2012-12-26" + +#: ../../core-developers/developers.csv:1 +msgid "Chris Jerdonek" +msgstr "Chris Jerdonek" + +#: ../../core-developers/developers.csv:1 +msgid "cjerdonek" +msgstr "cjerdonek" + +#: ../../core-developers/developers.csv:1 +msgid "2012-09-24" +msgstr "2012-09-24" + +#: ../../core-developers/developers.csv:1 +msgid "Eric Snow" +msgstr "Eric Snow" + +#: ../../core-developers/developers.csv:1 +msgid "ericsnowcurrently" +msgstr "ericsnowcurrently" + +#: ../../core-developers/developers.csv:1 +msgid "2012-09-05" +msgstr "2012-09-05" + +#: ../../core-developers/developers.csv:1 +msgid "Peter Moody" +msgstr "Peter Moody" + +#: ../../core-developers/developers.csv:1 +msgid "2012-05-20" +msgstr "2012-05-20" + +#: ../../core-developers/developers.csv:1 +msgid "2017-02-10" +msgstr "2017-02-10" + +#: ../../core-developers/developers.csv:1 +msgid "For ipaddress module; did not make GitHub transition" +msgstr "Para o módulo ipaddress; não fez a transição para GitHub" + +#: ../../core-developers/developers.csv:1 +msgid "Hynek Schlawack" +msgstr "Hynek Schlawack" + +#: ../../core-developers/developers.csv:1 +msgid "hynek" +msgstr "hynek" + +#: ../../core-developers/developers.csv:1 +msgid "2012-05-14" +msgstr "2012-05-14" + +#: ../../core-developers/developers.csv:1 +msgid "Richard Oudkerk" +msgstr "Richard Oudkerk" + +#: ../../core-developers/developers.csv:1 +msgid "2012-04-29" +msgstr "2012-04-29" + +#: ../../core-developers/developers.csv:1 +msgid "For multiprocessing module; did not make GitHub transition" +msgstr "Para o módulo multiprocessing; não fez a transição para GitHub" + +#: ../../core-developers/developers.csv:1 +msgid "Andrew Svetlov" +msgstr "Andrew Svetlov" + +#: ../../core-developers/developers.csv:1 +msgid "asvetlov" +msgstr "asvetlov" + +#: ../../core-developers/developers.csv:1 +msgid "2012-03-13" +msgstr "2012-03-13" + +#: ../../core-developers/developers.csv:1 +msgid "At PyCon sprint" +msgstr "Na sprint PyCon" + +#: ../../core-developers/developers.csv:1 +msgid "Petri Lehtinen" +msgstr "Petri Lehtinen" + +#: ../../core-developers/developers.csv:1 +msgid "akheron" +msgstr "akheron" + +#: ../../core-developers/developers.csv:1 +msgid "2011-10-22" +msgstr "2011-10-22" + +#: ../../core-developers/developers.csv:1 +msgid "2020-11-12" +msgstr "2020-11-12" + +#: ../../core-developers/developers.csv:1 +msgid "Meador Inge" +msgstr "Meador Inge" + +#: ../../core-developers/developers.csv:1 ../../core-developers/experts.rst:240 +msgid "meadori" +msgstr "meadori" + +#: ../../core-developers/developers.csv:1 +msgid "2011-09-19" +msgstr "2011-09-19" + +#: ../../core-developers/developers.csv:1 +msgid "Jeremy Kloth" +msgstr "Jeremy Kloth" + +#: ../../core-developers/developers.csv:1 +msgid "jkloth" +msgstr "jkloth" + +#: ../../core-developers/developers.csv:1 +msgid "2011-09-12" +msgstr "2011-09-12" + +#: ../../core-developers/developers.csv:1 +msgid "Sandro Tosi" +msgstr "Sandro Tosi" + +#: ../../core-developers/developers.csv:1 +msgid "sandrotosi" +msgstr "sandrotosi" + +#: ../../core-developers/developers.csv:1 +msgid "2011-08-01" +msgstr "2011-08-01" + +#: ../../core-developers/developers.csv:1 +msgid "Alex Gaynor" +msgstr "Alex Gaynor" + +#: ../../core-developers/developers.csv:1 +msgid "alex" +msgstr "alex" + +#: ../../core-developers/developers.csv:1 +msgid "2011-07-18" +msgstr "2011-07-18" + +#: ../../core-developers/developers.csv:1 +msgid "For PyPy compatibility (since expanded scope)" +msgstr "Para compatibilidade com PyPy (desde o escopo expandido)" + +#: ../../core-developers/developers.csv:1 +msgid "Charles-François Natali" +msgstr "Charles-François Natali" + +#: ../../core-developers/developers.csv:1 +msgid "2011-05-19" +msgstr "2011-05-19" + +#: ../../core-developers/developers.csv:1 +msgid "Did not make GitHub transition" +msgstr "Não fez a transição para GitHub" + +#: ../../core-developers/developers.csv:1 +msgid "Nadeem Vawda" +msgstr "Nadeem Vawda" + +#: ../../core-developers/developers.csv:1 +msgid "2011-04-10" +msgstr "2011-04-10" + +#: ../../core-developers/developers.csv:1 +msgid "Jason R. Coombs" +msgstr "Jason R. Coombs" + +#: ../../core-developers/developers.csv:1 +msgid "jaraco" +msgstr "jaraco" + +#: ../../core-developers/developers.csv:1 +msgid "2011-03-14" +msgstr "2011-03-14" + +#: ../../core-developers/developers.csv:1 +msgid "For sprinting on distutils2" +msgstr "Para a sprint no distutils2" + +#: ../../core-developers/developers.csv:1 +msgid "Ross Lagerwall" +msgstr "Ross Lagerwall" + +#: ../../core-developers/developers.csv:1 +msgid "2011-03-13" +msgstr "2011-03-13" + +#: ../../core-developers/developers.csv:1 ../../internals/exploring.rst:1 +msgid "Eli Bendersky" +msgstr "Eli Bendersky" + +#: ../../core-developers/developers.csv:1 +msgid "eliben" +msgstr "eliben" + +#: ../../core-developers/developers.csv:1 +msgid "2011-01-11" +msgstr "2011-01-11" + +#: ../../core-developers/developers.csv:1 +#: ../../developer-workflow/development-cycle.rst:316 +#: ../../include/branches.csv:1 ../../include/end-of-life.csv:1 +msgid "Ned Deily" +msgstr "Ned Deily" + +#: ../../core-developers/developers.csv:1 +#: ../../developer-workflow/development-cycle.rst:316 +msgid "ned-deily" +msgstr "ned-deily" + +#: ../../core-developers/developers.csv:1 +msgid "2011-01-09" +msgstr "2011-01-09" + +#: ../../core-developers/developers.csv:1 +msgid "David Malcolm" +msgstr "David Malcolm" + +#: ../../core-developers/developers.csv:1 +msgid "davidmalcolm" +msgstr "davidmalcolm" + +#: ../../core-developers/developers.csv:1 +msgid "2010-10-27" +msgstr "2010-10-27" + +#: ../../core-developers/developers.csv:1 +msgid "relinquished privileges on 2020-11-12" +msgstr "renunciou privilégios em 2020-11-12" + +#: ../../core-developers/developers.csv:1 +msgid "Tal Einat" +msgstr "Tal Einat" + +#: ../../core-developers/developers.csv:1 +msgid "taleinat" +msgstr "taleinat" + +#: ../../core-developers/developers.csv:1 +msgid "2010-10-04" +msgstr "2010-10-04" + +#: ../../core-developers/developers.csv:1 +msgid "Initially for IDLE" +msgstr "Inicialmente para IDLE" + +#: ../../core-developers/developers.csv:1 +#: ../../developer-workflow/development-cycle.rst:273 +#: ../../developer-workflow/development-cycle.rst:313 +#: ../../include/branches.csv:1 +msgid "Łukasz Langa" +msgstr "Łukasz Langa" + +#: ../../core-developers/developers.csv:1 +#: ../../developer-workflow/development-cycle.rst:273 +#: ../../developer-workflow/development-cycle.rst:313 +msgid "ambv" +msgstr "ambv" + +#: ../../core-developers/developers.csv:1 +msgid "2010-09-08" +msgstr "2010-09-08" + +#: ../../core-developers/developers.csv:1 +msgid "Daniel Stutzbach" +msgstr "Daniel Stutzbach" + +#: ../../core-developers/developers.csv:1 +msgid "2010-08-22" +msgstr "2010-08-22" + +#: ../../core-developers/developers.csv:1 +msgid "Éric Araujo" +msgstr "Éric Araujo" + +#: ../../core-developers/developers.csv:1 +msgid "merwok" +msgstr "merwok" + +#: ../../core-developers/developers.csv:1 +msgid "2010-08-10" +msgstr "2010-08-10" + +#: ../../core-developers/developers.csv:1 +msgid "Brian Quinlan" +msgstr "Brian Quinlan" + +#: ../../core-developers/developers.csv:1 +msgid "brianquinlan" +msgstr "brianquinlan" + +#: ../../core-developers/developers.csv:1 +msgid "2010-07-26" +msgstr "2010-07-26" + +#: ../../core-developers/developers.csv:1 +msgid "For work related to PEP 3148" +msgstr "Para trabalho relacionado à PEP 3148" + +#: ../../core-developers/developers.csv:1 +msgid "Alexander Belopolsky" +msgstr "Alexander Belopolsky" + +#: ../../core-developers/developers.csv:1 ../../core-developers/experts.rst:241 +msgid "abalkin" +msgstr "abalkin" + +#: ../../core-developers/developers.csv:1 +msgid "2010-05-25" +msgstr "2010-05-25" + +#: ../../core-developers/developers.csv:1 +msgid "Tim Golden" +msgstr "Tim Golden" + +#: ../../core-developers/developers.csv:1 +msgid "tjguk" +msgstr "tjguk" + +#: ../../core-developers/developers.csv:1 +msgid "2010-04-21" +msgstr "2010-04-21" + +#: ../../core-developers/developers.csv:1 +msgid "Giampaolo Rodolà" +msgstr "Giampaolo Rodolà" + +#: ../../core-developers/developers.csv:1 ../../core-developers/experts.rst:208 +#: ../../core-developers/experts.rst:335 +msgid "giampaolo" +msgstr "giampaolo" + +#: ../../core-developers/developers.csv:1 +msgid "2010-04-17" +msgstr "2010-04-17" + +#: ../../core-developers/developers.csv:1 +msgid "Jean-Paul Calderone" +msgstr "Jean-Paul Calderone" + +#: ../../core-developers/developers.csv:1 +msgid "2010-04-06" +msgstr "2010-04-06" + +#: ../../core-developers/developers.csv:1 +msgid "Brian Curtin" +msgstr "Brian Curtin" + +#: ../../core-developers/developers.csv:1 +msgid "briancurtin" +msgstr "briancurtin" + +#: ../../core-developers/developers.csv:1 +msgid "2010-03-24" +msgstr "2010-03-24" + +#: ../../core-developers/developers.csv:1 +msgid "Florent Xicluna" +msgstr "Florent Xicluna" + +#: ../../core-developers/developers.csv:1 +msgid "2010-02-25" +msgstr "2010-02-25" + +#: ../../core-developers/developers.csv:1 +msgid "Dino Viehland" +msgstr "Dino Viehland" + +#: ../../core-developers/developers.csv:1 +msgid "DinoV" +msgstr "DinoV" + +#: ../../core-developers/developers.csv:1 +msgid "2010-02-23" +msgstr "2010-02-23" + +#: ../../core-developers/developers.csv:1 +msgid "For IronPython compatibility" +msgstr "Para compatibilidade com IronPython" + +#: ../../core-developers/developers.csv:1 +#: ../../developer-workflow/development-cycle.rst:318 +#: ../../include/end-of-life.csv:1 +msgid "Larry Hastings" +msgstr "Larry Hastings" + +#: ../../core-developers/developers.csv:1 ../../core-developers/experts.rst:286 +#: ../../core-developers/experts.rst:318 +#: ../../developer-workflow/development-cycle.rst:318 +msgid "larryhastings" +msgstr "larryhastings" + +#: ../../core-developers/developers.csv:1 +msgid "2010-02-22" +msgstr "2010-02-22" + +#: ../../core-developers/developers.csv:1 +msgid "Victor Stinner" +msgstr "Victor Stinner" + +#: ../../core-developers/developers.csv:1 ../../core-developers/experts.rst:243 +msgid "vstinner" +msgstr "vstinner" + +#: ../../core-developers/developers.csv:1 +msgid "2010-01-30" +msgstr "2010-01-30" + +#: ../../core-developers/developers.csv:1 +msgid "Stefan Krah" +msgstr "Stefan Krah" + +#: ../../core-developers/developers.csv:1 +msgid "skrah" +msgstr "skrah" + +#: ../../core-developers/developers.csv:1 +msgid "2010-01-05" +msgstr "2010-01-05" + +#: ../../core-developers/developers.csv:1 +msgid "2020-10-07" +msgstr "2020-10-07" + +#: ../../core-developers/developers.csv:1 +msgid "For the decimal module" +msgstr "Para o módulo decimal" + +#: ../../core-developers/developers.csv:1 +msgid "Doug Hellmann" +msgstr "Doug Hellmann" + +#: ../../core-developers/developers.csv:1 +msgid "dhellmann" +msgstr "dhellmann" + +#: ../../core-developers/developers.csv:1 +msgid "2009-09-20" +msgstr "2009-09-20" + +#: ../../core-developers/developers.csv:1 +msgid "2020-11-11" +msgstr "2020-11-11" + +#: ../../core-developers/developers.csv:1 +msgid "For documentation; relinquished privileges on 2020-11-11" +msgstr "Para documentação; renunciou os privilégios em 2020-11-11" + +#: ../../core-developers/developers.csv:1 +msgid "Frank Wierzbicki" +msgstr "Frank Wierzbicki" + +#: ../../core-developers/developers.csv:1 +msgid "2009-08-02" +msgstr "2009-08-02" + +#: ../../core-developers/developers.csv:1 +msgid "For Jython compatibility; did not make GitHub transition" +msgstr "Para compatibilidade com Jython; não fez a transição para GitHub" + +#: ../../core-developers/developers.csv:1 +#: ../../developer-workflow/development-cycle.rst:324 +msgid "Ezio Melotti" +msgstr "Ezio Melotti" + +#: ../../core-developers/developers.csv:1 ../../core-developers/experts.rst:233 +#: ../../core-developers/experts.rst:322 +#: ../../developer-workflow/development-cycle.rst:324 +msgid "ezio-melotti" +msgstr "ezio-melotti" + +#: ../../core-developers/developers.csv:1 +msgid "2009-06-07" +msgstr "2009-06-07" + +#: ../../core-developers/developers.csv:1 +msgid "For documentation" +msgstr "Para documentação" + +#: ../../core-developers/developers.csv:1 +msgid "Philip Jenvey" +msgstr "Philip Jenvey" + +#: ../../core-developers/developers.csv:1 ../../core-developers/experts.rst:261 +msgid "pjenvey" +msgstr "pjenvey" + +#: ../../core-developers/developers.csv:1 +msgid "2009-05-07" +msgstr "2009-05-07" + +#: ../../core-developers/developers.csv:1 +msgid "For Jython compatibility" +msgstr "Para compatibilidade com Jython" + +#: ../../core-developers/developers.csv:1 +msgid "Michael Foord" +msgstr "Michael Foord" + +#: ../../core-developers/developers.csv:1 +msgid "voidspace" +msgstr "voidspace" + +#: ../../core-developers/developers.csv:1 +msgid "2009-04-01" +msgstr "2009-04-01" + +#: ../../core-developers/developers.csv:1 +msgid "R\\. David Murray" +msgstr "R\\. David Murray" + +#: ../../core-developers/developers.csv:1 ../../core-developers/experts.rst:60 +msgid "bitdancer" +msgstr "bitdancer" + +#: ../../core-developers/developers.csv:1 +msgid "2009-03-30" +msgstr "2009-03-30" + +#: ../../core-developers/developers.csv:1 +msgid "Chris Withers" +msgstr "Chris Withers" + +#: ../../core-developers/developers.csv:1 +msgid "cjw296" +msgstr "cjw296" + +#: ../../core-developers/developers.csv:1 +msgid "2009-03-08" +msgstr "2009-03-08" + +#: ../../core-developers/developers.csv:1 +msgid "Tarek Ziadé" +msgstr "Tarek Ziadé" + +#: ../../core-developers/developers.csv:1 +msgid "tarekziade" +msgstr "tarekziade" + +#: ../../core-developers/developers.csv:1 +msgid "2008-12-21" +msgstr "2008-12-21" + +#: ../../core-developers/developers.csv:1 +msgid "For distutils module" +msgstr "Para o módulo distutils" + +#: ../../core-developers/developers.csv:1 +msgid "Hirokazu Yamamoto" +msgstr "Hirokazu Yamamoto" + +#: ../../core-developers/developers.csv:1 +msgid "2008-08-12" +msgstr "2008-08-12" + +#: ../../core-developers/developers.csv:1 +msgid "For Windows build; did not make GitHub transition" +msgstr "Para compilação no Windows; não fez a transição para GitHub" + +#: ../../core-developers/developers.csv:1 +msgid "Armin Ronacher" +msgstr "Armin Ronacher" + +#: ../../core-developers/developers.csv:1 ../../core-developers/experts.rst:167 +msgid "mitsuhiko" +msgstr "mitsuhiko" + +#: ../../core-developers/developers.csv:1 +msgid "2008-07-23" +msgstr "2008-07-23" + +#: ../../core-developers/developers.csv:1 +msgid "For documentation toolset and ast module" +msgstr "Para conjunto de ferramentas da documentação e o módulo ast" + +#: ../../core-developers/developers.csv:1 +msgid "Antoine Pitrou" +msgstr "Antoine Pitrou" + +#: ../../core-developers/developers.csv:1 +msgid "pitrou" +msgstr "pitrou" + +#: ../../core-developers/developers.csv:1 +msgid "2008-07-16" +msgstr "2008-07-16" + +#: ../../core-developers/developers.csv:1 +msgid "Senthil Kumaran" +msgstr "Senthil Kumaran" + +#: ../../core-developers/developers.csv:1 ../../core-developers/experts.rst:251 +msgid "orsenthil" +msgstr "orsenthil" + +#: ../../core-developers/developers.csv:1 +msgid "2008-06-16" +msgstr "2008-06-16" + +#: ../../core-developers/developers.csv:1 +msgid "Jesse Noller" +msgstr "Jesse Noller" + +#: ../../core-developers/developers.csv:1 +msgid "Jesús Cea" +msgstr "Jesús Cea" + +#: ../../core-developers/developers.csv:1 ../../core-developers/experts.rst:305 +msgid "jcea" +msgstr "jcea" + +#: ../../core-developers/developers.csv:1 +msgid "2008-05-13" +msgstr "2008-05-13" + +#: ../../core-developers/developers.csv:1 +msgid "For bsddb module" +msgstr "Para o módulo bsddb" + +#: ../../core-developers/developers.csv:1 +msgid "Guilherme Polo" +msgstr "Guilherme Polo" + +#: ../../core-developers/developers.csv:1 +msgid "2008-04-24" +msgstr "2008-04-24" + +#: ../../core-developers/developers.csv:1 +msgid "Jeroen Ruigrok van der Werven" +msgstr "Jeroen Ruigrok van der Werven" + +#: ../../core-developers/developers.csv:1 +msgid "2008-04-12" +msgstr "2008-04-12" + +#: ../../core-developers/developers.csv:1 +msgid "For documentation; did not make GitHub transition" +msgstr "Para documentação; não fez a transição para GitHub" + +#: ../../core-developers/developers.csv:1 +#: ../../developer-workflow/development-cycle.rst:263 +#: ../../include/end-of-life.csv:1 +msgid "Benjamin Peterson" +msgstr "Benjamin Peterson" + +#: ../../core-developers/developers.csv:1 ../../core-developers/experts.rst:146 +#: ../../core-developers/experts.rst:224 ../../core-developers/experts.rst:352 +#: ../../developer-workflow/development-cycle.rst:263 +msgid "benjaminp" +msgstr "benjaminp" + +#: ../../core-developers/developers.csv:1 +msgid "2008-03-25" +msgstr "2008-03-25" + +#: ../../core-developers/developers.csv:1 +msgid "For bug triage" +msgstr "Para triagem de bugs" + +#: ../../core-developers/developers.csv:1 +msgid "David Wolever" +msgstr "David Wolever" + +#: ../../core-developers/developers.csv:1 +msgid "wolever" +msgstr "wolever" + +#: ../../core-developers/developers.csv:1 +msgid "2008-03-17" +msgstr "2008-03-17" + +#: ../../core-developers/developers.csv:1 +msgid "2020-11-21" +msgstr "2020-11-21" + +#: ../../core-developers/developers.csv:1 +msgid "For 2to3 module" +msgstr "Para o módulo 2to3" + +#: ../../core-developers/developers.csv:1 +msgid "Trent Nelson" +msgstr "Trent Nelson" + +#: ../../core-developers/developers.csv:1 +msgid "tpn" +msgstr "tpn" + +#: ../../core-developers/developers.csv:1 +msgid "Mark Dickinson" +msgstr "Mark Dickinson" + +#: ../../core-developers/developers.csv:1 ../../core-developers/experts.rst:80 +#: ../../core-developers/experts.rst:119 ../../core-developers/experts.rst:329 +msgid "mdickinson" +msgstr "mdickinson" + +#: ../../core-developers/developers.csv:1 +msgid "2008-01-06" +msgstr "2008-01-06" + +#: ../../core-developers/developers.csv:1 +msgid "For maths-related work" +msgstr "Para trabalho relacionado a maths" + +#: ../../core-developers/developers.csv:1 +msgid "Amaury Forgeot d'Arc" +msgstr "Amaury Forgeot d'Arc" + +#: ../../core-developers/developers.csv:1 +msgid "amauryfa" +msgstr "amauryfa" + +#: ../../core-developers/developers.csv:1 +msgid "2007-11-09" +msgstr "2007-11-09" + +#: ../../core-developers/developers.csv:1 +msgid "Christian Heimes" +msgstr "Christian Heimes" + +#: ../../core-developers/developers.csv:1 ../../core-developers/experts.rst:216 +msgid "tiran" +msgstr "tiran" + +#: ../../core-developers/developers.csv:1 +msgid "2007-10-31" +msgstr "2007-10-31" + +#: ../../core-developers/developers.csv:1 +msgid "Bill Janssen" +msgstr "Bill Janssen" + +#: ../../core-developers/developers.csv:1 +msgid "2007-08-28" +msgstr "2007-08-28" + +#: ../../core-developers/developers.csv:1 +msgid "For ssl module; did not make GitHub transition" +msgstr "Para o módulo ssl; não fez a transição para GitHub" + +#: ../../core-developers/developers.csv:1 +msgid "Jeffrey Yasskin" +msgstr "Jeffrey Yasskin" + +#: ../../core-developers/developers.csv:1 +msgid "2007-08-09" +msgstr "2007-08-09" + +#: ../../core-developers/developers.csv:1 +msgid "Mark Summerfield" +msgstr "Mark Summerfield" + +#: ../../core-developers/developers.csv:1 +msgid "2007-08-01" +msgstr "2007-08-01" + +#: ../../core-developers/developers.csv:1 +msgid "Alexandre Vassalotti" +msgstr "Alexandre Vassalotti" + +#: ../../core-developers/developers.csv:1 ../../core-developers/experts.rst:93 +#: ../../core-developers/experts.rst:94 ../../core-developers/experts.rst:174 +#: ../../core-developers/experts.rst:175 +msgid "avassalotti" +msgstr "avassalotti" + +#: ../../core-developers/developers.csv:1 +msgid "2007-05-21" +msgstr "2007-05-21" + +#: ../../core-developers/developers.csv:1 +msgid "For GSoC" +msgstr "Para GSoC" + +#: ../../core-developers/developers.csv:1 +msgid "Travis E. Oliphant" +msgstr "Travis E. Oliphant" + +#: ../../core-developers/developers.csv:1 +msgid "2007-04-17" +msgstr "2007-04-17" + +#: ../../core-developers/developers.csv:1 +msgid "Eric V. Smith" +msgstr "Eric V. Smith" + +#: ../../core-developers/developers.csv:1 +msgid "ericvsmith" +msgstr "ericvsmith" + +#: ../../core-developers/developers.csv:1 +msgid "2007-02-28" +msgstr "2007-02-28" + +#: ../../core-developers/developers.csv:1 +msgid "For PEP 3101 in a sandbox" +msgstr "Para a PEP 3101 em uma sandbox" + +#: ../../core-developers/developers.csv:1 +msgid "Josiah Carlson" +msgstr "Josiah Carlson" + +#: ../../core-developers/developers.csv:1 +msgid "josiahcarlson" +msgstr "josiahcarlson" + +#: ../../core-developers/developers.csv:1 +msgid "2007-01-06" +msgstr "2007-01-06" + +#: ../../core-developers/developers.csv:1 +msgid "For asyncore and asynchat modules" +msgstr "Para os módulos asyncore e asynchat" + +#: ../../core-developers/developers.csv:1 +msgid "Collin Winter" +msgstr "Collin Winter" + +#: ../../core-developers/developers.csv:1 +msgid "2007-01-05" +msgstr "2007-01-05" + +#: ../../core-developers/developers.csv:1 +msgid "For PEP access; did not make GitHub transition" +msgstr "Para acesso a PEPs; não fez a transição para GitHub" + +#: ../../core-developers/developers.csv:1 +msgid "Richard Jones" +msgstr "Richard Jones" + +#: ../../core-developers/developers.csv:1 +msgid "2006-05-23" +msgstr "2006-05-23" + +#: ../../core-developers/developers.csv:1 +msgid "For Need for Speed sprint; did not make GitHub transition" +msgstr "Para a sprint Need for Speed; não fez a transição para GitHub" + +#: ../../core-developers/developers.csv:1 +msgid "Kristján Valur Jónsson" +msgstr "Kristján Valur Jónsson" + +#: ../../core-developers/developers.csv:1 +msgid "2006-05-17" +msgstr "2006-05-17" + +#: ../../core-developers/developers.csv:1 +msgid "Jack Diederich" +msgstr "Jack Diederich" + +#: ../../core-developers/developers.csv:1 +msgid "jackdied" +msgstr "jackdied" + +#: ../../core-developers/developers.csv:1 +msgid "For Need for Speed sprint" +msgstr "Para a sprint Need for Speed" + +#: ../../core-developers/developers.csv:1 +msgid "Steven Bethard" +msgstr "Steven Bethard" + +#: ../../core-developers/developers.csv:1 +msgid "2006-04-27" +msgstr "2006-04-27" + +#: ../../core-developers/developers.csv:1 +msgid "" +"For PEP access and SourceForge maintenance; did not make GitHub transition" +msgstr "" +"Para acesso a PEPs e manutenção do SourceForge; não fez a transição para o " +"GitHub" + +#: ../../core-developers/developers.csv:1 +msgid "Gerhard Häring" +msgstr "Gerhard Häring" + +#: ../../core-developers/developers.csv:1 +msgid "2006-04-23" +msgstr "2006-04-23" + +#: ../../core-developers/developers.csv:1 +msgid "Did not make the GitHub transition" +msgstr "Não fez a transição para GitHub" + +#: ../../core-developers/developers.csv:1 +msgid "George Yoshida" +msgstr "George Yoshida" + +#: ../../core-developers/developers.csv:1 +msgid "2006-04-17" +msgstr "2006-04-17" + +#: ../../core-developers/developers.csv:1 +msgid "For tracker administration; did not make GitHub transition" +msgstr "Para administração do rastreador; não fez a transição para GitHub" + +#: ../../core-developers/developers.csv:1 +msgid "Ronald Oussoren" +msgstr "Ronald Oussoren" + +#: ../../core-developers/developers.csv:1 +msgid "ronaldoussoren" +msgstr "ronaldoussoren" + +#: ../../core-developers/developers.csv:1 +msgid "2006-03-03" +msgstr "2006-03-03" + +#: ../../core-developers/developers.csv:1 +msgid "For Mac-related work" +msgstr "Para trabalho relacionado a Mac" + +#: ../../core-developers/developers.csv:1 +msgid "Nick Coghlan" +msgstr "Nick Coghlan" + +#: ../../core-developers/developers.csv:1 ../../core-developers/experts.rst:198 +#: ../../core-developers/experts.rst:325 +msgid "ncoghlan" +msgstr "ncoghlan" + +#: ../../core-developers/developers.csv:1 +msgid "2005-10-16" +msgstr "2005-10-16" + +#: ../../core-developers/developers.csv:1 ../../include/end-of-life.csv:1 +msgid "Georg Brandl" +msgstr "Georg Brandl" + +#: ../../core-developers/developers.csv:1 +msgid "birkenfeld" +msgstr "birkenfeld" + +#: ../../core-developers/developers.csv:1 +msgid "2005-05-28" +msgstr "2005-05-28" + +#: ../../core-developers/developers.csv:1 +msgid "Terry Jan Reedy" +msgstr "Terry Jan Reedy" + +#: ../../core-developers/developers.csv:1 +msgid "terryjreedy" +msgstr "terryjreedy" + +#: ../../core-developers/developers.csv:1 +msgid "2005-04-07" +msgstr "2005-04-07" + +#: ../../core-developers/developers.csv:1 +msgid "Bob Ippolito" +msgstr "Bob Ippolito" + +#: ../../core-developers/developers.csv:1 +msgid "etrepum" +msgstr "etrepum" + +#: ../../core-developers/developers.csv:1 +msgid "2005-03-02" +msgstr "2005-03-02" + +#: ../../core-developers/developers.csv:1 +msgid "Peter Astrand" +msgstr "Peter Astrand" + +#: ../../core-developers/developers.csv:1 +msgid "2004-10-21" +msgstr "2004-10-21" + +#: ../../core-developers/developers.csv:1 +msgid "Facundo Batista" +msgstr "Facundo Batista" + +#: ../../core-developers/developers.csv:1 +msgid "facundobatista" +msgstr "facundobatista" + +#: ../../core-developers/developers.csv:1 +msgid "2004-10-16" +msgstr "2004-10-16" + +#: ../../core-developers/developers.csv:1 +msgid "Sean Reifschneider" +msgstr "Sean Reifschneider" + +#: ../../core-developers/developers.csv:1 +msgid "2004-09-17" +msgstr "2004-09-17" + +#: ../../core-developers/developers.csv:1 +msgid "Johannes Gijsbers" +msgstr "Johannes Gijsbers" + +#: ../../core-developers/developers.csv:1 +msgid "2004-08-14" +msgstr "2004-08-14" + +#: ../../core-developers/developers.csv:1 +msgid "2005-07-27" +msgstr "2005-07-27" + +#: ../../core-developers/developers.csv:1 +msgid "Privileges relinquished on 2005-07-27" +msgstr "Privilégios renunciados em 2005-07-27" + +#: ../../core-developers/developers.csv:1 +msgid "Matthias Klose" +msgstr "Matthias Klose" + +#: ../../core-developers/developers.csv:1 +msgid "doko42" +msgstr "doko42" + +#: ../../core-developers/developers.csv:1 +msgid "2004-08-04" +msgstr "2004-08-04" + +#: ../../core-developers/developers.csv:1 +msgid "PJ Eby" +msgstr "PJ Eby" + +#: ../../core-developers/developers.csv:1 +msgid "pjeby" +msgstr "pjeby" + +#: ../../core-developers/developers.csv:1 +msgid "2004-03-24" +msgstr "2004-03-24" + +#: ../../core-developers/developers.csv:1 +msgid "Vinay Sajip" +msgstr "Vinay Sajip" + +#: ../../core-developers/developers.csv:1 ../../core-developers/experts.rst:150 +#: ../../core-developers/experts.rst:254 +msgid "vsajip" +msgstr "vsajip" + +#: ../../core-developers/developers.csv:1 +msgid "2004-02-20" +msgstr "2004-02-20" + +#: ../../core-developers/developers.csv:1 +msgid "Hye-Shik Chang" +msgstr "Hye-Shik Chang" + +#: ../../core-developers/developers.csv:1 +msgid "hyeshik" +msgstr "hyeshik" + +#: ../../core-developers/developers.csv:1 +msgid "2003-12-10" +msgstr "2003-12-10" + +#: ../../core-developers/developers.csv:1 +msgid "Armin Rigo" +msgstr "Armin Rigo" + +#: ../../core-developers/developers.csv:1 +msgid "2003-10-24" +msgstr "2003-10-24" + +#: ../../core-developers/developers.csv:1 +msgid "2012-06-01" +msgstr "2012-06-01" + +#: ../../core-developers/developers.csv:1 +msgid "Privileges relinquished in 2012" +msgstr "Privilégios renunciados em 2012" + +#: ../../core-developers/developers.csv:1 +msgid "Andrew McNamara" +msgstr "Andrew McNamara" + +#: ../../core-developers/developers.csv:1 +msgid "2003-06-09" +msgstr "2003-06-09" + +#: ../../core-developers/developers.csv:1 +msgid "Samuele Pedroni" +msgstr "Samuele Pedroni" + +#: ../../core-developers/developers.csv:1 +msgid "2003-05-16" +msgstr "2003-05-16" + +#: ../../core-developers/developers.csv:1 +msgid "Alex Martelli" +msgstr "Alex Martelli" + +#: ../../core-developers/developers.csv:1 +msgid "aleaxit" +msgstr "aleaxit" + +#: ../../core-developers/developers.csv:1 +msgid "2003-04-22" +msgstr "2003-04-22" + +#: ../../core-developers/developers.csv:1 +#: ../../developer-workflow/development-cycle.rst:322 +msgid "Brett Cannon" +msgstr "Brett Cannon" + +#: ../../core-developers/developers.csv:1 ../../core-developers/experts.rst:139 +#: ../../developer-workflow/development-cycle.rst:322 +msgid "brettcannon" +msgstr "brettcannon" + +#: ../../core-developers/developers.csv:1 +msgid "2003-04-18" +msgstr "2003-04-18" + +#: ../../core-developers/developers.csv:1 +msgid "David Goodger" +msgstr "David Goodger" + +#: ../../core-developers/developers.csv:1 +msgid "2003-01-02" +msgstr "2003-01-02" + +#: ../../core-developers/developers.csv:1 +msgid "Gustavo Niemeyer" +msgstr "Gustavo Niemeyer" + +#: ../../core-developers/developers.csv:1 +msgid "2002-11-05" +msgstr "2002-11-05" + +#: ../../core-developers/developers.csv:1 +msgid "Tony Lownds" +msgstr "Tony Lownds" + +#: ../../core-developers/developers.csv:1 +msgid "2002-09-22" +msgstr "2002-09-22" + +#: ../../core-developers/developers.csv:1 +msgid "Steve Holden" +msgstr "Steve Holden" + +#: ../../core-developers/developers.csv:1 +msgid "holdenweb" +msgstr "holdenweb" + +#: ../../core-developers/developers.csv:1 +msgid "2002-06-14" +msgstr "2002-06-14" + +#: ../../core-developers/developers.csv:1 +msgid "Relinquished privileges on 2005-04-07," +msgstr "Renunciou os privilégios em 2005-04-07," + +#: ../../core-developers/developers.csv:2 +msgid "" +"but granted again for Need for Speed sprint; did not make GitHub transition" +msgstr "" +"mas concedidos novamente para a sprint Need for Speed; não fez a transição " +"para GitHub" + +#: ../../core-developers/developers.csv:1 +msgid "Christian Tismer" +msgstr "Christian Tismer" + +#: ../../core-developers/developers.csv:1 +msgid "ctismer" +msgstr "ctismer" + +#: ../../core-developers/developers.csv:1 +msgid "2002-05-17" +msgstr "2002-05-17" + +#: ../../core-developers/developers.csv:1 +msgid "Jason Tishler" +msgstr "Jason Tishler" + +#: ../../core-developers/developers.csv:1 +msgid "2002-05-15" +msgstr "2002-05-15" + +#: ../../core-developers/developers.csv:1 +msgid "Walter Dörwald" +msgstr "Walter Dörwald" + +#: ../../core-developers/developers.csv:1 +msgid "doerwalter" +msgstr "doerwalter" + +#: ../../core-developers/developers.csv:1 +msgid "2002-03-21" +msgstr "2002-03-21" + +#: ../../core-developers/developers.csv:1 +msgid "Andrew MacIntyre" +msgstr "Andrew MacIntyre" + +#: ../../core-developers/developers.csv:1 +msgid "2002-02-17" +msgstr "2002-02-17" + +#: ../../core-developers/developers.csv:1 +msgid "2016-01-02" +msgstr "2016-01-02" + +#: ../../core-developers/developers.csv:1 +msgid "Privileges relinquished 2016-01-02" +msgstr "Privilégios renunciados em 2016-01-02" + +#: ../../core-developers/developers.csv:1 +msgid "Gregory P. Smith" +msgstr "Gregory P. Smith" + +#: ../../core-developers/developers.csv:1 ../../core-developers/experts.rst:206 +#: ../../core-developers/experts.rst:211 ../../core-developers/experts.rst:359 +msgid "gpshead" +msgstr "gpshead" + +#: ../../core-developers/developers.csv:1 +msgid "2002-01-08" +msgstr "2002-01-08" + +#: ../../core-developers/developers.csv:1 +msgid "Anthony Baxter" +msgstr "Anthony Baxter" + +#: ../../core-developers/developers.csv:1 +msgid "2001-12-21" +msgstr "2001-12-21" + +#: ../../core-developers/developers.csv:1 +msgid "Neal Norwitz" +msgstr "Neal Norwitz" + +#: ../../core-developers/developers.csv:1 +msgid "2001-12-19" +msgstr "2001-12-19" + +#: ../../core-developers/developers.csv:1 +msgid "Raymond Hettinger" +msgstr "Raymond Hettinger" + +#: ../../core-developers/developers.csv:1 +msgid "rhettinger" +msgstr "rhettinger" + +#: ../../core-developers/developers.csv:1 +msgid "2001-12-10" +msgstr "2001-12-10" + +#: ../../core-developers/developers.csv:1 +msgid "Chui Tey" +msgstr "Chui Tey" + +#: ../../core-developers/developers.csv:1 +msgid "2001-10-31" +msgstr "2001-10-31" + +#: ../../core-developers/developers.csv:1 +msgid "Michael W. Hudson" +msgstr "Michael W. Hudson" + +#: ../../core-developers/developers.csv:1 +msgid "2001-08-27" +msgstr "2001-08-27" + +#: ../../core-developers/developers.csv:1 +msgid "Finn Bock" +msgstr "Finn Bock" + +#: ../../core-developers/developers.csv:1 +msgid "2001-08-23" +msgstr "2001-08-23" + +#: ../../core-developers/developers.csv:1 +msgid "2005-04-13" +msgstr "2005-04-13" + +#: ../../core-developers/developers.csv:1 +msgid "Privileges relinquished on 2005-04-13" +msgstr "Privilégios renunciados em 2005-04-13" + +#: ../../core-developers/developers.csv:1 +msgid "Piers Lauder" +msgstr "Piers Lauder" + +#: ../../core-developers/developers.csv:1 +msgid "2001-07-20" +msgstr "2001-07-20" + +#: ../../core-developers/developers.csv:1 +msgid "Kurt B. Kaiser" +msgstr "Kurt B. Kaiser" + +#: ../../core-developers/developers.csv:1 +msgid "kbkaiser" +msgstr "kbkaiser" + +#: ../../core-developers/developers.csv:1 +msgid "2001-07-03" +msgstr "2001-07-03" + +#: ../../core-developers/developers.csv:1 +msgid "Steven M. Gava" +msgstr "Steven M. Gava" + +#: ../../core-developers/developers.csv:1 +msgid "2001-06-25" +msgstr "2001-06-25" + +#: ../../core-developers/developers.csv:1 +msgid "Steve Purcell" +msgstr "Steve Purcell" + +#: ../../core-developers/developers.csv:1 +msgid "2001-03-22" +msgstr "2001-03-22" + +#: ../../core-developers/developers.csv:1 +msgid "Jim Fulton" +msgstr "Jim Fulton" + +#: ../../core-developers/developers.csv:1 +msgid "2000-10-06" +msgstr "2000-10-06" + +#: ../../core-developers/developers.csv:1 +msgid "Ka-Ping Yee" +msgstr "Ka-Ping Yee" + +#: ../../core-developers/developers.csv:1 +msgid "2000-10-03" +msgstr "2000-10-03" + +#: ../../core-developers/developers.csv:1 +msgid "Lars Gustäbel" +msgstr "Lars Gustäbel" + +#: ../../core-developers/developers.csv:1 ../../core-developers/experts.rst:229 +msgid "gustaebel" +msgstr "gustaebel" + +#: ../../core-developers/developers.csv:1 +msgid "2000-09-21" +msgstr "2000-09-21" + +#: ../../core-developers/developers.csv:1 +msgid "For tarfile module" +msgstr "Para o módulo tarfile" + +#: ../../core-developers/developers.csv:1 +msgid "Neil Schemenauer" +msgstr "Neil Schemenauer" + +#: ../../core-developers/developers.csv:1 +msgid "nascheme" +msgstr "nascheme" + +#: ../../core-developers/developers.csv:1 +msgid "2000-09-15" +msgstr "2000-09-15" + +#: ../../core-developers/developers.csv:1 +msgid "Martin v. Löwis" +msgstr "Martin v. Löwis" + +#: ../../core-developers/developers.csv:1 +msgid "2000-09-08" +msgstr "2000-09-08" + +#: ../../core-developers/developers.csv:1 +msgid "Thomas Heller" +msgstr "Thomas Heller" + +#: ../../core-developers/developers.csv:1 +msgid "theller" +msgstr "theller" + +#: ../../core-developers/developers.csv:1 +msgid "2000-09-07" +msgstr "2000-09-07" + +#: ../../core-developers/developers.csv:1 +msgid "2020-11-18" +msgstr "2020-11-18" + +#: ../../core-developers/developers.csv:1 +msgid "Moshe Zadka" +msgstr "Moshe Zadka" + +#: ../../core-developers/developers.csv:1 +msgid "2000-07-29" +msgstr "2000-07-29" + +#: ../../core-developers/developers.csv:1 +msgid "2005-04-08" +msgstr "2005-04-08" + +#: ../../core-developers/developers.csv:1 +msgid "Privileges relinquished on 2005-04-08" +msgstr "Privilégios renunciados em 2005-04-08" + +#: ../../core-developers/developers.csv:1 ../../include/branches.csv:1 +msgid "Thomas Wouters" +msgstr "Thomas Wouters" + +#: ../../core-developers/developers.csv:1 ../../core-developers/experts.rst:99 +#: ../../core-developers/experts.rst:112 ../../core-developers/experts.rst:114 +#: ../../core-developers/experts.rst:157 ../../core-developers/experts.rst:194 +#: ../../core-developers/experts.rst:196 ../../core-developers/experts.rst:232 +msgid "Yhg1s" +msgstr "Yhg1s" + +#: ../../core-developers/developers.csv:1 +msgid "2000-07-14" +msgstr "2000-07-14" + +#: ../../core-developers/developers.csv:1 +msgid "Peter Schneider-Kamp" +msgstr "Peter Schneider-Kamp" + +#: ../../core-developers/developers.csv:1 +msgid "2000-07-10" +msgstr "2000-07-10" + +#: ../../core-developers/developers.csv:1 +msgid "Paul Prescod" +msgstr "Paul Prescod" + +#: ../../core-developers/developers.csv:1 +msgid "2000-07-01" +msgstr "2000-07-01" + +#: ../../core-developers/developers.csv:1 +msgid "2005-04-30" +msgstr "2005-04-30" + +#: ../../core-developers/developers.csv:1 +msgid "Privileges relinquished on 2005-04-30" +msgstr "Privilégios renunciados em 2005-04-30" + +#: ../../core-developers/developers.csv:1 +msgid "Tim Peters" +msgstr "Tim Peters" + +#: ../../core-developers/developers.csv:1 +msgid "tim-one" +msgstr "tim-one" + +#: ../../core-developers/developers.csv:1 +msgid "2000-06-30" +msgstr "2000-06-30" + +#: ../../core-developers/developers.csv:1 +msgid "Skip Montanaro" +msgstr "Skip Montanaro" + +#: ../../core-developers/developers.csv:1 +msgid "smontanaro" +msgstr "smontanaro" + +#: ../../core-developers/developers.csv:1 +msgid "2015-04-21" +msgstr "2015-04-21" + +#: ../../core-developers/developers.csv:1 +msgid "Privileges relinquished 2015-04-21" +msgstr "Privilégios renunciados em 2015-04-21" + +#: ../../core-developers/developers.csv:1 +msgid "Fredrik Lundh" +msgstr "Fredrik Lundh" + +#: ../../core-developers/developers.csv:1 +msgid "2000-06-29" +msgstr "2000-06-29" + +#: ../../core-developers/developers.csv:1 +msgid "Mark Hammond" +msgstr "Mark Hammond" + +#: ../../core-developers/developers.csv:1 +msgid "mhammond" +msgstr "mhammond" + +#: ../../core-developers/developers.csv:1 +msgid "2000-06-09" +msgstr "2000-06-09" + +#: ../../core-developers/developers.csv:1 +msgid "Marc-André Lemburg" +msgstr "Marc-André Lemburg" + +#: ../../core-developers/developers.csv:1 ../../core-developers/experts.rst:109 +#: ../../core-developers/experts.rst:149 ../../core-developers/experts.rst:178 +#: ../../core-developers/experts.rst:330 ../../core-developers/experts.rst:341 +msgid "malemburg" +msgstr "malemburg" + +#: ../../core-developers/developers.csv:1 +msgid "2000-06-07" +msgstr "2000-06-07" + +#: ../../core-developers/developers.csv:1 +msgid "Trent Mick" +msgstr "Trent Mick" + +#: ../../core-developers/developers.csv:1 +msgid "2000-06-06" +msgstr "2000-06-06" + +#: ../../core-developers/developers.csv:1 +msgid "Eric S. Raymond" +msgstr "Eric S. Raymond" + +#: ../../core-developers/developers.csv:1 +msgid "2000-06-02" +msgstr "2000-06-02" + +#: ../../core-developers/developers.csv:1 +msgid "Greg Stein" +msgstr "Greg Stein" + +#: ../../core-developers/developers.csv:1 +msgid "1999-11-07" +msgstr "1999-11-07" + +#: ../../core-developers/developers.csv:1 +msgid "Just van Rossum" +msgstr "Just van Rossum" + +#: ../../core-developers/developers.csv:1 +msgid "1999-01-22" +msgstr "1999-01-22" + +#: ../../core-developers/developers.csv:1 +msgid "Greg Ward" +msgstr "Greg Ward" + +#: ../../core-developers/developers.csv:1 +msgid "1998-12-18" +msgstr "1998-12-18" + +#: ../../core-developers/developers.csv:1 +msgid "Andrew Kuchling" +msgstr "Andrew Kuchling" + +#: ../../core-developers/developers.csv:1 +msgid "akuchling" +msgstr "akuchling" + +#: ../../core-developers/developers.csv:1 +msgid "1998-04-09" +msgstr "1998-04-09" + +#: ../../core-developers/developers.csv:1 +msgid "Ken Manheimer" +msgstr "Ken Manheimer" + +#: ../../core-developers/developers.csv:1 +msgid "1998-03-03" +msgstr "1998-03-03" + +#: ../../core-developers/developers.csv:1 +msgid "Jeremy Hylton" +msgstr "Jeremy Hylton" + +#: ../../core-developers/developers.csv:1 +msgid "jeremyhylton" +msgstr "jeremyhylton" + +#: ../../core-developers/developers.csv:1 +msgid "1997-08-13" +msgstr "1997-08-13" + +#: ../../core-developers/developers.csv:1 +msgid "Roger E. Masse" +msgstr "Roger E. Masse" + +#: ../../core-developers/developers.csv:1 +msgid "1996-12-09" +msgstr "1996-12-09" + +#: ../../core-developers/developers.csv:1 +msgid "Fred Drake" +msgstr "Fred Drake" + +#: ../../core-developers/developers.csv:1 ../../core-developers/experts.rst:182 +#: ../../core-developers/experts.rst:257 +msgid "freddrake" +msgstr "freddrake" + +#: ../../core-developers/developers.csv:1 +msgid "1996-07-23" +msgstr "1996-07-23" + +#: ../../core-developers/developers.csv:1 ../../include/end-of-life.csv:1 +msgid "Barry Warsaw" +msgstr "Barry Warsaw" + +#: ../../core-developers/developers.csv:1 +msgid "warsaw" +msgstr "warsaw" + +#: ../../core-developers/developers.csv:1 +msgid "1994-07-25" +msgstr "1994-07-25" + +#: ../../core-developers/developers.csv:1 +msgid "Jack Jansen" +msgstr "Jack Jansen" + +#: ../../core-developers/developers.csv:1 +msgid "jackjansen" +msgstr "jackjansen" + +#: ../../core-developers/developers.csv:1 +msgid "1992-08-13" +msgstr "1992-08-13" + +#: ../../core-developers/developers.csv:1 +msgid "Sjoerd Mullender" +msgstr "Sjoerd Mullender" + +#: ../../core-developers/developers.csv:1 +msgid "sjoerdmullender" +msgstr "sjoerdmullender" + +#: ../../core-developers/developers.csv:1 +msgid "1992-08-04" +msgstr "1992-08-04" + +#: ../../core-developers/developers.csv:1 +msgid "2020-11-14" +msgstr "2020-11-14" + +#: ../../core-developers/developers.csv:1 ../../internals/exploring.rst:1 +msgid "Guido van Rossum" +msgstr "Guido van Rossum" + +#: ../../core-developers/developers.csv:1 +msgid "gvanrossum" +msgstr "gvanrossum" + +#: ../../core-developers/developers.csv:1 +msgid "1989-12-25" +msgstr "1989-12-25" + +#: ../../core-developers/developer-log.rst:17 +msgid "Procedure for Granting or Dropping Access" +msgstr "Procedimento para concessão ou cancelamento de acesso" + +#: ../../core-developers/developer-log.rst:19 +msgid "" +"To be granted the ability to manage who is a committer, you must be a team " +"maintainer of the `Python core team`_ on GitHub. Once you have that " +"privilege you can add people to the team. They will be asked to accept the " +"membership which they can do by visiting https://github.com/python and " +"clicking on the appropriate button that will be displayed to them in the " +"upper part of the page." +msgstr "" +"Para ter a capacidade de gerenciar quem é um committer, você deve ser um " +"mantenedor da equipe `equipe core do Python`_ no GitHub. Depois de ter esse " +"privilégio, você pode adicionar pessoas à equipe. Eles serão solicitados a " +"aceitar a associação, o que podem fazer visitando https://github.com/python " +"e clicando no botão apropriado que será exibido para eles na parte superior " +"da página." + +#: ../../core-developers/experts.rst:5 +msgid "Experts Index" +msgstr "Índice de especialistas" + +#: ../../core-developers/experts.rst:7 +msgid "" +"This document has tables that list Python Modules, Tools, Platforms and " +"Interest Areas and GitHub names for each item that indicate a maintainer or " +"an expert in the field. This list is intended to be used by issue " +"submitters, issue triage people, and other issue participants to find people " +"to @mention or add as reviewers to issues and pull requests. People on this " +"list may be asked to render final judgment on a feature or bug. If no " +"active maintainer is listed for a given module, then questionable changes " +"should be discussed on the `Core Development Discourse category `__, while any other issues can and should " +"be decided by any committer." +msgstr "" +"Este documento possui tabelas que listam Módulos, Ferramentas, Plataformas e " +"Áreas de Interesse no Python e nomes do GitHub para cada item que indicam um " +"mantenedor ou um especialista na área. Esta lista destina-se a ser usada por " +"remetentes de problemas, pessoas de triagem de problemas e outros " +"participantes de problemas para encontrar pessoas para @mencionar ou " +"adicionar como revisores a relatórios de problemas e pull requests. As " +"pessoas nesta lista podem ser solicitadas a emitir um julgamento final sobre " +"um recurso ou bug. Se nenhum mantenedor ativo estiver listado para um " +"determinado módulo, então mudanças questionáveis devem ser discutidas na " +"`categoria Core Development do Discourse `__, enquanto quaisquer outros problemas pode e deve ser decidido por " +"qualquer committer." + +#: ../../core-developers/experts.rst:18 +msgid "" +"Developers can choose to follow labels, so if a label that they are " +"following is added to an issue or pull request, they will be notified " +"automatically. The :cpy-file:`.github/CODEOWNERS` file is also used to " +"indicate maintainers that will be automatically added as reviewers to pull " +"requests." +msgstr "" +"Os desenvolvedores podem optar por seguir rótulos, portanto, se um rótulo " +"que eles estão seguindo for adicionado a um relatório de problemas ou pull " +"request, eles serão notificados automaticamente. O arquivo :cpy-file:`." +"github/CODEOWNERS` também é usado para indicar os mantenedores que serão " +"adicionados automaticamente como revisores para pull request." + +#: ../../core-developers/experts.rst:23 +msgid "" +"Unless a name is followed by a '*', you should never assign an issue to that " +"person. Names followed by a '*' may be assigned issues involving the module " +"or topic." +msgstr "" +"A menos que um nome seja seguido por um '*', você nunca deve atribuir um " +"problema a essa pessoa. Nomes seguidos por um '*' podem ser atribuídos a " +"soluções de problemas envolvendo o módulo ou tópico." + +#: ../../core-developers/experts.rst:27 +msgid "" +"Names followed by a '^' indicate old bugs.python.org usernames, for people " +"that did not transition to GitHub." +msgstr "" +"Nomes seguidos por um '^' indicam nomes de usuários antigos do bugs.python." +"org, para pessoas que não fizeram a transição para o GitHub." + +#: ../../core-developers/experts.rst:30 +msgid "" +"The Platform and Interest Area tables list broader fields in which various " +"people have expertise. These people can also be contacted for help, " +"opinions, and decisions when issues involve their areas." +msgstr "" +"As tabelas de Plataforma e Área de Interesse listam campos mais amplos nos " +"quais várias pessoas têm experiência. Essas pessoas também podem ser " +"contatadas para obter ajuda, opiniões e decisões quando os problemas " +"envolvem suas áreas." + +#: ../../core-developers/experts.rst:34 +msgid "" +"If a listed maintainer does not respond to requests for comment for an " +"extended period (three weeks or more), they should be marked as inactive in " +"this list by placing the word 'inactive' in parenthesis behind their tracker " +"id. They are of course free to remove that inactive mark at any time." +msgstr "" +"Se um mantenedor listado não responder aos pedidos de comentários por um " +"período prolongado (três semanas ou mais), ele deve ser marcado como inativo " +"nesta lista colocando a palavra 'inactive' (na tradução, usou-se " +"\"inativo\") entre parênteses atrás de seu ID de rastreador. Eles são livres " +"para remover essa marca inativa a qualquer momento." + +#: ../../core-developers/experts.rst:40 +msgid "" +"Committers should update these tables as their areas of expertise widen. New " +"topics may be added to the Interest Area table at will." +msgstr "" +"Os committers devem atualizar essas tabelas à medida que suas áreas de " +"especialização aumentam. Novos tópicos podem ser adicionados à tabela Área " +"de Interesse à vontade." + +#: ../../core-developers/experts.rst:43 +msgid "" +"The existence of this list is not meant to indicate that these people *must* " +"be contacted for decisions; it is, rather, a resource to be used by non-" +"committers to find responsible parties, and by committers who do not feel " +"qualified to make a decision in a particular context." +msgstr "" +"A existência desta lista não indica que essas pessoas *devem* ser contatadas " +"para decisões; é, antes, um recurso a ser usado por não-committers para " +"encontrar responsáveis, e por committers que não se sentem qualificados para " +"tomar uma decisão em um contexto particular." + +#: ../../core-developers/experts.rst:50 +msgid "Stdlib" +msgstr "Stdlib" + +#: ../../core-developers/experts.rst:53 +msgid "Module" +msgstr "Módulo" + +#: ../../core-developers/experts.rst:53 ../../core-developers/experts.rst:284 +#: ../../core-developers/experts.rst:295 ../../core-developers/experts.rst:315 +msgid "Maintainers" +msgstr "Mantenedores" + +#: ../../core-developers/experts.rst:55 +msgid "__future__" +msgstr "__future__" + +#: ../../core-developers/experts.rst:56 +msgid "__main__" +msgstr "__main__" + +#: ../../core-developers/experts.rst:56 +msgid "gvanrossum, ncoghlan" +msgstr "gvanrossum, ncoghlan" + +#: ../../core-developers/experts.rst:57 +msgid "_thread" +msgstr "_thread" + +#: ../../core-developers/experts.rst:58 +msgid "_testbuffer" +msgstr "_testbuffer" + +#: ../../core-developers/experts.rst:59 +msgid "abc" +msgstr "abc" + +#: ../../core-developers/experts.rst:60 +msgid "aifc" +msgstr "aifc" + +#: ../../core-developers/experts.rst:61 +msgid "argparse" +msgstr "argparse" + +#: ../../core-developers/experts.rst:62 +msgid "array" +msgstr "array" + +#: ../../core-developers/experts.rst:63 +msgid "ast" +msgstr "ast" + +#: ../../core-developers/experts.rst:63 +msgid "benjaminp, pablogsal, isidentical" +msgstr "benjaminp, pablogsal, isidentical" + +#: ../../core-developers/experts.rst:64 +msgid "asynchat" +msgstr "asynchat" + +#: ../../core-developers/experts.rst:64 ../../core-developers/experts.rst:66 +msgid "josiahcarlson, giampaolo*, stutzbach^" +msgstr "josiahcarlson, giampaolo*, stutzbach^" + +#: ../../core-developers/experts.rst:65 +msgid "asyncio" +msgstr "asyncio" + +#: ../../core-developers/experts.rst:65 +msgid "1st1, asvetlov, gvanrossum, graingert, kumaraditya303" +msgstr "1st1, asvetlov, gvanrossum, graingert, kumaraditya303" + +#: ../../core-developers/experts.rst:66 +msgid "asyncore" +msgstr "asyncore" + +#: ../../core-developers/experts.rst:67 +msgid "atexit" +msgstr "atexit" + +#: ../../core-developers/experts.rst:68 +msgid "audioop" +msgstr "audioop" + +#: ../../core-developers/experts.rst:69 +msgid "base64" +msgstr "base64" + +#: ../../core-developers/experts.rst:70 +msgid "bdb" +msgstr "bdb" + +#: ../../core-developers/experts.rst:71 +msgid "binascii" +msgstr "binascii" + +#: ../../core-developers/experts.rst:72 +msgid "binhex" +msgstr "binhex" + +#: ../../core-developers/experts.rst:73 +msgid "bisect" +msgstr "bisect" + +#: ../../core-developers/experts.rst:73 ../../core-developers/experts.rst:85 +#: ../../core-developers/experts.rst:121 ../../core-developers/experts.rst:143 +#: ../../core-developers/experts.rst:190 ../../core-developers/experts.rst:317 +msgid "rhettinger*" +msgstr "rhettinger*" + +#: ../../core-developers/experts.rst:74 +msgid "builtins" +msgstr "builtins" + +#: ../../core-developers/experts.rst:75 +msgid "bz2" +msgstr "bz2" + +#: ../../core-developers/experts.rst:76 +msgid "calendar" +msgstr "calendar" + +#: ../../core-developers/experts.rst:77 +msgid "cgi" +msgstr "cgi" + +#: ../../core-developers/experts.rst:77 ../../core-developers/experts.rst:78 +msgid "ethanfurman*" +msgstr "ethanfurman*" + +#: ../../core-developers/experts.rst:78 +msgid "cgitb" +msgstr "cgitb" + +#: ../../core-developers/experts.rst:79 +msgid "chunk" +msgstr "chunk" + +#: ../../core-developers/experts.rst:80 +msgid "cmath" +msgstr "cmath" + +#: ../../core-developers/experts.rst:81 +msgid "cmd" +msgstr "cmd" + +#: ../../core-developers/experts.rst:82 +msgid "code" +msgstr "code" + +#: ../../core-developers/experts.rst:83 +msgid "codecs" +msgstr "codecs" + +#: ../../core-developers/experts.rst:83 +msgid "malemburg, doerwalter" +msgstr "malemburg, doerwalter" + +#: ../../core-developers/experts.rst:84 +msgid "codeop" +msgstr "codeop" + +#: ../../core-developers/experts.rst:85 +msgid "collections" +msgstr "collections" + +#: ../../core-developers/experts.rst:86 +msgid "collections.abc" +msgstr "collections.abc" + +#: ../../core-developers/experts.rst:86 ../../core-developers/experts.rst:130 +msgid "rhettinger*, stutzbach^" +msgstr "rhettinger*, stutzbach^" + +#: ../../core-developers/experts.rst:87 +msgid "colorsys" +msgstr "colorsys" + +#: ../../core-developers/experts.rst:88 +msgid "compileall" +msgstr "compileall" + +#: ../../core-developers/experts.rst:89 +msgid "concurrent.futures" +msgstr "concurrent.futures" + +#: ../../core-developers/experts.rst:89 +msgid "pitrou, brianquinlan, gpshead*" +msgstr "pitrou, brianquinlan, gpshead*" + +#: ../../core-developers/experts.rst:90 +msgid "configparser" +msgstr "configparser" + +#: ../../core-developers/experts.rst:90 +msgid "ambv*" +msgstr "ambv*" + +#: ../../core-developers/experts.rst:91 +msgid "contextlib" +msgstr "contextlib" + +#: ../../core-developers/experts.rst:91 +msgid "ncoghlan, 1st1" +msgstr "ncoghlan, 1st1" + +#: ../../core-developers/experts.rst:92 +msgid "contextvars" +msgstr "contextvars" + +#: ../../core-developers/experts.rst:93 +msgid "copy" +msgstr "copy" + +#: ../../core-developers/experts.rst:94 +msgid "copyreg" +msgstr "copyreg" + +#: ../../core-developers/experts.rst:95 +msgid "cProfile" +msgstr "cProfile" + +#: ../../core-developers/experts.rst:96 +msgid "crypt" +msgstr "crypt" + +#: ../../core-developers/experts.rst:96 ../../core-developers/experts.rst:227 +msgid "jafo^*" +msgstr "jafo^*" + +#: ../../core-developers/experts.rst:97 +msgid "csv" +msgstr "csv" + +#: ../../core-developers/experts.rst:97 +msgid "smontanaro (inactive)" +msgstr "smontanaro (inativo)" + +#: ../../core-developers/experts.rst:98 +msgid "ctypes" +msgstr "ctypes" + +#: ../../core-developers/experts.rst:98 +msgid "theller (inactive), abalkin, amauryfa, meadori" +msgstr "theller (inativo), abalkin, amauryfa, meadori" + +#: ../../core-developers/experts.rst:99 +msgid "curses" +msgstr "curses" + +#: ../../core-developers/experts.rst:100 +msgid "dataclasses" +msgstr "dataclasses" + +#: ../../core-developers/experts.rst:100 ../../core-developers/experts.rst:336 +#: ../../core-developers/experts.rst:356 +msgid "ericvsmith*" +msgstr "ericvsmith*" + +#: ../../core-developers/experts.rst:101 +msgid "datetime" +msgstr "datetime" + +#: ../../core-developers/experts.rst:101 ../../core-developers/experts.rst:236 +msgid "abalkin, pganssle" +msgstr "abalkin, pganssle" + +#: ../../core-developers/experts.rst:102 +msgid "dbm" +msgstr "dbm" + +#: ../../core-developers/experts.rst:103 +msgid "decimal" +msgstr "decimal" + +#: ../../core-developers/experts.rst:103 +msgid "facundobatista, rhettinger, mdickinson" +msgstr "facundobatista, rhettinger, mdickinson" + +#: ../../core-developers/experts.rst:104 +msgid "difflib" +msgstr "difflib" + +#: ../../core-developers/experts.rst:104 ../../core-developers/experts.rst:107 +#: ../../core-developers/experts.rst:228 +msgid "tim-one (inactive)" +msgstr "tim-one (inativo)" + +#: ../../core-developers/experts.rst:105 +msgid "dis" +msgstr "dis" + +#: ../../core-developers/experts.rst:106 +msgid "distutils" +msgstr "distutils" + +#: ../../core-developers/experts.rst:106 +msgid "merwok, dstufft" +msgstr "merwok, dstufft" + +#: ../../core-developers/experts.rst:107 +msgid "doctest" +msgstr "doctest" + +#: ../../core-developers/experts.rst:108 +msgid "email" +msgstr "email" + +#: ../../core-developers/experts.rst:108 +msgid "warsaw, bitdancer*, maxking" +msgstr "warsaw, bitdancer*, maxking" + +#: ../../core-developers/experts.rst:109 +msgid "encodings" +msgstr "encodings" + +#: ../../core-developers/experts.rst:110 +msgid "ensurepip" +msgstr "ensurepip" + +#: ../../core-developers/experts.rst:110 +msgid "ncoghlan, dstufft, pradyunsg" +msgstr "ncoghlan, dstufft, pradyunsg" + +#: ../../core-developers/experts.rst:111 +msgid "enum" +msgstr "enum" + +#: ../../core-developers/experts.rst:111 +msgid "eliben*, warsaw, ethanfurman*" +msgstr "eliben*, warsaw, ethanfurman*" + +#: ../../core-developers/experts.rst:112 +msgid "errno" +msgstr "errno" + +#: ../../core-developers/experts.rst:113 +msgid "faulthandler" +msgstr "faulthandler" + +#: ../../core-developers/experts.rst:113 +msgid "vstinner, gpshead" +msgstr "vstinner, gpshead" + +#: ../../core-developers/experts.rst:114 +msgid "fcntl" +msgstr "fcntl" + +#: ../../core-developers/experts.rst:115 +msgid "filecmp" +msgstr "filecmp" + +#: ../../core-developers/experts.rst:116 +msgid "fileinput" +msgstr "fileinput" + +#: ../../core-developers/experts.rst:117 +msgid "fnmatch" +msgstr "fnmatch" + +#: ../../core-developers/experts.rst:118 +msgid "formatter" +msgstr "formatter" + +#: ../../core-developers/experts.rst:119 +msgid "fractions" +msgstr "fractions" + +#: ../../core-developers/experts.rst:120 +msgid "ftplib" +msgstr "ftplib" + +#: ../../core-developers/experts.rst:120 +msgid "giampaolo*" +msgstr "giampaolo*" + +#: ../../core-developers/experts.rst:121 +msgid "functools" +msgstr "functools" + +#: ../../core-developers/experts.rst:122 +msgid "gc" +msgstr "gc" + +#: ../../core-developers/experts.rst:122 +msgid "pitrou, pablogsal" +msgstr "pitrou, pablogsal" + +#: ../../core-developers/experts.rst:123 +msgid "getopt" +msgstr "getopt" + +#: ../../core-developers/experts.rst:124 +msgid "getpass" +msgstr "getpass" + +#: ../../core-developers/experts.rst:125 +msgid "gettext" +msgstr "gettext" + +#: ../../core-developers/experts.rst:126 +msgid "glob" +msgstr "glob" + +#: ../../core-developers/experts.rst:127 +msgid "grp" +msgstr "grp" + +#: ../../core-developers/experts.rst:128 +msgid "gzip" +msgstr "gzip" + +#: ../../core-developers/experts.rst:129 +msgid "hashlib" +msgstr "hashlib" + +#: ../../core-developers/experts.rst:129 ../../core-developers/experts.rst:131 +msgid "tiran, gpshead*" +msgstr "tiran, gpshead*" + +#: ../../core-developers/experts.rst:130 +msgid "heapq" +msgstr "heapq" + +#: ../../core-developers/experts.rst:131 +msgid "hmac" +msgstr "hmac" + +#: ../../core-developers/experts.rst:132 +msgid "html" +msgstr "html" + +#: ../../core-developers/experts.rst:132 +msgid "ezio-melotti*" +msgstr "ezio-melotti*" + +#: ../../core-developers/experts.rst:133 +msgid "http" +msgstr "http" + +#: ../../core-developers/experts.rst:134 +msgid "idlelib" +msgstr "idlelib" + +#: ../../core-developers/experts.rst:134 +msgid "kbkaiser (inactive), terryjreedy*, serwy (inactive), taleinat" +msgstr "kbkaiser (inativo), terryjreedy*, serwy (inativo), taleinat" + +#: ../../core-developers/experts.rst:136 +msgid "imaplib" +msgstr "imaplib" + +#: ../../core-developers/experts.rst:137 +msgid "imghdr" +msgstr "imghdr" + +#: ../../core-developers/experts.rst:138 +msgid "imp" +msgstr "imp" + +#: ../../core-developers/experts.rst:139 +msgid "importlib" +msgstr "importlib" + +#: ../../core-developers/experts.rst:140 +msgid "inspect" +msgstr "inspect" + +#: ../../core-developers/experts.rst:141 ../../core-developers/experts.rst:340 +msgid "io" +msgstr "io" + +#: ../../core-developers/experts.rst:141 +msgid "benjaminp, stutzbach^" +msgstr "benjaminp, stutzbach^" + +#: ../../core-developers/experts.rst:142 +msgid "ipaddress" +msgstr "ipaddress" + +#: ../../core-developers/experts.rst:142 +msgid "pmoody^" +msgstr "pmoody^" + +#: ../../core-developers/experts.rst:143 +msgid "itertools" +msgstr "itertools" + +#: ../../core-developers/experts.rst:144 +msgid "json" +msgstr "json" + +#: ../../core-developers/experts.rst:144 +msgid "etrepum (inactive), ezio-melotti, rhettinger" +msgstr "etrepum (inativo), ezio-melotti, rhettinger" + +#: ../../core-developers/experts.rst:145 +msgid "keyword" +msgstr "keyword" + +#: ../../core-developers/experts.rst:146 +msgid "lib2to3" +msgstr "lib2to3" + +#: ../../core-developers/experts.rst:147 +msgid "libmpdec" +msgstr "libmpdec" + +#: ../../core-developers/experts.rst:148 +msgid "linecache" +msgstr "linecache" + +#: ../../core-developers/experts.rst:149 ../../core-developers/experts.rst:341 +msgid "locale" +msgstr "locale" + +#: ../../core-developers/experts.rst:150 +msgid "logging" +msgstr "logging" + +#: ../../core-developers/experts.rst:151 +msgid "lzma" +msgstr "lzma" + +#: ../../core-developers/experts.rst:152 +msgid "mailbox" +msgstr "mailbox" + +#: ../../core-developers/experts.rst:153 +msgid "mailcap" +msgstr "mailcap" + +#: ../../core-developers/experts.rst:154 +msgid "marshal" +msgstr "marshal" + +#: ../../core-developers/experts.rst:155 +msgid "math" +msgstr "math" + +#: ../../core-developers/experts.rst:155 +msgid "mdickinson, rhettinger, stutzbach^" +msgstr "mdickinson, rhettinger, stutzbach^" + +#: ../../core-developers/experts.rst:156 +msgid "mimetypes" +msgstr "mimetypes" + +#: ../../core-developers/experts.rst:157 +msgid "mmap" +msgstr "mmap" + +#: ../../core-developers/experts.rst:158 +msgid "modulefinder" +msgstr "modulefinder" + +#: ../../core-developers/experts.rst:158 +msgid "theller (inactive), jvr^" +msgstr "theller (inativo), jvr^" + +#: ../../core-developers/experts.rst:159 +msgid "msilib" +msgstr "msilib" + +#: ../../core-developers/experts.rst:160 +msgid "msvcrt" +msgstr "msvcrt" + +#: ../../core-developers/experts.rst:161 +msgid "multiprocessing" +msgstr "multiprocessing" + +#: ../../core-developers/experts.rst:161 +msgid "applio*, pitrou, jnoller^ (inactive), sbt^ (inactive), gpshead*" +msgstr "applio*, pitrou, jnoller^ (inativo), sbt^ (inativo), gpshead*" + +#: ../../core-developers/experts.rst:162 +msgid "netrc" +msgstr "netrc" + +#: ../../core-developers/experts.rst:163 +msgid "nis" +msgstr "nis" + +#: ../../core-developers/experts.rst:164 +msgid "nntplib" +msgstr "nntplib" + +#: ../../core-developers/experts.rst:165 +msgid "numbers" +msgstr "numbers" + +#: ../../core-developers/experts.rst:166 +msgid "operator" +msgstr "operator" + +#: ../../core-developers/experts.rst:167 +msgid "optparse" +msgstr "optparse" + +#: ../../core-developers/experts.rst:168 +msgid "os" +msgstr "os" + +#: ../../core-developers/experts.rst:169 +msgid "os.path" +msgstr "os.path" + +#: ../../core-developers/experts.rst:170 +msgid "ossaudiodev" +msgstr "ossaudiodev" + +#: ../../core-developers/experts.rst:171 +msgid "parser" +msgstr "parser" + +#: ../../core-developers/experts.rst:171 +msgid "benjaminp, pablogsal" +msgstr "benjaminp, pablogsal" + +#: ../../core-developers/experts.rst:172 +msgid "pathlib" +msgstr "pathlib" + +#: ../../core-developers/experts.rst:173 +msgid "pdb" +msgstr "pdb" + +#: ../../core-developers/experts.rst:174 +msgid "pickle" +msgstr "pickle" + +#: ../../core-developers/experts.rst:175 +msgid "pickletools" +msgstr "pickletools" + +#: ../../core-developers/experts.rst:176 +msgid "pipes" +msgstr "pipes" + +#: ../../core-developers/experts.rst:177 +msgid "pkgutil" +msgstr "pkgutil" + +#: ../../core-developers/experts.rst:178 +msgid "platform" +msgstr "platform" + +#: ../../core-developers/experts.rst:179 +msgid "plistlib" +msgstr "plistlib" + +#: ../../core-developers/experts.rst:180 +msgid "poplib" +msgstr "poplib" + +#: ../../core-developers/experts.rst:181 +msgid "posix" +msgstr "posix" + +#: ../../core-developers/experts.rst:181 +msgid "larryhastings, gpshead" +msgstr "larryhastings, gpshead" + +#: ../../core-developers/experts.rst:182 +msgid "pprint" +msgstr "pprint" + +#: ../../core-developers/experts.rst:183 +msgid "profile" +msgstr "profile" + +#: ../../core-developers/experts.rst:184 +msgid "pstats" +msgstr "pstats" + +#: ../../core-developers/experts.rst:185 +msgid "pty" +msgstr "pty" + +#: ../../core-developers/experts.rst:185 ../../core-developers/experts.rst:244 +#: ../../core-developers/experts.rst:275 ../../core-developers/experts.rst:320 +msgid "Yhg1s*" +msgstr "Yhg1s*" + +#: ../../core-developers/experts.rst:186 +msgid "pwd" +msgstr "pwd" + +#: ../../core-developers/experts.rst:187 +msgid "py_compile" +msgstr "py_compile" + +#: ../../core-developers/experts.rst:188 +msgid "pyclbr" +msgstr "pyclbr" + +#: ../../core-developers/experts.rst:189 +msgid "pydoc" +msgstr "pydoc" + +#: ../../core-developers/experts.rst:190 +msgid "queue" +msgstr "queue" + +#: ../../core-developers/experts.rst:191 +msgid "quopri" +msgstr "quopri" + +#: ../../core-developers/experts.rst:192 +msgid "random" +msgstr "random" + +#: ../../core-developers/experts.rst:192 +msgid "rhettinger, mdickinson" +msgstr "rhettinger, mdickinson" + +#: ../../core-developers/experts.rst:193 +msgid "re" +msgstr "re" + +#: ../../core-developers/experts.rst:193 +msgid "ezio-melotti, serhiy-storchaka" +msgstr "ezio-melotti, serhiy-storchaka" + +#: ../../core-developers/experts.rst:194 +msgid "readline" +msgstr "readline" + +#: ../../core-developers/experts.rst:195 +msgid "reprlib" +msgstr "reprlib" + +#: ../../core-developers/experts.rst:196 +msgid "resource" +msgstr "resource" + +#: ../../core-developers/experts.rst:197 +msgid "rlcompleter" +msgstr "rlcompleter" + +#: ../../core-developers/experts.rst:198 +msgid "runpy" +msgstr "runpy" + +#: ../../core-developers/experts.rst:199 +msgid "sched" +msgstr "sched" + +#: ../../core-developers/experts.rst:200 +msgid "secrets" +msgstr "secrets" + +#: ../../core-developers/experts.rst:201 +msgid "select" +msgstr "select" + +#: ../../core-developers/experts.rst:202 +msgid "selectors" +msgstr "selectors" + +#: ../../core-developers/experts.rst:202 +msgid "neologix^, giampaolo" +msgstr "neologix^, giampaolo" + +#: ../../core-developers/experts.rst:203 +msgid "shelve" +msgstr "shelve" + +#: ../../core-developers/experts.rst:204 +msgid "shlex" +msgstr "shlex" + +#: ../../core-developers/experts.rst:205 +msgid "shutil" +msgstr "shutil" + +#: ../../core-developers/experts.rst:205 +msgid "tarekziade, giampaolo" +msgstr "tarekziade, giampaolo" + +#: ../../core-developers/experts.rst:206 +msgid "signal" +msgstr "signal" + +#: ../../core-developers/experts.rst:207 +msgid "site" +msgstr "site" + +#: ../../core-developers/experts.rst:208 +msgid "smtpd" +msgstr "smtpd" + +#: ../../core-developers/experts.rst:209 +msgid "smtplib" +msgstr "smtplib" + +#: ../../core-developers/experts.rst:210 +msgid "sndhdr" +msgstr "sndhdr" + +#: ../../core-developers/experts.rst:211 +msgid "socket" +msgstr "socket" + +#: ../../core-developers/experts.rst:212 +msgid "socketserver" +msgstr "socketserver" + +#: ../../core-developers/experts.rst:213 +msgid "spwd" +msgstr "spwd" + +#: ../../core-developers/experts.rst:214 +msgid "sqlite3" +msgstr "sqlite3" + +#: ../../core-developers/experts.rst:214 +msgid "ghaering^, erlend-aasland*" +msgstr "ghaering^, erlend-aasland*" + +#: ../../core-developers/experts.rst:215 +msgid "ssl" +msgstr "ssl" + +#: ../../core-developers/experts.rst:215 +msgid "jackjansen, tiran, dstufft, alex" +msgstr "jackjansen, tiran, dstufft, alex" + +#: ../../core-developers/experts.rst:216 +msgid "stat" +msgstr "stat" + +#: ../../core-developers/experts.rst:217 +msgid "statistics" +msgstr "statistics" + +#: ../../core-developers/experts.rst:217 +msgid "stevendaprano, rhettinger" +msgstr "stevendaprano, rhettinger" + +#: ../../core-developers/experts.rst:218 +msgid "string" +msgstr "string" + +#: ../../core-developers/experts.rst:219 +msgid "stringprep" +msgstr "stringprep" + +#: ../../core-developers/experts.rst:220 +msgid "struct" +msgstr "struct" + +#: ../../core-developers/experts.rst:220 +msgid "mdickinson, meadori" +msgstr "mdickinson, meadori" + +#: ../../core-developers/experts.rst:221 +msgid "subprocess" +msgstr "subprocess" + +#: ../../core-developers/experts.rst:221 +msgid "astrand^ (inactive), giampaolo, gpshead*" +msgstr "astrand^ (inativo), giampaolo, gpshead*" + +#: ../../core-developers/experts.rst:222 +msgid "sunau" +msgstr "sunau" + +#: ../../core-developers/experts.rst:223 +msgid "symbol" +msgstr "symbol" + +#: ../../core-developers/experts.rst:224 +msgid "symtable" +msgstr "symtable" + +#: ../../core-developers/experts.rst:225 +msgid "sys" +msgstr "sys" + +#: ../../core-developers/experts.rst:226 +msgid "sysconfig" +msgstr "sysconfig" + +#: ../../core-developers/experts.rst:227 +msgid "syslog" +msgstr "syslog" + +#: ../../core-developers/experts.rst:228 +msgid "tabnanny" +msgstr "tabnanny" + +#: ../../core-developers/experts.rst:229 +msgid "tarfile" +msgstr "tarfile" + +#: ../../core-developers/experts.rst:230 +msgid "telnetlib" +msgstr "telnetlib" + +#: ../../core-developers/experts.rst:231 +msgid "tempfile" +msgstr "tempfile" + +#: ../../core-developers/experts.rst:232 +msgid "termios" +msgstr "termios" + +#: ../../core-developers/experts.rst:233 +msgid "test" +msgstr "test" + +#: ../../core-developers/experts.rst:234 +msgid "textwrap" +msgstr "textwrap" + +#: ../../core-developers/experts.rst:235 +msgid "threading" +msgstr "threading" + +#: ../../core-developers/experts.rst:235 +msgid "pitrou, gpshead" +msgstr "pitrou, gpshead" + +#: ../../core-developers/experts.rst:236 +msgid "time" +msgstr "time" + +#: ../../core-developers/experts.rst:237 +msgid "timeit" +msgstr "timeit" + +#: ../../core-developers/experts.rst:238 +msgid "tkinter" +msgstr "tkinter" + +#: ../../core-developers/experts.rst:238 +msgid "gpolo^, serhiy-storchaka" +msgstr "gpolo^, serhiy-storchaka" + +#: ../../core-developers/experts.rst:239 +msgid "token" +msgstr "token" + +#: ../../core-developers/experts.rst:240 +msgid "tokenize" +msgstr "tokenize" + +#: ../../core-developers/experts.rst:241 +msgid "trace" +msgstr "trace" + +#: ../../core-developers/experts.rst:242 +msgid "traceback" +msgstr "traceback" + +#: ../../core-developers/experts.rst:243 +msgid "tracemalloc" +msgstr "tracemalloc" + +#: ../../core-developers/experts.rst:244 +msgid "tty" +msgstr "tty" + +#: ../../core-developers/experts.rst:245 +msgid "turtle" +msgstr "turtle" + +#: ../../core-developers/experts.rst:245 +msgid "gregorlingl^, willingc" +msgstr "gregorlingl^, willingc" + +#: ../../core-developers/experts.rst:246 +msgid "types" +msgstr "types" + +#: ../../core-developers/experts.rst:247 +msgid "typing" +msgstr "typing" + +#: ../../core-developers/experts.rst:247 +msgid "gvanrossum, Fidget-Spinner, JelleZijlstra*, AlexWaygood*" +msgstr "gvanrossum, Fidget-Spinner, JelleZijlstra*, AlexWaygood*" + +#: ../../core-developers/experts.rst:248 +msgid "unicodedata" +msgstr "unicodedata" + +#: ../../core-developers/experts.rst:248 +msgid "malemburg, ezio-melotti" +msgstr "malemburg, ezio-melotti" + +#: ../../core-developers/experts.rst:249 +msgid "unittest" +msgstr "unittest" + +#: ../../core-developers/experts.rst:249 +msgid "voidspace*, ezio-melotti, rbtcollins, gpshead" +msgstr "voidspace*, ezio-melotti, rbtcollins, gpshead" + +#: ../../core-developers/experts.rst:250 +msgid "unittest.mock" +msgstr "unittest.mock" + +#: ../../core-developers/experts.rst:250 +msgid "voidspace*" +msgstr "voidspace*" + +#: ../../core-developers/experts.rst:251 +msgid "urllib" +msgstr "urllib" + +#: ../../core-developers/experts.rst:252 +msgid "uu" +msgstr "uu" + +#: ../../core-developers/experts.rst:253 +msgid "uuid" +msgstr "uuid" + +#: ../../core-developers/experts.rst:254 +msgid "venv" +msgstr "venv" + +#: ../../core-developers/experts.rst:255 +msgid "warnings" +msgstr "warnings" + +#: ../../core-developers/experts.rst:256 +msgid "wave" +msgstr "wave" + +#: ../../core-developers/experts.rst:257 +msgid "weakref" +msgstr "weakref" + +#: ../../core-developers/experts.rst:258 +msgid "webbrowser" +msgstr "webbrowser" + +#: ../../core-developers/experts.rst:259 +msgid "winreg" +msgstr "winreg" + +#: ../../core-developers/experts.rst:259 +msgid "stutzbach^" +msgstr "stutzbach^" + +#: ../../core-developers/experts.rst:260 +msgid "winsound" +msgstr "winsound" + +#: ../../core-developers/experts.rst:261 +msgid "wsgiref" +msgstr "wsgiref" + +#: ../../core-developers/experts.rst:262 +msgid "xdrlib" +msgstr "xdrlib" + +#: ../../core-developers/experts.rst:263 +msgid "xml.dom" +msgstr "xml.dom" + +#: ../../core-developers/experts.rst:264 +msgid "xml.dom.minidom" +msgstr "xml.dom.minidom" + +#: ../../core-developers/experts.rst:265 +msgid "xml.dom.pulldom" +msgstr "xml.dom.pulldom" + +#: ../../core-developers/experts.rst:266 +msgid "xml.etree" +msgstr "xml.etree" + +#: ../../core-developers/experts.rst:266 +msgid "eliben*, scoder" +msgstr "eliben*, scoder" + +#: ../../core-developers/experts.rst:267 +msgid "xml.parsers.expat" +msgstr "xml.parsers.expat" + +#: ../../core-developers/experts.rst:268 +msgid "xml.sax" +msgstr "xml.sax" + +#: ../../core-developers/experts.rst:269 +msgid "xml.sax.handler" +msgstr "xml.sax.handler" + +#: ../../core-developers/experts.rst:270 +msgid "xml.sax.saxutils" +msgstr "xml.sax.saxutils" + +#: ../../core-developers/experts.rst:271 +msgid "xml.sax.xmlreader" +msgstr "xml.sax.xmlreader" + +#: ../../core-developers/experts.rst:272 +msgid "xmlrpc" +msgstr "xmlrpc" + +#: ../../core-developers/experts.rst:273 +msgid "zipapp" +msgstr "zipapp" + +#: ../../core-developers/experts.rst:274 +msgid "zipfile" +msgstr "zipfile" + +#: ../../core-developers/experts.rst:274 +msgid "alanmcintyre^, serhiy-storchaka, Yhg1s, gpshead" +msgstr "alanmcintyre^, serhiy-storchaka, Yhg1s, gpshead" + +#: ../../core-developers/experts.rst:275 +msgid "zipimport" +msgstr "zipimport" + +#: ../../core-developers/experts.rst:276 +msgid "zlib" +msgstr "zlib" + +#: ../../core-developers/experts.rst:276 +msgid "Yhg1s, gpshead*" +msgstr "Yhg1s, gpshead*" + +#: ../../core-developers/experts.rst:281 +msgid "Tools" +msgstr "Ferramentas" + +#: ../../core-developers/experts.rst:284 +msgid "Tool" +msgstr "Ferramenta" + +#: ../../core-developers/experts.rst:286 +msgid "Argument Clinic" +msgstr "Clínica de Argumento" + +#: ../../core-developers/experts.rst:287 +msgid "PEG Generator" +msgstr "Gerador PEG (ou GASE)" + +#: ../../core-developers/experts.rst:287 ../../core-developers/experts.rst:349 +msgid "gvanrossum, pablogsal, lysnikolaou" +msgstr "gvanrossum, pablogsal, lysnikolaou" + +#: ../../core-developers/experts.rst:292 +msgid "Platforms" +msgstr "Plataformas" + +#: ../../core-developers/experts.rst:295 +msgid "Platform" +msgstr "Plataforma" + +#: ../../core-developers/experts.rst:297 +msgid "AIX" +msgstr "AIX" + +#: ../../core-developers/experts.rst:297 +msgid "David.Edelsohn^" +msgstr "David.Edelsohn^" + +#: ../../core-developers/experts.rst:298 +msgid "Cygwin" +msgstr "Cygwin" + +#: ../../core-developers/experts.rst:298 +msgid "jlt63^, stutzbach^" +msgstr "jlt63^, stutzbach^" + +#: ../../core-developers/experts.rst:299 +msgid "FreeBSD" +msgstr "FreeBSD" + +#: ../../core-developers/experts.rst:300 +msgid "HP-UX" +msgstr "HP-UX" + +#: ../../core-developers/experts.rst:301 +#: ../../getting-started/setup-building.rst:335 +msgid "Linux" +msgstr "Linux" + +#: ../../core-developers/experts.rst:302 +#: ../../getting-started/setup-building.rst:392 +msgid "macOS" +msgstr "macOS" + +#: ../../core-developers/experts.rst:302 +msgid "ronaldoussoren, ned-deily" +msgstr "ronaldoussoren, ned-deily" + +#: ../../core-developers/experts.rst:303 +msgid "NetBSD1" +msgstr "NetBSD1" + +#: ../../core-developers/experts.rst:304 +msgid "OS2/EMX" +msgstr "OS2/EMX" + +#: ../../core-developers/experts.rst:304 +msgid "aimacintyre^" +msgstr "aimacintyre^" + +#: ../../core-developers/experts.rst:305 +msgid "Solaris/OpenIndiana" +msgstr "Solaris/OpenIndiana" + +#: ../../core-developers/experts.rst:306 +#: ../../getting-started/setup-building.rst:246 +msgid "Windows" +msgstr "Windows" + +#: ../../core-developers/experts.rst:306 +msgid "tjguk, zware, zooba, pfmoore" +msgstr "tjguk, zware, zooba, pfmoore" + +#: ../../core-developers/experts.rst:307 +msgid "JVM/Java" +msgstr "JVM/Java" + +#: ../../core-developers/experts.rst:307 +msgid "frank.wierzbicki^" +msgstr "frank.wierzbicki^" + +#: ../../core-developers/experts.rst:312 +msgid "Miscellaneous" +msgstr "Diversos" + +#: ../../core-developers/experts.rst:315 +msgid "Interest Area" +msgstr "Área de Interesse" + +#: ../../core-developers/experts.rst:317 +msgid "algorithms" +msgstr "algorithms" + +#: ../../core-developers/experts.rst:318 +msgid "argument clinic" +msgstr "clínica de argumento" + +#: ../../core-developers/experts.rst:319 +msgid "ast/compiler" +msgstr "ast/compilador" + +#: ../../core-developers/experts.rst:319 +msgid "" +"benjaminp, brettcannon, 1st1, pablogsal, markshannon, isidentical, " +"brandtbucher" +msgstr "" +"benjaminp, brettcannon, 1st1, pablogsal, markshannon, isidentical, " +"brandtbucher" + +#: ../../core-developers/experts.rst:320 +msgid "autoconf/makefiles" +msgstr "autoconf/makefiles" + +#: ../../core-developers/experts.rst:321 +msgid "bsd" +msgstr "bsd" + +#: ../../core-developers/experts.rst:322 +msgid "issue tracker" +msgstr "rastreador de problemas" + +#: ../../core-developers/experts.rst:323 +msgid "buildbots" +msgstr "buildbots" + +#: ../../core-developers/experts.rst:323 +msgid "zware, pablogsal" +msgstr "zware, pablogsal" + +#: ../../core-developers/experts.rst:324 +msgid "bytecode" +msgstr "bytecode" + +#: ../../core-developers/experts.rst:324 +msgid "benjaminp, 1st1, markshannon, brandtbucher" +msgstr "benjaminp, 1st1, markshannon, brandtbucher" + +#: ../../core-developers/experts.rst:325 +msgid "context managers" +msgstr "gerenciadores de contexto" + +#: ../../core-developers/experts.rst:326 +msgid "core workflow" +msgstr "fluxo de trabalho principal" + +#: ../../core-developers/experts.rst:326 +msgid "Mariatta, ezio-melotti, hugovk" +msgstr "Mariatta, ezio-melotti, hugovk" + +#: ../../core-developers/experts.rst:327 +msgid "coverity scan" +msgstr "coverity scan" + +#: ../../core-developers/experts.rst:327 +msgid "tiran, brettcannon, Yhg1s" +msgstr "tiran, brettcannon, Yhg1s" + +#: ../../core-developers/experts.rst:328 +msgid "cryptography" +msgstr "criptografia" + +#: ../../core-developers/experts.rst:328 +msgid "gpshead, dstufft" +msgstr "gpshead, dstufft" + +#: ../../core-developers/experts.rst:329 +msgid "data formats" +msgstr "formatos de dados" + +#: ../../core-developers/experts.rst:330 +msgid "database" +msgstr "banco de dados" + +#: ../../core-developers/experts.rst:331 +msgid "devguide" +msgstr "devguide" + +#: ../../core-developers/experts.rst:331 +msgid "merwok, ezio-melotti, willingc, Mariatta, hugovk" +msgstr "merwok, ezio-melotti, willingc, Mariatta, hugovk" + +#: ../../core-developers/experts.rst:332 +msgid "documentation" +msgstr "documentação" + +#: ../../core-developers/experts.rst:332 +msgid "ezio-melotti, merwok, JulienPalard, willingc, hugovk" +msgstr "ezio-melotti, merwok, JulienPalard, willingc, hugovk" + +#: ../../core-developers/experts.rst:333 +msgid "emoji" +msgstr "emoji" + +#: ../../core-developers/experts.rst:334 +msgid "extension modules" +msgstr "módulos de extensão" + +#: ../../core-developers/experts.rst:334 +msgid "encukou, ncoghlan" +msgstr "encukou, ncoghlan" + +#: ../../core-developers/experts.rst:335 +msgid "filesystem" +msgstr "sistema de arquivos" + +#: ../../core-developers/experts.rst:336 +msgid "f-strings" +msgstr "f-strings" + +#: ../../core-developers/experts.rst:337 +msgid "GUI" +msgstr "GUI" + +#: ../../core-developers/experts.rst:338 +msgid "i18n" +msgstr "i18n" + +#: ../../core-developers/experts.rst:338 +msgid "malemburg, merwok" +msgstr "malemburg, merwok" + +#: ../../core-developers/experts.rst:339 +msgid "import machinery" +msgstr "maquinaria de importação" + +#: ../../core-developers/experts.rst:339 +msgid "brettcannon, ncoghlan, ericsnowcurrently" +msgstr "brettcannon, ncoghlan, ericsnowcurrently" + +#: ../../core-developers/experts.rst:340 +msgid "benjaminp, stutzbach^, gpshead" +msgstr "benjaminp, stutzbach^, gpshead" + +#: ../../core-developers/experts.rst:342 +msgid "mathematics" +msgstr "matemática" + +#: ../../core-developers/experts.rst:342 +msgid "mdickinson, malemburg, stutzbach^, rhettinger" +msgstr "mdickinson, malemburg, stutzbach^, rhettinger" + +#: ../../core-developers/experts.rst:343 +msgid "memory management" +msgstr "gerenciamento de memória" + +#: ../../core-developers/experts.rst:343 +msgid "tim-one, malemburg, Yhg1s" +msgstr "tim-one, malemburg, Yhg1s" + +#: ../../core-developers/experts.rst:344 +msgid "memoryview" +msgstr "memoryview" + +#: ../../core-developers/experts.rst:345 +msgid "networking" +msgstr "rede" + +#: ../../core-developers/experts.rst:345 +msgid "giampaolo, gpshead" +msgstr "giampaolo, gpshead" + +#: ../../core-developers/experts.rst:346 +msgid "object model" +msgstr "modelo de objeto" + +#: ../../core-developers/experts.rst:346 +msgid "benjaminp, Yhg1s" +msgstr "benjaminp, Yhg1s" + +#: ../../core-developers/experts.rst:347 +msgid "packaging" +msgstr "empacotamento" + +#: ../../core-developers/experts.rst:347 +msgid "tarekziade, malemburg, alexis^, merwok, dstufft, pfmoore" +msgstr "tarekziade, malemburg, alexis^, merwok, dstufft, pfmoore" + +#: ../../core-developers/experts.rst:348 +msgid "pattern matching" +msgstr "correspondência de padrões" + +#: ../../core-developers/experts.rst:348 +msgid "brandtbucher*" +msgstr "brandtbucher*" + +#: ../../core-developers/experts.rst:349 +msgid "peg parser" +msgstr "analisador sintático gase" + +#: ../../core-developers/experts.rst:350 ../../triage/labels.rst:227 +msgid "performance" +msgstr "desempenho" + +#: ../../core-developers/experts.rst:350 +msgid "" +"brettcannon, vstinner, serhiy-storchaka, 1st1, rhettinger, markshannon, " +"brandtbucher" +msgstr "" +"brettcannon, vstinner, serhiy-storchaka, 1st1, rhettinger, markshannon, " +"brandtbucher" + +#: ../../core-developers/experts.rst:351 +msgid "pip" +msgstr "pip" + +#: ../../core-developers/experts.rst:351 +msgid "ncoghlan, dstufft, pfmoore, Marcus.Smith^, pradyunsg" +msgstr "ncoghlan, dstufft, pfmoore, Marcus.Smith^, pradyunsg" + +#: ../../core-developers/experts.rst:352 +msgid "py3 transition" +msgstr "transição para py3" + +#: ../../core-developers/experts.rst:353 +msgid "release management" +msgstr "gerenciamento de lançamentos" + +#: ../../core-developers/experts.rst:353 +msgid "" +"tarekziade, malemburg, benjaminp, warsaw, gvanrossum, anthonybaxter^, " +"merwok, ned-deily, birkenfeld, JulienPalard" +msgstr "" +"tarekziade, malemburg, benjaminp, warsaw, gvanrossum, anthonybaxter^, " +"merwok, ned-deily, birkenfeld, JulienPalard" + +#: ../../core-developers/experts.rst:356 +msgid "str.format" +msgstr "str.format" + +#: ../../core-developers/experts.rst:357 +msgid "testing" +msgstr "testes" + +#: ../../core-developers/experts.rst:357 +msgid "voidspace, ezio-melotti" +msgstr "voidspace, ezio-melotti" + +#: ../../core-developers/experts.rst:358 +msgid "test coverage" +msgstr "cobertura de testes" + +#: ../../core-developers/experts.rst:359 +msgid "threads" +msgstr "threads" + +#: ../../core-developers/experts.rst:360 +msgid "time and dates" +msgstr "data e hora" + +#: ../../core-developers/experts.rst:360 +msgid "malemburg, abalkin, pganssle" +msgstr "malemburg, abalkin, pganssle" + +#: ../../core-developers/experts.rst:361 +msgid "unicode" +msgstr "unicode" + +#: ../../core-developers/experts.rst:361 +msgid "malemburg, ezio-melotti, benjaminp" +msgstr "malemburg, ezio-melotti, benjaminp" + +#: ../../core-developers/experts.rst:362 +msgid "version control" +msgstr "controle de versão" + +#: ../../core-developers/experts.rst:362 +msgid "merwok, ezio-melotti" +msgstr "merwok, ezio-melotti" + +#: ../../core-developers/experts.rst:367 +msgid "Documentation Translations" +msgstr "Traduções da documentação" + +#: ../../core-developers/experts.rst:369 +msgid "" +"For a list of translators, see :ref:`this table about translations " +"`." +msgstr "" +"Para uma lista de tradutores, veja :ref:`esta tabela sobre traduções " +"`." + +#: ../../core-developers/index.rst:3 ../../index.rst:119 +msgid "Core Developers" +msgstr "Desenvolvedores core" + +#: ../../core-developers/motivations.rst:5 +msgid "Motivations and Affiliations" +msgstr "" + +#: ../../core-developers/motivations.rst:7 +msgid "" +"CPython core developers participate in the core development process for a " +"variety of reasons. Being accepted as a core developer indicates that an " +"individual is interested in acquiring those responsibilities, has the " +"ability to collaborate effectively with existing core developers, and has " +"had the time available to demonstrate both that interest and that ability." +msgstr "" + +#: ../../core-developers/motivations.rst:13 +msgid "" +"This page allows core developers that choose to do so to provide more " +"information to the rest of the Python community regarding their personal " +"situation (such as their general location and professional affiliations), as " +"well as any personal motivations that they consider particularly relevant." +msgstr "" + +#: ../../core-developers/motivations.rst:18 +msgid "" +"Core developers that wish to provide this additional information add a new " +"entry to the :ref:`published-motivations` section below. Guidelines relating " +"to content and layout are included as comments in the source code for this " +"page." +msgstr "" + +#: ../../core-developers/motivations.rst:22 +msgid "" +"Core developers that are available for training, consulting, contract, or " +"full-time work, or are seeking crowdfunding support for their community " +"contributions, may also choose to provide that information here (including " +"linking out to commercial sites with the relevant details)." +msgstr "" + +#: ../../core-developers/motivations.rst:27 +msgid "" +"For more information on the origins and purpose of this page, see :ref:" +"`goals-of-the-motivations-page`." +msgstr "" + +#: ../../core-developers/motivations.rst:33 +msgid "Published entries" +msgstr "" + +#: ../../core-developers/motivations.rst:35 +msgid "" +"The following core developers have chosen to provide additional details " +"regarding their professional affiliations and (optionally) other reasons for " +"participating in the CPython core development process:" +msgstr "" + +#: ../../core-developers/motivations.rst:33 +msgid "Brett Cannon (Canada)" +msgstr "" + +#: ../../core-developers/motivations.rst:100 +msgid "Personal site: `snarky.ca `_" +msgstr "" + +#: ../../core-developers/motivations.rst:101 +#: ../../core-developers/motivations.rst:121 +#: ../../core-developers/motivations.rst:244 +msgid "Microsoft (Software Developer)" +msgstr "" + +#: ../../core-developers/motivations.rst:102 +#: ../../core-developers/motivations.rst:138 +#: ../../core-developers/motivations.rst:188 +#: ../../core-developers/motivations.rst:218 +#: ../../core-developers/motivations.rst:227 +#: ../../core-developers/motivations.rst:245 +#: ../../core-developers/motivations.rst:266 +msgid "Python Software Foundation (Fellow)" +msgstr "" + +#: ../../core-developers/motivations.rst:-1 +msgid "Nick Coghlan (Australia)" +msgstr "" + +#: ../../core-developers/motivations.rst:106 +msgid "" +"Personal site: `Curious Efficiency `_" +msgstr "" + +#: ../../core-developers/motivations.rst:107 +msgid "`Extended bio `__" +msgstr "" + +#: ../../core-developers/motivations.rst:108 +msgid "`Tritium `__ (Software Developer)" +msgstr "" + +#: ../../core-developers/motivations.rst:109 +msgid "Python Software Foundation (Fellow, Packaging Working Group)" +msgstr "" + +#: ../../core-developers/motivations.rst:111 +msgid "" +"Nick began using Python as a testing and prototyping language while working " +"for Boeing Defence Australia, and continues to use it for that purpose today." +msgstr "" + +#: ../../core-developers/motivations.rst:114 +msgid "" +"As a core developer, he is primarily interested in helping to ensure " +"Python's continued suitability for educational, testing and data analysis " +"use cases, as well as in encouraging good architectural practices when " +"assembling Python applications and test harnesses from open source " +"components." +msgstr "" + +#: ../../core-developers/motivations.rst:-1 +msgid "Steve Dower (United States/Australia)" +msgstr "" + +#: ../../core-developers/motivations.rst:122 +msgid "Personal site: `stevedower.id.au `_" +msgstr "" + +#: ../../core-developers/motivations.rst:123 +msgid "" +"Speaking: `stevedower.id.au/speaking `_" +msgstr "" + +#: ../../core-developers/motivations.rst:124 +msgid "" +"Work blog: `devblogs.microsoft.com/python/ `_" +msgstr "" + +#: ../../core-developers/motivations.rst:125 +msgid "Email address: steve.dower@python.org" +msgstr "" + +#: ../../core-developers/motivations.rst:127 +msgid "" +"Steve started with Python while automating a test harness for medical " +"devices, and now works for Microsoft on anything that makes Python more " +"accessible to developers on any platform." +msgstr "" + +#: ../../core-developers/motivations.rst:131 +msgid "" +"As a core developer, his focus is on maintaining the already excellent " +"Windows support and improving Python's ability to be embedded in other " +"applications." +msgstr "" + +#: ../../core-developers/motivations.rst:33 +msgid "Christian Heimes (Germany)" +msgstr "" + +#: ../../core-developers/motivations.rst:137 +msgid "" +"Red Hat (Software Developer, Security Engineering / Identity Management)" +msgstr "" + +#: ../../core-developers/motivations.rst:-1 +msgid "Mariatta (Canada)" +msgstr "" + +#: ../../core-developers/motivations.rst:142 +msgid "Personal site: `mariatta.ca `_" +msgstr "" + +#: ../../core-developers/motivations.rst:143 +msgid "" +"Works as a `Software Engineer `_ in " +"Vancouver, helps organize `Vancouver PyLadies `_ meetup on the side, and sometimes `speaks `_ at conferences." +msgstr "" + +#: ../../core-developers/motivations.rst:148 +msgid "Email address: mariatta@python.org" +msgstr "" + +#: ../../core-developers/motivations.rst:149 +msgid "`Sponsor Mariatta on GitHub `_" +msgstr "" + +#: ../../core-developers/motivations.rst:150 +msgid "`Patreon `_" +msgstr "" + +#: ../../core-developers/motivations.rst:152 +msgid "" +"Support Mariatta by `becoming a sponsor `_, sending her a `happiness packet `_, or `paypal `_." +msgstr "" + +#: ../../core-developers/motivations.rst:-1 +msgid "R. David Murray (United States)" +msgstr "" + +#: ../../core-developers/motivations.rst:158 +msgid "Personal site: `bitdance.com `_" +msgstr "" + +#: ../../core-developers/motivations.rst:159 +msgid "" +"Available for `Python and Internet Services Consulting and Python contract " +"programming `_" +msgstr "" + +#: ../../core-developers/motivations.rst:162 +msgid "" +"David has been involved in the Internet since the days when the old IBM " +"BITNET and the ARPANet got cross connected, and in Python programming since " +"he first discovered it around the days of Python 1.4. After transitioning " +"from being Director of Operations for dialup Internet providers (when that " +"business started declining) to being a full time independent consultant, " +"David started contributing directly to CPython development. He became a " +"committer in 2009. He subsequently took over primary maintenance of the " +"email package from Barry Warsaw, and contributed the unicode oriented API. " +"David is also active in mentoring new contributors and, when time is " +"available, working on the infrastructure that supports CPython development, " +"specifically the Roundup-based bug tracker and the buildbot system." +msgstr "" + +#: ../../core-developers/motivations.rst:174 +msgid "" +"David currently does both proprietary and open source development work, " +"primarily in Python, through the company in which he is a partner, `Murray & " +"Walker, Inc `_. He has done contract work " +"focused specifically on CPython development both through the PSF (the " +"kickstart of the email unicode API development) and directly funded by " +"interested corporations (additional development work on email funded by QNX, " +"and work on CPython ICC support funded by Intel). He would like to spend " +"more of his (and his company's) time on open source work, and so is actively " +"seeking additional such contract opportunities." +msgstr "" + +#: ../../core-developers/motivations.rst:-1 +msgid "Antoine Pitrou (France)" +msgstr "" + +#: ../../core-developers/motivations.rst:186 +msgid "" +"LinkedIn: ``_ (Senior Software Engineer)" +msgstr "" + +#: ../../core-developers/motivations.rst:187 +msgid "Voltron Data" +msgstr "" + +#: ../../core-developers/motivations.rst:189 +msgid "Email address: antoine@python.org" +msgstr "" + +#: ../../core-developers/motivations.rst:191 +msgid "" +"Antoine started working with Python in 2005 in order to implement a " +"decentralized virtual world protocol. He started contributing to CPython in " +"2007 and became a core developer in 2008. His motivations have been driven " +"both by the abstract desire to make Python better for the whole world, and " +"by the concrete roadblocks he was hitting in professional settings. Topics " +"of choice have included interpreter optimizations, garbage collection, " +"network programming, system programming and concurrent programming (such as " +"maintaining ``multiprocessing``)." +msgstr "" + +#: ../../core-developers/motivations.rst:200 +msgid "" +"As a professional, Antoine has been first specializing in network " +"programming, and more lately in open source data science infrastructure. He " +"is currently working full time on Apache Arrow as a technical leader for " +"Voltron Data." +msgstr "" + +#: ../../core-developers/motivations.rst:-1 +msgid "Victor Stinner (France)" +msgstr "" + +#: ../../core-developers/motivations.rst:207 +msgid "`Personal website `__" +msgstr "" + +#: ../../core-developers/motivations.rst:208 +msgid "Red Hat (Senior Software Engineer)" +msgstr "" + +#: ../../core-developers/motivations.rst:210 +msgid "" +"Victor is paid by Red Hat to maintain Python upstream and downstream (RHEL, " +"CentOS, Fedora & Software collections). See `Victor's contributions to " +"Python `_." +msgstr "" + +#: ../../core-developers/motivations.rst:33 +msgid "Kushal Das (India)" +msgstr "" + +#: ../../core-developers/motivations.rst:216 +msgid "`Personal website `__" +msgstr "" + +#: ../../core-developers/motivations.rst:217 +msgid "`Freedom of the Press Foundation `__ (Staff)" +msgstr "" + +#: ../../core-developers/motivations.rst:-1 +msgid "Barry Warsaw (United States)" +msgstr "" + +#: ../../core-developers/motivations.rst:222 +msgid "" +"`LinkedIn: `_ (Senior Staff " +"Software Engineer - Python Foundation team)" +msgstr "" + +#: ../../core-developers/motivations.rst:224 +msgid "Personal site: `barry.warsaw.us `_" +msgstr "" + +#: ../../core-developers/motivations.rst:225 +msgid "Blog: `We Fear Change `_" +msgstr "" + +#: ../../core-developers/motivations.rst:226 +msgid "Email address: barry@python.org" +msgstr "" + +#: ../../core-developers/motivations.rst:229 +msgid "" +"Barry has been working in, with, and on Python since 1994. He attended the " +"first Python workshop at NBS (now `NIST `_) in " +"Gaithersburg, MD in 1994, where he met Guido and several other early Python " +"adopters. Barry subsequently worked with Guido for 8 years while at `CNRI " +"`_. From 2007 until 2017, Barry worked for " +"`Canonical `_, corporate sponsor of `Ubuntu `_ Linux, primarily on the Python ecosystem, and is both an " +"Ubuntu and a `Debian `_ uploading developer. Barry " +"has served as Python's postmaster, webmaster, release manager, Language " +"Summit co-chair, `Jython `_ project leader, `GNU " +"Mailman `_ project leader, and probably lots of other " +"things he shouldn't admit to." +msgstr "" + +#: ../../core-developers/motivations.rst:33 +msgid "Eric Snow (United States)" +msgstr "" + +#: ../../core-developers/motivations.rst:-1 +msgid "Dino Viehland (United States)" +msgstr "" + +#: ../../core-developers/motivations.rst:249 +msgid "Meta (Software Engineer)" +msgstr "" + +#: ../../core-developers/motivations.rst:250 +msgid "Email address: dinoviehland@gmail.com" +msgstr "" + +#: ../../core-developers/motivations.rst:252 +msgid "" +"Dino started working with Python in 2005 by working on IronPython, an " +"implementation of Python running on .NET. He was one of the primary " +"developers on the project for 6 years. After that he started the Python " +"Tools for Visual Studio project focusing on providing advanced code " +"completion and debugging features for Python. Today he works on `Cinder " +"`_ improving Python " +"performance for Instagram." +msgstr "" + +#: ../../core-developers/motivations.rst:-1 +msgid "Carol Willing (United States)" +msgstr "" + +#: ../../core-developers/motivations.rst:262 +msgid "Noteable: ``__ (Technical Evangelist)" +msgstr "" + +#: ../../core-developers/motivations.rst:263 +msgid "" +"Personal site: `Willing Consulting `_" +msgstr "" + +#: ../../core-developers/motivations.rst:264 +msgid "`Extended bio `__" +msgstr "" + +#: ../../core-developers/motivations.rst:265 +msgid "Project Jupyter (Steering Council, Core Team for JupyterHub/Binder)" +msgstr "" + +#: ../../core-developers/motivations.rst:268 +msgid "" +"Carol is focused on Python's usage in education and scientific research. She " +"is interested in organizational development, operational workflows, and " +"sustainability of open source projects." +msgstr "" + +#: ../../core-developers/motivations.rst:276 +msgid "Goals of this page" +msgstr "" + +#: ../../core-developers/motivations.rst:278 +msgid "" +"The `issue metrics`_ automatically collected by the CPython issue tracker " +"strongly suggest that the current core development process is bottlenecked " +"on core developer time - this is most clearly indicated in the first metrics " +"graph, which shows both the number of open issues and the number of patches " +"awaiting review growing steadily over time, despite CPython being one of the " +"most active open source projects in the world. This bottleneck then impacts " +"not only resolving open issues and applying submitted patches, but also the " +"process of identifying, nominating and mentoring new core developers." +msgstr "" + +#: ../../core-developers/motivations.rst:287 +msgid "" +"The core commit statistics monitored by sites like `OpenHub`_ provide a good " +"record as to *who* is currently handling the bulk of the review and " +"maintenance work, but don't provide any indication as to the factors " +"currently influencing people's ability to spend time on reviewing proposed " +"changes, or mentoring new contributors." +msgstr "" + +#: ../../core-developers/motivations.rst:293 +msgid "" +"This page aims to provide at least some of that missing data by encouraging " +"core developers to highlight professional affiliations in the following two " +"cases (even if not currently paid for time spent participating in the core " +"development process):" +msgstr "" + +#: ../../core-developers/motivations.rst:298 +msgid "" +"developers working for vendors that distribute a commercially supported " +"Python runtime" +msgstr "" + +#: ../../core-developers/motivations.rst:300 +msgid "" +"developers working for Sponsor Members of the Python Software Foundation" +msgstr "" + +#: ../../core-developers/motivations.rst:302 +msgid "" +"These are cases where documenting our affiliations helps to improve the " +"overall transparency of the core development process, as well as making it " +"easier for staff at these organisations to locate colleagues that can help " +"them to participate in and contribute effectively to supporting the core " +"development process." +msgstr "" + +#: ../../core-developers/motivations.rst:308 +msgid "" +"Core developers working for organisations with a vested interest in the " +"sustainability of the CPython core development process are also encouraged " +"to seek opportunities to spend work time on mentoring potential new core " +"developers, whether through the general `core mentorship program`_, through " +"mentoring colleagues, or through more targeted efforts like Outreachy's paid " +"`internships`_ and Google's `Summer of Code`_." +msgstr "" + +#: ../../core-developers/motivations.rst:315 +msgid "" +"Core developers that are available for consulting or contract work on behalf " +"of the Python Software Foundation or other organisations are also encouraged " +"to provide that information here, as this will help the PSF to better " +"facilitate funding of core development work by organisations that don't " +"directly employ any core developers themselves." +msgstr "" + +#: ../../core-developers/motivations.rst:321 +msgid "" +"Finally, some core developers seeking to increase the time they have " +"available to contribute to CPython may wish to pursue crowdfunding efforts " +"that allow their contributions to be funded directly by the community, " +"rather than relying on institutional sponsors allowing them to spend some or " +"all of their work time contributing to CPython development." +msgstr "" + +#: ../../core-developers/motivations.rst:335 +msgid "Limitations on scope" +msgstr "" + +#: ../../core-developers/motivations.rst:337 +msgid "" +"Specific technical areas of interest for core developers should be captured " +"in the :ref:`Experts Index `." +msgstr "" + +#: ../../core-developers/motivations.rst:340 +msgid "" +"This specific listing is limited to CPython core developers (since it's " +"focused on the specific constraint that is core developer time), but it " +"would be possible to create a more expansive listing on the Python wiki that " +"also covers issue triagers, and folks seeking to become core developers." +msgstr "" + +#: ../../core-developers/motivations.rst:345 +msgid "" +"Changes to the software and documentation maintained by core developers, " +"together with related design discussions, all take place in public venues, " +"and hence are inherently subject to full public review. Accordingly, core " +"developers are NOT required to publish their motivations and affiliations if " +"they do not choose to do so. This helps to ensure that core contribution " +"processes remain open to anyone that is in a position to sign the " +"`Contributor Licensing Agreement`_, the details of which are filed privately " +"with the Python Software Foundation, rather than publicly." +msgstr "" + +#: ../../core-developers/responsibilities.rst:5 +msgid "Responsibilities" +msgstr "" + +#: ../../core-developers/responsibilities.rst:7 +msgid "" +"As contributors to the CPython project, our shared responsibility is to " +"collaborate constructively with other contributors, including core " +"developers. This responsibility covers all forms of contribution, whether " +"that's submitting patches to the implementation or documentation, reviewing " +"other peoples' patches, triaging issues on the issue tracker, or discussing " +"design and development ideas on the core :ref:`communication channels " +"`." +msgstr "" + +#: ../../core-developers/responsibilities.rst:15 +msgid "" +"Core developers accept key additional responsibilities around the ongoing " +"management of the project:" +msgstr "" + +#: ../../core-developers/responsibilities.rst:18 +msgid "" +"core developers bear the additional responsibility of handling the " +"consequences of accepting a change into the code base or documentation. That " +"includes reverting or fixing it if it causes problems in the Buildbot fleet " +"or someone spots a problem in post-commit review, as well as helping out the " +"release manager in resolving any problems found during the pre-release " +"testing cycle. While all contributors are free to help out with this part of " +"the process, and it is most welcome when they do, the actual responsibility " +"rests with the core developer that merged the change" +msgstr "" + +#: ../../core-developers/responsibilities.rst:26 +msgid "" +"core developers also bear the primary responsibility for deciding when " +"changes proposed on the issue tracker should be escalated to the " +"appropriate :ref:`Discourse ` category for wider " +"discussion, as well as suggesting the use of the Python Enhancement Proposal " +"process to manage the design and justification of complex changes, or " +"changes with a potentially significant impact on end users" +msgstr "" + +#: ../../core-developers/responsibilities.rst:34 +msgid "" +"As a result of the additional responsibilities they accept, core developers " +"gain the privilege of being able to approve proposed changes, as well as " +"being able to reject them as inappropriate. Core developers are also able to " +"request that even already merged changes be escalated to :ref:`Discourse " +"` for further discussion, and potentially even " +"reverted prior to release." +msgstr "" + +#: ../../core-developers/responsibilities.rst:41 +msgid "" +"Becoming a core developer isn't a binary \"all-or-nothing\" status - CPython " +"is a large project, and different core developers accept responsibility for " +"making design and development decisions in different areas (as documented in " +"the :ref:`experts` and :ref:`developers`)." +msgstr "" + +#: ../../core-developers/responsibilities.rst:48 +msgid "Communication Channels and Bug Notifications" +msgstr "" + +#: ../../core-developers/responsibilities.rst:50 +msgid "" +"Mailing lists have generally been replaced by the `Discourse forum `_ (``discuss.python.org``). Refer to the :ref:" +"`mailinglists` and :ref:`communication-discourse` sections for more " +"information." +msgstr "" + +#: ../../core-developers/responsibilities.rst:55 +msgid "" +"If you want notification of new issues, you can use the appropriate GitHub " +"notification settings for the `python/cpython `_ repository — follow the link and click on the :guilabel:`Watch` " +"button to set your notification options." +msgstr "" + +#: ../../core-developers/responsibilities.rst:63 +msgid "Sign a Contributor Agreement" +msgstr "" + +#: ../../core-developers/responsibilities.rst:65 +msgid "" +"Submitting a `contributor form for Python`_ licenses any code you contribute " +"to the Python Software Foundation. While you retain the copyright, giving " +"the PSF the ability to license your code means it can be put under the PSF " +"license so it can be legally distributed with Python." +msgstr "" + +#: ../../core-developers/responsibilities.rst:70 +msgid "" +"This is a very important step! Hopefully you have already submitted a " +"contributor agreement if you have been submitting patches. But if you have " +"not done this yet, it is best to do this ASAP, probably before you even do " +"your first commit so as to not forget. Also do not forget to enter your " +"GitHub username into your details on the issue tracker." +msgstr "" + +#: ../../core-developers/responsibilities.rst:81 +msgid "Pull Request merging" +msgstr "" + +#: ../../core-developers/responsibilities.rst:83 +msgid "" +"Once you have your commit privileges on GitHub you will be able to accept " +"pull requests on GitHub. You should plan to continue to submit your own " +"changes through pull requests as if you weren't a core developer to benefit " +"from various things such as automatic integration testing, but you can " +"accept your own pull requests if you feel comfortable doing so." +msgstr "" + +#: ../../core-developers/responsibilities.rst:91 +msgid "Expectations" +msgstr "" + +#: ../../core-developers/responsibilities.rst:93 +msgid "As a core developer, there are certain things that are expected of you." +msgstr "" + +#: ../../core-developers/responsibilities.rst:95 +msgid "" +"First and foremost, be a good person. This might sound melodramatic, but you " +"are now a member of the Python project and thus represent the project and " +"your fellow core developers whenever you discuss Python with anyone. We have " +"a reputation for being a very nice group of people and we would like to keep " +"it that way. Core developers responsibilities include following the `PSF " +"Code of Conduct`_." +msgstr "" + +#: ../../core-developers/responsibilities.rst:102 +msgid "" +"Second, please be prompt in responding to questions. Many contributors to " +"Python are volunteers so what little free time they can dedicate to Python " +"should be spent being productive. If you have been asked to respond to an " +"issue or answer a question and you put it off it ends up stalling other " +"people's work. It is completely acceptable to say you are too busy, but you " +"need to say that instead of leaving people waiting for an answer. This also " +"applies to anything you do on the issue tracker." +msgstr "" + +#: ../../core-developers/responsibilities.rst:110 +msgid "" +"Third, please list what areas you want to be considered an expert in the :" +"ref:`experts`. This allows triagers to direct issues to you which involve an " +"area you are an expert in. But, as stated in the second point above, if you " +"do not have the time to answer questions promptly then please remove " +"yourself as needed from the file so that you will not be bothered in the " +"future. Once again, we all understand how life gets in the way, so no one " +"will be insulted if you remove yourself from the list." +msgstr "" + +#: ../../core-developers/responsibilities.rst:118 +msgid "" +"Fourth, please consider whether or not you wish to add your name to the :ref:" +"`motivations` list. Core contributor participation in the list helps the " +"wider Python community to better appreciate the perspectives currently " +"represented amongst the core development team, the Python Software " +"Foundation to better assess the sustainability of current contributions to " +"CPython core development, and also serves as a referral list for " +"organisations seeking commercial Python support from the core development " +"community." +msgstr "" + +#: ../../core-developers/responsibilities.rst:126 +msgid "" +"And finally, enjoy yourself! Contributing to open source software should be " +"fun (overall). If you find yourself no longer enjoying the work then either " +"take a break or figure out what you need to do to make it enjoyable again." +msgstr "" + +#: ../../developer-workflow/c-api.rst:5 +msgid "Changing Python's C API" +msgstr "" + +#: ../../developer-workflow/c-api.rst:7 +msgid "The C API is divided into three sections:" +msgstr "" + +#: ../../developer-workflow/c-api.rst:9 +msgid "" +"The internal, private API, available with ``Py_BUILD_CORE`` defined. Ideally " +"declared in ``Include/internal/``. Any API named with a leading underscore " +"is also considered private." +msgstr "" + +#: ../../developer-workflow/c-api.rst:12 +msgid "" +"The public C API, available when ``Python.h`` is included normally. Ideally " +"declared in ``Include/cpython/``." +msgstr "" + +#: ../../developer-workflow/c-api.rst:14 +msgid "" +"The Limited API, available with ``Py_LIMITED_API`` defined. Ideally declared " +"directly under ``Include/``." +msgstr "" + +#: ../../developer-workflow/c-api.rst:17 +msgid "" +"Each section has higher stability & maintenance requirements, and you will " +"need to think about more issues when you add or change definitions in it." +msgstr "" + +#: ../../developer-workflow/c-api.rst:20 +msgid "" +"The compatibility guarantees for public C API are explained in the user " +"documentation, ``Doc/c-api/stable.rst`` (:ref:`python:stable`)." +msgstr "" + +#: ../../developer-workflow/c-api.rst:25 +msgid "The internal API" +msgstr "" + +#: ../../developer-workflow/c-api.rst:27 +msgid "" +"Internal API is defined in ``Include/internal/`` and is only available for " +"building CPython itself, as indicated by a macro like ``Py_BUILD_CORE``." +msgstr "" + +#: ../../developer-workflow/c-api.rst:30 +msgid "" +"While internal API can be changed at any time, it's still good to keep it " +"stable: other API or other CPython developers may depend on it." +msgstr "" + +#: ../../developer-workflow/c-api.rst:34 +msgid "With PyAPI_FUNC or PyAPI_DATA" +msgstr "" + +#: ../../developer-workflow/c-api.rst:36 +msgid "" +"Functions or structures in ``Include/internal/`` defined with ``PyAPI_FUNC`` " +"or ``PyAPI_DATA`` are internal functions which are exposed only for specific " +"use cases like debuggers and profilers." +msgstr "" + +#: ../../developer-workflow/c-api.rst:42 +msgid "With the extern keyword" +msgstr "" + +#: ../../developer-workflow/c-api.rst:44 +msgid "" +"Functions in ``Include/internal/`` defined with the ``extern`` keyword *must " +"not and can not* be used outside the CPython code base. Only built-in " +"stdlib extensions (built with the ``Py_BUILD_CORE_BUILTIN`` macro defined) " +"can use such functions." +msgstr "" + +#: ../../developer-workflow/c-api.rst:49 +msgid "" +"When in doubt, new internal C functions should be defined in ``Include/" +"internal`` using the ``extern`` keyword." +msgstr "" + +#: ../../developer-workflow/c-api.rst:53 +msgid "Private names" +msgstr "" + +#: ../../developer-workflow/c-api.rst:55 +msgid "" +"Any API named with a leading underscore is also considered internal. There " +"are two main use cases for using such names rather than putting the " +"definition in ``Include/internal/`` (or directly in a ``.c`` file):" +msgstr "" + +#: ../../developer-workflow/c-api.rst:59 +msgid "" +"Internal helpers for other public API; users should not use these directly;" +msgstr "" + +#: ../../developer-workflow/c-api.rst:60 +msgid "" +"“Provisional” API, included in a Python release to test real-world usage of " +"new API. Such names should be renamed when stabilized; preferably with a " +"macro aliasing the old name to the new one. See :pep:`\"Finalizing the API\" " +"in PEP 590 <590#finalizing-the-api>` for an example." +msgstr "" + +#: ../../developer-workflow/c-api.rst:66 +msgid "Internal API Tests" +msgstr "" + +#: ../../developer-workflow/c-api.rst:68 +msgid "" +"C tests for the internal C API live in ``Modules/_testinternalcapi.c``. " +"Functions named ``test_*`` are used as tests directly. Python parts of the " +"tests live in various places in ``Lib/test``." +msgstr "" + +#: ../../developer-workflow/c-api.rst:76 +msgid "Public C API" +msgstr "" + +#: ../../developer-workflow/c-api.rst:78 +msgid "" +"CPython's public C API is available when ``Python.h`` is included normally " +"(that is, without defining macros to select the other variants)." +msgstr "" + +#: ../../developer-workflow/c-api.rst:81 +msgid "" +"It should be defined in ``Include/cpython/`` (unless part of the Limited " +"API, see below)." +msgstr "" + +#: ../../developer-workflow/c-api.rst:84 +msgid "Guidelines for expanding/changing the public API:" +msgstr "" + +#: ../../developer-workflow/c-api.rst:86 +msgid "" +"Make sure the new API follows reference counting conventions. (Following " +"them makes the API easier to reason about, and easier use in other Python " +"implementations.)" +msgstr "" + +#: ../../developer-workflow/c-api.rst:90 +msgid "Functions *must not* steal references" +msgstr "" + +#: ../../developer-workflow/c-api.rst:91 +msgid "Functions *must not* return borrowed references" +msgstr "" + +#: ../../developer-workflow/c-api.rst:92 +msgid "Functions returning references *must* return a strong reference" +msgstr "" + +#: ../../developer-workflow/c-api.rst:94 +msgid "" +"Make sure the ownership rules and lifetimes of all applicable struct fields, " +"arguments and return values are well defined." +msgstr "" + +#: ../../developer-workflow/c-api.rst:99 +msgid "C API Tests" +msgstr "" + +#: ../../developer-workflow/c-api.rst:101 +msgid "" +"Tests for the public C API live in the ``_testcapi`` module. Functions named " +"``test_*`` are used as tests directly. Tests that need Python code (or are " +"just easier to partially write in Python) live in ``Lib/test``, mainly in :" +"cpy-file:`Lib/test/test_capi`." +msgstr "" + +#: ../../developer-workflow/c-api.rst:106 +msgid "" +"Due to its size, the ``_testcapi`` module is defined in several source " +"files. To add a new set of tests (or extract a set out of the monolithic :" +"cpy-file:`Modules/_testcapimodule.c`):" +msgstr "" + +#: ../../developer-workflow/c-api.rst:111 +msgid "Create a C file named ``Modules/_testcapi/yourfeature.c``" +msgstr "" + +#: ../../developer-workflow/c-api.rst:113 +msgid "The file should define a module as usual, except:" +msgstr "" + +#: ../../developer-workflow/c-api.rst:115 +msgid "Instead of ````, include ``\"parts.h\"``." +msgstr "" + +#: ../../developer-workflow/c-api.rst:116 +msgid "" +"Instead of ``PyInit_modname``, define a ``_PyTestCapi_Init_yourfeature`` " +"function that *takes* the ``_testcapi`` module and adds functions/classes to " +"it. (You can use ``PyModule_AddFunctions`` to add functions.)" +msgstr "" + +#: ../../developer-workflow/c-api.rst:120 +msgid "" +"Add the ``_PyTestCapi_Init_*`` function to ``Modules/_testcapi/parts.h``" +msgstr "" + +#: ../../developer-workflow/c-api.rst:122 +msgid "" +"Call the ``_PyTestCapi_Init_*`` from ``PyInit__testcapi`` in ``Modules/" +"_testcapimodule.c``." +msgstr "" + +#: ../../developer-workflow/c-api.rst:125 +msgid "" +"Add the new C file to :cpy-file:`Modules/Setup.stdlib.in`, :cpy-file:" +"`PCbuild/_testcapi.vcxproj` and :cpy-file:`PCbuild/_testcapi.vcxproj." +"filters`, alongside the other ``_testcapi/*.c`` entries." +msgstr "" + +#: ../../developer-workflow/c-api.rst:130 +msgid "" +"Note that all ``Modules/_testcapi/*.c`` sources initialize the same module, " +"so be careful about name collisions." +msgstr "" + +#: ../../developer-workflow/c-api.rst:133 +msgid "" +"When moving existing tests, feel free to replace ``TestError`` with " +"``PyExc_AssertionError`` unless actually testing custom exceptions." +msgstr "" + +#: ../../developer-workflow/c-api.rst:138 +msgid "Limited API" +msgstr "" + +#: ../../developer-workflow/c-api.rst:140 +msgid "" +"The Limited API is a subset of the C API designed to guarantee ABI stability " +"across Python 3 versions. Defining the macro ``Py_LIMITED_API`` will limit " +"the exposed API to this subset." +msgstr "" + +#: ../../developer-workflow/c-api.rst:145 +msgid "No changes that break the Stable ABI are allowed." +msgstr "" + +#: ../../developer-workflow/c-api.rst:147 +msgid "" +"The Limited API should be defined in ``Include/``, excluding the ``cpython`` " +"and ``internal`` subdirectories." +msgstr "" + +#: ../../developer-workflow/c-api.rst:152 +msgid "Guidelines for changing the Limited API, and removing items from it" +msgstr "" + +#: ../../developer-workflow/c-api.rst:154 +msgid "" +"While the *Stable ABI* must not be broken, the existing Limited API can be " +"changed, and items can be removed from it, if:" +msgstr "" + +#: ../../developer-workflow/c-api.rst:157 +msgid "the Backwards Compatibility Policy (:pep:`387`) is followed, and" +msgstr "" + +#: ../../developer-workflow/c-api.rst:158 +msgid "" +"the Stable ABI is not broken -- that is, extensions compiled with Limited " +"API of older versions of Python continue to work on newer versions of Python." +msgstr "" + +#: ../../developer-workflow/c-api.rst:162 +msgid "This is tricky to do and requires careful thought. Some examples:" +msgstr "" + +#: ../../developer-workflow/c-api.rst:165 +msgid "" +"Functions, structs etc. accessed by macros in *any version* of the Limited " +"API are part of the Stable ABI, even if they are named with an underscore. " +"They must not be removed and their signature must not change. (Their " +"implementation may change, though.)" +msgstr "" + +#: ../../developer-workflow/c-api.rst:169 +msgid "" +"Structs members cannot be rearranged if they were part of any version of the " +"Limited API." +msgstr "" + +#: ../../developer-workflow/c-api.rst:171 +msgid "" +"If the Limited API allows users to allocate a struct directly, its size must " +"not change." +msgstr "" + +#: ../../developer-workflow/c-api.rst:173 +msgid "" +"Exported symbols (functions and data) must continue to be available as " +"exported symbols. Specifically, a function can only be converted to a " +"``static inline`` function (or macro) if Python also continues to provide " +"the actual function. For an example, see the ``Py_NewRef`` `macro`_ and " +"`redefinition`_ in 3.10." +msgstr "" + +#: ../../developer-workflow/c-api.rst:182 +msgid "" +"It is possible to remove items marked as part of the Stable ABI, but only if " +"there was no way to use them in any past version of the Limited API." +msgstr "" + +#: ../../developer-workflow/c-api.rst:187 +msgid "Guidelines for adding to the Limited API" +msgstr "" + +#: ../../developer-workflow/c-api.rst:189 +msgid "Guidelines for the general :ref:`public-capi` apply." +msgstr "" + +#: ../../developer-workflow/c-api.rst:191 +msgid "" +"New Limited API should only be defined if ``Py_LIMITED_API`` is set to the " +"version the API was added in or higher. (See below for the proper ``#if`` " +"guard.)" +msgstr "" + +#: ../../developer-workflow/c-api.rst:195 +msgid "" +"All parameter types, return values, struct members, etc. need to be part of " +"the Limited API." +msgstr "" + +#: ../../developer-workflow/c-api.rst:198 +msgid "" +"Functions that deal with ``FILE*`` (or other types with ABI portability " +"issues) should not be added." +msgstr "" + +#: ../../developer-workflow/c-api.rst:201 +msgid "Think twice when defining macros." +msgstr "" + +#: ../../developer-workflow/c-api.rst:203 +msgid "Macros should not expose implementation details" +msgstr "" + +#: ../../developer-workflow/c-api.rst:204 +msgid "" +"Functions must be exported as actual functions, not (only) as functions-like " +"macros." +msgstr "" + +#: ../../developer-workflow/c-api.rst:206 +msgid "" +"If possible, avoid macros. This makes the Limited API more usable in " +"languages that don't use the C preprocessor." +msgstr "" + +#: ../../developer-workflow/c-api.rst:209 +msgid "Please start a public discussion before expanding the Limited API" +msgstr "" + +#: ../../developer-workflow/c-api.rst:211 +msgid "" +"The Limited API and must follow standard C, not just features of currently " +"supported platforms. The exact C dialect is described in :pep:`7`." +msgstr "" + +#: ../../developer-workflow/c-api.rst:214 +msgid "" +"Documentation examples (and more generally: the intended use of the API) " +"should also follow standard C." +msgstr "" + +#: ../../developer-workflow/c-api.rst:216 +msgid "" +"In particular, do not cast a function pointer to ``void*`` (a data pointer) " +"or vice versa." +msgstr "" + +#: ../../developer-workflow/c-api.rst:219 +msgid "Think about ease of use for the user." +msgstr "" + +#: ../../developer-workflow/c-api.rst:221 +msgid "" +"In C, ease of use itself is not very important; what is useful is reducing " +"boilerplate code needed to use the API. Bugs like to hide in boiler plates." +msgstr "" + +#: ../../developer-workflow/c-api.rst:225 +msgid "" +"If a function will be often called with specific value for an argument, " +"consider making it default (used when ``NULL`` is passed in)." +msgstr "" + +#: ../../developer-workflow/c-api.rst:227 +msgid "The Limited API needs to be well documented." +msgstr "" + +#: ../../developer-workflow/c-api.rst:229 +msgid "Think about future extensions" +msgstr "" + +#: ../../developer-workflow/c-api.rst:231 +msgid "" +"If it's possible that future Python versions will need to add a new field to " +"your struct, make sure it can be done." +msgstr "" + +#: ../../developer-workflow/c-api.rst:233 +msgid "" +"Make as few assumptions as possible about implementation details that might " +"change in future CPython versions or differ across C API implementations. " +"The most important CPython-specific implementation details involve:" +msgstr "" + +#: ../../developer-workflow/c-api.rst:238 +msgid "The GIL" +msgstr "" + +#: ../../developer-workflow/c-api.rst:239 +msgid ":ref:`Garbage collection `" +msgstr "" + +#: ../../developer-workflow/c-api.rst:240 +msgid "Memory layout of PyObject, lists/tuples and other structures" +msgstr "" + +#: ../../developer-workflow/c-api.rst:242 +msgid "" +"If following these guidelines would hurt performance, add a fast function " +"(or macro) to the non-limited API and a stable equivalent to the Limited API." +msgstr "" + +#: ../../developer-workflow/c-api.rst:246 +msgid "" +"If anything is unclear, or you have a good reason to break the guidelines, " +"consider discussing the change at the `capi-sig`_ mailing list." +msgstr "" + +#: ../../developer-workflow/c-api.rst:252 +msgid "Adding a new definition to the Limited API" +msgstr "" + +#: ../../developer-workflow/c-api.rst:254 +msgid "" +"Add the declaration to a header file directly under ``Include/``, into a " +"block guarded with the following:" +msgstr "" + +#: ../../developer-workflow/c-api.rst:261 +msgid "" +"with the ``yy`` corresponding to the target CPython version, e.g. " +"``0x030A0000`` for Python 3.10." +msgstr "" + +#: ../../developer-workflow/c-api.rst:263 +msgid "Append an entry to the Stable ABI manifest, ``Misc/stable_abi.toml``" +msgstr "" + +#: ../../developer-workflow/c-api.rst:264 +msgid "" +"Regenerate the autogenerated files using ``make regen-limited-abi``. On " +"platforms without ``make``, run this command directly:" +msgstr "" + +#: ../../developer-workflow/c-api.rst:271 +msgid "" +"Build Python and check the using ``make check-limited-abi``. On platforms " +"without ``make``, run this command directly:" +msgstr "" + +#: ../../developer-workflow/c-api.rst:278 +msgid "Add tests -- see below." +msgstr "" + +#: ../../developer-workflow/c-api.rst:282 +msgid "Limited API Tests" +msgstr "" + +#: ../../developer-workflow/c-api.rst:284 +msgid "" +"Since Limited API is a subset of the C API, there's no need to test the " +"behavior of individual functions. Rather, the tests could verify that some " +"task is possible using the exposed subset, or exercise a feature that was " +"removed from the current Limited API but still needs to be supported for " +"older Limited API/Stable ABI versions." +msgstr "" + +#: ../../developer-workflow/c-api.rst:290 +msgid "To add a test file:" +msgstr "" + +#: ../../developer-workflow/c-api.rst:292 +msgid "" +"Add a C file ``Modules/_testcapi/yourfeature_limited.c``. If that file " +"already exists but its ``Py_LIMITED_API`` version is too low, add a version " +"postfix, e.g. ``yourfeature_limited_3_12.c`` for Python 3.12+." +msgstr "" + +#: ../../developer-workflow/c-api.rst:295 +msgid "``#define Py_LIMITED_API`` to the minimum limited API version needed." +msgstr "" + +#: ../../developer-workflow/c-api.rst:296 +msgid "``#include \"parts.h\"`` after the ``Py_LIMITED_API`` definition" +msgstr "" + +#: ../../developer-workflow/c-api.rst:297 +msgid "" +"Enclose the entire rest of the file in ``#ifdef LIMITED_API_AVAILABLE``, so " +"it's skipped on incompatible builds." +msgstr "" + +#: ../../developer-workflow/c-api.rst:299 +msgid "" +"Follow the general instructions for `C API tests`_. All additions go in the " +"sections guarded by ``#ifdef LIMITED_API_AVAILABLE``." +msgstr "" + +#: ../../developer-workflow/c-api.rst:302 +msgid "" +"Use the ``test.support.requires_limited_api`` decorator for Python tests in " +"``Lib/test``, so they're skipped on incompatible builds." +msgstr "" + +#: ../../developer-workflow/communication-channels.rst:6 +msgid "Following Python's Development" +msgstr "" + +#: ../../developer-workflow/communication-channels.rst:8 +msgid "" +"Python's development is communicated through a myriad of ways, primarily :" +"ref:`Discourse ` along with other platforms." +msgstr "" + +#: ../../developer-workflow/communication-channels.rst:13 +msgid "Standards of behaviour in these communication channels" +msgstr "" + +#: ../../developer-workflow/communication-channels.rst:15 +msgid "" +"We try to foster environments of mutual respect, tolerance and " +"encouragement, as described in the PSF's `Diversity Statement`_. Abiding by " +"the guidelines in this document and asking questions or posting suggestions " +"in the appropriate channels are an excellent way to get started on the " +"mutual respect part, greatly increasing the chances of receiving tolerance " +"and encouragement in return." +msgstr "" + +#: ../../developer-workflow/communication-channels.rst:28 +#: ../../getting-started/getting-help.rst:43 +msgid "Mailing Lists" +msgstr "" + +#: ../../developer-workflow/communication-channels.rst:30 +msgid "" +"Some mailing lists have been supplanted by categories in the Python " +"`Discourse`_. Specifically," +msgstr "" + +#: ../../developer-workflow/communication-channels.rst:33 +msgid "" +"The python-dev list is superseded by the `Core Development`_ and `PEPs`_ " +"categories on Discourse." +msgstr "" + +#: ../../developer-workflow/communication-channels.rst:36 +msgid "" +"The python-ideas list is superseded by posts in the `Ideas`_ category on " +"Discourse." +msgstr "" + +#: ../../developer-workflow/communication-channels.rst:39 +msgid "" +"Discussion in :guilabel:`Core Development` is focused on issues related to " +"Python's own development, such as how to handle a specific issue, a PEP, etc." +msgstr "" + +#: ../../developer-workflow/communication-channels.rst:42 +msgid "" +"Ideas about new functionality should **not** start here, and instead should " +"be discussed in `Ideas`_." +msgstr "" + +#: ../../developer-workflow/communication-channels.rst:44 +msgid "" +"Technical support questions should also not be asked here, and instead " +"should go to the python-list_ or python-help_ mailing lists, or the `Python " +"Help`_ category on Discourse." +msgstr "" + +#: ../../developer-workflow/communication-channels.rst:48 +msgid "" +"Existing threads on the python-dev_, python-committers_, and python-ideas_ " +"mailing lists can be accessed through the `online archive `__." +msgstr "" + +#: ../../developer-workflow/communication-channels.rst:51 +msgid "" +"General Python questions should go to `python-list`_ or `tutor`_ or similar " +"resources, such as StackOverflow_ or the ``#python`` IRC channel on Libera." +"Chat_." +msgstr "" + +#: ../../developer-workflow/communication-channels.rst:55 +msgid "" +"`The core-workflow `_ issue " +"tracker is the place to discuss and work on improvements to the CPython core " +"development workflow." +msgstr "" + +#: ../../developer-workflow/communication-channels.rst:59 +msgid "" +"A complete list of Python mailing lists can be found at https://mail.python." +"org/mailman/listinfo (older lists, using Mailman2) or https://mail.python." +"org/mailman3/ (newer lists, using Mailman3). Some lists may also be mirrored " +"at `GMANE `_ and can be read and posted to in various " +"ways, including via web browsers, NNTP newsreaders, and RSS feed readers." +msgstr "" + +#: ../../developer-workflow/communication-channels.rst:80 +msgid "Discourse (discuss.python.org web forum)" +msgstr "" + +#: ../../developer-workflow/communication-channels.rst:82 +msgid "" +"We have our own `Discourse`_ forum for both developers and users. This forum " +"complements the `python-dev`_, `python-ideas`_, `python-help`_, and `python-" +"list`_ mailing lists." +msgstr "" + +#: ../../developer-workflow/communication-channels.rst:86 +msgid "" +"This forum has different categories and most core development discussions " +"take place in the open forum categories for `PEPs`_ and `Core Development`_ " +"(these are the Discourse equivalents to the python-dev mailing list). All " +"categories are open for users to read and post with the exception of the " +"`Committers`_ category, where posting is restricted to the `CPython `_ core developers." +msgstr "" + +#: ../../developer-workflow/communication-channels.rst:93 +msgid "" +"The Committers category is often used for announcements and notifications. " +"It is also the designated venue for the core developer promotion votes (as " +"the Discourse equivalent of the `python-committers`_ mailing list)." +msgstr "" + +#: ../../developer-workflow/communication-channels.rst:98 +msgid "Tutorials for new users" +msgstr "" + +#: ../../developer-workflow/communication-channels.rst:100 +msgid "" +"To start a topic or participate in any discussions in the forum, sign up and " +"create an account using an email address or GitHub account. You can do so by " +"clicking the \"Sign Up\" button on the top right hand corner of the " +"`Discourse`_ main page." +msgstr "" + +#: ../../developer-workflow/communication-channels.rst:105 +msgid "" +"The Python Discourse `Quick Start `_ compiled by `Carol Willing `_ gives you a quick overview on how to kick off " +"Python Discourse." +msgstr "" + +#: ../../developer-workflow/communication-channels.rst:109 +msgid "" +"We recommend new users getting familiarised with the forum by going through " +"Discobot tutorials. These tutorials can be activated by replying to a " +"welcome message from \"discourse Greetings!\" received under Notifications " +"and Messages in your user account." +msgstr "" + +#: ../../developer-workflow/communication-channels.rst:113 +msgid "" +"Click on your personal account found on the top right hand corner of the " +"page." +msgstr "" + +#: ../../developer-workflow/communication-channels.rst:114 +msgid "" +"The dropdown menu will show four different icons: 🔔 (Notifications), 🔖 " +"(Bookmarks), ✉️ (Messages), and 👤 (Preferences)." +msgstr "" + +#: ../../developer-workflow/communication-channels.rst:116 +msgid "Select either Notifications or Messages." +msgstr "" + +#: ../../developer-workflow/communication-channels.rst:117 +msgid "Open the \"Greetings!\" message sent by Discobot to start the tutorial." +msgstr "" + +#: ../../developer-workflow/communication-channels.rst:119 +msgid "" +"Ensure that you read through the `Python Code of Conduct `_. We are to be open, considerate and respectful to all " +"users in the community. You can report messages that don't respect the CoC " +"by clicking on the three dots under the message and then on the ⚐ icon. You " +"can also mention the `@staff `_, " +"`@moderators `_, or `@admins " +"`_ groups in a message." +msgstr "" + +#: ../../developer-workflow/communication-channels.rst:130 +msgid "Reading topics" +msgstr "" + +#: ../../developer-workflow/communication-channels.rst:131 +msgid "" +"Click a topic title and read down the list of replies in chronological " +"order, following links or previewing replies and quotes as you go. Use your " +"mouse to scroll the screen, or use the timeline scroll bar on the right " +"which also shows you how far through the conversation you've read. On " +"smaller screens, select the bottom progress bar to expand it." +msgstr "" + +#: ../../developer-workflow/communication-channels.rst:139 +msgid "Notifications" +msgstr "" + +#: ../../developer-workflow/communication-channels.rst:142 +msgid "Following categories (Category notifications)" +msgstr "" + +#: ../../developer-workflow/communication-channels.rst:144 +msgid "" +"Notifications can be set for individual categories and topics. To change any " +"of these defaults, you can either go to your user preferences, or visit the " +"category page, and use the notification button 🔔 above the topic list, on " +"the top right hand corner of the category page beside the \"+ New Topic\" " +"button." +msgstr "" + +#: ../../developer-workflow/communication-channels.rst:149 +msgid "" +"Clicking on the Notification control 🔔 will show a drop-down panel with 5 " +"different options: Watching, Tracking, Watching First Post, Normal, and " +"Muted. All categories are set by default in Normal mode where you will only " +"be notified if someone mentions your @name or replies to you." +msgstr "" + +#: ../../developer-workflow/communication-channels.rst:155 +msgid "Following individual threads (Topic notifications)" +msgstr "" + +#: ../../developer-workflow/communication-channels.rst:157 +msgid "" +"To follow any individual topics or threads, you can adjust your " +"notifications through the notification button 🔔 found on the right of the " +"topic at the end of the timeline. You can also do so at the bottom of each " +"topic. Select \"Watching\" and you will be notified when there is any new " +"updated reply from that particular thread." +msgstr "" + +#: ../../developer-workflow/communication-channels.rst:164 +msgid "Customising notifications on user preference" +msgstr "" + +#: ../../developer-workflow/communication-channels.rst:166 +msgid "" +"To get a bird's eye view of all your customised notifications, you can go to " +"`Preferences of your account `_. This allows you to make adjustments according to categories, " +"users, and tags." +msgstr "" + +#: ../../developer-workflow/communication-channels.rst:171 +msgid "Enabling mailing list mode" +msgstr "" + +#: ../../developer-workflow/communication-channels.rst:173 +msgid "" +"In mailing list mode, you will receive one email per post, as happens with " +"traditional mailing lists. This is desirable if you prefer to interact via " +"email, without visiting the forum website. To activate the mailing list " +"mode, go to the `email preferences `_, check \"Enable mailing list mode\" and save changes." +msgstr "" + +#: ../../developer-workflow/communication-channels.rst:189 +msgid "Discord (private chat server)" +msgstr "" + +#: ../../developer-workflow/communication-channels.rst:191 +msgid "" +"For more real-time discussions, the core development team have a private " +"Discord server available. Core developers, Steering Council members, " +"triagers, and documentarians on the project are eligible to join the server. " +"Joining the Discord server is entirely optional, as all essential " +"communications occur on the mailing lists and Discourse forums." +msgstr "" + +#: ../../developer-workflow/communication-channels.rst:197 +msgid "" +"For core developers, a long lived multiple use invitation link for this " +"server can be found in the private core developer only section of the " +"Discourse forum." +msgstr "" + +#: ../../developer-workflow/communication-channels.rst:200 +msgid "" +"For triagers and documentarians joining the Discord server, a single use " +"invitation link should be generated and sent to them directly." +msgstr "" + +#: ../../developer-workflow/communication-channels.rst:203 +msgid "" +"When first joining the server, new users will only have access to the " +"``#welcome`` and ``#rules-and-info`` channels. To link their Discord ID with " +"their project role, core developers may update their Steering Council 🔒 " +"`voter record`_ with their Discord ID before posting in the ``#welcome`` " +"channel to request access to the rest of the server channels. Triagers, " +"documentarians, and core developers that would prefer not to add their " +"Discord ID to their Steering Council voter record may instead be vouched for " +"by an existing member of the Discord server." +msgstr "" + +#: ../../developer-workflow/communication-channels.rst:211 +msgid "" +"As a private, non-archived, forum, final decisions on design and development " +"questions should not be made on Discord. Any conclusions from Discord " +"discussions should be summarised and posted to the issue tracker, Discourse " +"forum, or mailing list (the appropriate venue for sharing conclusions will " +"depend on the specific discussion)." +msgstr "" + +#: ../../developer-workflow/communication-channels.rst:217 +msgid "" +"Note: existing Discord users may want to right click on their username in " +"the automatic Discord welcome message and choose \"Edit Server Profile\" in " +"order to set a specific `Server Nickname`_" +msgstr "" + +#: ../../developer-workflow/communication-channels.rst:226 +msgid "IRC" +msgstr "" + +#: ../../developer-workflow/communication-channels.rst:228 +msgid "" +"Some core developers still participate in the ``#python-dev`` IRC channel on " +"``irc.libera.chat``. This is not a place to ask for help with Python, but to " +"discuss issues related to Python's own development. See also the ``#python-" +"dev-notifs`` channel for bots notifications." +msgstr "" + +#: ../../developer-workflow/communication-channels.rst:235 +msgid "Blogs" +msgstr "" + +#: ../../developer-workflow/communication-channels.rst:237 +msgid "" +"Several core developers are active bloggers and discuss Python's development " +"that way. You can find their blogs (and various other developers who use " +"Python) at https://planetpython.org/." +msgstr "" + +#: ../../developer-workflow/communication-channels.rst:243 +msgid "Setting Expectations for Open Source Participation" +msgstr "" + +#: ../../developer-workflow/communication-channels.rst:245 +msgid "" +"Burn-out is common in open source due to a misunderstanding of what users, " +"contributors, and maintainers should expect from each other. Brett Cannon " +"gave a `talk `_ about this " +"topic that sets out to help everyone set reasonable expectations of each " +"other in order to make open source pleasant for everyone involved." +msgstr "" + +#: ../../developer-workflow/communication-channels.rst:251 +msgid "Additional Repositories" +msgstr "" + +#: ../../developer-workflow/communication-channels.rst:253 +msgid "" +"`Python Core Workflow`_ hosts the codebase for tools such as " +"`cherry_picker`_ and `blurb`_." +msgstr "" + +#: ../../developer-workflow/communication-channels.rst:256 +msgid "" +"Python `Performance Benchmark`_ project is intended to be an authoritative " +"source of benchmarks for all Python implementations." +msgstr "" + +#: ../../developer-workflow/development-cycle.rst:5 +msgid "Development Cycle" +msgstr "" + +#: ../../developer-workflow/development-cycle.rst:7 +msgid "" +"The responsibilities of a core developer shift based on what kind of branch " +"of Python a developer is working on and what stage the branch is in." +msgstr "" + +#: ../../developer-workflow/development-cycle.rst:10 +msgid "" +"To clarify terminology, Python uses a ``major.minor.micro`` nomenclature for " +"production-ready releases. So for Python 3.1.2 final, that is a *major " +"version* of 3, a *minor version* of 1, and a *micro version* of 2." +msgstr "" + +#: ../../developer-workflow/development-cycle.rst:14 +msgid "" +"new *major versions* are exceptional; they only come when strongly " +"incompatible changes are deemed necessary, and are planned very long in " +"advance;" +msgstr "" + +#: ../../developer-workflow/development-cycle.rst:18 +msgid "" +"new *minor versions* are feature releases; they get released annually, from " +"the current :ref:`in-development ` branch;" +msgstr "" + +#: ../../developer-workflow/development-cycle.rst:21 +msgid "" +"new *micro versions* are bugfix releases; they get released roughly every 2 " +"months; they are prepared in :ref:`maintenance ` branches." +msgstr "" + +#: ../../developer-workflow/development-cycle.rst:25 +msgid "" +"We also publish non-final versions which get an additional qualifier: :ref:" +"`alpha`, :ref:`beta`, :ref:`release candidate `. These versions are " +"aimed at testing by advanced users, not production use." +msgstr "" + +#: ../../developer-workflow/development-cycle.rst:29 +msgid "" +"Each release of Python is tagged in the source repo with a tag of the form " +"``vX.Y.ZTN``, where ``X`` is the major version, ``Y`` is the minor version, " +"``Z`` is the micro version, ``T`` is the release level (``a`` for alpha " +"releases, ``b`` for beta, ``rc`` release candidate, and *null* for final " +"releases), and ``N`` is the release serial number. Some examples of release " +"tags: ``v3.7.0a1``, ``v3.6.3``, ``v2.7.14rc1``." +msgstr "" + +#: ../../developer-workflow/development-cycle.rst:37 +msgid "Branches" +msgstr "" + +#: ../../developer-workflow/development-cycle.rst:39 +msgid "" +"There is a branch for each *feature version*, whether released or not (e.g. " +"3.7, 3.8)." +msgstr "" + +#: ../../developer-workflow/development-cycle.rst:46 +msgid "In-development (main) branch" +msgstr "" + +#: ../../developer-workflow/development-cycle.rst:48 +msgid "" +"The ``main`` branch is the branch for the next feature release; it is under " +"active development for all kinds of changes: new features, semantic changes, " +"performance improvements, bug fixes." +msgstr "" + +#: ../../developer-workflow/development-cycle.rst:52 +msgid "" +"At some point during the life-cycle of a release, a new :ref:`maintenance " +"branch ` is created to host all bug fixing activity for further " +"micro versions in a feature version (3.8.1, 3.8.2, etc.)." +msgstr "" + +#: ../../developer-workflow/development-cycle.rst:56 +msgid "" +"For versions 3.4 and before, this was conventionally done when the final " +"release was cut (for example, 3.4.0 final)." +msgstr "" + +#: ../../developer-workflow/development-cycle.rst:59 +msgid "" +"Starting with the 3.5 release, we create the release maintenance branch (e." +"g. 3.5) at the time we enter beta (3.5.0 beta 1). This allows feature " +"development for the release 3.n+1 to occur within the main branch alongside " +"the beta and release candidate stabilization periods for release 3.n." +msgstr "" + +#: ../../developer-workflow/development-cycle.rst:68 +msgid "Maintenance branches" +msgstr "" + +#: ../../developer-workflow/development-cycle.rst:70 +msgid "" +"A branch for a previous feature release, currently being maintained for bug " +"fixes, or for the next feature release in its :ref:`beta ` or :ref:" +"`release candidate ` stages. There is usually either one or two " +"maintenance branches at any given time for Python 3.x. After the final " +"release of a new minor version (3.x.0), releases produced from a maintenance " +"branch are called **bugfix** or **maintenance** releases; the terms are used " +"interchangeably. These releases have a **micro version** number greater than " +"zero." +msgstr "" + +#: ../../developer-workflow/development-cycle.rst:79 +msgid "" +"The only changes allowed to occur in a maintenance branch without debate are " +"bug fixes. Also, a general rule for maintenance branches is that " +"compatibility must not be broken at any point between sibling micro releases " +"(3.5.1, 3.5.2, etc.). For both rules, only rare exceptions are accepted and " +"**must** be discussed first." +msgstr "" + +#: ../../developer-workflow/development-cycle.rst:85 +msgid "" +"A new maintenance branch is normally created when the next feature release " +"cycle reaches feature freeze, i.e. at its first beta pre-release. From that " +"point on, changes intended for remaining pre-releases, the final release (3." +"x.0), and subsequent bugfix releases are merged to that maintenance branch." +msgstr "" + +#: ../../developer-workflow/development-cycle.rst:91 +msgid "" +"Sometime following the final release (3.x.0), the maintenance branch for the " +"previous minor version will go into :ref:`security mode `, " +"usually after at least one more bugfix release at the discretion of the " +"release manager. For example, the 3.4 maintenance branch was put into :ref:" +"`security mode ` after the 3.4.4 bugfix release which followed " +"the release of 3.5.1." +msgstr "" + +#: ../../developer-workflow/development-cycle.rst:101 +msgid "Security branches" +msgstr "" + +#: ../../developer-workflow/development-cycle.rst:103 +msgid "" +"A branch less than 5 years old but no longer in bugfix mode is a security " +"branch." +msgstr "" + +#: ../../developer-workflow/development-cycle.rst:106 +msgid "" +"The only changes made to a security branch are those fixing issues " +"exploitable by attackers such as crashes, privilege escalation and, " +"optionally, other issues such as denial of service attacks. Any other " +"changes are **not** considered a security risk and thus not backported to a " +"security branch. You should also consider fixing hard-failing tests in open " +"security branches since it is important to be able to run the tests " +"successfully before releasing." +msgstr "" + +#: ../../developer-workflow/development-cycle.rst:113 +msgid "" +"Commits to security branches are to be coordinated with the release manager " +"for the corresponding feature version, as listed in the :ref:`branchstatus`. " +"Merging of pull requests to security branches is restricted to release " +"managers. Any release made from a security branch is source-only and done " +"only when actual security patches have been applied to the branch. These " +"releases have a **micro version** number greater than the last **bugfix** " +"release." +msgstr "" + +#: ../../developer-workflow/development-cycle.rst:123 +msgid "End-of-life branches" +msgstr "" + +#: ../../developer-workflow/development-cycle.rst:125 +msgid "" +"The code base for a release cycle which has reached end-of-life status is " +"frozen and no longer has a branch in the repo. The final state of the end-" +"of-lifed branch is recorded as a tag with the same name as the former " +"branch, e.g. ``3.3`` or ``2.6``." +msgstr "" + +#: ../../developer-workflow/development-cycle.rst:130 +msgid "" +"The :ref:`versions` page contains list of active and end-of-life branches." +msgstr "" + +#: ../../developer-workflow/development-cycle.rst:132 +msgid "" +"The latest release for each Python version can be found on the `download " +"page `_." +msgstr "" + +#: ../../developer-workflow/development-cycle.rst:138 +msgid "Stages" +msgstr "" + +#: ../../developer-workflow/development-cycle.rst:140 +msgid "" +"Based on what stage the :ref:`in-development ` version of " +"Python is in, the responsibilities of a core developer change in regards to " +"commits to the :abbr:`VCS (version control system)`." +msgstr "" + +#: ../../developer-workflow/development-cycle.rst:146 +msgid "Pre-alpha" +msgstr "" + +#: ../../developer-workflow/development-cycle.rst:148 +msgid "" +"The branch is in this stage when no official release has been done since the " +"latest final release. There are no special restrictions placed on commits, " +"although the usual advice applies (getting patches reviewed, avoiding " +"breaking the buildbots)." +msgstr "" + +#: ../../developer-workflow/development-cycle.rst:156 +msgid "Alpha" +msgstr "" + +#: ../../developer-workflow/development-cycle.rst:158 +msgid "" +"Alpha releases typically serve as a reminder to core developers that they " +"need to start getting in changes that change semantics or add something to " +"Python as such things should not be added during a Beta_. Otherwise no new " +"restrictions are in place while in alpha." +msgstr "" + +#: ../../developer-workflow/development-cycle.rst:166 +msgid "Beta" +msgstr "" + +#: ../../developer-workflow/development-cycle.rst:168 +msgid "" +"After a first beta release is published, no new features are accepted. Only " +"bug fixes and improvements to documentation and tests can now be committed. " +"This is when core developers should concentrate on the task of fixing " +"regressions and other new issues filed by users who have downloaded the " +"alpha and beta releases." +msgstr "" + +#: ../../developer-workflow/development-cycle.rst:174 +msgid "" +"Being in beta can be viewed much like being in RC_ but without the extra " +"overhead of needing commit reviews." +msgstr "" + +#: ../../developer-workflow/development-cycle.rst:177 +msgid "" +"Please see the note in the `In-development (main) branch`_ section above for " +"new information about the creation of the 3.5 maintenance branch during beta." +msgstr "" + +#: ../../developer-workflow/development-cycle.rst:184 +msgid "Release Candidate (RC)" +msgstr "" + +#: ../../developer-workflow/development-cycle.rst:186 +msgid "" +"A branch preparing for an RC release can only have bugfixes applied that " +"have been reviewed by other core developers. Generally, these issues must " +"be severe enough (e.g. crashes) that they deserve fixing before the final " +"release. All other issues should be deferred to the next development cycle, " +"since stability is the strongest concern at this point." +msgstr "" + +#: ../../developer-workflow/development-cycle.rst:192 +msgid "" +"While the goal is to have no code changes between a RC and a final release, " +"there may be a need for final documentation or test fixes. Any such proposed " +"changes should be discussed first with the release manager." +msgstr "" + +#: ../../developer-workflow/development-cycle.rst:196 +msgid "" +"You **cannot** skip the peer review during an RC, no matter how small! Even " +"if it is a simple copy-and-paste change, **everything** requires peer review " +"from a core developer." +msgstr "" + +#: ../../developer-workflow/development-cycle.rst:203 +msgid "Final" +msgstr "" + +#: ../../developer-workflow/development-cycle.rst:205 +msgid "" +"When a final release is being cut, only the release manager (RM) can make " +"changes to the branch. After the final release is published, the full :ref:" +"`development cycle ` starts again for the next minor version." +msgstr "" + +#: ../../developer-workflow/development-cycle.rst:211 +msgid "Repository Administration" +msgstr "" + +#: ../../developer-workflow/development-cycle.rst:213 +msgid "" +"The source code is currently hosted on `GitHub `_ in the `Python organization `_." +msgstr "" + +#: ../../developer-workflow/development-cycle.rst:217 +msgid "Organization Repository Policy" +msgstr "" + +#: ../../developer-workflow/development-cycle.rst:219 +msgid "" +"Within the `Python organization `_, repositories " +"are expected to fall within these general categories:" +msgstr "" + +#: ../../developer-workflow/development-cycle.rst:221 +msgid "" +"The reference implementation of Python and related repositories (i.e. " +"`CPython `_)" +msgstr "" + +#: ../../developer-workflow/development-cycle.rst:222 +msgid "" +"Reference implementations of PEPs (e.g. `mypy `_)" +msgstr "" + +#: ../../developer-workflow/development-cycle.rst:223 +msgid "" +"Tooling and support around CPython and the language (e.g. `python.org " +"repository `_)" +msgstr "" + +#: ../../developer-workflow/development-cycle.rst:224 +msgid "" +"PSF-related repositories (e.g. the `Code of Conduct `_)" +msgstr "" + +#: ../../developer-workflow/development-cycle.rst:225 +msgid "" +"PSF Infrastructure repositories (e.g. the `PSF Infrastructure Salt " +"configurations `_)" +msgstr "" + +#: ../../developer-workflow/development-cycle.rst:227 +msgid "" +"For any repository which does not explicitly and clearly fall under one of " +"these categories, permission should be sought from the `Python steering " +"council `_." +msgstr "" + +#: ../../developer-workflow/development-cycle.rst:231 +msgid "Organization Owner Policy" +msgstr "" + +#: ../../developer-workflow/development-cycle.rst:233 +msgid "" +"The GitHub Organization Owner role allows for full management of all aspects " +"of the Python organization. Allowing for visibility and management of all " +"aspects at all levels including organization membership, team membership, " +"access control, and merge privileges on all repositories. For full details " +"of the permission levels see `GitHub's documentation on Organization " +"permission levels `_. This role is paramount to the security of the " +"Python Language, Community, and Infrastructure." +msgstr "" + +#: ../../developer-workflow/development-cycle.rst:243 +msgid "" +"The Executive Director of the Python Software Foundation delegates authority " +"on GitHub Organization Owner Status to Ee Durbin - Python Software " +"Foundation Director of Infrastructure. Common reasons for this role are: " +"Infrastructure Staff Membership, Python Software Foundation General Counsel, " +"and Python Software Foundation Staff as fallback." +msgstr "" + +#: ../../developer-workflow/development-cycle.rst:249 +#: ../../developer-workflow/development-cycle.rst:298 +msgid "" +"Inactive or unreachable members may be removed with or without notice. " +"Members who no longer necessitate this level of access will be removed with " +"notice." +msgstr "" + +#: ../../developer-workflow/development-cycle.rst:252 +msgid "" +"Multi-Factor Authentication must be enabled by the user in order to remain " +"an Owner of the Python Organization." +msgstr "" + +#: ../../developer-workflow/development-cycle.rst:258 +msgid "Current Owners" +msgstr "" + +#: ../../developer-workflow/development-cycle.rst:261 +#: ../../developer-workflow/development-cycle.rst:308 +msgid "Role" +msgstr "" + +#: ../../developer-workflow/development-cycle.rst:261 +#: ../../developer-workflow/development-cycle.rst:308 +msgid "GitHub Username" +msgstr "" + +#: ../../developer-workflow/development-cycle.rst:263 +#: ../../developer-workflow/development-cycle.rst:265 +#: ../../developer-workflow/development-cycle.rst:267 +msgid "Infrastructure Staff" +msgstr "" + +#: ../../developer-workflow/development-cycle.rst:265 +msgid "Noah Kantrowitz" +msgstr "" + +#: ../../developer-workflow/development-cycle.rst:265 +msgid "coderanger" +msgstr "" + +#: ../../developer-workflow/development-cycle.rst:269 +msgid "Ee Durbin" +msgstr "" + +#: ../../developer-workflow/development-cycle.rst:269 +msgid "PSF Director of Infrastructure" +msgstr "" + +#: ../../developer-workflow/development-cycle.rst:269 +msgid "ewdurbin" +msgstr "" + +#: ../../developer-workflow/development-cycle.rst:271 +msgid "Van Lindberg" +msgstr "" + +#: ../../developer-workflow/development-cycle.rst:271 +msgid "PSF General Counsel" +msgstr "" + +#: ../../developer-workflow/development-cycle.rst:271 +msgid "VanL" +msgstr "" + +#: ../../developer-workflow/development-cycle.rst:273 +msgid "CPython Developer in Residence" +msgstr "" + +#: ../../developer-workflow/development-cycle.rst:276 +msgid "" +"Certain actions (blocking spam accounts, inviting new users, adjusting " +"organization-level settings) can only `be performed`_ by owners of the " +"Python organization on GitHub. The ``@python/organization-owners`` team can " +"be mentioned to request assistance from an organization owner." +msgstr "" + +#: ../../developer-workflow/development-cycle.rst:284 +msgid "Repository Administrator Role Policy" +msgstr "" + +#: ../../developer-workflow/development-cycle.rst:286 +msgid "" +"The Administrator role on the repository allows for managing all aspects " +"including collaborators, access control, integrations, webhooks, and branch " +"protection. For full details of the permission levels see `GitHub's " +"documentation on repository permission levels `_. Common reasons for " +"this role are: maintenance of Core Developer Workflow tooling, Release " +"Managers for all :ref:`in-development `, :ref:`maintenance " +"`, and :ref:`security mode ` releases, and " +"additional Python Core Developers as necessary for redundancy. Occasional " +"temporary administrator access is acceptable as necessary for Core Developer " +"workflow projects." +msgstr "" + +#: ../../developer-workflow/development-cycle.rst:301 +msgid "" +"Multi-Factor Authentication must be enabled by the user in order to remain " +"an Administrator of the repository." +msgstr "" + +#: ../../developer-workflow/development-cycle.rst:305 +msgid "Current Administrators" +msgstr "" + +#: ../../developer-workflow/development-cycle.rst:310 +msgid "Python 3.10 and 3.11 Release Manager, Maintainer of buildbot.python.org" +msgstr "" + +#: ../../developer-workflow/development-cycle.rst:313 +msgid "" +"Python 3.8 and 3.9 Release Manager, PSF CPython Developer in Residence " +"2021-2022" +msgstr "" + +#: ../../developer-workflow/development-cycle.rst:316 +msgid "Python 3.6 and 3.7 Release Manager" +msgstr "" + +#: ../../developer-workflow/development-cycle.rst:318 +msgid "Retired Release Manager (for Python 3.4 and 3.5)" +msgstr "" + +#: ../../developer-workflow/development-cycle.rst:320 +msgid "Berker Peksag" +msgstr "" + +#: ../../developer-workflow/development-cycle.rst:320 +msgid "Maintainer of bpo-linkify and cpython-emailer-webhook" +msgstr "" + +#: ../../developer-workflow/development-cycle.rst:324 +msgid "Maintainer of bugs.python.org GitHub webhook integration" +msgstr "" + +#: ../../developer-workflow/development-cycle.rst:326 +msgid "Mariatta Wijaya" +msgstr "" + +#: ../../developer-workflow/development-cycle.rst:326 +msgid "Maintainer of bedevere, blurb_it and miss-islington" +msgstr "" + +#: ../../developer-workflow/development-cycle.rst:330 +msgid "Repository Release Manager Role Policy" +msgstr "" + +#: ../../developer-workflow/development-cycle.rst:332 +msgid "" +"Release Managers for :ref:`in-development `, :ref:`maintenance " +"`, and :ref:`security mode ` Python releases are " +"granted Administrator privileges on the repository. Once a release branch " +"has entered :ref:`end-of-life `, the Release Manager for that " +"branch is removed as an Administrator and granted sole privileges (out side " +"of repository administrators) to merge changes to that branch." +msgstr "" + +#: ../../developer-workflow/development-cycle.rst:339 +msgid "" +"Multi-Factor Authentication must be enabled by the user in order to retain " +"access as a Release Manager of the branch." +msgstr "" + +#: ../../developer-workflow/extension-modules.rst:6 +msgid "Standard Library Extension Modules" +msgstr "" + +#: ../../developer-workflow/extension-modules.rst:8 +msgid "" +"In this section, we could explain how to write a CPython extension with the " +"C language, but the topic can take a complete book." +msgstr "" + +#: ../../developer-workflow/extension-modules.rst:10 +msgid "" +"For this reason, we prefer to give you some links where you can read a very " +"good documentation." +msgstr "" + +#: ../../developer-workflow/extension-modules.rst:12 +msgid "Read the following references:" +msgstr "" + +#: ../../developer-workflow/extension-modules.rst:14 +msgid "https://docs.python.org/dev/c-api/" +msgstr "" + +#: ../../developer-workflow/extension-modules.rst:15 +msgid "https://docs.python.org/dev/extending/" +msgstr "" + +#: ../../developer-workflow/extension-modules.rst:16 +msgid ":pep:`399`" +msgstr "" + +#: ../../developer-workflow/extension-modules.rst:17 +msgid "https://pythonextensionpatterns.readthedocs.io/en/latest/" +msgstr "" + +#: ../../developer-workflow/grammar.rst:5 +msgid "Changing CPython's Grammar" +msgstr "" + +#: ../../developer-workflow/grammar.rst:8 ../../internals/compiler.rst:10 +#: ../../internals/garbage-collector.rst:14 ../../internals/parser.rst:12 +msgid "Abstract" +msgstr "" + +#: ../../developer-workflow/grammar.rst:10 +msgid "" +"There's more to changing Python's grammar than editing :cpy-file:`Grammar/" +"python.gram`. Here's a checklist." +msgstr "" + +#: ../../developer-workflow/grammar.rst:14 +msgid "" +"These instructions are for Python 3.9 and beyond. Earlier versions use a " +"different parser technology. You probably shouldn't try to change the " +"grammar of earlier Python versions, but if you really want to, use GitHub to " +"track down the earlier version of this file in the devguide." +msgstr "" + +#: ../../developer-workflow/grammar.rst:20 +msgid "" +"For more information on how to use the new parser, check the :ref:`section " +"on how to use CPython's parser `." +msgstr "" + +#: ../../developer-workflow/grammar.rst:24 +msgid "Checklist" +msgstr "" + +#: ../../developer-workflow/grammar.rst:26 +msgid "" +"Note: sometimes things mysteriously don't work. Before giving up, try " +"``make clean``." +msgstr "" + +#: ../../developer-workflow/grammar.rst:28 +msgid "" +":cpy-file:`Grammar/python.gram`: The grammar, with actions that build AST " +"nodes. After changing it, run ``make regen-pegen`` (or ``build.bat --regen`` " +"on Windows), to regenerate :cpy-file:`Parser/parser.c`. (This runs Python's " +"parser generator, ``Tools/peg_generator``)." +msgstr "" + +#: ../../developer-workflow/grammar.rst:33 +msgid "" +":cpy-file:`Grammar/Tokens` is a place for adding new token types. After " +"changing it, run ``make regen-token`` to regenerate :cpy-file:`Include/token." +"h`, :cpy-file:`Parser/token.c`, :cpy-file:`Lib/token.py` and :cpy-file:`Doc/" +"library/token-list.inc`. If you change both ``python.gram`` and ``Tokens``, " +"run ``make regen-token`` before ``make regen-pegen``. On Windows, ``build." +"bat --regen`` will regenerate both at the same time." +msgstr "" + +#: ../../developer-workflow/grammar.rst:40 +msgid "" +":cpy-file:`Parser/Python.asdl` may need changes to match the grammar. Then " +"run ``make regen-ast`` to regenerate :cpy-file:`Include/Python-ast.h` and :" +"cpy-file:`Python/Python-ast.c`." +msgstr "" + +#: ../../developer-workflow/grammar.rst:44 +msgid "" +":cpy-file:`Parser/tokenizer.c` contains the tokenization code. This is where " +"you would add a new type of comment or string literal, for example." +msgstr "" + +#: ../../developer-workflow/grammar.rst:47 +msgid "" +":cpy-file:`Python/ast.c` will need changes to validate AST objects involved " +"with the grammar change." +msgstr "" + +#: ../../developer-workflow/grammar.rst:50 +msgid "" +":cpy-file:`Python/ast_unparse.c` will need changes to unparse AST involved " +"with the grammar change (\"unparsing\" is used to turn annotations into " +"strings per :pep:`563`)." +msgstr "" + +#: ../../developer-workflow/grammar.rst:54 +msgid "The :ref:`compiler` has its own page." +msgstr "" + +#: ../../developer-workflow/grammar.rst:56 +msgid "" +"``_Unparser`` in the :cpy-file:`Lib/ast.py` file may need changes to " +"accommodate any modifications in the AST nodes." +msgstr "" + +#: ../../developer-workflow/grammar.rst:59 +msgid "" +":cpy-file:`Doc/library/ast.rst` may need to be updated to reflect changes to " +"AST nodes." +msgstr "" + +#: ../../developer-workflow/grammar.rst:62 +msgid "Add some usage of your new syntax to ``test_grammar.py``." +msgstr "" + +#: ../../developer-workflow/grammar.rst:64 +msgid "Certain changes may require tweaks to the library module :mod:`pyclbr`." +msgstr "" + +#: ../../developer-workflow/grammar.rst:66 +msgid "" +":cpy-file:`Lib/tokenize.py` needs changes to match changes to the tokenizer." +msgstr "" + +#: ../../developer-workflow/grammar.rst:68 +msgid "" +"Documentation must be written! Specifically, one or more of the pages in :" +"cpy-file:`Doc/reference/` will need to be updated." +msgstr "" + +#: ../../developer-workflow/index.rst:3 +msgid "Development Workflow" +msgstr "Fluxo de trabalho de desenvolvimento" + +#: ../../developer-workflow/lang-changes.rst:5 +msgid "Changing the Python Language" +msgstr "" + +#: ../../developer-workflow/lang-changes.rst:6 +msgid "" +"On occasion people come up with an idea on how to change or improve Python " +"as a programming language. This document is meant to explain exactly what " +"changes have a reasonable chance of being considered and what the process is " +"to propose changes to the language." +msgstr "" + +#: ../../developer-workflow/lang-changes.rst:13 +msgid "What Qualifies" +msgstr "" + +#: ../../developer-workflow/lang-changes.rst:14 +msgid "" +"First and foremost, it must be understood that changes to the Python " +"programming language are difficult to make. When the language changes, " +"**every** Python programmer already in existence and all Python programmers " +"to come will end up eventually learning about the change you want to " +"propose. Books will need updating, code will be changed, and a new way to do " +"things will need to be learned. Changes to the Python programming language " +"are never taken lightly." +msgstr "" + +#: ../../developer-workflow/lang-changes.rst:22 +msgid "" +"Because of the seriousness that language changes carry, any change must be " +"beneficial to a large proportion of Python users. If the change only " +"benefits a small percentage of Python developers then the change will not be " +"made. A good way to see if your idea would work for a large portion of the " +"Python community is to ask in the `Ideas Discourse category`_. You can also " +"go through Python's stdlib and find examples of code which would benefit " +"from your proposed change (which helps communicate the usefulness of your " +"change to others). For further guidance, see :ref:`suggesting-changes`." +msgstr "" + +#: ../../developer-workflow/lang-changes.rst:31 +msgid "" +"Your proposed change also needs to be *Pythonic*. While only the Steering " +"Council can truly classify something as Pythonic, you can read the :pep:`Zen " +"of Python <20>` for guidance." +msgstr "" + +#: ../../developer-workflow/lang-changes.rst:42 +msgid "Suggesting new features and language changes" +msgstr "" + +#: ../../developer-workflow/lang-changes.rst:44 +msgid "" +"The `Ideas Discourse category`_ is specifically intended for discussion of " +"new features and language changes. Please don't be disappointed if your idea " +"isn't met with universal approval: as the :pep:`long list of Withdrawn and " +"Rejected PEPs <0#abandoned-withdrawn-and-rejected-peps>` in the :pep:`PEP " +"Index <0>` attests, and as befits a reasonably mature programming language, " +"getting significant changes into Python isn't a simple task." +msgstr "" + +#: ../../developer-workflow/lang-changes.rst:53 +msgid "" +"If the idea is reasonable, someone will suggest posting it as a feature " +"request on the `issue tracker`_, or, for larger changes, writing it up as " +"PEP following the :ref:`lang-changes-pep-process`." +msgstr "" + +#: ../../developer-workflow/lang-changes.rst:57 +msgid "" +"Sometimes core developers will differ in opinion, or merely be collectively " +"unconvinced. When there isn't an obvious victor, then the `Status Quo Wins a " +"Stalemate`_." +msgstr "" + +#: ../../developer-workflow/lang-changes.rst:61 +msgid "" +"For some examples on language changes that were accepted, see `Justifying " +"Python Language Changes`_." +msgstr "" + +#: ../../developer-workflow/lang-changes.rst:70 +msgid "PEP Process" +msgstr "" + +#: ../../developer-workflow/lang-changes.rst:72 +msgid "" +"Once you are certain you have a language change proposal which will appeal " +"to the general Python community, you can begin the :abbr:`PEP (Python " +"enhancement proposal)` process to officially propose the change. See :pep:" +"`1` for information on PEPs and the PEP process, and the :pep:`PEP Index " +"<0>` for examples." +msgstr "" + +#: ../../developer-workflow/lang-changes.rst:79 +msgid "" +"If the PEP is accepted, then your proposed language change will be " +"introduced in the next release of Python. Otherwise, your PEP will be " +"recorded as rejected along with an explanation, to inform others who may " +"propose a similar language change in the future." +msgstr "" + +#: ../../developer-workflow/porting.rst:5 +msgid "Porting to a New Platform" +msgstr "" + +#: ../../developer-workflow/porting.rst:7 +msgid "" +"The first step is to familiarize yourself with the development toolchain on " +"the platform in question, notably the C compiler. Make sure you can compile " +"and run a hello-world program using the target compiler." +msgstr "" + +#: ../../developer-workflow/porting.rst:11 +msgid "" +"Next, learn how to compile and run the Python interpreter on a platform to " +"which it has already been ported; preferably Unix, but Windows will do, too. " +"The build process for Python, in particular the ``Makefile`` in the source " +"distribution, will give you a hint on which files to compile for Python. " +"Not all source files are relevant: some are platform-specific, and others " +"are only used in emergencies (e.g. ``getopt.c``)." +msgstr "" + +#: ../../developer-workflow/porting.rst:18 +msgid "" +"It is not recommended to start porting Python without at least a medium-" +"level understanding of your target platform; i.e. how it is generally used, " +"how to write platform-specific apps, etc. Also, some Python knowledge is " +"required, or you will be unable to verify that your port is working " +"correctly." +msgstr "" + +#: ../../developer-workflow/porting.rst:23 +msgid "" +"You will need a ``pyconfig.h`` file tailored for your platform. You can " +"start with ``pyconfig.h.in``, read the comments, and turn on definitions " +"that apply to your platform. Also, you will need a ``config.c`` file, which " +"lists the built-in modules you support. Again, starting with ``Modules/" +"config.c.in`` is recommended." +msgstr "" + +#: ../../developer-workflow/porting.rst:29 +msgid "" +"Finally, you will run into some things that are not supported on your target " +"platform. Forget about the ``posix`` module in the beginning. You can " +"simply comment it out of the ``config.c`` file." +msgstr "" + +#: ../../developer-workflow/porting.rst:33 +msgid "" +"Keep working on it until you get a ``>>>`` prompt. You may have to disable " +"the importing of ``site.py`` by passing the ``-S`` option. When you have a " +"prompt, bang on it until it executes very simple Python statements." +msgstr "" + +#: ../../developer-workflow/porting.rst:37 +msgid "" +"At some point you will want to use the ``os`` module; this is the time to " +"start thinking about what to do with the ``posix`` module. It is okay to " +"simply comment out functions in the ``posix`` module that cause problems; " +"the remaining ones will be quite useful." +msgstr "" + +#: ../../developer-workflow/porting.rst:42 +msgid "" +"Before you are done, it is highly recommended to run the Python regression " +"test suite, as described in :ref:`runtests`." +msgstr "" + +#: ../../developer-workflow/stdlib.rst:5 +msgid "Adding to the Stdlib" +msgstr "" + +#: ../../developer-workflow/stdlib.rst:7 +msgid "" +"While the stdlib contains a great amount of useful code, sometimes you want " +"more than is provided. This document is meant to explain how you can get " +"either a new addition to a pre-existing module in the stdlib or add an " +"entirely new module." +msgstr "" + +#: ../../developer-workflow/stdlib.rst:12 +msgid "" +"Changes to pre-existing code is not covered as that is considered a bugfix " +"and thus is treated as a bug that should be filed on the `issue tracker`_." +msgstr "" + +#: ../../developer-workflow/stdlib.rst:17 +msgid "Adding to a pre-existing module" +msgstr "" + +#: ../../developer-workflow/stdlib.rst:19 +msgid "" +"If you have found that a function, method, or class is useful and you " +"believe it would be useful to the general Python community, there are some " +"steps to go through in order to see it added to the stdlib." +msgstr "" + +#: ../../developer-workflow/stdlib.rst:23 +msgid "" +"First, you should gauge the usefulness of the code, which is typically done " +"by sharing the code publicly. This is not a required step, but it is " +"suggested. You have a several options for this:" +msgstr "" + +#: ../../developer-workflow/stdlib.rst:28 +msgid "" +"Search the `issue tracker`_ for discussion related to the proposed addition. " +"This may turn up an issue that explains why the suggestion wasn't accepted." +msgstr "" + +#: ../../developer-workflow/stdlib.rst:30 +msgid "" +"Open a new thread in the `Ideas Discourse category`_ to gather feedback " +"directly from the Python core developers and community." +msgstr "" + +#: ../../developer-workflow/stdlib.rst:32 +msgid "" +"Write a blog post about the code, which may also help gather useful feedback." +msgstr "" + +#: ../../developer-workflow/stdlib.rst:33 +msgid "" +"Post it to the `Python Cookbook`_. Based on feedback and reviews of the " +"recipe, you can see if others find the functionality as useful as you do." +msgstr "" + +#: ../../developer-workflow/stdlib.rst:37 +msgid "" +"If you have found general acceptance and usefulness for your code from " +"people, you can open an issue on the `issue tracker`_ with the code attached " +"as a :ref:`pull request `. If possible, also submit a :ref:" +"`contributor agreement `." +msgstr "" + +#: ../../developer-workflow/stdlib.rst:42 +msgid "" +"If a core developer decides that your code would be useful to the general " +"Python community, they will then commit your code. If your code is not " +"picked up by a core developer and committed then please do not take this " +"personally. Through your public sharing of your code in order to gauge " +"community support for it you at least can know that others will come across " +"it who may find it useful." +msgstr "" + +#: ../../developer-workflow/stdlib.rst:54 +msgid "Adding a new module" +msgstr "" + +#: ../../developer-workflow/stdlib.rst:55 +msgid "" +"It must be stated upfront that getting a new module into the stdlib is very " +"difficult. Adding any significant amount of code to the stdlib increases the " +"burden placed upon core developers. It also means that the module somewhat " +"becomes \"sanctioned\" by the core developers as a good way to do something, " +"typically leading to the rest of the Python community to using the new " +"module over other available solutions. All of this means that additions to " +"the stdlib are not taken lightly." +msgstr "" + +#: ../../developer-workflow/stdlib.rst:65 +msgid "Acceptable Types of Modules" +msgstr "" + +#: ../../developer-workflow/stdlib.rst:66 +msgid "" +"Typically two types of modules get added to the stdlib. One type is a module " +"which implements something that is difficult to get right. A good example of " +"this is the :py:mod:`multiprocessing` package. Working out the various OS " +"issues, working through concurrency issues, etc. are all very difficult to " +"get right." +msgstr "" + +#: ../../developer-workflow/stdlib.rst:72 +msgid "" +"The second type of module is one that implements something that people re-" +"implement constantly. The :py:mod:`itertools` module is a good example of " +"this type as its constituent parts are not necessarily complex, but are used " +"regularly in a wide range of programs and can be a little tricky to get " +"right. Modules that parse widely used data formats also fall under this type " +"of module that the stdlib consists of." +msgstr "" + +#: ../../developer-workflow/stdlib.rst:79 +msgid "" +"While a new stdlib module does not need to appeal to all users of Python, it " +"should be something that a large portion of the community will find useful. " +"This makes sure that the developer burden placed upon core developers is " +"worth it." +msgstr "" + +#: ../../developer-workflow/stdlib.rst:86 +msgid "Requirements" +msgstr "" + +#: ../../developer-workflow/stdlib.rst:87 +msgid "" +"In order for a module to even be considered for inclusion into the stdlib, a " +"couple of requirements must be met." +msgstr "" + +#: ../../developer-workflow/stdlib.rst:90 +msgid "" +"The most basic is that the code must meet :ref:`standard patch requirements " +"`. For code that has been developed outside the stdlib typically this " +"means making sure the coding style guides are followed and that the proper " +"tests have been written." +msgstr "" + +#: ../../developer-workflow/stdlib.rst:95 +msgid "" +"The module needs to have been out in the community for at least a year. " +"Because of Python's conservative nature when it comes to backwards-" +"compatibility, when a module is added to the stdlib its API becomes frozen. " +"This means that a module should only enter the stdlib when it is mature and " +"gone through its \"growing pains\"." +msgstr "" + +#: ../../developer-workflow/stdlib.rst:101 +msgid "" +"The module needs to be considered best-of-breed. When something is included " +"in the stdlib it tends to be chosen first for products over other third-" +"party solutions. By virtue of having been available to the public for at " +"least a year, a module needs to have established itself as (one of) the top " +"choices by the community for solving the problem the module is intended for." +msgstr "" + +#: ../../developer-workflow/stdlib.rst:107 +msgid "" +"The development of the module must move into Python's infrastructure (i.e., " +"the module is no longer directly maintained outside of Python). This " +"prevents a divergence between the code that is included in the stdlib and " +"that which is released outside the stdlib (typically done to provide the " +"module to older versions of Python). It also removes the burden of forcing " +"core developers to have to redirect bug reports or patches to an external " +"issue tracker and :abbr:`VCS (version control system)`." +msgstr "" + +#: ../../developer-workflow/stdlib.rst:115 +msgid "" +"Someone involved with the development of the module must promise to help " +"maintain the module in the stdlib for two years. This not only helps out " +"other core developers by alleviating workload from bug reports that arrive " +"from the first Python release containing the module, but also helps to make " +"sure that the overall design of the module continues to be uniform." +msgstr "" + +#: ../../developer-workflow/stdlib.rst:124 +msgid "Proposal Process" +msgstr "" + +#: ../../developer-workflow/stdlib.rst:126 +msgid "" +"If the module you want to propose adding to the stdlib meets the " +"requirements, you may propose its inclusion by following the :abbr:`PEP " +"(Python Enhancement Proposal)` process. See :pep:`1` for details, and the :" +"pep:`PEP index <0>` for previously-accepted PEPs that have proposed a module " +"for inclusion." +msgstr "" + +#: ../../developer-workflow/stdlib.rst:133 +msgid "" +"If the PEP is accepted, then the module will be added to the stdlib once the " +"authors of the module sign :ref:`contributor agreements " +"`." +msgstr "" + +#: ../../documentation/devguide.rst:5 +msgid "Helping with the Developer's Guide" +msgstr "Ajudando com o guia do desenvolvedor" + +#: ../../documentation/devguide.rst:9 +msgid "" +"The Developer's Guide (what you're reading now) uses the same process as the " +"main Python documentation, except for some small differences. The source " +"lives in a `separate repository`_ and bug reports should be submitted to the " +"`devguide GitHub tracker`_." +msgstr "" +"O guia do desenvolvedor (o que você está lendo agora) usa o mesmo processo " +"da documentação principal do Python, exceto por algumas pequenas diferenças. " +"A fonte reside em um `repositório separado`_ e relatórios de bugs devem ser " +"enviados para o `rastreador do GitHub do devguide`_." + +#: ../../documentation/devguide.rst:14 +msgid "" +"Our devguide workflow uses continuous integration and deployment so changes " +"to the devguide are normally published when the pull request is merged. " +"Changes to CPython documentation follow the workflow of a CPython release " +"and are published in the release." +msgstr "" +"Nosso fluxo de trabalho no devguide usa integração e implantação contínuas, " +"de modo que as alterações no devguide são normalmente publicadas quando a " +"pull request é mesclada. As alterações na documentação do CPython seguem o " +"fluxo de trabalho de uma versão do CPython e são publicadas na versão." + +#: ../../documentation/devguide.rst:21 +msgid "Developer's Guide workflow" +msgstr "Fluxo de trabalho do guia do desenvolvedor" + +#: ../../documentation/devguide.rst:23 +msgid "" +"To submit a :ref:`pull request `, you can fork the `devguide " +"repo`_ to your GitHub account and clone it using::" +msgstr "" +"Para enviar uma :ref:`pull request `, você pode fazer um fork " +"do `repositório do devguide`_ para sua conta GitHub e cloná-lo usando::" + +#: ../../documentation/devguide.rst:28 +msgid "" +"For your PR to be accepted, you will also need to sign the :ref:`contributor " +"agreement `." +msgstr "" +"Para que seu PR seja aceito, você também precisará assinar o :ref:`acordo de " +"contribuidor `." + +#: ../../documentation/devguide.rst:31 +msgid "" +"To build the devguide, some additional dependencies are required (most " +"importantly, `Sphinx`_), and the standard way to install dependencies in " +"Python projects is to create a virtualenv, and then install dependencies " +"from a ``requirements.txt`` file. For your convenience, this is all " +"*automated for you*. To build the devguide on a Unix-like system use::" +msgstr "" +"Para compilar o devguide, algumas dependências adicionais são necessárias " +"(mais importante, `Sphinx`_), e a maneira padrão de instalar dependências em " +"projetos Python é criar um virtualenv e, em seguida, instalar dependências " +"de um arquivo ``requirements.txt`` . Para sua conveniência, tudo isso é " +"*automatizado para você*. Para compilar o devguide em um sistema semelhante " +"ao Unix, use::" + +#: ../../documentation/devguide.rst:39 +msgid "in the checkout directory. On Windows use:" +msgstr "no diretório de checkout. No Windows use:" + +#: ../../documentation/devguide.rst:45 +msgid "" +"You will find the generated files in ``_build/html`` or, if you use ``make " +"htmlview``, the docs will be opened in a browser once the build completes. " +"Note that ``make check`` runs automatically when you submit a :ref:`pull " +"request `. You may wish to run ``make check`` and ``make " +"linkcheck`` to make sure that it runs without errors." +msgstr "" +"Você encontrará os arquivos gerados em ``_build/html`` ou, se você usar " +"``make htmlview``, os documentos serão abertos em um navegador assim que a " +"compilação for concluída. Observe que ``make check`` é executado " +"automaticamente quando você envia uma :ref:`pull request `. " +"Você pode querer executar ``make check`` e ``make linkcheck`` para ter " +"certeza de que será executado sem erros." + +#: ../../documentation/help-documenting.rst:6 +msgid "Helping with Documentation" +msgstr "Ajudando com documentação" + +#: ../../documentation/help-documenting.rst:8 +msgid "" +"Python is known for having well-written documentation. Maintaining the " +"documentation's accuracy and keeping a high level of quality takes a lot of " +"effort. Community members, like you, help with writing, editing, and " +"updating content, and these contributions are appreciated and welcomed." +msgstr "" +"Python é conhecido por ter uma documentação bem escrita. Manter a precisão " +"da documentação e manter um alto nível de qualidade exige muito esforço. Os " +"membros da comunidade, como você, ajudam a escrever, editar e atualizar o " +"conteúdo, e essas contribuições são apreciadas e bem-vindas." + +#: ../../documentation/help-documenting.rst:13 +msgid "This high-level **Helping with Documentation** section provides:" +msgstr "Esta seção **Ajudando com a documentação** de alto nível fornece:" + +#: ../../documentation/help-documenting.rst:15 +msgid "an overview of Python's documentation" +msgstr "uma visão geral da documentação do Python" + +#: ../../documentation/help-documenting.rst:16 +msgid "how to help with documentation issues" +msgstr "o como ajudar com problemas de documentação" + +#: ../../documentation/help-documenting.rst:17 +msgid "information on proofreading" +msgstr "informações sobre revisão" + +#: ../../documentation/help-documenting.rst:19 +msgid "" +"You will find extensive and detailed information on how to write " +"documentation and submit changes on the :ref:`Documenting Python " +"` page." +msgstr "" +"Você encontrará informações extensas e detalhadas sobre como escrever a " +"documentação e enviar alterações na página :ref:`Documentando Python " +"`." + +#: ../../documentation/help-documenting.rst:24 +msgid "Python Documentation" +msgstr "Documentação do Python" + +#: ../../documentation/help-documenting.rst:26 +msgid "" +"The :ref:`Documenting Python ` section covers the details of " +"how Python's documentation works. It includes information about the markup " +"language used, specific formats, and style recommendations. Looking at pre-" +"existing documentation source files can be very helpful when getting " +"started. :ref:`How to build the documentation ` walks you " +"through the steps to create a draft build which lets you see how your " +"changes will look and validates that your new markup is correct." +msgstr "" +"A seção :ref:`Documentando Python ` aborda os detalhes de como " +"a documentação do Python funciona. Inclui informações sobre a linguagem de " +"marcação usada, formatos específicos e recomendações de estilo. Observar os " +"arquivos de origem da documentação pré-existente pode ser muito útil ao " +"começar. :ref:`Como construir a documentação ` orienta você " +"através das etapas para criar um rascunho de compilação que permite ver como " +"suas alterações ficarão e valida se sua nova marcação está correta." + +#: ../../documentation/help-documenting.rst:34 +msgid "" +"You can view the documentation built from :ref:`in-development " +"` and :ref:`maintenance ` branches at https://docs." +"python.org/dev/. The in-development and recent maintenance branches are " +"rebuilt once per day." +msgstr "" +"Você pode ver a documentação construída a partir dos branches :ref:`em " +"desenvolvimento ` e de :ref:`manutenção ` em " +"https://docs.python.org/dev/. Os branches em desenvolvimento e de manutenção " +"recente são recompilados uma vez por dia." + +#: ../../documentation/help-documenting.rst:38 +msgid "" +"If you would like to be more involved with documentation, consider " +"subscribing to the `docs@python.org `_ mailing list. The `issue tracker`_ sends new " +"documentation issues to this mailing list, and, less frequently, the list " +"receives some directly mailed bug reports. The `docs-sig@python.org `_ mailing list discusses the " +"documentation toolchain, projects, and standards." +msgstr "" +"Se você gostaria de se envolver mais com a documentação, considere se " +"inscrever na lista de discussão `docs@python.org `_. O `rastreeador de problemas`_ envia " +"novos relatórios de problemas de documentação para esta lista de discussão " +"e, com menos frequência, a lista recebe alguns relatórios de bugs enviados " +"diretamente pelo e-mail. A lista de discussão `docs-sig@python.org `_ discute a cadeia de ferramentas " +"de documentação, projetos e padrões." + +#: ../../documentation/help-documenting.rst:47 +msgid "Helping with documentation issues" +msgstr "Ajuda com problemas de documentação" + +#: ../../documentation/help-documenting.rst:49 +msgid "" +"If you look at `documentation issues`_ on the `issue tracker`_, you will " +"find various documentation problems that may need work. Issues vary from " +"typos to unclear documentation and items lacking documentation." +msgstr "" +"Se você examinar os `problemas da documentação`_ no `rastreador de " +"problemas`_, encontrará vários problemas de documentação que podem precisar " +"de correção. Os problemas variam de erros de digitação a documentação pouco " +"clara e itens sem documentação." + +#: ../../documentation/help-documenting.rst:53 +msgid "" +"If you see a documentation issue that you would like to tackle, you can:" +msgstr "" +"Se você encontrar um problema de documentação que gostaria de resolver, você " +"pode:" + +#: ../../documentation/help-documenting.rst:55 +msgid "" +"check to see if there is a paperclip or `octocat`_ icon at the end of the " +"issue's title column. If there is, then someone has already created a pull " +"request for the issue." +msgstr "" +"verificar se há um clipe de papel ou ícone `octocat`_ no final da coluna do " +"título da edição. Se houver, alguém já criou uma solicitação pull para o " +"problema." + +#: ../../documentation/help-documenting.rst:58 +msgid "" +"leave a comment on the issue saying you are going to try and create a pull " +"request and roughly how long you think you will take to do so (this allows " +"others to take on the issue if you happen to forget or lose interest)." +msgstr "" +"deixar um comentário sobre o problema dizendo que você vai tentar criar um " +"pull request e aproximadamente quanto tempo você acha que levará para fazê-" +"lo (isso permite que outras pessoas assumam o problema se você esquecer ou " +"perder o interesse)." + +#: ../../documentation/help-documenting.rst:61 +msgid "submit a :ref:`pull request ` for the issue." +msgstr "enviar uma :ref:`pull request ` para o problema." + +#: ../../documentation/help-documenting.rst:63 +msgid "" +"By following the steps in the :ref:`Quick Guide to Pull Requests " +"`, you will learn the workflow for documentation " +"pull requests." +msgstr "" +"Seguindo as etapas do :ref:`Guia rápido para pull requests `, você aprenderá o fluxo de trabalho para pull requests da " +"documentação." + +#: ../../documentation/help-documenting.rst:71 +msgid "Proofreading" +msgstr "Revisando" + +#: ../../documentation/help-documenting.rst:73 +msgid "" +"While an issue filed on the `issue tracker`_ means there is a known issue " +"somewhere, that does not mean there are not other issues lurking about in " +"the documentation. Proofreading a part of the documentation, such as a \"How " +"to\" or OS specific document, can often uncover problems (e.g., " +"documentation that needs updating for Python 3)." +msgstr "" +"Embora um problema registrado no `rastreador de problemas`_ signifique que " +"há um problema conhecido em algum lugar, isso não significa que não haja " +"outros problemas ocultos na documentação. A revisão de uma parte da " +"documentação, como um \"HOWTO\" ou um documento específico do sistema " +"operacional, geralmente pode revelar problemas (por exemplo, documentação " +"que precisa ser atualizada para o Python 3)." + +#: ../../documentation/help-documenting.rst:79 +msgid "" +"If you decide to proofread, read a section of the documentation from start " +"to finish, filing issues in the issue tracker for each major type of problem " +"you find. Simple typos don't require issues of their own, but, instead, " +"submit a pull request directly. It's best to avoid filing a single issue for " +"an entire section containing multiple problems; instead, file several issues " +"so that it is easier to break the work up for multiple people and more " +"efficient review." +msgstr "" +"Se você decidir revisar, leia uma seção da documentação do início ao fim, " +"registrando problemas no rastreador de problemas para cada tipo de problema " +"principal que encontrar. Erros de digitação simples não exigem relatórios de " +"problema próprios, mas, em vez disso, envie uma pull request diretamente. É " +"melhor evitar criar um único relatório problema para uma seção inteira " +"contendo vários problemas; em vez disso, registre vários relatórios de " +"problemas para que seja mais fácil dividir o trabalho para várias pessoas e " +"uma revisão mais eficiente." + +#: ../../documentation/index.rst:3 ../../triage/labels.rst:255 +msgid "Documentation" +msgstr "Documentação" + +#: ../../documentation/markup.rst:5 +msgid "reStructuredText Markup" +msgstr "Marcação do reStructuredText" + +#: ../../documentation/markup.rst:9 +msgid "" +"This document describes the custom reStructuredText markup introduced by " +"Sphinx to support Python documentation and how it should be used." +msgstr "" +"Este documento descreve a marcação personalizada do reStructuredText " +"introduzida pelo Sphinx para dar suporte à documentação do Python e como ela " +"deve ser usada." + +#: ../../documentation/markup.rst:14 ../../index.rst:15 +msgid "Quick Reference" +msgstr "Referência rápida" + +#: ../../documentation/markup.rst:16 +msgid "" +"This table summarizes which markup should be used for some commonly used " +"elements:" +msgstr "" +"Esta tabela resume qual marcação deve ser usada para alguns elementos " +"comumente usados:" + +#: ../../documentation/markup.rst:20 +msgid "Element" +msgstr "Elemento" + +#: ../../documentation/markup.rst:20 +msgid "Markup" +msgstr "Marcação" + +#: ../../documentation/markup.rst:20 +msgid "See also" +msgstr "Veja também" + +#: ../../documentation/markup.rst:22 +msgid "arguments/parameters" +msgstr "argumentos/parâmetros" + +#: ../../documentation/markup.rst:22 +msgid "``*arg*``" +msgstr "``*arg*``" + +#: ../../documentation/markup.rst:22 ../../documentation/markup.rst:23 +#: ../../documentation/markup.rst:24 +msgid ":ref:`inline-markup`" +msgstr ":ref:`inline-markup`" + +#: ../../documentation/markup.rst:23 +msgid "variables/literals/code" +msgstr "variáveis/literais/código" + +#: ../../documentation/markup.rst:23 +msgid "````foo````, ````42````, ````len(s) - 1````" +msgstr "````foo````, ````42````, ````len(s) - 1````" + +#: ../../documentation/markup.rst:24 +msgid "True/False/None" +msgstr "True/False/None" + +#: ../../documentation/markup.rst:24 +msgid "````True````, ````False````, ````None````" +msgstr "````True````, ````False````, ````None````" + +#: ../../documentation/markup.rst:25 +msgid "functions definitions" +msgstr "definições de funções" + +#: ../../documentation/markup.rst:25 +msgid "``.. function:: print(*args)``" +msgstr "``.. function:: print(*args)``" + +#: ../../documentation/markup.rst:25 +msgid ":ref:`directives`" +msgstr ":ref:`directives`" + +#: ../../documentation/markup.rst:26 +msgid "functions references" +msgstr "referências a funções" + +#: ../../documentation/markup.rst:26 +msgid "``:func:`print```" +msgstr "``:func:`print```" + +#: ../../documentation/markup.rst:26 ../../documentation/markup.rst:30 +#: ../../documentation/markup.rst:31 ../../documentation/markup.rst:32 +msgid ":ref:`roles`" +msgstr ":ref:`roles`" + +#: ../../documentation/markup.rst:27 +msgid "reference labels" +msgstr "rótulos de referência" + +#: ../../documentation/markup.rst:27 +msgid "``.. _label-name:``" +msgstr "``.. _nome_rótulo:``" + +#: ../../documentation/markup.rst:27 ../../documentation/markup.rst:28 +msgid ":ref:`doc-ref-role`" +msgstr ":ref:`doc-ref-role`" + +#: ../../documentation/markup.rst:28 +msgid "internal references" +msgstr "referências internas" + +#: ../../documentation/markup.rst:28 +msgid "``:ref:`label-name```" +msgstr "``:ref:`nome-rótulo```" + +#: ../../documentation/markup.rst:29 +msgid "external links" +msgstr "links externos" + +#: ../../documentation/markup.rst:29 +msgid "```Link text `_``" +msgstr "```Texto do link `_``" + +#: ../../documentation/markup.rst:29 +msgid ":ref:`hyperlinks`" +msgstr ":ref:`hyperlinks`" + +#: ../../documentation/markup.rst:30 +msgid "roles w/ custom text" +msgstr "funções com texto personalizado" + +#: ../../documentation/markup.rst:30 +msgid "``:role:`custom text ```" +msgstr "``:função:`texto personalizado ```" + +#: ../../documentation/markup.rst:31 +msgid "roles w/ only last part" +msgstr "funções com apenas última parte" + +#: ../../documentation/markup.rst:31 +msgid "``:role:`~hidden.hidden.visible```" +msgstr "``:função:`~oculto.oculto.visível```" + +#: ../../documentation/markup.rst:32 +msgid "roles w/o link" +msgstr "funções sem link" + +#: ../../documentation/markup.rst:32 +msgid "``:role:`!target```" +msgstr "``:função:`!alvo```" + +#: ../../documentation/markup.rst:33 +msgid "comments" +msgstr "comentários" + +#: ../../documentation/markup.rst:33 +msgid "``.. a comment``" +msgstr "``.. um comentário``" + +#: ../../documentation/markup.rst:33 +msgid ":ref:`comments`" +msgstr ":ref:`comments`" + +#: ../../documentation/markup.rst:40 +msgid "reStructuredText Primer" +msgstr "Cartilha de reStructuredText" + +#: ../../documentation/markup.rst:42 +msgid "" +"This section is a brief introduction to reStructuredText (reST) concepts and " +"syntax, intended to provide authors with enough information to author " +"documents productively. Since reST was designed to be a simple, unobtrusive " +"markup language, this will not take too long." +msgstr "" +"Esta seção é uma breve introdução aos conceitos e sintaxe reStructuredText " +"(reST), destinada a fornecer aos autores informações suficientes para criar " +"documentos de forma produtiva. Como o reST foi projetado para ser uma " +"linguagem de marcação simples e discreta, isso não demorará muito." + +#: ../../documentation/markup.rst:49 +msgid "" +"The authoritative `reStructuredText User Documentation `_." +msgstr "" +"A autoritativa `documentação de usuário do reStructuredText `_." + +#: ../../documentation/markup.rst:54 +msgid "Paragraphs" +msgstr "Parágrafos" + +#: ../../documentation/markup.rst:56 +msgid "" +"The paragraph is the most basic block in a reST document. Paragraphs are " +"simply chunks of text separated by one or more blank lines. As in Python, " +"indentation is significant in reST, so all lines of the same paragraph must " +"be left-aligned to the same level of indentation." +msgstr "" +"O parágrafo é o bloco mais básico em um documento reST. Os parágrafos são " +"simplesmente blocos de texto separados por uma ou mais linhas em branco. " +"Como em Python, o recuo é significativo em reST, portanto, todas as linhas " +"do mesmo parágrafo devem ser alinhadas à esquerda com o mesmo nível de recuo." + +#: ../../documentation/markup.rst:64 +msgid "Inline markup" +msgstr "Marcação em linha" + +#: ../../documentation/markup.rst:66 +msgid "The standard reST inline markup is quite simple: use" +msgstr "" +"A marcação em linha (em inglês, *inline*) padrão reST é bastante simples: use" + +#: ../../documentation/markup.rst:68 +msgid "one asterisk: ``*text*`` for emphasis (italics)," +msgstr "um asterisco: ``*texto*`` para ênfase (itálico)," + +#: ../../documentation/markup.rst:69 +msgid "two asterisks: ``**text**`` for strong emphasis (boldface), and" +msgstr "dois asteriscos: ``**texto**`` para ênfase forte (negrito) e" + +#: ../../documentation/markup.rst:70 +msgid "backquotes: ````text```` for code samples, variables, and literals." +msgstr "" +"crases duplas: ````text```` para amostras de código, variáveis e literais." + +#: ../../documentation/markup.rst:72 +msgid "" +"If asterisks or backquotes appear in running text and could be confused with " +"inline markup delimiters, they have to be escaped with a backslash." +msgstr "" +"Se asteriscos ou crases (em inglês, *backquotes* ou *backtick*) aparecerem " +"no texto em execução e puderem ser confundidas com delimitadores de marcação " +"embutidos, eles deverão ser precedidos por uma barra invertida." + +#: ../../documentation/markup.rst:75 +msgid "Be aware of some restrictions of this markup:" +msgstr "Esteja ciente de algumas restrições desta marcação:" + +#: ../../documentation/markup.rst:77 +msgid "it may not be nested," +msgstr "não pode estar aninhada," + +#: ../../documentation/markup.rst:78 +msgid "content may not start or end with whitespace: ``* text*`` is wrong," +msgstr "" +"o conteúdo não pode começar ou terminar com espaço em branco: ``* texto*`` " +"está errado," + +#: ../../documentation/markup.rst:79 +msgid "" +"it must be separated from surrounding text by non-word characters. Use a " +"backslash escaped space to work around that: ``thisis\\ *one*\\ word``." +msgstr "" +"ela deve ser separada do texto ao redor por caracteres que não sejam " +"palavras. Use um espaço de escape com barra invertida para contornar isso: " +"``issoé\\ *uma*\\ palavra``." + +#: ../../documentation/markup.rst:82 +msgid "These restrictions may be lifted in future versions of the docutils." +msgstr "Essas restrições podem ser suspensas em versões futuras dos docutils." + +#: ../../documentation/markup.rst:84 +msgid "" +"reST also allows for custom \"interpreted text roles\"', which signify that " +"the enclosed text should be interpreted in a specific way. Sphinx uses this " +"to provide semantic markup and cross-referencing of identifiers, as " +"described in the appropriate section. The general syntax is ``:rolename:" +"`content```." +msgstr "" +"O reST também permite \"funções de texto interpretadas\" personalizadas, o " +"que significa que o texto incluído deve ser interpretado de uma maneira " +"específica. O Sphinx usa isso para fornecer marcação semântica e referência " +"cruzada de identificadores, conforme descrito na seção apropriada. A sintaxe " +"geral é ``:nomefunção:`conteúdo```." + +#: ../../documentation/markup.rst:91 +msgid "Lists and Quotes" +msgstr "Listas e citações" + +#: ../../documentation/markup.rst:93 +msgid "" +"List markup is natural: just place an asterisk at the start of a paragraph " +"and indent properly. The same goes for numbered lists; they can also be " +"automatically numbered using a ``#`` sign::" +msgstr "" +"A marcação de lista é natural: basta colocar um asterisco no início de um " +"parágrafo e recuar corretamente. O mesmo vale para listas numeradas; eles " +"também podem ser numerados automaticamente usando um sinal ``#``::" + +#: ../../documentation/markup.rst:108 +msgid "" +"Nested lists are possible, but be aware that they must be separated from the " +"parent list items by blank lines::" +msgstr "" +"Listas aninhadas são possíveis, mas esteja ciente de que elas devem ser " +"separadas dos itens da lista pai por linhas em branco::" + +#: ../../documentation/markup.rst:119 +msgid "Definition lists are created as follows::" +msgstr "As listas de definições são criadas da seguinte forma::" + +#: ../../documentation/markup.rst:130 +msgid "" +"Paragraphs are quoted by just indenting them more than the surrounding " +"paragraphs." +msgstr "" +"Os parágrafos são citados apenas recuando-os mais do que os parágrafos " +"adjacentes." + +#: ../../documentation/markup.rst:135 +msgid "Source Code" +msgstr "Código-fonte" + +#: ../../documentation/markup.rst:137 +msgid "" +"Literal code blocks are introduced by ending a paragraph with the special " +"marker ``::``. The literal block must be indented::" +msgstr "" +"Blocos de código literais são introduzidos terminando um parágrafo com o " +"marcador especial ``::``. O bloco literal deve ser recuado::" + +#: ../../documentation/markup.rst:149 +msgid "The handling of the ``::`` marker is smart:" +msgstr "A manipulação do marcador ``::`` é inteligente:" + +#: ../../documentation/markup.rst:151 +msgid "" +"If it occurs as a paragraph of its own, that paragraph is completely left " +"out of the document." +msgstr "" +"Se ocorrer como um parágrafo próprio, esse parágrafo será completamente " +"excluído do documento." + +#: ../../documentation/markup.rst:153 +msgid "If it is preceded by whitespace, the marker is removed." +msgstr "Se for precedido por um espaço em branco, o marcador é removido." + +#: ../../documentation/markup.rst:154 +msgid "" +"If it is preceded by non-whitespace, the marker is replaced by a single " +"colon." +msgstr "" +"Se for precedido por espaço não branco, o marcador é substituído por dois " +"pontos simples." + +#: ../../documentation/markup.rst:157 +msgid "" +"That way, the second sentence in the above example's first paragraph would " +"be rendered as \"The next paragraph is a code sample:\"." +msgstr "" +"Dessa forma, a segunda frase no primeiro parágrafo do exemplo acima seria " +"renderizada como \"O próximo parágrafo é um exemplo de código:\"." + +#: ../../documentation/markup.rst:163 +msgid "Hyperlinks" +msgstr "Hiperlinks" + +#: ../../documentation/markup.rst:166 +msgid "External links" +msgstr "Links externos" + +#: ../../documentation/markup.rst:168 +msgid "" +"Use ```Link text `_`` for inline web links. If the link text " +"should be the web address, you don't need special markup at all, the parser " +"finds links and mail addresses in ordinary text." +msgstr "" +"Use ```Texto do link `_`` para links da web embutidos. Se o " +"texto do link for o endereço da web, você não precisa de nenhuma marcação " +"especial, o analisador encontra links e endereços de e-mail em texto comum." + +#: ../../documentation/markup.rst:173 +msgid "Internal links" +msgstr "Links internos" + +#: ../../documentation/markup.rst:175 +msgid "" +"Internal linking is done via a special reST role, see the section on " +"specific markup, :ref:`doc-ref-role`." +msgstr "" +"O link interno é feita através de uma função reST especial, veja a seção " +"sobre marcação específica, :ref:`doc-ref-role`." + +#: ../../documentation/markup.rst:180 +msgid "Sections" +msgstr "Seções" + +#: ../../documentation/markup.rst:182 +msgid "" +"Section headers are created by underlining (and optionally overlining) the " +"section title with a punctuation character, at least as long as the text::" +msgstr "" +"Os cabeçalhos de seção são criados sublinhando (e opcionalmente " +"sobrelinhando) o título da seção com um caractere de pontuação, pelo menos " +"tão longo quanto o texto::" + +#: ../../documentation/markup.rst:189 +msgid "" +"Normally, there are no heading levels assigned to certain characters as the " +"structure is determined from the succession of headings. However, for the " +"Python documentation, here is a suggested convention:" +msgstr "" +"Normalmente, não há níveis de título atribuídos a determinados caracteres, " +"pois a estrutura é determinada pela sucessão de títulos. No entanto, para a " +"documentação do Python, aqui está uma convenção sugerida:" + +#: ../../documentation/markup.rst:193 +msgid "``#`` with overline, for parts" +msgstr "``#`` com sobrelinha, para partes" + +#: ../../documentation/markup.rst:194 +msgid "``*`` with overline, for chapters" +msgstr "``*`` com sobrelinha, para capítulos" + +#: ../../documentation/markup.rst:195 +msgid "``=``, for sections" +msgstr "``=``, para seções" + +#: ../../documentation/markup.rst:196 +msgid "``-``, for subsections" +msgstr "``-``, para subseções" + +#: ../../documentation/markup.rst:197 +msgid "``^``, for subsubsections" +msgstr "``^``, para subsubseções" + +#: ../../documentation/markup.rst:198 +msgid "``\"``, for paragraphs" +msgstr "``\"``, para parágrafos" + +#: ../../documentation/markup.rst:202 +msgid "Explicit Markup" +msgstr "Marcação explícita" + +#: ../../documentation/markup.rst:204 +msgid "" +"\"Explicit markup\" is used in reST for most constructs that need special " +"handling, such as footnotes, specially-highlighted paragraphs, comments, and " +"generic directives." +msgstr "" +"\"Marcação explícita\" é usada em reST para a maioria das construções que " +"precisam de tratamento especial, como notas de rodapé, parágrafos com " +"destaque especial, comentários e diretivas genéricas." + +#: ../../documentation/markup.rst:208 +msgid "" +"An explicit markup block begins with a line starting with ``..`` followed by " +"whitespace and is terminated by the next paragraph at the same level of " +"indentation. (There needs to be a blank line between explicit markup and " +"normal paragraphs. This may all sound a bit complicated, but it is " +"intuitive enough when you write it.)" +msgstr "" +"Um bloco de marcação explícito começa com uma linha começando com ``..`` " +"seguido por um espaço em branco e termina no próximo parágrafo no mesmo " +"nível de recuo. (Deve haver uma linha em branco entre a marcação explícita e " +"os parágrafos normais. Tudo isso pode parecer um pouco complicado, mas é " +"intuitivo o suficiente quando você o escreve.)" + +#: ../../documentation/markup.rst:217 +msgid "Directives" +msgstr "Diretivas" + +#: ../../documentation/markup.rst:219 +msgid "" +"A directive is a generic block of explicit markup. Besides roles, it is one " +"of the extension mechanisms of reST, and Sphinx makes heavy use of it." +msgstr "" +"Uma diretiva é um bloco genérico de marcação explícita. Além das funções, é " +"um dos mecanismos de extensão do reST, e o Sphinx faz uso intenso dele." + +#: ../../documentation/markup.rst:222 +msgid "" +"Basically, a directive consists of a name, arguments, options and content. " +"(Keep this terminology in mind, it is used in `:ref:`the next section " +"` describing custom directives.) Looking at " +"this example," +msgstr "" +"Basicamente, uma diretiva consiste em um nome, argumentos, opções e " +"conteúdo. (Lembre-se dessa terminologia, ela é usada em `:ref:`a próxima " +"seção ` descrevendo diretivas " +"personalizadas.) Olhando para este exemplo," + +#: ../../documentation/markup.rst:235 +msgid "" +"``function`` is the directive name. It is given two arguments here, the " +"remainder of the first line and the second line, as well as one option " +"``bar`` (as you can see, options are given in the lines immediately " +"following the arguments and indicated by the colons)." +msgstr "" +"``função`` é o nome da diretiva. São dados dois argumentos aqui, o restante " +"da primeira linha e a segunda linha, bem como uma opção ``bar`` (como você " +"pode ver, as opções são dadas nas linhas imediatamente após os argumentos e " +"indicadas pelos dois pontos)." + +#: ../../documentation/markup.rst:240 +msgid "" +"The directive content follows after a blank line and is indented relative to " +"the directive start." +msgstr "" +"O conteúdo da diretiva segue após uma linha em branco e é recuado em relação " +"ao início da diretiva." + +#: ../../documentation/markup.rst:245 ../../documentation/markup.rst:1273 +#: ../../documentation/style-guide.rst:28 +msgid "Footnotes" +msgstr "Notas de rodapé" + +#: ../../documentation/markup.rst:247 +msgid "" +"For footnotes, use ``[#]_`` to mark the footnote location, and add the " +"footnote body at the bottom of the document after a \"Footnotes\" rubric " +"heading, like so::" +msgstr "" +"Para notas de rodapé, use ``[#]_`` para marcar o local da nota de rodapé e " +"adicione o corpo da nota de rodapé na parte inferior do documento após um " +"cabeçalho de rubrica \"Notas de rodapé\", assim::" + +#: ../../documentation/markup.rst:257 +msgid "You can also explicitly number the footnotes for better context." +msgstr "" +"Você também pode numerar explicitamente as notas de rodapé para melhor " +"contexto." + +#: ../../documentation/markup.rst:262 +msgid "Comments" +msgstr "Comentários" + +#: ../../documentation/markup.rst:264 +msgid "" +"Every explicit markup block (starting with :literal:`.. \\ `) which isn't a :" +"ref:`valid markup construct ` is regarded as a comment::" +msgstr "" +"Cada bloco de marcação explícito (começando com :literal:`.. \\ `) que não é " +"uma :ref:`construção de marcação válida ` é considerado um " +"comentário::" + +#: ../../documentation/markup.rst:271 +msgid "Source encoding" +msgstr "Codificação fonte" + +#: ../../documentation/markup.rst:273 +msgid "" +"Since the easiest way to include special characters like em dashes or " +"copyright signs in reST is to directly write them as Unicode characters, one " +"has to specify an encoding:" +msgstr "" +"Como a maneira mais fácil de incluir caracteres especiais como travessões ou " +"sinais de direitos autorais em reST é escrevê-los diretamente como " +"caracteres Unicode, é necessário especificar uma codificação:" + +#: ../../documentation/markup.rst:277 +msgid "" +"All Python documentation source files must be in UTF-8 encoding, and the " +"HTML documents written from them will be in that encoding as well." +msgstr "" +"Todos os arquivos-fonte da documentação do Python devem estar na codificação " +"UTF-8, e os documentos HTML escritos a partir deles também estarão nessa " +"codificação." + +#: ../../documentation/markup.rst:282 +msgid "Gotchas" +msgstr "Pegadinhas" + +#: ../../documentation/markup.rst:284 +msgid "" +"There are some problems one commonly runs into while authoring reST " +"documents:" +msgstr "" +"Existem alguns problemas comumente encontrados ao criar documentos reST:" + +#: ../../documentation/markup.rst:286 +msgid "" +"**Separation of inline markup:** As said above, inline markup spans must be " +"separated from the surrounding text by non-word characters, you have to use " +"an escaped space to get around that." +msgstr "" +"**Separação de marcação em linha:** Como dito acima, os espaços de marcação " +"em linha devem ser separados do texto ao redor por caracteres que não sejam " +"palavras, você deve usar um espaço de escape para contornar isso." + +#: ../../documentation/markup.rst:292 +msgid "Additional Markup Constructs" +msgstr "Construções de marcação adicionais" + +#: ../../documentation/markup.rst:294 +msgid "" +"Sphinx adds a lot of new directives and interpreted text roles to standard " +"reST markup. This section contains the reference material for these " +"facilities. Documentation for \"standard\" reST constructs is not included " +"here, though they are used in the Python documentation." +msgstr "" +"O Sphinx adiciona muitas novas diretivas e funções de texto interpretados à " +"marcação reST padrão. Esta seção contém o material de referência para essas " +"instalações. A documentação para construções reST \"padrão\" não está " +"incluída aqui, embora sejam usadas na documentação do Python." + +#: ../../documentation/markup.rst:301 +msgid "" +"This is just an overview of Sphinx' extended markup capabilities; full " +"coverage can be found in `its own documentation `_." +msgstr "" +"Esta é apenas uma visão geral dos recursos de marcação estendidos do Sphinx; " +"a cobertura completa pode ser encontrada em `sua própria documentação " +"`_." + +#: ../../documentation/markup.rst:307 +msgid "Meta-information markup" +msgstr "Marcação de metainformação" + +#: ../../documentation/markup.rst:311 +msgid "" +"Identifies the author of the current section. The argument should include " +"the author's name such that it can be used for presentation (though it " +"isn't) and email address. The domain name portion of the address should be " +"lower case. Example::" +msgstr "" +"Identifica o autor da seção atual. O argumento deve incluir o nome do autor " +"de forma que possa ser usado para apresentação (embora não seja) e endereço " +"de e-mail. A parte do nome de domínio do endereço deve estar em letras " +"minúsculas. Exemplo::" + +#: ../../documentation/markup.rst:318 +msgid "" +"Currently, this markup isn't reflected in the output in any way, but it " +"helps keep track of contributions." +msgstr "" +"Atualmente, essa marcação não é refletida na saída de forma alguma, mas " +"ajuda a controlar as contribuições." + +#: ../../documentation/markup.rst:323 +msgid "Module-specific markup" +msgstr "Marcação específica do módulo" + +#: ../../documentation/markup.rst:325 +msgid "" +"The markup described in this section is used to provide information about a " +"module being documented. Each module should be documented in its own file. " +"Normally this markup appears after the title heading of that file; a typical " +"file might start like this::" +msgstr "" +"A marcação descrita nesta seção é usada para fornecer informações sobre um " +"módulo que está sendo documentado. Cada módulo deve ser documentado em seu " +"próprio arquivo. Normalmente, essa marcação aparece após o título do " +"arquivo; um arquivo típico pode começar assim::" + +#: ../../documentation/markup.rst:339 +msgid "" +"As you can see, the module-specific markup consists of two directives, the " +"``module`` directive and the ``moduleauthor`` directive." +msgstr "" +"Como você pode ver, a marcação específica do módulo consiste em duas " +"diretivas, a diretiva ``module`` e a diretiva ``moduleauthor``." + +#: ../../documentation/markup.rst:344 +msgid "" +"This directive marks the beginning of the description of a module, package, " +"or submodule. The name should be fully qualified (i.e. including the package " +"name for submodules)." +msgstr "" +"Esta diretiva marca o início da descrição de um módulo, pacote ou submódulo. " +"O nome deve ser totalmente qualificado (ou seja, incluindo o nome do pacote " +"para submódulos)." + +#: ../../documentation/markup.rst:348 +msgid "" +"The ``platform`` option, if present, is a comma-separated list of the " +"platforms on which the module is available (if it is available on all " +"platforms, the option should be omitted). The keys are short identifiers; " +"examples that are in use include \"IRIX\", \"Mac\", \"Windows\", and " +"\"Unix\". It is important to use a key which has already been used when " +"applicable." +msgstr "" +"A opção ``platform``, se presente, é uma lista separada por vírgulas das " +"plataformas nas quais o módulo está disponível (se estiver disponível em " +"todas as plataformas, a opção deve ser omitida). As chaves são " +"identificadores curtos; exemplos que estão em uso incluem \"IRIX\", \"Mac\", " +"\"Windows\" e \"Unix\". É importante usar uma chave que já tenha sido usada " +"quando aplicável." + +#: ../../documentation/markup.rst:354 +msgid "" +"The ``synopsis`` option should consist of one sentence describing the " +"module's purpose -- it is currently only used in the Global Module Index." +msgstr "" +"A opção ``synopsis`` deve consistir em uma sentença descrevendo o propósito " +"do módulo -- ela é atualmente usada apenas no índice global de módulos." + +#: ../../documentation/markup.rst:357 +msgid "" +"The ``deprecated`` option can be given (with no value) to mark a module as " +"deprecated; it will be designated as such in various locations then." +msgstr "" +"A opção ``deprecated`` pode ser fornecida (sem valor) para marcar um módulo " +"como descontinuado; ele será designado como tal em vários locais então." + +#: ../../documentation/markup.rst:362 +msgid "" +"The ``moduleauthor`` directive, which can appear multiple times, names the " +"authors of the module code, just like ``sectionauthor`` names the author(s) " +"of a piece of documentation. It too does not result in any output currently." +msgstr "" +"A diretiva ``moduleauthor``, que pode aparecer várias vezes, nomeia os " +"autores do código do módulo, assim como ``sectionauthor`` nomeia o(s) " +"autor(es) de uma documentação. Também não resulta em nenhuma saída " +"atualmente." + +#: ../../documentation/markup.rst:368 +msgid "" +"It is important to make the section title of a module-describing file " +"meaningful since that value will be inserted in the table-of-contents trees " +"in overview files." +msgstr "" +"É importante tornar o título da seção de um arquivo de descrição do módulo " +"significativo, pois esse valor será inserido nas árvores de índice nos " +"arquivos de visão geral." + +#: ../../documentation/markup.rst:374 +msgid "Information units" +msgstr "Unidades de informação" + +#: ../../documentation/markup.rst:376 +msgid "" +"There are a number of directives used to describe specific features provided " +"by modules. Each directive requires one or more signatures to provide basic " +"information about what is being described, and the content should be the " +"description. The basic version makes entries in the general index; if no " +"index entry is desired, you can give the directive option flag ``:noindex:" +"``. The following example shows all of the features of this directive type::" +msgstr "" +"Existem várias diretivas usadas para descrever recursos específicos " +"fornecidos por módulos. Cada diretiva requer uma ou mais assinaturas para " +"fornecer informações básicas sobre o que está sendo descrito, e o conteúdo " +"deve ser a descrição. A versão básica faz entradas no índice geral; se " +"nenhuma entrada de índice for desejada, você pode dar o sinalizador de opção " +"de diretiva ``:noindex:``. O exemplo a seguir mostra todos os recursos desse " +"tipo de diretiva::" + +#: ../../documentation/markup.rst:389 +msgid "" +"The signatures of object methods or data attributes should not include the " +"class name, but be nested in a class directive. The generated files will " +"reflect this nesting, and the target identifiers (for HTML output) will use " +"both the class and method name, to enable consistent cross-references. If " +"you describe methods belonging to an abstract protocol such as context " +"managers, use a class directive with a (pseudo-)type name too to make the " +"index entries more informative." +msgstr "" +"As assinaturas de métodos de objeto ou atributos de dados não devem incluir " +"o nome da classe, mas estar aninhadas em uma diretiva de classe. Os arquivos " +"gerados refletirão esse aninhamento e os identificadores de destino (para " +"saída HTML) usarão o nome da classe e do método para permitir referências " +"cruzadas consistentes. Se você descrever métodos pertencentes a um protocolo " +"abstrato, como gerenciadores de contexto, use uma diretiva de classe com um " +"nome de (pseudo)tipo também para tornar as entradas de índice mais " +"informativas." + +#: ../../documentation/markup.rst:397 +msgid "The directives are:" +msgstr "As diretivas são:" + +#: ../../documentation/markup.rst:401 +msgid "Describes a C function. The signature should be given as in C, e.g.::" +msgstr "" +"Descreve uma função C. A assinatura deve ser dada como em C, por exemplo::" + +#: ../../documentation/markup.rst:405 +msgid "" +"This is also used to describe function-like preprocessor macros. The names " +"of the arguments should be given so they may be used in the description." +msgstr "" +"Isso também é usado para descrever macros de preprocessador semelhantes a " +"funções. Os nomes dos argumentos devem ser fornecidos para que possam ser " +"usados na descrição." + +#: ../../documentation/markup.rst:408 +msgid "" +"Note that you don't have to backslash-escape asterisks in the signature, as " +"it is not parsed by the reST inliner." +msgstr "" +"Observe que você não precisa de asteriscos de escape de barra invertida na " +"assinatura, pois ela não é analisada pelo *inliner* do reST." + +#: ../../documentation/markup.rst:413 +msgid "Describes a C struct member. Example signature::" +msgstr "Descreve um membro de estrutura C. Exemplo de assinatura::" + +#: ../../documentation/markup.rst:417 +msgid "" +"The text of the description should include the range of values allowed, how " +"the value should be interpreted, and whether the value can be changed. " +"References to structure members in text should use the ``member`` role." +msgstr "" +"O texto da descrição deve incluir o intervalo de valores permitidos, como o " +"valor deve ser interpretado e se o valor pode ser alterado. As referências " +"aos membros da estrutura no texto devem usar a função ``member``." + +#: ../../documentation/markup.rst:423 +msgid "" +"Describes a \"simple\" C macro. Simple macros are macros which are used for " +"code expansion, but which do not take arguments so cannot be described as " +"functions. This is not to be used for simple constant definitions. " +"Examples of its use in the Python documentation include :c:macro:" +"`PyObject_HEAD` and :c:macro:`Py_BEGIN_ALLOW_THREADS`." +msgstr "" +"Descreve uma macro C \"simples\". Macros simples são macros usadas para " +"expansão de código, mas que não aceitam argumentos, portanto não podem ser " +"descritas como funções. Isso não deve ser usado para definições simples de " +"constantes. Exemplos de seu uso na documentação do Python incluem :c:macro:" +"`PyObject_HEAD` e :c:macro:`Py_BEGIN_ALLOW_THREADS`." + +#: ../../documentation/markup.rst:431 +msgid "Describes a C type. The signature should just be the type name." +msgstr "Descreve um tipo C. A assinatura deve ser apenas o nome do tipo." + +#: ../../documentation/markup.rst:435 +msgid "" +"Describes a global C variable. The signature should include the type, such " +"as::" +msgstr "" +"Descreve uma variável C global. A assinatura deve incluir o tipo, como::" + +#: ../../documentation/markup.rst:442 +msgid "" +"Describes global data in a module, including both variables and values used " +"as \"defined constants.\" Class and object attributes are not documented " +"using this directive." +msgstr "" +"Descreve dados globais em um módulo, incluindo variáveis e valores usados " +"como \"constantes definidas\". Atributos de classe e objeto não são " +"documentados usando esta diretiva." + +#: ../../documentation/markup.rst:448 +msgid "" +"Describes an exception class. The signature can, but need not include " +"parentheses with constructor arguments." +msgstr "" +"Descreve uma classe de exceção. A assinatura pode, mas não precisa incluir " +"parênteses com argumentos do construtor." + +#: ../../documentation/markup.rst:453 +msgid "" +"Describes a module-level function. The signature should include the " +"parameters, enclosing optional parameters in brackets. Default values can " +"be given if it enhances clarity. For example::" +msgstr "" +"Descreve uma função em nível de módulo. A assinatura deve incluir os " +"parâmetros, colocando os parâmetros opcionais entre colchetes. Os valores " +"padrão podem ser fornecidos se aumentarem a clareza. Por exemplo::" + +#: ../../documentation/markup.rst:459 +msgid "" +"Object methods are not documented using this directive. Bound object methods " +"placed in the module namespace as part of the public interface of the module " +"are documented using this, as they are equivalent to normal functions for " +"most purposes." +msgstr "" +"Os métodos de objeto não são documentados usando esta diretiva. Métodos de " +"objetos vinculados colocados no espaço de nomes (em inglês, *namespace*) do " +"módulo como parte da interface pública do módulo são documentados usando " +"isso, pois são equivalentes a funções normais para a maioria dos propósitos." + +#: ../../documentation/markup.rst:464 +msgid "" +"The description should include information about the parameters required and " +"how they are used (especially whether mutable objects passed as parameters " +"are modified), side effects, and possible exceptions. A small example may " +"be provided." +msgstr "" +"A descrição deve incluir informações sobre os parâmetros necessários e como " +"eles são usados (especialmente se os objetos mutáveis passados como " +"parâmetros são modificados), efeitos colaterais e possíveis exceções. Um " +"pequeno exemplo pode ser fornecido." + +#: ../../documentation/markup.rst:471 +msgid "" +"Describes a module-level coroutine. The description should include similar " +"information to that described for ``function``." +msgstr "" +"Descreve uma corrotina em nível de módulo. A descrição deve incluir " +"informações semelhantes àquelas descritas para ``função``." + +#: ../../documentation/markup.rst:476 +msgid "" +"Describes a decorator function. The signature should *not* represent the " +"signature of the actual function, but the usage as a decorator. For " +"example, given the functions" +msgstr "" +"Descreve uma função de decorador. A assinatura *não* deve representar a " +"assinatura da função real, mas o uso como decorador. Por exemplo, dadas as " +"funções" + +#: ../../documentation/markup.rst:492 +msgid "the descriptions should look like this::" +msgstr "as descrições devem ficar assim::" + +#: ../../documentation/markup.rst:502 +msgid "" +"There is no ``deco`` role to link to a decorator that is marked up with this " +"directive; rather, use the ``:func:`` role." +msgstr "" +"Não há função ``deco`` para vincular a um decorador marcado com esta " +"diretiva; em vez disso, use a função ``:func:``." + +#: ../../documentation/markup.rst:507 +msgid "" +"Describes a class. The signature can include parentheses with parameters " +"which will be shown as the constructor arguments." +msgstr "" + +#: ../../documentation/markup.rst:512 +msgid "" +"Describes an object data attribute. The description should include " +"information about the type of the data to be expected and whether it may be " +"changed directly. This directive should be nested in a class directive, " +"like in this example::" +msgstr "" + +#: ../../documentation/markup.rst:525 +msgid "" +"If is also possible to document an attribute outside of a class directive, " +"for example if the documentation for different attributes and methods is " +"split in multiple sections. The class name should then be included " +"explicitly::" +msgstr "" + +#: ../../documentation/markup.rst:534 +msgid "" +"Describes an object method. The parameters should not include the ``self`` " +"parameter. The description should include similar information to that " +"described for ``function``. This directive should be nested in a class " +"directive, like in the example above." +msgstr "" + +#: ../../documentation/markup.rst:541 +msgid "" +"Describes an object coroutine method. The parameters should not include the " +"``self`` parameter. The description should include similar information to " +"that described for ``function``. This directive should be nested in a " +"``class`` directive." +msgstr "" + +#: ../../documentation/markup.rst:548 +msgid "Same as ``decorator``, but for decorators that are methods." +msgstr "" + +#: ../../documentation/markup.rst:550 +msgid "Refer to a decorator method using the ``:meth:`` role." +msgstr "" + +#: ../../documentation/markup.rst:554 +msgid "" +"Describes an object static method. The description should include similar " +"information to that described for ``function``. This directive should be " +"nested in a ``class`` directive." +msgstr "" + +#: ../../documentation/markup.rst:560 +msgid "" +"Describes an object class method. The parameters should not include the " +"``cls`` parameter. The description should include similar information to " +"that described for ``function``. This directive should be nested in a " +"``class`` directive." +msgstr "" + +#: ../../documentation/markup.rst:567 +msgid "" +"Describes an object abstract method. The description should include similar " +"information to that described for ``function``. This directive should be " +"nested in a ``class`` directive." +msgstr "" + +#: ../../documentation/markup.rst:573 +msgid "Describes a Python :term:`bytecode` instruction." +msgstr "" + +#: ../../documentation/markup.rst:577 +msgid "" +"Describes a Python command line option or switch. Option argument names " +"should be enclosed in angle brackets. Example::" +msgstr "" + +#: ../../documentation/markup.rst:586 +msgid "Describes an environment variable that Python uses or defines." +msgstr "" + +#: ../../documentation/markup.rst:589 +msgid "There is also a generic version of these directives:" +msgstr "" + +#: ../../documentation/markup.rst:593 +msgid "" +"This directive produces the same formatting as the specific ones explained " +"above but does not create index entries or cross-referencing targets. It is " +"used, for example, to describe the directives in this document. Example::" +msgstr "" + +#: ../../documentation/markup.rst:603 +msgid "Showing code examples" +msgstr "" + +#: ../../documentation/markup.rst:605 +msgid "" +"Examples of Python source code or interactive sessions are represented using " +"standard reST literal blocks. They are started by a ``::`` at the end of " +"the preceding paragraph and delimited by indentation." +msgstr "" + +#: ../../documentation/markup.rst:609 +msgid "" +"Representing an interactive session requires including the prompts and " +"output along with the Python code. No special markup is required for " +"interactive sessions. After the last line of input or output presented, " +"there should not be an \"unused\" primary prompt; this is an example of what " +"*not* to do:" +msgstr "" + +#: ../../documentation/markup.rst:620 +msgid "Syntax highlighting is handled in a smart way:" +msgstr "" + +#: ../../documentation/markup.rst:622 +msgid "" +"There is a \"highlighting language\" for each source file. By default, this " +"is ``'python'`` as the majority of files will have to highlight Python " +"snippets." +msgstr "" + +#: ../../documentation/markup.rst:626 +msgid "" +"Within Python highlighting mode, interactive sessions are recognized " +"automatically and highlighted appropriately." +msgstr "" + +#: ../../documentation/markup.rst:629 +msgid "" +"The highlighting language can be changed using the ``highlight`` directive, " +"used as follows::" +msgstr "" + +#: ../../documentation/markup.rst:634 +msgid "" +"This language is used until the next ``highlight`` directive is encountered." +msgstr "" + +#: ../../documentation/markup.rst:637 +msgid "" +"The ``code-block`` directive can be used to specify the highlight language " +"of a single code block, e.g.::" +msgstr "" + +#: ../../documentation/markup.rst:648 +msgid "The values normally used for the highlighting language are:" +msgstr "" + +#: ../../documentation/markup.rst:650 +msgid "``python`` (the default)" +msgstr "" + +#: ../../documentation/markup.rst:651 +msgid "``c``" +msgstr "" + +#: ../../documentation/markup.rst:652 +msgid "``rest``" +msgstr "" + +#: ../../documentation/markup.rst:653 +msgid "``none`` (no highlighting)" +msgstr "" + +#: ../../documentation/markup.rst:655 +msgid "" +"If highlighting with the current language fails, the block is not " +"highlighted in any way." +msgstr "" + +#: ../../documentation/markup.rst:658 +msgid "" +"Longer displays of verbatim text may be included by storing the example text " +"in an external file containing only plain text. The file may be included " +"using the ``literalinclude`` directive. [1]_ For example, to include the " +"Python source file :file:`example.py`, use::" +msgstr "" + +#: ../../documentation/markup.rst:665 +msgid "" +"The file name is relative to the current file's path. Documentation-" +"specific include files should be placed in the ``Doc/includes`` subdirectory." +msgstr "" + +#: ../../documentation/markup.rst:672 +msgid "Roles" +msgstr "" + +#: ../../documentation/markup.rst:674 +msgid "" +"As :ref:`previously mentioned `, Sphinx uses interpreted text " +"roles of the form ``:rolename:`content``` to insert semantic markup in " +"documents." +msgstr "" + +#: ../../documentation/markup.rst:678 +msgid "" +"In the CPython documentation, there are a couple common cases where simpler " +"markup should be used:" +msgstr "" + +#: ../../documentation/markup.rst:681 +msgid "``*arg*`` (rendered as *arg*) for function and method arguments." +msgstr "" + +#: ../../documentation/markup.rst:682 +msgid "" +"````True````/````False````/````None```` for ``True``/``False``/``None``." +msgstr "" + +#: ../../documentation/markup.rst:684 +msgid "" +"There are some additional facilities that make cross-referencing roles more " +"versatile:" +msgstr "" + +#: ../../documentation/markup.rst:687 +msgid "" +"You may supply an explicit title and reference target, like in reST direct " +"hyperlinks: ``:role:`title ``` will refer to *target*, but the link " +"text will be *title*." +msgstr "" + +#: ../../documentation/markup.rst:691 +msgid "" +"If you prefix the content with ``!``, no reference/hyperlink will be created." +msgstr "" + +#: ../../documentation/markup.rst:693 +msgid "" +"For the Python object roles, if you prefix the content with ``~``, the link " +"text will only be the last component of the target. For example, ``:meth:" +"`~Queue.Queue.get``` will refer to ``Queue.Queue.get`` but only display " +"``get`` as the link text." +msgstr "" + +#: ../../documentation/markup.rst:698 +msgid "" +"In HTML output, the link's ``title`` attribute (that is e.g. shown as a tool-" +"tip on mouse-hover) will always be the full target name." +msgstr "" + +#: ../../documentation/markup.rst:701 +msgid "" +"The following roles refer to objects in modules and are possibly hyperlinked " +"if a matching identifier is found:" +msgstr "" + +#: ../../documentation/markup.rst:706 +msgid "" +"The name of a module; a dotted name may be used. This should also be used " +"for package names." +msgstr "" + +#: ../../documentation/markup.rst:711 +msgid "" +"The name of a Python function; dotted names may be used. The role text " +"should not include trailing parentheses to enhance readability. The " +"parentheses are stripped when searching for identifiers." +msgstr "" + +#: ../../documentation/markup.rst:717 +msgid "The name of a module-level variable or constant." +msgstr "" + +#: ../../documentation/markup.rst:721 +msgid "" +"The name of a \"defined\" constant. This may be a C-language ``#define`` or " +"a Python variable that is not intended to be changed." +msgstr "" + +#: ../../documentation/markup.rst:726 +msgid "A class name; a dotted name may be used." +msgstr "" + +#: ../../documentation/markup.rst:730 +msgid "" +"The name of a method of an object. The role text should include the type " +"name and the method name. A dotted name may be used." +msgstr "" + +#: ../../documentation/markup.rst:735 +msgid "The name of a data attribute of an object." +msgstr "" + +#: ../../documentation/markup.rst:739 +msgid "The name of an exception. A dotted name may be used." +msgstr "" + +#: ../../documentation/markup.rst:741 +msgid "" +"The name enclosed in this markup can include a module name and/or a class " +"name. For example, ``:func:`filter``` could refer to a function named " +"``filter`` in the current module, or the built-in function of that name. In " +"contrast, ``:func:`foo.filter``` clearly refers to the ``filter`` function " +"in the ``foo`` module." +msgstr "" + +#: ../../documentation/markup.rst:747 +msgid "" +"Normally, names in these roles are searched first without any further " +"qualification, then with the current module name prepended, then with the " +"current module and class name (if any) prepended. If you prefix the name " +"with a dot, this order is reversed. For example, in the documentation of " +"the :mod:`codecs` module, ``:func:`open``` always refers to the built-in " +"function, while ``:func:`.open``` refers to :func:`codecs.open`." +msgstr "" + +#: ../../documentation/markup.rst:754 +msgid "" +"A similar heuristic is used to determine whether the name is an attribute of " +"the currently documented class." +msgstr "" + +#: ../../documentation/markup.rst:759 +msgid "" +"The following roles create cross-references to C-language constructs if they " +"are defined in the API documentation:" +msgstr "" + +#: ../../documentation/markup.rst:764 +msgid "The name of a C-language variable." +msgstr "" + +#: ../../documentation/markup.rst:768 +msgid "The name of a C-language function. Should include trailing parentheses." +msgstr "" + +#: ../../documentation/markup.rst:772 +msgid "The name of a \"simple\" C macro, as defined above." +msgstr "" + +#: ../../documentation/markup.rst:776 +msgid "The name of a C-language type." +msgstr "" + +#: ../../documentation/markup.rst:780 +msgid "The name of a C type member, as defined above." +msgstr "" + +#: ../../documentation/markup.rst:784 +msgid "" +"The following roles do not refer to objects, but can create cross-references " +"or internal links:" +msgstr "" + +#: ../../documentation/markup.rst:789 +msgid "An environment variable. Index entries are generated." +msgstr "" + +#: ../../documentation/markup.rst:793 +msgid "" +"The name of a Python keyword. Using this role will generate a link to the " +"documentation of the keyword. ``True``, ``False`` and ``None`` do not use " +"this role, but simple code markup (````True````), given that they're " +"fundamental to the language and should be known to any programmer." +msgstr "" + +#: ../../documentation/markup.rst:800 +msgid "" +"A command-line option of Python. The leading hyphen(s) must be included. If " +"a matching ``cmdoption`` directive exists, it is linked to. For options of " +"other programs or scripts, use simple ````code```` markup." +msgstr "" + +#: ../../documentation/markup.rst:806 +msgid "" +"The name of a grammar token (used in the reference manual to create links " +"between production displays)." +msgstr "" + +#: ../../documentation/markup.rst:811 +msgid "" +"The following role creates a cross-reference to the term in the glossary:" +msgstr "" + +#: ../../documentation/markup.rst:815 +msgid "" +"Reference to a term in the glossary. The glossary is created using the " +"``glossary`` directive containing a definition list with terms and " +"definitions. It does not have to be in the same file as the ``term`` " +"markup, in fact, by default the Python docs have one global glossary in the " +"``glossary.rst`` file." +msgstr "" + +#: ../../documentation/markup.rst:821 +msgid "" +"If you use a term that's not explained in a glossary, you'll get a warning " +"during build." +msgstr "" + +#: ../../documentation/markup.rst:826 +msgid "" +"The following roles don't do anything special except formatting the text in " +"a different style:" +msgstr "" + +#: ../../documentation/markup.rst:831 +msgid "The name of an OS-level command, such as ``rm``." +msgstr "" + +#: ../../documentation/markup.rst:835 +msgid "" +"Mark the defining instance of a term in the text. (No index entries are " +"generated.)" +msgstr "" + +#: ../../documentation/markup.rst:840 +msgid "" +"The name of a file or directory. Within the contents, you can use curly " +"braces to indicate a \"variable\" part, for example::" +msgstr "" + +#: ../../documentation/markup.rst:845 +msgid "" +"In the built documentation, the ``x`` will be displayed differently to " +"indicate that it is to be replaced by the Python minor version." +msgstr "" + +#: ../../documentation/markup.rst:850 +msgid "" +"Labels presented as part of an interactive user interface should be marked " +"using ``guilabel``. This includes labels from text-based interfaces such as " +"those created using :mod:`curses` or other text-based libraries. Any label " +"used in the interface should be marked with this role, including button " +"labels, window titles, field names, menu and menu selection names, and even " +"values in selection lists." +msgstr "" + +#: ../../documentation/markup.rst:859 +msgid "" +"Mark a sequence of keystrokes. What form the key sequence takes may depend " +"on platform- or application-specific conventions. When there are no " +"relevant conventions, the names of modifier keys should be spelled out, to " +"improve accessibility for new users and non-native speakers. For example, " +"an *xemacs* key sequence may be marked like ``:kbd:`C-x C-f```, but without " +"reference to a specific application or platform, the same sequence should be " +"marked as ``:kbd:`Control-x Control-f```." +msgstr "" + +#: ../../documentation/markup.rst:869 +msgid "" +"The name of an RFC 822-style mail header. This markup does not imply that " +"the header is being used in an email message, but can be used to refer to " +"any header of the same \"style.\" This is also used for headers defined by " +"the various MIME specifications. The header name should be entered in the " +"same way it would normally be found in practice, with the camel-casing " +"conventions being preferred where there is more than one common usage. For " +"example: ``:mailheader:`Content-Type```." +msgstr "" + +#: ../../documentation/markup.rst:879 +msgid "The name of a :command:`make` variable." +msgstr "" + +#: ../../documentation/markup.rst:883 +msgid "" +"A reference to a Unix manual page including the section, e.g. ``:manpage:" +"`ls(1)```." +msgstr "" + +#: ../../documentation/markup.rst:888 +msgid "" +"Menu selections should be marked using the ``menuselection`` role. This is " +"used to mark a complete sequence of menu selections, including selecting " +"submenus and choosing a specific operation, or any subsequence of such a " +"sequence. The names of individual selections should be separated by ``-->``." +msgstr "" + +#: ../../documentation/markup.rst:894 +msgid "" +"For example, to mark the selection \"Start > Programs\", use this markup::" +msgstr "" + +#: ../../documentation/markup.rst:898 +msgid "" +"When including a selection that includes some trailing indicator, such as " +"the ellipsis some operating systems use to indicate that the command opens a " +"dialog, the indicator should be omitted from the selection name." +msgstr "" + +#: ../../documentation/markup.rst:904 +msgid "" +"The name of a MIME type, or a component of a MIME type (the major or minor " +"portion, taken alone)." +msgstr "" + +#: ../../documentation/markup.rst:909 +msgid "The name of a Usenet newsgroup." +msgstr "" + +#: ../../documentation/markup.rst:913 +msgid "" +"The name of an executable program. This may differ from the file name for " +"the executable for some platforms. In particular, the ``.exe`` (or other) " +"extension should be omitted for Windows programs." +msgstr "" + +#: ../../documentation/markup.rst:919 +msgid "A regular expression. Quotes should not be included." +msgstr "" + +#: ../../documentation/markup.rst:923 +msgid "" +"A piece of literal text, such as code. Within the contents, you can use " +"curly braces to indicate a \"variable\" part, as in ``:file:``." +msgstr "" + +#: ../../documentation/markup.rst:926 +msgid "" +"If you don't need the \"variable part\" indication, use the standard " +"````code```` instead." +msgstr "" + +#: ../../documentation/markup.rst:930 +msgid "The following roles generate external links:" +msgstr "" + +#: ../../documentation/markup.rst:934 +msgid "" +"A reference to a Python Enhancement Proposal. This generates appropriate " +"index entries. The text \"PEP *number*\\ \" is generated; in the HTML " +"output, this text is a hyperlink to an online copy of the specified PEP. " +"Such hyperlinks should not be a substitute for properly documenting the " +"language in the manuals." +msgstr "" + +#: ../../documentation/markup.rst:942 +msgid "" +"A reference to an Internet Request for Comments. This generates appropriate " +"index entries. The text \"RFC *number*\\ \" is generated; in the HTML " +"output, this text is a hyperlink to an online copy of the specified RFC." +msgstr "" + +#: ../../documentation/markup.rst:947 +msgid "" +"Note that there are no special roles for including hyperlinks as you can use " +"the standard reST markup for that purpose." +msgstr "" + +#: ../../documentation/markup.rst:954 +msgid "Cross-linking markup" +msgstr "" + +#: ../../documentation/markup.rst:956 +msgid "" +"To support cross-referencing to arbitrary sections in the documentation, the " +"standard reST labels are \"abused\" a bit: Every label must precede a " +"section title; and every label name must be unique throughout the entire " +"documentation source." +msgstr "" + +#: ../../documentation/markup.rst:961 +msgid "" +"You can then reference to these sections using the ``:ref:`label-name``` " +"role." +msgstr "" + +#: ../../documentation/markup.rst:963 ../../documentation/markup.rst:992 +#: ../../documentation/markup.rst:1018 ../../documentation/markup.rst:1028 +#: ../../documentation/markup.rst:1043 ../../documentation/markup.rst:1055 +msgid "Example::" +msgstr "" + +#: ../../documentation/markup.rst:974 +msgid "The ``:ref:`` invocation is replaced with the section title." +msgstr "" + +#: ../../documentation/markup.rst:976 +msgid "" +"Alternatively, you can reference any label (not just section titles) if you " +"provide the link text ``:ref:`link text ```." +msgstr "" + +#: ../../documentation/markup.rst:980 +msgid "Paragraph-level markup" +msgstr "" + +#: ../../documentation/markup.rst:982 +msgid "" +"These directives create short paragraphs and can be used inside information " +"units as well as normal text:" +msgstr "" + +#: ../../documentation/markup.rst:987 +msgid "" +"An especially important bit of information about an API that a user should " +"be aware of when using whatever bit of API the note pertains to. The " +"content of the directive should be written in complete sentences and include " +"all appropriate punctuation." +msgstr "" + +#: ../../documentation/markup.rst:1000 +msgid "" +"An important bit of information about an API that a user should be aware of " +"when using whatever bit of API the warning pertains to. The content of the " +"directive should be written in complete sentences and include all " +"appropriate punctuation. In the interest of not scaring users away from " +"pages filled with warnings, this directive should only be chosen over " +"``note`` for information regarding the possibility of crashes, data loss, or " +"security implications." +msgstr "" + +#: ../../documentation/markup.rst:1010 +msgid "" +"This directive documents the version of Python which added the described " +"feature, or a part of it, to the library or C API. When this applies to an " +"entire module, it should be placed at the top of the module section before " +"any prose." +msgstr "" + +#: ../../documentation/markup.rst:1015 +msgid "" +"The first argument must be given and is the version in question. The second " +"argument is optional and can be used to describe the details of the feature." +msgstr "" + +#: ../../documentation/markup.rst:1024 +msgid "" +"Similar to ``versionadded``, but describes when and what changed in the " +"named feature in some way (new parameters, changed side effects, platform " +"support, etc.). This one *must* have the second argument (explanation of " +"the change)." +msgstr "" + +#: ../../documentation/markup.rst:1033 +msgid "" +"Note that there should be no blank line between the directive head and the " +"explanation; this is to make these blocks visually continuous in the markup." +msgstr "" + +#: ../../documentation/markup.rst:1038 +msgid "Indicates the version from which the described feature is deprecated." +msgstr "" + +#: ../../documentation/markup.rst:1040 +msgid "" +"There is one required argument: the version from which the feature is " +"deprecated." +msgstr "" + +#: ../../documentation/markup.rst:1049 +msgid "" +"Like ``deprecated``, but it also indicates in which version the feature is " +"removed." +msgstr "" + +#: ../../documentation/markup.rst:1052 +msgid "" +"There are two required arguments: the version from which the feature is " +"deprecated, and the version in which the feature is removed." +msgstr "" + +#: ../../documentation/markup.rst:1061 +msgid "" +"This directive is used to mark CPython-specific information. Use either " +"with a block content or a single sentence as an argument, i.e. either ::" +msgstr "" + +#: ../../documentation/markup.rst:1070 +msgid "or ::" +msgstr "" + +#: ../../documentation/markup.rst:1074 +msgid "" +"\"\\ **CPython implementation detail:**\\ \" is automatically prepended to " +"the content." +msgstr "" + +#: ../../documentation/markup.rst:1079 +msgid "" +"Many sections include a list of references to module documentation or " +"external documents. These lists are created using the ``seealso`` directive." +msgstr "" + +#: ../../documentation/markup.rst:1082 +msgid "" +"The ``seealso`` directive is typically placed in a section just before any " +"sub-sections. For the HTML output, it is shown boxed off from the main flow " +"of the text." +msgstr "" + +#: ../../documentation/markup.rst:1086 +msgid "" +"The content of the ``seealso`` directive should be a reST definition list. " +"Example::" +msgstr "" + +#: ../../documentation/markup.rst:1099 +msgid "" +"This directive creates a paragraph heading that is not used to create a " +"table of contents node. It is currently used for the \"Footnotes\" caption." +msgstr "" + +#: ../../documentation/markup.rst:1104 +msgid "" +"This directive creates a centered boldfaced paragraph. Use it as follows::" +msgstr "" + +#: ../../documentation/markup.rst:1112 +msgid "Table-of-contents markup" +msgstr "" + +#: ../../documentation/markup.rst:1114 +msgid "" +"Since reST does not have facilities to interconnect several documents, or " +"split documents into multiple output files, Sphinx uses a custom directive " +"to add relations between the single files the documentation is made of, as " +"well as tables of contents. The ``toctree`` directive is the central " +"element." +msgstr "" + +#: ../../documentation/markup.rst:1121 +msgid "" +"This directive inserts a \"TOC tree\" at the current location, using the " +"individual TOCs (including \"sub-TOC trees\") of the files given in the " +"directive body. A numeric ``maxdepth`` option may be given to indicate the " +"depth of the tree; by default, all levels are included." +msgstr "" + +#: ../../documentation/markup.rst:1126 +msgid "Consider this example (taken from the library reference index)::" +msgstr "" + +#: ../../documentation/markup.rst:1137 +msgid "This accomplishes two things:" +msgstr "" + +#: ../../documentation/markup.rst:1139 +msgid "" +"Tables of contents from all those files are inserted, with a maximum depth " +"of two, that means one nested heading. ``toctree`` directives in those " +"files are also taken into account." +msgstr "" + +#: ../../documentation/markup.rst:1142 +msgid "" +"Sphinx knows that the relative order of the files ``intro``, ``strings`` and " +"so forth, and it knows that they are children of the shown file, the library " +"index. From this information it generates \"next chapter\", \"previous " +"chapter\" and \"parent chapter\" links." +msgstr "" + +#: ../../documentation/markup.rst:1147 +msgid "" +"In the end, all files included in the build process must occur in one " +"``toctree`` directive; Sphinx will emit a warning if it finds a file that is " +"not included, because that means that this file will not be reachable " +"through standard navigation." +msgstr "" + +#: ../../documentation/markup.rst:1152 +msgid "" +"The special file ``contents.rst`` at the root of the source directory is the " +"\"root\" of the TOC tree hierarchy; from it the \"Contents\" page is " +"generated." +msgstr "" + +#: ../../documentation/markup.rst:1157 +msgid "Index-generating markup" +msgstr "" + +#: ../../documentation/markup.rst:1159 +msgid "" +"Sphinx automatically creates index entries from all information units (like " +"functions, classes or attributes) like discussed before." +msgstr "" + +#: ../../documentation/markup.rst:1162 +msgid "" +"However, there is also an explicit directive available, to make the index " +"more comprehensive and enable index entries in documents where information " +"is not mainly contained in information units, such as the language reference." +msgstr "" + +#: ../../documentation/markup.rst:1166 +msgid "" +"The directive is ``index`` and contains one or more index entries. Each " +"entry consists of a type and a value, separated by a colon." +msgstr "" + +#: ../../documentation/markup.rst:1177 +msgid "" +"This directive contains five entries, which will be converted to entries in " +"the generated index which link to the exact location of the index statement " +"(or, in case of offline media, the corresponding page number)." +msgstr "" + +#: ../../documentation/markup.rst:1181 +msgid "The possible entry types are:" +msgstr "" + +#: ../../documentation/markup.rst:1185 +msgid "single" +msgstr "" + +#: ../../documentation/markup.rst:1184 +msgid "" +"Creates a single index entry. Can be made a subentry by separating the " +"subentry text with a semicolon (this notation is also used below to describe " +"what entries are created)." +msgstr "" + +#: ../../documentation/markup.rst:1188 +msgid "pair" +msgstr "" + +#: ../../documentation/markup.rst:1188 +msgid "" +"``pair: loop; statement`` is a shortcut that creates two index entries, " +"namely ``loop; statement`` and ``statement; loop``." +msgstr "" + +#: ../../documentation/markup.rst:1192 +msgid "triple" +msgstr "" + +#: ../../documentation/markup.rst:1191 +msgid "" +"Likewise, ``triple: module; search; path`` is a shortcut that creates three " +"index entries, which are ``module; search path``, ``search; path, module`` " +"and ``path; module search``." +msgstr "" + +#: ../../documentation/markup.rst:1198 +msgid "module, keyword, operator, object, exception, statement, builtin" +msgstr "" + +#: ../../documentation/markup.rst:1195 +msgid "" +"These all create two index entries. For example, ``module: hashlib`` " +"creates the entries ``module; hashlib`` and ``hashlib; module``. The " +"builtin entry type is slightly different in that \"built-in function\" is " +"used in place of \"builtin\" when creating the two entries." +msgstr "" + +#: ../../documentation/markup.rst:1200 +msgid "" +"For index directives containing only \"single\" entries, there is a " +"shorthand notation::" +msgstr "" + +#: ../../documentation/markup.rst:1205 +msgid "This creates four index entries." +msgstr "" + +#: ../../documentation/markup.rst:1209 +msgid "Grammar production displays" +msgstr "" + +#: ../../documentation/markup.rst:1211 +msgid "" +"Special markup is available for displaying the productions of a formal " +"grammar. The markup is simple and does not attempt to model all aspects of " +"BNF (or any derived forms), but provides enough to allow context-free " +"grammars to be displayed in a way that causes uses of a symbol to be " +"rendered as hyperlinks to the definition of the symbol. There is this " +"directive:" +msgstr "" + +#: ../../documentation/markup.rst:1219 +msgid "" +"This directive is used to enclose a group of productions. Each production " +"is given on a single line and consists of a name, separated by a colon from " +"the following definition. If the definition spans multiple lines, each " +"continuation line must begin with a colon placed at the same column as in " +"the first line." +msgstr "" + +#: ../../documentation/markup.rst:1225 +msgid "" +"Blank lines are not allowed within ``productionlist`` directive arguments." +msgstr "" + +#: ../../documentation/markup.rst:1227 +msgid "" +"The definition can contain token names which are marked as interpreted text " +"(e.g. ``unaryneg ::= \"-\" `integer```) -- this generates cross-references " +"to the productions of these tokens." +msgstr "" + +#: ../../documentation/markup.rst:1231 +msgid "" +"Note that no further reST parsing is done in the production, so that you " +"don't have to escape ``*`` or ``|`` characters." +msgstr "" + +#: ../../documentation/markup.rst:1237 +msgid "The following is an example taken from the Python Reference Manual::" +msgstr "" + +#: ../../documentation/markup.rst:1250 +msgid "Substitutions" +msgstr "" + +#: ../../documentation/markup.rst:1252 +msgid "" +"The documentation system provides three substitutions that are defined by " +"default. They are set in the build configuration file :file:`conf.py`." +msgstr "" + +#: ../../documentation/markup.rst:1257 +msgid "" +"Replaced by the Python release the documentation refers to. This is the " +"full version string including alpha/beta/release candidate tags, e.g. " +"``2.5.2b3``." +msgstr "" + +#: ../../documentation/markup.rst:1262 +msgid "" +"Replaced by the Python version the documentation refers to. This consists " +"only of the major and minor version parts, e.g. ``2.5``, even for version " +"2.5.1." +msgstr "" + +#: ../../documentation/markup.rst:1268 +msgid "" +"Replaced by either today's date, or the date set in the build configuration " +"file. Normally has the format ``April 14, 2007``." +msgstr "" + +#: ../../documentation/markup.rst:1274 +msgid "" +"There is a standard ``include`` directive, but it raises errors if the file " +"is not found. This one only emits a warning." +msgstr "" + +#: ../../documentation/start-documenting.rst:6 +#: ../../getting-started/index.rst:3 +msgid "Getting Started" +msgstr "Primeiros passos" + +#: ../../documentation/start-documenting.rst:10 +msgid "" +"The Python language has a substantial body of documentation, much of it " +"contributed by various authors. The markup used for the Python documentation " +"is `reStructuredText`_, developed by the `docutils`_ project, amended by " +"custom directives and using a toolset named `Sphinx`_ to post-process the " +"HTML output." +msgstr "" +"A linguagem Python possui um corpo substancial de documentação, em grande " +"parte contribuição de vários autores. A marcação usada para a documentação " +"do Python é `reStructuredText`_, desenvolvida pelo projeto `docutils`_, " +"alterada por diretivas personalizadas e usando um conjunto de ferramentas " +"chamado `Sphinx`_ para pós-processar a saída HTML." + +#: ../../documentation/start-documenting.rst:15 +msgid "" +"The documentation in HTML, PDF or EPUB format is generated from text files " +"written using the :ref:`reStructuredText format ` and contained in " +"the :ref:`CPython Git repository `." +msgstr "" +"A documentação em formato HTML, PDF ou EPUB é gerada a partir de arquivos de " +"texto escritos usando o formato :ref:`reStructuredText ` e contidos " +"no repositório :ref:`Git do CPython `." + +#: ../../documentation/start-documenting.rst:23 +msgid "" +"If you're interested in contributing to Python's documentation, there's no " +"need to write reStructuredText if you're not so inclined; plain text " +"contributions are more than welcome as well. Send an e-mail to docs@python." +"org or open an issue on the :ref:`tracker `." +msgstr "" +"Se você estiver interessado em contribuir com a documentação do Python, não " +"há necessidade de escrever reStructuredText se você não quiser; " +"contribuições em texto simples também são mais do que bem-vindas. Envie um e-" +"mail para docs@python.org ou abra um relatório de problemas no :ref:" +"`rastreador `." + +#: ../../documentation/start-documenting.rst:30 +#: ../../getting-started/pull-request-lifecycle.rst:12 +msgid "Introduction" +msgstr "Introdução" + +#: ../../documentation/start-documenting.rst:32 +msgid "" +"Python's documentation has long been considered to be good for a free " +"programming language. There are a number of reasons for this, the most " +"important being the early commitment of Python's creator, Guido van Rossum, " +"to providing documentation on the language and its libraries, and the " +"continuing involvement of the user community in providing assistance for " +"creating and maintaining documentation." +msgstr "" +"A documentação do Python há muito é considerada boa para uma linguagem de " +"programação livre. Há uma série de razões para isso, sendo a mais importante " +"o compromisso inicial do criador do Python, Guido van Rossum, em fornecer " +"documentação sobre a linguagem e suas bibliotecas, e o envolvimento contínuo " +"da comunidade de usuários em fornecer assistência para criar e manter a " +"documentação." + +#: ../../documentation/start-documenting.rst:39 +msgid "" +"The involvement of the community takes many forms, from authoring to bug " +"reports to just plain complaining when the documentation could be more " +"complete or easier to use." +msgstr "" +"O envolvimento da comunidade assume muitas formas, desde a criação de " +"relatórios de bugs até a simples reclamação quando a documentação pode ser " +"mais completa ou mais fácil de usar." + +#: ../../documentation/start-documenting.rst:43 +msgid "" +"This section is aimed at authors and potential authors of documentation for " +"Python. More specifically, it is for people contributing to the standard " +"documentation and developing additional documents using the same tools as " +"the standard documents. This guide will be less useful for authors using " +"the Python documentation tools for topics other than Python, and less useful " +"still for authors not using the tools at all." +msgstr "" +"Esta seção é destinada a autores e potenciais autores de documentação para " +"Python. Mais especificamente, é para pessoas que contribuem para a " +"documentação padrão e desenvolvem documentos adicionais usando as mesmas " +"ferramentas dos documentos padrão. Este guia será menos útil para autores " +"que usam as ferramentas de documentação do Python para tópicos diferentes do " +"Python e menos útil ainda para autores que não usam as ferramentas." + +#: ../../documentation/start-documenting.rst:50 +msgid "" +"If your interest is in contributing to the Python documentation, but you " +"don't have the time or inclination to learn reStructuredText and the markup " +"structures documented here, there's a welcoming place for you among the " +"Python contributors as well. Any time you feel that you can clarify " +"existing documentation or provide documentation that's missing, the existing " +"documentation team will gladly work with you to integrate your text, dealing " +"with the markup for you. Please don't let the material in this section stand " +"between the documentation and your desire to help out!" +msgstr "" +"Se seu interesse é contribuir para a documentação do Python, mas você não " +"tem tempo ou inclinação para aprender reStructuredText e as estruturas de " +"marcação documentadas aqui, também há um lugar de boas-vindas para você " +"entre os contribuidores do Python. Sempre que você sentir que pode " +"esclarecer a documentação existente ou fornecer a documentação que está " +"faltando, a equipe de documentação existente trabalhará com você para " +"integrar seu texto, lidando com a marcação para você. Por favor, não deixe o " +"material desta seção ficar entre a documentação e seu desejo de ajudar!" + +#: ../../documentation/start-documenting.rst:63 +msgid "Building the documentation" +msgstr "Construindo a documentação" + +#: ../../documentation/start-documenting.rst:67 +msgid "" +"The toolset used to build the docs is written in Python and is called " +"Sphinx_. Sphinx is maintained separately and is not included in this tree. " +"Also needed are blurb_, a tool to create :file:`Misc/NEWS` on demand; and " +"python-docs-theme_, the Sphinx theme for the Python documentation." +msgstr "" +"O conjunto de ferramentas usado para construir a documentação é escrito em " +"Python e é chamado Sphinx_. O Sphinx é mantido separadamente e não está " +"incluído nesta árvore. Também são necessários o blurb_, uma ferramenta para " +"criar :file:`Misc/NEWS` sob demanda; e python-docs-theme_, o tema Sphinx " +"para a documentação do Python." + +#: ../../documentation/start-documenting.rst:72 +msgid "" +"To build the documentation, follow the instructions from one of the sections " +"below. You can view the documentation after building the HTML by pointing a " +"browser at the file :file:`Doc/build/html/index.html`." +msgstr "" +"Para criar a documentação, siga as instruções de uma das seções abaixo. Você " +"pode ver a documentação depois de construir o HTML apontando um navegador " +"para o arquivo :file:`Doc/build/html/index.html`." + +#: ../../documentation/start-documenting.rst:76 +msgid "" +"You are expected to have installed the latest stable version of Sphinx_ and " +"blurb_ on your system or in a virtualenv_ (which can be created using ``make " +"venv``), so that the Makefile can find the ``sphinx-build`` command. You " +"can also specify the location of ``sphinx-build`` with the ``SPHINXBUILD`` :" +"command:`make` variable." +msgstr "" +"Espera-se que você tenha instalado a última versão estável do Sphinx_ e " +"blurb_ em seu sistema ou em um virtualenv_ (que pode ser criado usando " +"``make venv``), para que o Makefile possa encontrar o comando ``sphinx-" +"build`` . Você também pode especificar a localização do ``sphinx-build`` com " +"a variável ``SPHINXBUILD`` do :command:`make`." + +#: ../../documentation/start-documenting.rst:86 +msgid "Using make / make.bat" +msgstr "Usando make / make.bat" + +#: ../../documentation/start-documenting.rst:88 +msgid "" +"**On Unix**, run the following from the root of your :ref:`repository clone " +"` to build the output as HTML::" +msgstr "" +"**No Unix**, execute o seguinte a partir da raiz do seu :ref:`clone do " +"repositório ` para criar a saída como HTML::" + +#: ../../documentation/start-documenting.rst:95 +msgid "" +"or alternatively ``make -C Doc/ venv html``. ``htmlview`` can be used " +"instead of ``html`` to conveniently open the docs in a browser once the " +"build completes." +msgstr "" +"ou alternativamente ``make -C Doc/ venv html``. ``htmlview`` pode ser usado " +"em vez de ``html`` para abrir convenientemente os documentos em um navegador " +"assim que a compilação for concluída." + +#: ../../documentation/start-documenting.rst:99 +msgid "" +"You can also use ``make help`` to see a list of targets supported by :" +"command:`make`. Note that ``make check`` is automatically run when you " +"submit a :ref:`pull request `, so you should make sure that it " +"runs without errors." +msgstr "" +"Você também pode usar ``make help`` para ver uma lista de destinos " +"suportados por :command:`make`. Observe que ``make check`` é executado " +"automaticamente quando você envia uma :ref:`pull request `, " +"portanto, você deve se certificar de que ele seja executado sem erros." + +#: ../../documentation/start-documenting.rst:104 +msgid "" +"**On Windows**, the :cpy-file:`Doc/make.bat` batchfile tries to emulate :" +"command:`make` as closely as possible, but the venv target is not " +"implemented, so you will probably want to make sure you are working in a " +"virtual environment before proceeding, otherwise all dependencies will be " +"automatically installed on your system." +msgstr "" +"**No Windows**, o arquivo batch :cpy-file:`Doc/make.bat` tenta emular :" +"command:`make` o mais próximo possível, mas o alvo venv não está " +"implementado, então você provavelmente vai querer se certificar de estar " +"trabalhando em um ambiente virtual antes de prosseguir, caso contrário, " +"todas as dependências serão instaladas automaticamente em seu sistema." + +#: ../../documentation/start-documenting.rst:110 +msgid "" +"When ready, run the following from the root of your :ref:`repository clone " +"` to build the output as HTML::" +msgstr "" +"Quando estiver pronto, execute o seguinte a partir da raiz do seu :ref:" +"`clone do repositório ` para criar a saída como HTML::" + +#: ../../documentation/start-documenting.rst:116 +msgid "" +"You can also use ``make help`` to see a list of targets supported by :cpy-" +"file:`Doc/make.bat`." +msgstr "" +"Você também pode usar ``make help`` para ver uma lista de destinos " +"suportados por :cpy-file:`Doc/make.bat`." + +#: ../../documentation/start-documenting.rst:119 +msgid "See also :cpy-file:`Doc/README.rst` for more information." +msgstr "Veja também :cpy-file:`Doc/README.rst` para mais informações." + +#: ../../documentation/start-documenting.rst:122 +msgid "Using sphinx-build" +msgstr "Usando sphinx-build" + +#: ../../documentation/start-documenting.rst:124 +msgid "" +"Sometimes we directly want to execute the sphinx-build tool instead of " +"through ``make`` (although the latter is still the preferred way). In this " +"case, you can use the following command line from the ``Doc`` directory " +"(make sure to install Sphinx_, blurb_ and python-docs-theme_ packages from " +"PyPI)::" +msgstr "" +"Às vezes, queremos executar diretamente a ferramenta sphinx-build em vez de " +"através do ``make`` (embora o último ainda seja o modo preferido). Neste " +"caso, você pode usar a seguinte linha de comando do diretório ``Doc`` " +"(certifique-se de instalar os pacotes Sphinx_, blurb_ e python-docs-theme_ " +"do PyPI)::" + +#: ../../documentation/start-documenting.rst:131 +msgid "" +"where ```` is one of html, text, latex, or htmlhelp (for " +"explanations see the make targets above)." +msgstr "" +"onde ```` é html, text, latex ou htmlhelp (para explicações veja os " +"alvos make acima)." + +#: ../../documentation/start-documenting.rst:143 +#: ../../documentation/style-guide.rst:5 +msgid "Style Guide" +msgstr "Guia de estilo" + +#: ../../documentation/start-documenting.rst:145 +msgid "Moved to :doc:`style-guide`" +msgstr "Movido para :doc:`style-guide`" + +#: ../../documentation/start-documenting.rst:149 +#: ../../documentation/translating.rst:5 +msgid "Translating" +msgstr "Tradução" + +#: ../../documentation/start-documenting.rst:151 +msgid "Moved to :doc:`translating`" +msgstr "Movido para :doc:`translating`" + +#: ../../documentation/style-guide.rst:9 +msgid "This document describes the style guide for our documentation." +msgstr "Este documento descreve o guia de estilo para nossa documentação." + +#: ../../documentation/style-guide.rst:13 +msgid "Use of whitespace" +msgstr "Uso de espaço em branco" + +#: ../../documentation/style-guide.rst:15 +msgid "" +"All reST files use an indentation of 3 spaces; no tabs are allowed. The " +"maximum line length is 80 characters for normal text, but tables, deeply " +"indented code samples and long links may extend beyond that. Code example " +"bodies should use normal Python 4-space indentation." +msgstr "" +"Todos os arquivos reST usam um recuo de 3 espaços; tabulação não é " +"permitida. O comprimento máximo da linha é de 80 caracteres para texto " +"normal, mas tabelas, amostras de código profundamente recuadas e links " +"longos podem se estender além disso. Corpos de exemplo de código devem usar " +"recuo normal de 4 espaços do Python." + +#: ../../documentation/style-guide.rst:20 +msgid "" +"Make generous use of blank lines where applicable; they help group things " +"together." +msgstr "" +"Faça uso generoso de linhas em branco quando aplicável; eles ajudam a " +"agrupar as coisas." + +#: ../../documentation/style-guide.rst:23 +msgid "" +"A sentence-ending period may be followed by one or two spaces; while reST " +"ignores the second space, it is customarily put in by some users, for " +"example to aid Emacs' auto-fill mode." +msgstr "" +"Um ponto final de frase pode ser seguido por um ou dois espaços; enquanto o " +"reST ignora o segundo espaço, ele é normalmente inserido por alguns " +"usuários, por exemplo, para auxiliar o modo de preenchimento automático do " +"Emacs." + +#: ../../documentation/style-guide.rst:30 +msgid "" +"Footnotes are generally discouraged, though they may be used when they are " +"the best way to present specific information. When a footnote reference is " +"added at the end of the sentence, it should follow the sentence-ending " +"punctuation. The reST markup should appear something like this::" +msgstr "" +"Notas de rodapé são geralmente desencorajadas, embora possam ser usadas " +"quando são a melhor maneira de apresentar informações específicas. Quando " +"uma referência de nota de rodapé é adicionada no final da frase, ela deve " +"seguir a pontuação final da frase. A marcação reST deve aparecer mais ou " +"menos assim::" + +#: ../../documentation/style-guide.rst:37 +msgid "" +"Footnotes should be gathered at the end of a file, or if the file is very " +"long, at the end of a section. The docutils will automatically create " +"backlinks to the footnote reference." +msgstr "" +"As notas de rodapé devem ser reunidas no final de um arquivo ou, se o " +"arquivo for muito longo, no final de uma seção. Os docutils criarão " +"automaticamente backlinks (em uma tradução literal, \"links de volta\") para " +"a referência da nota de rodapé." + +#: ../../documentation/style-guide.rst:41 +msgid "Footnotes may appear in the middle of sentences where appropriate." +msgstr "" +"As notas de rodapé podem aparecer no meio das frases, quando apropriado." + +#: ../../documentation/style-guide.rst:44 +msgid "Capitalization" +msgstr "Maiusculização" + +#: ../../documentation/style-guide.rst:-1 +msgid "Sentence case" +msgstr "Sentence case" + +#: ../../documentation/style-guide.rst:48 +msgid "" +"Sentence case is a set of capitalization rules used in English sentences: " +"the first word is always capitalized and other words are only capitalized if " +"there is a specific rule requiring it." +msgstr "" +"*Sentence case* é um conjunto de regras de maiusculização usadas em frases " +"em inglês: a primeira palavra é sempre maiúscula e as outras palavras só são " +"maiúsculas se houver uma regra específica que o exija." + +#: ../../documentation/style-guide.rst:52 +msgid "" +"In the Python documentation, the use of sentence case in section titles is " +"preferable, but consistency within a unit is more important than following " +"this rule. If you add a section to a chapter where most sections are in " +"title case, you can either convert all titles to sentence case or use the " +"dominant style in the new section title." +msgstr "" +"Na documentação do Python, é preferível usar maiúsculas e minúsculas nos " +"títulos das seções, mas a consistência dentro de uma unidade é mais " +"importante do que seguir essa regra. Se você adicionar uma seção a um " +"capítulo onde a maioria das seções está em letras maiúsculas e minúsculas, " +"você pode converter todos os títulos em letras maiúsculas e minúsculas ou " +"usar o estilo dominante no novo título da seção." + +#: ../../documentation/style-guide.rst:58 +msgid "" +"Sentences that start with a word for which specific rules require starting " +"it with a lower case letter should be avoided." +msgstr "" +"Devem ser evitadas as frases que começam com uma palavra cujas regras " +"específicas exigem que comece com uma letra minúscula." + +#: ../../documentation/style-guide.rst:63 +msgid "" +"Sections that describe a library module often have titles in the form of " +"\"modulename --- Short description of the module.\" In this case, the " +"description should be capitalized as a stand-alone sentence." +msgstr "" +"As seções que descrevem um módulo de biblioteca geralmente têm títulos na " +"forma de \"nomemódulo --- breve descrição do módulo.\" Nesse caso, a " +"descrição deve ser escrita em letras maiúsculas como uma frase independente." + +#: ../../documentation/style-guide.rst:68 +msgid "" +"Many special names are used in the Python documentation, including the names " +"of operating systems, programming languages, standards bodies, and the like. " +"Most of these entities are not assigned any special markup, but the " +"preferred spellings are given here to aid authors in maintaining the " +"consistency of presentation in the Python documentation." +msgstr "" +"Muitos nomes especiais são usados na documentação do Python, incluindo nomes " +"de sistemas operacionais, linguagens de programação, corpos de padrões e " +"similares. A maioria dessas entidades não recebe nenhuma marcação especial, " +"mas as grafias preferidas são dadas aqui para ajudar os autores a manter a " +"consistência da apresentação na documentação do Python." + +#: ../../documentation/style-guide.rst:74 +msgid "" +"Other terms and words deserve special mention as well; these conventions " +"should be used to ensure consistency throughout the documentation:" +msgstr "" +"Outros termos e palavras também merecem menção especial; essas convenções " +"devem ser usadas para garantir a consistência em toda a documentação:" + +#: ../../documentation/style-guide.rst:83 +msgid "CPU" +msgstr "CPU" + +#: ../../documentation/style-guide.rst:78 +msgid "" +"For \"central processing unit.\" Many style guides say this should be " +"spelled out on the first use (and if you must use it, do so!). For the " +"Python documentation, this abbreviation should be avoided since there's no " +"reasonable way to predict which occurrence will be the first seen by the " +"reader. It is better to use the word \"processor\" instead." +msgstr "" +"Para \"central processing unit\", ou unidade central de processamento em " +"português. Muitos guias de estilo dizem que isso deve ser explicado no " +"primeiro uso (e se você precisar usá-lo, faça-o!). Para a documentação do " +"Python, essa abreviação deve ser evitada, pois não há uma maneira razoável " +"de prever qual ocorrência será vista pela primeira vez pelo leitor. É melhor " +"usar a palavra *processor* (em português, processador)." + +#: ../../documentation/style-guide.rst:87 +msgid "POSIX" +msgstr "POSIX" + +#: ../../documentation/style-guide.rst:86 +msgid "" +"The name assigned to a particular group of standards. This is always " +"uppercase." +msgstr "" +"O nome atribuído a um determinado grupo de padrões. Isso está sempre em " +"maiúsculo." + +#: ../../documentation/style-guide.rst:90 +msgid "Python" +msgstr "Python" + +#: ../../documentation/style-guide.rst:90 +msgid "The name of our favorite programming language is always capitalized." +msgstr "O nome da nossa linguagem de programação favorita é sempre maiúsculo." + +#: ../../documentation/style-guide.rst:95 +msgid "reST" +msgstr "reST" + +#: ../../documentation/style-guide.rst:93 +msgid "" +"For \"reStructuredText,\" an easy to read, plaintext markup syntax used to " +"produce Python documentation. When spelled out, it is always one word and " +"both forms start with a lower case 'r'." +msgstr "" +"Para \"reStructuredText\", uma sintaxe de marcação de texto simples e fácil " +"de ler usada para produzir a documentação do Python. Quando soletrado, é " +"sempre uma palavra e ambas as formas começam com um 'r' minúsculo." + +#: ../../documentation/style-guide.rst:99 +msgid "Unicode" +msgstr "Unicode" + +#: ../../documentation/style-guide.rst:98 +msgid "" +"The name of a character coding system. This is always written capitalized." +msgstr "" +"O nome de um sistema de codificação de caracteres. Isso é sempre escrito com " +"primeira letra maiúscula." + +#: ../../documentation/style-guide.rst:103 +#: ../../getting-started/setup-building.rst:149 +msgid "Unix" +msgstr "Unix" + +#: ../../documentation/style-guide.rst:102 +msgid "" +"The name of the operating system developed at AT&T Bell Labs in the early " +"1970s." +msgstr "" +"O nome do sistema operacional desenvolvido no AT&T Bell Labs no início dos " +"anos 1970." + +#: ../../documentation/style-guide.rst:106 +msgid "Affirmative Tone" +msgstr "Tome afirmativo" + +#: ../../documentation/style-guide.rst:108 +msgid "" +"The documentation focuses on affirmatively stating what the language does " +"and how to use it effectively." +msgstr "" +"A documentação se concentra em afirmar afirmativamente o que a linguagem faz " +"e como usá-la de forma eficaz." + +#: ../../documentation/style-guide.rst:111 +msgid "" +"Except for certain security or segfault risks, the docs should avoid wording " +"along the lines of \"feature x is dangerous\" or \"experts only\". These " +"kinds of value judgments belong in external blogs and wikis, not in the core " +"documentation." +msgstr "" +"Exceto para certos riscos de segurança ou falha de segmentação, os " +"documentos devem evitar palavras como \"o recurso x é perigoso\" ou " +"\"somente para especialistas\". Esses tipos de julgamentos de valor " +"pertencem a blogs e wikis externos, não à documentação central." + +#: ../../documentation/style-guide.rst:116 +msgid "Bad example (creating worry in the mind of a reader):" +msgstr "Mau exemplo (criando preocupação na mente do leitor):" + +#: ../../documentation/style-guide.rst:118 +msgid "" +"Warning: failing to explicitly close a file could result in lost data or " +"excessive resource consumption. Never rely on reference counting to " +"automatically close a file." +msgstr "" +"Aviso: deixar de fechar explicitamente um arquivo pode resultar em perda de " +"dados ou consumo excessivo de recursos. Nunca confie na contagem de " +"referências para fechar um arquivo automaticamente." + +#: ../../documentation/style-guide.rst:122 +msgid "" +"Good example (establishing confident knowledge in the effective use of the " +"language):" +msgstr "" +"Bom exemplo (estabelecendo conhecimento confiante no uso efetivo do idioma):" + +#: ../../documentation/style-guide.rst:125 +msgid "" +"A best practice for using files is use a try/finally pair to explicitly " +"close a file after it is used. Alternatively, using a with-statement can " +"achieve the same effect. This assures that files are flushed and file " +"descriptor resources are released in a timely manner." +msgstr "" +"Uma prática recomendada para usar arquivos é usar um par try/finally para " +"fechar explicitamente um arquivo após ele ser usado. Como alternativa, usar " +"uma instrução with pode obter o mesmo efeito. Isso garante que os arquivos " +"sejam liberados e os recursos do descritor de arquivo sejam liberados em " +"tempo hábil." + +#: ../../documentation/style-guide.rst:131 +msgid "Economy of Expression" +msgstr "Economia de expressão" + +#: ../../documentation/style-guide.rst:133 +msgid "" +"More documentation is not necessarily better documentation. Err on the side " +"of being succinct." +msgstr "" +"Mais documentação não é necessariamente melhor documentação. Erre sendo " +"sucinto." + +#: ../../documentation/style-guide.rst:136 +msgid "" +"It is an unfortunate fact that making documentation longer can be an " +"impediment to understanding and can result in even more ways to misread or " +"misinterpret the text. Long descriptions full of corner cases and caveats " +"can create the impression that a function is more complex or harder to use " +"than it actually is." +msgstr "" +"É um fato lamentável que tornar a documentação mais longa pode ser um " +"impedimento para a compreensão e pode resultar em ainda mais maneiras de ler " +"ou interpretar mal o texto. Descrições longas cheias de casos e advertências " +"podem criar a impressão de que uma função é mais complexa ou mais difícil de " +"usar do que realmente é." + +#: ../../documentation/style-guide.rst:142 +msgid "Security Considerations (and Other Concerns)" +msgstr "Considerações de segurança (e outras preocupações)" + +#: ../../documentation/style-guide.rst:144 +msgid "" +"Some modules provided with Python are inherently exposed to security issues " +"(e.g. shell injection vulnerabilities) due to the purpose of the module (e." +"g. :mod:`ssl`). Littering the documentation of these modules with red " +"warning boxes for problems that are due to the task at hand, rather than " +"specifically to Python's support for that task, doesn't make for a good " +"reading experience." +msgstr "" +"Alguns módulos fornecidos com o Python são inerentemente expostos a " +"problemas de segurança (por exemplo, vulnerabilidades de injeção de shell) " +"devido ao propósito do módulo (por exemplo: :mod:`ssl`). Preencher a " +"documentação desses módulos com caixas de aviso vermelhas para problemas " +"devidos à tarefa em questão, em vez de especificamente ao suporte do Python " +"para essa tarefa, não contribui para uma boa experiência de leitura." + +#: ../../documentation/style-guide.rst:151 +msgid "" +"Instead, these security concerns should be gathered into a dedicated " +"\"Security Considerations\" section within the module's documentation, and " +"cross-referenced from the documentation of affected interfaces with a note " +"similar to :samp:`\"Please refer to the :ref:\\`{security-considerations}\\` " +"section for important information on how to avoid common mistakes.\"`." +msgstr "" +"Em vez disso, essas questões de segurança devem ser reunidas em uma seção " +"dedicada \"Security Considerations\" (em português, Considerações de " +"segurança) dentro da documentação do módulo e com referência cruzada da " +"documentação das interfaces afetadas com uma nota semelhante a :samp:" +"`\"Please refer to the :ref:\\`{security-considerations}\\` section for " +"important information on how to avoid common mistakes.\"`." + +#: ../../documentation/style-guide.rst:157 +msgid "" +"Similarly, if there is a common error that affects many interfaces in a " +"module (e.g. OS level pipe buffers filling up and stalling child processes), " +"these can be documented in a \"Common Errors\" section and cross-referenced " +"rather than repeated for every affected interface." +msgstr "" +"Da mesma forma, se houver um erro comum que afete muitas interfaces em um " +"módulo (por exemplo, buffers de tubo de nível do sistema operacional " +"enchendo e paralisando processos filho), eles podem ser documentados em uma " +"seção \"Common Errors\" (em português, Erros comuns) e referenciados em vez " +"de repetidos para cada afetado interface." + +#: ../../documentation/style-guide.rst:163 +msgid "Code Examples" +msgstr "Exemplos de códigos" + +#: ../../documentation/style-guide.rst:165 +msgid "" +"Short code examples can be a useful adjunct to understanding. Readers can " +"often grasp a simple example more quickly than they can digest a formal " +"description in prose." +msgstr "" +"Exemplos de códigos curtos podem ser um complemento útil para a compreensão. " +"Os leitores muitas vezes podem compreender um exemplo simples mais " +"rapidamente do que digerir uma descrição formal em prosa." + +#: ../../documentation/style-guide.rst:169 +msgid "" +"People learn faster with concrete, motivating examples that match the " +"context of a typical use case. For instance, the :meth:`str.rpartition` " +"method is better demonstrated with an example splitting the domain from a " +"URL than it would be with an example of removing the last word from a line " +"of Monty Python dialog." +msgstr "" +"As pessoas aprendem mais rápido com exemplos concretos e motivadores que " +"correspondem ao contexto de um caso de uso típico. Por exemplo, o método :" +"meth:`str.rpartition` é melhor demonstrado com um exemplo dividindo o " +"domínio de uma URL do que com um exemplo de remoção da última palavra de uma " +"linha de diálogo do Monty Python." + +#: ../../documentation/style-guide.rst:174 +msgid "" +"The ellipsis for the :py:data:`sys.ps2` secondary interpreter prompt should " +"only be used sparingly, where it is necessary to clearly differentiate " +"between input lines and output lines. Besides contributing visual clutter, " +"it makes it difficult for readers to cut-and-paste examples so they can " +"experiment with variations." +msgstr "" +"As reticências para o prompt do interpretador secundário :py:data:`sys.ps2` " +"devem ser usadas apenas com moderação, onde é necessário diferenciar " +"claramente entre as linhas de entrada e as linhas de saída. Além de " +"contribuir com a desordem visual, torna difícil para os leitores recortar e " +"colar exemplos para que possam experimentar variações." + +#: ../../documentation/style-guide.rst:181 +msgid "Code Equivalents" +msgstr "Equivalentes de código" + +#: ../../documentation/style-guide.rst:183 +msgid "" +"Giving pure Python code equivalents (or approximate equivalents) can be a " +"useful adjunct to a prose description. A documenter should carefully weigh " +"whether the code equivalent adds value." +msgstr "" +"Fornecer equivalentes de código Python puro (ou equivalentes aproximados) " +"pode ser um complemento útil para uma descrição em prosa. Um documentador " +"deve avaliar cuidadosamente se o código equivalente agrega valor." + +#: ../../documentation/style-guide.rst:187 +msgid "" +"A good example is the code equivalent for :func:`all`. The short 4-line " +"code equivalent is easily digested; it re-emphasizes the early-out behavior; " +"and it clarifies the handling of the corner-case where the iterable is " +"empty. In addition, it serves as a model for people wanting to implement a " +"commonly requested alternative where :func:`all` would return the specific " +"object evaluating to False whenever the function terminates early." +msgstr "" +"Um bom exemplo é o código equivalente para :func:`all`. O código curto " +"equivalente de 4 linhas é facilmente digerido; enfatiza novamente o " +"comportamento inicial; e esclarece a manipulação do caso de canto onde o " +"iterável está vazio. Além disso, serve como um modelo para pessoas que " +"desejam implementar uma alternativa comumente solicitada, onde :func:`all` " +"retornaria o objeto específico avaliado como False sempre que a função " +"terminasse antecipadamente." + +#: ../../documentation/style-guide.rst:194 +msgid "" +"A more questionable example is the code for :func:`itertools.groupby`. Its " +"code equivalent borders on being too complex to be a quick aid to " +"understanding. Despite its complexity, the code equivalent was kept because " +"it serves as a model to alternative implementations and because the " +"operation of the \"grouper\" is more easily shown in code than in English " +"prose." +msgstr "" +"Um exemplo mais questionável é o código para :func:`itertools.groupby`. Seu " +"equivalente em código é muito complexo para ser uma ajuda rápida para a " +"compreensão. Apesar de sua complexidade, o equivalente em código foi mantido " +"porque serve de modelo para implementações alternativas e porque a operação " +"do \"agrupador\" é mais facilmente mostrada em código do que em prosa em " +"inglês." + +#: ../../documentation/style-guide.rst:200 +msgid "" +"An example of when not to use a code equivalent is for the :func:`oct` " +"function. The exact steps in converting a number to octal doesn't add value " +"for a user trying to learn what the function does." +msgstr "" +"Um exemplo de quando não usar um código equivalente é para a função :func:" +"`oct`. As etapas exatas na conversão de um número para octal não agregam " +"valor para um usuário tentando aprender o que a função faz." + +#: ../../documentation/style-guide.rst:205 +msgid "Audience" +msgstr "Audiência" + +#: ../../documentation/style-guide.rst:207 +msgid "" +"The tone of the tutorial (and all the docs) needs to be respectful of the " +"reader's intelligence. Don't presume that the readers are stupid. Lay out " +"the relevant information, show motivating use cases, provide glossary links, " +"and do your best to connect-the-dots, but don't talk down to them or waste " +"their time." +msgstr "" +"O tom do tutorial (e de todos os documentos) precisa respeitar a " +"inteligência do leitor. Não presuma que os leitores são estúpidos. Disponha " +"as informações relevantes, mostre casos de uso motivadores, forneça links " +"para glossários e faça o possível para conectar os pontos, mas não fale mal " +"deles ou desperdice seu tempo." + +#: ../../documentation/style-guide.rst:212 +msgid "" +"The tutorial is meant for newcomers, many of whom will be using the tutorial " +"to evaluate the language as a whole. The experience needs to be positive " +"and not leave the reader with worries that something bad will happen if they " +"make a misstep. The tutorial serves as guide for intelligent and curious " +"readers, saving details for the how-to guides and other sources." +msgstr "" +"O tutorial destina-se a iniciantes, muitos dos quais usarão o tutorial para " +"avaliar o idioma como um todo. A experiência precisa ser positiva e não " +"deixar o leitor com medo de que algo ruim aconteça se ele der um passo em " +"falso. O tutorial serve como guia para leitores inteligentes e curiosos, " +"guardando detalhes para guias de instruções e outras fontes." + +#: ../../documentation/style-guide.rst:218 +msgid "" +"Be careful accepting requests for documentation changes from the rare but " +"vocal category of reader who is looking for vindication for one of their " +"programming errors (\"I made a mistake, therefore the docs must be wrong ..." +"\"). Typically, the documentation wasn't consulted until after the error " +"was made. It is unfortunate, but typically no documentation edit would have " +"saved the user from making false assumptions about the language (\"I was " +"surprised by ...\")." +msgstr "" +"Seja cuidadoso ao aceitar solicitações de mudanças na documentação da " +"categoria rara, mas vocal, de leitor que está procurando justificativa para " +"um de seus erros de programação (\"Eu cometi um erro, portanto os documentos " +"devem estar errados ...\"). Normalmente, a documentação não era consultada " +"até que o erro fosse cometido. É lamentável, mas normalmente nenhuma edição " +"de documentação teria evitado que o usuário fizesse falsas suposições sobre " +"a linguagem (\"Fiquei surpreso com ...\")." + +#: ../../documentation/translating.rst:9 +msgid "" +"Python documentation translations are governed by :PEP:`545`. They are built " +"by `docsbuild-scripts `__ and " +"hosted on docs.python.org. There are several documentation translations " +"already in production; others are works in progress." +msgstr "" +"As traduções da documentação do Python são regidas pela :PEP:`545`. Eles são " +"construídas por `docsbuild-scripts `__ e hospedados em docs.python.org. Existem várias traduções de " +"documentação já em produção; outros são obras em andamento." + +#: ../../documentation/translating.rst:16 +msgid "Language" +msgstr "Idioma" + +#: ../../documentation/translating.rst:16 +msgid "Links" +msgstr "Links" + +#: ../../documentation/translating.rst:18 +msgid "Arabic (ar)" +msgstr "Árabe (ar)" + +#: ../../documentation/translating.rst:18 +msgid "`Abdur-Rahmaan Janhangeer `_" +msgstr "`Abdur-Rahmaan Janhangeer `_" + +#: ../../documentation/translating.rst:18 +msgid "`GitHub `_" +msgstr "`GitHub `_" + +#: ../../documentation/translating.rst:21 +msgid "Bengali as spoken in India (bn_IN)" +msgstr "Bengali como falado na Índia (bn_IN)" + +#: ../../documentation/translating.rst:21 +msgid "`Kushal Das `_" +msgstr "`Kushal Das `_" + +#: ../../documentation/translating.rst:21 +msgid "`GitHub `_" +msgstr "`GitHub `_" + +#: ../../documentation/translating.rst:25 +msgid "French (fr)" +msgstr "Francês (fr)" + +#: ../../documentation/translating.rst:25 +msgid "`Julien Palard (@JulienPalard) `_" +msgstr "`Julien Palard (@JulienPalard) `_" + +#: ../../documentation/translating.rst:25 +msgid "`GitHub `_" +msgstr "`GitHub `_" + +#: ../../documentation/translating.rst:28 +msgid "Hindi as spoken in India (hi_IN)" +msgstr "Hindi conforme falado na Índia (hi_IN)" + +#: ../../documentation/translating.rst:28 +msgid "`GitHub `_" +msgstr "`GitHub `_" + +#: ../../documentation/translating.rst:31 +msgid "Hungarian (hu)" +msgstr "Húngaro (hu)" + +#: ../../documentation/translating.rst:31 +msgid "`Tamás Bajusz (@gbtami) `_" +msgstr "`Tamás Bajusz (@gbtami) `_" + +#: ../../documentation/translating.rst:31 +msgid "`GitHub `_ `Mailing List `_" +msgstr "`GitHub `_ `Lista de discussão `_" + +#: ../../documentation/translating.rst:34 +msgid "Indonesian (id)" +msgstr "Indonésio (id)" + +#: ../../documentation/translating.rst:34 +msgid "`Oon Arfiandwi `_" +msgstr "`Oon Arfiandwi `_" + +#: ../../documentation/translating.rst:34 +msgid "`GitHub `_" +msgstr "`GitHub `_" + +#: ../../documentation/translating.rst:36 +msgid "Italian (it)" +msgstr "Itália (it)" + +#: ../../documentation/translating.rst:36 +msgid "`mail `_" +msgstr "`correio `_" + +#: ../../documentation/translating.rst:38 +msgid "Japanese (ja)" +msgstr "Japonês (ja)" + +#: ../../documentation/translating.rst:38 +msgid "`Kinebuchi Tomohiko (@cocoatomo) `_" +msgstr "`Kinebuchi Tomohiko (@cocoatomo) `_" + +#: ../../documentation/translating.rst:38 +msgid "`GitHub `_ `Doc `_" +msgstr "`GitHub `_ `Doc `_" + +#: ../../documentation/translating.rst:41 +msgid "Korean (ko)" +msgstr "Korean (ko)" + +#: ../../documentation/translating.rst:41 +msgid "`GitHub `_ `Doc `_" +msgstr "`GitHub `_ `Doc `_" + +#: ../../documentation/translating.rst:44 +msgid "Marathi (mr)" +msgstr "Marathi (mr)" + +#: ../../documentation/translating.rst:44 +msgid "`Sanket Garade `_" +msgstr "`Sanket Garade `_" + +#: ../../documentation/translating.rst:44 +msgid "`GitHub `_" +msgstr "`GitHub `_" + +#: ../../documentation/translating.rst:47 +msgid "Lithuanian (lt)" +msgstr "Lituano (lt)" + +#: ../../documentation/translating.rst:47 +msgid "`mail `_" +msgstr "`correio `_" + +#: ../../documentation/translating.rst:49 +msgid "Persian (fa)" +msgstr "Persa (fa)" + +#: ../../documentation/translating.rst:49 +msgid "`Komeil Parseh (@mmdbalkhi) `_" +msgstr "`Komeil Parseh (@mmdbalkhi) `_" + +#: ../../documentation/translating.rst:49 +msgid "`GitHub `_" +msgstr "`GitHub `_" + +#: ../../documentation/translating.rst:52 +msgid "Polish (pl)" +msgstr "Polonês (pl)" + +#: ../../documentation/translating.rst:52 +msgid "`Maciej Olko (@m-aciek) `_" +msgstr "`Maciej Olko (@m-aciek) `_" + +#: ../../documentation/translating.rst:52 +msgid "" +"`GitHub `_ `Translations `_ `Doc `_ `mail " +"`_" +msgstr "" +"`GitHub `_ `Traduções `_ `Doc `_ `correio " +"`_" + +#: ../../documentation/translating.rst:57 +msgid "Portuguese (pt)" +msgstr "Português (pt)" + +#: ../../documentation/translating.rst:57 +msgid "Gustavo Toffo" +msgstr "Gustavo Toffo" + +#: ../../documentation/translating.rst:59 +msgid "Portuguese as spoken in Brasil (pt-br)" +msgstr "Português como falado no Brasil (pt-br)" + +#: ../../documentation/translating.rst:59 +msgid "Marco Rougeth" +msgstr "Marco Rougeth" + +#: ../../documentation/translating.rst:59 +msgid "" +"`GitHub `_ `Wiki `_ `Telegram `_ " +"`article `_" +msgstr "" +"`GitHub `_ `Wiki `_ `Telegram `_ " +"`artigo `_" + +#: ../../documentation/translating.rst:64 +msgid "Russian (ru)" +msgstr "Russo (ru)" + +#: ../../documentation/translating.rst:64 +msgid "`mail `_" +msgstr "`correio `_" + +#: ../../documentation/translating.rst:66 +msgid "Simplified Chinese (zh-cn)" +msgstr "Chinês simplificado (zh-cn)" + +#: ../../documentation/translating.rst:66 +msgid "`Shengjing Zhu `_" +msgstr "`Shengjing Zhu `_" + +#: ../../documentation/translating.rst:66 +msgid "`Transifex `_ `GitHub `_ `Doc `_" +msgstr "`Transifex `_ `GitHub `_ `Doc `_" + +#: ../../documentation/translating.rst:70 +msgid "Spanish (es)" +msgstr "Espanhol (es)" + +#: ../../documentation/translating.rst:70 +msgid "Raúl Cumplido" +msgstr "Raúl Cumplido" + +#: ../../documentation/translating.rst:70 +msgid "`GitHub `_" +msgstr "`GitHub `_" + +#: ../../documentation/translating.rst:72 +msgid "Traditional Chinese (zh-tw)" +msgstr "Chinês tradicional (zh-tw)" + +#: ../../documentation/translating.rst:72 +msgid "`王威翔 Matt Wang `_, Josix Wang" +msgstr "`王威翔 Matt Wang `_, Josix Wang" + +#: ../../documentation/translating.rst:72 +msgid "`GitHub `_ `Doc `_" +msgstr "`GitHub `_ `Doc `_" + +#: ../../documentation/translating.rst:76 +msgid "Turkish (tr)" +msgstr "Turco (tr)" + +#: ../../documentation/translating.rst:76 +msgid "`Ege Akman (@egeakman) `_" +msgstr "`Ege Akman (@egeakman) `_" + +#: ../../documentation/translating.rst:76 +msgid "`GitHub `_" +msgstr "`GitHub `_" + +#: ../../documentation/translating.rst:79 +msgid "Ukrainian (uk)" +msgstr "Ucraniano (uk)" + +#: ../../documentation/translating.rst:79 +msgid "`Dmytro Kazanzhy (@kazanzhy) `_" +msgstr "`Dmytro Kazanzhy (@kazanzhy) `_" + +#: ../../documentation/translating.rst:79 +msgid "`GitHub `_ `Translations `_" +msgstr "`GitHub `_ `Traduções `_" + +#: ../../documentation/translating.rst:131 +msgid "Starting a new translation" +msgstr "Iniciando uma nova tradução" + +#: ../../documentation/translating.rst:133 +msgid "" +"First subscribe to the `translation mailing list `_, and " +"introduce yourself and the translation you're starting. Translations fall " +"under the aegis of the `PSF Translation Workgroup `_" +msgstr "" +"Primeiro, inscreva-se na `lista de discussão de tradução `_ " +"e apresente-se e apresente a tradução que está iniciando. As traduções estão " +"sob a égide do `PSF Translation Workgroup `_" + +#: ../../documentation/translating.rst:137 +msgid "" +"Then you can bootstrap your new translation by using our `cookiecutter " +"`__." +msgstr "" +"Então você pode inicializar sua nova tradução usando nosso `cookiecutter " +"`__." + +#: ../../documentation/translating.rst:140 +msgid "The important steps look like this:" +msgstr "As etapas importantes são assim:" + +#: ../../documentation/translating.rst:142 +msgid "" +"Create the GitHub repo (anywhere) with the right hierarchy (using the " +"cookiecutter)." +msgstr "" +"Crie o repositório GitHub (em qualquer lugar) com a hierarquia correta " +"(usando o cookiecutter)." + +#: ../../documentation/translating.rst:144 +msgid "Gather people to help you translate. You can't do it alone." +msgstr "" +"Reúna pessoas para ajudá-lo a traduzir. Você não pode fazer isso sozinho." + +#: ../../documentation/translating.rst:145 +msgid "" +"You can use any tool to translate, as long as you can synchronize with git. " +"Some use Transifex, and some use only GitHub. You can choose another way if " +"you like; it's up to you." +msgstr "" +"Você pode usar qualquer ferramenta para traduzir, desde que possa " +"sincronizar com o git. Alguns usam Transifex e alguns usam apenas GitHub. " +"Você pode escolher outra forma, se quiser; você decide." + +#: ../../documentation/translating.rst:148 +msgid "" +"Ensure we update this page to reflect your work and progress, either via a " +"PR or by asking on the `translation mailing list `_." +msgstr "" +"Certifique-se de atualizar esta página para refletir seu trabalho e " +"progresso, seja por meio de um PR ou pedindo na `lista de discussão de " +"tradução `_." + +#: ../../documentation/translating.rst:150 +#, python-format +msgid "" +"When ``bugs.html``, ``tutorial``, and ``library/functions`` are " +"100% completed, ask on the `translation mailing list `_ for " +"your language to be added in the language picker on docs.python.org." +msgstr "" +"Quando ``bugs.html``, ``tutorial`` e ``library/functions`` estiverem " +"100% concluídos, pergunte na `lista de discussão de tradução " +"`_ para adicionar seu idioma ao seletor de idiomas em docs." +"python.org." + +#: ../../documentation/translating.rst:156 +msgid "PEP 545 summary" +msgstr "Resumo da PEP 545" + +#: ../../documentation/translating.rst:158 +msgid "Here are the essential points of :PEP:`545`:" +msgstr "Aqui estão os pontos essenciais da :PEP:`545`:" + +#: ../../documentation/translating.rst:160 +msgid "" +"Each translation is assigned an appropriate lowercased language tag, with an " +"optional region subtag, and joined with a dash, like ``pt-br`` or ``fr``." +msgstr "" +"Cada tradução recebe uma tag de idioma em minúsculas apropriada, com uma " +"subtag de região opcional e unida com um traço, como ``pt-br`` ou ``fr``." + +#: ../../documentation/translating.rst:164 +msgid "" +"Each translation is under CC0 and marked as such in the README (as in the " +"cookiecutter)." +msgstr "" +"Cada tradução está em CC0 e marcada como tal no README (como no " +"cookiecutter)." + +#: ../../documentation/translating.rst:167 +msgid "" +"Translation files are hosted on ``https://github.com/python/python-docs-" +"{LANGUAGE_TAG}`` (not mandatory to start a translation, but mandatory to " +"land on ``docs.python.org``)." +msgstr "" +"Os arquivos de tradução estão hospedados em ``https://github.com/python/" +"python-docs-{TAG_IDIOMA}`` (não obrigatório para iniciar uma tradução, mas " +"obrigatório para acessar ``docs.python.org``)." + +#: ../../documentation/translating.rst:172 +msgid "" +"Translations having completed ``tutorial/``, ``library/stdtypes`` and " +"``library/functions`` are hosted on ``https://docs.python.org/{LANGUAGE_TAG}/" +"{VERSION_TAG}/``." +msgstr "" +"As traduções concluídas em ``tutorial/``, ``library/stdtypes`` e ``library/" +"functions`` são hospedadas em ``https://docs.python.org/{TAG_IDIOMA}/" +"{TAG_VERSÃO}/``." + +#: ../../documentation/translating.rst:178 +msgid "How to get help" +msgstr "Como obter ajuda" + +#: ../../documentation/translating.rst:180 +msgid "" +"Discussions about translations occur on the `translation mailing list " +"`_, and there's a `Libera.Chat IRC `_ " +"channel, ``#python-doc``." +msgstr "" +"Discussões sobre traduções ocorrem na `lista de discussão de tradução " +"`_, e há o canal ``#python-doc`` no `IRC do Libera.Chat " +"`_." + +#: ../../documentation/translating.rst:186 +msgid "Translation FAQ" +msgstr "FAQ de tradução" + +#: ../../documentation/translating.rst:189 +msgid "Which version of the Python documentation should be translated?" +msgstr "Qual versão da documentação do Python deve ser traduzida?" + +#: ../../documentation/translating.rst:191 +msgid "" +"Consensus is to work on current stable. You can then propagate your " +"translation from one branch to another using `pomerge `__." +msgstr "" +"O consenso é trabalhar no atual estável. Você pode então propagar sua " +"tradução de um branch para outro usando `pomerge `__." + +#: ../../documentation/translating.rst:197 +msgid "Are there some tools to help in managing the repo?" +msgstr "Existem algumas ferramentas para ajudar na gestão do repo?" + +#: ../../documentation/translating.rst:199 +msgid "Here's what we're using:" +msgstr "Aqui está o que estamos usando:" + +#: ../../documentation/translating.rst:201 +msgid "" +"`pomerge `__ to propagate translations " +"from one file to others." +msgstr "" +"`pomerge `__ para propagar traduções de " +"um arquivo para outros." + +#: ../../documentation/translating.rst:203 +msgid "" +"`pospell `__ to check for typos in ``." +"po`` files." +msgstr "" +"`pospell `__ para verificar erros de " +"digitação em arquivos ``.po``." + +#: ../../documentation/translating.rst:204 +msgid "" +"`powrap `__ to rewrap the ``.po`` files " +"before committing. This helps keep git diffs short." +msgstr "" +"`powrap `__ para fazer a quebra de linhas " +"dos arquivos ``.po`` antes de fazer commit. Isso ajuda a manter as " +"diferenças do git curtas." + +#: ../../documentation/translating.rst:206 +msgid "" +"`potodo `__ to list what needs to be " +"translated." +msgstr "" +"`potodo `__ para listar o que precisa ser " +"traduzido." + +#: ../../documentation/translating.rst:210 +msgid "How is a coordinator elected?" +msgstr "Como é eleito um coordenador?" + +#: ../../documentation/translating.rst:212 +msgid "" +"There is no election; each translation has to sort this out. Here are some " +"suggestions." +msgstr "" +"Não há eleição; cada tradução tem que resolver isso. Aqui estão algumas " +"sugestões." + +#: ../../documentation/translating.rst:214 +msgid "" +"Coordinator requests are to be public on the `translation mailing list " +"`_." +msgstr "" +"As solicitações do coordenador devem ser públicas na `lista de discussões de " +"tradução `_." + +#: ../../documentation/translating.rst:215 +msgid "" +"If the given language has a native core dev, the core dev has their say on " +"the choice." +msgstr "" +"Se o idioma fornecido tiver um desenvolvedor principal nativo, o " +"desenvolvedor principal terá uma palavra a dizer sobre a escolha." + +#: ../../documentation/translating.rst:217 +msgid "" +"Anyone who wants to become coordinator for their native language and shows " +"motivation by translating and building a community will be named coordinator." +msgstr "" +"Qualquer pessoa que queira se tornar coordenadora de seu idioma nativo e " +"demonstre motivação traduzindo e construindo uma comunidade será nomeada " +"coordenadora." + +#: ../../documentation/translating.rst:220 +msgid "" +"In case of concurrency between two persons, no one will sort this out for " +"you. It is up to you two to organize a local election or whatever is needed " +"to sort this out." +msgstr "" +"Em caso de concorrência entre duas pessoas, ninguém resolverá isso para " +"você. Cabe a vocês dois organizar uma eleição local ou o que for necessário " +"para resolver isso." + +#: ../../documentation/translating.rst:223 +msgid "" +"If a coordinator becomes inactive or unreachable for a long period of time, " +"someone else can ask for a takeover on the `translation mailing list " +"`_." +msgstr "" +"Se um coordenador ficar inativo ou inacessível por um longo período de " +"tempo, outra pessoa pode solicitar uma aquisição na `lista de discussão de " +"tradução `_." + +#: ../../documentation/translating.rst:228 +msgid "The entry for my translation is missing/not up to date on this page" +msgstr "A entrada para minha tradução está faltando/desatualizada nesta página" + +#: ../../documentation/translating.rst:230 +msgid "" +"Ask on the `translation mailing list `_, or better, make a " +"PR on the `devguide `__." +msgstr "" +"Peça na `lista de discussão de tradução `_, ou melhor, faça " +"um PR no `devguide `__." + +#: ../../documentation/translating.rst:235 +msgid "I have a translation, but it's not in git. What should I do?" +msgstr "Eu tenho uma tradução, mas não está no git. O que devo fazer?" + +#: ../../documentation/translating.rst:237 +msgid "" +"You can ask for help on the `translation mailing list `_, " +"and the team will help you create an appropriate repository. You can still " +"use tools like transifex, if you like." +msgstr "" +"Você pode pedir ajuda na `lista de discussão de tradução " +"`_, e a equipe irá ajudá-lo a criar um repositório " +"apropriado. Você ainda pode usar ferramentas como Transifex, se quiser." + +#: ../../documentation/translating.rst:243 +msgid "My git hierarchy does not match yours. Can I keep it?" +msgstr "Minha hierarquia git não corresponde à sua. Posso ficar com isso?" + +#: ../../documentation/translating.rst:245 +msgid "" +"No, inside the ``github.com/python`` organization we’ll all have the exact " +"same hierarchy so bots will be able to build all of our translations. So you " +"may have to convert from one hierarchy to another. Ask for help on the " +"`translation mailing list `_ if you’re not sure on how to " +"do it." +msgstr "" +"Não, dentro da organização ``github.com/python`` todos nós teremos " +"exatamente a mesma hierarquia para que os bots possam construir todas as " +"nossas traduções. Então você pode ter que converter de uma hierarquia para " +"outra. Peça ajuda na `lista de discussão de tradução `_ se " +"não tiver certeza de como fazê-lo." + +#: ../../documentation/translating.rst:253 +msgid "What hierarchy should I use in my GitHub repository?" +msgstr "Qual hierarquia devo usar no meu repositório GitHub?" + +#: ../../documentation/translating.rst:255 +msgid "" +"As for every project, we have a *branch* per version. We store ``.po`` " +"files in the root of the repository using the ``gettext_compact=0`` style." +msgstr "" +"Como em todo projeto, temos um *branch* por versão. Armazenamos arquivos ``." +"po`` na raiz do repositório usando o estilo ``gettext_compact=0``." + +#: ../../getting-started/fixing-issues.rst:6 +msgid "Fixing \"easy\" Issues (and Beyond)" +msgstr "Corrigindo problemas \"fáceis\" (e além)" + +#: ../../getting-started/fixing-issues.rst:8 +msgid "" +"When you feel comfortable enough to want to help tackle issues by trying to " +"create a patch to fix an issue, you can start by looking at the `\"easy\" " +"issues`_. These issues *should* be ones where it should take no longer than " +"a day or weekend to fix. But because the \"easy\" classification is " +"typically done at triage time it can turn out to be inaccurate, so do feel " +"free to leave a comment if you think the classification no longer applies." +msgstr "" +"Quando você se sentir confortável o suficiente para ajudar a resolver " +"problemas tentando criar um patch para corrigir um problema, você pode " +"começar olhando para os `problemas \"fáceis\"`_. Esses problemas *devem* ser " +"aqueles em que não deve levar mais de um dia ou fim de semana para serem " +"corrigidos. Mas como a classificação \"fácil\" geralmente é feita no momento " +"da triagem, ela pode se tornar imprecisa, portanto, sinta-se à vontade para " +"deixar um comentário se achar que a classificação não se aplica mais." + +#: ../../getting-started/fixing-issues.rst:15 +msgid "" +"For the truly adventurous looking for a challenge, you can look for issues " +"that are not considered easy and try to fix those. It must be warned, " +"though, that it is quite possible that a bug that has been left open has " +"been left into that state because of the difficulty compared to the benefit " +"of the fix. It could also still be open because no consensus has been " +"reached on how to fix the issue (although having a patch that proposes a fix " +"can turn the tides of the discussion to help bring it to a close). " +"Regardless of why the issue is open, you can also always provide useful " +"comments if you do attempt a fix, successful or not." +msgstr "" +"Para os verdadeiramente aventureiros em busca de um desafio, você pode " +"procurar problemas que não são considerados fáceis e tentar corrigi-los. " +"Deve ser avisado, porém, que é bem possível que um bug que foi deixado em " +"aberto tenha sido deixado nesse estado por causa da dificuldade em " +"comparação com o benefício da correção. Também pode estar aberto porque " +"nenhum consenso foi alcançado sobre como corrigir o problema (embora ter um " +"patch que proponha uma correção possa mudar a maré da discussão para ajudar " +"a encerrá-la). Independentemente do motivo pelo qual o problema está aberto, " +"você sempre pode fornecer comentários úteis se tentar uma correção, com " +"sucesso ou não." + +#: ../../getting-started/getting-help.rst:5 +msgid "Where to Get Help" +msgstr "" + +#: ../../getting-started/getting-help.rst:7 +msgid "" +"If you are working on Python it is very possible you will come across an " +"issue where you need some assistance to solve it (this happens to core " +"developers all the time)." +msgstr "" + +#: ../../getting-started/getting-help.rst:11 +msgid "" +"Should you require help, there are a :ref:`variety of options available " +"` to seek assistance. If the question involves process or " +"tool usage then please check the rest of this guide first as it should " +"answer your question." +msgstr "" + +#: ../../getting-started/getting-help.rst:20 +msgid "Discourse" +msgstr "" + +#: ../../getting-started/getting-help.rst:22 +msgid "" +"Python has a hosted Discourse instance at `discuss.python.org " +"`_. This forum has many different categories, most of which are " +"open for all users to read and post. Those particularly relevant for help " +"contributing to Python itself include:" +msgstr "" + +#: ../../getting-started/getting-help.rst:27 +msgid "`Core Development`_ for most general questions and help" +msgstr "" + +#: ../../getting-started/getting-help.rst:28 +msgid "`Ideas`_ to discuss new ideas for the Python" +msgstr "" + +#: ../../getting-started/getting-help.rst:29 +msgid "`Core Workflow`_ for questions about the dev infrastructure and bots" +msgstr "" + +#: ../../getting-started/getting-help.rst:32 +msgid "" +":ref:`communication-discourse` for more information on how to get started." +msgstr "" + +#: ../../getting-started/getting-help.rst:45 +msgid "" +"Further options for seeking assistance include the `python-ideas`_ and " +"`python-dev`_ mailing lists, which correspond to the `Ideas`_ and `Core " +"Development`_ :ref:`help-discourse` categories, respectively. The Discourse " +"categories are generally more active and are the preferred venue for new " +"discussions, but the mailing lists are still monitored and responded to. " +"These mailing lists are for questions involving the development *of* Python, " +"**not** for development *with* Python." +msgstr "" + +#: ../../getting-started/getting-help.rst:60 +msgid "Ask #python-dev" +msgstr "" + +#: ../../getting-started/getting-help.rst:62 +msgid "" +"If you are comfortable with IRC you can try asking on ``#python-dev`` (on " +"the `Libera.Chat`_ network). Typically there are a number of experienced " +"developers, ranging from triagers to core developers, who can answer " +"questions about developing for Python. As with the mailing lists, ``#python-" +"dev`` is for questions involving the development *of* Python whereas " +"``#python`` is for questions concerning development *with* Python." +msgstr "" + +#: ../../getting-started/getting-help.rst:71 +msgid "" +"You may not be able to access the history of this channel, so it cannot be " +"used as a \"knowledge base\" of sorts." +msgstr "" + +#: ../../getting-started/getting-help.rst:77 +msgid "Core Mentorship" +msgstr "" + +#: ../../getting-started/getting-help.rst:79 +msgid "" +"If you are interested in improving Python and contributing to its " +"development, but don’t yet feel entirely comfortable with the public " +"channels mentioned above, `Python Mentors`_ are here to help you. Python is " +"fortunate to have a community of volunteer core developers willing to mentor " +"anyone wishing to contribute code, work on bug fixes or improve " +"documentation. Everyone is welcomed and encouraged to contribute." +msgstr "" + +#: ../../getting-started/getting-help.rst:92 +msgid "Core Developers Office Hours" +msgstr "" + +#: ../../getting-started/getting-help.rst:94 +msgid "" +"Several core developers have set aside time to host mentorship office hours. " +"During the office hour, core developers are available to help contributors " +"with our process, answer questions, and help lower the barrier of " +"contributing and becoming Python core developers." +msgstr "" + +#: ../../getting-started/getting-help.rst:99 +msgid "" +"The PSF's code of conduct applies for interactions with core developers " +"during office hours." +msgstr "" + +#: ../../getting-started/getting-help.rst:103 +msgid "Core Developer" +msgstr "" + +#: ../../getting-started/getting-help.rst:103 ../../include/branches.csv:1 +#: ../../include/end-of-life.csv:1 +msgid "Schedule" +msgstr "Agendamento" + +#: ../../getting-started/getting-help.rst:103 +msgid "Details" +msgstr "" + +#: ../../getting-started/getting-help.rst:105 +msgid "See details link" +msgstr "" + +#: ../../getting-started/getting-help.rst:105 +msgid "Schedule at https://calendly.com/zware" +msgstr "" + +#: ../../getting-started/getting-help.rst:109 +msgid "File a Bug" +msgstr "" + +#: ../../getting-started/getting-help.rst:111 +msgid "" +"If you strongly suspect you have stumbled on a bug (be it in the build " +"process, in the test suite, or in other areas), then open an issue on the " +"`issue tracker`_. As with every bug report it is strongly advised that you " +"detail which conditions triggered it (including the OS name and version, and " +"what you were trying to do), as well as the exact error message you " +"encountered." +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:5 +msgid "Git Bootcamp and Cheat Sheet" +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:11 +msgid "" +"This section provides instructions on common tasks in CPython's workflow. " +"It's designed to assist new contributors who have some familiarity with git " +"and GitHub." +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:15 +msgid "" +"If you are new to git and GitHub, please become comfortable with these " +"instructions before submitting a pull request. As there are several ways to " +"accomplish these tasks using git and GitHub, this section reflects one " +"method suitable for new contributors. Experienced contributors may desire a " +"different approach." +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:22 +msgid "" +"In this section, we will go over some commonly used Git commands that are " +"relevant to CPython's workflow." +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:26 +msgid "" +"Setting up git aliases for common tasks can be useful to you. You can get " +"more information about that in `git documentation `_" +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:33 +msgid "Forking CPython GitHub Repository" +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:35 +msgid "You will only need to do this once." +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:37 +#: ../../getting-started/git-boot-camp.rst:295 +#: ../../getting-started/setup-building.rst:65 +msgid "Go to https://github.com/python/cpython." +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:39 +msgid "Press ``Fork`` on the top right." +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:41 +#: ../../getting-started/setup-building.rst:69 +msgid "" +"When asked where to fork the repository, choose to fork it to your username." +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:43 +msgid "" +"Your forked CPython repository will be created at https://github.com/" +"/cpython." +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:48 +msgid "Cloning a Forked CPython Repository" +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:50 +msgid "" +"You will only need to do this once per machine. From your command line::" +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:54 +msgid "It is also recommended to configure an ``upstream`` remote repository::" +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:59 +msgid "You can also use SSH-based or HTTPS-based URLs." +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:62 +msgid "Configure the Remotes" +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:67 +msgid "Configure ``git`` to pull ``main`` from the ``upstream`` remote::" +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:71 +msgid "" +"Since one should never attempt to push to ``upstream``, configure ``git`` to " +"push always to ``origin``::" +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:77 +msgid "Listing the Remote Repositories" +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:79 +msgid "" +"To list the remote repositories that are configured, along with their URLs::" +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:83 +msgid "" +"You should have two remote repositories: ``origin`` pointing to your forked " +"CPython repository, and ``upstream`` pointing to the official CPython " +"repository::" +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:91 +msgid "To verify the upstream for ``main``::" +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:95 +msgid "" +"It should emit ``upstream``, indicating to track/pull changes for ``main`` " +"from the ``upstream`` remote." +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:102 +msgid "Setting Up Your Name and Email Address" +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:109 +msgid "" +"The ``--global`` flag sets these parameters globally while the ``--local`` " +"flag sets them only for the current project." +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:115 +msgid "Enabling ``autocrlf`` on Windows" +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:117 +msgid "" +"The ``autocrlf`` option will fix automatically any Windows-specific line " +"endings. This should be enabled on Windows, since the public repository has " +"a hook which will reject all changesets having the wrong line endings::" +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:124 +msgid "Creating and Switching Branches" +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:127 +msgid "Never commit directly to the ``main`` branch." +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:129 +msgid "Create a new branch from ``main`` and switch to it::" +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:133 +msgid "This is equivalent to::" +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:140 +msgid "To find the branch you are currently on::" +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:144 +msgid "" +"The current branch will have an asterisk next to the branch name. Note, " +"this will only list all of your local branches." +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:147 +msgid "To list all the branches, including the remote branches::" +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:151 +msgid "To switch to a different branch::" +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:155 +msgid "" +"Other releases are just branches in the repository. For example, to work on " +"the 2.7 release from the ``upstream`` remote::" +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:163 +msgid "Deleting Branches" +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:165 +msgid "To delete a **local** branch that you no longer need::" +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:170 +msgid "To delete a **remote** branch::" +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:174 +msgid "You may specify more than one branch for deletion." +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:178 +msgid "Renaming Branch" +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:180 +msgid "" +"The CPython repository's default branch was renamed from ``master`` to " +"``main`` after the Python 3.10b1 release." +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:183 +msgid "" +"If you have a fork on GitHub (as described in :ref:`fork-cpython`) that was " +"created before the rename, you should visit the GitHub page for your fork to " +"rename the branch there. You only have to do this once. GitHub should " +"provide you with a dialog for this. If it doesn't (or the dialog was already " +"dismissed), you can rename the branch in your fork manually `by following " +"these GitHub instructions `__" +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:190 +msgid "" +"After renaming the branch in your fork, you need to update any local clones " +"as well. This only has to be done once per clone::" +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:198 +msgid "(GitHub also provides these instructions after you rename the branch.)" +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:200 +msgid "" +"If you do not have a fork on GitHub, but rather a direct clone of the main " +"repo created before the branch rename, you still have to update your local " +"clones. This still only has to be done once per clone. In that case, you can " +"rename your local branch as follows::" +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:213 +msgid "Staging and Committing Files" +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:215 +msgid "To show the current changes::" +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:219 +msgid "To stage the files to be included in your commit::" +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:224 +msgid "To commit the files that have been staged (done in step 2):" +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:231 +msgid "Reverting Changes" +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:233 +msgid "To revert changes to a file that has not been committed yet::" +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:237 +msgid "" +"If the change has been committed, and now you want to reset it to whatever " +"the origin is at::" +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:243 +msgid "Stashing Changes" +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:245 +msgid "To stash away changes that are not ready to be committed yet::" +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:249 +msgid "To re-apply the last stashed change::" +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:256 +msgid "Comparing Changes" +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:258 +msgid "View all non-commited changes::" +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:262 +msgid "Compare to the ``main`` branch::" +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:266 +msgid "" +"Exclude generated files from diff using an ``attr`` `pathspec `_ (note the single quotes)::" +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:272 +msgid "Exclude generated files from diff by default::" +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:276 +msgid "" +"The ``generated`` `attribute `_ is " +"defined in :cpy-file:`.gitattributes`, found in the repository root." +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:282 +msgid "Pushing Changes" +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:284 +msgid "" +"Once your changes are ready for a review or a pull request, you will need to " +"push them to the remote repository." +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:293 +msgid "Creating a Pull Request" +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:297 +msgid "Press the ``New pull request`` button." +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:299 +msgid "Click the ``compare across forks`` link." +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:301 +msgid "" +"Select the base repository: ``python/cpython`` and base branch: ``main``." +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:303 +msgid "" +"Select the head repository: ``/cpython`` and head branch: the " +"branch containing your changes." +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:306 +msgid "Press the ``Create pull request`` button." +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:308 +msgid "" +"You should include the issue number in the title of the PR, in the format " +"``gh-NNNNN: ``." +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:312 +msgid "Linking to Issues and Pull Requests" +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:314 +msgid "" +"You can link to issues and pull requests using ``gh-NNNNN`` (this form is " +"preferred over ``#NNNNN``). If the reference appears in a list, the link " +"will be expanded to show the status and title of the issue/PR." +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:318 +msgid "" +"When you create a PR that includes ``gh-NNNNN`` in the title, `bedevere`_ " +"will automatically add a link to the issue in the first message." +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:321 +msgid "" +"In addition, pull requests support `special keywords`_ that can be used to " +"link to an issue and automatically close it when the PR is merged. However, " +"issues often require multiple PRs before they can be closed (e.g. backports " +"to other branches), so this features is only useful if you know for sure " +"that a single PR is enough to address and close the issue." +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:331 +msgid "Updating your CPython Fork" +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:333 +#: ../../getting-started/git-boot-camp.rst:384 +#: ../../getting-started/git-boot-camp.rst:427 +msgid "Scenario:" +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:335 +msgid "You forked the CPython repository some time ago." +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:336 +#: ../../getting-started/git-boot-camp.rst:358 +msgid "Time passes." +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:337 +msgid "There have been new commits made in the upstream CPython repository." +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:338 +msgid "Your forked CPython repository is no longer up to date." +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:339 +msgid "" +"You now want to update your forked CPython repository to be the same as the " +"upstream CPython repository." +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:342 +msgid "" +"Please do not try to solve this by creating a pull request from ``python:" +"main`` to ``:main`` as the authors of the patches will get " +"notified unnecessarily." +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:346 +#: ../../getting-started/git-boot-camp.rst:364 +msgid "Solution::" +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:352 +msgid "" +"For the above commands to work, please follow the instructions found in the :" +"ref:`checkout` section" +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:355 +msgid "Another scenario:" +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:357 +msgid "You created ``some-branch`` some time ago." +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:359 +msgid "You made some commits to ``some-branch``." +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:360 +msgid "" +"Meanwhile, there are recent changes from the upstream CPython repository." +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:361 +msgid "" +"You want to incorporate the recent changes from the upstream CPython " +"repository into ``some-branch``." +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:371 +msgid "" +"You may see error messages like \"CONFLICT\" and \"Automatic merge failed;\" " +"when you run ``git merge upstream/main``." +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:374 +msgid "" +"When it happens, you need to resolve conflict. See these articles about " +"resolving conflicts:" +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:376 +msgid "" +"`About merge conflicts `_" +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:377 +msgid "" +"`Resolving a merge conflict using the command line `_" +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:382 +msgid "Applying a Patch to Git" +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:386 +msgid "A patch exists but there is no pull request for it." +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:388 +msgid "Solution:" +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:390 +msgid "Download the patch locally." +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:392 +msgid "Apply the patch::" +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:396 +msgid "" +"If there are errors, update to a revision from when the patch was created " +"and then try the ``git apply`` again:" +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:404 +msgid "" +"If the patch still won't apply, then a patch tool will not be able to apply " +"the patch and it will need to be re-implemented manually." +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:407 +msgid "If the apply was successful, create a new branch and switch to it." +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:409 +msgid "Stage and commit the changes." +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:411 +msgid "" +"If the patch was applied to an old revision, it needs to be updated and " +"merge conflicts need to be resolved::" +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:417 +msgid "" +"For very old changes, ``git merge --no-ff`` may be easier than a rebase, " +"with regards to resolving conflicts." +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:420 +msgid "Push the changes and open a pull request." +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:425 +msgid "Downloading Other's Patches" +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:429 +msgid "A contributor made a pull request to CPython." +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:430 +msgid "Before merging it, you want to be able to test their changes locally." +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:432 +msgid "" +"If you've got `GitHub CLI `_ or `hub `_ installed, you can simply do::" +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:438 +msgid "" +"Both of these tools will configure a remote URL for the branch, so you can " +"``git push`` if the pull request author checked \"Allow edits from " +"maintainers\" when creating the pull request." +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:442 +msgid "" +"If you don't have GitHub CLI or hub installed, you can set up a git alias. " +"On Unix and macOS::" +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:447 +msgid "On Windows, reverse the single (``'``) and double (``\"``) quotes:" +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:453 +msgid "" +"The alias only needs to be done once. After the alias is set up, you can " +"get a local copy of a pull request as follows::" +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:461 +msgid "Accepting and Merging a Pull Request" +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:463 +msgid "Pull requests can be accepted and merged by a Python Core Developer." +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:465 +msgid "" +"At the bottom of the pull request page, click the ``Squash and merge`` " +"button." +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:468 +msgid "" +"Replace the reference to GitHub pull request ``#NNNN`` with ``GH-NNNN``. If " +"the title is too long, the pull request number can be added to the message " +"body." +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:472 +msgid "Adjust and clean up the commit message." +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:474 +msgid "Example of good commit message::" +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:481 +msgid "Example of bad commit message::" +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:491 +msgid "" +"`How to Write a Git Commit Message `_ is a nice " +"article describing how to write a good commit message." +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:494 +msgid "Press the ``Confirm squash and merge`` button." +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:497 +msgid "Backporting Merged Changes" +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:499 +msgid "" +"A pull request may need to be backported into one of the maintenance " +"branches after it has been accepted and merged into ``main``. It is usually " +"indicated by the label ``needs backport to X.Y`` on the pull request itself." +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:503 +msgid "" +"Use the utility script `cherry_picker.py `_ from the `core-workflow `_ repository to backport the commit." +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:508 +msgid "" +"The commit hash for backporting is the squashed commit that was merged to " +"the ``main`` branch. On the merged pull request, scroll to the bottom of " +"the page. Find the event that says something like::" +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:514 +msgid "" +"By following the link to ````, you will get the full commit " +"hash." +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:516 +msgid "" +"Alternatively, the commit hash can also be obtained by the following git " +"commands:" +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:524 +msgid "" +"The above commands will print out the hash of the commit containing " +"``\"gh-12345\"`` as part of the commit message." +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:527 +msgid "" +"When formatting the commit message for a backport commit: leave the original " +"one as is and delete the number of the backport pull request." +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:530 +msgid "Example of good backport commit message::" +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:539 +msgid "Example of bad backport commit message::" +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:547 +msgid "Editing a Pull Request Prior to Merging" +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:549 +msgid "" +"When a pull request submitter has enabled the `Allow edits from " +"maintainers`_ option, Python Core Developers may decide to make any " +"remaining edits needed prior to merging themselves, rather than asking the " +"submitter to do them. This can be particularly appropriate when the " +"remaining changes are bookkeeping items like updating ``Misc/ACKS``." +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:557 +msgid "To edit an open pull request that targets ``main``:" +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:559 +msgid "" +"In the pull request page, under the description, there is some information " +"about the contributor's forked CPython repository and branch name that will " +"be useful later::" +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:564 +msgid "Fetch the pull request, using the :ref:`git pr ` alias::" +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:568 +msgid "This will checkout the contributor's branch at ````." +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:570 +msgid "" +"Make and commit your changes on the branch. For example, merge in changes " +"made to ``main`` since the PR was submitted (any merge commits will be " +"removed by the later ``Squash and Merge`` when accepting the change):" +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:581 +msgid "Push the changes back to the contributor's PR branch::" +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:585 +msgid "Optionally, :ref:`delete the PR branch `." +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:589 +msgid "GitHub CLI" +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:591 +msgid "" +"`GitHub CLI `_ is a command-line interface that " +"allows you to create, update, and check GitHub issues and pull requests." +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:595 +msgid "" +"You can install GitHub CLI `by following these instructions `_. After installing, you need to authenticate::" +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:601 +msgid "Examples of useful commands:" +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:603 +msgid "Create a PR::" +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:607 +msgid "Check out another PR::" +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:611 +msgid "Set ``ssh`` as the Git protocol::" +msgstr "" + +#: ../../getting-started/git-boot-camp.rst:615 +msgid "Set the browser::" +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:7 +msgid "Lifecycle of a Pull Request" +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:14 +msgid "" +"CPython uses a workflow based on pull requests. What this means is that you " +"create a branch in Git, make your changes, push those changes to your fork " +"on GitHub (``origin``), and then create a pull request against the official " +"CPython repository (``upstream``)." +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:23 +msgid "Quick Guide" +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:25 +msgid "" +"`Clear communication`_ is key to contributing to any project, especially an " +"`Open Source`_ project like CPython." +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:28 +msgid "Here is a quick overview of how you can contribute to CPython:" +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:30 +msgid "`Create an issue`_ that describes your change [*]_" +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:32 +msgid "" +":ref:`Create a new branch in Git ` from the ``main`` " +"branch" +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:35 +msgid "Work on changes (e.g. fix a bug or add a new feature)" +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:37 +msgid ":ref:`Run tests ` and ``make patchcheck``" +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:39 +msgid "" +":ref:`Commit ` and :ref:`push ` changes to " +"your GitHub fork" +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:42 +msgid "`Create Pull Request`_ on GitHub to merge a branch from your fork" +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:44 +msgid "" +"Make sure the continuous integration checks on your Pull Request are green " +"(i.e. successful)" +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:47 +msgid "Review and address `comments on your Pull Request`_" +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:49 +msgid "" +"When your changes are merged, you can :ref:`delete the PR branch " +"`" +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:52 +msgid "Celebrate contributing to CPython! :)" +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:54 +msgid "" +"If an issue is trivial (e.g. typo fixes), or if an issue already exists, you " +"can skip this step." +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:58 +msgid "" +"In order to keep the commit history intact, please avoid squashing or " +"amending history and then force-pushing to the PR. Reviewers often want to " +"look at individual commits." +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:74 +msgid "Step-by-step Guide" +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:76 +msgid "" +"You should have already :ref:`set up your system `, :ref:`got the " +"source code `, and :ref:`built Python `." +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:79 +msgid "Update data from your ``upstream`` repository::" +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:83 +msgid "" +"Create a new branch in your local clone from the ``main`` branch in the " +"upstream repository::" +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:89 +msgid "" +"Almost all changes to Python, including bug fixes, should first be made " +"against the ``main`` branch. See :ref:`here ` for more details." +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:93 +msgid "" +"Make changes to the code, and use ``git status`` and ``git diff`` to see " +"them." +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:95 +msgid "(Learn more about :ref:`good-prs`)" +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:97 +msgid "Make sure the changes are fine and don't cause any test failure::" +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:102 +msgid "(Learn more about :ref:`patchcheck` and about :ref:`runtests`)" +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:104 +msgid "" +"Once you are satisfied with the changes, add the files and commit them::" +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:109 +msgid "(Learn more about :ref:`good-commits`)" +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:111 +msgid "Then push your work to your GitHub fork::" +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:115 +msgid "" +"Finally go on :samp:`https://github.com/{}/cpython`: you will " +"see a box with the branch you just pushed and a green button that allows you " +"to create a pull request against the official CPython repository." +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:119 +msgid "" +"When people start adding review comments, you can address them by switching " +"to your branch, making more changes, committing them, and pushing them to " +"automatically update your PR::" +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:129 +msgid "" +"If a core developer reviewing your PR pushed one or more commits to your PR " +"branch, then after checking out your branch and before editing, run::" +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:134 +msgid "" +"If you have made local changes that have not been pushed to your fork and " +"there are merge conflicts, git will warn you about this and enter conflict " +"resolution mode. See :ref:`resolving-merge-conflicts` below." +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:138 +msgid "" +"If time passes and there are merge conflicts with the main branch, GitHub " +"will show a warning to this end and you may be asked to address this. Merge " +"the changes from the main branch while resolving the conflicts locally::" +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:147 +msgid "" +"After your PR has been accepted and merged, you can :ref:`delete the branch " +"`::" +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:156 +msgid "Resolving Merge Conflicts" +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:158 +msgid "" +"When merging changes from different branches (or variants of a branch on " +"different repos), the two branches may contain incompatible changes to one " +"or more files. These are called \"merge conflicts\" and need to be manually " +"resolved as follows:" +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:163 +msgid "Check which files have merge conflicts::" +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:167 +msgid "" +"Edit the affected files and bring them to their intended final state. Make " +"sure to remove the special \"conflict markers\" inserted by git." +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:170 +msgid "Commit the affected files::" +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:175 +msgid "" +"When running the final command, git may open an editor for writing a commit " +"message. It is usually okay to leave that as-is and close the editor." +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:178 +msgid "" +"See `the merge command's documentation `_ for a detailed technical explanation." +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:185 +msgid "Making Good PRs" +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:187 +msgid "" +"When creating a pull request for submission, there are several things that " +"you should do to help ensure that your pull request is accepted." +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:190 +msgid "" +"**Make your change against the right version of Python.** In general all " +"changes are made against the ``main`` branch first. This includes bug fixes. " +"After the change is merged there, it will be :ref:`ported back ` to older :ref:`maintenance releases ` as well. That " +"way we ensure all affected versions are handled. Therefore, basing a new " +"change directly on a maintenance branch is only used in specific " +"circumstances, for instance when that change does not apply to ``main`` or " +"the change requires a different approach in an older Python version compared " +"to ``main``." +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:200 +msgid "" +"**Make sure to follow Python's style guidelines.** For Python code you " +"should follow :PEP:`8`, and for C code you should follow :PEP:`7`. If you " +"have one or two discrepancies those can be fixed by the core developer who " +"merges your pull request. But if you have systematic deviations from the " +"style guides your pull request will be put on hold until you fix the " +"formatting issues." +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:207 +msgid "" +"Pull requests with only code formatting changes are usually rejected. On the " +"other hand, fixes for typos and grammar errors in documents and docstrings " +"are welcome." +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:211 +msgid "" +"**Be aware of backwards-compatibility considerations.** While the core " +"developer who eventually handles your pull request will make the final call " +"on whether something is acceptable, thinking about backwards-compatibility " +"early will help prevent having your pull request rejected on these grounds. " +"Put yourself in the shoes of someone whose code will be broken by the " +"change(s) introduced by the pull request. It is quite likely that any change " +"made will break someone's code, so you need to have a good reason to make a " +"change as you will be forcing someone to update their code. (This obviously " +"does not apply to new classes or functions; new arguments should be optional " +"and have default values which maintain the existing behavior.) If in doubt, " +"have a look at :PEP:`387` or :ref:`discuss ` the issue with " +"experienced developers." +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:224 +msgid "" +"**Make sure you have proper tests** to verify your pull request works as " +"expected. Pull requests will not be accepted without the proper tests!" +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:227 +msgid "" +"**Make sure all tests pass.** The entire test suite needs to :ref:`run " +"` **without failure** because of your changes. It is not " +"sufficient to only run whichever test seems impacted by your changes, " +"because there might be interferences unknown to you between your changes and " +"some other part of the interpreter." +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:233 +msgid "" +"Proper :ref:`documentation ` additions/changes should be " +"included." +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:239 +msgid "``patchcheck``" +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:241 +msgid "" +"``patchcheck`` is a simple automated patch checklist that guides a developer " +"through the common patch generation checks. To run ``patchcheck``:" +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:244 +msgid "On *UNIX* (including macOS)::" +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:248 +msgid "On *Windows* (after any successful build):" +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:254 +msgid "The automated patch checklist runs through:" +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:256 +msgid "" +"Are there any whitespace problems in Python files? (using ``Tools/scripts/" +"reindent.py``)" +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:258 +msgid "Are there any whitespace problems in C files?" +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:259 +msgid "" +"Are there any whitespace problems in the documentation? (using ``Tools/" +"scripts/reindent-rst.py``)" +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:261 +msgid "Has the documentation been updated?" +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:262 +msgid "Has the test suite been updated?" +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:263 +msgid "" +"Has an entry under ``Misc/NEWS.d/next`` been added? (using `blurb-it " +"`_, or the `blurb `_ tool)" +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:266 +msgid "Has ``Misc/ACKS`` been updated?" +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:267 +msgid "Has ``configure`` been regenerated, if necessary?" +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:268 +msgid "Has ``pyconfig.h.in`` been regenerated, if necessary?" +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:270 +msgid "" +"The automated patch check doesn't actually *answer* all of these questions. " +"Aside from the whitespace checks, the tool is a memory aid for the various " +"elements that can go into making a complete patch." +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:279 +msgid "Making Good Commits" +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:281 +msgid "" +"Each feature or bugfix should be addressed by a single pull request, and for " +"each pull request there may be several commits. In particular:" +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:284 +msgid "" +"Do **not** fix more than one issue in the same commit (except, of course, if " +"one code change fixes all of them)." +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:286 +msgid "" +"Do **not** do cosmetic changes to unrelated code in the same commit as some " +"feature/bugfix." +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:289 +msgid "Commit messages should follow the following structure::" +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:296 +msgid "" +"The first line or sentence is meant to be a dense, to-the-point explanation " +"of what the purpose of the commit is. The imperative form (used in the " +"example above) is strongly preferred to a descriptive form such as 'the spam " +"module is now more spammy'. Use ``git log --oneline`` to see existing title " +"lines. Furthermore, the first line should not end in a period." +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:302 +msgid "" +"If this is not enough detail for a commit, a new paragraph(s) can be added " +"to explain in proper depth what has happened (detail should be good enough " +"that a core developer reading the commit message understands the " +"justification for the change)." +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:307 +msgid "" +"Check :ref:`the git bootcamp ` for further " +"instructions on how the commit message should look like when merging a pull " +"request." +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:312 +msgid "" +"`How to Write a Git Commit Message `_ is a nice " +"article that describes how to write a good commit message." +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:319 +msgid "Licensing" +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:321 +msgid "" +"To accept your change we must have your formal approval for distributing " +"your work under the `PSF license`_. Therefore, you need to sign a " +"`contributor agreement`_ which allows the `Python Software Foundation`_ to " +"license your code for use with Python (you retain the copyright)." +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:327 +msgid "" +"You only have to sign this document once, it will then apply to all your " +"further contributions to Python." +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:330 +msgid "Here are the steps needed in order to sign the CLA:" +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:332 +msgid "Create a change and submit it as a pull request." +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:334 +msgid "" +"When ``cpython-cla-bot`` comments on your pull request that commit authors " +"are required to sign a Contributor License Agreement, click on the button in " +"the comment to sign it. It's enough to log in through GitHub. The process is " +"automatic." +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:339 +msgid "" +"After signing, the comment by ``cpython-cla-bot`` will update to indicate " +"that \"all commit authors signed the Contributor License Agreement." +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:350 +msgid "Submitting" +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:352 +msgid "" +"Once you are satisfied with your work you will want to commit your changes " +"to your branch. In general you can run ``git commit -a`` and that will " +"commit everything. You can always run ``git status`` to see what changes are " +"outstanding." +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:357 +msgid "" +"When all of your changes are committed (i.e. ``git status`` doesn't list " +"anything), you will want to push your branch to your fork::" +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:362 +msgid "This will get your changes up to GitHub." +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:364 +msgid "" +"Now you want to `create a pull request from your fork `_. If this " +"is a pull request in response to a pre-existing issue on the `issue " +"tracker`_, please make sure to reference the issue number using ``gh-NNNNN:" +"`` prefix in the pull request title and ``#NNNNN`` in the description." +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:371 +msgid "" +"If this is a pull request for an unreported issue (assuming you already " +"performed a search on the issue tracker for a pre-existing issue), create a " +"new issue and reference it in the pull request. Please fill in as much " +"relevant detail as possible to prevent reviewers from having to delay " +"reviewing your pull request because of lack of information." +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:377 +msgid "" +"If this issue is so simple that there's no need for an issue to track any " +"discussion of what the pull request is trying to solve (e.g. fixing a " +"spelling mistake), then the pull request needs to have the \"skip issue\" " +"label added to it by someone with commit access." +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:382 +msgid "" +"Your pull request may involve several commits as a result of addressing code " +"review comments. Please keep the commit history in the pull request intact " +"by not squashing, amending, or anything that would require a force push to " +"GitHub. A detailed commit history allows reviewers to view the diff of one " +"commit to another so they can easily verify whether their comments have been " +"addressed. The commits will be squashed when the pull request is merged." +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:391 +msgid "Converting an Existing Patch from b.p.o to GitHub" +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:393 +msgid "" +"When a patch exists in the `issue tracker`_ that should be converted into a " +"GitHub pull request, please first ask the original patch author to prepare " +"their own pull request. If the author does not respond after a week, it is " +"acceptable for another contributor to prepare the pull request based on the " +"existing patch. In this case, both parties should sign the :ref:`CLA `. " +"When creating a pull request based on another person's patch, provide " +"attribution to the original patch author by adding \"Co-authored-by: Author " +"Name .\" to the pull request description and commit message. " +"See `the GitHub article `_ on how to properly add the co-author info." +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:404 +msgid "See also :ref:`Applying a Patch to Git `." +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:407 +msgid "Reviewing" +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:409 +msgid "" +"To begin with, please be patient! There are many more people submitting pull " +"requests than there are people capable of reviewing your pull request. " +"Getting your pull request reviewed requires a reviewer to have the spare " +"time and motivation to look at your pull request (we cannot force anyone to " +"review pull requests and no one is employed to look at pull requests). If " +"your pull request has not received any notice from reviewers (i.e., no " +"comment made) after one month, first \"ping\" the issue on the `issue " +"tracker`_ to remind the nosy list that the pull request needs a review. If " +"you don't get a response within a week after pinging the issue, you can post " +"on the `Core Development Discourse category`_ to ask for someone to review " +"your pull request." +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:422 +msgid "" +"When someone does manage to find the time to look at your pull request they " +"will most likely make comments about how it can be improved (don't worry, " +"even core developers of Python have their pull requests sent back to them " +"for changes). It is then expected that you update your pull request to " +"address these comments, and the review process will thus iterate until a " +"satisfactory solution has emerged." +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:433 +msgid "How to Review a Pull Request" +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:435 +msgid "" +"One of the bottlenecks in the Python development process is the lack of code " +"reviews. If you browse the bug tracker, you will see that numerous issues " +"have a fix, but cannot be merged into the main source code repository, " +"because no one has reviewed the proposed solution. Reviewing a pull request " +"can be just as informative as providing a pull request and it will allow you " +"to give constructive comments on another developer's work. This guide " +"provides a checklist for submitting a code review. It is a common " +"misconception that in order to be useful, a code review has to be perfect. " +"This is not the case at all! It is helpful to just test the pull request and/" +"or play around with the code and leave comments in the pull request or issue " +"tracker." +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:448 +msgid "" +"If you have not already done so, get a copy of the CPython repository by " +"following the :ref:`setup guide `, build it and run the tests." +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:451 +msgid "" +"Check the bug tracker to see what steps are necessary to reproduce the issue " +"and confirm that you can reproduce the issue in your version of the Python " +"REPL (the interactive shell prompt), which you can launch by executing ./" +"python inside the repository." +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:456 +msgid "" +"Checkout and apply the pull request (Please refer to the instruction :ref:" +"`git_pr`)" +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:459 +msgid "If the changes affect any C file, run the build again." +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:461 +msgid "" +"Launch the Python REPL (the interactive shell prompt) and check if you can " +"reproduce the issue. Now that the pull request has been applied, the issue " +"should be fixed (in theory, but mistakes do happen! A good review aims to " +"catch these before the code is merged into the Python repository). You " +"should also try to see if there are any corner cases in this or related " +"issues that the author of the fix may have missed." +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:468 +msgid "" +"If you have time, run the entire test suite. If you are pressed for time, " +"run the tests for the module(s) where changes were applied. However, please " +"be aware that if you are recommending a pull request as 'merge-ready', you " +"should always make sure the entire test suite passes." +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:474 +msgid "Leaving a Pull Request Review on GitHub" +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:476 +msgid "" +"When you review a pull request, you should provide additional details and " +"context of your review process." +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:479 +msgid "" +"Instead of simply \"approving\" the pull request, leave comments. For " +"example:" +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:481 +msgid "" +"If you tested the PR, report the result and the system and version tested " +"on, such as 'Windows 10', 'Ubuntu 16.4', or 'Mac High Sierra'." +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:484 +msgid "If you request changes, try to suggest how." +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:486 +msgid "" +"Comment on what is \"good\" about the pull request, not just the \"bad\". " +"Doing so will make it easier for the PR author to find the good in your " +"comments." +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:490 +msgid "Dismissing Review from Another Core Developer" +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:492 +msgid "" +"A core developer can dismiss another core developer's review if they " +"confirmed that the requested changes have been made. When a core developer " +"has assigned the PR to themselves, then it is a sign that they are actively " +"looking after the PR, and their review should not be dismissed." +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:499 +msgid "Committing/Rejecting" +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:501 +msgid "" +"Once your pull request has reached an acceptable state (and thus considered " +"\"accepted\"), it will either be merged or rejected. If it is rejected, " +"please do not take it personally! Your work is still appreciated regardless " +"of whether your pull request is merged. Balancing what *does* and *does not* " +"go into Python is tricky and we simply cannot accept everyone's " +"contributions." +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:507 +msgid "" +"But if your pull request is merged it will then go into Python's :abbr:`VCS " +"(version control system)` to be released with the next major release of " +"Python. It may also be backported to older versions of Python as a bugfix if " +"the core developer doing the merge believes it is warranted." +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:515 +msgid "Crediting" +msgstr "" + +#: ../../getting-started/pull-request-lifecycle.rst:517 +msgid "" +"Non-trivial contributions are credited in the ``Misc/ACKS`` file (and, most " +"often, in a contribution's news entry as well). You may be asked to make " +"these edits on the behalf of the core developer who accepts your pull " +"request." +msgstr "" + +#: ../../getting-started/setup-building.rst:6 +msgid "Setup and Building" +msgstr "" + +#: ../../getting-started/setup-building.rst:10 +msgid "" +"These instructions cover how to get a working copy of the source code and a " +"compiled version of the CPython interpreter (CPython is the version of " +"Python available from https://www.python.org/). It also gives an overview of " +"the directory structure of the CPython source code." +msgstr "" + +#: ../../getting-started/setup-building.rst:15 +msgid "" +"Alternatively, if you have `Docker `_ installed you " +"might want to use `our official images `_. These contain the latest releases of several " +"Python versions, along with git head, and are provided for development and " +"testing purposes only." +msgstr "" + +#: ../../getting-started/setup-building.rst:23 +msgid "" +"The :ref:`quick-reference` gives brief summary of the process from " +"installing git to submitting a pull request." +msgstr "" + +#: ../../getting-started/setup-building.rst:29 +msgid "Install ``git``" +msgstr "" + +#: ../../getting-started/setup-building.rst:31 +msgid "" +"CPython is developed using `git `_ for version control. " +"The git command line program is named ``git``; this is also used to refer to " +"git itself. git is easily available for all common operating systems." +msgstr "" + +#: ../../getting-started/setup-building.rst:35 +msgid "**Install**" +msgstr "" + +#: ../../getting-started/setup-building.rst:37 +msgid "" +"As the CPython repo is hosted on GitHub, please refer to either the `GitHub " +"setup instructions `_ or the `git project instructions `_ for step-by-" +"step installation directions. You may also want to consider a graphical " +"client such as `TortoiseGit `_ or `GitHub Desktop " +"`_." +msgstr "" + +#: ../../getting-started/setup-building.rst:44 +msgid "**Configure**" +msgstr "" + +#: ../../getting-started/setup-building.rst:46 +msgid "" +"Configure :ref:`your name and email ` and create `an SSH " +"key `_ as this will allow you to " +"interact with GitHub without typing a username and password each time you " +"execute a command, such as ``git pull``, ``git push``, or ``git fetch``. On " +"Windows, you should also :ref:`enable autocrlf `." +msgstr "" + +#: ../../getting-started/setup-building.rst:57 +msgid "Get the source code" +msgstr "" + +#: ../../getting-started/setup-building.rst:59 +msgid "" +"The CPython repo is hosted on GitHub. To get a copy of the source code you " +"should :ref:`fork the Python repository on GitHub `, :ref:" +"`create a local clone of your personal fork, and configure the remotes " +"`." +msgstr "" + +#: ../../getting-started/setup-building.rst:63 +msgid "You will only need to execute these steps once per machine:" +msgstr "" + +#: ../../getting-started/setup-building.rst:67 +msgid "Press :guilabel:`Fork` on the top right." +msgstr "" + +#: ../../getting-started/setup-building.rst:71 +msgid "" +"Your fork will be created at :samp:`https://github.com/{}/cpython`." +msgstr "" + +#: ../../getting-started/setup-building.rst:73 +msgid "Clone your GitHub fork (replace ```` with your username)::" +msgstr "" + +#: ../../getting-started/setup-building.rst:77 +msgid "(You can use both SSH-based or HTTPS-based URLs.)" +msgstr "" + +#: ../../getting-started/setup-building.rst:82 +msgid "" +"Add an ``upstream`` remote, then configure ``git`` to pull ``main`` from " +"``upstream`` and always push to ``origin``::" +msgstr "" + +#: ../../getting-started/setup-building.rst:90 +msgid "Verify that your setup is correct::" +msgstr "" + +#: ../../getting-started/setup-building.rst:100 +msgid "" +"For more information about these commands see :ref:`Git Bootcamp and Cheat " +"Sheet `." +msgstr "" + +#: ../../getting-started/setup-building.rst:103 +msgid "" +"If you did everything correctly, you should now have a copy of the code in " +"the ``cpython`` directory and two remotes that refer to your own GitHub fork " +"(``origin``) and the official CPython repository (``upstream``)." +msgstr "" + +#: ../../getting-started/setup-building.rst:109 +msgid "" +"If you want a working copy of an already-released version of Python, i.e., a " +"version in :ref:`maintenance mode `, you can checkout a release " +"branch. For instance, to checkout a working copy of Python 3.8, do ``git " +"switch 3.8``." +msgstr "" + +#: ../../getting-started/setup-building.rst:114 +msgid "You will need to re-compile CPython when you do such an update." +msgstr "" + +#: ../../getting-started/setup-building.rst:116 +msgid "" +"Do note that CPython will notice that it is being run from a working copy. " +"This means that if you edit CPython's source code in your working copy, " +"changes to Python code will be picked up by the interpreter for immediate " +"use and testing. (If you change C code, you will need to recompile the " +"affected files as described below.)" +msgstr "" + +#: ../../getting-started/setup-building.rst:122 +msgid "" +"Patches for the documentation can be made from the same repository; see :ref:" +"`documenting`." +msgstr "" + +#: ../../getting-started/setup-building.rst:129 +msgid "Compile and build" +msgstr "" + +#: ../../getting-started/setup-building.rst:131 +msgid "" +"CPython provides several compilation flags which help with debugging various " +"things. While all of the known flags can be found in the ``Misc/" +"SpecialBuilds.txt`` file, the most critical one is the ``Py_DEBUG`` flag " +"which creates what is known as a \"pydebug\" build. This flag turns on " +"various extra sanity checks which help catch common issues. The use of the " +"flag is so common that turning on the flag is a basic compile option." +msgstr "" + +#: ../../getting-started/setup-building.rst:138 +msgid "" +"You should always develop under a pydebug build of CPython (the only " +"instance of when you shouldn't is if you are taking performance " +"measurements). Even when working only on pure Python code the pydebug build " +"provides several useful checks that one should not skip." +msgstr "" + +#: ../../getting-started/setup-building.rst:143 +msgid "" +"The effects of various configure and build flags are documented in the " +"`Python configure docs `_." +msgstr "" + +#: ../../getting-started/setup-building.rst:151 +msgid "" +"The core CPython interpreter only needs a C compiler to be built, however, " +"some of the extension modules will need development headers for additional " +"libraries (such as the ``zlib`` library for compression). Depending on what " +"you intend to work on, you might need to install these additional " +"requirements so that the compiled interpreter supports the desired features." +msgstr "" + +#: ../../getting-started/setup-building.rst:158 +msgid "" +"If you want to install these optional dependencies, consult the :ref:`build-" +"dependencies` section below." +msgstr "" + +#: ../../getting-started/setup-building.rst:161 +msgid "" +"If you don't need to install them, the basic steps for building Python for " +"development is to configure it and then compile it." +msgstr "" + +#: ../../getting-started/setup-building.rst:164 +msgid "Configuration is typically::" +msgstr "" + +#: ../../getting-started/setup-building.rst:168 +msgid "" +"More flags are available to ``configure``, but this is the minimum you " +"should do to get a pydebug build of CPython." +msgstr "" + +#: ../../getting-started/setup-building.rst:172 +msgid "" +"You might need to run ``make clean`` before or after re-running " +"``configure`` in a particular build directory." +msgstr "" + +#: ../../getting-started/setup-building.rst:175 +msgid "Once ``configure`` is done, you can then compile CPython with::" +msgstr "" + +#: ../../getting-started/setup-building.rst:179 +msgid "" +"This will build CPython with only warnings and errors being printed to " +"stderr and utilize up to 2 CPU cores. If you are using a multi-core machine " +"with more than 2 cores (or a single-core machine), you can adjust the number " +"passed into the ``-j`` flag to match the number of cores you have (or if " +"your version of Make supports it, you can use ``-j`` without a number and " +"Make will not limit the number of steps that can run simultaneously.)." +msgstr "" + +#: ../../getting-started/setup-building.rst:186 +msgid "" +"At the end of the build you should see a success message, possibly followed " +"by a list of extension modules that haven't been built because their " +"dependencies were missing:" +msgstr "" + +#: ../../getting-started/setup-building.rst:201 +msgid "" +"If the build failed and you are using a C89 or C99-compliant compiler, " +"please open a bug report on the `issue tracker`_." +msgstr "" + +#: ../../getting-started/setup-building.rst:204 +msgid "" +"If you decide to :ref:`build-dependencies`, you will need to re-run both " +"``configure`` and ``make``." +msgstr "" + +#: ../../getting-started/setup-building.rst:209 +msgid "" +"Once CPython is done building you will then have a working build that can be " +"run in-place; ``./python`` on most machines (and what is used in all " +"examples), ``./python.exe`` wherever a case-insensitive filesystem is used " +"(e.g. on macOS by default), in order to avoid conflicts with the ``Python`` " +"directory. There is normally no need to install your built copy of Python! " +"The interpreter will realize where it is being run from and thus use the " +"files found in the working copy. If you are worried you might accidentally " +"install your working copy build, you can add ``--prefix=/tmp/python`` to the " +"configuration step. When running from your working directory, it is best to " +"avoid using the ``--enable-shared`` flag to ``configure``; unless you are " +"very careful, you may accidentally run with code from an older, installed " +"shared Python library rather than from the interpreter you just built." +msgstr "" + +#: ../../getting-started/setup-building.rst:225 +msgid "Clang" +msgstr "" + +#: ../../getting-started/setup-building.rst:227 +msgid "" +"If you are using clang_ to build CPython, some flags you might want to set " +"to quiet some standard warnings which are specifically superfluous to " +"CPython are ``-Wno-unused-value -Wno-empty-body -Qunused-arguments``. You " +"can set your ``CFLAGS`` environment variable to these flags when running " +"``configure``." +msgstr "" + +#: ../../getting-started/setup-building.rst:232 +msgid "" +"If you are using clang_ with ccache_, turn off the noisy ``parentheses-" +"equality`` warnings with the ``-Wno-parentheses-equality`` flag. These " +"warnings are caused by clang not having enough information to detect that " +"extraneous parentheses in expanded macros are valid, because the " +"preprocessing is done separately by ccache." +msgstr "" + +#: ../../getting-started/setup-building.rst:238 +msgid "" +"If you are using LLVM 2.8, also use the ``-no-integrated-as`` flag in order " +"to build the :py:mod:`ctypes` module (without the flag the rest of CPython " +"will still build properly)." +msgstr "" + +#: ../../getting-started/setup-building.rst:248 +msgid "" +"If you are using the Windows Subsystem for Linux (WSL), :ref:`clone the " +"repository ` from a native Windows shell program like PowerShell " +"or the ``cmd.exe`` command prompt, and use a build of Git targeted for " +"Windows, e.g. the `Git for Windows download from the official Git website`_. " +"Otherwise, Visual Studio will not be able to find all the project's files " +"and will fail the build." +msgstr "" + +#: ../../getting-started/setup-building.rst:256 +msgid "" +"For a concise step by step summary of building Python on Windows, you can " +"read `Victor Stinner's guide`_." +msgstr "" + +#: ../../getting-started/setup-building.rst:259 +msgid "" +"All supported versions of Python can be built using Microsoft Visual Studio " +"2017 or later. You can download and use any of the free or paid versions of " +"`Visual Studio`_." +msgstr "" + +#: ../../getting-started/setup-building.rst:263 +msgid "" +"When installing it, select the :guilabel:`Python development` workload and " +"the optional :guilabel:`Python native development tools` component to obtain " +"all of the necessary build tools. You can find Git for Windows on the :" +"guilabel:`Individual components` tab if you don't already have it installed." +msgstr "" + +#: ../../getting-started/setup-building.rst:269 +msgid "" +"If you want to build MSI installers, be aware that the build toolchain for " +"them has a dependency on the Microsoft .NET Framework Version 3.5 (which may " +"not be included on recent versions of Windows, such as Windows 10). If you " +"are building on a recent Windows version, use the Control Panel (:" +"menuselection:`Programs --> Programs and Features --> Turn Windows Features " +"on or off`) and ensure that the entry :guilabel:`.NET Framework 3.5 " +"(includes .NET 2.0 and 3.0)` is enabled." +msgstr "" + +#: ../../getting-started/setup-building.rst:277 +msgid "" +"Your first build should use the command line to ensure any external " +"dependencies are downloaded:" +msgstr "" + +#: ../../getting-started/setup-building.rst:284 +msgid "" +"The above command line build uses the ``-c Debug`` argument to build in the " +"``Debug`` configuration, which enables checks and assertions helpful for " +"developing Python. By default, it builds in the ``Release`` configuration " +"and for the 64-bit ``x64`` platform rather than 32-bit ``Win32``; use ``-c`` " +"and ``-p`` to control build config and platform, respectively." +msgstr "" + +#: ../../getting-started/setup-building.rst:291 +msgid "" +"After this build succeeds, you can open the ``PCbuild\\pcbuild.sln`` " +"solution in the Visual Studio IDE to continue development, if you prefer. " +"When building in Visual Studio, make sure to select build settings that " +"match what you used with the script (the :guilabel:`Debug` configuration and " +"the :guilabel:`x64` platform) from the dropdown menus in the toolbar." +msgstr "" + +#: ../../getting-started/setup-building.rst:300 +msgid "" +"If you need to change the build configuration or platform, build once with " +"the ``build.bat`` script set to those options first before building with " +"them in VS to ensure all files are rebuilt properly, or you may encounter " +"errors when loading modules that were not rebuilt." +msgstr "" + +#: ../../getting-started/setup-building.rst:305 +msgid "" +"Avoid selecting the ``PGInstrument`` and ``PGUpdate`` configurations, as " +"these are intended for PGO builds and not for normal development." +msgstr "" + +#: ../../getting-started/setup-building.rst:308 +msgid "You can run the build of Python you've compiled with:" +msgstr "" + +#: ../../getting-started/setup-building.rst:314 +msgid "" +"See the `PCBuild readme`_ for more details on what other software is " +"necessary and how to build." +msgstr "" + +#: ../../getting-started/setup-building.rst:326 +msgid "Install dependencies" +msgstr "" + +#: ../../getting-started/setup-building.rst:328 +msgid "" +"This section explains how to install additional extensions (e.g. ``zlib``) " +"on :ref:`Linux ` and :ref:`macOS`. On Windows, extensions " +"are already included and built automatically." +msgstr "" + +#: ../../getting-started/setup-building.rst:337 +msgid "" +"For Unix-based systems, we try to use system libraries whenever available. " +"This means optional components will only build if the relevant system " +"headers are available. The best way to obtain the appropriate headers will " +"vary by distribution, but the appropriate commands for some popular " +"distributions are below." +msgstr "" + +#: ../../getting-started/setup-building.rst:343 +msgid "" +"On **Fedora**, **Red Hat Enterprise Linux** and other ``yum`` based systems::" +msgstr "" + +#: ../../getting-started/setup-building.rst:348 +msgid "On **Fedora** and other ``DNF`` based systems::" +msgstr "" + +#: ../../getting-started/setup-building.rst:353 +msgid "" +"On **Debian**, **Ubuntu**, and other ``apt`` based systems, try to get the " +"dependencies for the Python you're working on by using the ``apt`` command." +msgstr "" + +#: ../../getting-started/setup-building.rst:356 +msgid "" +"First, make sure you have enabled the source packages in the sources list. " +"You can do this by adding the location of the source packages, including " +"URL, distribution name and component name, to ``/etc/apt/sources.list``. " +"Take Ubuntu 22.04 LTS (Jammy Jellyfish) for example::" +msgstr "" + +#: ../../getting-started/setup-building.rst:363 +msgid "Alternatively, uncomment lines with ``deb-src`` using an editor, e.g.::" +msgstr "" + +#: ../../getting-started/setup-building.rst:367 +msgid "" +"For other distributions, like Debian, change the URL and names to correspond " +"with the specific distribution." +msgstr "" + +#: ../../getting-started/setup-building.rst:370 +msgid "Then you should update the packages index::" +msgstr "" + +#: ../../getting-started/setup-building.rst:374 +msgid "Now you can install the build dependencies via ``apt``::" +msgstr "" + +#: ../../getting-started/setup-building.rst:379 +msgid "" +"If you want to build all optional modules, install the following packages " +"and their dependencies::" +msgstr "" + +#: ../../getting-started/setup-building.rst:394 +msgid "" +"For **macOS systems** (versions 10.9+), the Developer Tools can be " +"downloaded and installed automatically; you do not need to download the " +"complete Xcode application." +msgstr "" + +#: ../../getting-started/setup-building.rst:398 +msgid "If necessary, run the following::" +msgstr "" + +#: ../../getting-started/setup-building.rst:402 +msgid "" +"This will also ensure that the system header files are installed into ``/usr/" +"include``." +msgstr "" + +#: ../../getting-started/setup-building.rst:409 +msgid "" +"Also note that macOS does not include several libraries used by the Python " +"standard library, including ``libzma``, so expect to see some extension " +"module build failures unless you install local copies of them. As of OS X " +"10.11, Apple no longer provides header files for the deprecated system " +"version of OpenSSL which means that you will not be able to build the " +"``_ssl`` extension. One solution is to install these libraries from a third-" +"party package manager, like Homebrew_ or MacPorts_, and then add the " +"appropriate paths for the header and library files to your ``configure`` " +"command. For example," +msgstr "" + +#: ../../getting-started/setup-building.rst:418 +msgid "with **Homebrew**::" +msgstr "" + +#: ../../getting-started/setup-building.rst:422 +msgid "For Python 3.10 and newer::" +msgstr "" + +#: ../../getting-started/setup-building.rst:431 +msgid "For Python versions 3.9 through 3.7::" +msgstr "" + +#: ../../getting-started/setup-building.rst:441 +#: ../../getting-started/setup-building.rst:455 +msgid "and ``make``::" +msgstr "" + +#: ../../getting-started/setup-building.rst:445 +msgid "or **MacPorts**::" +msgstr "" + +#: ../../getting-started/setup-building.rst:449 +msgid "and ``configure``::" +msgstr "" + +#: ../../getting-started/setup-building.rst:459 +msgid "" +"There will sometimes be optional modules added for a new release which won't " +"yet be identified in the OS-level build dependencies. In those cases, just " +"ask for assistance on the core-mentorship list." +msgstr "" + +#: ../../getting-started/setup-building.rst:463 +msgid "" +"Explaining how to build optional dependencies on a Unix-based system without " +"root access is beyond the scope of this guide." +msgstr "" + +#: ../../getting-started/setup-building.rst:466 +msgid "" +"For more details on various options and considerations for building, refer " +"to the `macOS README `_." +msgstr "" + +#: ../../getting-started/setup-building.rst:473 +msgid "" +"While you need a C compiler to build CPython, you don't need any knowledge " +"of the C language to contribute! Vast areas of CPython are written " +"completely in Python: as of this writing, CPython contains slightly more " +"Python code than C." +msgstr "" + +#: ../../getting-started/setup-building.rst:482 +msgid "Regenerate ``configure``" +msgstr "" + +#: ../../getting-started/setup-building.rst:484 +msgid "" +"If a change is made to Python which relies on some POSIX system-specific " +"functionality (such as using a new system call), it is necessary to update " +"the ``configure`` script to test for availability of the functionality." +msgstr "" + +#: ../../getting-started/setup-building.rst:488 +msgid "" +"Python's ``configure`` script is generated from ``configure.ac`` using " +"Autoconf. Instead of editing ``configure``, edit ``configure.ac`` and then " +"run ``autoreconf`` to regenerate ``configure`` and a number of other files " +"(such as ``pyconfig.h``)." +msgstr "" + +#: ../../getting-started/setup-building.rst:493 +msgid "" +"When submitting a patch with changes made to ``configure.ac``, you should " +"also include the generated files." +msgstr "" + +#: ../../getting-started/setup-building.rst:496 +msgid "" +"Note that running ``autoreconf`` is not the same as running ``autoconf``. " +"For example, ``autoconf`` by itself will not regenerate ``pyconfig.h.in``. " +"``autoreconf`` runs ``autoconf`` and a number of other tools repeatedly as " +"is appropriate." +msgstr "" + +#: ../../getting-started/setup-building.rst:501 +msgid "" +"Python's ``configure.ac`` script typically requires a specific version of " +"Autoconf. At the moment, this reads: ``AC_PREREQ(2.69)``. It also requires " +"to have the ``autoconf-archive`` and ``pkg-config`` utilities installed in " +"the system and the ``pkg.m4`` macro file located in the appropriate " +"``alocal`` location. You can easily check if this is correctly configured by " +"running::" +msgstr "" + +#: ../../getting-started/setup-building.rst:509 +msgid "" +"If the system copy of Autoconf does not match this version, you will need to " +"install your own copy of Autoconf." +msgstr "" + +#: ../../getting-started/setup-building.rst:515 +msgid "Regenerate the ABI dump" +msgstr "" + +#: ../../getting-started/setup-building.rst:517 +msgid "" +"Maintenance branches (not ``main``) have a special file located in ``Doc/" +"data/pythonX.Y.abi`` that allows us to know if a given Pull Request affects " +"the public ABI. This file is used by the GitHub CI in a check called ``Check " +"if the ABI has changed`` that will fail if a given Pull Request has changes " +"to the ABI and the ABI file is not updated." +msgstr "" + +#: ../../getting-started/setup-building.rst:523 +msgid "" +"This check acts as a fail-safe and **doesn't necessarily mean that the Pull " +"Request cannot be merged**. When this check fails you should add the " +"relevant release manager to the PR so that they are aware of the change and " +"they can validate if the change can be made or not." +msgstr "" + +#: ../../getting-started/setup-building.rst:529 +msgid "" +"ABI changes are allowed before the first release candidate. After the first " +"release candidate, all further releases must have the same ABI for ensuring " +"compatibility with native extensions and other tools that interact with the " +"Python interpreter. See the documentation about the :ref:`release candidate " +"` phase." +msgstr "" + +#: ../../getting-started/setup-building.rst:534 +msgid "" +"You can regenerate the ABI file by yourself by invoking the ``regen " +"abidump`` Make target. Note that for doing this you need to regenerate the " +"ABI file in the same environment that the GitHub CI uses to check for it. " +"This is because different platforms may include some platform-specific " +"details that make the check fail even if the Python ABI is the same. The " +"easier way to regenerate the ABI file using the same platform as the CI uses " +"is by using Docker::" +msgstr "" + +#: ../../getting-started/setup-building.rst:545 +msgid "" +"Note that the ``ubuntu`` version used to execute the script matters and " +"**must** match the version used by the CI to check the ABI. See the ``." +"github/workflows/build.yml`` file for more information." +msgstr "" + +#: ../../getting-started/setup-building.rst:550 +msgid "Troubleshoot the build" +msgstr "" + +#: ../../getting-started/setup-building.rst:552 +msgid "" +"This section lists some of the common problems that may arise during the " +"compilation of Python, with proposed solutions." +msgstr "" + +#: ../../getting-started/setup-building.rst:556 +msgid "Avoid recreating auto-generated files" +msgstr "" + +#: ../../getting-started/setup-building.rst:558 +msgid "" +"Under some circumstances you may encounter Python errors in scripts like " +"``Parser/asdl_c.py`` or ``Python/makeopcodetargets.py`` while running " +"``make``. Python auto-generates some of its own code, and a full build from " +"scratch needs to run the auto-generation scripts. However, this makes the " +"Python build require an already installed Python interpreter; this can also " +"cause version mismatches when trying to build an old (2.x) Python with a new " +"(3.x) Python installed, or vice versa." +msgstr "" + +#: ../../getting-started/setup-building.rst:566 +msgid "" +"To overcome this problem, auto-generated files are also checked into the Git " +"repository. So if you don't touch the auto-generation scripts, there's no " +"real need to auto-generate anything." +msgstr "" + +#: ../../getting-started/setup-building.rst:571 +msgid "Editors and Tools" +msgstr "" + +#: ../../getting-started/setup-building.rst:573 +msgid "" +"Python is used widely enough that practically all code editors have some " +"form of support for writing Python code. Various coding tools also include " +"Python support." +msgstr "" + +#: ../../getting-started/setup-building.rst:577 +msgid "" +"For editors and tools which the core developers have felt some special " +"comment is needed for coding *in* Python, see :ref:`resources`." +msgstr "" + +#: ../../getting-started/setup-building.rst:582 +msgid "Directory structure" +msgstr "" + +#: ../../getting-started/setup-building.rst:584 +msgid "" +"There are several top-level directories in the CPython source tree. Knowing " +"what each one is meant to hold will help you find where a certain piece of " +"functionality is implemented. Do realize, though, there are always " +"exceptions to every rule." +msgstr "" + +#: ../../getting-started/setup-building.rst:591 +msgid "``Doc``" +msgstr "" + +#: ../../getting-started/setup-building.rst:590 +msgid "" +"The official documentation. This is what https://docs.python.org/ uses. See " +"also :ref:`building-doc`." +msgstr "" + +#: ../../getting-started/setup-building.rst:595 +msgid "``Grammar``" +msgstr "" + +#: ../../getting-started/setup-building.rst:594 +msgid "" +"Contains the :abbr:`EBNF (Extended Backus-Naur Form)` grammar file for " +"Python." +msgstr "" + +#: ../../getting-started/setup-building.rst:598 +msgid "``Include``" +msgstr "" + +#: ../../getting-started/setup-building.rst:598 +msgid "Contains all interpreter-wide header files." +msgstr "" + +#: ../../getting-started/setup-building.rst:601 +msgid "``Lib``" +msgstr "" + +#: ../../getting-started/setup-building.rst:601 +msgid "The part of the standard library implemented in pure Python." +msgstr "" + +#: ../../getting-started/setup-building.rst:604 +msgid "``Mac``" +msgstr "" + +#: ../../getting-started/setup-building.rst:604 +msgid "Mac-specific code (e.g., using IDLE as a macOS application)." +msgstr "" + +#: ../../getting-started/setup-building.rst:608 +msgid "``Misc``" +msgstr "" + +#: ../../getting-started/setup-building.rst:607 +msgid "" +"Things that do not belong elsewhere. Typically this is varying kinds of " +"developer-specific documentation." +msgstr "" + +#: ../../getting-started/setup-building.rst:612 +msgid "``Modules``" +msgstr "" + +#: ../../getting-started/setup-building.rst:611 +msgid "" +"The part of the standard library (plus some other code) that is implemented " +"in C." +msgstr "" + +#: ../../getting-started/setup-building.rst:615 +msgid "``Objects``" +msgstr "" + +#: ../../getting-started/setup-building.rst:615 +msgid "Code for all built-in types." +msgstr "" + +#: ../../getting-started/setup-building.rst:618 +msgid "``PC``" +msgstr "" + +#: ../../getting-started/setup-building.rst:618 +msgid "Windows-specific code." +msgstr "" + +#: ../../getting-started/setup-building.rst:622 +msgid "``PCbuild``" +msgstr "" + +#: ../../getting-started/setup-building.rst:621 +msgid "" +"Build files for the version of MSVC currently used for the Windows " +"installers provided on python.org." +msgstr "" + +#: ../../getting-started/setup-building.rst:626 +msgid "``Parser``" +msgstr "" + +#: ../../getting-started/setup-building.rst:625 +msgid "" +"Code related to the parser. The definition of the AST nodes is also kept " +"here." +msgstr "" + +#: ../../getting-started/setup-building.rst:631 +msgid "``Programs``" +msgstr "" + +#: ../../getting-started/setup-building.rst:629 +msgid "" +"Source code for C executables, including the main function for the CPython " +"interpreter (in versions prior to Python 3.5, these files are in the Modules " +"directory)." +msgstr "" + +#: ../../getting-started/setup-building.rst:635 +msgid "``Python``" +msgstr "" + +#: ../../getting-started/setup-building.rst:634 +msgid "" +"The code that makes up the core CPython runtime. This includes the compiler, " +"eval loop and various built-in modules." +msgstr "" + +#: ../../getting-started/setup-building.rst:639 +msgid "``Tools``" +msgstr "" + +#: ../../getting-started/setup-building.rst:638 +msgid "Various tools that are (or have been) used to maintain Python." +msgstr "" + +#: ../../index.rst:3 +msgid "Python Developer's Guide" +msgstr "Guia do Desenvolvedor Python" + +#: ../../index.rst:7 +msgid "" +"This guide is a comprehensive resource for :ref:`contributing " +"` to Python_ -- for both new and experienced contributors. It " +"is :ref:`maintained ` by the same community that maintains " +"Python. We welcome your contributions to Python!" +msgstr "" +"Este guia é um recurso abrangente para :ref:`contribuir ` para " +"o Python_ -- para colaboradores novos e experientes. É :ref:`mantido " +"` pela mesma comunidade que mantém o Python. Agradecemos suas " +"contribuições ao Python!" + +#: ../../index.rst:17 +msgid "" +"Here are the basic steps needed to get set up and contribute a patch. This " +"is meant as a checklist, once you know the basics. For complete instructions " +"please see the :ref:`setup guide `." +msgstr "" +"Aqui estão as etapas básicas necessárias para configurar e contribuir com um " +"patch. Isso serve como uma lista de verificação, uma vez que você conheça o " +"básico. Para obter instruções completas, consulte o :ref:`guia de " +"configuração `." + +#: ../../index.rst:21 +msgid "" +"Install and set up :ref:`Git ` and other dependencies (see the :ref:" +"`Git Setup ` page for detailed information)." +msgstr "" +"Instale e configure :ref:`Git ` e outras dependências (consulte a " +"página :ref:`Configuração do Git ` para obter informações detalhadas)." + +#: ../../index.rst:24 +msgid "" +"Fork `the CPython repository `_ to your " +"GitHub account and :ref:`get the source code ` using::" +msgstr "" +"Faça um fork do `repositório CPython `_ " +"para sua conta GitHub e :ref:`obtenha o código-fonte ` usando::" + +#: ../../index.rst:30 +msgid "Build Python, on UNIX and macOS use::" +msgstr "Compile Python. No UNIX e macOS use::" + +#: ../../index.rst:34 +msgid "and on Windows use:" +msgstr "e no Windows use::" + +#: ../../index.rst:40 +msgid "" +"See also :ref:`more detailed instructions `, :ref:`how to install " +"and build dependencies `, and the platform-specific " +"pages for :ref:`UNIX `, :ref:`macOS`, and :ref:`Windows " +"`." +msgstr "" +"Veja também :ref:`instruções mais detalhadas `, :ref:`como " +"instalar e compilar dependências `, e as páginas " +"específicas da plataforma para :ref:`UNIX `, :ref:`macOS` e :" +"ref:`Windows `." + +#: ../../index.rst:45 +msgid ":ref:`Run the tests `::" +msgstr ":ref:`Execute os testes `::" + +#: ../../index.rst:49 +msgid "" +"On :ref:`most ` macOS systems, replace :file:`./python` " +"with :file:`./python.exe`. On Windows, use :file:`python.bat`." +msgstr "" +"Na :ref:`maioria ` dos sistemas macOS, substitua :file:`./" +"python` por :file:`./python.exe`. No Windows, use :file:`python.bat`." + +#: ../../index.rst:52 +msgid "Create a new branch where your work for the issue will go, e.g.::" +msgstr "" +"Crie um novo branch para onde irá o seu trabalho para o problema, por " +"exemplo::" + +#: ../../index.rst:56 +msgid "" +"If an issue does not already exist, please `create it `_. Trivial issues (e.g. typo fixes) do not require " +"any issue to be created." +msgstr "" +"Se um relatório de problema ainda não existir, `crie-o `_. Problemas triviais (por exemplo, correções de " +"erros de digitação) não exigem que um relatório de problema seja criado." + +#: ../../index.rst:60 +msgid "" +"Once you fixed the issue, run the tests, run ``make patchcheck``, and if " +"everything is ok, commit." +msgstr "" +"Depois de corrigir o problema, execute os testes, execute ``make " +"patchcheck`` e, se tudo estiver ok, faça o commit." + +#: ../../index.rst:63 +msgid "" +"Push the branch on your fork on GitHub and :ref:`create a pull request " +"`. Include the issue number using ``gh-NNNN`` in the pull " +"request description. For example::" +msgstr "" +"Faça o push do branch em seu fork no GitHub e :ref:`crie uma pull request " +"`. Inclua o número do relatório de problema usando ``gh-NNNN`` " +"na descrição do pull request. Por exemplo::" + +#: ../../index.rst:69 +msgid "" +"Add a News entry into the ``Misc/NEWS.d`` directory as individual file. The " +"news entry can be created by using `blurb-it `_, or the `blurb `_ tool and its ``blurb " +"add`` command. Please read more about ``blurb`` in :ref:`documentation " +"`." +msgstr "" +"Adicione uma entrada News no diretório ``Misc/NEWS.d`` como arquivo " +"individual. A entrada de notícias pode ser criada usando `blurb-it `_ ou a ferramenta `blurb `_ e seu comando ``blurb add``. Por favor, leia mais sobre ``blurb`` " +"em :ref:`documentação `." + +#: ../../index.rst:76 +msgid "" +"First time contributors will need to sign the Contributor Licensing " +"Agreement (CLA) as described in the :ref:`Licensing ` section of this " +"guide." +msgstr "" +"Os contribuidores iniciantes precisarão assinar o Contrato de Licenciamento " +"do Colaborador (CLA) conforme descrito na seção :ref:`Licenciamento ` " +"deste guia." + +#: ../../index.rst:81 +msgid "Quick Links" +msgstr "Links rápidos" + +#: ../../index.rst:83 +msgid "" +"Here are some links that you probably will reference frequently while " +"contributing to Python:" +msgstr "" +"Aqui estão alguns links que você provavelmente irá referenciar com " +"frequência ao contribuir com o Python:" + +#: ../../index.rst:86 ../../index.rst:185 +msgid "`Issue tracker`_" +msgstr "`Rastreador de problemas`_" + +#: ../../index.rst:87 ../../index.rst:187 +msgid "`Buildbot status`_" +msgstr "`Status do Buildbot`_" + +#: ../../index.rst:88 ../../index.rst:122 ../../index.rst:192 +msgid ":ref:`help`" +msgstr ":ref:`help`" + +#: ../../index.rst:89 ../../index.rst:191 +msgid "PEPs_ (Python Enhancement Proposals)" +msgstr "PEPs_ (Python Enhancement Proposals)" + +#: ../../index.rst:93 +msgid "Status of Python branches" +msgstr "Status dos branches do Python" + +#: ../../index.rst:95 +msgid "Moved to :ref:`versions`" +msgstr "Movido para :ref:`versions`" + +#: ../../index.rst:101 +msgid "Contributing" +msgstr "Contribuindo" + +#: ../../index.rst:103 +msgid "" +"We encourage everyone to contribute to Python and that's why we have put up " +"this developer's guide. If you still have questions after reviewing the " +"material in this guide, then the `Core Python Mentorship`_ group is " +"available to help guide new contributors through the process." +msgstr "" +"Incentivamos todos a contribuir com o Python e é por isso que criamos este " +"guia do desenvolvedor. Se você ainda tiver dúvidas após revisar o material " +"deste guia, o grupo `Core Python Mentorship`_ está disponível para ajudar a " +"guiar novos contribuidores durante o processo." + +#: ../../index.rst:108 +msgid "" +"A number of individuals from the Python community have contributed to a " +"series of excellent guides at `Open Source Guides `_." +msgstr "" +"Vários indivíduos da comunidade Python contribuíram para uma série de " +"excelentes guias em `Open Source Guides `_." + +#: ../../index.rst:111 +msgid "" +"Core developers and contributors alike will find the following guides useful:" +msgstr "" +"Os desenvolvedores *core* e colaboradores acharão úteis os seguintes guias:" + +#: ../../index.rst:113 +msgid "" +"`How to Contribute to Open Source `_" +msgstr "" +"`How to Contribute to Open Source `_ (Como contribuir para o código aberto)" + +#: ../../index.rst:114 +msgid "" +"`Building Welcoming Communities `_" +msgstr "" +"`Building Welcoming Communities `_ (Criando comunidades receptivas)" + +#: ../../index.rst:116 +msgid "Guide for contributing to Python:" +msgstr "Guia para contribuir com o Python:" + +#: ../../index.rst:119 +msgid "Contributors" +msgstr "Contribuidores" + +#: ../../index.rst:119 +msgid "Documentarians" +msgstr "Documentadores" + +#: ../../index.rst:119 +msgid "Triagers" +msgstr "Triagers" + +#: ../../index.rst:121 +msgid ":ref:`setup`" +msgstr ":ref:`setup`" + +#: ../../index.rst:121 +msgid ":ref:`docquality`" +msgstr ":ref:`docquality`" + +#: ../../index.rst:121 +msgid ":ref:`tracker`" +msgstr ":ref:`tracker`" + +#: ../../index.rst:121 +msgid ":ref:`responsibilities`" +msgstr ":ref:`responsibilities`" + +#: ../../index.rst:122 +msgid ":ref:`documenting`" +msgstr ":ref:`documenting`" + +#: ../../index.rst:122 +msgid ":ref:`triaging`" +msgstr ":ref:`triaging`" + +#: ../../index.rst:122 ../../index.rst:193 +msgid ":ref:`developers`" +msgstr ":ref:`developers`" + +#: ../../index.rst:123 +msgid ":ref:`pullrequest`" +msgstr ":ref:`pullrequest`" + +#: ../../index.rst:123 +msgid ":ref:`style-guide`" +msgstr ":ref:`style-guide`" + +#: ../../index.rst:123 +msgid ":ref:`helptriage`" +msgstr ":ref:`helptriage`" + +#: ../../index.rst:123 +msgid ":ref:`committing`" +msgstr ":ref:`committing`" + +#: ../../index.rst:124 +msgid ":ref:`runtests`" +msgstr ":ref:`runtests`" + +#: ../../index.rst:124 +msgid ":ref:`rst-primer`" +msgstr ":ref:`rst-primer`" + +#: ../../index.rst:124 ../../index.rst:127 ../../index.rst:186 +msgid ":ref:`experts`" +msgstr ":ref:`experts`" + +#: ../../index.rst:124 ../../index.rst:128 +msgid ":ref:`devcycle`" +msgstr ":ref:`devcycle`" + +#: ../../index.rst:125 +msgid ":ref:`fixingissues`" +msgstr ":ref:`fixingissues`" + +#: ../../index.rst:125 +msgid ":ref:`translating`" +msgstr ":ref:`translating`" + +#: ../../index.rst:125 +msgid ":ref:`labels`" +msgstr ":ref:`labels`" + +#: ../../index.rst:125 +msgid ":ref:`motivations`" +msgstr ":ref:`motivations`" + +#: ../../index.rst:126 +msgid ":ref:`communication`" +msgstr ":ref:`communication`" + +#: ../../index.rst:126 +msgid ":ref:`gh-faq`" +msgstr ":ref:`gh-faq`" + +#: ../../index.rst:126 +msgid ":ref:`office hour`" +msgstr ":ref:`office hour`" + +#: ../../index.rst:127 +msgid ":ref:`triage-team`" +msgstr ":ref:`triage-team`" + +#: ../../index.rst:131 +msgid "" +"We **recommend** that the documents in this guide be read as needed. You can " +"stop where you feel comfortable and begin contributing immediately without " +"reading and understanding these documents all at once. If you do choose to " +"skip around within the documentation, be aware that it is written assuming " +"preceding documentation has been read so you may find it necessary to " +"backtrack to fill in missing concepts and terminology." +msgstr "" +"**Recomendamos** que os documentos deste guia sejam lidos conforme " +"necessário. Você pode parar onde se sentir confortável e começar a " +"contribuir imediatamente sem ler e entender esses documentos de uma só vez. " +"Se você optar por pular a documentação, esteja ciente de que ela foi escrita " +"assumindo que a documentação anterior foi lida, portanto, você pode achar " +"necessário retroceder para preencher os conceitos e a terminologia ausentes." + +#: ../../index.rst:140 +msgid "Proposing changes to Python itself" +msgstr "Propondo mudanças no próprio Python" + +#: ../../index.rst:142 +msgid "" +"Improving Python's code, documentation and tests are ongoing tasks that are " +"never going to be \"finished\", as Python operates as part of an ever-" +"evolving system of technology. An even more challenging ongoing task than " +"these necessary maintenance activities is finding ways to make Python, in " +"the form of the standard library and the language definition, an even better " +"tool in a developer's toolkit." +msgstr "" +"Melhorar o código, a documentação e os testes do Python são tarefas " +"contínuas que nunca serão \"concluídas\", pois o Python opera como parte de " +"um sistema de tecnologia em constante evolução. Uma tarefa contínua ainda " +"mais desafiadora do que essas atividades de manutenção necessárias é " +"encontrar maneiras de tornar o Python, na forma de biblioteca padrão e " +"definição de linguagem, uma ferramenta ainda melhor no kit de ferramentas de " +"um desenvolvedor." + +#: ../../index.rst:149 +msgid "" +"While these kinds of change are much rarer than those described above, they " +"do happen and that process is also described as part of this guide:" +msgstr "" +"Embora esses tipos de mudança sejam muito mais raros do que os descritos " +"acima, eles acontecem e esse processo também é descrito como parte deste " +"guia:" + +#: ../../index.rst:152 +msgid ":ref:`stdlibchanges`" +msgstr ":ref:`stdlibchanges`" + +#: ../../index.rst:153 +msgid ":ref:`langchanges`" +msgstr ":ref:`langchanges`" + +#: ../../index.rst:157 +msgid "Other Interpreter Implementations" +msgstr "Outras implementações de interpretador" + +#: ../../index.rst:159 +msgid "" +"This guide is specifically for contributing to the Python reference " +"interpreter, also known as CPython (while most of the standard library is " +"written in Python, the interpreter core is written in C and integrates most " +"easily with the C and C++ ecosystems)." +msgstr "" +"Este guia é especificamente para contribuir com o interpretador de " +"referência do Python, também conhecido como CPython (enquanto a maior parte " +"da biblioteca padrão é escrita em Python, o núcleo do interpretador é " +"escrito em C e se integra mais facilmente com os ecossistemas C e C++)." + +#: ../../index.rst:164 +msgid "" +"There are other Python implementations, each with a different focus. Like " +"CPython, they always have more things they would like to do than they have " +"developers to work on them. Some major examples that may be of interest are:" +msgstr "" +"Existem outras implementações do Python, cada uma com um foco diferente. " +"Como o CPython, eles sempre têm mais coisas que gostariam de fazer do que " +"desenvolvedores para trabalhar nelas. Alguns exemplos importantes que podem " +"ser interessantes são:" + +#: ../../index.rst:168 +msgid "" +"PyPy_: A Python interpreter focused on high speed (JIT-compiled) operation " +"on major platforms" +msgstr "" +"PyPy_: Um interpretador Python focado em operação de alta velocidade " +"(compilado por JIT) nas principais plataformas" + +#: ../../index.rst:170 +msgid "" +"Jython_: A Python interpreter focused on good integration with the Java " +"Virtual Machine (JVM) environment" +msgstr "" +"Jython_: Um interpretador Python focado em boa integração com o ambiente " +"Java Virtual Machine (JVM)" + +#: ../../index.rst:172 +msgid "" +"IronPython_: A Python interpreter focused on good integration with the " +"Common Language Runtime (CLR) provided by .NET and Mono" +msgstr "" +"IronPython_: Um interpretador Python focado em boa integração com o Common " +"Language Runtime (CLR) fornecido por .NET e Mono" + +#: ../../index.rst:174 +msgid "" +"Stackless_: A Python interpreter focused on providing lightweight " +"microthreads while remaining largely compatible with CPython specific " +"extension modules" +msgstr "" +"Stackless_: um interpretador Python focado em fornecer microthreads leves, " +"permanecendo amplamente compatível com módulos de extensão específicos do " +"CPython" + +#: ../../index.rst:180 +msgid "Key Resources" +msgstr "Principais recursos" + +#: ../../index.rst:183 +msgid "Coding style guides" +msgstr "Guias de estilo de codificação" + +#: ../../index.rst:183 +msgid ":PEP:`7` (Style Guide for C Code)" +msgstr ":PEP:`7` (Guia de estilo para código em C)" + +#: ../../index.rst:184 +msgid ":PEP:`8` (Style Guide for Python Code)" +msgstr ":PEP:`8` (Guia de estilo para código em Python)" + +#: ../../index.rst:189 +msgid "Source code" +msgstr "Código-fonte" + +#: ../../index.rst:189 +msgid "`Browse online `_" +msgstr "`Acessar online `_" + +#: ../../index.rst:190 +msgid "" +"`Snapshot of the *main* branch `_" +msgstr "" +"`Snapshot do branch *main* `_" + +#: ../../index.rst:199 +msgid "Additional Resources" +msgstr "Recursos adicionais" + +#: ../../index.rst:201 +msgid "Anyone can clone the sources for this guide. See :ref:`devguide`." +msgstr "" +"Qualquer pessoa pode clonar os arquivos fonte deste guia. Veja :ref:" +"`devguide`." + +#: ../../index.rst:207 +msgid "Help with ..." +msgstr "Ajudar com ..." + +#: ../../index.rst:204 +msgid ":ref:`exploring`" +msgstr ":ref:`exploring`" + +#: ../../index.rst:205 +msgid ":ref:`grammar`" +msgstr ":ref:`grammar`" + +#: ../../index.rst:206 +msgid ":ref:`parser`" +msgstr ":ref:`parser`" + +#: ../../index.rst:207 +msgid ":ref:`compiler`" +msgstr ":ref:`compiler`" + +#: ../../index.rst:208 +msgid ":ref:`garbage_collector`" +msgstr ":ref:`garbage_collector`" + +#: ../../index.rst:213 +msgid "Tool support" +msgstr "Suporte a ferramentas" + +#: ../../index.rst:210 +msgid ":ref:`gdb`" +msgstr ":ref:`gdb`" + +#: ../../index.rst:211 +msgid ":ref:`clang`" +msgstr ":ref:`clang`" + +#: ../../index.rst:212 +msgid "" +"Various tools with configuration files as found in the `Misc directory`_" +msgstr "" +"Várias ferramentas com arquivos de configuração encontrados no `diretório " +"Misc`_" + +#: ../../index.rst:213 +msgid "" +"Information about editors and their configurations can be found in the `wiki " +"`_" +msgstr "" +"Informações sobre editores e suas configurações podem ser encontradas na " +"`wiki `_" + +#: ../../index.rst:215 +msgid "`python.org maintenance`_" +msgstr "`Manutenção do python.org`_" + +#: ../../index.rst:217 +msgid ":ref:`Search this guide `" +msgstr ":ref:`Pesquisar neste guia `" + +#: ../../index.rst:221 +msgid "Code of Conduct" +msgstr "Código de conduta" + +#: ../../index.rst:222 +msgid "" +"Please note that all interactions on `Python Software Foundation `__-supported infrastructure is `covered " +"`__ by the `PSF Code of Conduct `__, which includes all infrastructure used in the " +"development of Python itself (e.g. mailing lists, issue trackers, GitHub, " +"etc.). In general this means everyone is expected to be open, considerate, " +"and respectful of others no matter what their position is within the project." +msgstr "" +"Observe que todas as interações na infraestrutura suportada pela `Python " +"Software Foundation `__ estão `cobertas " +"`__ pelo `Código de Conduta da PSF `__, que inclui toda a infraestrutura usada no " +"desenvolvimento do próprio Python (por exemplo, listas de discussão, " +"rastreadores de problemas, GitHub, etc.). Em geral, isso significa que todos " +"devem ser abertos, atenciosos e respeitosos com os outros, independentemente " +"de sua posição dentro do projeto." + +#: ../../index.rst:235 +msgid "Full Table of Contents" +msgstr "Índice completo" + +#: ../../internals/compiler.rst:5 +msgid "Compiler Design" +msgstr "" + +#: ../../internals/compiler.rst:12 +msgid "" +"In CPython, the compilation from source code to bytecode involves several " +"steps:" +msgstr "" + +#: ../../internals/compiler.rst:14 +msgid "Tokenize the source code (:cpy-file:`Parser/tokenizer.c`)" +msgstr "" + +#: ../../internals/compiler.rst:15 +msgid "" +"Parse the stream of tokens into an Abstract Syntax Tree (:cpy-file:`Parser/" +"parser.c`)" +msgstr "" + +#: ../../internals/compiler.rst:17 +msgid "Transform AST into a Control Flow Graph (:cpy-file:`Python/compile.c`)" +msgstr "" + +#: ../../internals/compiler.rst:18 +msgid "" +"Emit bytecode based on the Control Flow Graph (:cpy-file:`Python/compile.c`)" +msgstr "" + +#: ../../internals/compiler.rst:20 +msgid "" +"The purpose of this document is to outline how these steps of the process " +"work." +msgstr "" + +#: ../../internals/compiler.rst:22 +msgid "" +"This document does not touch on how parsing works beyond what is needed to " +"explain what is needed for compilation. It is also not exhaustive in terms " +"of the how the entire system works. You will most likely need to read some " +"source to have an exact understanding of all details." +msgstr "" + +#: ../../internals/compiler.rst:29 +msgid "Parsing" +msgstr "" + +#: ../../internals/compiler.rst:31 +msgid "" +"As of Python 3.9, Python's parser is a PEG parser of a somewhat unusual " +"design (since its input is a stream of tokens rather than a stream of " +"characters as is more common with PEG parsers)." +msgstr "" + +#: ../../internals/compiler.rst:35 +msgid "" +"The grammar file for Python can be found in :cpy-file:`Grammar/python." +"gram`. The definitions for literal tokens (such as ``:``, numbers, etc.) " +"can be found in :cpy-file:`Grammar/Tokens`. Various C files, including :cpy-" +"file:`Parser/parser.c` are generated from these (see :ref:`grammar`)." +msgstr "" + +#: ../../internals/compiler.rst:43 +msgid "Abstract Syntax Trees (AST)" +msgstr "" + +#: ../../internals/compiler.rst:-1 +msgid "Green Tree Snakes" +msgstr "" + +#: ../../internals/compiler.rst:49 +msgid "" +"See also `Green Tree Snakes - the missing Python AST docs `_ by Thomas Kluyver." +msgstr "" + +#: ../../internals/compiler.rst:52 +msgid "" +"The abstract syntax tree (AST) is a high-level representation of the program " +"structure without the necessity of containing the source code; it can be " +"thought of as an abstract representation of the source code. The " +"specification of the AST nodes is specified using the Zephyr Abstract Syntax " +"Definition Language (ASDL) [Wang97]_." +msgstr "" + +#: ../../internals/compiler.rst:58 +msgid "" +"The definition of the AST nodes for Python is found in the file :cpy-file:" +"`Parser/Python.asdl`." +msgstr "" + +#: ../../internals/compiler.rst:61 +msgid "" +"Each AST node (representing statements, expressions, and several specialized " +"types, like list comprehensions and exception handlers) is defined by the " +"ASDL. Most definitions in the AST correspond to a particular source " +"construct, such as an 'if' statement or an attribute lookup. The definition " +"is independent of its realization in any particular programming language." +msgstr "" + +#: ../../internals/compiler.rst:68 +msgid "" +"The following fragment of the Python ASDL construct demonstrates the " +"approach and syntax::" +msgstr "" + +#: ../../internals/compiler.rst:79 +msgid "" +"The preceding example describes two different kinds of statements and an " +"expression: function definitions, return statements, and yield expressions. " +"All three kinds are considered of type ``stmt`` as shown by ``|`` separating " +"the various kinds. They all take arguments of various kinds and amounts." +msgstr "" + +#: ../../internals/compiler.rst:84 +msgid "" +"Modifiers on the argument type specify the number of values needed; ``?`` " +"means it is optional, ``*`` means 0 or more, while no modifier means only " +"one value for the argument and it is required. ``FunctionDef``, for " +"instance, takes an ``identifier`` for the *name*, ``arguments`` for *args*, " +"zero or more ``stmt`` arguments for *body*, and zero or more ``expr`` " +"arguments for *decorators*." +msgstr "" + +#: ../../internals/compiler.rst:91 +msgid "" +"Do notice that something like 'arguments', which is a node type, is " +"represented as a single AST node and not as a sequence of nodes as with stmt " +"as one might expect." +msgstr "" + +#: ../../internals/compiler.rst:95 +msgid "" +"All three kinds also have an 'attributes' argument; this is shown by the " +"fact that 'attributes' lacks a '|' before it." +msgstr "" + +#: ../../internals/compiler.rst:98 +msgid "" +"The statement definitions above generate the following C structure type:" +msgstr "" + +#: ../../internals/compiler.rst:124 +msgid "" +"Also generated are a series of constructor functions that allocate (in this " +"case) a ``stmt_ty`` struct with the appropriate initialization. The " +"``kind`` field specifies which component of the union is initialized. The " +"``FunctionDef()`` constructor function sets 'kind' to ``FunctionDef_kind`` " +"and initializes the *name*, *args*, *body*, and *attributes* fields." +msgstr "" + +#: ../../internals/compiler.rst:132 +msgid "Memory Management" +msgstr "" + +#: ../../internals/compiler.rst:134 +msgid "" +"Before discussing the actual implementation of the compiler, a discussion of " +"how memory is handled is in order. To make memory management simple, an " +"arena is used. This means that a memory is pooled in a single location for " +"easy allocation and removal. What this gives us is the removal of explicit " +"memory deallocation. Because memory allocation for all needed memory in the " +"compiler registers that memory with the arena, a single call to free the " +"arena is all that is needed to completely free all memory used by the " +"compiler." +msgstr "" + +#: ../../internals/compiler.rst:142 +msgid "" +"In general, unless you are working on the critical core of the compiler, " +"memory management can be completely ignored. But if you are working at " +"either the very beginning of the compiler or the end, you need to care about " +"how the arena works. All code relating to the arena is in either :cpy-file:" +"`Include/internal/pycore_pyarena.h` or :cpy-file:`Python/pyarena.c`." +msgstr "" + +#: ../../internals/compiler.rst:148 +msgid "" +"``PyArena_New()`` will create a new arena. The returned ``PyArena`` " +"structure will store pointers to all memory given to it. This does the " +"bookkeeping of what memory needs to be freed when the compiler is finished " +"with the memory it used. That freeing is done with ``PyArena_Free()``. This " +"only needs to be called in strategic areas where the compiler exits." +msgstr "" + +#: ../../internals/compiler.rst:154 +msgid "" +"As stated above, in general you should not have to worry about memory " +"management when working on the compiler. The technical details have been " +"designed to be hidden from you for most cases." +msgstr "" + +#: ../../internals/compiler.rst:158 +msgid "" +"The only exception comes about when managing a PyObject. Since the rest of " +"Python uses reference counting, there is extra support added to the arena to " +"cleanup each PyObject that was allocated. These cases are very rare. " +"However, if you've allocated a PyObject, you must tell the arena about it by " +"calling ``PyArena_AddPyObject()``." +msgstr "" + +#: ../../internals/compiler.rst:166 +msgid "Source Code to AST" +msgstr "" + +#: ../../internals/compiler.rst:168 +msgid "" +"The AST is generated from source code using the function " +"``_PyParser_ASTFromString()`` or ``_PyParser_ASTFromFile()`` (from :cpy-file:" +"`Parser/peg_api.c`) depending on the input type." +msgstr "" + +#: ../../internals/compiler.rst:172 +msgid "" +"After some checks, a helper function in :cpy-file:`Parser/parser.c` begins " +"applying production rules on the source code it receives; converting source " +"code to tokens and matching these tokens recursively to their corresponding " +"rule. The rule's corresponding rule function is called on every match. " +"These rule functions follow the format :samp:`xx_rule`. Where *xx* is the " +"grammar rule that the function handles and is automatically derived from :" +"cpy-file:`Grammar/python.gram` :cpy-file:`Tools/peg_generator/pegen/" +"c_generator.py`." +msgstr "" + +#: ../../internals/compiler.rst:181 +msgid "" +"Each rule function in turn creates an AST node as it goes along. It does " +"this by allocating all the new nodes it needs, calling the proper AST node " +"creation functions for any required supporting functions and connecting them " +"as needed. This continues until all nonterminal symbols are replaced with " +"terminals. If an error occurs, the rule functions backtrack and try another " +"rule function. If there are no more rules, an error is set and the parsing " +"ends." +msgstr "" + +#: ../../internals/compiler.rst:188 +msgid "" +"The AST node creation helper functions have the name :samp:`_PyAST_{xx}` " +"where *xx* is the AST node that the function creates. These are defined by " +"the ASDL grammar and contained in :cpy-file:`Python/Python-ast.c` (which is " +"generated by :cpy-file:`Parser/asdl_c.py` from :cpy-file:`Parser/Python." +"asdl`). This all leads to a sequence of AST nodes stored in ``asdl_seq`` " +"structs." +msgstr "" + +#: ../../internals/compiler.rst:194 +msgid "" +"To demonstrate everything explained so far, here's the rule function " +"responsible for a simple named import statement such as ``import sys``. " +"Note that error-checking and debugging code has been omitted. Removed parts " +"are represented by ``...``. Furthermore, some comments have been added for " +"explanation. These comments may not be present in the actual code." +msgstr "" + +#: ../../internals/compiler.rst:237 +msgid "" +"To improve backtracking performance, some rules (chosen by applying a " +"``(memo)`` flag in the grammar file) are memoized. Each rule function " +"checks if a memoized version exists and returns that if so, else it " +"continues in the manner stated in the previous paragraphs." +msgstr "" + +#: ../../internals/compiler.rst:242 +msgid "" +"There are macros for creating and using ``asdl_xx_seq *`` types, where *xx* " +"is a type of the ASDL sequence. Three main types are defined manually -- " +"``generic``, ``identifier`` and ``int``. These types are found in :cpy-file:" +"`Python/asdl.c` and its corresponding header file :cpy-file:`Include/" +"internal/pycore_asdl.h`. Functions and macros for creating ``asdl_xx_seq " +"*`` types are as follows:" +msgstr "" + +#: ../../internals/compiler.rst:249 +msgid "``_Py_asdl_generic_seq_new(Py_ssize_t, PyArena *)``" +msgstr "" + +#: ../../internals/compiler.rst:250 +msgid "Allocate memory for an ``asdl_generic_seq`` of the specified length" +msgstr "" + +#: ../../internals/compiler.rst:251 +msgid "``_Py_asdl_identifier_seq_new(Py_ssize_t, PyArena *)``" +msgstr "" + +#: ../../internals/compiler.rst:252 +msgid "Allocate memory for an ``asdl_identifier_seq`` of the specified length" +msgstr "" + +#: ../../internals/compiler.rst:254 +msgid "``_Py_asdl_int_seq_new(Py_ssize_t, PyArena *)``" +msgstr "" + +#: ../../internals/compiler.rst:254 +msgid "Allocate memory for an ``asdl_int_seq`` of the specified length" +msgstr "" + +#: ../../internals/compiler.rst:256 +msgid "" +"In addition to the three types mentioned above, some ASDL sequence types are " +"automatically generated by :cpy-file:`Parser/asdl_c.py` and found in :cpy-" +"file:`Include/internal/pycore_ast.h`. Macros for using both manually " +"defined and automatically generated ASDL sequence types are as follows:" +msgstr "" + +#: ../../internals/compiler.rst:261 +msgid "``asdl_seq_GET(asdl_xx_seq *, int)``" +msgstr "" + +#: ../../internals/compiler.rst:262 +msgid "Get item held at a specific position in an ``asdl_xx_seq``" +msgstr "" + +#: ../../internals/compiler.rst:264 +msgid "``asdl_seq_SET(asdl_xx_seq *, int, stmt_ty)``" +msgstr "" + +#: ../../internals/compiler.rst:264 +msgid "Set a specific index in an ``asdl_xx_seq`` to the specified value" +msgstr "" + +#: ../../internals/compiler.rst:266 +msgid "" +"Untyped counterparts exist for some of the typed macros. These are useful " +"when a function needs to manipulate a generic ASDL sequence:" +msgstr "" + +#: ../../internals/compiler.rst:269 +msgid "``asdl_seq_GET_UNTYPED(asdl_seq *, int)``" +msgstr "" + +#: ../../internals/compiler.rst:270 +msgid "Get item held at a specific position in an ``asdl_seq``" +msgstr "" + +#: ../../internals/compiler.rst:271 +msgid "``asdl_seq_SET_UNTYPED(asdl_seq *, int, stmt_ty)``" +msgstr "" + +#: ../../internals/compiler.rst:272 +msgid "Set a specific index in an ``asdl_seq`` to the specified value" +msgstr "" + +#: ../../internals/compiler.rst:274 +msgid "``asdl_seq_LEN(asdl_seq *)``" +msgstr "" + +#: ../../internals/compiler.rst:274 +msgid "Return the length of an ``asdl_seq`` or ``asdl_xx_seq``" +msgstr "" + +#: ../../internals/compiler.rst:276 +msgid "" +"Note that typed macros and functions are recommended over their untyped " +"counterparts. Typed macros carry out checks in debug mode and aid debugging " +"errors caused by incorrectly casting from ``void *``." +msgstr "" + +#: ../../internals/compiler.rst:280 +msgid "" +"If you are working with statements, you must also worry about keeping track " +"of what line number generated the statement. Currently the line number is " +"passed as the last parameter to each ``stmt_ty`` function." +msgstr "" + +#: ../../internals/compiler.rst:284 +msgid "" +"The new PEG parser generates an AST directly without creating a parse tree. " +"``Python/ast.c`` is now only used to validate the AST for debugging purposes." +msgstr "" + +#: ../../internals/compiler.rst:289 +msgid ":pep:`617` (PEP 617 -- New PEG parser for CPython)" +msgstr "" + +#: ../../internals/compiler.rst:293 +msgid "Control Flow Graphs" +msgstr "" + +#: ../../internals/compiler.rst:295 +msgid "" +"A *control flow graph* (often referenced by its acronym, CFG) is a directed " +"graph that models the flow of a program. A node of a CFG is not an " +"individual bytecode instruction, but instead represents a sequence of " +"bytecode instructions that always execute sequentially. Each node is called " +"a *basic block* and must always execute from start to finish, with a single " +"entry point at the beginning and a single exit point at the end. If some " +"bytecode instruction *a* needs to jump to some other bytecode instruction " +"*b*, then *a* must occur at the end of its basic block, and *b* must occur " +"at the start of its basic block." +msgstr "" + +#: ../../internals/compiler.rst:306 +msgid "As an example, consider the following code snippet:" +msgstr "" + +#: ../../internals/compiler.rst:317 +msgid "" +"The ``x < 10`` guard is represented by its own basic block that compares " +"``x`` with ``10`` and then ends in a conditional jump based on the result of " +"the comparison. This conditional jump allows the block to point to both the " +"body of the ``if`` and the body of the ``else``. The ``if`` basic block " +"contains the ``f1()`` and ``f2()`` calls and points to the ``end()`` basic " +"block. The ``else`` basic block contains the ``g()`` call and similarly " +"points to the ``end()`` block." +msgstr "" + +#: ../../internals/compiler.rst:325 +msgid "" +"Note that more complex code in the guard, the ``if`` body, or the ``else`` " +"body may be represented by multiple basic blocks. For instance, short-" +"circuiting boolean logic in a guard like ``if x or y:`` will produce one " +"basic block that tests the truth value of ``x`` and then points both (1) to " +"the start of the ``if`` body and (2) to a different basic block that tests " +"the truth value of y." +msgstr "" + +#: ../../internals/compiler.rst:332 +msgid "" +"CFGs are usually one step away from final code output. Code is directly " +"generated from the basic blocks (with jump targets adjusted based on the " +"output order) by doing a post-order depth-first search on the CFG following " +"the edges." +msgstr "" + +#: ../../internals/compiler.rst:339 +msgid "AST to CFG to Bytecode" +msgstr "" + +#: ../../internals/compiler.rst:341 +msgid "" +"With the AST created, the next step is to create the CFG. The first step is " +"to convert the AST to Python bytecode without having jump targets resolved " +"to specific offsets (this is calculated when the CFG goes to final " +"bytecode). Essentially, this transforms the AST into Python bytecode with " +"control flow represented by the edges of the CFG." +msgstr "" + +#: ../../internals/compiler.rst:347 +msgid "" +"Conversion is done in two passes. The first creates the namespace " +"(variables can be classified as local, free/cell for closures, or global). " +"With that done, the second pass essentially flattens the CFG into a list and " +"calculates jump offsets for final output of bytecode." +msgstr "" + +#: ../../internals/compiler.rst:352 +msgid "" +"The conversion process is initiated by a call to the function " +"``_PyAST_Compile()`` in :cpy-file:`Python/compile.c`. This function does " +"both the conversion of the AST to a CFG and outputting final bytecode from " +"the CFG. The AST to CFG step is handled mostly by two functions called by " +"``_PyAST_Compile()``; ``_PySymtable_Build()`` and ``compiler_mod()``. The " +"former is in :cpy-file:`Python/symtable.c` while the latter is :cpy-file:" +"`Python/compile.c`." +msgstr "" + +#: ../../internals/compiler.rst:360 +msgid "" +"``_PySymtable_Build()`` begins by entering the starting code block for the " +"AST (passed-in) and then calling the proper :samp:`symtable_visit_{xx}` " +"function (with *xx* being the AST node type). Next, the AST tree is walked " +"with the various code blocks that delineate the reach of a local variable as " +"blocks are entered and exited using ``symtable_enter_block()`` and " +"``symtable_exit_block()``, respectively." +msgstr "" + +#: ../../internals/compiler.rst:367 +msgid "" +"Once the symbol table is created, it is time for CFG creation, whose code is " +"in :cpy-file:`Python/compile.c`. This is handled by several functions that " +"break the task down by various AST node types. The functions are all named :" +"samp:`compiler_visit_{xx}` where *xx* is the name of the node type (such as " +"``stmt``, ``expr``, etc.). Each function receives a ``struct compiler *`` " +"and :samp:`{xx}_ty` where *xx* is the AST node type. Typically these " +"functions consist of a large 'switch' statement, branching based on the kind " +"of node type passed to it. Simple things are handled inline in the 'switch' " +"statement with more complex transformations farmed out to other functions " +"named :samp:`compiler_{xx}` with *xx* being a descriptive name of what is " +"being handled." +msgstr "" + +#: ../../internals/compiler.rst:379 +msgid "" +"When transforming an arbitrary AST node, use the ``VISIT()`` macro. The " +"appropriate :samp:`compiler_visit_{xx}` function is called, based on the " +"value passed in for (so :samp:`VISIT({c}, expr, {node})` calls :" +"samp:`compiler_visit_expr({c}, {node})`). The ``VISIT_SEQ()`` macro is very " +"similar, but is called on AST node sequences (those values that were created " +"as arguments to a node that used the '*' modifier). There is also " +"``VISIT_SLICE()`` just for handling slices." +msgstr "" + +#: ../../internals/compiler.rst:387 +msgid "Emission of bytecode is handled by the following macros:" +msgstr "" + +#: ../../internals/compiler.rst:389 +msgid "``ADDOP(struct compiler *, int)``" +msgstr "" + +#: ../../internals/compiler.rst:390 +msgid "add a specified opcode" +msgstr "" + +#: ../../internals/compiler.rst:392 +msgid "``ADDOP_NOLINE(struct compiler *, int)``" +msgstr "" + +#: ../../internals/compiler.rst:392 +msgid "" +"like ``ADDOP`` without a line number; used for artificial opcodes without no " +"corresponding token in the source code" +msgstr "" + +#: ../../internals/compiler.rst:395 +msgid "``ADDOP_IN_SCOPE(struct compiler *, int)``" +msgstr "" + +#: ../../internals/compiler.rst:395 +msgid "" +"like ``ADDOP``, but also exits current scope; used for adding return value " +"opcodes in lambdas and closures" +msgstr "" + +#: ../../internals/compiler.rst:397 +msgid "``ADDOP_I(struct compiler *, int, Py_ssize_t)``" +msgstr "" + +#: ../../internals/compiler.rst:398 +msgid "add an opcode that takes an integer argument" +msgstr "" + +#: ../../internals/compiler.rst:405 +msgid "``ADDOP_O(struct compiler *, int, PyObject *, TYPE)``" +msgstr "" + +#: ../../internals/compiler.rst:400 +msgid "" +"add an opcode with the proper argument based on the position of the " +"specified PyObject in PyObject sequence object, but with no handling of " +"mangled names; used for when you need to do named lookups of objects such as " +"globals, consts, or parameters where name mangling is not possible and the " +"scope of the name is known; *TYPE* is the name of PyObject sequence " +"(``names`` or ``varnames``)" +msgstr "" + +#: ../../internals/compiler.rst:407 +msgid "``ADDOP_N(struct compiler *, int, PyObject *, TYPE)``" +msgstr "" + +#: ../../internals/compiler.rst:408 +msgid "just like ``ADDOP_O``, but steals a reference to PyObject" +msgstr "" + +#: ../../internals/compiler.rst:410 +msgid "``ADDOP_NAME(struct compiler *, int, PyObject *, TYPE)``" +msgstr "" + +#: ../../internals/compiler.rst:410 +msgid "" +"just like ``ADDOP_O``, but name mangling is also handled; used for attribute " +"loading or importing based on name" +msgstr "" + +#: ../../internals/compiler.rst:413 +msgid "``ADDOP_LOAD_CONST(struct compiler *, PyObject *)``" +msgstr "" + +#: ../../internals/compiler.rst:413 +msgid "" +"add the ``LOAD_CONST`` opcode with the proper argument based on the position " +"of the specified PyObject in the consts table." +msgstr "" + +#: ../../internals/compiler.rst:415 +msgid "``ADDOP_LOAD_CONST_NEW(struct compiler *, PyObject *)``" +msgstr "" + +#: ../../internals/compiler.rst:416 +msgid "just like ``ADDOP_LOAD_CONST_NEW``, but steals a reference to PyObject" +msgstr "" + +#: ../../internals/compiler.rst:417 +msgid "``ADDOP_JUMP(struct compiler *, int, basicblock *)``" +msgstr "" + +#: ../../internals/compiler.rst:418 +msgid "create a jump to a basic block" +msgstr "" + +#: ../../internals/compiler.rst:420 +msgid "``ADDOP_JUMP_NOLINE(struct compiler *, int, basicblock *)``" +msgstr "" + +#: ../../internals/compiler.rst:420 +msgid "" +"like ``ADDOP_JUMP`` without a line number; used for artificial jumps without " +"no corresponding token in the source code." +msgstr "" + +#: ../../internals/compiler.rst:424 +msgid "``ADDOP_JUMP_COMPARE(struct compiler *, cmpop_ty)``" +msgstr "" + +#: ../../internals/compiler.rst:423 +msgid "" +"depending on the second argument, add an ``ADDOP_I`` with either an " +"``IS_OP``, ``CONTAINS_OP``, or ``COMPARE_OP`` opcode." +msgstr "" + +#: ../../internals/compiler.rst:426 +msgid "" +"Several helper functions that will emit bytecode and are named :samp:" +"`compiler_{xx}()` where *xx* is what the function helps with (``list``, " +"``boolop``, etc.). A rather useful one is ``compiler_nameop()``. This " +"function looks up the scope of a variable and, based on the expression " +"context, emits the proper opcode to load, store, or delete the variable." +msgstr "" + +#: ../../internals/compiler.rst:433 +msgid "" +"As for handling the line number on which a statement is defined, this is " +"handled by ``compiler_visit_stmt()`` and thus is not a worry." +msgstr "" + +#: ../../internals/compiler.rst:436 +msgid "" +"In addition to emitting bytecode based on the AST node, handling the " +"creation of basic blocks must be done. Below are the macros and functions " +"used for managing basic blocks:" +msgstr "" + +#: ../../internals/compiler.rst:441 +msgid "``NEXT_BLOCK(struct compiler *)``" +msgstr "" + +#: ../../internals/compiler.rst:441 +msgid "create an implicit jump from the current block to the new block" +msgstr "" + +#: ../../internals/compiler.rst:443 +msgid "``compiler_new_block(struct compiler *)``" +msgstr "" + +#: ../../internals/compiler.rst:444 +msgid "create a block but don't use it (used for generating jumps)" +msgstr "" + +#: ../../internals/compiler.rst:446 +msgid "``compiler_use_next_block(struct compiler *, basicblock *block)``" +msgstr "" + +#: ../../internals/compiler.rst:446 +msgid "set a previously created block as a current block" +msgstr "" + +#: ../../internals/compiler.rst:448 +msgid "" +"Once the CFG is created, it must be flattened and then final emission of " +"bytecode occurs. Flattening is handled using a post-order depth-first " +"search. Once flattened, jump offsets are backpatched based on the " +"flattening and then a ``PyCodeObject`` is created. All of this is handled " +"by calling ``assemble()``." +msgstr "" + +#: ../../internals/compiler.rst:456 +msgid "Introducing New Bytecode" +msgstr "" + +#: ../../internals/compiler.rst:458 +msgid "" +"Sometimes a new feature requires a new opcode. But adding new bytecode is " +"not as simple as just suddenly introducing new bytecode in the AST -> " +"bytecode step of the compiler. Several pieces of code throughout Python " +"depend on having correct information about what bytecode exists." +msgstr "" + +#: ../../internals/compiler.rst:463 +msgid "" +"First, you must choose a name and a unique identifier number. The official " +"list of bytecode can be found in :cpy-file:`Lib/opcode.py`. If the opcode " +"is to take an argument, it must be given a unique number greater than that " +"assigned to ``HAVE_ARGUMENT`` (as found in :cpy-file:`Lib/opcode.py`)." +msgstr "" + +#: ../../internals/compiler.rst:468 +msgid "" +"Once the name/number pair has been chosen and entered in :cpy-file:`Lib/" +"opcode.py`, you must also enter it into :cpy-file:`Doc/library/dis.rst`, and " +"regenerate :cpy-file:`Include/opcode.h` and :cpy-file:`Python/opcode_targets." +"h` by running ``make regen-opcode regen-opcode-targets``." +msgstr "" + +#: ../../internals/compiler.rst:473 +msgid "" +"With a new bytecode you must also change what is called the magic number " +"for .pyc files. The variable ``MAGIC_NUMBER`` in :cpy-file:`Lib/importlib/" +"_bootstrap_external.py` contains the number. Changing this number will lead " +"to all .pyc files with the old ``MAGIC_NUMBER`` to be recompiled by the " +"interpreter on import. Whenever ``MAGIC_NUMBER`` is changed, the ranges in " +"the ``magic_values`` array in :cpy-file:`PC/launcher.c` must also be " +"updated. Changes to :cpy-file:`Lib/importlib/_bootstrap_external.py` will " +"take effect only after running ``make regen-importlib``. Running this " +"command before adding the new bytecode target to :cpy-file:`Python/ceval.c` " +"will result in an error. You should only run ``make regen-importlib`` after " +"the new bytecode target has been added." +msgstr "" + +#: ../../internals/compiler.rst:485 +msgid "" +"On Windows, running the ``./build.bat`` script will automatically regenerate " +"the required files without requiring additional arguments." +msgstr "" + +#: ../../internals/compiler.rst:488 +msgid "" +"Finally, you need to introduce the use of the new bytecode. Altering :cpy-" +"file:`Python/compile.c` and :cpy-file:`Python/ceval.c` will be the primary " +"places to change. You must add the case for a new opcode into the 'switch' " +"statement in the ``stack_effect()`` function in :cpy-file:`Python/compile." +"c`. If the new opcode has a jump target, you will need to update macros and " +"'switch' statements in :cpy-file:`Python/peephole.c`. If it affects a " +"control flow or the block stack, you may have to update the " +"``frame_setlineno()`` function in :cpy-file:`Objects/frameobject.c`. :cpy-" +"file:`Lib/dis.py` may need an update if the new opcode interprets its " +"argument in a special way (like ``FORMAT_VALUE`` or ``MAKE_FUNCTION``)." +msgstr "" + +#: ../../internals/compiler.rst:499 +msgid "" +"If you make a change here that can affect the output of bytecode that is " +"already in existence and you do not change the magic number constantly, make " +"sure to delete your old .py(c|o) files! Even though you will end up " +"changing the magic number if you change the bytecode, while you are " +"debugging your work you will be changing the bytecode output without " +"constantly bumping up the magic number. This means you end up with stale ." +"pyc files that will not be recreated. Running ``find . -name '*.py[co]' -" +"exec rm -f '{}' +`` should delete all .pyc files you have, forcing new ones " +"to be created and thus allow you test out your new bytecode properly. Run " +"``make regen-importlib`` for updating the bytecode of frozen importlib " +"files. You have to run ``make`` again after this for recompiling generated " +"C files." +msgstr "" + +#: ../../internals/compiler.rst:514 +msgid "Code Objects" +msgstr "" + +#: ../../internals/compiler.rst:516 +msgid "" +"The result of ``PyAST_CompileObject()`` is a ``PyCodeObject`` which is " +"defined in :cpy-file:`Include/code.h`. And with that you now have " +"executable Python bytecode!" +msgstr "" + +#: ../../internals/compiler.rst:519 +msgid "" +"The code objects (byte code) are executed in :cpy-file:`Python/ceval.c`. " +"This file will also need a new case statement for the new opcode in the big " +"switch statement in ``_PyEval_EvalFrameDefault()``." +msgstr "" + +#: ../../internals/compiler.rst:525 +msgid "Important Files" +msgstr "" + +#: ../../internals/compiler.rst:553 +msgid ":cpy-file:`Parser/`" +msgstr "" + +#: ../../internals/compiler.rst:528 +msgid ":cpy-file:`Parser/Python.asdl`: ASDL syntax file." +msgstr "" + +#: ../../internals/compiler.rst:530 +msgid "" +":cpy-file:`Parser/asdl.py`: Parser for ASDL definition files. Reads in an " +"ASDL description and parses it into an AST that describes it." +msgstr "" + +#: ../../internals/compiler.rst:533 +msgid "" +":cpy-file:`Parser/asdl_c.py`: Generate C code from an ASDL description. " +"Generates :cpy-file:`Python/Python-ast.c` and :cpy-file:`Include/internal/" +"pycore_ast.h`." +msgstr "" + +#: ../../internals/compiler.rst:537 +msgid "" +":cpy-file:`Parser/parser.c`: The new PEG parser introduced in Python 3.9. " +"Generated by :cpy-file:`Tools/peg_generator/pegen/c_generator.py` from the " +"grammar :cpy-file:`Grammar/python.gram`. Creates the AST from source code. " +"Rule functions for their corresponding production rules are found here." +msgstr "" + +#: ../../internals/compiler.rst:543 +msgid "" +":cpy-file:`Parser/peg_api.c`: Contains high-level functions which are used " +"by the interpreter to create an AST from source code." +msgstr "" + +#: ../../internals/compiler.rst:546 +msgid "" +":cpy-file:`Parser/pegen.c`: Contains helper functions which are used by " +"functions in :cpy-file:`Parser/parser.c` to construct the AST. Also contains " +"helper functions which help raise better error messages when parsing source " +"code." +msgstr "" + +#: ../../internals/compiler.rst:551 +msgid "" +":cpy-file:`Parser/pegen.h`: Header file for the corresponding :cpy-file:" +"`Parser/pegen.c`. Also contains definitions of the ``Parser`` and ``Token`` " +"structs." +msgstr "" + +#: ../../internals/compiler.rst:589 +msgid ":cpy-file:`Python/`" +msgstr "" + +#: ../../internals/compiler.rst:556 +msgid "" +":cpy-file:`Python/Python-ast.c`: Creates C structs corresponding to the ASDL " +"types. Also contains code for marshalling AST nodes (core ASDL types have " +"marshalling code in :cpy-file:`Python/asdl.c`). \"File automatically " +"generated by :cpy-file:`Parser/asdl_c.py`\". This file must be committed " +"separately after every grammar change is committed since the ``__version__`` " +"value is set to the latest grammar change revision number." +msgstr "" + +#: ../../internals/compiler.rst:564 +msgid "" +":cpy-file:`Python/asdl.c`: Contains code to handle the ASDL sequence type. " +"Also has code to handle marshalling the core ASDL types, such as number and " +"identifier. Used by :cpy-file:`Python/Python-ast.c` for marshalling AST " +"nodes." +msgstr "" + +#: ../../internals/compiler.rst:569 +msgid ":cpy-file:`Python/ast.c`: Used for validating the AST." +msgstr "" + +#: ../../internals/compiler.rst:571 +msgid ":cpy-file:`Python/ast_opt.c`: Optimizes the AST." +msgstr "" + +#: ../../internals/compiler.rst:573 +msgid "" +":cpy-file:`Python/ast_unparse.c`: Converts the AST expression node back into " +"a string (for string annotations)." +msgstr "" + +#: ../../internals/compiler.rst:576 +msgid ":cpy-file:`Python/ceval.c`: Executes byte code (aka, eval loop)." +msgstr "" + +#: ../../internals/compiler.rst:578 +msgid ":cpy-file:`Python/compile.c`: Emits bytecode based on the AST." +msgstr "" + +#: ../../internals/compiler.rst:580 +msgid ":cpy-file:`Python/symtable.c`: Generates a symbol table from AST." +msgstr "" + +#: ../../internals/compiler.rst:582 +msgid ":cpy-file:`Python/peephole.c`: Optimizes the bytecode." +msgstr "" + +#: ../../internals/compiler.rst:584 +msgid "" +":cpy-file:`Python/pyarena.c`: Implementation of the arena memory manager." +msgstr "" + +#: ../../internals/compiler.rst:586 +msgid ":cpy-file:`Python/wordcode_helpers.h`: Helpers for generating bytecode." +msgstr "" + +#: ../../internals/compiler.rst:588 +msgid "" +":cpy-file:`Python/opcode_targets.h`: One of the files that must be modified " +"if :cpy-file:`Lib/opcode.py` is." +msgstr "" + +#: ../../internals/compiler.rst:616 +msgid ":cpy-file:`Include/`" +msgstr "" + +#: ../../internals/compiler.rst:592 +msgid "" +":cpy-file:`Include/code.h`: Header file for :cpy-file:`Objects/codeobject." +"c`; contains definition of ``PyCodeObject``." +msgstr "" + +#: ../../internals/compiler.rst:595 +msgid "" +":cpy-file:`Include/opcode.h`: One of the files that must be modified if :cpy-" +"file:`Lib/opcode.py` is." +msgstr "" + +#: ../../internals/compiler.rst:598 +msgid "" +":cpy-file:`Include/internal/pycore_ast.h`: Contains the actual definitions " +"of the C structs as generated by :cpy-file:`Python/Python-ast.c`. " +"\"Automatically generated by :cpy-file:`Parser/asdl_c.py`\"." +msgstr "" + +#: ../../internals/compiler.rst:602 +msgid "" +":cpy-file:`Include/internal/pycore_asdl.h`: Header for the corresponding :" +"cpy-file:`Python/ast.c`." +msgstr "" + +#: ../../internals/compiler.rst:605 +msgid "" +":cpy-file:`Include/internal/pycore_ast.h`: Declares ``_PyAST_Validate()`` " +"external (from :cpy-file:`Python/ast.c`)." +msgstr "" + +#: ../../internals/compiler.rst:608 +msgid "" +":cpy-file:`Include/internal/pycore_symtable.h`: Header for :cpy-file:`Python/" +"symtable.c`. ``struct symtable`` and ``PySTEntryObject`` are defined here." +msgstr "" + +#: ../../internals/compiler.rst:612 +msgid "" +":cpy-file:`Include/internal/pycore_parser.h`: Header for the corresponding :" +"cpy-file:`Parser/peg_api.c`." +msgstr "" + +#: ../../internals/compiler.rst:615 +msgid "" +":cpy-file:`Include/internal/pycore_pyarena.h`: Header file for the " +"corresponding :cpy-file:`Python/pyarena.c`." +msgstr "" + +#: ../../internals/compiler.rst:624 +msgid ":cpy-file:`Objects/`" +msgstr "" + +#: ../../internals/compiler.rst:619 +msgid "" +":cpy-file:`Objects/codeobject.c`: Contains PyCodeObject-related code " +"(originally in :cpy-file:`Python/compile.c`)." +msgstr "" + +#: ../../internals/compiler.rst:622 +msgid "" +":cpy-file:`Objects/frameobject.c`: Contains the ``frame_setlineno()`` " +"function which should determine whether it is allowed to make a jump between " +"two points in a bytecode." +msgstr "" + +#: ../../internals/compiler.rst:633 +msgid ":cpy-file:`Lib/`" +msgstr "" + +#: ../../internals/compiler.rst:627 +msgid "" +":cpy-file:`Lib/opcode.py`: Master list of bytecode; if this file is modified " +"you must modify several other files accordingly (see \"`Introducing New " +"Bytecode`_\")" +msgstr "" + +#: ../../internals/compiler.rst:631 +msgid "" +":cpy-file:`Lib/importlib/_bootstrap_external.py`: Home of the magic number " +"(named ``MAGIC_NUMBER``) for bytecode versioning." +msgstr "" + +#: ../../internals/compiler.rst:636 +msgid "Known Compiler-related Experiments" +msgstr "" + +#: ../../internals/compiler.rst:638 +msgid "" +"This section lists known experiments involving the compiler (including " +"bytecode)." +msgstr "" + +#: ../../internals/compiler.rst:641 +msgid "" +"Skip Montanaro presented a paper at a Python workshop on a peephole " +"optimizer [#skip-peephole]_." +msgstr "" + +#: ../../internals/compiler.rst:644 +msgid "" +"Michael Hudson has a non-active SourceForge project named Bytecodehacks " +"[#Bytecodehacks]_ that provides functionality for playing with bytecode " +"directly." +msgstr "" + +#: ../../internals/compiler.rst:648 +msgid "" +"An opcode to combine the functionality of ``LOAD_ATTR``/``CALL_FUNCTION`` " +"was created named ``CALL_ATTR`` [#CALL_ATTR]_. Currently only works for " +"classic classes and for new-style classes rough benchmarking showed an " +"actual slowdown thanks to having to support both classic and new-style " +"classes." +msgstr "" + +#: ../../internals/compiler.rst:656 ../../internals/parser.rst:911 +msgid "References" +msgstr "" + +#: ../../internals/compiler.rst:658 +msgid "" +"Daniel C. Wang, Andrew W. Appel, Jeff L. Korn, and Chris S. Serra. `The " +"Zephyr Abstract Syntax Description Language.`_ In Proceedings of the " +"Conference on Domain-Specific Languages, pp. 213--227, 1997." +msgstr "" + +#: ../../internals/compiler.rst:666 +msgid "" +"Skip Montanaro's Peephole Optimizer Paper (https://legacy.python.org/" +"workshops/1998-11/proceedings/papers/montanaro/montanaro.html)" +msgstr "" + +#: ../../internals/compiler.rst:669 +msgid "" +"Bytecodehacks Project (https://bytecodehacks.sourceforge.net/bch-docs/bch/" +"index.html)" +msgstr "" + +#: ../../internals/compiler.rst:672 +msgid "CALL_ATTR opcode (https://bugs.python.org/issue709744)" +msgstr "" + +#: ../../internals/exploring.rst:5 +msgid "Exploring the Internals" +msgstr "" + +#: ../../internals/exploring.rst:7 +msgid "" +"This is a quick guide for people who are interested in learning more about " +"CPython's internals. It provides a summary of the source code structure and " +"contains references to resources providing a more in-depth view." +msgstr "" + +#: ../../internals/exploring.rst:13 +msgid "CPython Source Code Layout" +msgstr "" + +#: ../../internals/exploring.rst:15 +msgid "" +"This guide gives an overview of CPython's code structure. It serves as a " +"summary of file locations for modules and builtins." +msgstr "" + +#: ../../internals/exploring.rst:18 +msgid "For Python modules, the typical layout is:" +msgstr "" + +#: ../../internals/exploring.rst:20 +msgid ":file:`Lib/{}.py`" +msgstr "" + +#: ../../internals/exploring.rst:21 +msgid ":file:`Modules/_{}.c` (if there's also a C accelerator module)" +msgstr "" + +#: ../../internals/exploring.rst:22 ../../internals/exploring.rst:28 +msgid ":file:`Lib/test/test_{}.py`" +msgstr "" + +#: ../../internals/exploring.rst:23 ../../internals/exploring.rst:29 +msgid ":file:`Doc/library/{}.rst`" +msgstr "" + +#: ../../internals/exploring.rst:25 +msgid "For extension-only modules, the typical layout is:" +msgstr "" + +#: ../../internals/exploring.rst:27 +msgid ":file:`Modules/{}module.c`" +msgstr "" + +#: ../../internals/exploring.rst:31 +msgid "For builtin types, the typical layout is:" +msgstr "" + +#: ../../internals/exploring.rst:33 +msgid ":file:`Objects/{}object.c`" +msgstr "" + +#: ../../internals/exploring.rst:34 +msgid ":file:`Lib/test/test_{}.py`" +msgstr "" + +#: ../../internals/exploring.rst:35 +msgid ":cpy-file:`Doc/library/stdtypes.rst`" +msgstr "" + +#: ../../internals/exploring.rst:37 +msgid "For builtin functions, the typical layout is:" +msgstr "" + +#: ../../internals/exploring.rst:39 +msgid ":cpy-file:`Python/bltinmodule.c`" +msgstr "" + +#: ../../internals/exploring.rst:40 +msgid ":cpy-file:`Lib/test/test_builtin.py`" +msgstr "" + +#: ../../internals/exploring.rst:41 +msgid ":cpy-file:`Doc/library/functions.rst`" +msgstr "" + +#: ../../internals/exploring.rst:43 +msgid "Some exceptions:" +msgstr "" + +#: ../../internals/exploring.rst:45 +msgid "builtin type ``int`` is at :cpy-file:`Objects/longobject.c`" +msgstr "" + +#: ../../internals/exploring.rst:46 +msgid "builtin type ``str`` is at :cpy-file:`Objects/unicodeobject.c`" +msgstr "" + +#: ../../internals/exploring.rst:47 +msgid "builtin module ``sys`` is at :cpy-file:`Python/sysmodule.c`" +msgstr "" + +#: ../../internals/exploring.rst:48 +msgid "builtin module ``marshal`` is at :cpy-file:`Python/marshal.c`" +msgstr "" + +#: ../../internals/exploring.rst:49 +msgid "Windows-only module ``winreg`` is at :cpy-file:`PC/winreg.c`" +msgstr "" + +#: ../../internals/exploring.rst:53 +msgid "Additional References" +msgstr "" + +#: ../../internals/exploring.rst:55 +msgid "" +"For over 20 years the CPython code base has been changing and evolving. " +"Here's a sample of resources about the architecture of CPython aimed at " +"building your understanding of both the 2.x and 3.x versions of CPython:" +msgstr "" + +#: ../../internals/exploring.rst:60 +msgid "**Current references**" +msgstr "" + +#: ../../internals/exploring.rst:1 ../../triage/labels.rst:200 +msgid "Title" +msgstr "" + +#: ../../internals/exploring.rst:1 +msgid "Brief" +msgstr "" + +#: ../../internals/exploring.rst:1 ../../internals/garbage-collector.rst +#: ../../internals/parser.rst +msgid "Author" +msgstr "" + +#: ../../internals/exploring.rst:1 +msgid "Version" +msgstr "" + +#: ../../internals/exploring.rst:1 +msgid "`A guide from parser to objects, observed using GDB`_" +msgstr "" + +#: ../../internals/exploring.rst:1 +msgid "Code walk from Parser, AST, Sym Table and Objects" +msgstr "" + +#: ../../internals/exploring.rst:1 +msgid "Louie Lu" +msgstr "" + +#: ../../internals/exploring.rst:1 +msgid "3.7.a0" +msgstr "" + +#: ../../internals/exploring.rst:1 +msgid "`Green Tree Snakes`_" +msgstr "" + +#: ../../internals/exploring.rst:1 +msgid "The missing Python AST docs" +msgstr "" + +#: ../../internals/exploring.rst:1 +msgid "Thomas Kluyver" +msgstr "" + +#: ../../include/end-of-life.csv:1 ../../internals/exploring.rst:1 +msgid "3.6" +msgstr "3.6" + +#: ../../internals/exploring.rst:1 +msgid "`Yet another guided tour of CPython`_" +msgstr "" + +#: ../../internals/exploring.rst:1 +msgid "A guide for how CPython REPL works" +msgstr "" + +#: ../../include/end-of-life.csv:1 ../../internals/exploring.rst:1 +msgid "3.5" +msgstr "3.5" + +#: ../../internals/exploring.rst:1 +msgid "`Python Asynchronous I/O Walkthrough`_" +msgstr "" + +#: ../../internals/exploring.rst:1 +msgid "How CPython async I/O, generator and coroutine works" +msgstr "" + +#: ../../internals/exploring.rst:1 +msgid "Philip Guo" +msgstr "" + +#: ../../internals/exploring.rst:1 +msgid "`Coding Patterns for Python Extensions`_" +msgstr "" + +#: ../../internals/exploring.rst:1 +msgid "Reliable patterns of coding Python Extensions in C" +msgstr "" + +#: ../../internals/exploring.rst:1 +msgid "Paul Ross" +msgstr "" + +#: ../../include/end-of-life.csv:1 ../../internals/exploring.rst:1 +msgid "3.4" +msgstr "3.4" + +#: ../../internals/exploring.rst:1 +msgid "`Your Guide to the CPython Source Code`_" +msgstr "" + +#: ../../internals/exploring.rst:1 +msgid "Your Guide to the CPython Source Code" +msgstr "" + +#: ../../internals/exploring.rst:1 +msgid "Anthony Shaw" +msgstr "" + +#: ../../include/branches.csv:1 ../../internals/exploring.rst:1 +msgid "3.8" +msgstr "3.8" + +#: ../../internals/exploring.rst:71 +msgid "**Historical references**" +msgstr "" + +#: ../../internals/exploring.rst:1 +msgid "`Python's Innards Series`_" +msgstr "" + +#: ../../internals/exploring.rst:1 +msgid "ceval, objects, pystate and miscellaneous topics" +msgstr "" + +#: ../../internals/exploring.rst:1 +msgid "Yaniv Aknin" +msgstr "" + +#: ../../include/end-of-life.csv:1 ../../internals/exploring.rst:1 +msgid "3.1" +msgstr "3.1" + +#: ../../internals/exploring.rst:1 +msgid "`Eli Bendersky's Python Internals`_" +msgstr "" + +#: ../../internals/exploring.rst:1 +msgid "Objects, Symbol tables and miscellaneous topics" +msgstr "" + +#: ../../internals/exploring.rst:1 +msgid "3.x" +msgstr "" + +#: ../../internals/exploring.rst:1 +msgid "`A guide from parser to objects, observed using Eclipse`_" +msgstr "" + +#: ../../internals/exploring.rst:1 +msgid "Prashanth Raghu" +msgstr "" + +#: ../../internals/exploring.rst:1 +msgid "2.7.12" +msgstr "" + +#: ../../internals/exploring.rst:1 +msgid "" +"`CPython internals: A ten-hour codewalk through the Python interpreter " +"source code`_" +msgstr "" + +#: ../../internals/exploring.rst:1 +msgid "Code walk from source code to generators" +msgstr "" + +#: ../../internals/exploring.rst:1 +msgid "2.7.8" +msgstr "" + +#: ../../internals/garbage-collector.rst:7 +msgid "Garbage Collector Design" +msgstr "" + +#: ../../include/branches.csv:1 ../../internals/garbage-collector.rst:9 +#: ../../internals/parser.rst:7 +msgid "Pablo Galindo Salgado" +msgstr "Pablo Galindo Salgado" + +#: ../../internals/garbage-collector.rst:16 +msgid "" +"The main garbage collection algorithm used by CPython is reference counting. " +"The basic idea is that CPython counts how many different places there are " +"that have a reference to an object. Such a place could be another object, or " +"a global (or static) C variable, or a local variable in some C function. " +"When an object’s reference count becomes zero, the object is deallocated. If " +"it contains references to other objects, their reference counts are " +"decremented. Those other objects may be deallocated in turn, if this " +"decrement makes their reference count become zero, and so on. The reference " +"count field can be examined using the ``sys.getrefcount`` function (notice " +"that the value returned by this function is always 1 more as the function " +"also has a reference to the object when called):" +msgstr "" + +#: ../../internals/garbage-collector.rst:39 +msgid "" +"The main problem with the reference counting scheme is that it does not " +"handle reference cycles. For instance, consider this code:" +msgstr "" + +#: ../../internals/garbage-collector.rst:50 +msgid "" +"In this example, ``container`` holds a reference to itself, so even when we " +"remove our reference to it (the variable \"container\") the reference count " +"never falls to 0 because it still has its own internal reference. Therefore " +"it would never be cleaned just by simple reference counting. For this reason " +"some additional machinery is needed to clean these reference cycles between " +"objects once they become unreachable. This is the cyclic garbage collector, " +"usually called just Garbage Collector (GC), even though reference counting " +"is also a form of garbage collection." +msgstr "" + +#: ../../internals/garbage-collector.rst:59 +msgid "Memory layout and object structure" +msgstr "" + +#: ../../internals/garbage-collector.rst:61 +msgid "" +"Normally the C structure supporting a regular Python object looks as follows:" +msgstr "" + +#: ../../internals/garbage-collector.rst:73 +msgid "" +"In order to support the garbage collector, the memory layout of objects is " +"altered to accommodate extra information **before** the normal layout:" +msgstr "" + +#: ../../internals/garbage-collector.rst:90 +msgid "" +"In this way the object can be treated as a normal python object and when the " +"extra information associated to the GC is needed the previous fields can be " +"accessed by a simple type cast from the original object: :code:`((PyGC_Head " +"*)(the_object)-1)`." +msgstr "" + +#: ../../internals/garbage-collector.rst:94 +msgid "" +"As is explained later in the `Optimization: reusing fields to save memory`_ " +"section, these two extra fields are normally used to keep doubly linked " +"lists of all the objects tracked by the garbage collector (these lists are " +"the GC generations, more on that in the `Optimization: generations`_ " +"section), but they are also reused to fulfill other purposes when the full " +"doubly linked list structure is not needed as a memory optimization." +msgstr "" + +#: ../../internals/garbage-collector.rst:101 +msgid "" +"Doubly linked lists are used because they efficiently support most " +"frequently required operations. In general, the collection of all objects " +"tracked by GC are partitioned into disjoint sets, each in its own doubly " +"linked list. Between collections, objects are partitioned into " +"\"generations\", reflecting how often they've survived collection attempts. " +"During collections, the generation(s) being collected are further " +"partitioned into, e.g., sets of reachable and unreachable objects. Doubly " +"linked lists support moving an object from one partition to another, adding " +"a new object, removing an object entirely (objects tracked by GC are most " +"often reclaimed by the refcounting system when GC isn't running at all!), " +"and merging partitions, all with a small constant number of pointer updates. " +"With care, they also support iterating over a partition while objects are " +"being added to - and removed from - it, which is frequently required while " +"GC is running." +msgstr "" + +#: ../../internals/garbage-collector.rst:112 +msgid "" +"Specific APIs are offered to allocate, deallocate, initialize, track, and " +"untrack objects with GC support. These APIs can be found in the `Garbage " +"Collector C API documentation `_." +msgstr "" + +#: ../../internals/garbage-collector.rst:116 +msgid "" +"Apart from this object structure, the type object for objects supporting " +"garbage collection must include the ``Py_TPFLAGS_HAVE_GC`` in its " +"``tp_flags`` slot and provide an implementation of the ``tp_traverse`` " +"handler. Unless it can be proven that the objects cannot form reference " +"cycles with only objects of its type or unless the type is immutable, a " +"``tp_clear`` implementation must also be provided." +msgstr "" + +#: ../../internals/garbage-collector.rst:124 +msgid "Identifying reference cycles" +msgstr "" + +#: ../../internals/garbage-collector.rst:126 +msgid "" +"The algorithm that CPython uses to detect those reference cycles is " +"implemented in the ``gc`` module. The garbage collector **only focuses** on " +"cleaning container objects (i.e. objects that can contain a reference to one " +"or more objects). These can be arrays, dictionaries, lists, custom class " +"instances, classes in extension modules, etc. One could think that cycles " +"are uncommon but the truth is that many internal references needed by the " +"interpreter create cycles everywhere. Some notable examples:" +msgstr "" + +#: ../../internals/garbage-collector.rst:134 +msgid "" +"Exceptions contain traceback objects that contain a list of frames that " +"contain the exception itself." +msgstr "" + +#: ../../internals/garbage-collector.rst:136 +msgid "" +"Module-level functions reference the module's dict (which is needed to " +"resolve globals), which in turn contains entries for the module-level " +"functions." +msgstr "" + +#: ../../internals/garbage-collector.rst:138 +msgid "" +"Instances have references to their class which itself references its module, " +"and the module contains references to everything that is inside (and maybe " +"other modules) and this can lead back to the original instance." +msgstr "" + +#: ../../internals/garbage-collector.rst:141 +msgid "" +"When representing data structures like graphs, it is very typical for them " +"to have internal links to themselves." +msgstr "" + +#: ../../internals/garbage-collector.rst:144 +msgid "" +"To correctly dispose of these objects once they become unreachable, they " +"need to be identified first. Inside the function that identifies cycles, " +"two doubly linked lists are maintained: one list contains all objects to be " +"scanned, and the other will contain all objects \"tentatively\" unreachable." +msgstr "" + +#: ../../internals/garbage-collector.rst:149 +msgid "" +"To understand how the algorithm works, let’s take the case of a circular " +"linked list which has one link referenced by a variable ``A``, and one self-" +"referencing object which is completely unreachable:" +msgstr "" + +#: ../../internals/garbage-collector.rst:176 +msgid "" +"When the GC starts, it has all the container objects it wants to scan on the " +"first linked list. The objective is to move all the unreachable objects. " +"Since most objects turn out to be reachable, it is much more efficient to " +"move the unreachable as this involves fewer pointer updates." +msgstr "" + +#: ../../internals/garbage-collector.rst:181 +msgid "" +"Every object that supports garbage collection will have an extra reference " +"count field initialized to the reference count (``gc_ref`` in the figures) " +"of that object when the algorithm starts. This is because the algorithm " +"needs to modify the reference count to do the computations and in this way " +"the interpreter will not modify the real reference count field." +msgstr "" + +#: ../../internals/garbage-collector.rst:189 +msgid "" +"The GC then iterates over all containers in the first list and decrements by " +"one the ``gc_ref`` field of any other object that container is referencing. " +"Doing this makes use of the ``tp_traverse`` slot in the container class " +"(implemented using the C API or inherited by a superclass) to know what " +"objects are referenced by each container. After all the objects have been " +"scanned, only the objects that have references from outside the “objects to " +"scan” list will have ``gc_refs > 0``." +msgstr "" + +#: ../../internals/garbage-collector.rst:198 +msgid "" +"Notice that having ``gc_refs == 0`` does not imply that the object is " +"unreachable. This is because another object that is reachable from the " +"outside (``gc_refs > 0``) can still have references to it. For instance, the " +"``link_2`` object in our example ended having ``gc_refs == 0`` but is " +"referenced still by the ``link_1`` object that is reachable from the " +"outside. To obtain the set of objects that are really unreachable, the " +"garbage collector re-scans the container objects using the ``tp_traverse`` " +"slot; this time with a different traverse function that marks objects with " +"``gc_refs == 0`` as \"tentatively unreachable\" and then moves them to the " +"tentatively unreachable list. The following image depicts the state of the " +"lists in a moment when the GC processed the ``link_3`` and ``link_4`` " +"objects but has not processed ``link_1`` and ``link_2`` yet." +msgstr "" + +#: ../../internals/garbage-collector.rst:212 +msgid "" +"Then the GC scans the next ``link_1`` object. Because it has ``gc_refs == " +"1``, the gc does not do anything special because it knows it has to be " +"reachable (and is already in what will become the reachable list):" +msgstr "" + +#: ../../internals/garbage-collector.rst:218 +msgid "" +"When the GC encounters an object which is reachable (``gc_refs > 0``), it " +"traverses its references using the ``tp_traverse`` slot to find all the " +"objects that are reachable from it, moving them to the end of the list of " +"reachable objects (where they started originally) and setting its " +"``gc_refs`` field to 1. This is what happens to ``link_2`` and ``link_3`` " +"below as they are reachable from ``link_1``. From the state in the previous " +"image and after examining the objects referred to by ``link_1`` the GC knows " +"that ``link_3`` is reachable after all, so it is moved back to the original " +"list and its ``gc_refs`` field is set to 1 so that if the GC visits it " +"again, it will know that it's reachable. To avoid visiting an object twice, " +"the GC marks all objects that have already been visited once (by unsetting " +"the ``PREV_MASK_COLLECTING`` flag) so that if an object that has already " +"been processed is referenced by some other object, the GC does not process " +"it twice." +msgstr "" + +#: ../../internals/garbage-collector.rst:233 +msgid "" +"Notice that an object that was marked as \"tentatively unreachable\" and was " +"later moved back to the reachable list will be visited again by the garbage " +"collector as now all the references that that object has need to be " +"processed as well. This process is really a breadth first search over the " +"object graph. Once all the objects are scanned, the GC knows that all " +"container objects in the tentatively unreachable list are really unreachable " +"and can thus be garbage collected." +msgstr "" + +#: ../../internals/garbage-collector.rst:240 +msgid "" +"Pragmatically, it's important to note that no recursion is required by any " +"of this, and neither does it in any other way require additional memory " +"proportional to the number of objects, number of pointers, or the lengths of " +"pointer chains. Apart from ``O(1)`` storage for internal C needs, the " +"objects themselves contain all the storage the GC algorithms require." +msgstr "" + +#: ../../internals/garbage-collector.rst:247 +msgid "Why moving unreachable objects is better" +msgstr "" + +#: ../../internals/garbage-collector.rst:249 +msgid "" +"It sounds logical to move the unreachable objects under the premise that " +"most objects are usually reachable, until you think about it: the reason it " +"pays isn't actually obvious." +msgstr "" + +#: ../../internals/garbage-collector.rst:253 +msgid "" +"Suppose we create objects A, B, C in that order. They appear in the young " +"generation in the same order. If B points to A, and C to B, and C is " +"reachable from outside, then the adjusted refcounts after the first step of " +"the algorithm runs will be 0, 0, and 1 respectively because the only " +"reachable object from the outside is C." +msgstr "" + +#: ../../internals/garbage-collector.rst:258 +msgid "" +"When the next step of the algorithm finds A, A is moved to the unreachable " +"list. The same for B when it's first encountered. Then C is traversed, B is " +"moved *back* to the reachable list. B is eventually traversed, and then A is " +"moved back to the reachable list." +msgstr "" + +#: ../../internals/garbage-collector.rst:263 +msgid "" +"So instead of not moving at all, the reachable objects B and A are each " +"moved twice. Why is this a win? A straightforward algorithm to move the " +"reachable objects instead would move A, B, and C once each. The key is that " +"this dance leaves the objects in order C, B, A - it's reversed from the " +"original order. On all *subsequent* scans, none of them will move. Since " +"most objects aren't in cycles, this can save an unbounded number of moves " +"across an unbounded number of later collections. The only time the cost can " +"be higher is the first time the chain is scanned." +msgstr "" + +#: ../../internals/garbage-collector.rst:272 +msgid "Destroying unreachable objects" +msgstr "" + +#: ../../internals/garbage-collector.rst:274 +msgid "" +"Once the GC knows the list of unreachable objects, a very delicate process " +"starts with the objective of completely destroying these objects. Roughly, " +"the process follows these steps in order:" +msgstr "" + +#: ../../internals/garbage-collector.rst:278 +msgid "" +"Handle and clean weak references (if any). If an object that is in the " +"unreachable set is going to be destroyed and has weak references with " +"callbacks, these callbacks need to be honored. This process is **very** " +"delicate as any error can cause objects that will be in an inconsistent " +"state to be resurrected or reached by some Python functions invoked from the " +"callbacks. In addition, weak references that also are part of the " +"unreachable set (the object and its weak reference are in cycles that are " +"unreachable) need to be cleaned immediately, without executing the callback. " +"Otherwise it will be triggered later, when the ``tp_clear`` slot is called, " +"causing havoc. Ignoring the weak reference's callback is fine because both " +"the object and the weakref are going away, so it's legitimate to say the " +"weak reference is going away first." +msgstr "" + +#: ../../internals/garbage-collector.rst:290 +msgid "" +"If an object has legacy finalizers (``tp_del`` slot) move them to the ``gc." +"garbage`` list." +msgstr "" + +#: ../../internals/garbage-collector.rst:292 +msgid "" +"Call the finalizers (``tp_finalize`` slot) and mark the objects as already " +"finalized to avoid calling them twice if they resurrect or if other " +"finalizers have removed the object first." +msgstr "" + +#: ../../internals/garbage-collector.rst:295 +msgid "" +"Deal with resurrected objects. If some objects have been resurrected, the GC " +"finds the new subset of objects that are still unreachable by running the " +"cycle detection algorithm again and continues with them." +msgstr "" + +#: ../../internals/garbage-collector.rst:298 +msgid "" +"Call the ``tp_clear`` slot of every object so all internal links are broken " +"and the reference counts fall to 0, triggering the destruction of all " +"unreachable objects." +msgstr "" + +#: ../../internals/garbage-collector.rst:303 +msgid "Optimization: generations" +msgstr "" + +#: ../../internals/garbage-collector.rst:305 +msgid "" +"In order to limit the time each garbage collection takes, the GC uses a " +"popular optimization: generations. The main idea behind this concept is the " +"assumption that most objects have a very short lifespan and can thus be " +"collected shortly after their creation. This has proven to be very close to " +"the reality of many Python programs as many temporary objects are created " +"and destroyed very fast. The older an object is the less likely it is that " +"it will become unreachable." +msgstr "" + +#: ../../internals/garbage-collector.rst:312 +msgid "" +"To take advantage of this fact, all container objects are segregated into " +"three spaces/generations. Every new object starts in the first generation " +"(generation 0). The previous algorithm is executed only over the objects of " +"a particular generation and if an object survives a collection of its " +"generation it will be moved to the next one (generation 1), where it will be " +"surveyed for collection less often. If the same object survives another GC " +"round in this new generation (generation 1) it will be moved to the last " +"generation (generation 2) where it will be surveyed the least often." +msgstr "" + +#: ../../internals/garbage-collector.rst:322 +msgid "" +"Generations are collected when the number of objects that they contain " +"reaches some predefined threshold, which is unique for each generation and " +"is lower the older the generations are. These thresholds can be examined " +"using the ``gc.get_threshold`` function:" +msgstr "" + +#: ../../internals/garbage-collector.rst:334 +msgid "" +"The content of these generations can be examined using the ``gc." +"get_objects(generation=NUM)`` function and collections can be triggered " +"specifically in a generation by calling ``gc.collect(generation=NUM)``." +msgstr "" + +#: ../../internals/garbage-collector.rst:374 +msgid "Collecting the oldest generation" +msgstr "" + +#: ../../internals/garbage-collector.rst:376 +msgid "" +"In addition to the various configurable thresholds, the GC only triggers a " +"full collection of the oldest generation if the ratio ``long_lived_pending / " +"long_lived_total`` is above a given value (hardwired to 25%). The reason is " +"that, while \"non-full\" collections (i.e., collections of the young and " +"middle generations) will always examine roughly the same number of objects " +"(determined by the aforementioned thresholds) the cost of a full collection " +"is proportional to the total number of long-lived objects, which is " +"virtually unbounded. Indeed, it has been remarked that doing a full " +"collection every of object creations entails a dramatic " +"performance degradation in workloads which consist of creating and storing " +"lots of long-lived objects (e.g. building a large list of GC-tracked objects " +"would show quadratic performance, instead of linear as expected). Using the " +"above ratio, instead, yields amortized linear performance in the total " +"number of objects (the effect of which can be summarized thusly: \"each full " +"garbage collection is more and more costly as the number of objects grows, " +"but we do fewer and fewer of them\")." +msgstr "" + +#: ../../internals/garbage-collector.rst:393 +msgid "Optimization: reusing fields to save memory" +msgstr "" + +#: ../../internals/garbage-collector.rst:395 +msgid "" +"In order to save memory, the two linked list pointers in every object with " +"GC support are reused for several purposes. This is a common optimization " +"known as \"fat pointers\" or \"tagged pointers\": pointers that carry " +"additional data, \"folded\" into the pointer, meaning stored inline in the " +"data representing the address, taking advantage of certain properties of " +"memory addressing. This is possible as most architectures align certain " +"types of data to the size of the data, often a word or multiple thereof. " +"This discrepancy leaves a few of the least significant bits of the pointer " +"unused, which can be used for tags or to keep other information – most often " +"as a bit field (each bit a separate tag) – as long as code that uses the " +"pointer masks out these bits before accessing memory. E.g., on a 32-bit " +"architecture (for both addresses and word size), a word is 32 bits = 4 " +"bytes, so word-aligned addresses are always a multiple of 4, hence end in " +"``00``, leaving the last 2 bits available; while on a 64-bit architecture, a " +"word is 64 bits = 8 bytes, so word-aligned addresses end in ``000``, leaving " +"the last 3 bits available." +msgstr "" + +#: ../../internals/garbage-collector.rst:411 +msgid "" +"The CPython GC makes use of two fat pointers that correspond to the extra " +"fields of ``PyGC_Head`` discussed in the `Memory layout and object " +"structure`_ section:" +msgstr "" + +#: ../../internals/garbage-collector.rst:416 +msgid "" +"Because the presence of extra information, \"tagged\" or \"fat\" pointers " +"cannot be dereferenced directly and the extra information must be stripped " +"off before obtaining the real memory address. Special care needs to be taken " +"with functions that directly manipulate the linked lists, as these functions " +"normally assume the pointers inside the lists are in a consistent state." +msgstr "" + +#: ../../internals/garbage-collector.rst:423 +msgid "" +"The ``_gc_prev`` field is normally used as the \"previous\" pointer to " +"maintain the doubly linked list but its lowest two bits are used to keep the " +"flags ``PREV_MASK_COLLECTING`` and ``_PyGC_PREV_MASK_FINALIZED``. Between " +"collections, the only flag that can be present is " +"``_PyGC_PREV_MASK_FINALIZED`` that indicates if an object has been already " +"finalized. During collections ``_gc_prev`` is temporarily used for storing a " +"copy of the reference count (``gc_refs``), in addition to two flags, and the " +"GC linked list becomes a singly linked list until ``_gc_prev`` is restored." +msgstr "" + +#: ../../internals/garbage-collector.rst:432 +msgid "" +"The ``_gc_next`` field is used as the \"next\" pointer to maintain the " +"doubly linked list but during collection its lowest bit is used to keep the " +"``NEXT_MASK_UNREACHABLE`` flag that indicates if an object is tentatively " +"unreachable during the cycle detection algorithm. This is a drawback to " +"using only doubly linked lists to implement partitions: while most needed " +"operations are constant-time, there is no efficient way to determine which " +"partition an object is currently in. Instead, when that's needed, ad hoc " +"tricks (like the ``NEXT_MASK_UNREACHABLE`` flag) are employed." +msgstr "" + +#: ../../internals/garbage-collector.rst:442 +msgid "Optimization: delay tracking containers" +msgstr "" + +#: ../../internals/garbage-collector.rst:444 +msgid "" +"Certain types of containers cannot participate in a reference cycle, and so " +"do not need to be tracked by the garbage collector. Untracking these objects " +"reduces the cost of garbage collection. However, determining which objects " +"may be untracked is not free, and the costs must be weighed against the " +"benefits for garbage collection. There are two possible strategies for when " +"to untrack a container:" +msgstr "" + +#: ../../internals/garbage-collector.rst:451 +msgid "When the container is created." +msgstr "" + +#: ../../internals/garbage-collector.rst:452 +msgid "When the container is examined by the garbage collector." +msgstr "" + +#: ../../internals/garbage-collector.rst:454 +msgid "" +"As a general rule, instances of atomic types aren't tracked and instances of " +"non-atomic types (containers, user-defined objects...) are. However, some " +"type-specific optimizations can be present in order to suppress the garbage " +"collector footprint of simple instances. Some examples of native types that " +"benefit from delayed tracking:" +msgstr "" + +#: ../../internals/garbage-collector.rst:460 +msgid "" +"Tuples containing only immutable objects (integers, strings etc, and " +"recursively, tuples of immutable objects) do not need to be tracked. The " +"interpreter creates a large number of tuples, many of which will not survive " +"until garbage collection. It is therefore not worthwhile to untrack eligible " +"tuples at creation time. Instead, all tuples except the empty tuple are " +"tracked when created. During garbage collection it is determined whether any " +"surviving tuples can be untracked. A tuple can be untracked if all of its " +"contents are already not tracked. Tuples are examined for untracking in all " +"garbage collection cycles. It may take more than one cycle to untrack a " +"tuple." +msgstr "" + +#: ../../internals/garbage-collector.rst:470 +msgid "" +"Dictionaries containing only immutable objects also do not need to be " +"tracked. Dictionaries are untracked when created. If a tracked item is " +"inserted into a dictionary (either as a key or value), the dictionary " +"becomes tracked. During a full garbage collection (all generations), the " +"collector will untrack any dictionaries whose contents are not tracked." +msgstr "" + +#: ../../internals/garbage-collector.rst:476 +msgid "" +"The garbage collector module provides the Python function " +"``is_tracked(obj)``, which returns the current tracking status of the " +"object. Subsequent garbage collections may change the tracking status of the " +"object." +msgstr "" + +#: ../../internals/index.rst:3 +msgid "CPython's Internals" +msgstr "Internos do CPython" + +#: ../../internals/parser.rst:5 +msgid "Guide to the Parser" +msgstr "" + +#: ../../internals/parser.rst:14 +msgid "" +"The Parser in CPython is currently a `PEG (Parser Expression Grammar) " +"`_ parser. The " +"first version of the parser used to be an `LL(1) `_ based parser that was one of the oldest parts of CPython " +"implemented before it was replaced by :pep:`617`. In particular, both the " +"current parser and the old LL(1) parser are the output of a `parser " +"generator `_. This means " +"that the way the parser is written is by feeding a description of the " +"Grammar of the Python language to a special program (the parser generator) " +"which outputs the parser. The way the Python language is changed is " +"therefore by modifying the grammar file and developers rarely need to " +"interact with the parser generator itself other than use it to generate the " +"parser." +msgstr "" + +#: ../../internals/parser.rst:28 +msgid "How PEG Parsers Work" +msgstr "" + +#: ../../internals/parser.rst:32 +msgid "" +"A PEG (Parsing Expression Grammar) grammar (like the current one) differs " +"from a context-free grammar in that the way it is written more closely " +"reflects how the parser will operate when parsing it. The fundamental " +"technical difference is that the choice operator is ordered. This means that " +"when writing::" +msgstr "" + +#: ../../internals/parser.rst:39 +msgid "" +"a context-free-grammar parser (like an LL(1) parser) will generate " +"constructions that given an input string will *deduce* which alternative " +"(``A``, ``B`` or ``C``) must be expanded, while a PEG parser will check if " +"the first alternative succeeds and only if it fails, will it continue with " +"the second or the third one in the order in which they are written. This " +"makes the choice operator not commutative." +msgstr "" + +#: ../../internals/parser.rst:45 +msgid "" +"Unlike LL(1) parsers, PEG-based parsers cannot be ambiguous: if a string " +"parses, it has exactly one valid parse tree. This means that a PEG-based " +"parser cannot suffer from the ambiguity problems that can arise with LL(1) " +"parsers and with context-free grammars in general." +msgstr "" + +#: ../../internals/parser.rst:50 +msgid "" +"PEG parsers are usually constructed as a recursive descent parser in which " +"every rule in the grammar corresponds to a function in the program " +"implementing the parser and the parsing expression (the \"expansion\" or " +"\"definition\" of the rule) represents the \"code\" in said function. Each " +"parsing function conceptually takes an input string as its argument, and " +"yields one of the following results:" +msgstr "" + +#: ../../internals/parser.rst:56 +msgid "" +"A \"success\" result. This result indicates that the expression can be " +"parsed by that rule and the function may optionally move forward or consume " +"one or more characters of the input string supplied to it." +msgstr "" + +#: ../../internals/parser.rst:59 +msgid "A \"failure\" result, in which case no input is consumed." +msgstr "" + +#: ../../internals/parser.rst:61 +msgid "" +"Notice that \"failure\" results do not imply that the program is incorrect, " +"nor do they necessarily mean that the parsing has failed. Since the choice " +"operator is ordered, a failure very often merely indicates \"try the " +"following option\". A direct implementation of a PEG parser as a recursive " +"descent parser will present exponential time performance in the worst case, " +"because PEG parsers have infinite lookahead (this means that they can " +"consider an arbitrary number of tokens before deciding for a rule). " +"Usually, PEG parsers avoid this exponential time complexity with a technique " +"called \"packrat parsing\" [1]_ which not only loads the entire program in " +"memory before parsing it but also allows the parser to backtrack " +"arbitrarily. This is made efficient by memoizing the rules already matched " +"for each position. The cost of the memoization cache is that the parser will " +"naturally use more memory than a simple LL(1) parser, which normally are " +"table-based." +msgstr "" + +#: ../../internals/parser.rst:77 +msgid "Key ideas" +msgstr "" + +#: ../../internals/parser.rst:80 +msgid "" +"Don't try to reason about a PEG grammar in the same way you would to with an " +"EBNF or context free grammar. PEG is optimized to describe **how** input " +"strings will be parsed, while context-free grammars are optimized to " +"generate strings of the language they describe (in EBNF, to know if a given " +"string is in the language, you need to do work to find out as it is not " +"immediately obvious from the grammar)." +msgstr "" + +#: ../../internals/parser.rst:86 +msgid "Alternatives are ordered ( ``A | B`` is not the same as ``B | A`` )." +msgstr "" + +#: ../../internals/parser.rst:87 +msgid "" +"If a rule returns a failure, it doesn't mean that the parsing has failed, it " +"just means \"try something else\"." +msgstr "" + +#: ../../internals/parser.rst:89 +msgid "" +"By default PEG parsers run in exponential time, which can be optimized to " +"linear by using memoization." +msgstr "" + +#: ../../internals/parser.rst:91 +msgid "" +"If parsing fails completely (no rule succeeds in parsing all the input " +"text), the PEG parser doesn't have a concept of \"where the :exc:" +"`SyntaxError` is\"." +msgstr "" + +#: ../../internals/parser.rst:96 +msgid "Consequences or the ordered choice operator" +msgstr "" + +#: ../../internals/parser.rst:100 +msgid "" +"Although PEG may look like EBNF, its meaning is quite different. The fact " +"that in PEG parsers alternatives are ordered (which is at the core of how " +"PEG parsers work) has deep consequences, other than removing ambiguity." +msgstr "" + +#: ../../internals/parser.rst:104 +msgid "" +"If a rule has two alternatives and the first of them succeeds, the second " +"one is **not** attempted even if the caller rule fails to parse the rest of " +"the input. Thus the parser is said to be \"eager\". To illustrate this, " +"consider the following two rules (in these examples, a token is an " +"individual character): ::" +msgstr "" + +#: ../../internals/parser.rst:112 +msgid "" +"In a regular EBNF grammar, both rules specify the language ``{aa, aaa}`` but " +"in PEG, one of these two rules accepts the string ``aaa`` but not the string " +"``aa``. The other does the opposite -- it accepts the string ``aa`` but not " +"the string ``aaa``. The rule ``('a'|'aa')'a'`` does not accept ``aaa`` " +"because ``'a'|'aa'`` consumes the first ``a``, letting the final ``a`` in " +"the rule consume the second, and leaving out the third ``a``. As the rule " +"has succeeded, no attempt is ever made to go back and let ``'a'|'aa'`` try " +"the second alternative. The expression ``('aa'|'a')'a'`` does not accept " +"``aa`` because ``'aa'|'a'`` accepts all of ``aa``, leaving nothing for the " +"final ``a``. Again, the second alternative of ``'aa'|'a'`` is not tried." +msgstr "" + +#: ../../internals/parser.rst:126 +msgid "" +"The effects of ordered choice, such as the ones illustrated above, may be " +"hidden by many levels of rules." +msgstr "" + +#: ../../internals/parser.rst:128 +msgid "" +"For this reason, writing rules where an alternative is contained in the next " +"one is in almost all cases a mistake, for example: ::" +msgstr "" + +#: ../../internals/parser.rst:135 +msgid "" +"In this example, the second alternative will never be tried because the " +"first one will succeed first (even if the input string has an ``'else' " +"block`` that follows). To correctly write this rule you can simply alter the " +"order: ::" +msgstr "" + +#: ../../internals/parser.rst:143 +msgid "" +"In this case, if the input string doesn't have an ``'else' block``, the " +"first alternative will fail and the second will be attempted without said " +"part." +msgstr "" + +#: ../../internals/parser.rst:147 +msgid "Syntax" +msgstr "" + +#: ../../internals/parser.rst:149 +msgid "The grammar consists of a sequence of rules of the form: ::" +msgstr "" + +#: ../../internals/parser.rst:153 +msgid "" +"Optionally, a type can be included right after the rule name, which " +"specifies the return type of the C or Python function corresponding to the " +"rule: ::" +msgstr "" + +#: ../../internals/parser.rst:159 +msgid "" +"If the return type is omitted, then a ``void *`` is returned in C and an " +"``Any`` in Python." +msgstr "" + +#: ../../internals/parser.rst:163 +msgid "Grammar Expressions" +msgstr "" + +#: ../../internals/parser.rst:166 +msgid "``# comment``" +msgstr "" + +#: ../../internals/parser.rst:168 +msgid "Python-style comments." +msgstr "" + +#: ../../internals/parser.rst:171 +msgid "``e1 e2``" +msgstr "" + +#: ../../internals/parser.rst:173 +msgid "Match ``e1``, then match ``e2``." +msgstr "" + +#: ../../internals/parser.rst:180 +msgid "``e1 | e2``" +msgstr "" + +#: ../../internals/parser.rst:182 +msgid "Match ``e1`` or ``e2``." +msgstr "" + +#: ../../internals/parser.rst:184 +msgid "" +"The first alternative can also appear on the line after the rule name for " +"formatting purposes. In that case, a \\| must be used before the first " +"alternative, like so:" +msgstr "" + +#: ../../internals/parser.rst:195 +msgid "``( e )``" +msgstr "" + +#: ../../internals/parser.rst:197 +msgid "Match ``e``." +msgstr "" + +#: ../../internals/parser.rst:203 +msgid "" +"A slightly more complex and useful example includes using the grouping " +"operator together with the repeat operators:" +msgstr "" + +#: ../../internals/parser.rst:211 +msgid "``[ e ] or e?``" +msgstr "" + +#: ../../internals/parser.rst:213 +msgid "Optionally match ``e``." +msgstr "" + +#: ../../internals/parser.rst:219 +msgid "" +"A more useful example includes defining that a trailing comma is optional:" +msgstr "" + +#: ../../internals/parser.rst:227 +msgid "``e*``" +msgstr "" + +#: ../../internals/parser.rst:229 +msgid "Match zero or more occurrences of ``e``." +msgstr "" + +#: ../../internals/parser.rst:236 +msgid "``e+``" +msgstr "" + +#: ../../internals/parser.rst:238 +msgid "Match one or more occurrences of ``e``." +msgstr "" + +#: ../../internals/parser.rst:245 +msgid "``s.e+``" +msgstr "" + +#: ../../internals/parser.rst:247 +msgid "" +"Match one or more occurrences of ``e``, separated by ``s``. The generated " +"parse tree does not include the separator. This is otherwise identical to " +"``(e (s e)*)``." +msgstr "" + +#: ../../internals/parser.rst:256 +msgid "``&e``" +msgstr "" + +#: ../../internals/parser.rst:260 +msgid "Succeed if ``e`` can be parsed, without consuming any input." +msgstr "" + +#: ../../internals/parser.rst:263 +msgid "``!e``" +msgstr "" + +#: ../../internals/parser.rst:267 +msgid "Fail if ``e`` can be parsed, without consuming any input." +msgstr "" + +#: ../../internals/parser.rst:269 +msgid "" +"An example taken from the Python grammar specifies that a primary consists " +"of an atom, which is not followed by a ``.`` or a ``(`` or a ``[``:" +msgstr "" + +#: ../../internals/parser.rst:278 +msgid "``~``" +msgstr "" + +#: ../../internals/parser.rst:280 +msgid "" +"Commit to the current alternative, even if it fails to parse (this is called " +"the \"cut\")." +msgstr "" + +#: ../../internals/parser.rst:287 +msgid "" +"In this example, if a left parenthesis is parsed, then the other alternative " +"won’t be considered, even if some_rule or ``)`` fail to be parsed." +msgstr "" + +#: ../../internals/parser.rst:292 +msgid "Left recursion" +msgstr "" + +#: ../../internals/parser.rst:294 +msgid "" +"PEG parsers normally do not support left recursion but CPython's parser " +"generator implements a technique similar to the one described in Medeiros et " +"al. [2]_ but using the memoization cache instead of static variables. This " +"approach is closer to the one described in Warth et al. [3]_. This allows us " +"to write not only simple left-recursive rules but also more complicated " +"rules that involve indirect left-recursion like::" +msgstr "" + +#: ../../internals/parser.rst:305 +msgid "and \"hidden left-recursion\" like::" +msgstr "" + +#: ../../internals/parser.rst:310 +msgid "Variables in the Grammar" +msgstr "" + +#: ../../internals/parser.rst:312 +msgid "" +"A sub-expression can be named by preceding it with an identifier and an " +"``=`` sign. The name can then be used in the action (see below), like " +"this: ::" +msgstr "" + +#: ../../internals/parser.rst:318 +msgid "Grammar actions" +msgstr "" + +#: ../../internals/parser.rst:322 +msgid "" +"To avoid the intermediate steps that obscure the relationship between the " +"grammar and the AST generation the PEG parser allows directly generating AST " +"nodes for a rule via grammar actions. Grammar actions are language-specific " +"expressions that are evaluated when a grammar rule is successfully parsed. " +"These expressions can be written in Python or C depending on the desired " +"output of the parser generator. This means that if one would want to " +"generate a parser in Python and another in C, two grammar files should be " +"written, each one with a different set of actions, keeping everything else " +"apart from said actions identical in both files. As an example of a grammar " +"with Python actions, the piece of the parser generator that parses grammar " +"files is bootstrapped from a meta-grammar file with Python actions that " +"generate the grammar tree as a result of the parsing." +msgstr "" + +#: ../../internals/parser.rst:335 +msgid "" +"In the specific case of the PEG grammar for Python, having actions allows " +"directly describing how the AST is composed in the grammar itself, making it " +"more clear and maintainable. This AST generation process is supported by the " +"use of some helper functions that factor out common AST object manipulations " +"and some other required operations that are not directly related to the " +"grammar." +msgstr "" + +#: ../../internals/parser.rst:341 +msgid "" +"To indicate these actions each alternative can be followed by the action " +"code inside curly-braces, which specifies the return value of the " +"alternative::" +msgstr "" + +#: ../../internals/parser.rst:348 +msgid "If the action is omitted, a default action is generated:" +msgstr "" + +#: ../../internals/parser.rst:350 +msgid "If there's a single name in the rule, it gets returned." +msgstr "" + +#: ../../internals/parser.rst:352 +msgid "" +"If there is more than one name in the rule, a collection with all parsed " +"expressions gets returned (the type of the collection will be different in C " +"and Python)." +msgstr "" + +#: ../../internals/parser.rst:356 +msgid "" +"This default behaviour is primarily made for very simple situations and for " +"debugging purposes." +msgstr "" + +#: ../../internals/parser.rst:361 +msgid "" +"It's important that the actions don't mutate any AST nodes that are passed " +"into them via variables referring to other rules. The reason for mutation " +"being not allowed is that the AST nodes are cached by memoization and could " +"potentially be reused in a different context, where the mutation would be " +"invalid. If an action needs to change an AST node, it should instead make a " +"new copy of the node and change that." +msgstr "" + +#: ../../internals/parser.rst:368 +msgid "" +"The full meta-grammar for the grammars supported by the PEG generator is:" +msgstr "" + +#: ../../internals/parser.rst:459 +msgid "" +"As an illustrative example this simple grammar file allows directly " +"generating a full parser that can parse simple arithmetic expressions and " +"that returns a valid C-based Python AST:" +msgstr "" + +#: ../../internals/parser.rst:486 +msgid "" +"Here ``EXTRA`` is a macro that expands to ``start_lineno, start_col_offset, " +"end_lineno, end_col_offset, p->arena``, those being variables automatically " +"injected by the parser; ``p`` points to an object that holds on to all state " +"for the parser." +msgstr "" + +#: ../../internals/parser.rst:491 +msgid "A similar grammar written to target Python AST objects:" +msgstr "" + +#: ../../internals/parser.rst:518 +msgid "Pegen" +msgstr "" + +#: ../../internals/parser.rst:520 +msgid "" +"Pegen is the parser generator used in CPython to produce the final PEG " +"parser used by the interpreter. It is the program that can be used to read " +"the python grammar located in :cpy-file:`Grammar/python.gram` and produce " +"the final C parser. It contains the following pieces:" +msgstr "" + +#: ../../internals/parser.rst:524 +msgid "" +"A parser generator that can read a grammar file and produce a PEG parser " +"written in Python or C that can parse said grammar. The generator is located " +"at :cpy-file:`Tools/peg_generator/pegen`." +msgstr "" + +#: ../../internals/parser.rst:526 +msgid "" +"A PEG meta-grammar that automatically generates a Python parser that is used " +"for the parser generator itself (this means that there are no manually-" +"written parsers). The meta-grammar is located at :cpy-file:`Tools/" +"peg_generator/pegen/metagrammar.gram`." +msgstr "" + +#: ../../internals/parser.rst:529 +msgid "" +"A generated parser (using the parser generator) that can directly produce C " +"and Python AST objects." +msgstr "" + +#: ../../internals/parser.rst:531 +msgid "" +"The source code for Pegen lives at :cpy-file:`Tools/peg_generator/pegen` but " +"normally all typical commands to interact with the parser generator are " +"executed from the main makefile." +msgstr "" + +#: ../../internals/parser.rst:535 +msgid "How to regenerate the parser" +msgstr "" + +#: ../../internals/parser.rst:537 +msgid "" +"Once you have made the changes to the grammar files, to regenerate the ``C`` " +"parser (the one used by the interpreter) just execute: ::" +msgstr "" + +#: ../../internals/parser.rst:542 +msgid "" +"using the :cpy-file:`!Makefile` in the main directory. If you are on " +"Windows you can use the Visual Studio project files to regenerate the parser " +"or to execute: ::" +msgstr "" + +#: ../../internals/parser.rst:547 +msgid "The generated parser file is located at :cpy-file:`Parser/parser.c`." +msgstr "" + +#: ../../internals/parser.rst:550 +msgid "How to regenerate the meta-parser" +msgstr "" + +#: ../../internals/parser.rst:552 +msgid "" +"The meta-grammar (the grammar that describes the grammar for the grammar " +"files themselves) is located at :cpy-file:`Tools/peg_generator/pegen/" +"metagrammar.gram`. Although it is very unlikely that you will ever need to " +"modify it, if you make any modifications to this file (in order to implement " +"new Pegen features) you will need to regenerate the meta-parser (the parser " +"that parses the grammar files). To do so just execute: ::" +msgstr "" + +#: ../../internals/parser.rst:560 +msgid "" +"If you are on Windows you can use the Visual Studio project files to " +"regenerate the parser or to execute: ::" +msgstr "" + +#: ../../internals/parser.rst:567 +msgid "Grammatical elements and rules" +msgstr "" + +#: ../../internals/parser.rst:569 +msgid "Pegen has some special grammatical elements and rules:" +msgstr "" + +#: ../../internals/parser.rst:571 +msgid "Strings with single quotes (') (e.g. ``'class'``) denote KEYWORDS." +msgstr "" + +#: ../../internals/parser.rst:572 +msgid "" +"Strings with double quotes (\") (e.g. ``\"match\"``) denote SOFT KEYWORDS." +msgstr "" + +#: ../../internals/parser.rst:573 +msgid "" +"Upper case names (e.g. ``NAME``) denote tokens in the :cpy-file:`Grammar/" +"Tokens` file." +msgstr "" + +#: ../../internals/parser.rst:574 +msgid "" +"Rule names starting with ``invalid_`` are used for specialized syntax errors." +msgstr "" + +#: ../../internals/parser.rst:576 +msgid "These rules are NOT used in the first pass of the parser." +msgstr "" + +#: ../../internals/parser.rst:577 +msgid "" +"Only if the first pass fails to parse, a second pass including the invalid " +"rules will be executed." +msgstr "" + +#: ../../internals/parser.rst:579 +msgid "" +"If the parser fails in the second phase with a generic syntax error, the " +"location of the generic failure of the first pass will be used (this avoids " +"reporting incorrect locations due to the invalid rules)." +msgstr "" + +#: ../../internals/parser.rst:582 +msgid "" +"The order of the alternatives involving invalid rules matter (like any rule " +"in PEG)." +msgstr "" + +#: ../../internals/parser.rst:586 +msgid "Tokenization" +msgstr "" + +#: ../../internals/parser.rst:588 +msgid "" +"It is common among PEG parser frameworks that the parser does both the " +"parsing and the tokenization, but this does not happen in Pegen. The reason " +"is that the Python language needs a custom tokenizer to handle things like " +"indentation boundaries, some special keywords like ``ASYNC`` and ``AWAIT`` " +"(for compatibility purposes), backtracking errors (such as unclosed " +"parenthesis), dealing with encoding, interactive mode and much more. Some of " +"these reasons are also there for historical purposes, and some others are " +"useful even today." +msgstr "" + +#: ../../internals/parser.rst:595 +msgid "" +"The list of tokens (all uppercase names in the grammar) that you can use can " +"be found in the :cpy-file:`Grammar/Tokens` file. If you change this file to " +"add new tokens, make sure to regenerate the files by executing: ::" +msgstr "" + +#: ../../internals/parser.rst:600 +msgid "" +"If you are on Windows you can use the Visual Studio project files to " +"regenerate the tokens or to execute: ::" +msgstr "" + +#: ../../internals/parser.rst:604 +msgid "" +"How tokens are generated and the rules governing this is completely up to " +"the tokenizer (:cpy-file:`Parser/tokenizer.c`) and the parser just receives " +"tokens from it." +msgstr "" + +#: ../../internals/parser.rst:608 +msgid "Memoization" +msgstr "" + +#: ../../internals/parser.rst:610 +msgid "" +"As described previously, to avoid exponential time complexity in the parser, " +"memoization is used." +msgstr "" + +#: ../../internals/parser.rst:612 +msgid "" +"The C parser used by Python is highly optimized and memoization can be " +"expensive both in memory and time. Although the memory cost is obvious (the " +"parser needs memory for storing previous results in the cache) the execution " +"time cost comes for continuously checking if the given rule has a cache hit " +"or not. In many situations, just parsing it again can be faster. Pegen " +"**disables memoization by default** except for rules with the special marker " +"``memo`` after the rule name (and type, if present): ::" +msgstr "" + +#: ../../internals/parser.rst:621 +msgid "" +"By selectively turning on memoization for a handful of rules, the parser " +"becomes faster and uses less memory." +msgstr "" + +#: ../../internals/parser.rst:624 +msgid "" +"Left-recursive rules always use memoization, since the implementation of " +"left-recursion depends on it." +msgstr "" + +#: ../../internals/parser.rst:626 +msgid "" +"To know if a new rule needs memoization or not, benchmarking is required " +"(comparing execution times and memory usage of some considerably big files " +"with and without memoization). There is a very simple instrumentation API " +"available in the generated C parse code that allows to measure how much each " +"rule uses memoization (check the :cpy-file:`Parser/pegen.c` file for more " +"information) but it needs to be manually activated." +msgstr "" + +#: ../../internals/parser.rst:634 +msgid "Automatic variables" +msgstr "" + +#: ../../internals/parser.rst:636 +msgid "" +"To make writing actions easier, Pegen injects some automatic variables in " +"the namespace available when writing actions. In the C parser, some of these " +"automatic variable names are:" +msgstr "" + +#: ../../internals/parser.rst:639 +msgid "``p``: The parser structure." +msgstr "" + +#: ../../internals/parser.rst:640 +msgid "" +"``EXTRA``: This is a macro that expands to ``(_start_lineno, " +"_start_col_offset, _end_lineno, _end_col_offset, p->arena)``, which is " +"normally used to create AST nodes as almost all constructors need these " +"attributes to be provided. All of the location variables are taken from the " +"location information of the current token." +msgstr "" + +#: ../../internals/parser.rst:645 +msgid "Hard and Soft keywords" +msgstr "" + +#: ../../internals/parser.rst:648 +msgid "" +"In the grammar files, keywords are defined using **single quotes** (e.g. " +"``'class'``) while soft keywords are defined using **double quotes** (e.g. " +"``\"match\"``)." +msgstr "" + +#: ../../internals/parser.rst:651 +msgid "" +"There are two kinds of keywords allowed in pegen grammars: *hard* and *soft* " +"keywords. The difference between hard and soft keywords is that hard " +"keywords are always reserved words, even in positions where they make no " +"sense (e.g. ``x = class + 1``), while soft keywords only get a special " +"meaning in context. Trying to use a hard keyword as a variable will always " +"fail:" +msgstr "" + +#: ../../internals/parser.rst:670 +msgid "" +"While soft keywords don't have this limitation if used in a context other " +"the one where they are defined as keywords:" +msgstr "" + +#: ../../internals/parser.rst:678 +msgid "" +"The ``match`` and ``case`` keywords are soft keywords, so that they are " +"recognized as keywords at the beginning of a match statement or case block " +"respectively, but are allowed to be used in other places as variable or " +"argument names." +msgstr "" + +#: ../../internals/parser.rst:682 +msgid "You can get a list of all keywords defined in the grammar from Python:" +msgstr "" + +#: ../../internals/parser.rst:693 +msgid "as well as soft keywords:" +msgstr "" + +#: ../../internals/parser.rst:702 +msgid "" +"Soft keywords can be a bit challenging to manage as they can be accepted in " +"places you don't intend to, given how the order alternatives behave in PEG " +"parsers (see :ref:`consequences of ordered choice section ` for some background on this). In general, try to define " +"them in places where there is not a lot of alternatives." +msgstr "" + +#: ../../internals/parser.rst:709 +msgid "Error handling" +msgstr "" + +#: ../../internals/parser.rst:711 +msgid "" +"When a pegen-generated parser detects that an exception is raised, it will " +"**automatically stop parsing**, no matter what the current state of the " +"parser is and it will unwind the stack and report the exception. This means " +"that if a :ref:`rule action ` raises an exception all " +"parsing will stop at that exact point. This is done to allow to correctly " +"propagate any exception set by calling Python C-API functions. This also " +"includes :exc:`SyntaxError` exceptions and this is the main mechanism the " +"parser uses to report custom syntax error messages." +msgstr "" + +#: ../../internals/parser.rst:721 +msgid "" +"Tokenizer errors are normally reported by raising exceptions but some " +"special tokenizer errors such as unclosed parenthesis will be reported only " +"after the parser finishes without returning anything." +msgstr "" + +#: ../../internals/parser.rst:726 +msgid "How Syntax errors are reported" +msgstr "" + +#: ../../internals/parser.rst:728 +msgid "" +"As described previously in the :ref:`how PEG parsers work section `, PEG parsers don't have a defined concept of where errors " +"happened in the grammar, because a rule failure doesn't imply a parsing " +"failure like in context free grammars. This means that some heuristic has to " +"be used to report generic errors unless something is explicitly declared as " +"an error in the grammar." +msgstr "" + +#: ../../internals/parser.rst:735 +msgid "" +"To report generic syntax errors, pegen uses a common heuristic in PEG " +"parsers: the location of *generic* syntax errors is reported in the furthest " +"token that was attempted to be matched but failed. This is only done if " +"parsing has failed (the parser returns ``NULL`` in C or ``None`` in Python) " +"but no exception has been raised." +msgstr "" + +#: ../../internals/parser.rst:742 +msgid "" +"Positive and negative lookaheads will try to match a token so they will " +"affect the location of generic syntax errors. Use them carefully at " +"boundaries between rules." +msgstr "" + +#: ../../internals/parser.rst:746 +msgid "" +"As the Python grammar was primordially written as an LL(1) grammar, this " +"heuristic has an extremely high success rate, but some PEG features can have " +"small effects, such as :ref:`positive lookaheads ` " +"and :ref:`negative lookaheads `." +msgstr "" + +#: ../../internals/parser.rst:751 +msgid "" +"To generate more precise syntax errors, custom rules are used. This is a " +"common practice also in context free grammars: the parser will try to accept " +"some construct that is known to be incorrect just to report a specific " +"syntax error for that construct. In pegen grammars, these rules start with " +"the ``invalid_`` prefix. This is because trying to match these rules " +"normally has a performance impact on parsing (and can also affect the " +"'correct' grammar itself in some tricky cases, depending on the ordering of " +"the rules) so the generated parser acts in two phases:" +msgstr "" + +#: ../../internals/parser.rst:759 +msgid "" +"The first phase will try to parse the input stream without taking into " +"account rules that start with the ``invalid_`` prefix. If the parsing " +"succeeds it will return the generated AST and the second phase will not be " +"attempted." +msgstr "" + +#: ../../internals/parser.rst:763 +msgid "" +"If the first phase failed, a second parsing attempt is done including the " +"rules that start with an ``invalid_`` prefix. By design this attempt " +"**cannot succeed** and is only executed to give to the invalid rules a " +"chance to detect specific situations where custom, more precise, syntax " +"errors can be raised. This also allows to trade a bit of performance for " +"precision reporting errors: given that we know that the input text is " +"invalid, there is no need to be fast because the interpreter is going to " +"stop anyway." +msgstr "" + +#: ../../internals/parser.rst:771 +msgid "When defining invalid rules:" +msgstr "" + +#: ../../internals/parser.rst:773 +msgid "" +"Make sure all custom invalid rules raise :exc:`SyntaxError` exceptions (or a " +"subclass of it)." +msgstr "" + +#: ../../internals/parser.rst:774 +msgid "" +"Make sure **all** invalid rules start with the ``invalid_`` prefix to not " +"impact performance of parsing correct Python code." +msgstr "" + +#: ../../internals/parser.rst:776 +msgid "" +"Make sure the parser doesn't behave differently for regular rules when you " +"introduce invalid rules (see the :ref:`how PEG parsers work section ` for more information)." +msgstr "" + +#: ../../internals/parser.rst:779 +msgid "" +"You can find a collection of macros to raise specialized syntax errors in " +"the :cpy-file:`Parser/pegen.h` header file. These macros allow also to " +"report ranges for the custom errors that will be highlighted in the " +"tracebacks that will be displayed when the error is reported." +msgstr "" + +#: ../../internals/parser.rst:785 +msgid "" +"A good way to test if an invalid rule will be triggered when you expect is " +"to test if introducing a syntax error **after** valid code triggers the rule " +"or not. For example: ::" +msgstr "" + +#: ../../internals/parser.rst:790 +msgid "" +"Should trigger the syntax error in the ``$`` character. If your rule is not " +"correctly defined this won't happen. For example, if you try to define a " +"rule to match Python 2 style ``print`` statements to make a better error " +"message and you define it as: ::" +msgstr "" + +#: ../../internals/parser.rst:796 +msgid "" +"This will **seem** to work because the parser will correctly parse " +"``print(something)`` because it is valid code and the second phase will " +"never execute but if you try to parse ``print(something) $ 3`` the first " +"pass of the parser will fail (because of the ``$``) and in the second phase, " +"the rule will match the ``print(something)`` as ``print`` followed by the " +"variable ``something`` between parentheses and the error will be reported " +"there instead of the ``$`` character." +msgstr "" + +#: ../../internals/parser.rst:803 +msgid "Generating AST objects" +msgstr "" + +#: ../../internals/parser.rst:805 +msgid "" +"The output of the C parser used by CPython that is generated by the :cpy-" +"file:`Grammar/python.gram` grammar file is a Python AST object (using C " +"structures). This means that the actions in the grammar file generate AST " +"objects when they succeed. Constructing these objects can be quite " +"cumbersome (see the :ref:`AST compiler section ` for " +"more information on how these objects are constructed and how they are used " +"by the compiler) so special helper functions are used. These functions are " +"declared in the :cpy-file:`Parser/pegen.h` header file and defined in the :" +"cpy-file:`Parser/action_helpers.c` file. These functions allow you to join " +"AST sequences, get specific elements from them or to do extra processing on " +"the generated tree." +msgstr "" + +#: ../../internals/parser.rst:817 +msgid "" +"Actions must **never** be used to accept or reject rules. It may be tempting " +"in some situations to write a very generic rule and then check the generated " +"AST to decide if is valid or not but this will render the `official grammar " +"`_ partially incorrect " +"(because actions are not included) and will make it more difficult for other " +"Python implementations to adapt the grammar to their own needs." +msgstr "" + +#: ../../internals/parser.rst:824 +msgid "" +"As a general rule, if an action spawns multiple lines or requires something " +"more complicated than a single expression of C code, is normally better to " +"create a custom helper in :cpy-file:`Parser/action_helpers.c` and expose it " +"in the :cpy-file:`Parser/pegen.h` header file so it can be used from the " +"grammar." +msgstr "" + +#: ../../internals/parser.rst:829 +msgid "" +"If the parsing succeeds, the parser **must** return a **valid** AST object." +msgstr "" + +#: ../../internals/parser.rst:832 +msgid "Testing" +msgstr "" + +#: ../../internals/parser.rst:834 +msgid "" +"There are three files that contain tests for the grammar and the parser:" +msgstr "" + +#: ../../internals/parser.rst:836 +msgid ":cpy-file:`Lib/test/test_grammar.py`" +msgstr "" + +#: ../../internals/parser.rst:837 +msgid ":cpy-file:`Lib/test/test_syntax.py`" +msgstr "" + +#: ../../internals/parser.rst:838 +msgid ":cpy-file:`Lib/test/test_exceptions.py`" +msgstr "" + +#: ../../internals/parser.rst:840 +msgid "" +"Check the contents of these files to know which is the best place to place " +"new tests depending on the nature of the new feature you are adding." +msgstr "" + +#: ../../internals/parser.rst:843 +msgid "" +"Tests for the parser generator itself can be found in the :cpy-file:`Lib/" +"test/test_peg_generator` directory." +msgstr "" + +#: ../../internals/parser.rst:847 +msgid "Debugging generated parsers" +msgstr "" + +#: ../../internals/parser.rst:850 +msgid "Making experiments" +msgstr "" + +#: ../../internals/parser.rst:852 +msgid "" +"As the generated C parser is the one used by Python, this means that if " +"something goes wrong when adding some new rules to the grammar you cannot " +"correctly compile and execute Python anymore. This makes it a bit " +"challenging to debug when something goes wrong, especially when making " +"experiments." +msgstr "" + +#: ../../internals/parser.rst:856 +msgid "" +"For this reason it is a good idea to experiment first by generating a Python " +"parser. To do this, you can go to the :cpy-file:`Tools/peg_generator/` " +"directory on the CPython repository and manually call the parser generator " +"by executing:" +msgstr "" + +#: ../../internals/parser.rst:863 +msgid "" +"This will generate a file called :file:`parse.py` in the same directory that " +"you can use to parse some input:" +msgstr "" + +#: ../../internals/parser.rst:869 +msgid "" +"As the generated :file:`parse.py` file is just Python code, you can modify " +"it and add breakpoints to debug or better understand some complex situations." +msgstr "" + +#: ../../internals/parser.rst:874 +msgid "Verbose mode" +msgstr "" + +#: ../../internals/parser.rst:876 +msgid "" +"When Python is compiled in debug mode (by adding ``--with-pydebug`` when " +"running the configure step in Linux or by adding ``-d`` when calling the :" +"cpy-file:`PCbuild/build.bat` script in Windows), it is possible to activate " +"a **very** verbose mode in the generated parser. This is very useful to " +"debug the generated parser and to understand how it works, but it can be a " +"bit hard to understand at first." +msgstr "" + +#: ../../internals/parser.rst:883 +msgid "" +"When activating verbose mode in the Python parser, it is better to not use " +"interactive mode as it can be much harder to understand, because interactive " +"mode involves some special steps compared to regular parsing." +msgstr "" + +#: ../../internals/parser.rst:886 +msgid "" +"To activate verbose mode you can add the ``-d`` flag when executing Python:" +msgstr "" + +#: ../../internals/parser.rst:892 +msgid "" +"This will print **a lot** of output to ``stderr`` so is probably better to " +"dump it to a file for further analysis. The output consists of trace lines " +"with the following structure:" +msgstr "" + +#: ../../internals/parser.rst:895 +msgid "" +" ('>'|'-'|'+'|'!') []: " +" ..." +msgstr "" + +#: ../../internals/parser.rst:897 +msgid "" +"Every line is indented by a different amount (````) depending " +"on how deep the call stack is. The next character marks the type of the " +"trace:" +msgstr "" + +#: ../../internals/parser.rst:900 +msgid "``>`` indicates that a rule is going to be attempted to be parsed." +msgstr "" + +#: ../../internals/parser.rst:901 +msgid "``-`` indicates that a rule has failed to be parsed." +msgstr "" + +#: ../../internals/parser.rst:902 +msgid "``+`` indicates that a rule has been parsed correctly." +msgstr "" + +#: ../../internals/parser.rst:903 +msgid "" +"``!`` indicates that an exception or an error has been detected and the " +"parser is unwinding." +msgstr "" + +#: ../../internals/parser.rst:905 +msgid "" +"The part indicates the current index in the token array, " +"the part indicates what rule is being parsed and the " +" part indicates what alternative within that rule is being " +"attempted." +msgstr "" + +#: ../../internals/parser.rst:913 +msgid "Ford, Bryan https://pdos.csail.mit.edu/~baford/packrat/thesis/" +msgstr "" + +#: ../../internals/parser.rst:916 +msgid "Medeiros et al. https://arxiv.org/pdf/1207.0443.pdf" +msgstr "" + +#: ../../internals/parser.rst:919 +msgid "Warth et al. http://web.cs.ucla.edu/~todd/research/pepm08.pdf" +msgstr "" + +#: ../../testing/buildbots.rst:5 +msgid "Working with Buildbots" +msgstr "" + +#: ../../testing/buildbots.rst:9 +msgid "" +"To assert that there are no regressions in the :ref:`development and " +"maintenance branches `, Python has a set of dedicated machines " +"(called *buildbots* or *build workers*) used for continuous integration. " +"They span a number of hardware/operating system combinations. Furthermore, " +"each machine hosts several *builders*, one per active branch: when a new " +"change is pushed to this branch on the public `GitHub repository `_, all corresponding builders will schedule a new " +"build to be run as soon as possible." +msgstr "" + +#: ../../testing/buildbots.rst:17 +msgid "The build steps run by the buildbots are the following:" +msgstr "" + +#: ../../testing/buildbots.rst:19 +msgid "Check out the source tree for the changeset which triggered the build" +msgstr "" + +#: ../../testing/buildbots.rst:20 +msgid "Compile Python" +msgstr "" + +#: ../../testing/buildbots.rst:21 +msgid "Run the test suite using :ref:`strenuous settings `" +msgstr "" + +#: ../../testing/buildbots.rst:22 +msgid "Clean up the build tree" +msgstr "" + +#: ../../testing/buildbots.rst:24 +msgid "" +"It is your responsibility, as a core developer, to check the automatic build " +"results after you push a change to the repository. It is therefore " +"important that you get acquainted with the way these results are presented, " +"and how various kinds of failures can be explained and diagnosed." +msgstr "" + +#: ../../testing/buildbots.rst:30 +msgid "In case of trouble" +msgstr "" + +#: ../../testing/buildbots.rst:32 +msgid "" +"Please read this page in full. If your questions aren't answered here and " +"you need assistance with the buildbots, a good way to get help is to either:" +msgstr "" + +#: ../../testing/buildbots.rst:35 +msgid "" +"contact the ``python-buildbots@python.org`` mailing list where all buildbot " +"worker owners are subscribed; or" +msgstr "" + +#: ../../testing/buildbots.rst:37 +msgid "contact the release manager of the branch you have issues with." +msgstr "" + +#: ../../testing/buildbots.rst:40 +msgid "Buildbot failures on Pull Requests" +msgstr "" + +#: ../../testing/buildbots.rst:42 +msgid "" +"The ``bedevere-bot`` on GitHub will put a message on your merged Pull " +"Request if building your commit on a stable buildbot worker fails. Take care " +"to evaluate the failure, even if it looks unrelated at first glance." +msgstr "" + +#: ../../testing/buildbots.rst:46 +msgid "" +"Not all failures will generate a notification since not all builds are " +"executed after each commit. In particular, reference leaks builds take " +"several hours to complete so they are done periodically. This is why it's " +"important for you to be able to check the results yourself, too." +msgstr "" + +#: ../../testing/buildbots.rst:52 +msgid "Checking results of automatic builds" +msgstr "" + +#: ../../testing/buildbots.rst:54 +msgid "There are three ways of visualizing recent build results:" +msgstr "" + +#: ../../testing/buildbots.rst:56 +msgid "" +"The Web interface for each branch at https://www.python.org/dev/buildbot/, " +"where the so-called \"waterfall\" view presents a vertical rundown of recent " +"builds for each builder. When interested in one build, you'll have to click " +"on it to know which changesets it corresponds to. Note that the buildbot " +"web pages are often slow to load, be patient." +msgstr "" + +#: ../../testing/buildbots.rst:62 +msgid "" +"The command-line ``bbreport.py`` client, which you can get from https://code." +"google.com/archive/p/bbreport. Installing it is trivial: just add the " +"directory containing ``bbreport.py`` to your system path so that you can run " +"it from any filesystem location. For example, if you want to display the " +"latest build results on the development (\"main\") branch, type::" +msgstr "" + +#: ../../testing/buildbots.rst:71 +msgid "" +"The buildbot \"console\" interface at https://buildbot.python.org/all/ This " +"works best on a wide, high resolution monitor. Clicking on the colored " +"circles will allow you to open a new page containing whatever information " +"about that particular build is of interest to you. You can also access " +"builder information by clicking on the builder status bubbles in the top " +"line." +msgstr "" + +#: ../../testing/buildbots.rst:78 +msgid "" +"If you like IRC, having an IRC client open to the #python-dev-notifs channel " +"on irc.libera.chat is useful. Any time a builder changes state (last build " +"passed and this one didn't, or vice versa), a message is posted to the " +"channel. Keeping an eye on the channel after pushing a changeset is a simple " +"way to get notified that there is something you should look in to." +msgstr "" + +#: ../../testing/buildbots.rst:84 +msgid "" +"Some buildbots are much faster than others. Over time, you will learn which " +"ones produce the quickest results after a build, and which ones take the " +"longest time." +msgstr "" + +#: ../../testing/buildbots.rst:88 +msgid "" +"Also, when several changesets are pushed in a quick succession in the same " +"branch, it often happens that a single build is scheduled for all these " +"changesets." +msgstr "" + +#: ../../testing/buildbots.rst:93 +msgid "Stability" +msgstr "" + +#: ../../testing/buildbots.rst:95 +msgid "" +"A subset of the buildbots are marked \"stable\". They are taken into " +"account when making a new release. The rule is that all stable builders " +"must be free of persistent failures when the release is cut. It is " +"absolutely **vital** that core developers fix any issue they introduce on " +"the stable buildbots, as soon as possible." +msgstr "" + +#: ../../testing/buildbots.rst:101 +msgid "" +"This does not mean that other builders' test results can be taken lightly, " +"either. Some of them are known for having platform-specific issues that " +"prevent some tests from succeeding (or even terminating at all), but " +"introducing additional failures should generally not be an option." +msgstr "" + +#: ../../testing/buildbots.rst:107 +msgid "Flags-dependent failures" +msgstr "" + +#: ../../testing/buildbots.rst:109 +msgid "" +"Sometimes, while you have run the :ref:`whole test suite ` before " +"committing, you may witness unexpected failures on the buildbots. One " +"source of such discrepancies is if different flags have been passed to the " +"test runner or to Python itself. To reproduce, make sure you use the same " +"flags as the buildbots: they can be found out simply by clicking the " +"**stdio** link for the failing build's tests. For example::" +msgstr "" + +#: ../../testing/buildbots.rst:119 +msgid "" +"Running ``Lib/test/regrtest.py`` is exactly equivalent to running ``-m " +"test``." +msgstr "" + +#: ../../testing/buildbots.rst:123 +msgid "Ordering-dependent failures" +msgstr "" + +#: ../../testing/buildbots.rst:125 +msgid "" +"Sometimes the failure is even subtler, as it relies on the order in which " +"the tests are run. The buildbots *randomize* test order (by using the ``-" +"r`` option to the test runner) to maximize the probability that potential " +"interferences between library modules are exercised; the downside is that it " +"can make for seemingly sporadic failures." +msgstr "" + +#: ../../testing/buildbots.rst:131 +msgid "" +"The ``--randseed`` option makes it easy to reproduce the exact randomization " +"used in a given build. Again, open the ``stdio`` link for the failing test " +"run, and check the beginning of the test output proper." +msgstr "" + +#: ../../testing/buildbots.rst:135 +msgid "Let's assume, for the sake of example, that the output starts with:" +msgstr "" + +#: ../../testing/buildbots.rst:149 +msgid "You can reproduce the exact same order using::" +msgstr "" + +#: ../../testing/buildbots.rst:153 +msgid "It will run the following sequence (trimmed for brevity):" +msgstr "" + +#: ../../testing/buildbots.rst:164 +msgid "" +"If this is enough to reproduce the failure on your setup, you can then " +"bisect the test sequence to look for the specific interference causing the " +"failure. Copy and paste the test sequence in a text file, then use the ``--" +"fromfile`` (or ``-f``) option of the test runner to run the exact sequence " +"recorded in that text file::" +msgstr "" + +#: ../../testing/buildbots.rst:172 +msgid "" +"In the example sequence above, if ``test_unicode`` had failed, you would " +"first test the following sequence:" +msgstr "" + +#: ../../testing/buildbots.rst:182 +msgid "" +"And, if it succeeds, the following one instead (which, hopefully, shall " +"fail):" +msgstr "" + +#: ../../testing/buildbots.rst:191 +msgid "" +"Then, recursively, narrow down the search until you get a single pair of " +"tests which triggers the failure. It is very rare that such an interference " +"involves more than **two** tests. If this is the case, we can only wish you " +"good luck!" +msgstr "" + +#: ../../testing/buildbots.rst:197 +msgid "" +"You cannot use the ``-j`` option (for parallel testing) when diagnosing " +"ordering-dependent failures. Using ``-j`` isolates each test in a pristine " +"subprocess and, therefore, prevents you from reproducing any interference " +"between tests." +msgstr "" + +#: ../../testing/buildbots.rst:204 +msgid "Transient failures" +msgstr "" + +#: ../../testing/buildbots.rst:206 +msgid "" +"While we try to make the test suite as reliable as possible, some tests do " +"not reach a perfect level of reproducibility. Some of them will sometimes " +"display spurious failures, depending on various conditions. Here are common " +"offenders:" +msgstr "" + +#: ../../testing/buildbots.rst:211 +msgid "" +"Network-related tests, such as ``test_poplib``, ``test_urllibnet``, etc. " +"Their failures can stem from adverse network conditions, or imperfect thread " +"synchronization in the test code, which often has to run a server in a " +"separate thread." +msgstr "" + +#: ../../testing/buildbots.rst:216 +msgid "" +"Tests dealing with delicate issues such as inter-thread or inter-process " +"synchronization, or Unix signals: ``test_multiprocessing``, " +"``test_threading``, ``test_subprocess``, ``test_threadsignals``." +msgstr "" + +#: ../../testing/buildbots.rst:220 +msgid "" +"When you think a failure might be transient, it is recommended you confirm " +"by waiting for the next build. Still, even if the failure does turn out " +"sporadic and unpredictable, the issue should be reported on the bug tracker; " +"even better if it can be diagnosed and suppressed by fixing the test's " +"implementation, or by making its parameters - such as a timeout - more " +"robust." +msgstr "" + +#: ../../testing/buildbots.rst:228 +msgid "Custom builders" +msgstr "" + +#: ../../testing/buildbots.rst:232 +msgid "" +"When working on a platform-specific issue, you may want to test your changes " +"on the buildbot fleet rather than just on GitHub Actions and Azure " +"Pipelines. To do so, you can make use of the `custom builders `_. These builders track " +"the ``buildbot-custom`` short-lived branch of the ``python/cpython`` " +"repository, which is only accessible to core developers." +msgstr "" + +#: ../../testing/buildbots.rst:239 +msgid "" +"To start a build on the custom builders, push the commit you want to test to " +"the ``buildbot-custom`` branch::" +msgstr "" + +#: ../../testing/buildbots.rst:244 +msgid "" +"You may run into conflicts if another developer is currently using the " +"custom builders or forgot to delete the branch when they finished. In that " +"case, make sure the other developer is finished and either delete the branch " +"or force-push (add the ``-f`` option) over it." +msgstr "" + +#: ../../testing/buildbots.rst:249 +msgid "When you have gotten the results of your tests, delete the branch::" +msgstr "" + +#: ../../testing/buildbots.rst:253 +msgid "" +"If you are interested in the results of a specific test file only, we " +"recommend you change (temporarily, of course) the contents of the " +"``buildbottest`` clause in ``Makefile.pre.in``; or, for Windows builders, " +"the ``Tools/buildbot/test.bat`` script." +msgstr "" + +#: ../../testing/buildbots.rst:259 +msgid ":ref:`buildworker`" +msgstr "" + +#: ../../testing/coverage.rst:5 +msgid "Increase Test Coverage" +msgstr "" + +#: ../../testing/coverage.rst:7 +msgid "" +"Python development follows a practice that all semantic changes and " +"additions to the language and :abbr:`stdlib (standard library)` are " +"accompanied by appropriate unit tests. Unfortunately Python was in existence " +"for a long time before the practice came into effect. This has left chunks " +"of the stdlib untested which is not a desirable situation to be in." +msgstr "" + +#: ../../testing/coverage.rst:13 +#, python-format +msgid "" +"A good, easy way to become acquainted with Python's code and to help out is " +"to help increase the test coverage for Python's stdlib. Ideally we would " +"like to have 100% coverage, but any increase is a good one. Do realize, " +"though, that getting 100% coverage is not always possible. There could be " +"platform-specific code that simply will not execute for you, errors in the " +"output, etc. You can use your judgement as to what should and should not be " +"covered, but being conservative and assuming something should be covered is " +"generally a good rule to follow." +msgstr "" + +#: ../../testing/coverage.rst:22 +msgid "" +"Choosing what module you want to increase test coverage for can be done in a " +"couple of ways. You can simply run the entire test suite yourself with " +"coverage turned on and see what modules need help. This has the drawback of " +"running the entire test suite under coverage measuring which takes some time " +"to complete, but you will have an accurate, up-to-date notion of what " +"modules need the most work." +msgstr "" + +#: ../../testing/coverage.rst:29 +msgid "" +"Another is to follow the examples below and simply see what coverage your " +"favorite module has. This is \"stabbing in the dark\", though, and so it " +"might take some time to find a module that needs coverage help." +msgstr "" + +#: ../../testing/coverage.rst:33 +msgid "" +"Do make sure, though, that for any module you do decide to work on that you " +"run coverage for just that module. This will make sure you know how good the " +"explicit coverage of the module is from its own set of tests instead of from " +"implicit testing by other code that happens to use the module." +msgstr "" + +#: ../../testing/coverage.rst:40 +msgid "Common Gotchas" +msgstr "" + +#: ../../testing/coverage.rst:42 +msgid "" +"Please realize that coverage reports on modules already imported before " +"coverage data starts to be recorded will be wrong. Typically you can tell a " +"module falls into this category by the coverage report saying that global " +"statements that would obviously be executed upon import have gone unexecuted " +"while local statements have been covered. In these instances you can ignore " +"the global statement coverage and simply focus on the local statement " +"coverage." +msgstr "" + +#: ../../testing/coverage.rst:49 +msgid "" +"When writing new tests to increase coverage, do take note of the style of " +"tests already provided for a module (e.g., whitebox, blackbox, etc.). As " +"some modules are primarily maintained by a single core developer they may " +"have a specific preference as to what kind of test is used (e.g., whitebox) " +"and prefer that other types of tests not be used (e.g., blackbox). When in " +"doubt, stick with whitebox testing in order to properly exercise the code." +msgstr "" + +#: ../../testing/coverage.rst:58 +msgid "Measuring Coverage" +msgstr "" + +#: ../../testing/coverage.rst:60 +msgid "" +"It should be noted that a quirk of running coverage over Python's own stdlib " +"is that certain modules are imported as part of interpreter startup. Those " +"modules required by Python itself will not be viewed as executed by the " +"coverage tools and thus look like they have very poor coverage (e.g., the :" +"py:mod:`stat` module). In these instances the module will appear to not have " +"any coverage of global statements but will have proper coverage of local " +"statements (e.g., function definitions will not be traced, but the function " +"bodies will). Calculating the coverage of modules in this situation will " +"simply require manually looking at what local statements were not executed." +msgstr "" + +#: ../../testing/coverage.rst:71 +msgid "Using coverage.py" +msgstr "" + +#: ../../testing/coverage.rst:73 +msgid "" +"One of the most popular third-party coverage tools is `coverage.py`_ which " +"provides very nice HTML output along with advanced features such as :ref:" +"`branch coverage `. If you prefer to stay with tools only " +"provided by the stdlib then you can :ref:`use test.regrtest " +"`." +msgstr "" + +#: ../../testing/coverage.rst:83 +msgid "Install Coverage" +msgstr "" + +#: ../../testing/coverage.rst:85 +msgid "" +"By default, pip will not install into the in-development version of Python " +"you just built, and this built version of Python will not see packages " +"installed into your default version of Python. One option is to use a " +"virtual environment to install coverage." +msgstr "" + +#: ../../testing/coverage.rst:90 +msgid "On Unix run::" +msgstr "" + +#: ../../testing/coverage.rst:96 +msgid "On :ref:`most ` macOS systems run::" +msgstr "" + +#: ../../testing/coverage.rst:102 +msgid "On Windows run::" +msgstr "" + +#: ../../testing/coverage.rst:108 +msgid "" +"You can now use python without the ./ for the rest of these instructions, as " +"long as your venv is activated. For more info on venv see `Virtual " +"Environment `_ documentation." +msgstr "" + +#: ../../testing/coverage.rst:112 +msgid "" +"If this does not work for you for some reason, you should try using the in-" +"development version of coverage.py to see if it has been updated as needed. " +"To do this you should clone/check out the development version of coverage.py:" +msgstr "" + +#: ../../testing/coverage.rst:116 +msgid "git clone https://github.com/nedbat/coveragepy" +msgstr "" + +#: ../../testing/coverage.rst:118 +msgid "You will need to use the full path to the installation." +msgstr "" + +#: ../../testing/coverage.rst:120 +msgid "" +"Another option is to use an installed copy of coverage.py, if you already " +"have it. For this, you will again need to use the full path to that " +"installation." +msgstr "" + +#: ../../testing/coverage.rst:126 +msgid "Basic Usage" +msgstr "" + +#: ../../testing/coverage.rst:128 +msgid "" +"The following command will tell you if your copy of coverage works " +"(substitute ``COVERAGEDIR`` with the directory where your clone exists, e.g. " +"``../coveragepy``)::" +msgstr "" + +#: ../../testing/coverage.rst:134 +msgid "" +"Coverage.py will print out a little bit of helper text verifying that " +"everything is working. If you are using an installed copy, you can do the " +"following instead (note this must be installed using the built copy of " +"Python, such as by venv)::" +msgstr "" + +#: ../../testing/coverage.rst:141 +msgid "" +"The rest of the examples on how to use coverage.py will assume you are using " +"a cloned copy, but you can substitute the above and all instructions should " +"still be valid." +msgstr "" + +#: ../../testing/coverage.rst:145 +msgid "To run the test suite under coverage.py, do the following::" +msgstr "" + +#: ../../testing/coverage.rst:149 +msgid "" +"To run only a single test, specify the module/package being tested in the " +"``--source`` flag (so as to prune the coverage reporting to only the module/" +"package you are interested in) and then append the name of the test you wish " +"to run to the command::" +msgstr "" + +#: ../../testing/coverage.rst:156 +msgid "" +"To see the results of the coverage run, you can view a text-based report " +"with::" +msgstr "" + +#: ../../testing/coverage.rst:160 +msgid "" +"You can use the ``--show-missing`` flag to get a list of lines that were not " +"executed::" +msgstr "" + +#: ../../testing/coverage.rst:165 +msgid "" +"But one of the strengths of coverage.py is its HTML-based reports which let " +"you visually see what lines of code were not tested::" +msgstr "" + +#: ../../testing/coverage.rst:170 +msgid "" +"This will generate an HTML report in a directory named ``htmlcov`` which " +"ignores any errors that may arise and ignores modules for which test " +"coverage is unimportant (e.g. tests, temp files, etc.). You can then open " +"the ``htmlcov/index.html`` file in a web browser to view the coverage " +"results along with pages that visibly show what lines of code were or were " +"not executed." +msgstr "" + +#: ../../testing/coverage.rst:180 +msgid "Branch Coverage" +msgstr "" + +#: ../../testing/coverage.rst:182 +#, python-format +msgid "" +"For the truly daring, you can use another powerful feature of coverage.py: " +"branch coverage. Testing every possible branch path through code, while a " +"great goal to strive for, is a secondary goal to getting 100% line coverage " +"for the entire stdlib (for now)." +msgstr "" + +#: ../../testing/coverage.rst:187 +msgid "" +"If you decide you want to try to improve branch coverage, simply add the ``--" +"branch`` flag to your coverage run::" +msgstr "" + +#: ../../testing/coverage.rst:192 +msgid "" +"This will lead to the report stating not only what lines were not covered, " +"but also what branch paths were not executed." +msgstr "" + +#: ../../testing/coverage.rst:197 +msgid "Coverage Results For Modules Imported Early On" +msgstr "" + +#: ../../testing/coverage.rst:199 +msgid "" +"For the *truly truly* daring, you can use a hack to get coverage.py to " +"include coverage for modules that are imported early on during CPython's " +"startup (e.g. the encodings module). Do not worry if you can't get this to " +"work or it doesn't make any sense; it's entirely optional and only important " +"for a small number of modules." +msgstr "" + +#: ../../testing/coverage.rst:205 +msgid "" +"If you still choose to try this, the first step is to make sure coverage." +"py's C extension is installed. You can check this with::" +msgstr "" + +#: ../../testing/coverage.rst:210 +msgid "" +"If it says 'without C extension', then you will need to build the C " +"extension. Assuming that coverage.py's clone is at ``COVERAGEDIR`` and your " +"clone of CPython is at ``CPYTHONDIR``, you can do this by executing the " +"following in your coverage.py clone::" +msgstr "" + +#: ../../testing/coverage.rst:217 +msgid "" +"This will build coverage.py's C extension code in-place, allowing the " +"previous instructions on how to gather coverage to continue to work." +msgstr "" + +#: ../../testing/coverage.rst:220 +msgid "" +"To get coverage.py to be able to gather the most accurate coverage data on " +"as many modules as possible **with a HORRIBLE HACK that you should NEVER use " +"in your own code**, run the following from your CPython clone::" +msgstr "" + +#: ../../testing/coverage.rst:227 +msgid "" +"This will give you the most complete coverage possible for CPython's " +"standard library." +msgstr "" + +#: ../../testing/coverage.rst:236 +msgid "Using test.regrtest" +msgstr "" + +#: ../../testing/coverage.rst:238 +msgid "" +"If you prefer to rely solely on the stdlib to generate coverage data, you " +"can do so by passing the appropriate flags to :py:mod:`test` (along with any " +"other flags you want to)::" +msgstr "" + +#: ../../testing/coverage.rst:244 +msgid "" +"Do note the argument to ``-D``; if you do not specify an absolute path to " +"where you want the coverage data to end up it will go somewhere you don't " +"expect." +msgstr "" + +#: ../../testing/coverage.rst:249 +msgid "" +"If you are running coverage over the entire test suite, make sure to add ``-" +"x test_importlib test_runpy test_trace`` to exclude those tests as they " +"trigger exceptions during coverage; see https://bugs.python.org/issue10541 " +"and https://bugs.python.org/issue10991." +msgstr "" + +#: ../../testing/coverage.rst:254 +msgid "" +"Once the tests are done you will find the directory you specified contains " +"files for each executed module along with which lines were executed how many " +"times." +msgstr "" + +#: ../../testing/coverage.rst:260 +msgid "Filing the Issue" +msgstr "" + +#: ../../testing/coverage.rst:261 +msgid "" +"Once you have increased coverage, you need to create an issue on the `issue " +"tracker`_ and submit a :ref:`pull request `." +msgstr "" + +#: ../../testing/coverage.rst:267 +msgid "Measuring coverage of C code with gcov and lcov" +msgstr "" + +#: ../../testing/coverage.rst:269 +msgid "" +"It's also possible to measure the function, line and branch coverage of " +"Python's C code. Right now only GCC with `gcov`_ is supported. In order to " +"create an instrumented build of Python with gcov, run::" +msgstr "" + +#: ../../testing/coverage.rst:275 +msgid "" +"Then run some code and gather coverage data with the ``gcov`` command. In " +"order to create a HTML report you can install `lcov`_. The command::" +msgstr "" + +#: ../../testing/coverage.rst:280 +msgid "" +"assembles coverage data, removes 3rd party and system libraries and finally " +"creates a report. You can skip both steps and just run::" +msgstr "" + +#: ../../testing/coverage.rst:285 +msgid "" +"if you like to generate a coverage report for Python's stdlib tests. It " +"takes about 20 to 30 minutes on a modern computer." +msgstr "" + +#: ../../testing/coverage.rst:290 +msgid "" +"Multiple test jobs may not work properly. C coverage reporting has only been " +"tested with a single test process." +msgstr "" + +#: ../../testing/index.rst:3 +msgid "Testing and Buildbots" +msgstr "Testes e buildbots" + +#: ../../testing/new-buildbot-worker.rst:6 +msgid "New Buildbot Workers" +msgstr "" + +#: ../../testing/new-buildbot-worker.rst:10 +msgid "" +"Python's :ref:`buildbots` system was discussed earlier. We sometimes refer " +"to the collection of *build workers* as our \"buildbot fleet\". The " +"machines that comprise the fleet are voluntarily contributed resources. " +"Many are run by individual volunteers out of their own pockets and time, " +"while others are supported by corporations. Even the corporate sponsored " +"buildbots, however, tend to exist because some individual championed them, " +"made them a reality, and is committed to maintaining them." +msgstr "" + +#: ../../testing/new-buildbot-worker.rst:18 +msgid "" +"Anyone can contribute a buildbot to the fleet. This document describes how " +"to go about setting up a buildbot worker, getting it added, and some hints " +"about buildbot maintenance." +msgstr "" + +#: ../../testing/new-buildbot-worker.rst:22 +msgid "" +"Anyone running a buildbot that is part of the fleet should subscribe to the " +"`python-buildbots `_ mailing list. This mailing list is also the place to contact " +"if you want to contribute a buildbot but have questions." +msgstr "" + +#: ../../testing/new-buildbot-worker.rst:27 +msgid "" +"As for what kind of buildbot to run...take a look at our `current fleet " +"`_. Pretty much anything that isn't on " +"that list would be interesting: different Linux/UNIX distributions, " +"different versions of the various OSes, other OSes if you or someone are " +"prepared to make the test suite actually pass on that new OS. Even if you " +"only want to run an OS that's already on our list there may be utility in " +"setting it up; we also need to build and test python under various alternate " +"build configurations. Post to the mailing list and talk about what you'd " +"like to contribute." +msgstr "" + +#: ../../testing/new-buildbot-worker.rst:39 +msgid "Preparing for buildbot worker setup" +msgstr "" + +#: ../../testing/new-buildbot-worker.rst:41 +msgid "" +"Since the goal is to build Python from source, the system will need to have " +"everything required to do normal python development: a compiler, a linker, " +"and (except on windows) the \"development\" headers for any of the optional " +"modules (zlib, OpenSSL, etc) supported by the platform. Follow the steps " +"outlined in :ref:`setup` for the target platform, all the way through to " +"having a working compiled python." +msgstr "" + +#: ../../testing/new-buildbot-worker.rst:48 +msgid "" +"In order to set up the buildbot software, you will need to obtain an " +"identifier and password for your worker so it can join the fleet. Email " +"python-buildbots@python.org to discuss adding your worker and to obtain the " +"needed workername and password. You can do some of the steps that follow " +"before having the credentials, but it is easiest to have them before the " +"\"buildbot worker\" step below." +msgstr "" + +#: ../../testing/new-buildbot-worker.rst:57 +msgid "Setting up the buildbot worker" +msgstr "" + +#: ../../testing/new-buildbot-worker.rst:60 +msgid "Conventional always-on machines" +msgstr "" + +#: ../../testing/new-buildbot-worker.rst:62 +msgid "" +"You need a recent version of the `buildbot `_ " +"software, and you will probably want a separate 'buildbot' user to run the " +"buildbot software. You may also want to set the buildbot up using a virtual " +"environment, depending on how you manage your system. We won't cover how to " +"that here; it doesn't differ from setting up a virtual environment for any " +"other software, but you'll need to modify the sequence of steps below as " +"appropriate if you choose that path." +msgstr "" + +#: ../../testing/new-buildbot-worker.rst:70 +#: ../../testing/new-buildbot-worker.rst:113 +msgid "For Linux:" +msgstr "" + +#: ../../testing/new-buildbot-worker.rst:72 +msgid "" +"If your package manager provides the buildbot worker software, that is " +"probably the best way to install it; it may create the buildbot user for " +"you, in which case you can skip that step. Otherwise, do ``pip install " +"buildbot-worker``." +msgstr "" + +#: ../../testing/new-buildbot-worker.rst:76 +msgid "Create a ``buildbot`` user (using, eg: ``useradd``) if necessary." +msgstr "" + +#: ../../testing/new-buildbot-worker.rst:77 +#: ../../testing/new-buildbot-worker.rst:83 +msgid "Log in as the buildbot user." +msgstr "" + +#: ../../testing/new-buildbot-worker.rst:79 +msgid "For Mac:" +msgstr "" + +#: ../../testing/new-buildbot-worker.rst:81 +msgid "" +"Create a buildbot user using the OS/X control panel user admin. It should " +"be a \"standard\" user." +msgstr "" + +#: ../../testing/new-buildbot-worker.rst:84 +msgid "" +"Install the buildbot worker [#]_ by running ``pip install buildbot-worker``." +msgstr "" + +#: ../../testing/new-buildbot-worker.rst:86 +#: ../../testing/new-buildbot-worker.rst:171 +msgid "For Windows:" +msgstr "" + +#: ../../testing/new-buildbot-worker.rst:88 +msgid "Create a buildbot user as a \"standard\" user." +msgstr "" + +#: ../../testing/new-buildbot-worker.rst:89 +msgid "Install the latest version of Python from python.org." +msgstr "" + +#: ../../testing/new-buildbot-worker.rst:90 +msgid "Open a Command Prompt." +msgstr "" + +#: ../../testing/new-buildbot-worker.rst:91 +msgid "" +"Execute ``python -m pip install pypiwin32 buildbot-worker`` (note that " +"``python.exe`` is not added to ``PATH`` by default, making the ``python`` " +"command accessible is left as an exercise for the user)." +msgstr "" + +#: ../../testing/new-buildbot-worker.rst:95 +msgid "" +"In a terminal window for the buildbot user, issue the following commands " +"(you can put the ``buildarea`` wherever you want to)::" +msgstr "" + +#: ../../testing/new-buildbot-worker.rst:101 +msgid "" +"(Note that on Windows, the ``buildbot-worker`` command will be in the :file:" +"`Scripts` directory of your Python installation.)" +msgstr "" + +#: ../../testing/new-buildbot-worker.rst:104 +msgid "" +"Once this initial worker setup completes, you should edit the files " +"``buildarea/info/admin`` and ``buildarea/info/host`` to provide your contact " +"info and information on the host configuration, respectively. This " +"information will be presented in the buildbot web pages that display " +"information about the builders running on your worker." +msgstr "" + +#: ../../testing/new-buildbot-worker.rst:110 +msgid "" +"You will also want to make sure that the worker is started when the machine " +"reboots:" +msgstr "" + +#: ../../testing/new-buildbot-worker.rst:115 +msgid "Add the following line to ``/etc/crontab``::" +msgstr "" + +#: ../../testing/new-buildbot-worker.rst:119 +msgid "" +"Note that we use ``restart`` rather than ``start`` in case a crash has left " +"a ``twistd.pid`` file behind." +msgstr "" + +#: ../../testing/new-buildbot-worker.rst:122 +msgid "For OSX:" +msgstr "" + +#: ../../testing/new-buildbot-worker.rst:124 +msgid "Create a bin directory for your buildbot user::" +msgstr "" + +#: ../../testing/new-buildbot-worker.rst:128 +msgid "" +"Place the following script, named ``run_worker.sh``, into that directory::" +msgstr "" + +#: ../../testing/new-buildbot-worker.rst:136 +msgid "" +"If you use pip with Apple's system python, add '/System' to the front of the " +"path to the Python bin directory." +msgstr "" + +#: ../../testing/new-buildbot-worker.rst:139 +msgid "" +"Place a file with the following contents into ``/Library/LaunchDaemons``:" +msgstr "" + +#: ../../testing/new-buildbot-worker.rst:169 +msgid "The recommended name for the file is ``net.buildbot.worker``." +msgstr "" + +#: ../../testing/new-buildbot-worker.rst:173 +msgid "" +"Add a Scheduled Task to run ``buildbot-worker start buildarea`` as the " +"buildbot user \"when the computer starts up\". It is best to provide " +"absolute paths to the ``buildbot-worker`` command and the :file:`buildarea` " +"directory. It is also recommended to set the task to run in the directory " +"that contains the :file:`buildarea` directory." +msgstr "" + +#: ../../testing/new-buildbot-worker.rst:179 +msgid "" +"Alternatively (note: don't do both!), set up the worker service as described " +"in the `buildbot documentation `_." +msgstr "" + +#: ../../testing/new-buildbot-worker.rst:183 +msgid "To start the worker running for your initial testing, you can do::" +msgstr "" + +#: ../../testing/new-buildbot-worker.rst:187 +msgid "" +"Then you can either wait for someone to make a commit, or you can pick a " +"builder associated with your worker from the `list of builders `_ and force a build." +msgstr "" + +#: ../../testing/new-buildbot-worker.rst:191 +msgid "" +"In any case you should initially monitor builds on your builders to make " +"sure the tests are passing and to resolve any platform issues that may be " +"revealed by tests that fail. Unfortunately we do not currently have a way " +"to notify you only of failures on your builders, so doing periodic spot " +"checks is also a good idea." +msgstr "" + +#: ../../testing/new-buildbot-worker.rst:199 +msgid "Latent workers" +msgstr "" + +#: ../../testing/new-buildbot-worker.rst:201 +msgid "" +"We also support running `latent workers `_ on the AWS EC2 service. " +"To set up such a worker:" +msgstr "" + +#: ../../testing/new-buildbot-worker.rst:205 +msgid "" +"Start an instance of your chosen base AMI and set it up as a conventional " +"worker." +msgstr "" + +#: ../../testing/new-buildbot-worker.rst:207 +msgid "" +"After the instance is fully set up as a conventional worker (including " +"worker name and password, and admin and host information), create an AMI " +"from the instance and stop the instance." +msgstr "" + +#: ../../testing/new-buildbot-worker.rst:210 +msgid "" +"Contact the buildmaster administrator who gave you your worker name and " +"password and give them the following information:" +msgstr "" + +#: ../../testing/new-buildbot-worker.rst:213 +msgid "Instance size (such as ``m4.large``)" +msgstr "" + +#: ../../testing/new-buildbot-worker.rst:214 +msgid "Full region specification (such as ``us-west-2``)" +msgstr "" + +#: ../../testing/new-buildbot-worker.rst:215 +msgid "AMI ID (such as ``ami-1234beef``)" +msgstr "" + +#: ../../testing/new-buildbot-worker.rst:216 +msgid "" +"An Access Key ID and Access Key. It is recommended to set up a separate IAM " +"user with full access to EC2 and provide the access key information for that " +"user rather than for your main account." +msgstr "" + +#: ../../testing/new-buildbot-worker.rst:220 +msgid "" +"The buildmaster cannot guarantee that it will always shut down your " +"instance(s), so it is recommended to periodically check and make sure there " +"are no \"zombie\" instances running on your account, created by the buildbot " +"master. Also, if you notice that your worker seems to have been down for an " +"unexpectedly long time, please ping the `python-buildbots `_ list to request " +"that the master be restarted." +msgstr "" + +#: ../../testing/new-buildbot-worker.rst:228 +msgid "" +"Latent workers should also be updated periodically to include operating " +"system or other software updates, but when to do such maintenance is largely " +"up to you as the worker owner. There are a couple different options for " +"doing such updates:" +msgstr "" + +#: ../../testing/new-buildbot-worker.rst:233 +msgid "" +"Start an instance from your existing AMI, do updates on that instance, and " +"save a new AMI from the updated instance. Note that (especially for Windows " +"workers) you should do at least one restart of the instance after doing " +"updates to be sure that any post-reboot update work is done before creating " +"the new AMI." +msgstr "" + +#: ../../testing/new-buildbot-worker.rst:238 +msgid "" +"Create an entirely new setup from a newer base AMI using your existing " +"worker name and password." +msgstr "" + +#: ../../testing/new-buildbot-worker.rst:241 +msgid "" +"Whichever way you choose to update your AMI, you'll need to provide the " +"buildmaster administrators with the new AMI ID." +msgstr "" + +#: ../../testing/new-buildbot-worker.rst:246 +msgid "Buildbot worker operation" +msgstr "" + +#: ../../testing/new-buildbot-worker.rst:248 +msgid "" +"Most of the time, running a worker is a \"set and forget\" operation, " +"depending on the level of involvement you want to have in resolving bugs " +"revealed by your builders. There are, however, times when it is helpful or " +"even necessary for you to get involved. As noted above, you should be " +"subscribed to ``python-buildbots@python.org`` so that you will be made aware " +"of any fleet-wide issues." +msgstr "" + +#: ../../testing/new-buildbot-worker.rst:255 +msgid "" +"Necessary tasks include, obviously, keeping the buildbot running. Currently " +"the system for notifying buildbot owners when their workers go offline is " +"not working; this is something we hope to resolve. So currently it is " +"helpful if you periodically check the status of your worker. We will also " +"contact you via your contact address in ``buildarea/info/admin`` when we " +"notice there is a problem that has not been resolved for some period of time " +"and you have not responded to a posting on the python-buildbots list about " +"it." +msgstr "" + +#: ../../testing/new-buildbot-worker.rst:263 +msgid "" +"We currently do not have a minimum version requirement for the worker " +"software. However, this is something we will probably establish as we tune " +"the fleet, so another task will be to occasionally upgrade the buildbot " +"worker software. Coordination for this will be done via ``python-" +"buildbots@python.org``." +msgstr "" + +#: ../../testing/new-buildbot-worker.rst:268 +msgid "" +"The most interesting extra involvement is when your worker reveals a unique " +"or almost-unique problem: a test that is failing on your system but not on " +"other systems. In this case you should be prepared to offer debugging help " +"to the people working on the bug: running tests by hand on the worker " +"machine or, if possible, providing ssh access to a committer to run " +"experiments to try to resolve the issue." +msgstr "" + +#: ../../testing/new-buildbot-worker.rst:277 +msgid "Required Ports" +msgstr "" + +#: ../../testing/new-buildbot-worker.rst:279 +msgid "" +"The worker operates as a *client* to the *buildmaster*. This means that all " +"network connections are *outbound*. This is true also for the network tests " +"in the test suite. Most consumer firewalls will allow any outbound traffic, " +"so normally you do not need to worry about what ports the buildbot uses. " +"However, corporate firewalls are sometimes more restrictive, so here is a " +"table listing all of the outbound ports used by the buildbot and the python " +"test suite (this list may not be complete as new tests may have been added " +"since this table was last vetted):" +msgstr "" + +#: ../../testing/new-buildbot-worker.rst:289 +msgid "Port" +msgstr "" + +#: ../../testing/new-buildbot-worker.rst:289 +msgid "Host" +msgstr "" + +#: ../../testing/new-buildbot-worker.rst:289 ../../triage/labels.rst:213 +#: ../../triage/labels.rst:253 ../../triage/labels.rst:286 +#: ../../triage/labels.rst:311 ../../triage/labels.rst:371 +#: ../../triage/labels.rst:390 +msgid "Description" +msgstr "" + +#: ../../testing/new-buildbot-worker.rst:291 +msgid "20, 21" +msgstr "" + +#: ../../testing/new-buildbot-worker.rst:291 +msgid "ftp.debian.org" +msgstr "" + +#: ../../testing/new-buildbot-worker.rst:291 +msgid "test_urllib2net" +msgstr "" + +#: ../../testing/new-buildbot-worker.rst:292 +msgid "53" +msgstr "" + +#: ../../testing/new-buildbot-worker.rst:292 +msgid "your DNS server" +msgstr "" + +#: ../../testing/new-buildbot-worker.rst:292 +msgid "test_socket, and others implicitly" +msgstr "" + +#: ../../testing/new-buildbot-worker.rst:293 +msgid "80" +msgstr "" + +#: ../../testing/new-buildbot-worker.rst:293 +msgid "python.org example.com" +msgstr "" + +#: ../../testing/new-buildbot-worker.rst:293 +msgid "(several tests)" +msgstr "" + +#: ../../testing/new-buildbot-worker.rst:295 +msgid "119" +msgstr "" + +#: ../../testing/new-buildbot-worker.rst:295 +msgid "news.gmane.org" +msgstr "" + +#: ../../testing/new-buildbot-worker.rst:295 +msgid "test_nntplib" +msgstr "" + +#: ../../testing/new-buildbot-worker.rst:296 +msgid "443" +msgstr "" + +#: ../../testing/new-buildbot-worker.rst:296 +msgid "(various)" +msgstr "" + +#: ../../testing/new-buildbot-worker.rst:296 +msgid "test_ssl" +msgstr "" + +#: ../../testing/new-buildbot-worker.rst:297 +msgid "465" +msgstr "" + +#: ../../testing/new-buildbot-worker.rst:297 +#: ../../testing/new-buildbot-worker.rst:298 +msgid "smtp.gmail.com" +msgstr "" + +#: ../../testing/new-buildbot-worker.rst:297 +#: ../../testing/new-buildbot-worker.rst:298 +msgid "test_smtpnet" +msgstr "" + +#: ../../testing/new-buildbot-worker.rst:298 +msgid "587" +msgstr "" + +#: ../../testing/new-buildbot-worker.rst:299 +msgid "9020" +msgstr "" + +#: ../../testing/new-buildbot-worker.rst:299 +msgid "python.org" +msgstr "" + +#: ../../testing/new-buildbot-worker.rst:299 +msgid "connection to buildmaster" +msgstr "" + +#: ../../testing/new-buildbot-worker.rst:302 +msgid "" +"Many tests will also create local TCP sockets and connect to them, usually " +"using either ``localhost`` or ``127.0.0.1``." +msgstr "" + +#: ../../testing/new-buildbot-worker.rst:307 +msgid "Required Resources" +msgstr "" + +#: ../../testing/new-buildbot-worker.rst:309 +msgid "" +"Based on the last time we did a `survey `_ on buildbot requirements, the " +"recommended resource allocations for a python buildbot are at least:" +msgstr "" + +#: ../../testing/new-buildbot-worker.rst:314 +msgid "2 CPUs" +msgstr "" + +#: ../../testing/new-buildbot-worker.rst:315 +msgid "512 MB RAM" +msgstr "" + +#: ../../testing/new-buildbot-worker.rst:316 +msgid "30 GB free disk space" +msgstr "" + +#: ../../testing/new-buildbot-worker.rst:318 +msgid "" +"The bigmem tests won't run in this configuration, since they require " +"substantially more memory, but these resources should be sufficient to " +"ensure that Python compiles correctly on the platform and can run the rest " +"of the test suite." +msgstr "" + +#: ../../testing/new-buildbot-worker.rst:325 +msgid "Security Considerations" +msgstr "" + +#: ../../testing/new-buildbot-worker.rst:327 +msgid "" +"We only allow builds to be triggered against commits to the `CPython " +"repository on GitHub `_. This means that " +"the code your buildbot will run will have been vetted by a committer. " +"However, mistakes and bugs happen, as could a compromise, so keep this in " +"mind when siting your buildbot on your network and establishing the security " +"around it. Treat the buildbot like you would any resource that is public " +"facing and might get hacked (use a VM and/or jail/chroot/solaris zone, put " +"it in a DMZ, etc). While the buildbot does not have any ports open for " +"inbound traffic (and is not public facing in that sense), committer mistakes " +"do happen, and security flaws are discovered in both released and unreleased " +"code, so treating the buildbot as if it were fully public facing is a good " +"policy." +msgstr "" + +#: ../../testing/new-buildbot-worker.rst:339 +msgid "" +"Code runs differently as privileged and unprivileged users. We would love " +"to have builders running as privileged accounts, but security considerations " +"do make that difficult, as access to root can provide access to surprising " +"resources (such as spoofed IP packets, changes in MAC addresses, etc) even " +"on a VM setup. But if you are confident in your setup, we'd love to have a " +"buildbot that runs python as root." +msgstr "" + +#: ../../testing/new-buildbot-worker.rst:346 +msgid "" +"Note that the above is a summary of a `discussion `_ on python-dev about " +"buildbot security that includes examples of the tests for which privilege " +"matters. There was no final consensus, but the information is useful as a " +"point of reference." +msgstr "" + +#: ../../testing/new-buildbot-worker.rst:352 +msgid "" +"If the buildbot is going to do Framework builds, it is better to use the " +"Apple-shipped Python so as to avoid any chance of the buildbot picking up " +"components from the installed python.org python." +msgstr "" + +#: ../../testing/run-write-tests.rst:6 +msgid "Running and Writing Tests" +msgstr "" + +#: ../../testing/run-write-tests.rst:10 +msgid "" +"This document assumes you are working from an :ref:`in-development " +"` checkout of Python. If you are not then some things presented " +"here may not work as they may depend on new features not available in " +"earlier versions of Python." +msgstr "" + +#: ../../testing/run-write-tests.rst:16 +msgid "Running" +msgstr "" + +#: ../../testing/run-write-tests.rst:18 +msgid "" +"The shortest, simplest way of running the test suite is the following " +"command from the root directory of your checkout (after you have :ref:`built " +"Python `)::" +msgstr "" + +#: ../../testing/run-write-tests.rst:24 +msgid "" +"You may need to change this command as follows throughout this section. On :" +"ref:`most ` macOS systems, replace :file:`./python` with :" +"file:`./python.exe`. On Windows, use :file:`python.bat`. If using Python " +"2.7, replace ``test`` with ``test.regrtest``." +msgstr "" + +#: ../../testing/run-write-tests.rst:29 +msgid "" +"This will run the majority of tests, but exclude a small portion of them; " +"these excluded tests use special kinds of resources: for example, accessing " +"the Internet, or trying to play a sound or to display a graphical interface " +"on your desktop. They are disabled by default so that running the test " +"suite is not too intrusive. To enable some of these additional tests (and " +"for other flags which can help debug various issues such as reference " +"leaks), read the help text::" +msgstr "" + +#: ../../testing/run-write-tests.rst:39 +msgid "" +"If you want to run a single test file, simply specify the test file name " +"(without the extension) as an argument. You also probably want to enable " +"verbose mode (using ``-v``), so that individual failures are detailed::" +msgstr "" + +#: ../../testing/run-write-tests.rst:45 +msgid "" +"To run a single test case, use the ``unittest`` module, providing the import " +"path to the test case::" +msgstr "" + +#: ../../testing/run-write-tests.rst:50 +msgid "" +"Some test modules also support direct invocation, which might be useful for " +"IDEs and local debugging::" +msgstr "" + +#: ../../testing/run-write-tests.rst:55 +msgid "But, there are several important notes:" +msgstr "" + +#: ../../testing/run-write-tests.rst:57 +msgid "" +"This way of running tests exists only for local developer needs and is " +"discouraged for anything else" +msgstr "" + +#: ../../testing/run-write-tests.rst:59 +msgid "" +"Some modules do not support it at all. One example is ``test_importlib``. In " +"other words: if some module does not have ``unittest.main()``, then most " +"likely it does not support direct invocation." +msgstr "" + +#: ../../testing/run-write-tests.rst:63 +msgid "" +"If you have a multi-core or multi-CPU machine, you can enable parallel " +"testing using several Python processes so as to speed up things::" +msgstr "" + +#: ../../testing/run-write-tests.rst:68 +msgid "" +"If you are running a version of Python prior to 3.3 you must specify the " +"number of processes to run simultaneously (e.g. ``-j2``)." +msgstr "" + +#: ../../testing/run-write-tests.rst:73 +msgid "" +"Finally, if you want to run tests under a more strenuous set of settings, " +"you can run ``test`` as::" +msgstr "" + +#: ../../testing/run-write-tests.rst:78 +msgid "" +"The various extra flags passed to Python cause it to be much stricter about " +"various things (the ``-Wd`` flag should be ``-W error`` at some point, but " +"the test suite has not reached a point where all warnings have been dealt " +"with and so we cannot guarantee that a bug-free Python will properly " +"complete a test run with ``-W error``). The ``-r`` flag to the test runner " +"causes it to run tests in a more random order which helps to check that the " +"various tests do not interfere with each other. The ``-w`` flag causes " +"failing tests to be run again to see if the failures are transient or " +"consistent. The ``-uall`` flag allows the use of all available resources so " +"as to not skip tests requiring, e.g., Internet access." +msgstr "" + +#: ../../testing/run-write-tests.rst:89 +msgid "" +"To check for reference leaks (only needed if you modified C code), use the " +"``-R`` flag. For example, ``-R 3:2`` will first run the test 3 times to " +"settle down the reference count, and then run it 2 more times to verify if " +"there are any leaks." +msgstr "" + +#: ../../testing/run-write-tests.rst:94 +msgid "" +"You can also execute the ``Tools/scripts/run_tests.py`` script as found in " +"a CPython checkout. The script tries to balance speed with thoroughness. But " +"if you want the most thorough tests you should use the strenuous approach " +"shown above." +msgstr "" + +#: ../../testing/run-write-tests.rst:101 +msgid "Unexpected Skips" +msgstr "" + +#: ../../testing/run-write-tests.rst:103 +msgid "" +"Sometimes when running the test suite, you will see \"unexpected skips\" " +"reported. These represent cases where an entire test module has been " +"skipped, but the test suite normally expects the tests in that module to be " +"executed on that platform." +msgstr "" + +#: ../../testing/run-write-tests.rst:108 +msgid "" +"Often, the cause is that an optional module hasn't been built due to missing " +"build dependencies. In these cases, the missing module reported when the " +"test is skipped should match one of the modules reported as failing to build " +"when :ref:`compiling`." +msgstr "" + +#: ../../testing/run-write-tests.rst:113 +msgid "" +"In other cases, the skip message should provide enough detail to help figure " +"out and resolve the cause of the problem (for example, the default security " +"settings on some platforms will disallow some tests)" +msgstr "" + +#: ../../testing/run-write-tests.rst:119 +msgid "Writing" +msgstr "" + +#: ../../testing/run-write-tests.rst:121 +msgid "" +"Writing tests for Python is much like writing tests for your own code. Tests " +"need to be thorough, fast, isolated, consistently repeatable, and as simple " +"as possible. We try to have tests both for normal behaviour and for error " +"conditions. Tests live in the ``Lib/test`` directory, where every file that " +"includes tests has a ``test_`` prefix." +msgstr "" + +#: ../../testing/run-write-tests.rst:127 +msgid "" +"One difference with ordinary testing is that you are encouraged to rely on " +"the :py:mod:`test.support` module. It contains various helpers that are " +"tailored to Python's test suite and help smooth out common problems such as " +"platform differences, resource consumption and cleanup, or warnings " +"management. That module is not suitable for use outside of the standard " +"library." +msgstr "" + +#: ../../testing/run-write-tests.rst:133 +msgid "" +"When you are adding tests to an existing test file, it is also recommended " +"that you study the other tests in that file; it will teach you which " +"precautions you have to take to make your tests robust and portable." +msgstr "" + +#: ../../testing/run-write-tests.rst:137 +msgid "For tests of the C API, see Tests sections in :ref:`c-api`." +msgstr "" + +#: ../../testing/run-write-tests.rst:141 +msgid "Benchmarks" +msgstr "" + +#: ../../testing/run-write-tests.rst:143 +msgid "" +"Benchmarking is useful to test that a change does not degrade performance." +msgstr "" + +#: ../../testing/run-write-tests.rst:145 +msgid "" +"`The Python Benchmark Suite `_ has " +"a collection of benchmarks for all Python implementations. Documentation " +"about running the benchmarks is in the `README.txt `_ of the repo." +msgstr "" + +#: ../../testing/silence-warnings.rst:6 +msgid "Silence Warnings From the Test Suite" +msgstr "" + +#: ../../testing/silence-warnings.rst:8 +msgid "" +"When running Python's test suite, no warnings should result when you run it " +"under :ref:`strenuous testing conditions ` (you can " +"ignore the extra flags passed to ``test`` that cause randomness and parallel " +"execution if you want). Unfortunately new warnings are added to Python on " +"occasion which take some time to eliminate (e.g., ``ResourceWarning``). " +"Typically the easy warnings are dealt with quickly, but the more difficult " +"ones that require some thought and work do not get fixed immediately." +msgstr "" + +#: ../../testing/silence-warnings.rst:16 +msgid "" +"If you decide to tackle a warning you have found, open an issue on the " +"`issue tracker`_ (if one has not already been opened) and say you are going " +"to try and tackle the issue, and then proceed to fix the issue." +msgstr "" + +#: ../../triage/github-bpo-faq.rst:6 +msgid "GitHub Issues for BPO Users" +msgstr "" + +#: ../../triage/github-bpo-faq.rst:8 +msgid "" +"Here are some frequently asked questions about how to do things in GitHub " +"issues that you used to be able to do on `bpo`_." +msgstr "" + +#: ../../triage/github-bpo-faq.rst:11 +msgid "" +"Before you ask your own question, make sure you read :ref:`tracker` and :ref:" +"`triaging` (specifically including :ref:`gh-labels`) as those pages include " +"a lot of introductory material." +msgstr "" + +#: ../../triage/github-bpo-faq.rst:16 +msgid "How to format my comments nicely?" +msgstr "" + +#: ../../triage/github-bpo-faq.rst:18 +msgid "" +"There is a wonderful `beginner guide to writing and formatting on GitHub " +"`_. Highly recommended." +msgstr "" + +#: ../../triage/github-bpo-faq.rst:22 +msgid "" +"One pro-tip we can sell you right here is that if you want to paste some " +"longer log as a comment, attach a file instead (see how below). If you still " +"insist on pasting it in your comment, do it like this::" +msgstr "" + +#: ../../triage/github-bpo-faq.rst:34 +msgid "How to attach files to an issue?" +msgstr "" + +#: ../../triage/github-bpo-faq.rst:36 +msgid "" +"Drag them into the comment field, wait until the file uploads, and GitHub " +"will automatically put a link to your file in your comment text." +msgstr "" + +#: ../../triage/github-bpo-faq.rst:40 +msgid "How to link to file paths in the repository when writing comments?" +msgstr "" + +#: ../../triage/github-bpo-faq.rst:42 +msgid "" +"Use Markdown links. If you link to the default GitHub path, the file will " +"link to the latest current version on the given branch." +msgstr "" + +#: ../../triage/github-bpo-faq.rst:45 +msgid "" +"You can get a permanent link to a given revision of a given file by " +"`pressing \"y\" `_." +msgstr "" + +#: ../../triage/github-bpo-faq.rst:49 +msgid "How to do advanced searches?" +msgstr "" + +#: ../../triage/github-bpo-faq.rst:51 +msgid "" +"Use the `GitHub search syntax`_ or the interactive `advanced search`_ form " +"that generates search queries for you." +msgstr "" + +#: ../../triage/github-bpo-faq.rst:55 +msgid "Where is the \"nosy list\"?" +msgstr "" + +#: ../../triage/github-bpo-faq.rst:57 +msgid "" +"Subscribe another person to the issue by tagging them in the comment with " +"``@username``." +msgstr "" + +#: ../../triage/github-bpo-faq.rst:60 +msgid "" +"If you want to subscribe yourself to an issue, click the *🔔 Subscribe* " +"button in the sidebar." +msgstr "" + +#: ../../triage/github-bpo-faq.rst:63 +msgid "" +"Similarly, if you were tagged by somebody else but decided this issue is not " +"for you, you might click the *🔕 Unsubscribe* button in the sidebar." +msgstr "" + +#: ../../triage/github-bpo-faq.rst:67 +msgid "" +"There is no exact equivalent of the \"nosy list\" feature, so to preserve " +"this information during the transfer, we list the previous members of this " +"list in the first message on the migrated issue." +msgstr "" + +#: ../../triage/github-bpo-faq.rst:72 +msgid "How to add issue dependencies?" +msgstr "" + +#: ../../triage/github-bpo-faq.rst:74 +msgid "Add a checkbox list like this in the issue description::" +msgstr "" + +#: ../../triage/github-bpo-faq.rst:80 +msgid "" +"then those will become sub-tasks on the given issue. Moreover, GitHub will " +"automatically mark a task as complete if the other referenced issue is " +"closed. More details in the `official GitHub documentation `_." +msgstr "" + +#: ../../triage/github-bpo-faq.rst:86 +msgid "What on Earth is a \"mannequin\"?" +msgstr "" + +#: ../../triage/github-bpo-faq.rst:88 +msgid "" +"For issues migrated to GitHub from `bpo`_ where the authors or commenters " +"are not core developers, we opted not to link to their GitHub accounts " +"directly. Users not in the `python organization on GitHub `_ might not like comments to appear under their name " +"from an automated import. Others never linked GitHub on `bpo`_ in the first " +"place so linking their account, if any, would be impossible." +msgstr "" + +#: ../../triage/github-bpo-faq.rst:95 +msgid "" +"In those cases a \"mannequin\" account is present to help follow the " +"conversation that happened in the issue. In case the user did share their " +"GitHub account name in their `bpo`_ profile, we use that. Otherwise, their " +"classic `bpo`_ username is used instead." +msgstr "" + +#: ../../triage/github-bpo-faq.rst:101 +msgid "Where did the \"Resolution\" field go?" +msgstr "" + +#: ../../triage/github-bpo-faq.rst:103 +msgid "Based on historical data we found it not being used very often." +msgstr "" + +#: ../../triage/github-bpo-faq.rst:106 +msgid "Where did the \"Low\", \"High\", and \"Critical\" priorities go?" +msgstr "" + +#: ../../triage/github-bpo-faq.rst:108 +msgid "Based on historical data we found those not being used very often." +msgstr "" + +#: ../../triage/github-bpo-faq.rst:111 +msgid "How to find a random issue?" +msgstr "" + +#: ../../triage/github-bpo-faq.rst:113 +msgid "This is not supported by GitHub." +msgstr "" + +#: ../../triage/github-bpo-faq.rst:116 +msgid "Where are regression labels?" +msgstr "" + +#: ../../triage/github-bpo-faq.rst:118 +msgid "" +"We rarely updated this information and it turned out not to be particularly " +"useful outside of the change log." +msgstr "" + +#: ../../triage/index.rst:3 +msgid "Issues and Triaging" +msgstr "Relatórios de problemas e triagem" + +#: ../../triage/issue-tracker.rst:6 +msgid "Issue Tracker" +msgstr "" + +#: ../../triage/issue-tracker.rst:10 +msgid "Using the Issue Tracker" +msgstr "" + +#: ../../triage/issue-tracker.rst:12 +msgid "" +"If you think you have found a bug in Python, you can report it to the `issue " +"tracker`_. The `issue tracker`_ is now hosted on GitHub, alongside the " +"codebase and pull requests. Documentation bugs can also be reported there." +msgstr "" + +#: ../../triage/issue-tracker.rst:16 +msgid "" +"If you would like to file an issue about this devguide, please do so at the " +"`devguide repo`_." +msgstr "" + +#: ../../triage/issue-tracker.rst:20 +msgid "" +"Python used to use a dedicated `Roundup`_ instance as its issue tracker. " +"That old bug tracker was hosted under the domain ``bugs.python.org`` " +"(sometimes called ``bpo`` for short). Currently a read-only version is still " +"available on that domain for historical purposes. All ``bpo`` data has been " +"migrated to the current `issue tracker`_ on GitHub." +msgstr "" + +#: ../../triage/issue-tracker.rst:26 +msgid "" +"If you're familiar with ``bpo`` and would like to learn more about GitHub " +"issues, please read this page, and the :ref:`triaging` page as they provide " +"good introductory material. There is also a :ref:`gh-faq` document to answer " +"some of the more popular questions." +msgstr "" + +#: ../../triage/issue-tracker.rst:32 +msgid "Checking if a bug already exists" +msgstr "" + +#: ../../triage/issue-tracker.rst:34 +msgid "" +"The first step before filing an issue report is to see whether the problem " +"has already been reported. Checking if the problem is an existing issue " +"will:" +msgstr "" + +#: ../../triage/issue-tracker.rst:37 +msgid "" +"help you see if the problem has already been resolved or has been fixed for " +"the next release" +msgstr "" + +#: ../../triage/issue-tracker.rst:39 +msgid "save time for you and the developers" +msgstr "" + +#: ../../triage/issue-tracker.rst:40 +msgid "help you learn what needs to be done to fix it" +msgstr "" + +#: ../../triage/issue-tracker.rst:41 +msgid "" +"determine if additional information, such as how to replicate the issue, is " +"needed" +msgstr "" + +#: ../../triage/issue-tracker.rst:44 +msgid "" +"To see if an issue already exists, search the bug database using the search " +"box above the list of bugs on the issues page. A form-based `advanced " +"search`_ query builder is also available on GitHub to help creating the text " +"query you need." +msgstr "" + +#: ../../triage/issue-tracker.rst:49 +msgid "Reporting an issue" +msgstr "" + +#: ../../triage/issue-tracker.rst:51 +msgid "" +"If the problem you're reporting is not already in the `issue tracker`_, you " +"can report it using the green \"New issue\" button on the right of the " +"search box above the list of bugs. If you're not already signed in to " +"GitHub, it will ask you to do so now." +msgstr "" + +#: ../../triage/issue-tracker.rst:56 +msgid "" +"First you need to select what kind of problem you want to report. The " +"available choices are:" +msgstr "" + +#: ../../triage/issue-tracker.rst:59 +msgid "**Bug report**: an existing feature isn't working as expected;" +msgstr "" + +#: ../../triage/issue-tracker.rst:60 +msgid "" +"**Documentation**: there is missing, invalid, or misleading documentation;" +msgstr "" + +#: ../../triage/issue-tracker.rst:61 +msgid "**Enhancement**: suggest a new feature for Python;" +msgstr "" + +#: ../../triage/issue-tracker.rst:62 +msgid "**Performance**: something should work faster;" +msgstr "" + +#: ../../triage/issue-tracker.rst:63 +msgid "" +"**Security**: there is a specific kind of weakness open to exploitation " +"through the points of vulnerability;" +msgstr "" + +#: ../../triage/issue-tracker.rst:65 +msgid "**Tests**: something is wrong with CPython's suite of regression tests;" +msgstr "" + +#: ../../triage/issue-tracker.rst:66 +msgid "" +"**Discuss**: you'd like to learn more about Python, discuss ideas for " +"possible changes to future Python versions, track core development " +"discussions, or join a specific special-interest group." +msgstr "" + +#: ../../triage/issue-tracker.rst:70 +msgid "" +"Depending on your choice, a dedicated form template will appear. In " +"particular, you'll notice that the last button actually takes you to the " +"`Python Discourse`_ (``discuss.python.org``), where many Python-related " +"discussions take place." +msgstr "" + +#: ../../triage/issue-tracker.rst:75 +msgid "The submission form has only two fields that you need to fill:" +msgstr "" + +#: ../../triage/issue-tracker.rst:77 +msgid "" +"in the **Title** field, enter a *very* short description of the problem; " +"less than ten words is good;" +msgstr "" + +#: ../../triage/issue-tracker.rst:79 +msgid "" +"in the **Write** field, describe the problem in detail using hints from the " +"template that was put in that field for you. Be sure to include what you " +"expected to happen, what did happen, and how to replicate the problem. Be " +"sure to include whether any extension modules were involved, and what " +"hardware and software platform you were using (including version information " +"as appropriate). In particular, *what version of Python* you were using." +msgstr "" + +#: ../../triage/issue-tracker.rst:88 +msgid "Understanding the issue's progress and status" +msgstr "" + +#: ../../triage/issue-tracker.rst:90 +msgid "" +"There is a number of additional fields like **Assignees**, **Labels**, " +"**Projects**, and **Milestone**. Those are filled by triagers and core " +"developers, this is covered in the :ref:`triaging` page. You don't need to " +"worry about those when reporting issues as a Python user." +msgstr "" + +#: ../../triage/issue-tracker.rst:95 +msgid "" +"You will automatically receive an update each time an action is taken on the " +"bug, unless you changed your GitHub notification settings." +msgstr "" + +#: ../../triage/issue-tracker.rst:100 +msgid "Disagreement With a Resolution on the Issue Tracker" +msgstr "" + +#: ../../triage/issue-tracker.rst:102 +msgid "" +"As humans, we will have differences of opinions from time to time. First and " +"foremost, please be respectful that care, thought, and volunteer time went " +"into the resolution." +msgstr "" + +#: ../../triage/issue-tracker.rst:106 +msgid "" +"With this in mind, take some time to consider any comments made in " +"association with the resolution of the issue. On reflection, the resolution " +"steps may seem more reasonable than you initially thought." +msgstr "" + +#: ../../triage/issue-tracker.rst:110 +msgid "" +"If you still feel the resolution is incorrect, then raise a thoughtful " +"question on the `Core Development Discourse category`_. Further argument and " +"disrespectful responses after a consensus has been reached amongst the core " +"developers is unlikely to win any converts." +msgstr "" + +#: ../../triage/issue-tracker.rst:116 +msgid "" +"As a reminder, issues closed by a core developer have already been carefully " +"considered. Please do not reopen a closed issue. An issue can be closed with " +"reason either as ``complete`` or ``not planned``." +msgstr "" + +#: ../../triage/issue-tracker.rst:122 +msgid "`The Python issue tracker `_" +msgstr "" + +#: ../../triage/issue-tracker.rst:123 +msgid "Where to report issues about Python." +msgstr "" + +#: ../../triage/labels.rst:6 +msgid "GitHub Labels" +msgstr "" + +#: ../../triage/labels.rst:8 +msgid "" +"We're using labels on GitHub to categorize issues and pull requests. Many " +"labels are shared for both use cases, while some are dedicated only to one. " +"Below is a possibly inexhaustive list, but it should get you going. For a " +"full list, see `here `_." +msgstr "" + +#: ../../triage/labels.rst:14 +msgid "General purpose labels" +msgstr "" + +#: ../../triage/labels.rst:19 +msgid ":gh-label:`type-behavior`" +msgstr "" + +#: ../../triage/labels.rst:17 +msgid "" +"Used for issues/PRs that address unintentional behavior, but do not pose " +"significant security concerns. Generally, bugfixes will be attached to a " +"specific issue where the unintended behavior was first reported." +msgstr "" + +#: ../../triage/labels.rst:24 +msgid ":gh-label:`type-documentation`" +msgstr "" + +#: ../../triage/labels.rst:22 +msgid "" +"Used for issues/PRs that exclusively involve changes to the documentation. " +"Documentation includes ``*.rst`` files, docstrings, and code comments." +msgstr "" + +#: ../../triage/labels.rst:28 +msgid ":gh-label:`type-enhancement`" +msgstr "" + +#: ../../triage/labels.rst:27 +msgid "" +"Used for issues/PRs that provide additional functionality or capabilities " +"beyond the existing specifications." +msgstr "" + +#: ../../triage/labels.rst:31 +msgid ":gh-label:`type-performance`" +msgstr "" + +#: ../../triage/labels.rst:31 +msgid "Used for issues/PRs that provide performance optimizations." +msgstr "" + +#: ../../triage/labels.rst:35 +msgid ":gh-label:`type-security`" +msgstr "" + +#: ../../triage/labels.rst:34 +msgid "" +"Used for issues/PRs that involve critical security issues. Less severe " +"security concerns can instead use the type-bugfix label." +msgstr "" + +#: ../../triage/labels.rst:38 +msgid ":gh-label:`type-tests`" +msgstr "" + +#: ../../triage/labels.rst:38 +msgid "Used for issues/PRs that exclusively involve changes to the tests." +msgstr "" + +#: ../../triage/labels.rst:42 +msgid ":gh-label:`OS-Mac` / :gh-label:`OS-Windows`" +msgstr "" + +#: ../../triage/labels.rst:41 +msgid "" +"Used for issues/PRs involving changes which only have an effect upon a " +"specific operating system." +msgstr "" + +#: ../../triage/labels.rst:45 +msgid ":gh-label:`spam`" +msgstr "" + +#: ../../triage/labels.rst:45 +msgid "Used for issues/PRs that don't include enough eggs or bacon." +msgstr "" + +#: ../../triage/labels.rst:48 +msgid "Labels specific to issues" +msgstr "" + +#: ../../triage/labels.rst:51 ../../triage/labels.rst:282 +#: ../../triage/labels.rst:286 +msgid "Priority" +msgstr "" + +#: ../../triage/labels.rst:55 +msgid ":gh-label:`release-blocker`" +msgstr "" + +#: ../../triage/labels.rst:54 +msgid "" +"The highest priority of an issue. If unaddressed, will cause the release " +"manager to hold releasing a new version of Python." +msgstr "" + +#: ../../triage/labels.rst:61 +msgid ":gh-label:`deferred-blocker`" +msgstr "" + +#: ../../triage/labels.rst:58 +msgid "" +"A release blocker that was pushed one or more releases into the future. " +"Possibly a temporary workaround was employed, or the version of Python the " +"issue is affecting is still in alpha or beta stages of development." +msgstr "" + +#: ../../triage/labels.rst:64 ../../triage/labels.rst:253 +msgid "Component" +msgstr "" + +#: ../../triage/labels.rst:67 +msgid ":gh-label:`library`" +msgstr "" + +#: ../../triage/labels.rst:67 +msgid "Used for issues involving Python modules in the ``Lib/`` dir." +msgstr "" + +#: ../../triage/labels.rst:70 +msgid ":gh-label:`docs`" +msgstr "" + +#: ../../triage/labels.rst:70 +msgid "Used for issues involving documentation in the ``Doc/`` dir." +msgstr "" + +#: ../../triage/labels.rst:74 +msgid ":gh-label:`interpreter-core`" +msgstr "" + +#: ../../triage/labels.rst:73 +msgid "" +"Used for issues in interpreter core (``Objects/``, ``Python/``, ``Grammar/" +"``, and ``Parser/`` dirs)." +msgstr "" + +#: ../../triage/labels.rst:77 +msgid ":gh-label:`extension-modules`" +msgstr "" + +#: ../../triage/labels.rst:77 +msgid "Used for issues involving C modules in the ``Modules/`` dir." +msgstr "" + +#: ../../triage/labels.rst:81 +msgid ":gh-label:`tests`" +msgstr "" + +#: ../../triage/labels.rst:80 +msgid "" +"Used for issues involving only Python's regression test suite, i.e. files in " +"the ``Lib/test/`` dir." +msgstr "" + +#: ../../triage/labels.rst:84 +msgid "Other" +msgstr "" + +#: ../../triage/labels.rst:88 +msgid ":gh-label:`new`" +msgstr "" + +#: ../../triage/labels.rst:87 +msgid "" +"Denotes that the issue hasn't been looked at by triagers or core developers " +"yet." +msgstr "" + +#: ../../triage/labels.rst:92 +msgid ":gh-label:`easy`" +msgstr "" + +#: ../../triage/labels.rst:91 +msgid "Denotes that the issue is a good candidate for a newcomer to address." +msgstr "" + +#: ../../triage/labels.rst:95 +msgid "Labels specific to PRs" +msgstr "" + +#: ../../triage/labels.rst:100 +msgid ":gh-label:`DO-NOT-MERGE`" +msgstr "" + +#: ../../triage/labels.rst:98 +msgid "" +"Used on PRs to prevent miss-islington from being able to automatically merge " +"the pull request. This label is appropriate when a PR has a non-trivial " +"conflict with the branch it is being merged into." +msgstr "" + +#: ../../triage/labels.rst:104 +msgid ":gh-label:`expert-asyncio`" +msgstr "" + +#: ../../triage/labels.rst:103 +msgid "" +"Used for PRs which involve changes to the asyncio module or other " +"asynchronous frameworks that utilize it." +msgstr "" + +#: ../../triage/labels.rst:111 +msgid ":gh-label:`invalid`" +msgstr "" + +#: ../../triage/labels.rst:107 +msgid "" +"Used manually for PRs that do not meet basic requirements and automatically " +"added by bedevere when PR authors attempt to merge maintenance branches into " +"the main branch. During events such as the October Hacktoberfest, this label " +"will prevent the PR from counting toward the author's contributions." +msgstr "" + +#: ../../triage/labels.rst:121 +msgid "needs backport to X.Y" +msgstr "" + +#: ../../triage/labels.rst:114 +msgid "" +"For example, :gh-label:`needs backport to 3.11`. Used for PRs which are " +"appropriate to backport to branches prior to main. Generally, backports to " +"the maintenance branches are primarily bugfixes and documentation " +"clarifications. Backports to the security branches are strictly reserved for " +"PRs involving security fixes, such as crashes, privilege escalation, and " +"DoS. The use of this label will cause miss-islington to attempt to " +"automatically merge the PR into the branches specified." +msgstr "" + +#: ../../triage/labels.rst:128 +msgid ":gh-label:`skip issue`" +msgstr "" + +#: ../../triage/labels.rst:124 +msgid "" +"Used for PRs which involve trivial changes, such as typo fixes, comment " +"changes, and section rephrases. The majority of PRs require an issue to be " +"attached to, but if there are no code changes and the section being modified " +"retains the same meaning, this label might be appropriate." +msgstr "" + +#: ../../triage/labels.rst:135 +msgid ":gh-label:`skip news`" +msgstr "" + +#: ../../triage/labels.rst:131 +msgid "" +"Similar to the skip issue label, this label is used for PRs which involve " +"trivial changes, backports, or already have a relevant news entry in another " +"PR. Any potentially impactful changes should have a corresponding news " +"entry, but for trivial changes it's commonly at the discretion of the PR " +"author if they wish to opt-out of making one." +msgstr "" + +#: ../../triage/labels.rst:140 +msgid ":gh-label:`sprint`" +msgstr "" + +#: ../../triage/labels.rst:138 +msgid "" +"Used for PRs authored during an in-person sprint, such as at PyCon, " +"EuroPython, or other official Python events. The label is used to prioritize " +"the review of those PRs during the sprint." +msgstr "" + +#: ../../triage/labels.rst:147 +msgid ":gh-label:`stale`" +msgstr "" + +#: ../../triage/labels.rst:143 +msgid "" +"Used for PRs that include changes which are no longer relevant, or when the " +"author hasn't responded to feedback in a long period of time, or when the " +"reviewer is unresponsive. This label helps core developers quickly identify " +"PRs that are candidates for closure or require a ping to the author or " +"reviewer." +msgstr "" + +#: ../../triage/labels.rst:150 +msgid ":gh-label:`awaiting review`" +msgstr "" + +#: ../../triage/labels.rst:150 +msgid "Used for PRs that haven't been reviewed by anyone yet." +msgstr "" + +#: ../../triage/labels.rst:158 +msgid ":gh-label:`awaiting core review`" +msgstr "" + +#: ../../triage/labels.rst:153 +msgid "" +"Used when the PR is authored by a core developer or when a non-core " +"developer has reviewed the PR, even if they requested changes. Note that " +"reviewers could have been added manually by a triager or core developer, or " +"included automatically through use of the `CODEOWNERS `_ file." +msgstr "" + +#: ../../triage/labels.rst:161 +msgid ":gh-label:`awaiting changes`" +msgstr "" + +#: ../../triage/labels.rst:161 +msgid "A reviewer required changes to proceed with the PR." +msgstr "" + +#: ../../triage/labels.rst:164 +msgid ":gh-label:`awaiting change review`" +msgstr "" + +#: ../../triage/labels.rst:164 +msgid "The PR author made requested changes, and they are waiting for review." +msgstr "" + +#: ../../triage/labels.rst:167 +msgid ":gh-label:`awaiting merge`" +msgstr "" + +#: ../../triage/labels.rst:167 +msgid "The PR has been approved by a core developer and is ready to merge." +msgstr "" + +#: ../../triage/labels.rst:174 +msgid ":gh-label:`test-with-buildbots`" +msgstr "" + +#: ../../triage/labels.rst:170 +msgid "" +"Used on PRs to test the latest commit with the buildbot fleet. Generally for " +"PRs with large code changes requiring more testing before merging. This may " +"take multiple hours to complete. Triagers can also stop a stuck build using " +"the web interface." +msgstr "" + +#: ../../triage/labels.rst:179 +msgid "GitHub Labels for PRs" +msgstr "" + +#: ../../triage/labels.rst:181 +msgid "" +"An important component of triaging PRs for the CPython repo involves " +"appropriately categorizing them through the usage of labels. For this " +"purpose we're using :ref:`gh-labels`." +msgstr "" + +#: ../../triage/labels.rst:186 +msgid "Applying labels for Issues" +msgstr "" + +#: ../../triage/labels.rst:188 +msgid "The major elements found in an issue report include:" +msgstr "" + +#: ../../triage/labels.rst:190 +msgid "" +"Classification (including *Title*) - Metadata that lets us categorize the " +"issue. Apart from the *Title* field, we use some *type-*, *component-*, and " +"*version-* specific labels." +msgstr "" + +#: ../../triage/labels.rst:193 +msgid "" +"Process - These fields indicate the state of the issue and its progress " +"toward resolution. The fields are *Status* (open/closed), *Assignees*, " +"*Comment*, as well as *priority-* and *keyword-* specific labels." +msgstr "" + +#: ../../triage/labels.rst:196 +msgid "Messages" +msgstr "" + +#: ../../triage/labels.rst:197 +msgid "History" +msgstr "" + +#: ../../triage/labels.rst:201 +msgid "" +"A brief description of the issue. Review whether the title is too generic or " +"specifies an incorrect term or library." +msgstr "" + +#: ../../triage/labels.rst:204 +msgid "" +"(Optional) Add a prefix at the start of the title to indicate the module, e." +"g. IDLE, doc, or asyncio." +msgstr "" + +#: ../../triage/labels.rst:208 ../../triage/labels.rst:213 +msgid "Type" +msgstr "" + +#: ../../triage/labels.rst:209 +msgid "" +"Describes the type of issue. If an issue does not fit within any specific " +"type, please do not set a type." +msgstr "" + +#: ../../triage/labels.rst:215 +msgid "behavior" +msgstr "" + +#: ../../triage/labels.rst:215 +msgid "" +"Unexpected behavior, result, or exception. Most bugs will have this type. " +"This group also includes compile errors, and crashers." +msgstr "" + +#: ../../triage/labels.rst:219 +msgid "enhancement" +msgstr "" + +#: ../../triage/labels.rst:219 +msgid "" +"Issues that propose the addition of new functionality, such as new " +"functions, classes, modules, or even new arguments for existing functions. " +"Also used for improvements in the documentation, test suite and other " +"refactorings. A good place to discuss enhancements prior to filing an issue " +"is the `Ideas Discourse category`_." +msgstr "" + +#: ../../triage/labels.rst:227 +msgid "" +"Situations where too much time is necessary to complete the task. For " +"example, a common task now takes significantly longer to complete. This " +"group also includes resource usage (e.g. too much memory needed) issues." +msgstr "" + +#: ../../include/branches.csv:1 ../../triage/labels.rst:233 ../../versions.rst +msgid "security" +msgstr "security" + +#: ../../triage/labels.rst:233 +msgid "" +"Issues that might have security implications. Report security " +"vulnerabilities using the procedure found in the `Reporting security issues " +"in Python`_ page on the python.org website." +msgstr "" + +#: ../../triage/labels.rst:240 +msgid "Stage" +msgstr "" + +#: ../../triage/labels.rst:241 +msgid "" +"A needed next action to advance the issue. The *stage* on GitHub issues is " +"determined by presence of a linked PR and whether the issue is still open or " +"closed. It is the PR that holds code review-related labels." +msgstr "" + +#: ../../triage/labels.rst:246 +msgid "Components" +msgstr "" + +#: ../../triage/labels.rst:247 +msgid "" +"The area or Python library affected by the issue. A single issue can apply " +"multiple component labels." +msgstr "" + +#: ../../triage/labels.rst:250 +msgid "One or more components may be selected for an issue:" +msgstr "" + +#: ../../triage/labels.rst:255 +msgid "" +"The documentation in Doc_ (source used to build HTML docs for https://docs." +"python.org/)." +msgstr "" + +#: ../../triage/labels.rst:258 +msgid "Extension Modules" +msgstr "" + +#: ../../triage/labels.rst:258 +msgid "C modules in Modules_." +msgstr "" + +#: ../../triage/labels.rst:260 +msgid "Interpreter Core" +msgstr "" + +#: ../../triage/labels.rst:260 +msgid "" +"The interpreter core. The built-in objects in `Objects`_, the `Python`_, " +"`Grammar`_ and `Parser`_ dirs." +msgstr "" + +#: ../../triage/labels.rst:264 +msgid "Library (Lib)" +msgstr "" + +#: ../../triage/labels.rst:264 +msgid "Python modules in Lib_." +msgstr "" + +#: ../../triage/labels.rst:266 +msgid "Tests" +msgstr "" + +#: ../../triage/labels.rst:266 +msgid "" +"The unittest framework in `Lib/unittest`_ The doctest framework `Lib/doctest." +"py`_. The CPython tests in `Lib/test`_. The test runner in `Lib/test/" +"regrtest.py`_. The test support utilities in `Lib/test/support`_." +msgstr "" + +#: ../../triage/labels.rst:274 +msgid "Versions" +msgstr "" + +#: ../../triage/labels.rst:275 +msgid "" +"The known versions of Python that the issue affects and should be fixed for." +msgstr "" + +#: ../../triage/labels.rst:277 +msgid "" +"Thus if an issue for a new feature is assigned for e.g., Python 3.8 but is " +"not applied before Python 3.8.0 is released, this label should be updated to " +"say ``python-3.9`` as the version and drop ``python-3.8``." +msgstr "" + +#: ../../triage/labels.rst:283 +msgid "What is the severity and urgency?" +msgstr "" + +#: ../../triage/labels.rst:288 +msgid "normal" +msgstr "" + +#: ../../triage/labels.rst:288 +msgid "The default value for most issues filed." +msgstr "" + +#: ../../triage/labels.rst:290 +msgid "deferred blocker" +msgstr "" + +#: ../../triage/labels.rst:290 +msgid "" +"The issue will not hold up the next release, *n*. It will be promoted to a " +"*release blocker* for the following release, *n+1*." +msgstr "" + +#: ../../triage/labels.rst:294 +msgid "release blocker" +msgstr "" + +#: ../../triage/labels.rst:294 +msgid "" +"The issue **must** be fixed before *any* release is made, e.g., will block " +"the next release even if it is an alpha release." +msgstr "" + +#: ../../triage/labels.rst:299 +msgid "" +"As a guideline, whether a bug is a *release blocker* for the current :ref:" +"`release schedule ` is decided by the release manager. " +"Triagers may recommend this priority and should notify the release manager " +"by tagging them in a comment using ``@username``. If needed, consult the :" +"ref:`release schedule ` and the release's associated PEP for " +"the release manager's name." +msgstr "" + +#: ../../triage/labels.rst:307 +msgid "Keywords" +msgstr "" + +#: ../../triage/labels.rst:308 +msgid "" +"Various informational flags about the issue. Multiple values are possible." +msgstr "" + +#: ../../triage/labels.rst:311 +msgid "Keyword" +msgstr "" + +#: ../../triage/labels.rst:313 +msgid "easy" +msgstr "" + +#: ../../triage/labels.rst:313 +msgid "" +"Fixing the issue should not take longer than a day for someone new to " +"contributing to Python to solve." +msgstr "" + +#: ../../triage/labels.rst:318 +msgid "Nosy List" +msgstr "" + +#: ../../triage/labels.rst:319 +msgid "A list of people who may be interested in an issue." +msgstr "" + +#: ../../triage/labels.rst:321 +msgid "" +"This used to be a feature of the old issue tracker. On GitHub issues the " +"same effect is achieved by tagging people in a comment using ``@username``." +msgstr "" + +#: ../../triage/labels.rst:324 +msgid "" +"It is acceptable to tag someone to if you think the issue should be brought " +"to their attention. Use the :ref:`experts` to know who wants to be added to " +"the nosy list for issues targeting specific areas." +msgstr "" + +#: ../../triage/labels.rst:328 +msgid "" +"If you want to subscribe yourself to an issue, click the *🔔 Subscribe* " +"button in the sidebar. Similarly, if you were tagged by somebody else but " +"decided this issue is not for you, you might click the *🔕 Unsubscribe* " +"button in the sidebar." +msgstr "" + +#: ../../triage/labels.rst:334 +msgid "Assignees" +msgstr "" + +#: ../../triage/labels.rst:335 +msgid "Who is expected to take the next step in resolving the issue." +msgstr "" + +#: ../../triage/labels.rst:337 +msgid "" +"It is acceptable to assign an issue to someone if the issue cannot move " +"forward without their help, e.g., they need to make a technical decision to " +"allow the issue to move forward. Also consult the :ref:`experts` as certain " +"stdlib modules should always be assigned to a specific person." +msgstr "" + +#: ../../triage/labels.rst:342 +msgid "" +"Note that in order to assign an issue to someone, that person **must** be a " +"team member, likely a Triager or a core developer." +msgstr "" + +#: ../../triage/labels.rst:346 +msgid "Dependencies" +msgstr "" + +#: ../../triage/labels.rst:347 +msgid "" +"The issue requires the listed issue(s) to be resolved first before it can " +"move forward. This is achieved using checkbox lists in the initial issue " +"description comment. Long story short, if you add this::" +msgstr "" + +#: ../../triage/labels.rst:355 +msgid "" +"then those will become sub-tasks on the given issue. Moreover, GitHub will " +"automatically mark a task as complete if the other referenced issue is " +"closed." +msgstr "" + +#: ../../triage/labels.rst:359 +msgid "" +"More details in the `official GitHub documentation `_." +msgstr "" + +#: ../../triage/labels.rst:363 +msgid "Superseder" +msgstr "" + +#: ../../triage/labels.rst:364 +msgid "" +"The issue is a duplicate of the listed issue(s). To make GitHub mark an " +"issue as duplicate, write \"Duplicate of #xxxx\" in a comment." +msgstr "" + +#: ../../include/branches.csv:1 ../../include/end-of-life.csv:1 +#: ../../triage/labels.rst:368 ../../triage/labels.rst:371 +msgid "Status" +msgstr "Status" + +#: ../../triage/labels.rst:373 +msgid "open" +msgstr "" + +#: ../../triage/labels.rst:373 +msgid "Issue is not resolved." +msgstr "" + +#: ../../triage/labels.rst:375 +msgid "closed" +msgstr "" + +#: ../../triage/labels.rst:375 +msgid "The issue has been resolved (somehow)." +msgstr "" + +#: ../../triage/labels.rst:379 +msgid "Linked pull requests" +msgstr "" + +#: ../../triage/labels.rst:380 +msgid "" +"A link might be added manually using the cog icon next to this field. Most " +"commonly though, if the PR includes \"Fixes #xxx\" in its description, the " +"link will be added automatically." +msgstr "" + +#: ../../triage/labels.rst:385 +msgid "Generating Special Links in a Comment" +msgstr "" + +#: ../../triage/labels.rst:386 +msgid "" +"Using the following abbreviations in a comment will automatically generate a " +"link to relevant web pages." +msgstr "" + +#: ../../triage/labels.rst:390 +msgid "Comment abbreviation" +msgstr "" + +#: ../../triage/labels.rst:392 +msgid "``#``, ``GH-``" +msgstr "" + +#: ../../triage/labels.rst:392 +msgid "" +"Links to the tracker issue or PR ```` (they share the same sequence " +"of integers on GitHub)." +msgstr "" + +#: ../../triage/labels.rst:395 +msgid "``BPO-``" +msgstr "" + +#: ../../triage/labels.rst:395 +msgid "Links to the old bug tracker at bugs.python.org." +msgstr "" + +#: ../../triage/labels.rst:397 +msgid "a 10-, 11-, 12-, or 40-digit hex ````" +msgstr "" + +#: ../../triage/labels.rst:397 +msgid "" +"Indicates a Git changeset identifier and generates a link to changeset " +"```` on GitHub." +msgstr "" + +#: ../../triage/triage-team.rst:6 +msgid "Triage Team" +msgstr "" + +#: ../../triage/triage-team.rst:8 +msgid "" +"The Python triage team is a group dedicated towards improving workflow " +"efficiency through thoughtful review and triage of open issues and pull " +"requests. This helps contributors receive timely feedback and enables core " +"developers to focus on reviewed items which reduces their workload. The " +"expectations of this role expand upon the \"Triager\" role on the :ref:" +"`issue tracker `. The responsibilities listed below are primarily " +"centered around the Python GitHub repositories. This extends beyond CPython, " +"and, as needed, to other repos such as devguide and core-workflow." +msgstr "" + +#: ../../triage/triage-team.rst:17 +msgid "Responsibilities include:" +msgstr "" + +#: ../../triage/triage-team.rst:21 +msgid "PR/issue management" +msgstr "" + +#: ../../triage/triage-team.rst:20 +msgid "Reviewing PRs" +msgstr "" + +#: ../../triage/triage-team.rst:21 +msgid "Assisting contributors" +msgstr "" + +#: ../../triage/triage-team.rst:22 +msgid "Notifying appropriate core developers" +msgstr "" + +#: ../../triage/triage-team.rst:27 +msgid "Applying appropriate labels to PRs/Issues" +msgstr "" + +#: ../../triage/triage-team.rst:24 +msgid "Skip news" +msgstr "" + +#: ../../triage/triage-team.rst:25 +msgid "Skip issue" +msgstr "" + +#: ../../triage/triage-team.rst:26 +msgid "Good first issue" +msgstr "" + +#: ../../triage/triage-team.rst:27 +msgid "Other categorizations" +msgstr "" + +#: ../../triage/triage-team.rst:29 +msgid "" +"Although triagers have the power to close PRs, they should generally not do " +"so without first consulting a core developer. By having triagers and core " +"developers work together, the author receives a careful consideration of " +"their PR. This encourages future contributions, regardless of whether their " +"PR is accepted or closed." +msgstr "" + +#: ../../triage/triage-team.rst:34 +msgid "" +"Nonetheless, triagers should feel free to close a PR if they judge that the " +"chance of the PR being merged would be exceedingly low, even if substantial " +"revisions were made to the PR. This includes (but is not limited to) the " +"following:" +msgstr "" + +#: ../../triage/triage-team.rst:39 +msgid "PRs proposing solely cosmetic changes" +msgstr "" + +#: ../../triage/triage-team.rst:40 +msgid "PRs proposing changes to deprecated modules" +msgstr "" + +#: ../../triage/triage-team.rst:44 +msgid "PRs that are no longer relevant. This includes:" +msgstr "" + +#: ../../triage/triage-team.rst:42 +msgid "PRs proposing fixes for bugs that can no longer be reproduced" +msgstr "" + +#: ../../triage/triage-team.rst:43 +msgid "" +"PRs proposing changes that have been rejected by Python core developers " +"elsewhere (e.g. in an issue or a PEP rejection notice)" +msgstr "" + +#: ../../triage/triage-team.rst:46 +msgid "" +"If a triager has any doubt about whether to close a PR, they should consult " +"a core developer before taking any action." +msgstr "" + +#: ../../triage/triage-team.rst:49 +msgid "" +"Triagers can also make use of the ``invalid`` and ``stale`` labels to " +"suggest that a PR may be suitable for closure. For more information, see " +"the :ref:`GitHub PR labels ` section." +msgstr "" + +#: ../../triage/triage-team.rst:53 +msgid "" +"Note that it is of paramount importance to treat every contributor to the " +"Python project kindly and with respect. Regardless of whether they're " +"entirely new or a veteran core developer, they're actively choosing to " +"voluntarily donate their time towards the improvement of Python. As is the " +"case with any member of the Python Software Foundation, always follow the " +"`PSF Code of Conduct`_." +msgstr "" + +#: ../../triage/triage-team.rst:63 +msgid "Becoming a member of the Python triage team" +msgstr "" + +#: ../../triage/triage-team.rst:65 +msgid "" +"All Python core developers are welcome to invite a Python contributor to the " +"Python triage team. Triagers will be responsible to handle not just issues, " +"but also pull requests, and even managing backports. A Python triager has " +"access to more repositories than just CPython." +msgstr "" + +#: ../../triage/triage-team.rst:70 +msgid "" +"When you have consistently shown the ability to properly help triage issues " +"without guidance, you may request that you be given the \"Triager\" role on " +"the :ref:`issue tracker `. You can make the request to any core " +"developer. If they decide you are ready to gain the extra privileges on the " +"tracker they will then act as a mentor to you until you are ready to do " +"things entirely on your own. There is no set rule as to how many issues you " +"need to have helped with before or how long you have been participating. The " +"key requirements are that you show the desire to help, you are able to work " +"well with others (especially those already with the Triager role), and that " +"have a firm grasp of how to do things on the issue tracker properly on your " +"own." +msgstr "" + +#: ../../triage/triage-team.rst:82 +msgid "" +"Gaining the Triager role will allow you to set any value on any issue in the " +"tracker, releasing you from the burden of having to ask others to set values " +"on an issue for you in order to properly triage something. This will not " +"only help speed up and simplify your work in helping out, but also help " +"lessen the workload for everyone by gaining your help." +msgstr "" + +#: ../../triage/triage-team.rst:88 +msgid "" +"Any existing active contributor to the Python repository on GitHub can " +"transition into becoming a Python triager. They can request this to any core " +"developer, either confidentially via a DM in Discourse, or publicly by " +"opening an `issue in the core-workflow repository `_. If the core " +"developer decides you are ready to gain the extra privileges on the tracker, " +"they will ask a :ref:`Python organization admin ` to invite " +"you to the Python organisation, and then act as a mentor to you until you " +"are ready to do things entirely on your own." +msgstr "" + +#: ../../triage/triage-team.rst:98 +msgid "" +"For every new triager, it would be great to announce them in the `Committers " +"category `_ on the `Python " +"Discourse `_ (`example announcement `__)." +msgstr "" + +#: ../../triage/triaging.rst:5 +msgid "Triaging an Issue" +msgstr "" + +#: ../../triage/triaging.rst:7 +msgid "" +"This section of the devguide documents the :ref:`issue tracker ` " +"for users and developers." +msgstr "" + +#: ../../triage/triaging.rst:12 +msgid "Checklist for Triaging" +msgstr "" + +#: ../../triage/triaging.rst:14 +msgid "Read the initial message and the comments." +msgstr "" + +#: ../../triage/triaging.rst:15 +msgid "" +"Check that the title is reasonably concise, while including enough specifics " +"so that those scanning the list of issues can quickly identify its topic." +msgstr "" + +#: ../../triage/triaging.rst:17 +msgid "" +"For pull requests, ensure that the corresponding issue is added before the " +"title (:samp:`gh-NNNNN: {Title}`)." +msgstr "" + +#: ../../triage/triaging.rst:19 +msgid "Set all the relevant :ref:`labels `." +msgstr "" + +#: ../../triage/triaging.rst:20 +msgid "" +"Where appropriate, set the :guilabel:`Assignees`, :guilabel:`Reviewers`, :" +"guilabel:`Project` fields, and possibly @mention relevant people." +msgstr "" + +#: ../../triage/triaging.rst:22 +msgid "" +"You might also leave a brief comment about the proposed next action needed. " +"If there is a long message list, a summary can be very helpful." +msgstr "" + +#: ../../triage/triaging.rst:24 +msgid "" +"If the issue is clearly invalid (unrelated to CPython, duplicate, spam, " +"etc), you can close it as \"not planned\"." +msgstr "" + +#: ../../triage/triaging.rst:29 +msgid "Some of these fields can only be set/edited by core developers." +msgstr "" + +#: ../../triage/triaging.rst:35 +msgid "Helping Triage Issues" +msgstr "" + +#: ../../triage/triaging.rst:37 +msgid "" +"Once you know your way around how Python's source files are structured and " +"you are comfortable with the workflow, a great way to contribute is to help " +"triage issues. Do realize, though, that experience working on Python is " +"needed in order to effectively help triage." +msgstr "" + +#: ../../triage/triaging.rst:42 +msgid "" +"Around the clock, new issues are being opened on the :ref:`issue tracker " +"` and existing issues are being updated. Every issue needs to be " +"triaged to make sure everything runs smoothly." +msgstr "" + +#: ../../triage/triaging.rst:47 +msgid "Classifying Reports" +msgstr "" + +#: ../../triage/triaging.rst:49 +msgid "For bugs, an issue needs to:" +msgstr "" + +#: ../../triage/triaging.rst:51 +msgid "clearly explain the bug so it can be reproduced" +msgstr "" + +#: ../../triage/triaging.rst:52 +msgid "include all relevant platform details" +msgstr "" + +#: ../../triage/triaging.rst:53 +msgid "state what version(s) of Python are affected by the bug." +msgstr "" + +#: ../../triage/triaging.rst:55 +msgid "" +"These are things you can help with once you have experience developing for " +"Python:" +msgstr "" + +#: ../../triage/triaging.rst:58 +msgid "" +"Try reproducing the bug: if it is not explained clearly enough for you to " +"reproduce it, then there is a good chance a core developer won't be able to " +"either." +msgstr "" + +#: ../../triage/triaging.rst:61 +msgid "" +"See if the issue happens on a different Python version: it is always helpful " +"to know if a bug not only affects the in-development version of Python, but " +"whether it also affects other versions in maintenance mode." +msgstr "" + +#: ../../triage/triaging.rst:64 +msgid "" +"Write a unit test: if the bug lacks a unit test that should end up in " +"Python's test suite, having that written can be very helpful." +msgstr "" + +#: ../../triage/triaging.rst:67 +msgid "" +"This is all helpful as it allows members of the :ref:`triage team ` to properly classify an issue so it can be handled by the right core " +"developers in a timely fashion." +msgstr "" + +#: ../../triage/triaging.rst:72 +msgid "Reviewing Pull Requests" +msgstr "" + +#: ../../triage/triaging.rst:74 +msgid "" +"If an issue has a linked pull request that has not been reviewed, you can " +"help by making sure the pull request:" +msgstr "" + +#: ../../triage/triaging.rst:77 +msgid "is a good solution to the problem it is trying to solve" +msgstr "" + +#: ../../triage/triaging.rst:78 +msgid "follows the style guides (:pep:`7`, :pep:`8`, :ref:`style-guide`, etc.)" +msgstr "" + +#: ../../triage/triaging.rst:79 +msgid "includes proper tests" +msgstr "" + +#: ../../triage/triaging.rst:80 +msgid "includes proper documentation changes" +msgstr "" + +#: ../../triage/triaging.rst:81 +msgid "includes a :ref:`NEWS entry ` (if needed)" +msgstr "" + +#: ../../triage/triaging.rst:82 +msgid "" +"includes the author in ``Misc/ACKS``, either already or the patch adds them" +msgstr "" + +#: ../../triage/triaging.rst:83 +msgid "doesn't have conflicts with the ``main`` branch" +msgstr "" + +#: ../../triage/triaging.rst:85 +msgid "" +"Doing all of this allows core developers and :ref:`triagers ` " +"to more quickly look for subtle issues that only people with extensive " +"experience working on Python's code base will notice." +msgstr "" + +#: ../../triage/triaging.rst:89 +msgid "See also :ref:`committing`." +msgstr "" + +#: ../../triage/triaging.rst:92 +msgid "Finding an Issue You Can Help With" +msgstr "" + +#: ../../triage/triaging.rst:94 +msgid "" +"If you want to help with triaging, you might also want to search for issues " +"in modules for which you have a working knowledge. Search for the name of a " +"module in the issue tracker, filter by label, or use the `advanced search`_ " +"to find these issues." +msgstr "" + +#: ../../versions.rst:6 +msgid "Status of Python Versions" +msgstr "Status das versões do Python" + +#: ../../versions.rst:8 +msgid "" +"The main branch is currently the future Python 3.12, and is the only branch " +"that accepts new features. The latest release for each Python version can " +"be found on the `download page `_." +msgstr "" +"O branch principal é atualmente o futuro Python 3.12, e é o único branch que " +"aceita novos recursos. O lançamento mais recente para cada versão do Python " +"pode ser encontrado na `página de download `_." + +#: ../../versions.rst:14 +msgid "Python Release Cycle" +msgstr "Ciclo de lançamentos do Python" + +#: ../../versions.rst:20 +msgid "Supported Versions" +msgstr "Versões suportadas" + +#: ../../versions.rst:22 +msgid "Dates shown in *italic* are scheduled and can be adjusted." +msgstr "As datas mostradas em *itálico* são agendadas e podem ser ajustadas." + +#: ../../include/branches.csv:1 ../../include/end-of-life.csv:1 +msgid "Branch" +msgstr "Branch" + +#: ../../include/branches.csv:1 ../../include/end-of-life.csv:1 +msgid "First release" +msgstr "Primeiro lançamento" + +#: ../../include/branches.csv:1 ../../include/end-of-life.csv:1 +msgid "End of life" +msgstr "Fim de vida" + +#: ../../include/branches.csv:1 ../../include/end-of-life.csv:1 +msgid "Release manager" +msgstr "Gerente de lançamento" + +#: ../../include/branches.csv:1 +msgid "main" +msgstr "main" + +#: ../../include/branches.csv:1 +msgid ":pep:`693`" +msgstr ":pep:`693`" + +#: ../../include/branches.csv:1 ../../versions.rst +msgid "feature" +msgstr "feature" + +#: ../../include/branches.csv:1 +msgid "*2023-10-02*" +msgstr "*2023-10-02*" + +#: ../../include/branches.csv:1 +msgid "*2028-10*" +msgstr "*2028-10*" + +#: ../../include/branches.csv:1 +msgid "3.11" +msgstr "3.11" + +#: ../../include/branches.csv:1 +msgid ":pep:`664`" +msgstr ":pep:`664`" + +#: ../../include/branches.csv:1 ../../versions.rst +msgid "bugfix" +msgstr "bugfix" + +#: ../../include/branches.csv:1 +msgid "2022-10-24" +msgstr "2022-10-24" + +#: ../../include/branches.csv:1 +msgid "*2027-10*" +msgstr "*2027-10*" + +#: ../../include/branches.csv:1 +msgid "3.10" +msgstr "3.10" + +#: ../../include/branches.csv:1 +msgid ":pep:`619`" +msgstr ":pep:`619`" + +#: ../../include/branches.csv:1 +msgid "2021-10-04" +msgstr "2021-10-04" + +#: ../../include/branches.csv:1 +msgid "*2026-10*" +msgstr "*2026-10*" + +#: ../../include/branches.csv:1 +msgid "3.9" +msgstr "3.9" + +#: ../../include/branches.csv:1 +msgid ":pep:`596`" +msgstr ":pep:`596`" + +#: ../../include/branches.csv:1 +msgid "2020-10-05" +msgstr "2020-10-05" + +#: ../../include/branches.csv:1 +msgid "*2025-10*" +msgstr "*2025-10*" + +#: ../../include/branches.csv:1 +msgid ":pep:`569`" +msgstr ":pep:`569`" + +#: ../../include/branches.csv:1 +msgid "2019-10-14" +msgstr "2019-10-14" + +#: ../../include/branches.csv:1 +msgid "*2024-10*" +msgstr "*2024-10*" + +#: ../../include/branches.csv:1 +msgid "3.7" +msgstr "3.7" + +#: ../../include/branches.csv:1 +msgid ":pep:`537`" +msgstr ":pep:`537`" + +#: ../../include/branches.csv:1 +msgid "2018-06-27" +msgstr "2018-06-27" + +#: ../../include/branches.csv:1 +msgid "*2023-06-27*" +msgstr "*2023-06-27*" + +#: ../../versions.rst:33 +msgid "Unsupported Versions" +msgstr "Versões não suportadas" + +#: ../../include/end-of-life.csv:1 +msgid ":pep:`494`" +msgstr ":pep:`494`" + +#: ../../include/end-of-life.csv:1 ../../versions.rst +msgid "end-of-life" +msgstr "end-of-life" + +#: ../../include/end-of-life.csv:1 +msgid "2016-12-23" +msgstr "2016-12-23" + +#: ../../include/end-of-life.csv:1 +msgid "2021-12-23" +msgstr "2021-12-23" + +#: ../../include/end-of-life.csv:1 +msgid ":pep:`478`" +msgstr ":pep:`478`" + +#: ../../include/end-of-life.csv:1 +msgid "2015-09-13" +msgstr "2015-09-13" + +#: ../../include/end-of-life.csv:1 +msgid "2020-09-30" +msgstr "2020-09-30" + +#: ../../include/end-of-life.csv:1 +msgid ":pep:`429`" +msgstr ":pep:`429`" + +#: ../../include/end-of-life.csv:1 +msgid "2014-03-16" +msgstr "2014-03-16" + +#: ../../include/end-of-life.csv:1 +msgid "2019-03-18" +msgstr "2019-03-18" + +#: ../../include/end-of-life.csv:1 +msgid "3.3" +msgstr "3.3" + +#: ../../include/end-of-life.csv:1 +msgid ":pep:`398`" +msgstr ":pep:`398`" + +#: ../../include/end-of-life.csv:1 +msgid "2012-09-29" +msgstr "2012-09-29" + +#: ../../include/end-of-life.csv:1 +msgid "2017-09-29" +msgstr "2017-09-29" + +#: ../../include/end-of-life.csv:1 +msgid "Georg Brandl, Ned Deily (3.3.7+)" +msgstr "Georg Brandl, Ned Deily (3.3.7+)" + +#: ../../include/end-of-life.csv:1 +msgid "3.2" +msgstr "3.2" + +#: ../../include/end-of-life.csv:1 +msgid ":pep:`392`" +msgstr ":pep:`392`" + +#: ../../include/end-of-life.csv:1 +msgid "2011-02-20" +msgstr "2011-02-20" + +#: ../../include/end-of-life.csv:1 +msgid "2016-02-20" +msgstr "2016-02-20" + +#: ../../include/end-of-life.csv:1 +msgid ":pep:`375`" +msgstr ":pep:`375`" + +#: ../../include/end-of-life.csv:1 +msgid "2009-06-27" +msgstr "2009-06-27" + +#: ../../include/end-of-life.csv:1 +msgid "2012-04-09" +msgstr "2012-04-09" + +#: ../../include/end-of-life.csv:1 +msgid "3.0" +msgstr "3.0" + +#: ../../include/end-of-life.csv:1 +msgid ":pep:`361`" +msgstr ":pep:`361`" + +#: ../../include/end-of-life.csv:1 +msgid "2008-12-03" +msgstr "2008-12-03" + +#: ../../include/end-of-life.csv:1 +msgid "2.7" +msgstr "2.7" + +#: ../../include/end-of-life.csv:1 +msgid ":pep:`373`" +msgstr ":pep:`373`" + +#: ../../include/end-of-life.csv:1 +msgid "2010-07-03" +msgstr "2010-07-03" + +#: ../../include/end-of-life.csv:1 +msgid "2020-01-01" +msgstr "2020-01-01" + +#: ../../include/end-of-life.csv:1 +msgid "2.6" +msgstr "2.6" + +#: ../../include/end-of-life.csv:1 +msgid "2008-10-01" +msgstr "2008-10-01" + +#: ../../include/end-of-life.csv:1 +msgid "2013-10-29" +msgstr "2013-10-29" + +#: ../../versions.rst:42 +msgid "Status Key" +msgstr "Chave do status" + +#: ../../versions.rst:44 +msgid "new features, bugfixes, and security fixes are accepted." +msgstr "novos recursos, correções de bugs e corrções de segurança são aceitos." + +#: ../../versions.rst +msgid "prerelease" +msgstr "prerelease" + +#: ../../versions.rst:45 +msgid "" +"feature fixes, bugfixes, and security fixes are accepted for the upcoming " +"feature release." +msgstr "" +"correções de recursos, correções de bugs, correções de segurança são aceitos " +"para o próximo lançamento de recurso." + +#: ../../versions.rst:47 +msgid "" +"bugfixes and security fixes are accepted, new binaries are still released. " +"(Also called **maintenance** mode or **stable** release)" +msgstr "" +"correções de bugs e correções de segurança são aceitos, novos binários ainda " +"são lançados. (também chamado de modo **maintenance**, ou manutenção, ou " +"lançamento **stable**, ou estável)" + +#: ../../versions.rst:49 +msgid "" +"only security fixes are accepted and no more binaries are released, but new " +"source-only versions can be released" +msgstr "" +"apenas correções de segurança são aceitas e não são lançados mais binários, " +"mas novas versões somente de código-fonte podem ser lançadas" + +#: ../../versions.rst:51 +msgid "release cycle is frozen; no further changes can be pushed to it." +msgstr "" +"ciclo de lançamento é congelado; nenhuma alteração adicional pode ser " +"enviada para ela." + +#: ../../versions.rst:53 +msgid "See also the :ref:`devcycle` page for more information about branches." +msgstr "" +"Veja também a página :ref:`devcycle` para mais informações sobre branches." + +#: ../../versions.rst:55 +msgid "" +"By default, the end-of-life is scheduled 5 years after the first release, " +"but can be adjusted by the release manager of each branch. All Python 2 " +"versions have reached end-of-life." +msgstr "" +"Por padrão, o fim de vida é programado 5 anos após o primeiro lançamento, " +"mas pode ser ajustado pelo gerente de lançamento de cada filial. Todas as " +"versões do Python 2 atingiram o fim da vida útil." diff --git a/requirements.txt b/requirements.txt index f0397b9c44..7b05de8351 100644 --- a/requirements.txt +++ b/requirements.txt @@ -5,3 +5,4 @@ sphinx_copybutton>=0.3.3 sphinxcontrib-mermaid sphinxext-opengraph>=0.7.1 sphinxext-rediraffe +sphinx-intl