CINXE.COM

GitHub - tqdm/tqdm: :zap: A Fast, Extensible Progress Bar for Python and CLI

<!DOCTYPE html> <html lang="en" data-color-mode="auto" data-light-theme="light" data-dark-theme="dark" data-a11y-animated-images="system" data-a11y-link-underlines="true" > <head> <meta charset="utf-8"> <link rel="dns-prefetch" href="https://github.githubassets.com"> <link rel="dns-prefetch" href="https://avatars.githubusercontent.com"> <link rel="dns-prefetch" href="https://github-cloud.s3.amazonaws.com"> <link rel="dns-prefetch" href="https://user-images.githubusercontent.com/"> <link rel="preconnect" href="https://github.githubassets.com" crossorigin> <link rel="preconnect" href="https://avatars.githubusercontent.com"> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/light-74231a1f3bbb.css" /><link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/dark-8a995f0bacd4.css" /><link data-color-theme="dark_dimmed" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_dimmed-f37fb7684b1f.css" /><link data-color-theme="dark_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_high_contrast-9ac301c3ebe5.css" /><link data-color-theme="dark_colorblind" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_colorblind-cd826e8636dc.css" /><link data-color-theme="light_colorblind" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_colorblind-f91b0f603451.css" /><link data-color-theme="light_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_high_contrast-83beb16e0ecf.css" /><link data-color-theme="light_tritanopia" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_tritanopia-6e122dab64fc.css" /><link data-color-theme="dark_tritanopia" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_tritanopia-18119e682df0.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-primitives-225433424a87.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-aaa714e5674d.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/global-7d4d2344e7ab.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/github-43ae85d4871b.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/repository-4fce88777fa8.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/code-0210be90f4d3.css" /> <script type="application/json" id="client-env">{"locale":"en","featureFlags":["a11y_quote_reply_fix","copilot_immersive_issue_preview","copilot_new_references_ui","copilot_chat_repo_custom_instructions_preview","copilot_no_floating_button","copilot_topics_as_references","copilot_read_shared_conversation","copilot_duplicate_thread","copilot_buffered_streaming","dotcom_chat_client_side_skills","experimentation_azure_variant_endpoint","failbot_handle_non_errors","fgpat_form_ui_updates","geojson_azure_maps","ghost_pilot_confidence_truncation_25","ghost_pilot_confidence_truncation_40","github_models_o3_mini_streaming","hovercard_accessibility","insert_before_patch","issues_react_remove_placeholders","issues_react_blur_item_picker_on_close","marketing_pages_search_explore_provider","primer_react_css_modules_ga","react_data_router_pull_requests","remove_child_patch","report_hydro_web_vitals","sample_network_conn_type","swp_enterprise_contact_form","site_proxima_australia_update","viewscreen_sandbox","issues_react_create_milestone","issues_react_cache_fix_workaround","lifecycle_label_name_updates","copilot_task_oriented_assistive_prompts","issues_react_assignee_warning","issue_types_prevent_private_type_creation","refresh_image_video_src","react_router_dispose_on_disconnect","turbo_app_id_restore"]}</script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/wp-runtime-31eb1d74c75f.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_oddbird_popover-polyfill_dist_popover_js-9da652f58479.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_arianotify-polyfill_ariaNotify-polyfill_js-node_modules_github_mi-3abb8f-46b9f4874d95.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/ui_packages_failbot_failbot_ts-75968cfb5298.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/environment-f04cb2a9fc8c.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_primer_behaviors_dist_esm_index_mjs-0dbb79f97f8f.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_selector-observer_dist_index_esm_js-f690fd9ae3d5.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_relative-time-element_dist_index_js-62d275b7ddd9.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_text-expander-element_dist_index_js-78748950cb0c.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_auto-complete-element_dist_index_js-node_modules_github_catalyst_-8e9f78-a90ac05d2469.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_filter-input-element_dist_index_js-node_modules_github_remote-inp-b5f1d7-a1760ffda83d.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_markdown-toolbar-element_dist_index_js-ceef33f593fa.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_file-attachment-element_dist_index_js-node_modules_primer_view-co-c44a69-8c52cf4cd0d3.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/github-elements-394f8eb34f19.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/element-registry-e0a42d158bcc.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_braintree_browser-detection_dist_browser-detection_js-node_modules_githu-2906d7-2a07a295af40.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_lit-html_lit-html_js-be8cb88f481b.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_mini-throttle_dist_index_js-node_modules_morphdom_dist_morphdom-e-7c534c-a4a1922eb55f.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_turbo_dist_turbo_es2017-esm_js-a03ee12d659a.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_remote-form_dist_index_js-node_modules_delegated-events_dist_inde-893f9f-b6294cf703b7.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_color-convert_index_js-e3180fe3bcb3.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_quote-selection_dist_index_js-node_modules_github_session-resume_-947061-e7a6c4a19f98.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/ui_packages_updatable-content_updatable-content_ts-2a55124d5c52.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/app_assets_modules_github_behaviors_task-list_ts-app_assets_modules_github_sso_ts-ui_packages-900dde-768abe60b1f8.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/app_assets_modules_github_sticky-scroll-into-view_ts-3e000c5d31a9.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/app_assets_modules_github_behaviors_ajax-error_ts-app_assets_modules_github_behaviors_include-87a4ae-8be71414579a.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/app_assets_modules_github_behaviors_commenting_edit_ts-app_assets_modules_github_behaviors_ht-83c235-e429cff6ceb1.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/behaviors-7ebb6421bf22.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_delegated-events_dist_index_js-node_modules_github_catalyst_lib_index_js-f6223d90c7ba.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/notifications-global-01e85cd1be94.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_virtualized-list_es_index_js-node_modules_github_template-parts_lib_index_js-94dc7a2157c1.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_remote-form_dist_index_js-node_modules_delegated-events_dist_inde-70450e-4b93df70b903.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/app_assets_modules_github_ref-selector_ts-3e9d848bab5f.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/codespaces-c3bcacfe317c.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_filter-input-element_dist_index_js-node_modules_github_remote-inp-3eebbd-0763620ad7bf.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_mini-throttle_dist_decorators_js-node_modules_delegated-events_di-e161aa-9d41fb1b6c9e.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_file-attachment-element_dist_index_js-node_modules_github_remote--3c9c82-b71ef90fbdc7.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/repositories-7a0dbaa42c57.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_mini-throttle_dist_index_js-node_modules_github_catalyst_lib_inde-dbbea9-26cce2010167.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/code-menu-1c0aedc134b1.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/primer-react-e05a7c4c5398.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/react-core-aaa76995a864.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/react-lib-f1bca44e0926.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/octicons-react-cf2f2ab8dab4.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_emotion_is-prop-valid_dist_emotion-is-prop-valid_esm_js-node_modules_emo-62da9f-2df2f32ec596.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_mini-throttle_dist_index_js-node_modules_stacktrace-parser_dist_s-e7dcdd-9a233856b02c.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_oddbird_popover-polyfill_dist_popover-fn_js-55fea94174bf.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/notifications-subscriptions-menu-58a0c58bfee4.js"></script> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react.f9eaf3e098aa7865fd95.module.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/notifications-subscriptions-menu.1bcff9205c241e99cff2.module.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react.f9eaf3e098aa7865fd95.module.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/notifications-subscriptions-menu.1bcff9205c241e99cff2.module.css" /> <title>GitHub - tqdm/tqdm: :zap: A Fast, Extensible Progress Bar for Python and CLI</title> <meta name="route-pattern" content="/:user_id/:repository" data-turbo-transient> <meta name="route-controller" content="files" data-turbo-transient> <meta name="route-action" content="disambiguate" data-turbo-transient> <meta name="current-catalog-service-hash" content="f3abb0cc802f3d7b95fc8762b94bdcb13bf39634c40c357301c4aa1d67a256fb"> <meta name="request-id" content="93FE:107737:34C8C:440D5:67E1F501" data-pjax-transient="true"/><meta name="html-safe-nonce" content="725657fd12d58c1c06a67a000e2b41d5a43c3886ce4b0bb68e0424dcd38ae119" data-pjax-transient="true"/><meta name="visitor-payload" content="eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiI5M0ZFOjEwNzczNzozNEM4Qzo0NDBENTo2N0UxRjUwMSIsInZpc2l0b3JfaWQiOiI0OTQyNzkxNjA3NDMzOTUwNDY1IiwicmVnaW9uX2VkZ2UiOiJzb3V0aGVhc3Rhc2lhIiwicmVnaW9uX3JlbmRlciI6InNvdXRoZWFzdGFzaWEifQ==" data-pjax-transient="true"/><meta name="visitor-hmac" content="777195ceabe18dd5f1f88dd5f259fdb8ad2e2440d9f147671f43b453aba28156" data-pjax-transient="true"/> <meta name="hovercard-subject-tag" content="repository:36804486" data-turbo-transient> <meta name="github-keyboard-shortcuts" content="repository,copilot" data-turbo-transient="true" /> <meta name="selected-link" value="repo_source" data-turbo-transient> <link rel="assets" href="https://github.githubassets.com/"> <meta name="google-site-verification" content="Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I"> <meta name="octolytics-url" content="https://collector.github.com/github/collect" /> <meta name="analytics-location" content="/&lt;user-name&gt;/&lt;repo-name&gt;" data-turbo-transient="true" /> <meta name="user-login" content=""> <meta name="viewport" content="width=device-width"> <meta name="description" content=":zap: A Fast, Extensible Progress Bar for Python and CLI - tqdm/tqdm"> <link rel="search" type="application/opensearchdescription+xml" href="/opensearch.xml" title="GitHub"> <link rel="fluid-icon" href="https://github.com/fluidicon.png" title="GitHub"> <meta property="fb:app_id" content="1401488693436528"> <meta name="apple-itunes-app" content="app-id=1477376905, app-argument=https://github.com/tqdm/tqdm" /> <meta name="twitter:image" content="https://opengraph.githubassets.com/224f026f78ad224d6b3d2e45632c763726cc84be60bc771fb6cc2f2cf01c631e/tqdm/tqdm" /><meta name="twitter:site" content="@github" /><meta name="twitter:card" content="summary_large_image" /><meta name="twitter:title" content="GitHub - tqdm/tqdm: :zap: A Fast, Extensible Progress Bar for Python and CLI" /><meta name="twitter:description" content=":zap: A Fast, Extensible Progress Bar for Python and CLI - tqdm/tqdm" /> <meta property="og:image" content="https://opengraph.githubassets.com/224f026f78ad224d6b3d2e45632c763726cc84be60bc771fb6cc2f2cf01c631e/tqdm/tqdm" /><meta property="og:image:alt" content=":zap: A Fast, Extensible Progress Bar for Python and CLI - tqdm/tqdm" /><meta property="og:image:width" content="1200" /><meta property="og:image:height" content="600" /><meta property="og:site_name" content="GitHub" /><meta property="og:type" content="object" /><meta property="og:title" content="GitHub - tqdm/tqdm: :zap: A Fast, Extensible Progress Bar for Python and CLI" /><meta property="og:url" content="https://github.com/tqdm/tqdm" /><meta property="og:description" content=":zap: A Fast, Extensible Progress Bar for Python and CLI - tqdm/tqdm" /> <meta name="hostname" content="github.com"> <meta name="expected-hostname" content="github.com"> <meta http-equiv="x-pjax-version" content="13e752504e035b88b091979df577759b1d01ee9136b5a97e212377b34ca6e1d0" data-turbo-track="reload"> <meta http-equiv="x-pjax-csp-version" content="77190eb53eb47fc30bd2fcc17a7eefa2dfd8505869fee9299ba911be3a40a9eb" data-turbo-track="reload"> <meta http-equiv="x-pjax-css-version" content="3c046d4b918199cbb4d255cca63226853d0617dbae6529663229394aa9b0742a" data-turbo-track="reload"> <meta http-equiv="x-pjax-js-version" content="0f878239f416f1c9931ad95cd7b07b1dc4089b7393d55f2dd82490faa4f4fea0" data-turbo-track="reload"> <meta name="turbo-cache-control" content="no-preview" data-turbo-transient=""> <meta data-hydrostats="publish"> <meta name="go-import" content="github.com/tqdm/tqdm git https://github.com/tqdm/tqdm.git"> <meta name="octolytics-dimension-user_id" content="12731565" /><meta name="octolytics-dimension-user_login" content="tqdm" /><meta name="octolytics-dimension-repository_id" content="36804486" /><meta name="octolytics-dimension-repository_nwo" content="tqdm/tqdm" /><meta name="octolytics-dimension-repository_public" content="true" /><meta name="octolytics-dimension-repository_is_fork" content="false" /><meta name="octolytics-dimension-repository_network_root_id" content="36804486" /><meta name="octolytics-dimension-repository_network_root_nwo" content="tqdm/tqdm" /> <link rel="canonical" href="https://github.com/tqdm/tqdm" data-turbo-transient> <meta name="turbo-body-classes" content="logged-out env-production page-responsive"> <meta name="browser-stats-url" content="https://api.github.com/_private/browser/stats"> <meta name="browser-errors-url" content="https://api.github.com/_private/browser/errors"> <meta name="release" content="e0b44428c5e2edd72c11e98f08bae7996f14b639"> <link rel="mask-icon" href="https://github.githubassets.com/assets/pinned-octocat-093da3e6fa40.svg" color="#000000"> <link rel="alternate icon" class="js-site-favicon" type="image/png" href="https://github.githubassets.com/favicons/favicon.png"> <link rel="icon" class="js-site-favicon" type="image/svg+xml" href="https://github.githubassets.com/favicons/favicon.svg" data-base-href="https://github.githubassets.com/favicons/favicon"> <meta name="theme-color" content="#1e2327"> <meta name="color-scheme" content="light dark" /> <link rel="manifest" href="/manifest.json" crossOrigin="use-credentials"> </head> <body class="logged-out env-production page-responsive" style="word-wrap: break-word;"> <div data-turbo-body class="logged-out env-production page-responsive" style="word-wrap: break-word;"> <div class="position-relative header-wrapper js-header-wrapper "> <a href="#start-of-content" data-skip-target-assigned="false" class="px-2 py-4 color-bg-accent-emphasis color-fg-on-emphasis show-on-focus js-skip-to-content">Skip to content</a> <span data-view-component="true" class="progress-pjax-loader Progress position-fixed width-full"> <span style="width: 0%;" data-view-component="true" class="Progress-item progress-pjax-loader-bar left-0 top-0 color-bg-accent-emphasis"></span> </span> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/ui_packages_ui-commands_ui-commands_ts-8c874fb594e9.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/keyboard-shortcuts-dialog-33dfb803e078.js"></script> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react.f9eaf3e098aa7865fd95.module.css" /> <react-partial partial-name="keyboard-shortcuts-dialog" data-ssr="false" data-attempted-ssr="false" > <script type="application/json" data-target="react-partial.embeddedData">{"props":{"docsUrl":"https://docs.github.com/get-started/accessibility/keyboard-shortcuts"}}</script> <div data-target="react-partial.reactRoot"></div> </react-partial> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_remote-form_dist_index_js-node_modules_delegated-events_dist_inde-94fd67-4898d1bf4b51.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/sessions-730dca81d0a2.js"></script> <header class="HeaderMktg header-logged-out js-details-container js-header Details f4 py-3" role="banner" data-is-top="true" data-color-mode=light data-light-theme=light data-dark-theme=dark> <h2 class="sr-only">Navigation Menu</h2> <button type="button" class="HeaderMktg-backdrop d-lg-none border-0 position-fixed top-0 left-0 width-full height-full js-details-target" aria-label="Toggle navigation"> <span class="d-none">Toggle navigation</span> </button> <div class="d-flex flex-column flex-lg-row flex-items-center px-3 px-md-4 px-lg-5 height-full position-relative z-1"> <div class="d-flex flex-justify-between flex-items-center width-full width-lg-auto"> <div class="flex-1"> <button aria-label="Toggle navigation" aria-expanded="false" type="button" data-view-component="true" class="js-details-target js-nav-padding-recalculate js-header-menu-toggle Button--link Button--medium Button d-lg-none color-fg-inherit p-1"> <span class="Button-content"> <span class="Button-label"><div class="HeaderMenu-toggle-bar rounded my-1"></div> <div class="HeaderMenu-toggle-bar rounded my-1"></div> <div class="HeaderMenu-toggle-bar rounded my-1"></div></span> </span> </button> </div> <a class="mr-lg-3 color-fg-inherit flex-order-2 js-prevent-focus-on-mobile-nav" href="/" aria-label="Homepage" data-analytics-event="{&quot;category&quot;:&quot;Marketing nav&quot;,&quot;action&quot;:&quot;click to go to homepage&quot;,&quot;label&quot;:&quot;ref_page:Marketing;ref_cta:Logomark;ref_loc:Header&quot;}"> <svg height="32" aria-hidden="true" viewBox="0 0 24 24" version="1.1" width="32" data-view-component="true" class="octicon octicon-mark-github"> <path d="M12 1C5.9225 1 1 5.9225 1 12C1 16.8675 4.14875 20.9787 8.52125 22.4362C9.07125 22.5325 9.2775 22.2025 9.2775 21.9137C9.2775 21.6525 9.26375 20.7862 9.26375 19.865C6.5 20.3737 5.785 19.1912 5.565 18.5725C5.44125 18.2562 4.905 17.28 4.4375 17.0187C4.0525 16.8125 3.5025 16.3037 4.42375 16.29C5.29 16.2762 5.90875 17.0875 6.115 17.4175C7.105 19.0812 8.68625 18.6137 9.31875 18.325C9.415 17.61 9.70375 17.1287 10.02 16.8537C7.5725 16.5787 5.015 15.63 5.015 11.4225C5.015 10.2262 5.44125 9.23625 6.1425 8.46625C6.0325 8.19125 5.6475 7.06375 6.2525 5.55125C6.2525 5.55125 7.17375 5.2625 9.2775 6.67875C10.1575 6.43125 11.0925 6.3075 12.0275 6.3075C12.9625 6.3075 13.8975 6.43125 14.7775 6.67875C16.8813 5.24875 17.8025 5.55125 17.8025 5.55125C18.4075 7.06375 18.0225 8.19125 17.9125 8.46625C18.6138 9.23625 19.04 10.2125 19.04 11.4225C19.04 15.6437 16.4688 16.5787 14.0213 16.8537C14.42 17.1975 14.7638 17.8575 14.7638 18.8887C14.7638 20.36 14.75 21.5425 14.75 21.9137C14.75 22.2025 14.9563 22.5462 15.5063 22.4362C19.8513 20.9787 23 16.8537 23 12C23 5.9225 18.0775 1 12 1Z"></path> </svg> </a> <div class="flex-1 flex-order-2 text-right"> <a href="/login?return_to=https%3A%2F%2Fgithub.com%2Ftqdm%2Ftqdm" class="HeaderMenu-link HeaderMenu-button d-inline-flex d-lg-none flex-order-1 f5 no-underline border color-border-default rounded-2 px-2 py-1 color-fg-inherit js-prevent-focus-on-mobile-nav" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;site header menu&quot;,&quot;repository_id&quot;:null,&quot;auth_type&quot;:&quot;SIGN_UP&quot;,&quot;originating_url&quot;:&quot;https://github.com/tqdm/tqdm&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="aab289504eacc3d2dec97ba23bfa5f27a424870c594f46292596289abf93cf1c" data-analytics-event="{&quot;category&quot;:&quot;Marketing nav&quot;,&quot;action&quot;:&quot;click to Sign in&quot;,&quot;label&quot;:&quot;ref_page:Marketing;ref_cta:Sign in;ref_loc:Header&quot;}" > Sign in </a> </div> </div> <div class="HeaderMenu js-header-menu height-fit position-lg-relative d-lg-flex flex-column flex-auto top-0"> <div class="HeaderMenu-wrapper d-flex flex-column flex-self-start flex-lg-row flex-auto rounded rounded-lg-0"> <nav class="HeaderMenu-nav" aria-label="Global"> <ul class="d-lg-flex list-style-none"> <li class="HeaderMenu-item position-relative flex-wrap flex-justify-between flex-items-center d-block d-lg-flex flex-lg-nowrap flex-lg-items-center js-details-container js-header-menu-item"> <button type="button" class="HeaderMenu-link border-0 width-full width-lg-auto px-0 px-lg-2 py-lg-2 no-wrap d-flex flex-items-center flex-justify-between js-details-target" aria-expanded="false"> Product <svg opacity="0.5" aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-chevron-down HeaderMenu-icon ml-1"> <path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path> </svg> </button> <div class="HeaderMenu-dropdown dropdown-menu rounded m-0 p-0 pt-2 pt-lg-4 position-relative position-lg-absolute left-0 left-lg-n3 pb-2 pb-lg-4 d-lg-flex flex-wrap dropdown-menu-wide"> <div class="HeaderMenu-column px-lg-4 border-lg-right mb-4 mb-lg-0 pr-lg-7"> <div class="border-bottom pb-3 pb-lg-0 border-lg-bottom-0"> <ul class="list-style-none f5" > <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description pb-lg-3" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;github_copilot&quot;,&quot;context&quot;:&quot;product&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;github_copilot_link_product_navbar&quot;}" href="https://github.com/features/copilot"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-copilot color-fg-subtle mr-3"> <path d="M23.922 16.992c-.861 1.495-5.859 5.023-11.922 5.023-6.063 0-11.061-3.528-11.922-5.023A.641.641 0 0 1 0 16.736v-2.869a.841.841 0 0 1 .053-.22c.372-.935 1.347-2.292 2.605-2.656.167-.429.414-1.055.644-1.517a10.195 10.195 0 0 1-.052-1.086c0-1.331.282-2.499 1.132-3.368.397-.406.89-.717 1.474-.952 1.399-1.136 3.392-2.093 6.122-2.093 2.731 0 4.767.957 6.166 2.093.584.235 1.077.546 1.474.952.85.869 1.132 2.037 1.132 3.368 0 .368-.014.733-.052 1.086.23.462.477 1.088.644 1.517 1.258.364 2.233 1.721 2.605 2.656a.832.832 0 0 1 .053.22v2.869a.641.641 0 0 1-.078.256ZM12.172 11h-.344a4.323 4.323 0 0 1-.355.508C10.703 12.455 9.555 13 7.965 13c-1.725 0-2.989-.359-3.782-1.259a2.005 2.005 0 0 1-.085-.104L4 11.741v6.585c1.435.779 4.514 2.179 8 2.179 3.486 0 6.565-1.4 8-2.179v-6.585l-.098-.104s-.033.045-.085.104c-.793.9-2.057 1.259-3.782 1.259-1.59 0-2.738-.545-3.508-1.492a4.323 4.323 0 0 1-.355-.508h-.016.016Zm.641-2.935c.136 1.057.403 1.913.878 2.497.442.544 1.134.938 2.344.938 1.573 0 2.292-.337 2.657-.751.384-.435.558-1.15.558-2.361 0-1.14-.243-1.847-.705-2.319-.477-.488-1.319-.862-2.824-1.025-1.487-.161-2.192.138-2.533.529-.269.307-.437.808-.438 1.578v.021c0 .265.021.562.063.893Zm-1.626 0c.042-.331.063-.628.063-.894v-.02c-.001-.77-.169-1.271-.438-1.578-.341-.391-1.046-.69-2.533-.529-1.505.163-2.347.537-2.824 1.025-.462.472-.705 1.179-.705 2.319 0 1.211.175 1.926.558 2.361.365.414 1.084.751 2.657.751 1.21 0 1.902-.394 2.344-.938.475-.584.742-1.44.878-2.497Z"></path><path d="M14.5 14.25a1 1 0 0 1 1 1v2a1 1 0 0 1-2 0v-2a1 1 0 0 1 1-1Zm-5 0a1 1 0 0 1 1 1v2a1 1 0 0 1-2 0v-2a1 1 0 0 1 1-1Z"></path> </svg> <div> <div class="color-fg-default h4">GitHub Copilot</div> Write better code with AI </div> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description pb-lg-3" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;security&quot;,&quot;context&quot;:&quot;product&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;security_link_product_navbar&quot;}" href="https://github.com/features/security"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-shield-check color-fg-subtle mr-3"> <path d="M16.53 9.78a.75.75 0 0 0-1.06-1.06L11 13.19l-1.97-1.97a.75.75 0 0 0-1.06 1.06l2.5 2.5a.75.75 0 0 0 1.06 0l5-5Z"></path><path d="m12.54.637 8.25 2.675A1.75 1.75 0 0 1 22 4.976V10c0 6.19-3.771 10.704-9.401 12.83a1.704 1.704 0 0 1-1.198 0C5.77 20.705 2 16.19 2 10V4.976c0-.758.489-1.43 1.21-1.664L11.46.637a1.748 1.748 0 0 1 1.08 0Zm-.617 1.426-8.25 2.676a.249.249 0 0 0-.173.237V10c0 5.46 3.28 9.483 8.43 11.426a.199.199 0 0 0 .14 0C17.22 19.483 20.5 15.461 20.5 10V4.976a.25.25 0 0 0-.173-.237l-8.25-2.676a.253.253 0 0 0-.154 0Z"></path> </svg> <div> <div class="color-fg-default h4">Security</div> Find and fix vulnerabilities </div> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description pb-lg-3" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;actions&quot;,&quot;context&quot;:&quot;product&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;actions_link_product_navbar&quot;}" href="https://github.com/features/actions"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-workflow color-fg-subtle mr-3"> <path d="M1 3a2 2 0 0 1 2-2h6.5a2 2 0 0 1 2 2v6.5a2 2 0 0 1-2 2H7v4.063C7 16.355 7.644 17 8.438 17H12.5v-2.5a2 2 0 0 1 2-2H21a2 2 0 0 1 2 2V21a2 2 0 0 1-2 2h-6.5a2 2 0 0 1-2-2v-2.5H8.437A2.939 2.939 0 0 1 5.5 15.562V11.5H3a2 2 0 0 1-2-2Zm2-.5a.5.5 0 0 0-.5.5v6.5a.5.5 0 0 0 .5.5h6.5a.5.5 0 0 0 .5-.5V3a.5.5 0 0 0-.5-.5ZM14.5 14a.5.5 0 0 0-.5.5V21a.5.5 0 0 0 .5.5H21a.5.5 0 0 0 .5-.5v-6.5a.5.5 0 0 0-.5-.5Z"></path> </svg> <div> <div class="color-fg-default h4">Actions</div> Automate any workflow </div> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description pb-lg-3" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;codespaces&quot;,&quot;context&quot;:&quot;product&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;codespaces_link_product_navbar&quot;}" href="https://github.com/features/codespaces"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-codespaces color-fg-subtle mr-3"> <path d="M3.5 3.75C3.5 2.784 4.284 2 5.25 2h13.5c.966 0 1.75.784 1.75 1.75v7.5A1.75 1.75 0 0 1 18.75 13H5.25a1.75 1.75 0 0 1-1.75-1.75Zm-2 12c0-.966.784-1.75 1.75-1.75h17.5c.966 0 1.75.784 1.75 1.75v4a1.75 1.75 0 0 1-1.75 1.75H3.25a1.75 1.75 0 0 1-1.75-1.75ZM5.25 3.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h13.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Zm-2 12a.25.25 0 0 0-.25.25v4c0 .138.112.25.25.25h17.5a.25.25 0 0 0 .25-.25v-4a.25.25 0 0 0-.25-.25Z"></path><path d="M10 17.75a.75.75 0 0 1 .75-.75h6.5a.75.75 0 0 1 0 1.5h-6.5a.75.75 0 0 1-.75-.75Zm-4 0a.75.75 0 0 1 .75-.75h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1-.75-.75Z"></path> </svg> <div> <div class="color-fg-default h4">Codespaces</div> Instant dev environments </div> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description pb-lg-3" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;issues&quot;,&quot;context&quot;:&quot;product&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;issues_link_product_navbar&quot;}" href="https://github.com/features/issues"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-issue-opened color-fg-subtle mr-3"> <path d="M12 1c6.075 0 11 4.925 11 11s-4.925 11-11 11S1 18.075 1 12 5.925 1 12 1ZM2.5 12a9.5 9.5 0 0 0 9.5 9.5 9.5 9.5 0 0 0 9.5-9.5A9.5 9.5 0 0 0 12 2.5 9.5 9.5 0 0 0 2.5 12Zm9.5 2a2 2 0 1 1-.001-3.999A2 2 0 0 1 12 14Z"></path> </svg> <div> <div class="color-fg-default h4">Issues</div> Plan and track work </div> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description pb-lg-3" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;code_review&quot;,&quot;context&quot;:&quot;product&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;code_review_link_product_navbar&quot;}" href="https://github.com/features/code-review"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-code-review color-fg-subtle mr-3"> <path d="M10.3 6.74a.75.75 0 0 1-.04 1.06l-2.908 2.7 2.908 2.7a.75.75 0 1 1-1.02 1.1l-3.5-3.25a.75.75 0 0 1 0-1.1l3.5-3.25a.75.75 0 0 1 1.06.04Zm3.44 1.06a.75.75 0 1 1 1.02-1.1l3.5 3.25a.75.75 0 0 1 0 1.1l-3.5 3.25a.75.75 0 1 1-1.02-1.1l2.908-2.7-2.908-2.7Z"></path><path d="M1.5 4.25c0-.966.784-1.75 1.75-1.75h17.5c.966 0 1.75.784 1.75 1.75v12.5a1.75 1.75 0 0 1-1.75 1.75h-9.69l-3.573 3.573A1.458 1.458 0 0 1 5 21.043V18.5H3.25a1.75 1.75 0 0 1-1.75-1.75ZM3.25 4a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h2.5a.75.75 0 0 1 .75.75v3.19l3.72-3.72a.749.749 0 0 1 .53-.22h10a.25.25 0 0 0 .25-.25V4.25a.25.25 0 0 0-.25-.25Z"></path> </svg> <div> <div class="color-fg-default h4">Code Review</div> Manage code changes </div> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description pb-lg-3" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;discussions&quot;,&quot;context&quot;:&quot;product&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;discussions_link_product_navbar&quot;}" href="https://github.com/features/discussions"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-comment-discussion color-fg-subtle mr-3"> <path d="M1.75 1h12.5c.966 0 1.75.784 1.75 1.75v9.5A1.75 1.75 0 0 1 14.25 14H8.061l-2.574 2.573A1.458 1.458 0 0 1 3 15.543V14H1.75A1.75 1.75 0 0 1 0 12.25v-9.5C0 1.784.784 1 1.75 1ZM1.5 2.75v9.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h6.5a.25.25 0 0 0 .25-.25v-9.5a.25.25 0 0 0-.25-.25H1.75a.25.25 0 0 0-.25.25Z"></path><path d="M22.5 8.75a.25.25 0 0 0-.25-.25h-3.5a.75.75 0 0 1 0-1.5h3.5c.966 0 1.75.784 1.75 1.75v9.5A1.75 1.75 0 0 1 22.25 20H21v1.543a1.457 1.457 0 0 1-2.487 1.03L15.939 20H10.75A1.75 1.75 0 0 1 9 18.25v-1.465a.75.75 0 0 1 1.5 0v1.465c0 .138.112.25.25.25h5.5a.75.75 0 0 1 .53.22l2.72 2.72v-2.19a.75.75 0 0 1 .75-.75h2a.25.25 0 0 0 .25-.25v-9.5Z"></path> </svg> <div> <div class="color-fg-default h4">Discussions</div> Collaborate outside of code </div> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;code_search&quot;,&quot;context&quot;:&quot;product&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;code_search_link_product_navbar&quot;}" href="https://github.com/features/code-search"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-code-square color-fg-subtle mr-3"> <path d="M10.3 8.24a.75.75 0 0 1-.04 1.06L7.352 12l2.908 2.7a.75.75 0 1 1-1.02 1.1l-3.5-3.25a.75.75 0 0 1 0-1.1l3.5-3.25a.75.75 0 0 1 1.06.04Zm3.44 1.06a.75.75 0 1 1 1.02-1.1l3.5 3.25a.75.75 0 0 1 0 1.1l-3.5 3.25a.75.75 0 1 1-1.02-1.1l2.908-2.7-2.908-2.7Z"></path><path d="M2 3.75C2 2.784 2.784 2 3.75 2h16.5c.966 0 1.75.784 1.75 1.75v16.5A1.75 1.75 0 0 1 20.25 22H3.75A1.75 1.75 0 0 1 2 20.25Zm1.75-.25a.25.25 0 0 0-.25.25v16.5c0 .138.112.25.25.25h16.5a.25.25 0 0 0 .25-.25V3.75a.25.25 0 0 0-.25-.25Z"></path> </svg> <div> <div class="color-fg-default h4">Code Search</div> Find more, search less </div> </a></li> </ul> </div> </div> <div class="HeaderMenu-column px-lg-4"> <div class="border-bottom pb-3 pb-lg-0 border-lg-bottom-0 border-bottom-0"> <span class="d-block h4 color-fg-default my-1" id="product-explore-heading">Explore</span> <ul class="list-style-none f5" aria-labelledby="product-explore-heading"> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;all_features&quot;,&quot;context&quot;:&quot;product&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;all_features_link_product_navbar&quot;}" href="https://github.com/features"> All features </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary Link--external" target="_blank" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;documentation&quot;,&quot;context&quot;:&quot;product&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;documentation_link_product_navbar&quot;}" href="https://docs.github.com"> Documentation <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-link-external HeaderMenu-external-icon color-fg-subtle"> <path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path> </svg> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary Link--external" target="_blank" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;github_skills&quot;,&quot;context&quot;:&quot;product&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;github_skills_link_product_navbar&quot;}" href="https://skills.github.com"> GitHub Skills <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-link-external HeaderMenu-external-icon color-fg-subtle"> <path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path> </svg> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary Link--external" target="_blank" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;blog&quot;,&quot;context&quot;:&quot;product&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;blog_link_product_navbar&quot;}" href="https://github.blog"> Blog <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-link-external HeaderMenu-external-icon color-fg-subtle"> <path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path> </svg> </a></li> </ul> </div> </div> </div> </li> <li class="HeaderMenu-item position-relative flex-wrap flex-justify-between flex-items-center d-block d-lg-flex flex-lg-nowrap flex-lg-items-center js-details-container js-header-menu-item"> <button type="button" class="HeaderMenu-link border-0 width-full width-lg-auto px-0 px-lg-2 py-lg-2 no-wrap d-flex flex-items-center flex-justify-between js-details-target" aria-expanded="false"> Solutions <svg opacity="0.5" aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-chevron-down HeaderMenu-icon ml-1"> <path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path> </svg> </button> <div class="HeaderMenu-dropdown dropdown-menu rounded m-0 p-0 pt-2 pt-lg-4 position-relative position-lg-absolute left-0 left-lg-n3 d-lg-flex flex-wrap dropdown-menu-wide"> <div class="HeaderMenu-column px-lg-4 border-lg-right mb-4 mb-lg-0 pr-lg-7"> <div class="border-bottom pb-3 pb-lg-0 border-lg-bottom-0 pb-lg-3 mb-3 mb-lg-0"> <span class="d-block h4 color-fg-default my-1" id="solutions-by-company-size-heading">By company size</span> <ul class="list-style-none f5" aria-labelledby="solutions-by-company-size-heading"> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;enterprises&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;enterprises_link_solutions_navbar&quot;}" href="https://github.com/enterprise"> Enterprises </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;small_and_medium_teams&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;small_and_medium_teams_link_solutions_navbar&quot;}" href="https://github.com/team"> Small and medium teams </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;startups&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;startups_link_solutions_navbar&quot;}" href="https://github.com/enterprise/startups"> Startups </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;nonprofits&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;nonprofits_link_solutions_navbar&quot;}" href="/solutions/industry/nonprofits"> Nonprofits </a></li> </ul> </div> <div class="border-bottom pb-3 pb-lg-0 border-lg-bottom-0"> <span class="d-block h4 color-fg-default my-1" id="solutions-by-use-case-heading">By use case</span> <ul class="list-style-none f5" aria-labelledby="solutions-by-use-case-heading"> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;devsecops&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;devsecops_link_solutions_navbar&quot;}" href="/solutions/use-case/devsecops"> DevSecOps </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;devops&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;devops_link_solutions_navbar&quot;}" href="/solutions/use-case/devops"> DevOps </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;ci_cd&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;ci_cd_link_solutions_navbar&quot;}" href="/solutions/use-case/ci-cd"> CI/CD </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;view_all_use_cases&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;view_all_use_cases_link_solutions_navbar&quot;}" href="/solutions/use-case"> View all use cases </a></li> </ul> </div> </div> <div class="HeaderMenu-column px-lg-4"> <div class="border-bottom pb-3 pb-lg-0 border-lg-bottom-0"> <span class="d-block h4 color-fg-default my-1" id="solutions-by-industry-heading">By industry</span> <ul class="list-style-none f5" aria-labelledby="solutions-by-industry-heading"> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;healthcare&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;healthcare_link_solutions_navbar&quot;}" href="/solutions/industry/healthcare"> Healthcare </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;financial_services&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;financial_services_link_solutions_navbar&quot;}" href="/solutions/industry/financial-services"> Financial services </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;manufacturing&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;manufacturing_link_solutions_navbar&quot;}" href="/solutions/industry/manufacturing"> Manufacturing </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;government&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;government_link_solutions_navbar&quot;}" href="/solutions/industry/government"> Government </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;view_all_industries&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;view_all_industries_link_solutions_navbar&quot;}" href="/solutions/industry"> View all industries </a></li> </ul> </div> </div> <div class="HeaderMenu-trailing-link rounded-bottom-2 flex-shrink-0 mt-lg-4 px-lg-4 py-4 py-lg-3 f5 text-semibold"> <a href="/solutions"> View all solutions <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-chevron-right HeaderMenu-trailing-link-icon"> <path d="M6.22 3.22a.75.75 0 0 1 1.06 0l4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L9.94 8 6.22 4.28a.75.75 0 0 1 0-1.06Z"></path> </svg> </a> </div> </div> </li> <li class="HeaderMenu-item position-relative flex-wrap flex-justify-between flex-items-center d-block d-lg-flex flex-lg-nowrap flex-lg-items-center js-details-container js-header-menu-item"> <button type="button" class="HeaderMenu-link border-0 width-full width-lg-auto px-0 px-lg-2 py-lg-2 no-wrap d-flex flex-items-center flex-justify-between js-details-target" aria-expanded="false"> Resources <svg opacity="0.5" aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-chevron-down HeaderMenu-icon ml-1"> <path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path> </svg> </button> <div class="HeaderMenu-dropdown dropdown-menu rounded m-0 p-0 pt-2 pt-lg-4 position-relative position-lg-absolute left-0 left-lg-n3 pb-2 pb-lg-4 d-lg-flex flex-wrap dropdown-menu-wide"> <div class="HeaderMenu-column px-lg-4 border-lg-right mb-4 mb-lg-0 pr-lg-7"> <div class="border-bottom pb-3 pb-lg-0 border-lg-bottom-0"> <span class="d-block h4 color-fg-default my-1" id="resources-topics-heading">Topics</span> <ul class="list-style-none f5" aria-labelledby="resources-topics-heading"> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;ai&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;ai_link_resources_navbar&quot;}" href="/resources/articles/ai"> AI </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;devops&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;devops_link_resources_navbar&quot;}" href="/resources/articles/devops"> DevOps </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;security&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;security_link_resources_navbar&quot;}" href="/resources/articles/security"> Security </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;software_development&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;software_development_link_resources_navbar&quot;}" href="/resources/articles/software-development"> Software Development </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;view_all&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;view_all_link_resources_navbar&quot;}" href="/resources/articles"> View all </a></li> </ul> </div> </div> <div class="HeaderMenu-column px-lg-4"> <div class="border-bottom pb-3 pb-lg-0 border-lg-bottom-0 border-bottom-0"> <span class="d-block h4 color-fg-default my-1" id="resources-explore-heading">Explore</span> <ul class="list-style-none f5" aria-labelledby="resources-explore-heading"> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary Link--external" target="_blank" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;learning_pathways&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;learning_pathways_link_resources_navbar&quot;}" href="https://resources.github.com/learn/pathways"> Learning Pathways <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-link-external HeaderMenu-external-icon color-fg-subtle"> <path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path> </svg> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary Link--external" target="_blank" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;events_amp_webinars&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;events_amp_webinars_link_resources_navbar&quot;}" href="https://resources.github.com"> Events &amp; Webinars <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-link-external HeaderMenu-external-icon color-fg-subtle"> <path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path> </svg> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;ebooks_amp_whitepapers&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;ebooks_amp_whitepapers_link_resources_navbar&quot;}" href="https://github.com/resources/whitepapers"> Ebooks &amp; Whitepapers </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;customer_stories&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;customer_stories_link_resources_navbar&quot;}" href="https://github.com/customer-stories"> Customer Stories </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary Link--external" target="_blank" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;partners&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;partners_link_resources_navbar&quot;}" href="https://partner.github.com"> Partners <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-link-external HeaderMenu-external-icon color-fg-subtle"> <path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path> </svg> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;executive_insights&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;executive_insights_link_resources_navbar&quot;}" href="https://github.com/solutions/executive-insights"> Executive Insights </a></li> </ul> </div> </div> </div> </li> <li class="HeaderMenu-item position-relative flex-wrap flex-justify-between flex-items-center d-block d-lg-flex flex-lg-nowrap flex-lg-items-center js-details-container js-header-menu-item"> <button type="button" class="HeaderMenu-link border-0 width-full width-lg-auto px-0 px-lg-2 py-lg-2 no-wrap d-flex flex-items-center flex-justify-between js-details-target" aria-expanded="false"> Open Source <svg opacity="0.5" aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-chevron-down HeaderMenu-icon ml-1"> <path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path> </svg> </button> <div class="HeaderMenu-dropdown dropdown-menu rounded m-0 p-0 pt-2 pt-lg-4 position-relative position-lg-absolute left-0 left-lg-n3 pb-2 pb-lg-4 px-lg-4"> <div class="HeaderMenu-column"> <div class="border-bottom pb-3 pb-lg-0 pb-lg-3 mb-3 mb-lg-0 mb-lg-3"> <ul class="list-style-none f5" > <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;github_sponsors&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;github_sponsors_link_open_source_navbar&quot;}" href="/sponsors"> <div> <div class="color-fg-default h4">GitHub Sponsors</div> Fund open source developers </div> </a></li> </ul> </div> <div class="border-bottom pb-3 pb-lg-0 pb-lg-3 mb-3 mb-lg-0 mb-lg-3"> <ul class="list-style-none f5" > <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;the_readme_project&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;the_readme_project_link_open_source_navbar&quot;}" href="https://github.com/readme"> <div> <div class="color-fg-default h4">The ReadME Project</div> GitHub community articles </div> </a></li> </ul> </div> <div class="border-bottom pb-3 pb-lg-0 border-bottom-0"> <span class="d-block h4 color-fg-default my-1" id="open-source-repositories-heading">Repositories</span> <ul class="list-style-none f5" aria-labelledby="open-source-repositories-heading"> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;topics&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;topics_link_open_source_navbar&quot;}" href="https://github.com/topics"> Topics </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;trending&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;trending_link_open_source_navbar&quot;}" href="https://github.com/trending"> Trending </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;collections&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;collections_link_open_source_navbar&quot;}" href="https://github.com/collections"> Collections </a></li> </ul> </div> </div> </div> </li> <li class="HeaderMenu-item position-relative flex-wrap flex-justify-between flex-items-center d-block d-lg-flex flex-lg-nowrap flex-lg-items-center js-details-container js-header-menu-item"> <button type="button" class="HeaderMenu-link border-0 width-full width-lg-auto px-0 px-lg-2 py-lg-2 no-wrap d-flex flex-items-center flex-justify-between js-details-target" aria-expanded="false"> Enterprise <svg opacity="0.5" aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-chevron-down HeaderMenu-icon ml-1"> <path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path> </svg> </button> <div class="HeaderMenu-dropdown dropdown-menu rounded m-0 p-0 pt-2 pt-lg-4 position-relative position-lg-absolute left-0 left-lg-n3 pb-2 pb-lg-4 px-lg-4"> <div class="HeaderMenu-column"> <div class="border-bottom pb-3 pb-lg-0 pb-lg-3 mb-3 mb-lg-0 mb-lg-3"> <ul class="list-style-none f5" > <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;enterprise_platform&quot;,&quot;context&quot;:&quot;enterprise&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;enterprise_platform_link_enterprise_navbar&quot;}" href="/enterprise"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-stack color-fg-subtle mr-3"> <path d="M11.063 1.456a1.749 1.749 0 0 1 1.874 0l8.383 5.316a1.751 1.751 0 0 1 0 2.956l-8.383 5.316a1.749 1.749 0 0 1-1.874 0L2.68 9.728a1.751 1.751 0 0 1 0-2.956Zm1.071 1.267a.25.25 0 0 0-.268 0L3.483 8.039a.25.25 0 0 0 0 .422l8.383 5.316a.25.25 0 0 0 .268 0l8.383-5.316a.25.25 0 0 0 0-.422Z"></path><path d="M1.867 12.324a.75.75 0 0 1 1.035-.232l8.964 5.685a.25.25 0 0 0 .268 0l8.964-5.685a.75.75 0 0 1 .804 1.267l-8.965 5.685a1.749 1.749 0 0 1-1.874 0l-8.965-5.685a.75.75 0 0 1-.231-1.035Z"></path><path d="M1.867 16.324a.75.75 0 0 1 1.035-.232l8.964 5.685a.25.25 0 0 0 .268 0l8.964-5.685a.75.75 0 0 1 .804 1.267l-8.965 5.685a1.749 1.749 0 0 1-1.874 0l-8.965-5.685a.75.75 0 0 1-.231-1.035Z"></path> </svg> <div> <div class="color-fg-default h4">Enterprise platform</div> AI-powered developer platform </div> </a></li> </ul> </div> <div class="border-bottom pb-3 pb-lg-0 border-bottom-0"> <span class="d-block h4 color-fg-default my-1" id="enterprise-available-add-ons-heading">Available add-ons</span> <ul class="list-style-none f5" aria-labelledby="enterprise-available-add-ons-heading"> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description pb-lg-3" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;advanced_security&quot;,&quot;context&quot;:&quot;enterprise&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;advanced_security_link_enterprise_navbar&quot;}" href="https://github.com/enterprise/advanced-security"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-shield-check color-fg-subtle mr-3"> <path d="M16.53 9.78a.75.75 0 0 0-1.06-1.06L11 13.19l-1.97-1.97a.75.75 0 0 0-1.06 1.06l2.5 2.5a.75.75 0 0 0 1.06 0l5-5Z"></path><path d="m12.54.637 8.25 2.675A1.75 1.75 0 0 1 22 4.976V10c0 6.19-3.771 10.704-9.401 12.83a1.704 1.704 0 0 1-1.198 0C5.77 20.705 2 16.19 2 10V4.976c0-.758.489-1.43 1.21-1.664L11.46.637a1.748 1.748 0 0 1 1.08 0Zm-.617 1.426-8.25 2.676a.249.249 0 0 0-.173.237V10c0 5.46 3.28 9.483 8.43 11.426a.199.199 0 0 0 .14 0C17.22 19.483 20.5 15.461 20.5 10V4.976a.25.25 0 0 0-.173-.237l-8.25-2.676a.253.253 0 0 0-.154 0Z"></path> </svg> <div> <div class="color-fg-default h4">Advanced Security</div> Enterprise-grade security features </div> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description pb-lg-3" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;copilot_for_business&quot;,&quot;context&quot;:&quot;enterprise&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;copilot_for_business_link_enterprise_navbar&quot;}" href="/features/copilot/copilot-business"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-copilot color-fg-subtle mr-3"> <path d="M23.922 16.992c-.861 1.495-5.859 5.023-11.922 5.023-6.063 0-11.061-3.528-11.922-5.023A.641.641 0 0 1 0 16.736v-2.869a.841.841 0 0 1 .053-.22c.372-.935 1.347-2.292 2.605-2.656.167-.429.414-1.055.644-1.517a10.195 10.195 0 0 1-.052-1.086c0-1.331.282-2.499 1.132-3.368.397-.406.89-.717 1.474-.952 1.399-1.136 3.392-2.093 6.122-2.093 2.731 0 4.767.957 6.166 2.093.584.235 1.077.546 1.474.952.85.869 1.132 2.037 1.132 3.368 0 .368-.014.733-.052 1.086.23.462.477 1.088.644 1.517 1.258.364 2.233 1.721 2.605 2.656a.832.832 0 0 1 .053.22v2.869a.641.641 0 0 1-.078.256ZM12.172 11h-.344a4.323 4.323 0 0 1-.355.508C10.703 12.455 9.555 13 7.965 13c-1.725 0-2.989-.359-3.782-1.259a2.005 2.005 0 0 1-.085-.104L4 11.741v6.585c1.435.779 4.514 2.179 8 2.179 3.486 0 6.565-1.4 8-2.179v-6.585l-.098-.104s-.033.045-.085.104c-.793.9-2.057 1.259-3.782 1.259-1.59 0-2.738-.545-3.508-1.492a4.323 4.323 0 0 1-.355-.508h-.016.016Zm.641-2.935c.136 1.057.403 1.913.878 2.497.442.544 1.134.938 2.344.938 1.573 0 2.292-.337 2.657-.751.384-.435.558-1.15.558-2.361 0-1.14-.243-1.847-.705-2.319-.477-.488-1.319-.862-2.824-1.025-1.487-.161-2.192.138-2.533.529-.269.307-.437.808-.438 1.578v.021c0 .265.021.562.063.893Zm-1.626 0c.042-.331.063-.628.063-.894v-.02c-.001-.77-.169-1.271-.438-1.578-.341-.391-1.046-.69-2.533-.529-1.505.163-2.347.537-2.824 1.025-.462.472-.705 1.179-.705 2.319 0 1.211.175 1.926.558 2.361.365.414 1.084.751 2.657.751 1.21 0 1.902-.394 2.344-.938.475-.584.742-1.44.878-2.497Z"></path><path d="M14.5 14.25a1 1 0 0 1 1 1v2a1 1 0 0 1-2 0v-2a1 1 0 0 1 1-1Zm-5 0a1 1 0 0 1 1 1v2a1 1 0 0 1-2 0v-2a1 1 0 0 1 1-1Z"></path> </svg> <div> <div class="color-fg-default h4">Copilot for business</div> Enterprise-grade AI features </div> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;premium_support&quot;,&quot;context&quot;:&quot;enterprise&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;premium_support_link_enterprise_navbar&quot;}" href="/premium-support"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-comment-discussion color-fg-subtle mr-3"> <path d="M1.75 1h12.5c.966 0 1.75.784 1.75 1.75v9.5A1.75 1.75 0 0 1 14.25 14H8.061l-2.574 2.573A1.458 1.458 0 0 1 3 15.543V14H1.75A1.75 1.75 0 0 1 0 12.25v-9.5C0 1.784.784 1 1.75 1ZM1.5 2.75v9.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h6.5a.25.25 0 0 0 .25-.25v-9.5a.25.25 0 0 0-.25-.25H1.75a.25.25 0 0 0-.25.25Z"></path><path d="M22.5 8.75a.25.25 0 0 0-.25-.25h-3.5a.75.75 0 0 1 0-1.5h3.5c.966 0 1.75.784 1.75 1.75v9.5A1.75 1.75 0 0 1 22.25 20H21v1.543a1.457 1.457 0 0 1-2.487 1.03L15.939 20H10.75A1.75 1.75 0 0 1 9 18.25v-1.465a.75.75 0 0 1 1.5 0v1.465c0 .138.112.25.25.25h5.5a.75.75 0 0 1 .53.22l2.72 2.72v-2.19a.75.75 0 0 1 .75-.75h2a.25.25 0 0 0 .25-.25v-9.5Z"></path> </svg> <div> <div class="color-fg-default h4">Premium Support</div> Enterprise-grade 24/7 support </div> </a></li> </ul> </div> </div> </div> </li> <li class="HeaderMenu-item position-relative flex-wrap flex-justify-between flex-items-center d-block d-lg-flex flex-lg-nowrap flex-lg-items-center js-details-container js-header-menu-item"> <a class="HeaderMenu-link no-underline px-0 px-lg-2 py-3 py-lg-2 d-block d-lg-inline-block" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;pricing&quot;,&quot;context&quot;:&quot;global&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;pricing_link_global_navbar&quot;}" href="https://github.com/pricing">Pricing</a> </li> </ul> </nav> <div class="d-flex flex-column flex-lg-row width-full flex-justify-end flex-lg-items-center text-center mt-3 mt-lg-0 text-lg-left ml-lg-3"> <qbsearch-input class="search-input" data-scope="repo:tqdm/tqdm" data-custom-scopes-path="/search/custom_scopes" data-delete-custom-scopes-csrf="X4jg-qvF1bIliO1ilsQNYpPdp1pCt36zElnzVabxtU-aov9GilbsHdjPtXV1F4K5hsxErVzf2eliDNdcxA0q1g" data-max-custom-scopes="10" data-header-redesign-enabled="false" data-initial-value="" data-blackbird-suggestions-path="/search/suggestions" data-jump-to-suggestions-path="/_graphql/GetSuggestedNavigationDestinations" data-current-repository="tqdm/tqdm" data-current-org="tqdm" data-current-owner="" data-logged-in="false" data-copilot-chat-enabled="false" data-nl-search-enabled="false" data-retain-scroll-position="true"> <div class="search-input-container search-with-dialog position-relative d-flex flex-row flex-items-center mr-4 rounded" data-action="click:qbsearch-input#searchInputContainerClicked" > <button type="button" class="header-search-button placeholder input-button form-control d-flex flex-1 flex-self-stretch flex-items-center no-wrap width-full py-0 pl-2 pr-0 text-left border-0 box-shadow-none" data-target="qbsearch-input.inputButton" aria-label="Search or jump to…" aria-haspopup="dialog" placeholder="Search or jump to..." data-hotkey=s,/ autocapitalize="off" data-analytics-event="{&quot;location&quot;:&quot;navbar&quot;,&quot;action&quot;:&quot;searchbar&quot;,&quot;context&quot;:&quot;global&quot;,&quot;tag&quot;:&quot;input&quot;,&quot;label&quot;:&quot;searchbar_input_global_navbar&quot;}" data-action="click:qbsearch-input#handleExpand" > <div class="mr-2 color-fg-muted"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-search"> <path d="M10.68 11.74a6 6 0 0 1-7.922-8.982 6 6 0 0 1 8.982 7.922l3.04 3.04a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215ZM11.5 7a4.499 4.499 0 1 0-8.997 0A4.499 4.499 0 0 0 11.5 7Z"></path> </svg> </div> <span class="flex-1" data-target="qbsearch-input.inputButtonText">Search or jump to...</span> <div class="d-flex" data-target="qbsearch-input.hotkeyIndicator"> <svg xmlns="http://www.w3.org/2000/svg" width="22" height="20" aria-hidden="true" class="mr-1"><path fill="none" stroke="#979A9C" opacity=".4" d="M3.5.5h12c1.7 0 3 1.3 3 3v13c0 1.7-1.3 3-3 3h-12c-1.7 0-3-1.3-3-3v-13c0-1.7 1.3-3 3-3z"></path><path fill="#979A9C" d="M11.8 6L8 15.1h-.9L10.8 6h1z"></path></svg> </div> </button> <input type="hidden" name="type" class="js-site-search-type-field"> <div class="Overlay--hidden " data-modal-dialog-overlay> <modal-dialog data-action="close:qbsearch-input#handleClose cancel:qbsearch-input#handleClose" data-target="qbsearch-input.searchSuggestionsDialog" role="dialog" id="search-suggestions-dialog" aria-modal="true" aria-labelledby="search-suggestions-dialog-header" data-view-component="true" class="Overlay Overlay--width-large Overlay--height-auto"> <h1 id="search-suggestions-dialog-header" class="sr-only">Search code, repositories, users, issues, pull requests...</h1> <div class="Overlay-body Overlay-body--paddingNone"> <div data-view-component="true"> <div class="search-suggestions position-fixed width-full color-shadow-large border color-fg-default color-bg-default overflow-hidden d-flex flex-column query-builder-container" style="border-radius: 12px;" data-target="qbsearch-input.queryBuilderContainer" hidden > <!-- '"` --><!-- </textarea></xmp> --></option></form><form id="query-builder-test-form" action="" accept-charset="UTF-8" method="get"> <query-builder data-target="qbsearch-input.queryBuilder" id="query-builder-query-builder-test" data-filter-key=":" data-view-component="true" class="QueryBuilder search-query-builder"> <div class="FormControl FormControl--fullWidth"> <label id="query-builder-test-label" for="query-builder-test" class="FormControl-label sr-only"> Search </label> <div class="QueryBuilder-StyledInput width-fit " data-target="query-builder.styledInput" > <span id="query-builder-test-leadingvisual-wrap" class="FormControl-input-leadingVisualWrap QueryBuilder-leadingVisualWrap"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-search FormControl-input-leadingVisual"> <path d="M10.68 11.74a6 6 0 0 1-7.922-8.982 6 6 0 0 1 8.982 7.922l3.04 3.04a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215ZM11.5 7a4.499 4.499 0 1 0-8.997 0A4.499 4.499 0 0 0 11.5 7Z"></path> </svg> </span> <div data-target="query-builder.styledInputContainer" class="QueryBuilder-StyledInputContainer"> <div aria-hidden="true" class="QueryBuilder-StyledInputContent" data-target="query-builder.styledInputContent" ></div> <div class="QueryBuilder-InputWrapper"> <div aria-hidden="true" class="QueryBuilder-Sizer" data-target="query-builder.sizer"></div> <input id="query-builder-test" name="query-builder-test" value="" autocomplete="off" type="text" role="combobox" spellcheck="false" aria-expanded="false" aria-describedby="validation-bfa3ffdc-fabd-4918-9dcc-49ac797cf557" data-target="query-builder.input" data-action=" input:query-builder#inputChange blur:query-builder#inputBlur keydown:query-builder#inputKeydown focus:query-builder#inputFocus " data-view-component="true" class="FormControl-input QueryBuilder-Input FormControl-medium" /> </div> </div> <span class="sr-only" id="query-builder-test-clear">Clear</span> <button role="button" id="query-builder-test-clear-button" aria-labelledby="query-builder-test-clear query-builder-test-label" data-target="query-builder.clearButton" data-action=" click:query-builder#clear focus:query-builder#clearButtonFocus blur:query-builder#clearButtonBlur " variant="small" hidden="hidden" type="button" data-view-component="true" class="Button Button--iconOnly Button--invisible Button--medium mr-1 px-2 py-0 d-flex flex-items-center rounded-1 color-fg-muted"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x-circle-fill Button-visual"> <path d="M2.343 13.657A8 8 0 1 1 13.658 2.343 8 8 0 0 1 2.343 13.657ZM6.03 4.97a.751.751 0 0 0-1.042.018.751.751 0 0 0-.018 1.042L6.94 8 4.97 9.97a.749.749 0 0 0 .326 1.275.749.749 0 0 0 .734-.215L8 9.06l1.97 1.97a.749.749 0 0 0 1.275-.326.749.749 0 0 0-.215-.734L9.06 8l1.97-1.97a.749.749 0 0 0-.326-1.275.749.749 0 0 0-.734.215L8 6.94Z"></path> </svg> </button> </div> <template id="search-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-search"> <path d="M10.68 11.74a6 6 0 0 1-7.922-8.982 6 6 0 0 1 8.982 7.922l3.04 3.04a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215ZM11.5 7a4.499 4.499 0 1 0-8.997 0A4.499 4.499 0 0 0 11.5 7Z"></path> </svg> </template> <template id="code-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-code"> <path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"></path> </svg> </template> <template id="file-code-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-file-code"> <path d="M4 1.75C4 .784 4.784 0 5.75 0h5.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v8.586A1.75 1.75 0 0 1 14.25 15h-9a.75.75 0 0 1 0-1.5h9a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 10 4.25V1.5H5.75a.25.25 0 0 0-.25.25v2.5a.75.75 0 0 1-1.5 0Zm1.72 4.97a.75.75 0 0 1 1.06 0l2 2a.75.75 0 0 1 0 1.06l-2 2a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734l1.47-1.47-1.47-1.47a.75.75 0 0 1 0-1.06ZM3.28 7.78 1.81 9.25l1.47 1.47a.751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018l-2-2a.75.75 0 0 1 0-1.06l2-2a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Zm8.22-6.218V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path> </svg> </template> <template id="history-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-history"> <path d="m.427 1.927 1.215 1.215a8.002 8.002 0 1 1-1.6 5.685.75.75 0 1 1 1.493-.154 6.5 6.5 0 1 0 1.18-4.458l1.358 1.358A.25.25 0 0 1 3.896 6H.25A.25.25 0 0 1 0 5.75V2.104a.25.25 0 0 1 .427-.177ZM7.75 4a.75.75 0 0 1 .75.75v2.992l2.028.812a.75.75 0 0 1-.557 1.392l-2.5-1A.751.751 0 0 1 7 8.25v-3.5A.75.75 0 0 1 7.75 4Z"></path> </svg> </template> <template id="repo-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-repo"> <path d="M2 2.5A2.5 2.5 0 0 1 4.5 0h8.75a.75.75 0 0 1 .75.75v12.5a.75.75 0 0 1-.75.75h-2.5a.75.75 0 0 1 0-1.5h1.75v-2h-8a1 1 0 0 0-.714 1.7.75.75 0 1 1-1.072 1.05A2.495 2.495 0 0 1 2 11.5Zm10.5-1h-8a1 1 0 0 0-1 1v6.708A2.486 2.486 0 0 1 4.5 9h8ZM5 12.25a.25.25 0 0 1 .25-.25h3.5a.25.25 0 0 1 .25.25v3.25a.25.25 0 0 1-.4.2l-1.45-1.087a.249.249 0 0 0-.3 0L5.4 15.7a.25.25 0 0 1-.4-.2Z"></path> </svg> </template> <template id="bookmark-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-bookmark"> <path d="M3 2.75C3 1.784 3.784 1 4.75 1h6.5c.966 0 1.75.784 1.75 1.75v11.5a.75.75 0 0 1-1.227.579L8 11.722l-3.773 3.107A.751.751 0 0 1 3 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v9.91l3.023-2.489a.75.75 0 0 1 .954 0l3.023 2.49V2.75a.25.25 0 0 0-.25-.25Z"></path> </svg> </template> <template id="plus-circle-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-plus-circle"> <path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Zm7.25-3.25v2.5h2.5a.75.75 0 0 1 0 1.5h-2.5v2.5a.75.75 0 0 1-1.5 0v-2.5h-2.5a.75.75 0 0 1 0-1.5h2.5v-2.5a.75.75 0 0 1 1.5 0Z"></path> </svg> </template> <template id="circle-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-dot-fill"> <path d="M8 4a4 4 0 1 1 0 8 4 4 0 0 1 0-8Z"></path> </svg> </template> <template id="trash-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-trash"> <path d="M11 1.75V3h2.25a.75.75 0 0 1 0 1.5H2.75a.75.75 0 0 1 0-1.5H5V1.75C5 .784 5.784 0 6.75 0h2.5C10.216 0 11 .784 11 1.75ZM4.496 6.675l.66 6.6a.25.25 0 0 0 .249.225h5.19a.25.25 0 0 0 .249-.225l.66-6.6a.75.75 0 0 1 1.492.149l-.66 6.6A1.748 1.748 0 0 1 10.595 15h-5.19a1.75 1.75 0 0 1-1.741-1.575l-.66-6.6a.75.75 0 1 1 1.492-.15ZM6.5 1.75V3h3V1.75a.25.25 0 0 0-.25-.25h-2.5a.25.25 0 0 0-.25.25Z"></path> </svg> </template> <template id="team-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-people"> <path d="M2 5.5a3.5 3.5 0 1 1 5.898 2.549 5.508 5.508 0 0 1 3.034 4.084.75.75 0 1 1-1.482.235 4 4 0 0 0-7.9 0 .75.75 0 0 1-1.482-.236A5.507 5.507 0 0 1 3.102 8.05 3.493 3.493 0 0 1 2 5.5ZM11 4a3.001 3.001 0 0 1 2.22 5.018 5.01 5.01 0 0 1 2.56 3.012.749.749 0 0 1-.885.954.752.752 0 0 1-.549-.514 3.507 3.507 0 0 0-2.522-2.372.75.75 0 0 1-.574-.73v-.352a.75.75 0 0 1 .416-.672A1.5 1.5 0 0 0 11 5.5.75.75 0 0 1 11 4Zm-5.5-.5a2 2 0 1 0-.001 3.999A2 2 0 0 0 5.5 3.5Z"></path> </svg> </template> <template id="project-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-project"> <path d="M1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25V1.75C0 .784.784 0 1.75 0ZM1.5 1.75v12.5c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25V1.75a.25.25 0 0 0-.25-.25H1.75a.25.25 0 0 0-.25.25ZM11.75 3a.75.75 0 0 1 .75.75v7.5a.75.75 0 0 1-1.5 0v-7.5a.75.75 0 0 1 .75-.75Zm-8.25.75a.75.75 0 0 1 1.5 0v5.5a.75.75 0 0 1-1.5 0ZM8 3a.75.75 0 0 1 .75.75v3.5a.75.75 0 0 1-1.5 0v-3.5A.75.75 0 0 1 8 3Z"></path> </svg> </template> <template id="pencil-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-pencil"> <path d="M11.013 1.427a1.75 1.75 0 0 1 2.474 0l1.086 1.086a1.75 1.75 0 0 1 0 2.474l-8.61 8.61c-.21.21-.47.364-.756.445l-3.251.93a.75.75 0 0 1-.927-.928l.929-3.25c.081-.286.235-.547.445-.758l8.61-8.61Zm.176 4.823L9.75 4.81l-6.286 6.287a.253.253 0 0 0-.064.108l-.558 1.953 1.953-.558a.253.253 0 0 0 .108-.064Zm1.238-3.763a.25.25 0 0 0-.354 0L10.811 3.75l1.439 1.44 1.263-1.263a.25.25 0 0 0 0-.354Z"></path> </svg> </template> <template id="copilot-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-copilot"> <path d="M7.998 15.035c-4.562 0-7.873-2.914-7.998-3.749V9.338c.085-.628.677-1.686 1.588-2.065.013-.07.024-.143.036-.218.029-.183.06-.384.126-.612-.201-.508-.254-1.084-.254-1.656 0-.87.128-1.769.693-2.484.579-.733 1.494-1.124 2.724-1.261 1.206-.134 2.262.034 2.944.765.05.053.096.108.139.165.044-.057.094-.112.143-.165.682-.731 1.738-.899 2.944-.765 1.23.137 2.145.528 2.724 1.261.566.715.693 1.614.693 2.484 0 .572-.053 1.148-.254 1.656.066.228.098.429.126.612.012.076.024.148.037.218.924.385 1.522 1.471 1.591 2.095v1.872c0 .766-3.351 3.795-8.002 3.795Zm0-1.485c2.28 0 4.584-1.11 5.002-1.433V7.862l-.023-.116c-.49.21-1.075.291-1.727.291-1.146 0-2.059-.327-2.71-.991A3.222 3.222 0 0 1 8 6.303a3.24 3.24 0 0 1-.544.743c-.65.664-1.563.991-2.71.991-.652 0-1.236-.081-1.727-.291l-.023.116v4.255c.419.323 2.722 1.433 5.002 1.433ZM6.762 2.83c-.193-.206-.637-.413-1.682-.297-1.019.113-1.479.404-1.713.7-.247.312-.369.789-.369 1.554 0 .793.129 1.171.308 1.371.162.181.519.379 1.442.379.853 0 1.339-.235 1.638-.54.315-.322.527-.827.617-1.553.117-.935-.037-1.395-.241-1.614Zm4.155-.297c-1.044-.116-1.488.091-1.681.297-.204.219-.359.679-.242 1.614.091.726.303 1.231.618 1.553.299.305.784.54 1.638.54.922 0 1.28-.198 1.442-.379.179-.2.308-.578.308-1.371 0-.765-.123-1.242-.37-1.554-.233-.296-.693-.587-1.713-.7Z"></path><path d="M6.25 9.037a.75.75 0 0 1 .75.75v1.501a.75.75 0 0 1-1.5 0V9.787a.75.75 0 0 1 .75-.75Zm4.25.75v1.501a.75.75 0 0 1-1.5 0V9.787a.75.75 0 0 1 1.5 0Z"></path> </svg> </template> <template id="copilot-error-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-copilot-error"> <path d="M16 11.24c0 .112-.072.274-.21.467L13 9.688V7.862l-.023-.116c-.49.21-1.075.291-1.727.291-.198 0-.388-.009-.571-.029L6.833 5.226a4.01 4.01 0 0 0 .17-.782c.117-.935-.037-1.395-.241-1.614-.193-.206-.637-.413-1.682-.297-.683.076-1.115.231-1.395.415l-1.257-.91c.579-.564 1.413-.877 2.485-.996 1.206-.134 2.262.034 2.944.765.05.053.096.108.139.165.044-.057.094-.112.143-.165.682-.731 1.738-.899 2.944-.765 1.23.137 2.145.528 2.724 1.261.566.715.693 1.614.693 2.484 0 .572-.053 1.148-.254 1.656.066.228.098.429.126.612.012.076.024.148.037.218.924.385 1.522 1.471 1.591 2.095Zm-5.083-8.707c-1.044-.116-1.488.091-1.681.297-.204.219-.359.679-.242 1.614.091.726.303 1.231.618 1.553.299.305.784.54 1.638.54.922 0 1.28-.198 1.442-.379.179-.2.308-.578.308-1.371 0-.765-.123-1.242-.37-1.554-.233-.296-.693-.587-1.713-.7Zm2.511 11.074c-1.393.776-3.272 1.428-5.43 1.428-4.562 0-7.873-2.914-7.998-3.749V9.338c.085-.628.677-1.686 1.588-2.065.013-.07.024-.143.036-.218.029-.183.06-.384.126-.612-.18-.455-.241-.963-.252-1.475L.31 4.107A.747.747 0 0 1 0 3.509V3.49a.748.748 0 0 1 .625-.73c.156-.026.306.047.435.139l14.667 10.578a.592.592 0 0 1 .227.264.752.752 0 0 1 .046.249v.022a.75.75 0 0 1-1.19.596Zm-1.367-.991L5.635 7.964a5.128 5.128 0 0 1-.889.073c-.652 0-1.236-.081-1.727-.291l-.023.116v4.255c.419.323 2.722 1.433 5.002 1.433 1.539 0 3.089-.505 4.063-.934Z"></path> </svg> </template> <template id="workflow-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-workflow"> <path d="M0 1.75C0 .784.784 0 1.75 0h3.5C6.216 0 7 .784 7 1.75v3.5A1.75 1.75 0 0 1 5.25 7H4v4a1 1 0 0 0 1 1h4v-1.25C9 9.784 9.784 9 10.75 9h3.5c.966 0 1.75.784 1.75 1.75v3.5A1.75 1.75 0 0 1 14.25 16h-3.5A1.75 1.75 0 0 1 9 14.25v-.75H5A2.5 2.5 0 0 1 2.5 11V7h-.75A1.75 1.75 0 0 1 0 5.25Zm1.75-.25a.25.25 0 0 0-.25.25v3.5c0 .138.112.25.25.25h3.5a.25.25 0 0 0 .25-.25v-3.5a.25.25 0 0 0-.25-.25Zm9 9a.25.25 0 0 0-.25.25v3.5c0 .138.112.25.25.25h3.5a.25.25 0 0 0 .25-.25v-3.5a.25.25 0 0 0-.25-.25Z"></path> </svg> </template> <template id="book-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-book"> <path d="M0 1.75A.75.75 0 0 1 .75 1h4.253c1.227 0 2.317.59 3 1.501A3.743 3.743 0 0 1 11.006 1h4.245a.75.75 0 0 1 .75.75v10.5a.75.75 0 0 1-.75.75h-4.507a2.25 2.25 0 0 0-1.591.659l-.622.621a.75.75 0 0 1-1.06 0l-.622-.621A2.25 2.25 0 0 0 5.258 13H.75a.75.75 0 0 1-.75-.75Zm7.251 10.324.004-5.073-.002-2.253A2.25 2.25 0 0 0 5.003 2.5H1.5v9h3.757a3.75 3.75 0 0 1 1.994.574ZM8.755 4.75l-.004 7.322a3.752 3.752 0 0 1 1.992-.572H14.5v-9h-3.495a2.25 2.25 0 0 0-2.25 2.25Z"></path> </svg> </template> <template id="code-review-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-code-review"> <path d="M1.75 1h12.5c.966 0 1.75.784 1.75 1.75v8.5A1.75 1.75 0 0 1 14.25 13H8.061l-2.574 2.573A1.458 1.458 0 0 1 3 14.543V13H1.75A1.75 1.75 0 0 1 0 11.25v-8.5C0 1.784.784 1 1.75 1ZM1.5 2.75v8.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h6.5a.25.25 0 0 0 .25-.25v-8.5a.25.25 0 0 0-.25-.25H1.75a.25.25 0 0 0-.25.25Zm5.28 1.72a.75.75 0 0 1 0 1.06L5.31 7l1.47 1.47a.751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018l-2-2a.75.75 0 0 1 0-1.06l2-2a.75.75 0 0 1 1.06 0Zm2.44 0a.75.75 0 0 1 1.06 0l2 2a.75.75 0 0 1 0 1.06l-2 2a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L10.69 7 9.22 5.53a.75.75 0 0 1 0-1.06Z"></path> </svg> </template> <template id="codespaces-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-codespaces"> <path d="M0 11.25c0-.966.784-1.75 1.75-1.75h12.5c.966 0 1.75.784 1.75 1.75v3A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25Zm2-9.5C2 .784 2.784 0 3.75 0h8.5C13.216 0 14 .784 14 1.75v5a1.75 1.75 0 0 1-1.75 1.75h-8.5A1.75 1.75 0 0 1 2 6.75Zm1.75-.25a.25.25 0 0 0-.25.25v5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-5a.25.25 0 0 0-.25-.25Zm-2 9.5a.25.25 0 0 0-.25.25v3c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25v-3a.25.25 0 0 0-.25-.25Z"></path><path d="M7 12.75a.75.75 0 0 1 .75-.75h4.5a.75.75 0 0 1 0 1.5h-4.5a.75.75 0 0 1-.75-.75Zm-4 0a.75.75 0 0 1 .75-.75h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1-.75-.75Z"></path> </svg> </template> <template id="comment-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-comment"> <path d="M1 2.75C1 1.784 1.784 1 2.75 1h10.5c.966 0 1.75.784 1.75 1.75v7.5A1.75 1.75 0 0 1 13.25 12H9.06l-2.573 2.573A1.458 1.458 0 0 1 4 13.543V12H2.75A1.75 1.75 0 0 1 1 10.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h4.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path> </svg> </template> <template id="comment-discussion-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-comment-discussion"> <path d="M1.75 1h8.5c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0 1 10.25 10H7.061l-2.574 2.573A1.458 1.458 0 0 1 2 11.543V10h-.25A1.75 1.75 0 0 1 0 8.25v-5.5C0 1.784.784 1 1.75 1ZM1.5 2.75v5.5c0 .138.112.25.25.25h1a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h3.5a.25.25 0 0 0 .25-.25v-5.5a.25.25 0 0 0-.25-.25h-8.5a.25.25 0 0 0-.25.25Zm13 2a.25.25 0 0 0-.25-.25h-.5a.75.75 0 0 1 0-1.5h.5c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0 1 14.25 12H14v1.543a1.458 1.458 0 0 1-2.487 1.03L9.22 12.28a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215l2.22 2.22v-2.19a.75.75 0 0 1 .75-.75h1a.25.25 0 0 0 .25-.25Z"></path> </svg> </template> <template id="organization-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-organization"> <path d="M1.75 16A1.75 1.75 0 0 1 0 14.25V1.75C0 .784.784 0 1.75 0h8.5C11.216 0 12 .784 12 1.75v12.5c0 .085-.006.168-.018.25h2.268a.25.25 0 0 0 .25-.25V8.285a.25.25 0 0 0-.111-.208l-1.055-.703a.749.749 0 1 1 .832-1.248l1.055.703c.487.325.779.871.779 1.456v5.965A1.75 1.75 0 0 1 14.25 16h-3.5a.766.766 0 0 1-.197-.026c-.099.017-.2.026-.303.026h-3a.75.75 0 0 1-.75-.75V14h-1v1.25a.75.75 0 0 1-.75.75Zm-.25-1.75c0 .138.112.25.25.25H4v-1.25a.75.75 0 0 1 .75-.75h2.5a.75.75 0 0 1 .75.75v1.25h2.25a.25.25 0 0 0 .25-.25V1.75a.25.25 0 0 0-.25-.25h-8.5a.25.25 0 0 0-.25.25ZM3.75 6h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1 0-1.5ZM3 3.75A.75.75 0 0 1 3.75 3h.5a.75.75 0 0 1 0 1.5h-.5A.75.75 0 0 1 3 3.75Zm4 3A.75.75 0 0 1 7.75 6h.5a.75.75 0 0 1 0 1.5h-.5A.75.75 0 0 1 7 6.75ZM7.75 3h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1 0-1.5ZM3 9.75A.75.75 0 0 1 3.75 9h.5a.75.75 0 0 1 0 1.5h-.5A.75.75 0 0 1 3 9.75ZM7.75 9h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1 0-1.5Z"></path> </svg> </template> <template id="rocket-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-rocket"> <path d="M14.064 0h.186C15.216 0 16 .784 16 1.75v.186a8.752 8.752 0 0 1-2.564 6.186l-.458.459c-.314.314-.641.616-.979.904v3.207c0 .608-.315 1.172-.833 1.49l-2.774 1.707a.749.749 0 0 1-1.11-.418l-.954-3.102a1.214 1.214 0 0 1-.145-.125L3.754 9.816a1.218 1.218 0 0 1-.124-.145L.528 8.717a.749.749 0 0 1-.418-1.11l1.71-2.774A1.748 1.748 0 0 1 3.31 4h3.204c.288-.338.59-.665.904-.979l.459-.458A8.749 8.749 0 0 1 14.064 0ZM8.938 3.623h-.002l-.458.458c-.76.76-1.437 1.598-2.02 2.5l-1.5 2.317 2.143 2.143 2.317-1.5c.902-.583 1.74-1.26 2.499-2.02l.459-.458a7.25 7.25 0 0 0 2.123-5.127V1.75a.25.25 0 0 0-.25-.25h-.186a7.249 7.249 0 0 0-5.125 2.123ZM3.56 14.56c-.732.732-2.334 1.045-3.005 1.148a.234.234 0 0 1-.201-.064.234.234 0 0 1-.064-.201c.103-.671.416-2.273 1.15-3.003a1.502 1.502 0 1 1 2.12 2.12Zm6.94-3.935c-.088.06-.177.118-.266.175l-2.35 1.521.548 1.783 1.949-1.2a.25.25 0 0 0 .119-.213ZM3.678 8.116 5.2 5.766c.058-.09.117-.178.176-.266H3.309a.25.25 0 0 0-.213.119l-1.2 1.95ZM12 5a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path> </svg> </template> <template id="shield-check-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-shield-check"> <path d="m8.533.133 5.25 1.68A1.75 1.75 0 0 1 15 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.697 1.697 0 0 1-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.75 1.75 0 0 1 1.217-1.667l5.25-1.68a1.748 1.748 0 0 1 1.066 0Zm-.61 1.429.001.001-5.25 1.68a.251.251 0 0 0-.174.237V7c0 1.36.275 2.666 1.057 3.859.784 1.194 2.121 2.342 4.366 3.298a.196.196 0 0 0 .154 0c2.245-.957 3.582-2.103 4.366-3.297C13.225 9.666 13.5 8.358 13.5 7V3.48a.25.25 0 0 0-.174-.238l-5.25-1.68a.25.25 0 0 0-.153 0ZM11.28 6.28l-3.5 3.5a.75.75 0 0 1-1.06 0l-1.5-1.5a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215l.97.97 2.97-2.97a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path> </svg> </template> <template id="heart-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-heart"> <path d="m8 14.25.345.666a.75.75 0 0 1-.69 0l-.008-.004-.018-.01a7.152 7.152 0 0 1-.31-.17 22.055 22.055 0 0 1-3.434-2.414C2.045 10.731 0 8.35 0 5.5 0 2.836 2.086 1 4.25 1 5.797 1 7.153 1.802 8 3.02 8.847 1.802 10.203 1 11.75 1 13.914 1 16 2.836 16 5.5c0 2.85-2.045 5.231-3.885 6.818a22.066 22.066 0 0 1-3.744 2.584l-.018.01-.006.003h-.002ZM4.25 2.5c-1.336 0-2.75 1.164-2.75 3 0 2.15 1.58 4.144 3.365 5.682A20.58 20.58 0 0 0 8 13.393a20.58 20.58 0 0 0 3.135-2.211C12.92 9.644 14.5 7.65 14.5 5.5c0-1.836-1.414-3-2.75-3-1.373 0-2.609.986-3.029 2.456a.749.749 0 0 1-1.442 0C6.859 3.486 5.623 2.5 4.25 2.5Z"></path> </svg> </template> <template id="server-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-server"> <path d="M1.75 1h12.5c.966 0 1.75.784 1.75 1.75v4c0 .372-.116.717-.314 1 .198.283.314.628.314 1v4a1.75 1.75 0 0 1-1.75 1.75H1.75A1.75 1.75 0 0 1 0 12.75v-4c0-.358.109-.707.314-1a1.739 1.739 0 0 1-.314-1v-4C0 1.784.784 1 1.75 1ZM1.5 2.75v4c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25v-4a.25.25 0 0 0-.25-.25H1.75a.25.25 0 0 0-.25.25Zm.25 5.75a.25.25 0 0 0-.25.25v4c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25v-4a.25.25 0 0 0-.25-.25ZM7 4.75A.75.75 0 0 1 7.75 4h4.5a.75.75 0 0 1 0 1.5h-4.5A.75.75 0 0 1 7 4.75ZM7.75 10h4.5a.75.75 0 0 1 0 1.5h-4.5a.75.75 0 0 1 0-1.5ZM3 4.75A.75.75 0 0 1 3.75 4h.5a.75.75 0 0 1 0 1.5h-.5A.75.75 0 0 1 3 4.75ZM3.75 10h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1 0-1.5Z"></path> </svg> </template> <template id="globe-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-globe"> <path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM5.78 8.75a9.64 9.64 0 0 0 1.363 4.177c.255.426.542.832.857 1.215.245-.296.551-.705.857-1.215A9.64 9.64 0 0 0 10.22 8.75Zm4.44-1.5a9.64 9.64 0 0 0-1.363-4.177c-.307-.51-.612-.919-.857-1.215a9.927 9.927 0 0 0-.857 1.215A9.64 9.64 0 0 0 5.78 7.25Zm-5.944 1.5H1.543a6.507 6.507 0 0 0 4.666 5.5c-.123-.181-.24-.365-.352-.552-.715-1.192-1.437-2.874-1.581-4.948Zm-2.733-1.5h2.733c.144-2.074.866-3.756 1.58-4.948.12-.197.237-.381.353-.552a6.507 6.507 0 0 0-4.666 5.5Zm10.181 1.5c-.144 2.074-.866 3.756-1.58 4.948-.12.197-.237.381-.353.552a6.507 6.507 0 0 0 4.666-5.5Zm2.733-1.5a6.507 6.507 0 0 0-4.666-5.5c.123.181.24.365.353.552.714 1.192 1.436 2.874 1.58 4.948Z"></path> </svg> </template> <template id="issue-opened-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-issue-opened"> <path d="M8 9.5a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path><path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Z"></path> </svg> </template> <template id="device-mobile-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-device-mobile"> <path d="M3.75 0h8.5C13.216 0 14 .784 14 1.75v12.5A1.75 1.75 0 0 1 12.25 16h-8.5A1.75 1.75 0 0 1 2 14.25V1.75C2 .784 2.784 0 3.75 0ZM3.5 1.75v12.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25V1.75a.25.25 0 0 0-.25-.25h-8.5a.25.25 0 0 0-.25.25ZM8 13a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"></path> </svg> </template> <template id="package-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-package"> <path d="m8.878.392 5.25 3.045c.54.314.872.89.872 1.514v6.098a1.75 1.75 0 0 1-.872 1.514l-5.25 3.045a1.75 1.75 0 0 1-1.756 0l-5.25-3.045A1.75 1.75 0 0 1 1 11.049V4.951c0-.624.332-1.201.872-1.514L7.122.392a1.75 1.75 0 0 1 1.756 0ZM7.875 1.69l-4.63 2.685L8 7.133l4.755-2.758-4.63-2.685a.248.248 0 0 0-.25 0ZM2.5 5.677v5.372c0 .09.047.171.125.216l4.625 2.683V8.432Zm6.25 8.271 4.625-2.683a.25.25 0 0 0 .125-.216V5.677L8.75 8.432Z"></path> </svg> </template> <template id="credit-card-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-credit-card"> <path d="M10.75 9a.75.75 0 0 0 0 1.5h1.5a.75.75 0 0 0 0-1.5h-1.5Z"></path><path d="M0 3.75C0 2.784.784 2 1.75 2h12.5c.966 0 1.75.784 1.75 1.75v8.5A1.75 1.75 0 0 1 14.25 14H1.75A1.75 1.75 0 0 1 0 12.25ZM14.5 6.5h-13v5.75c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25Zm0-2.75a.25.25 0 0 0-.25-.25H1.75a.25.25 0 0 0-.25.25V5h13Z"></path> </svg> </template> <template id="play-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-play"> <path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Zm4.879-2.773 4.264 2.559a.25.25 0 0 1 0 .428l-4.264 2.559A.25.25 0 0 1 6 10.559V5.442a.25.25 0 0 1 .379-.215Z"></path> </svg> </template> <template id="gift-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-gift"> <path d="M2 2.75A2.75 2.75 0 0 1 4.75 0c.983 0 1.873.42 2.57 1.232.268.318.497.668.68 1.042.183-.375.411-.725.68-1.044C9.376.42 10.266 0 11.25 0a2.75 2.75 0 0 1 2.45 4h.55c.966 0 1.75.784 1.75 1.75v2c0 .698-.409 1.301-1 1.582v4.918A1.75 1.75 0 0 1 13.25 16H2.75A1.75 1.75 0 0 1 1 14.25V9.332C.409 9.05 0 8.448 0 7.75v-2C0 4.784.784 4 1.75 4h.55c-.192-.375-.3-.8-.3-1.25ZM7.25 9.5H2.5v4.75c0 .138.112.25.25.25h4.5Zm1.5 0v5h4.5a.25.25 0 0 0 .25-.25V9.5Zm0-4V8h5.5a.25.25 0 0 0 .25-.25v-2a.25.25 0 0 0-.25-.25Zm-7 0a.25.25 0 0 0-.25.25v2c0 .138.112.25.25.25h5.5V5.5h-5.5Zm3-4a1.25 1.25 0 0 0 0 2.5h2.309c-.233-.818-.542-1.401-.878-1.793-.43-.502-.915-.707-1.431-.707ZM8.941 4h2.309a1.25 1.25 0 0 0 0-2.5c-.516 0-1 .205-1.43.707-.337.392-.646.975-.879 1.793Z"></path> </svg> </template> <template id="code-square-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-code-square"> <path d="M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25V1.75a.25.25 0 0 0-.25-.25Zm7.47 3.97a.75.75 0 0 1 1.06 0l2 2a.75.75 0 0 1 0 1.06l-2 2a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L10.69 8 9.22 6.53a.75.75 0 0 1 0-1.06ZM6.78 6.53 5.31 8l1.47 1.47a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215l-2-2a.75.75 0 0 1 0-1.06l2-2a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path> </svg> </template> <template id="device-desktop-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-device-desktop"> <path d="M14.25 1c.966 0 1.75.784 1.75 1.75v7.5A1.75 1.75 0 0 1 14.25 12h-3.727c.099 1.041.52 1.872 1.292 2.757A.752.752 0 0 1 11.25 16h-6.5a.75.75 0 0 1-.565-1.243c.772-.885 1.192-1.716 1.292-2.757H1.75A1.75 1.75 0 0 1 0 10.25v-7.5C0 1.784.784 1 1.75 1ZM1.75 2.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25ZM9.018 12H6.982a5.72 5.72 0 0 1-.765 2.5h3.566a5.72 5.72 0 0 1-.765-2.5Z"></path> </svg> </template> <div class="position-relative"> <ul role="listbox" class="ActionListWrap QueryBuilder-ListWrap" aria-label="Suggestions" data-action=" combobox-commit:query-builder#comboboxCommit mousedown:query-builder#resultsMousedown " data-target="query-builder.resultsList" data-persist-list=false id="query-builder-test-results" ></ul> </div> <div class="FormControl-inlineValidation" id="validation-bfa3ffdc-fabd-4918-9dcc-49ac797cf557" hidden="hidden"> <span class="FormControl-inlineValidation--visual"> <svg aria-hidden="true" height="12" viewBox="0 0 12 12" version="1.1" width="12" data-view-component="true" class="octicon octicon-alert-fill"> <path d="M4.855.708c.5-.896 1.79-.896 2.29 0l4.675 8.351a1.312 1.312 0 0 1-1.146 1.954H1.33A1.313 1.313 0 0 1 .183 9.058ZM7 7V3H5v4Zm-1 3a1 1 0 1 0 0-2 1 1 0 0 0 0 2Z"></path> </svg> </span> <span></span> </div> </div> <div data-target="query-builder.screenReaderFeedback" aria-live="polite" aria-atomic="true" class="sr-only"></div> </query-builder></form> <div class="d-flex flex-row color-fg-muted px-3 text-small color-bg-default search-feedback-prompt"> <a target="_blank" href="https://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax" data-view-component="true" class="Link color-fg-accent text-normal ml-2">Search syntax tips</a> <div class="d-flex flex-1"></div> </div> </div> </div> </div> </modal-dialog></div> </div> <div data-action="click:qbsearch-input#retract" class="dark-backdrop position-fixed" hidden data-target="qbsearch-input.darkBackdrop"></div> <div class="color-fg-default"> <dialog-helper> <dialog data-target="qbsearch-input.feedbackDialog" data-action="close:qbsearch-input#handleDialogClose cancel:qbsearch-input#handleDialogClose" id="feedback-dialog" aria-modal="true" aria-labelledby="feedback-dialog-title" aria-describedby="feedback-dialog-description" data-view-component="true" class="Overlay Overlay-whenNarrow Overlay--size-medium Overlay--motion-scaleFade Overlay--disableScroll"> <div data-view-component="true" class="Overlay-header"> <div class="Overlay-headerContentWrap"> <div class="Overlay-titleWrap"> <h1 class="Overlay-title " id="feedback-dialog-title"> Provide feedback </h1> </div> <div class="Overlay-actionWrap"> <button data-close-dialog-id="feedback-dialog" aria-label="Close" type="button" data-view-component="true" class="close-button Overlay-closeButton"><svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x"> <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path> </svg></button> </div> </div> </div> <scrollable-region data-labelled-by="feedback-dialog-title"> <div data-view-component="true" class="Overlay-body"> <!-- '"` --><!-- </textarea></xmp> --></option></form><form id="code-search-feedback-form" data-turbo="false" action="/search/feedback" accept-charset="UTF-8" method="post"><input type="hidden" data-csrf="true" name="authenticity_token" value="Tk7utjWbrUfhF2DQ0Ilsrz81jCyr+eAwyyonrp+FufFZNFiLY8JMorFJg8ieZQ2ZYc3D4Jv/+hW+HPaXKcVV+w==" /> <p>We read every piece of feedback, and take your input very seriously.</p> <textarea name="feedback" class="form-control width-full mb-2" style="height: 120px" id="feedback"></textarea> <input name="include_email" id="include_email" aria-label="Include my email address so I can be contacted" class="form-control mr-2" type="checkbox"> <label for="include_email" style="font-weight: normal">Include my email address so I can be contacted</label> </form></div> </scrollable-region> <div data-view-component="true" class="Overlay-footer Overlay-footer--alignEnd"> <button data-close-dialog-id="feedback-dialog" type="button" data-view-component="true" class="btn"> Cancel </button> <button form="code-search-feedback-form" data-action="click:qbsearch-input#submitFeedback" type="submit" data-view-component="true" class="btn-primary btn"> Submit feedback </button> </div> </dialog></dialog-helper> <custom-scopes data-target="qbsearch-input.customScopesManager"> <dialog-helper> <dialog data-target="custom-scopes.customScopesModalDialog" data-action="close:qbsearch-input#handleDialogClose cancel:qbsearch-input#handleDialogClose" id="custom-scopes-dialog" aria-modal="true" aria-labelledby="custom-scopes-dialog-title" aria-describedby="custom-scopes-dialog-description" data-view-component="true" class="Overlay Overlay-whenNarrow Overlay--size-medium Overlay--motion-scaleFade Overlay--disableScroll"> <div data-view-component="true" class="Overlay-header Overlay-header--divided"> <div class="Overlay-headerContentWrap"> <div class="Overlay-titleWrap"> <h1 class="Overlay-title " id="custom-scopes-dialog-title"> Saved searches </h1> <h2 id="custom-scopes-dialog-description" class="Overlay-description">Use saved searches to filter your results more quickly</h2> </div> <div class="Overlay-actionWrap"> <button data-close-dialog-id="custom-scopes-dialog" aria-label="Close" type="button" data-view-component="true" class="close-button Overlay-closeButton"><svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x"> <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path> </svg></button> </div> </div> </div> <scrollable-region data-labelled-by="custom-scopes-dialog-title"> <div data-view-component="true" class="Overlay-body"> <div data-target="custom-scopes.customScopesModalDialogFlash"></div> <div hidden class="create-custom-scope-form" data-target="custom-scopes.createCustomScopeForm"> <!-- '"` --><!-- </textarea></xmp> --></option></form><form id="custom-scopes-dialog-form" data-turbo="false" action="/search/custom_scopes" accept-charset="UTF-8" method="post"><input type="hidden" data-csrf="true" name="authenticity_token" value="Z7rUfBqF7EqMo8SdiUFB4y6qCfq+aZUI7OmA0KxOfdGaZz2KelHIJhKpLaJ2CAjP3pPeElz7D+trRWrpsIk8cg==" /> <div data-target="custom-scopes.customScopesModalDialogFlash"></div> <input type="hidden" id="custom_scope_id" name="custom_scope_id" data-target="custom-scopes.customScopesIdField"> <div class="form-group"> <label for="custom_scope_name">Name</label> <auto-check src="/search/custom_scopes/check_name" required only-validate-on-blur="false"> <input type="text" name="custom_scope_name" id="custom_scope_name" data-target="custom-scopes.customScopesNameField" class="form-control" autocomplete="off" placeholder="github-ruby" required maxlength="50"> <input type="hidden" data-csrf="true" value="9LqjLLW3druunYwKp78noHHkMZ5iv23OXjviUjakdnhspBQwvQlHb3qGHToLxgB4X1Og67amdEbsV1oitw27nA==" /> </auto-check> </div> <div class="form-group"> <label for="custom_scope_query">Query</label> <input type="text" name="custom_scope_query" id="custom_scope_query" data-target="custom-scopes.customScopesQueryField" class="form-control" autocomplete="off" placeholder="(repo:mona/a OR repo:mona/b) AND lang:python" required maxlength="500"> </div> <p class="text-small color-fg-muted"> To see all available qualifiers, see our <a class="Link--inTextBlock" href="https://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax">documentation</a>. </p> </form> </div> <div data-target="custom-scopes.manageCustomScopesForm"> <div data-target="custom-scopes.list"></div> </div> </div> </scrollable-region> <div data-view-component="true" class="Overlay-footer Overlay-footer--alignEnd Overlay-footer--divided"> <button data-action="click:custom-scopes#customScopesCancel" type="button" data-view-component="true" class="btn"> Cancel </button> <button form="custom-scopes-dialog-form" data-action="click:custom-scopes#customScopesSubmit" data-target="custom-scopes.customScopesSubmitButton" type="submit" data-view-component="true" class="btn-primary btn"> Create saved search </button> </div> </dialog></dialog-helper> </custom-scopes> </div> </qbsearch-input> <div class="position-relative HeaderMenu-link-wrap d-lg-inline-block"> <a href="/login?return_to=https%3A%2F%2Fgithub.com%2Ftqdm%2Ftqdm" class="HeaderMenu-link HeaderMenu-link--sign-in HeaderMenu-button flex-shrink-0 no-underline d-none d-lg-inline-flex border border-lg-0 rounded rounded-lg-0 px-2 py-1" style="margin-left: 12px;" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;site header menu&quot;,&quot;repository_id&quot;:null,&quot;auth_type&quot;:&quot;SIGN_UP&quot;,&quot;originating_url&quot;:&quot;https://github.com/tqdm/tqdm&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="aab289504eacc3d2dec97ba23bfa5f27a424870c594f46292596289abf93cf1c" data-analytics-event="{&quot;category&quot;:&quot;Marketing nav&quot;,&quot;action&quot;:&quot;click to go to homepage&quot;,&quot;label&quot;:&quot;ref_page:Marketing;ref_cta:Sign in;ref_loc:Header&quot;}" > Sign in </a> </div> <a href="/signup?ref_cta=Sign+up&amp;ref_loc=header+logged+out&amp;ref_page=%2F%3Cuser-name%3E%2F%3Crepo-name%3E&amp;source=header-repo&amp;source_repo=tqdm%2Ftqdm" class="HeaderMenu-link HeaderMenu-link--sign-up HeaderMenu-button flex-shrink-0 d-flex d-lg-inline-flex no-underline border color-border-default rounded px-2 py-1" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;site header menu&quot;,&quot;repository_id&quot;:null,&quot;auth_type&quot;:&quot;SIGN_UP&quot;,&quot;originating_url&quot;:&quot;https://github.com/tqdm/tqdm&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="aab289504eacc3d2dec97ba23bfa5f27a424870c594f46292596289abf93cf1c" data-analytics-event="{&quot;category&quot;:&quot;Sign up&quot;,&quot;action&quot;:&quot;click to sign up for account&quot;,&quot;label&quot;:&quot;ref_page:/&lt;user-name&gt;/&lt;repo-name&gt;;ref_cta:Sign up;ref_loc:header logged out&quot;}" > Sign up </a> <button type="button" class="sr-only js-header-menu-focus-trap d-block d-lg-none">Reseting focus</button> </div> </div> </div> </div> </header> <div hidden="hidden" data-view-component="true" class="js-stale-session-flash stale-session-flash flash flash-warn flash-full"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert"> <path d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path> </svg> <span class="js-stale-session-flash-signed-in" hidden>You signed in with another tab or window. <a class="Link--inTextBlock" href="">Reload</a> to refresh your session.</span> <span class="js-stale-session-flash-signed-out" hidden>You signed out in another tab or window. <a class="Link--inTextBlock" href="">Reload</a> to refresh your session.</span> <span class="js-stale-session-flash-switched" hidden>You switched accounts on another tab or window. <a class="Link--inTextBlock" href="">Reload</a> to refresh your session.</span> <button id="icon-button-5b59270f-a024-4550-a85e-53b5650d4604" aria-labelledby="tooltip-c9474747-0b82-42e6-9b57-16993ed02318" type="button" data-view-component="true" class="Button Button--iconOnly Button--invisible Button--medium flash-close js-flash-close"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x Button-visual"> <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path> </svg> </button><tool-tip id="tooltip-c9474747-0b82-42e6-9b57-16993ed02318" for="icon-button-5b59270f-a024-4550-a85e-53b5650d4604" popover="manual" data-direction="s" data-type="label" data-view-component="true" class="sr-only position-absolute">Dismiss alert</tool-tip> </div> </div> <div id="start-of-content" class="show-on-focus"></div> <div id="js-flash-container" class="flash-container" data-turbo-replace> <template class="js-flash-template"> <div class="flash flash-full {{ className }}"> <div > <button autofocus class="flash-close js-flash-close" type="button" aria-label="Dismiss this message"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x"> <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path> </svg> </button> <div aria-atomic="true" role="alert" class="js-flash-alert"> <div>{{ message }}</div> </div> </div> </div> </template> </div> <div class="application-main " data-commit-hovercards-enabled data-discussion-hovercards-enabled data-issue-and-pr-hovercards-enabled data-project-hovercards-enabled > <div itemscope itemtype="http://schema.org/SoftwareSourceCode" class=""> <main id="js-repo-pjax-container" > <div id="repository-container-header" class="pt-3 hide-full-screen" style="background-color: var(--page-header-bgColor, var(--color-page-header-bg));" data-turbo-replace> <div class="d-flex flex-nowrap flex-justify-end mb-3 px-3 px-lg-5" style="gap: 1rem;"> <div class="flex-auto min-width-0 width-fit"> <div class=" d-flex flex-wrap flex-items-center wb-break-word f3 text-normal"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-repo color-fg-muted mr-2"> <path d="M2 2.5A2.5 2.5 0 0 1 4.5 0h8.75a.75.75 0 0 1 .75.75v12.5a.75.75 0 0 1-.75.75h-2.5a.75.75 0 0 1 0-1.5h1.75v-2h-8a1 1 0 0 0-.714 1.7.75.75 0 1 1-1.072 1.05A2.495 2.495 0 0 1 2 11.5Zm10.5-1h-8a1 1 0 0 0-1 1v6.708A2.486 2.486 0 0 1 4.5 9h8ZM5 12.25a.25.25 0 0 1 .25-.25h3.5a.25.25 0 0 1 .25.25v3.25a.25.25 0 0 1-.4.2l-1.45-1.087a.249.249 0 0 0-.3 0L5.4 15.7a.25.25 0 0 1-.4-.2Z"></path> </svg> <span class="author flex-self-stretch" itemprop="author"> <a class="url fn" rel="author" data-hovercard-type="organization" data-hovercard-url="/orgs/tqdm/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="/tqdm"> tqdm </a> </span> <span class="mx-1 flex-self-stretch color-fg-muted">/</span> <strong itemprop="name" class="mr-2 flex-self-stretch"> <a data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" href="/tqdm/tqdm">tqdm</a> </strong> <span></span><span class="Label Label--secondary v-align-middle mr-1">Public</span> </div> </div> <div id="repository-details-container" class="flex-shrink-0" data-turbo-replace style="max-width: 70%;"> <ul class="pagehead-actions flex-shrink-0 d-none d-md-inline" style="padding: 2px 0;"> <li> <include-fragment src="/tqdm/tqdm/sponsor_button"></include-fragment> </li> <li> <a href="/login?return_to=%2Ftqdm%2Ftqdm" rel="nofollow" id="repository-details-watch-button" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;notification subscription menu watch&quot;,&quot;repository_id&quot;:null,&quot;auth_type&quot;:&quot;LOG_IN&quot;,&quot;originating_url&quot;:&quot;https://github.com/tqdm/tqdm&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="aafa7799739b1780c606d16c4d989314e523fa5b1f176577e9137c7cba90ffc2" aria-label="You must be signed in to change notification settings" data-view-component="true" class="btn-sm btn"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-bell mr-2"> <path d="M8 16a2 2 0 0 0 1.985-1.75c.017-.137-.097-.25-.235-.25h-3.5c-.138 0-.252.113-.235.25A2 2 0 0 0 8 16ZM3 5a5 5 0 0 1 10 0v2.947c0 .05.015.098.042.139l1.703 2.555A1.519 1.519 0 0 1 13.482 13H2.518a1.516 1.516 0 0 1-1.263-2.36l1.703-2.554A.255.255 0 0 0 3 7.947Zm5-3.5A3.5 3.5 0 0 0 4.5 5v2.947c0 .346-.102.683-.294.97l-1.703 2.556a.017.017 0 0 0-.003.01l.001.006c0 .002.002.004.004.006l.006.004.007.001h10.964l.007-.001.006-.004.004-.006.001-.007a.017.017 0 0 0-.003-.01l-1.703-2.554a1.745 1.745 0 0 1-.294-.97V5A3.5 3.5 0 0 0 8 1.5Z"></path> </svg>Notifications </a> <tool-tip id="tooltip-0dc18b18-7494-45ff-a7aa-f995bcd41542" for="repository-details-watch-button" popover="manual" data-direction="s" data-type="description" data-view-component="true" class="sr-only position-absolute">You must be signed in to change notification settings</tool-tip> </li> <li> <a icon="repo-forked" id="fork-button" href="/login?return_to=%2Ftqdm%2Ftqdm" rel="nofollow" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;repo details fork button&quot;,&quot;repository_id&quot;:36804486,&quot;auth_type&quot;:&quot;LOG_IN&quot;,&quot;originating_url&quot;:&quot;https://github.com/tqdm/tqdm&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="eb57ddd5cd2035daf3b23f609ca4e56a1f118d5897b1b2ba5a01c225c2335f15" data-view-component="true" class="btn-sm btn"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-repo-forked mr-2"> <path d="M5 5.372v.878c0 .414.336.75.75.75h4.5a.75.75 0 0 0 .75-.75v-.878a2.25 2.25 0 1 1 1.5 0v.878a2.25 2.25 0 0 1-2.25 2.25h-1.5v2.128a2.251 2.251 0 1 1-1.5 0V8.5h-1.5A2.25 2.25 0 0 1 3.5 6.25v-.878a2.25 2.25 0 1 1 1.5 0ZM5 3.25a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Zm6.75.75a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5Zm-3 8.75a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Z"></path> </svg>Fork <span id="repo-network-counter" data-pjax-replace="true" data-turbo-replace="true" title="1,375" data-view-component="true" class="Counter">1.4k</span> </a> </li> <li> <div data-view-component="true" class="BtnGroup d-flex"> <a href="/login?return_to=%2Ftqdm%2Ftqdm" rel="nofollow" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;star button&quot;,&quot;repository_id&quot;:36804486,&quot;auth_type&quot;:&quot;LOG_IN&quot;,&quot;originating_url&quot;:&quot;https://github.com/tqdm/tqdm&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="721ef8ee72b5e5353d338a49a02f28a283503a381449034d03893e88e0d5e72a" aria-label="You must be signed in to star a repository" data-view-component="true" class="tooltipped tooltipped-sw btn-sm btn"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-star v-align-text-bottom d-inline-block mr-2"> <path d="M8 .25a.75.75 0 0 1 .673.418l1.882 3.815 4.21.612a.75.75 0 0 1 .416 1.279l-3.046 2.97.719 4.192a.751.751 0 0 1-1.088.791L8 12.347l-3.766 1.98a.75.75 0 0 1-1.088-.79l.72-4.194L.818 6.374a.75.75 0 0 1 .416-1.28l4.21-.611L7.327.668A.75.75 0 0 1 8 .25Zm0 2.445L6.615 5.5a.75.75 0 0 1-.564.41l-3.097.45 2.24 2.184a.75.75 0 0 1 .216.664l-.528 3.084 2.769-1.456a.75.75 0 0 1 .698 0l2.77 1.456-.53-3.084a.75.75 0 0 1 .216-.664l2.24-2.183-3.096-.45a.75.75 0 0 1-.564-.41L8 2.694Z"></path> </svg><span data-view-component="true" class="d-inline"> Star </span> <span id="repo-stars-counter-star" aria-label="29524 users starred this repository" data-singular-suffix="user starred this repository" data-plural-suffix="users starred this repository" data-turbo-replace="true" title="29,524" data-view-component="true" class="Counter js-social-count">29.5k</span> </a></div> </li> </ul> </div> </div> <div id="responsive-meta-container" data-turbo-replace> <div class="d-block d-md-none mb-2 px-3 px-md-4 px-lg-5"> <p class="f4 mb-3 "> ⚡ A Fast, Extensible Progress Bar for Python and CLI </p> <div class="mb-2 d-flex flex-items-center Link--secondary"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-link flex-shrink-0 mr-2"> <path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path> </svg> <span class="flex-auto min-width-0 css-truncate css-truncate-target width-fit"> <a title="https://tqdm.github.io" role="link" target="_blank" class="text-bold" rel="noopener noreferrer" href="https://tqdm.github.io">tqdm.github.io</a> </span> </div> <h3 class="sr-only">License</h3> <div class="mb-2"> <a href="/tqdm/tqdm/blob/master/LICENCE" class="Link--muted" data-analytics-event="{&quot;category&quot;:&quot;Repository Overview&quot;,&quot;action&quot;:&quot;click&quot;,&quot;label&quot;:&quot;location:sidebar;file:license&quot;}" > <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-law mr-2"> <path d="M8.75.75V2h.985c.304 0 .603.08.867.231l1.29.736c.038.022.08.033.124.033h2.234a.75.75 0 0 1 0 1.5h-.427l2.111 4.692a.75.75 0 0 1-.154.838l-.53-.53.529.531-.001.002-.002.002-.006.006-.006.005-.01.01-.045.04c-.21.176-.441.327-.686.45C14.556 10.78 13.88 11 13 11a4.498 4.498 0 0 1-2.023-.454 3.544 3.544 0 0 1-.686-.45l-.045-.04-.016-.015-.006-.006-.004-.004v-.001a.75.75 0 0 1-.154-.838L12.178 4.5h-.162c-.305 0-.604-.079-.868-.231l-1.29-.736a.245.245 0 0 0-.124-.033H8.75V13h2.5a.75.75 0 0 1 0 1.5h-6.5a.75.75 0 0 1 0-1.5h2.5V3.5h-.984a.245.245 0 0 0-.124.033l-1.289.737c-.265.15-.564.23-.869.23h-.162l2.112 4.692a.75.75 0 0 1-.154.838l-.53-.53.529.531-.001.002-.002.002-.006.006-.016.015-.045.04c-.21.176-.441.327-.686.45C4.556 10.78 3.88 11 3 11a4.498 4.498 0 0 1-2.023-.454 3.544 3.544 0 0 1-.686-.45l-.045-.04-.016-.015-.006-.006-.004-.004v-.001a.75.75 0 0 1-.154-.838L2.178 4.5H1.75a.75.75 0 0 1 0-1.5h2.234a.249.249 0 0 0 .125-.033l1.288-.737c.265-.15.564-.23.869-.23h.984V.75a.75.75 0 0 1 1.5 0Zm2.945 8.477c.285.135.718.273 1.305.273s1.02-.138 1.305-.273L13 6.327Zm-10 0c.285.135.718.273 1.305.273s1.02-.138 1.305-.273L3 6.327Z"></path> </svg> View license </a> </div> <div class="mb-3"> <a class="Link--secondary no-underline mr-3" href="/tqdm/tqdm/stargazers"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-star mr-1"> <path d="M8 .25a.75.75 0 0 1 .673.418l1.882 3.815 4.21.612a.75.75 0 0 1 .416 1.279l-3.046 2.97.719 4.192a.751.751 0 0 1-1.088.791L8 12.347l-3.766 1.98a.75.75 0 0 1-1.088-.79l.72-4.194L.818 6.374a.75.75 0 0 1 .416-1.28l4.21-.611L7.327.668A.75.75 0 0 1 8 .25Zm0 2.445L6.615 5.5a.75.75 0 0 1-.564.41l-3.097.45 2.24 2.184a.75.75 0 0 1 .216.664l-.528 3.084 2.769-1.456a.75.75 0 0 1 .698 0l2.77 1.456-.53-3.084a.75.75 0 0 1 .216-.664l2.24-2.183-3.096-.45a.75.75 0 0 1-.564-.41L8 2.694Z"></path> </svg> <span class="text-bold">29.5k</span> stars </a> <a class="Link--secondary no-underline mr-3" href="/tqdm/tqdm/forks"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-repo-forked mr-1"> <path d="M5 5.372v.878c0 .414.336.75.75.75h4.5a.75.75 0 0 0 .75-.75v-.878a2.25 2.25 0 1 1 1.5 0v.878a2.25 2.25 0 0 1-2.25 2.25h-1.5v2.128a2.251 2.251 0 1 1-1.5 0V8.5h-1.5A2.25 2.25 0 0 1 3.5 6.25v-.878a2.25 2.25 0 1 1 1.5 0ZM5 3.25a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Zm6.75.75a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5Zm-3 8.75a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Z"></path> </svg> <span class="text-bold">1.4k</span> forks </a> <a class="Link--secondary no-underline mr-3 d-inline-block" href="/tqdm/tqdm/branches"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-git-branch mr-1"> <path d="M9.5 3.25a2.25 2.25 0 1 1 3 2.122V6A2.5 2.5 0 0 1 10 8.5H6a1 1 0 0 0-1 1v1.128a2.251 2.251 0 1 1-1.5 0V5.372a2.25 2.25 0 1 1 1.5 0v1.836A2.493 2.493 0 0 1 6 7h4a1 1 0 0 0 1-1v-.628A2.25 2.25 0 0 1 9.5 3.25Zm-6 0a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Zm8.25-.75a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5ZM4.25 12a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Z"></path> </svg> <span>Branches</span> </a> <a class="Link--secondary no-underline d-inline-block" href="/tqdm/tqdm/tags"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-tag mr-1"> <path d="M1 7.775V2.75C1 1.784 1.784 1 2.75 1h5.025c.464 0 .91.184 1.238.513l6.25 6.25a1.75 1.75 0 0 1 0 2.474l-5.026 5.026a1.75 1.75 0 0 1-2.474 0l-6.25-6.25A1.752 1.752 0 0 1 1 7.775Zm1.5 0c0 .066.026.13.073.177l6.25 6.25a.25.25 0 0 0 .354 0l5.025-5.025a.25.25 0 0 0 0-.354l-6.25-6.25a.25.25 0 0 0-.177-.073H2.75a.25.25 0 0 0-.25.25ZM6 5a1 1 0 1 1 0 2 1 1 0 0 1 0-2Z"></path> </svg> <span>Tags</span> </a> <a class="Link--secondary no-underline d-inline-block" href="/tqdm/tqdm/activity"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-pulse mr-1"> <path d="M6 2c.306 0 .582.187.696.471L10 10.731l1.304-3.26A.751.751 0 0 1 12 7h3.25a.75.75 0 0 1 0 1.5h-2.742l-1.812 4.528a.751.751 0 0 1-1.392 0L6 4.77 4.696 8.03A.75.75 0 0 1 4 8.5H.75a.75.75 0 0 1 0-1.5h2.742l1.812-4.529A.751.751 0 0 1 6 2Z"></path> </svg> <span>Activity</span> </a> </div> <div class="d-flex flex-wrap gap-2"> <div class="flex-1"> <div data-view-component="true" class="BtnGroup d-flex"> <a href="/login?return_to=%2Ftqdm%2Ftqdm" rel="nofollow" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;star button&quot;,&quot;repository_id&quot;:36804486,&quot;auth_type&quot;:&quot;LOG_IN&quot;,&quot;originating_url&quot;:&quot;https://github.com/tqdm/tqdm&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="721ef8ee72b5e5353d338a49a02f28a283503a381449034d03893e88e0d5e72a" aria-label="You must be signed in to star a repository" data-view-component="true" class="tooltipped tooltipped-sw btn-sm btn btn-block"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-star v-align-text-bottom d-inline-block mr-2"> <path d="M8 .25a.75.75 0 0 1 .673.418l1.882 3.815 4.21.612a.75.75 0 0 1 .416 1.279l-3.046 2.97.719 4.192a.751.751 0 0 1-1.088.791L8 12.347l-3.766 1.98a.75.75 0 0 1-1.088-.79l.72-4.194L.818 6.374a.75.75 0 0 1 .416-1.28l4.21-.611L7.327.668A.75.75 0 0 1 8 .25Zm0 2.445L6.615 5.5a.75.75 0 0 1-.564.41l-3.097.45 2.24 2.184a.75.75 0 0 1 .216.664l-.528 3.084 2.769-1.456a.75.75 0 0 1 .698 0l2.77 1.456-.53-3.084a.75.75 0 0 1 .216-.664l2.24-2.183-3.096-.45a.75.75 0 0 1-.564-.41L8 2.694Z"></path> </svg><span data-view-component="true" class="d-inline"> Star </span> </a></div> </div> <div class="flex-1"> <a href="/login?return_to=%2Ftqdm%2Ftqdm" rel="nofollow" id="files-overview-watch-button" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;notification subscription menu watch&quot;,&quot;repository_id&quot;:null,&quot;auth_type&quot;:&quot;LOG_IN&quot;,&quot;originating_url&quot;:&quot;https://github.com/tqdm/tqdm&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="aafa7799739b1780c606d16c4d989314e523fa5b1f176577e9137c7cba90ffc2" aria-label="You must be signed in to change notification settings" data-view-component="true" class="btn-sm btn btn-block"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-bell mr-2"> <path d="M8 16a2 2 0 0 0 1.985-1.75c.017-.137-.097-.25-.235-.25h-3.5c-.138 0-.252.113-.235.25A2 2 0 0 0 8 16ZM3 5a5 5 0 0 1 10 0v2.947c0 .05.015.098.042.139l1.703 2.555A1.519 1.519 0 0 1 13.482 13H2.518a1.516 1.516 0 0 1-1.263-2.36l1.703-2.554A.255.255 0 0 0 3 7.947Zm5-3.5A3.5 3.5 0 0 0 4.5 5v2.947c0 .346-.102.683-.294.97l-1.703 2.556a.017.017 0 0 0-.003.01l.001.006c0 .002.002.004.004.006l.006.004.007.001h10.964l.007-.001.006-.004.004-.006.001-.007a.017.017 0 0 0-.003-.01l-1.703-2.554a1.745 1.745 0 0 1-.294-.97V5A3.5 3.5 0 0 0 8 1.5Z"></path> </svg>Notifications </a> <tool-tip id="tooltip-550972ea-0871-4875-9282-7b2fc8f37c26" for="files-overview-watch-button" popover="manual" data-direction="s" data-type="description" data-view-component="true" class="sr-only position-absolute">You must be signed in to change notification settings</tool-tip> </div> <span> </span> </div> </div> </div> <nav data-pjax="#js-repo-pjax-container" aria-label="Repository" data-view-component="true" class="js-repo-nav js-sidenav-container-pjax js-responsive-underlinenav overflow-hidden UnderlineNav px-3 px-md-4 px-lg-5"> <ul data-view-component="true" class="UnderlineNav-body list-style-none"> <li data-view-component="true" class="d-inline-flex"> <a id="code-tab" href="/tqdm/tqdm" data-tab-item="i0code-tab" data-selected-links="repo_source repo_downloads repo_commits repo_releases repo_tags repo_branches repo_packages repo_deployments repo_attestations /tqdm/tqdm" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g c" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Code&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" aria-current="page" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item selected"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-code UnderlineNav-octicon d-none d-sm-inline"> <path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"></path> </svg> <span data-content="Code">Code</span> <span id="code-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="Not available" data-view-component="true" class="Counter"></span> </a></li> <li data-view-component="true" class="d-inline-flex"> <a id="issues-tab" href="/tqdm/tqdm/issues" data-tab-item="i1issues-tab" data-selected-links="repo_issues repo_labels repo_milestones /tqdm/tqdm/issues" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g i" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Issues&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-issue-opened UnderlineNav-octicon d-none d-sm-inline"> <path d="M8 9.5a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path><path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Z"></path> </svg> <span data-content="Issues">Issues</span> <span id="issues-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="432" data-view-component="true" class="Counter">432</span> </a></li> <li data-view-component="true" class="d-inline-flex"> <a id="pull-requests-tab" href="/tqdm/tqdm/pulls" data-tab-item="i2pull-requests-tab" data-selected-links="repo_pulls checks /tqdm/tqdm/pulls" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g p" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Pull requests&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-git-pull-request UnderlineNav-octicon d-none d-sm-inline"> <path d="M1.5 3.25a2.25 2.25 0 1 1 3 2.122v5.256a2.251 2.251 0 1 1-1.5 0V5.372A2.25 2.25 0 0 1 1.5 3.25Zm5.677-.177L9.573.677A.25.25 0 0 1 10 .854V2.5h1A2.5 2.5 0 0 1 13.5 5v5.628a2.251 2.251 0 1 1-1.5 0V5a1 1 0 0 0-1-1h-1v1.646a.25.25 0 0 1-.427.177L7.177 3.427a.25.25 0 0 1 0-.354ZM3.75 2.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm0 9.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm8.25.75a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Z"></path> </svg> <span data-content="Pull requests">Pull requests</span> <span id="pull-requests-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="126" data-view-component="true" class="Counter">126</span> </a></li> <li data-view-component="true" class="d-inline-flex"> <a id="discussions-tab" href="/tqdm/tqdm/discussions" data-tab-item="i3discussions-tab" data-selected-links="repo_discussions /tqdm/tqdm/discussions" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g g" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Discussions&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-comment-discussion UnderlineNav-octicon d-none d-sm-inline"> <path d="M1.75 1h8.5c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0 1 10.25 10H7.061l-2.574 2.573A1.458 1.458 0 0 1 2 11.543V10h-.25A1.75 1.75 0 0 1 0 8.25v-5.5C0 1.784.784 1 1.75 1ZM1.5 2.75v5.5c0 .138.112.25.25.25h1a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h3.5a.25.25 0 0 0 .25-.25v-5.5a.25.25 0 0 0-.25-.25h-8.5a.25.25 0 0 0-.25.25Zm13 2a.25.25 0 0 0-.25-.25h-.5a.75.75 0 0 1 0-1.5h.5c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0 1 14.25 12H14v1.543a1.458 1.458 0 0 1-2.487 1.03L9.22 12.28a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215l2.22 2.22v-2.19a.75.75 0 0 1 .75-.75h1a.25.25 0 0 0 .25-.25Z"></path> </svg> <span data-content="Discussions">Discussions</span> <span id="discussions-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="Not available" data-view-component="true" class="Counter"></span> </a></li> <li data-view-component="true" class="d-inline-flex"> <a id="actions-tab" href="/tqdm/tqdm/actions" data-tab-item="i4actions-tab" data-selected-links="repo_actions /tqdm/tqdm/actions" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g a" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Actions&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-play UnderlineNav-octicon d-none d-sm-inline"> <path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Zm4.879-2.773 4.264 2.559a.25.25 0 0 1 0 .428l-4.264 2.559A.25.25 0 0 1 6 10.559V5.442a.25.25 0 0 1 .379-.215Z"></path> </svg> <span data-content="Actions">Actions</span> <span id="actions-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="Not available" data-view-component="true" class="Counter"></span> </a></li> <li data-view-component="true" class="d-inline-flex"> <a id="projects-tab" href="/tqdm/tqdm/projects" data-tab-item="i5projects-tab" data-selected-links="repo_projects new_repo_project repo_project /tqdm/tqdm/projects" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g b" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Projects&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-table UnderlineNav-octicon d-none d-sm-inline"> <path d="M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25ZM6.5 6.5v8h7.75a.25.25 0 0 0 .25-.25V6.5Zm8-1.5V1.75a.25.25 0 0 0-.25-.25H6.5V5Zm-13 1.5v7.75c0 .138.112.25.25.25H5v-8ZM5 5V1.5H1.75a.25.25 0 0 0-.25.25V5Z"></path> </svg> <span data-content="Projects">Projects</span> <span id="projects-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="1" data-view-component="true" class="Counter">1</span> </a></li> <li data-view-component="true" class="d-inline-flex"> <a id="wiki-tab" href="/tqdm/tqdm/wiki" data-tab-item="i6wiki-tab" data-selected-links="repo_wiki /tqdm/tqdm/wiki" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g w" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Wiki&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-book UnderlineNav-octicon d-none d-sm-inline"> <path d="M0 1.75A.75.75 0 0 1 .75 1h4.253c1.227 0 2.317.59 3 1.501A3.743 3.743 0 0 1 11.006 1h4.245a.75.75 0 0 1 .75.75v10.5a.75.75 0 0 1-.75.75h-4.507a2.25 2.25 0 0 0-1.591.659l-.622.621a.75.75 0 0 1-1.06 0l-.622-.621A2.25 2.25 0 0 0 5.258 13H.75a.75.75 0 0 1-.75-.75Zm7.251 10.324.004-5.073-.002-2.253A2.25 2.25 0 0 0 5.003 2.5H1.5v9h3.757a3.75 3.75 0 0 1 1.994.574ZM8.755 4.75l-.004 7.322a3.752 3.752 0 0 1 1.992-.572H14.5v-9h-3.495a2.25 2.25 0 0 0-2.25 2.25Z"></path> </svg> <span data-content="Wiki">Wiki</span> <span id="wiki-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="Not available" data-view-component="true" class="Counter"></span> </a></li> <li data-view-component="true" class="d-inline-flex"> <a id="security-tab" href="/tqdm/tqdm/security" data-tab-item="i7security-tab" data-selected-links="security overview alerts policy token_scanning code_scanning /tqdm/tqdm/security" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g s" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Security&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-shield UnderlineNav-octicon d-none d-sm-inline"> <path d="M7.467.133a1.748 1.748 0 0 1 1.066 0l5.25 1.68A1.75 1.75 0 0 1 15 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.697 1.697 0 0 1-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.75 1.75 0 0 1 1.217-1.667Zm.61 1.429a.25.25 0 0 0-.153 0l-5.25 1.68a.25.25 0 0 0-.174.238V7c0 1.358.275 2.666 1.057 3.86.784 1.194 2.121 2.34 4.366 3.297a.196.196 0 0 0 .154 0c2.245-.956 3.582-2.104 4.366-3.298C13.225 9.666 13.5 8.36 13.5 7V3.48a.251.251 0 0 0-.174-.237l-5.25-1.68ZM8.75 4.75v3a.75.75 0 0 1-1.5 0v-3a.75.75 0 0 1 1.5 0ZM9 10.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path> </svg> <span data-content="Security">Security</span> <include-fragment src="/tqdm/tqdm/security/overall-count" accept="text/fragment+html"></include-fragment> </a></li> <li data-view-component="true" class="d-inline-flex"> <a id="insights-tab" href="/tqdm/tqdm/pulse" data-tab-item="i8insights-tab" data-selected-links="repo_graphs repo_contributors dependency_graph dependabot_updates pulse people community /tqdm/tqdm/pulse" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Insights&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-graph UnderlineNav-octicon d-none d-sm-inline"> <path d="M1.5 1.75V13.5h13.75a.75.75 0 0 1 0 1.5H.75a.75.75 0 0 1-.75-.75V1.75a.75.75 0 0 1 1.5 0Zm14.28 2.53-5.25 5.25a.75.75 0 0 1-1.06 0L7 7.06 4.28 9.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.25-3.25a.75.75 0 0 1 1.06 0L10 7.94l4.72-4.72a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path> </svg> <span data-content="Insights">Insights</span> <span id="insights-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="Not available" data-view-component="true" class="Counter"></span> </a></li> </ul> <div style="visibility:hidden;" data-view-component="true" class="UnderlineNav-actions js-responsive-underlinenav-overflow position-absolute pr-3 pr-md-4 pr-lg-5 right-0"> <action-menu data-select-variant="none" data-view-component="true"> <focus-group direction="vertical" mnemonics retain> <button id="action-menu-903d10be-0752-4dab-ac94-c5b01e9fc3ce-button" popovertarget="action-menu-903d10be-0752-4dab-ac94-c5b01e9fc3ce-overlay" aria-controls="action-menu-903d10be-0752-4dab-ac94-c5b01e9fc3ce-list" aria-haspopup="true" aria-labelledby="tooltip-114dd3fb-da8a-4f73-9de0-d574815d3780" type="button" data-view-component="true" class="Button Button--iconOnly Button--secondary Button--medium UnderlineNav-item"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-kebab-horizontal Button-visual"> <path d="M8 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3ZM1.5 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm13 0a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path> </svg> </button><tool-tip id="tooltip-114dd3fb-da8a-4f73-9de0-d574815d3780" for="action-menu-903d10be-0752-4dab-ac94-c5b01e9fc3ce-button" popover="manual" data-direction="s" data-type="label" data-view-component="true" class="sr-only position-absolute">Additional navigation options</tool-tip> <anchored-position data-target="action-menu.overlay" id="action-menu-903d10be-0752-4dab-ac94-c5b01e9fc3ce-overlay" anchor="action-menu-903d10be-0752-4dab-ac94-c5b01e9fc3ce-button" align="start" side="outside-bottom" anchor-offset="normal" popover="auto" data-view-component="true"> <div data-view-component="true" class="Overlay Overlay--size-auto"> <div data-view-component="true" class="Overlay-body Overlay-body--paddingNone"> <action-list> <div data-view-component="true"> <ul aria-labelledby="action-menu-903d10be-0752-4dab-ac94-c5b01e9fc3ce-button" id="action-menu-903d10be-0752-4dab-ac94-c5b01e9fc3ce-list" role="menu" data-view-component="true" class="ActionListWrap--inset ActionListWrap"> <li hidden="hidden" data-menu-item="i0code-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem"> <a tabindex="-1" id="item-f54083f3-6414-4840-a3c7-973c613d643e" href="/tqdm/tqdm" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16"> <span class="ActionListItem-visual ActionListItem-visual--leading"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-code"> <path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"></path> </svg> </span> <span data-view-component="true" class="ActionListItem-label"> Code </span> </a> </li> <li hidden="hidden" data-menu-item="i1issues-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem"> <a tabindex="-1" id="item-fcc50a8f-d5c8-4c61-80f9-387132a55c70" href="/tqdm/tqdm/issues" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16"> <span class="ActionListItem-visual ActionListItem-visual--leading"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-issue-opened"> <path d="M8 9.5a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path><path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Z"></path> </svg> </span> <span data-view-component="true" class="ActionListItem-label"> Issues </span> </a> </li> <li hidden="hidden" data-menu-item="i2pull-requests-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem"> <a tabindex="-1" id="item-9ea406c2-9f45-4364-9498-2a5e468e8c16" href="/tqdm/tqdm/pulls" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16"> <span class="ActionListItem-visual ActionListItem-visual--leading"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-git-pull-request"> <path d="M1.5 3.25a2.25 2.25 0 1 1 3 2.122v5.256a2.251 2.251 0 1 1-1.5 0V5.372A2.25 2.25 0 0 1 1.5 3.25Zm5.677-.177L9.573.677A.25.25 0 0 1 10 .854V2.5h1A2.5 2.5 0 0 1 13.5 5v5.628a2.251 2.251 0 1 1-1.5 0V5a1 1 0 0 0-1-1h-1v1.646a.25.25 0 0 1-.427.177L7.177 3.427a.25.25 0 0 1 0-.354ZM3.75 2.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm0 9.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm8.25.75a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Z"></path> </svg> </span> <span data-view-component="true" class="ActionListItem-label"> Pull requests </span> </a> </li> <li hidden="hidden" data-menu-item="i3discussions-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem"> <a tabindex="-1" id="item-812cc541-fb06-48aa-af2d-2f7b2ea91ee2" href="/tqdm/tqdm/discussions" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16"> <span class="ActionListItem-visual ActionListItem-visual--leading"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-comment-discussion"> <path d="M1.75 1h8.5c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0 1 10.25 10H7.061l-2.574 2.573A1.458 1.458 0 0 1 2 11.543V10h-.25A1.75 1.75 0 0 1 0 8.25v-5.5C0 1.784.784 1 1.75 1ZM1.5 2.75v5.5c0 .138.112.25.25.25h1a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h3.5a.25.25 0 0 0 .25-.25v-5.5a.25.25 0 0 0-.25-.25h-8.5a.25.25 0 0 0-.25.25Zm13 2a.25.25 0 0 0-.25-.25h-.5a.75.75 0 0 1 0-1.5h.5c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0 1 14.25 12H14v1.543a1.458 1.458 0 0 1-2.487 1.03L9.22 12.28a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215l2.22 2.22v-2.19a.75.75 0 0 1 .75-.75h1a.25.25 0 0 0 .25-.25Z"></path> </svg> </span> <span data-view-component="true" class="ActionListItem-label"> Discussions </span> </a> </li> <li hidden="hidden" data-menu-item="i4actions-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem"> <a tabindex="-1" id="item-124b6e39-de54-4249-bef4-2b1edb1a32be" href="/tqdm/tqdm/actions" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16"> <span class="ActionListItem-visual ActionListItem-visual--leading"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-play"> <path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Zm4.879-2.773 4.264 2.559a.25.25 0 0 1 0 .428l-4.264 2.559A.25.25 0 0 1 6 10.559V5.442a.25.25 0 0 1 .379-.215Z"></path> </svg> </span> <span data-view-component="true" class="ActionListItem-label"> Actions </span> </a> </li> <li hidden="hidden" data-menu-item="i5projects-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem"> <a tabindex="-1" id="item-529f3839-3056-4a4a-9269-39ee781ac0f0" href="/tqdm/tqdm/projects" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16"> <span class="ActionListItem-visual ActionListItem-visual--leading"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-table"> <path d="M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25ZM6.5 6.5v8h7.75a.25.25 0 0 0 .25-.25V6.5Zm8-1.5V1.75a.25.25 0 0 0-.25-.25H6.5V5Zm-13 1.5v7.75c0 .138.112.25.25.25H5v-8ZM5 5V1.5H1.75a.25.25 0 0 0-.25.25V5Z"></path> </svg> </span> <span data-view-component="true" class="ActionListItem-label"> Projects </span> </a> </li> <li hidden="hidden" data-menu-item="i6wiki-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem"> <a tabindex="-1" id="item-9292eaf6-0408-4501-922a-c6fff61eec3b" href="/tqdm/tqdm/wiki" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16"> <span class="ActionListItem-visual ActionListItem-visual--leading"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-book"> <path d="M0 1.75A.75.75 0 0 1 .75 1h4.253c1.227 0 2.317.59 3 1.501A3.743 3.743 0 0 1 11.006 1h4.245a.75.75 0 0 1 .75.75v10.5a.75.75 0 0 1-.75.75h-4.507a2.25 2.25 0 0 0-1.591.659l-.622.621a.75.75 0 0 1-1.06 0l-.622-.621A2.25 2.25 0 0 0 5.258 13H.75a.75.75 0 0 1-.75-.75Zm7.251 10.324.004-5.073-.002-2.253A2.25 2.25 0 0 0 5.003 2.5H1.5v9h3.757a3.75 3.75 0 0 1 1.994.574ZM8.755 4.75l-.004 7.322a3.752 3.752 0 0 1 1.992-.572H14.5v-9h-3.495a2.25 2.25 0 0 0-2.25 2.25Z"></path> </svg> </span> <span data-view-component="true" class="ActionListItem-label"> Wiki </span> </a> </li> <li hidden="hidden" data-menu-item="i7security-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem"> <a tabindex="-1" id="item-7d7b48ae-9d5c-4bd6-8f68-a70c623a62fe" href="/tqdm/tqdm/security" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16"> <span class="ActionListItem-visual ActionListItem-visual--leading"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-shield"> <path d="M7.467.133a1.748 1.748 0 0 1 1.066 0l5.25 1.68A1.75 1.75 0 0 1 15 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.697 1.697 0 0 1-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.75 1.75 0 0 1 1.217-1.667Zm.61 1.429a.25.25 0 0 0-.153 0l-5.25 1.68a.25.25 0 0 0-.174.238V7c0 1.358.275 2.666 1.057 3.86.784 1.194 2.121 2.34 4.366 3.297a.196.196 0 0 0 .154 0c2.245-.956 3.582-2.104 4.366-3.298C13.225 9.666 13.5 8.36 13.5 7V3.48a.251.251 0 0 0-.174-.237l-5.25-1.68ZM8.75 4.75v3a.75.75 0 0 1-1.5 0v-3a.75.75 0 0 1 1.5 0ZM9 10.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path> </svg> </span> <span data-view-component="true" class="ActionListItem-label"> Security </span> </a> </li> <li hidden="hidden" data-menu-item="i8insights-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem"> <a tabindex="-1" id="item-32693523-4e35-4b7f-a2aa-8b59ebceafc2" href="/tqdm/tqdm/pulse" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16"> <span class="ActionListItem-visual ActionListItem-visual--leading"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-graph"> <path d="M1.5 1.75V13.5h13.75a.75.75 0 0 1 0 1.5H.75a.75.75 0 0 1-.75-.75V1.75a.75.75 0 0 1 1.5 0Zm14.28 2.53-5.25 5.25a.75.75 0 0 1-1.06 0L7 7.06 4.28 9.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.25-3.25a.75.75 0 0 1 1.06 0L10 7.94l4.72-4.72a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path> </svg> </span> <span data-view-component="true" class="ActionListItem-label"> Insights </span> </a> </li> </ul> </div></action-list> </div> </div></anchored-position> </focus-group> </action-menu></div> </nav> </div> <turbo-frame id="repo-content-turbo-frame" target="_top" data-turbo-action="advance" class=""> <div id="repo-content-pjax-container" class="repository-content " > <h1 class='sr-only'>tqdm/tqdm</h1> <div class="clearfix container-xl px-md-4 px-lg-5 px-3"> <div> <div style="max-width: 100%" data-view-component="true" class="Layout Layout--flowRow-until-md react-repos-overview-margin Layout--sidebarPosition-end Layout--sidebarPosition-flowRow-end"> <div data-view-component="true" class="Layout-main"> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_dompurify_dist_purify_es_mjs-dd1d3ea6a436.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_tanstack_query-core_build_modern_queryObserver_js-node_modules_tanstack_-defd52-843b41414e0e.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/ui_packages_aria-live_aria-live_ts-ui_packages_promise-with-resolvers-polyfill_promise-with-r-17c672-34345cb18aac.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/ui_packages_paths_index_ts-e019c54eb886.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/ui_packages_ref-selector_RefSelector_tsx-7496afc3784d.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/ui_packages_commit-attribution_index_ts-ui_packages_commit-checks-status_index_ts-ui_packages-7094d4-15017f02e61c.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/ui_packages_code-view-shared_hooks_shortcuts_ts-ui_packages_code-view-shared_utilities_styles-0dc246-f8753c5db08d.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/ui_packages_code-view-shared_hooks_use-canonical-object_ts-ui_packages_code-view-shared_hooks-a83ec0-5ee2b562b57f.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/repos-overview-ca785c0ab4fa.js"></script> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react.f9eaf3e098aa7865fd95.module.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/repos-overview.0ee7cac3ab511a65d9f9.module.css" /> <react-partial partial-name="repos-overview" data-ssr="true" data-attempted-ssr="true" > <script type="application/json" data-target="react-partial.embeddedData">{"props":{"initialPayload":{"allShortcutsEnabled":false,"path":"/","repo":{"id":36804486,"defaultBranch":"master","name":"tqdm","ownerLogin":"tqdm","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2015-06-03T13:13:14.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/12731565?v=4","public":true,"private":false,"isOrgOwned":true},"currentUser":null,"refInfo":{"name":"master","listCacheKey":"v0:1738777179.0","canEdit":false,"refType":"branch","currentOid":"0ed5d7f18fa3153834cbac0aa57e8092b217cc16"},"tree":{"items":[{"name":".github","path":".github","contentType":"directory"},{"name":".meta","path":".meta","contentType":"directory"},{"name":"benchmarks","path":"benchmarks","contentType":"directory"},{"name":"examples","path":"examples","contentType":"directory"},{"name":"images","path":"images","contentType":"directory"},{"name":"tests","path":"tests","contentType":"directory"},{"name":"tqdm","path":"tqdm","contentType":"directory"},{"name":".gitattributes","path":".gitattributes","contentType":"file"},{"name":".gitignore","path":".gitignore","contentType":"file"},{"name":".mailmap","path":".mailmap","contentType":"file"},{"name":".pre-commit-config.yaml","path":".pre-commit-config.yaml","contentType":"file"},{"name":".zenodo.json","path":".zenodo.json","contentType":"file"},{"name":"CODE_OF_CONDUCT.md","path":"CODE_OF_CONDUCT.md","contentType":"file"},{"name":"CONTRIBUTING.md","path":"CONTRIBUTING.md","contentType":"file"},{"name":"DEMO.ipynb","path":"DEMO.ipynb","contentType":"file"},{"name":"LICENCE","path":"LICENCE","contentType":"file"},{"name":"Makefile","path":"Makefile","contentType":"file"},{"name":"README.rst","path":"README.rst","contentType":"file"},{"name":"asv.conf.json","path":"asv.conf.json","contentType":"file"},{"name":"environment.yml","path":"environment.yml","contentType":"file"},{"name":"logo.png","path":"logo.png","contentType":"file"},{"name":"pyproject.toml","path":"pyproject.toml","contentType":"file"},{"name":"tests_notebook.ipynb","path":"tests_notebook.ipynb","contentType":"file"},{"name":"tox.ini","path":"tox.ini","contentType":"file"}],"templateDirectorySuggestionUrl":null,"readme":null,"totalCount":24,"showBranchInfobar":false},"fileTree":null,"fileTreeProcessingTime":null,"foldersToFetch":[],"treeExpanded":false,"symbolsExpanded":false,"isOverview":true,"overview":{"banners":{"shouldRecommendReadme":false,"isPersonalRepo":false,"showUseActionBanner":false,"actionSlug":null,"actionId":null,"showProtectBranchBanner":false,"publishBannersInfo":{"dismissActionNoticePath":"/settings/dismiss-notice/publish_action_from_repo","releasePath":"/tqdm/tqdm/releases/new?marketplace=true","showPublishActionBanner":false},"interactionLimitBanner":null,"showInvitationBanner":false,"inviterName":null,"actionsMigrationBannerInfo":{"releaseTags":[],"showImmutableActionsMigrationBanner":false,"initialMigrationStatus":null}},"codeButton":{"contactPath":"/contact","isEnterprise":false,"local":{"protocolInfo":{"httpAvailable":true,"sshAvailable":null,"httpUrl":"https://github.com/tqdm/tqdm.git","showCloneWarning":null,"sshUrl":null,"sshCertificatesRequired":null,"sshCertificatesAvailable":null,"ghCliUrl":"gh repo clone tqdm/tqdm","defaultProtocol":"http","newSshKeyUrl":"/settings/ssh/new","setProtocolPath":"/users/set_protocol"},"platformInfo":{"cloneUrl":"https://desktop.github.com","showVisualStudioCloneButton":false,"visualStudioCloneUrl":"https://windows.github.com","showXcodeCloneButton":false,"xcodeCloneUrl":"xcode://clone?repo=https%3A%2F%2Fgithub.com%2Ftqdm%2Ftqdm","zipballUrl":"/tqdm/tqdm/archive/refs/heads/master.zip"}},"newCodespacePath":"/codespaces/new?hide_repo_select=true\u0026repo=36804486"},"popovers":{"rename":null,"renamedParentRepo":null},"commitCount":"2,019","overviewFiles":[{"displayName":"README.rst","repoName":"tqdm","refName":"master","path":"README.rst","preferredFileType":"readme","tabName":"README","richText":"\u003carticle class=\"markdown-body entry-content container-lg\" itemprop=\"text\"\u003e\u003cp dir=\"auto\"\u003e\u003ca target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://camo.githubusercontent.com/3df47a29e4d76c9fa8ea437614a9f8319d54cb38087d2ca5152d739371fbc198/68747470733a2f2f7471646d2e6769746875622e696f2f696d672f6c6f676f2e676966\"\u003e\u003cimg alt=\"Logo\" src=\"https://camo.githubusercontent.com/3df47a29e4d76c9fa8ea437614a9f8319d54cb38087d2ca5152d739371fbc198/68747470733a2f2f7471646d2e6769746875622e696f2f696d672f6c6f676f2e676966\" data-animated-image=\"\" data-canonical-src=\"https://tqdm.github.io/img/logo.gif\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ca name=\"user-content-tqdm\"\u003e\u003c/a\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003etqdm\u003c/h2\u003e\u003ca id=\"user-content-tqdm\" class=\"anchor\" aria-label=\"Permalink: tqdm\" href=\"#tqdm\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e\u003ca href=\"https://pypi.org/project/tqdm\" rel=\"nofollow\"\u003e\u003cimg alt=\"Py-Versions\" src=\"https://camo.githubusercontent.com/81e0211e02aef6098f5a6537a1633907b94d63f4acba8c56f5b4b64ecb36223c/68747470733a2f2f696d672e736869656c64732e696f2f707970692f707976657273696f6e732f7471646d2e7376673f6c6f676f3d707974686f6e266c6f676f436f6c6f723d7768697465\" data-canonical-src=\"https://img.shields.io/pypi/pyversions/tqdm.svg?logo=python\u0026amp;logoColor=white\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e \u003ca href=\"https://tqdm.github.io/releases\" rel=\"nofollow\"\u003e\u003cimg alt=\"Versions\" src=\"https://camo.githubusercontent.com/54d2bd4750ddaa629dc59ef76440c3d5085e57581bc97e13f140493e5ff1179e/68747470733a2f2f696d672e736869656c64732e696f2f707970692f762f7471646d2e737667\" data-canonical-src=\"https://img.shields.io/pypi/v/tqdm.svg\" style=\"max-width: 100%;\"\u003e\n\u003c/a\u003e \u003ca href=\"https://anaconda.org/conda-forge/tqdm\" rel=\"nofollow\"\u003e\u003cimg alt=\"Conda-Forge-Status\" src=\"https://camo.githubusercontent.com/fed7eaa5e2507c06e57a4fd54f9390a2a3c672fec6a6d17e42855841b88edb3f/68747470733a2f2f696d672e736869656c64732e696f2f636f6e64612f762f636f6e64612d666f7267652f7471646d2e7376673f6c6162656c3d636f6e64612d666f726765266c6f676f3d636f6e64612d666f726765\" data-canonical-src=\"https://img.shields.io/conda/v/conda-forge/tqdm.svg?label=conda-forge\u0026amp;logo=conda-forge\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e \u003ca href=\"https://hub.docker.com/r/tqdm/tqdm\" rel=\"nofollow\"\u003e\u003cimg alt=\"Docker\" src=\"https://camo.githubusercontent.com/88972cbe4fa1cffce98c3abb59e83f4b033f4481260c8b79bc5c86f7c6d4177e/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f646f636b65722d70756c6c2d626c75652e7376673f6c6f676f3d646f636b6572266c6f676f436f6c6f723d7768697465\" data-canonical-src=\"https://img.shields.io/badge/docker-pull-blue.svg?logo=docker\u0026amp;logoColor=white\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e \u003ca href=\"https://snapcraft.io/tqdm\" rel=\"nofollow\"\u003e\u003cimg alt=\"Snapcraft\" src=\"https://camo.githubusercontent.com/03639514007136021a69dff73594b695aec6b6459d3752af8a1651fb930b99a2/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f736e61702d696e7374616c6c2d3832424541302e7376673f6c6f676f3d736e61706372616674\" data-canonical-src=\"https://img.shields.io/badge/snap-install-82BEA0.svg?logo=snapcraft\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003ca href=\"https://github.com/tqdm/tqdm/actions/workflows/test.yml\"\u003e\u003cimg alt=\"Build-Status\" src=\"https://camo.githubusercontent.com/781334dbf5a7949806f8c7e1b4b31f7044d98995993b2870965ceceeae84b9d5/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f616374696f6e732f776f726b666c6f772f7374617475732f7471646d2f7471646d2f746573742e796d6c3f6272616e63683d6d6173746572266c6162656c3d7471646d266c6f676f3d476974487562\" data-canonical-src=\"https://img.shields.io/github/actions/workflow/status/tqdm/tqdm/test.yml?branch=master\u0026amp;label=tqdm\u0026amp;logo=GitHub\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e \u003ca href=\"https://coveralls.io/github/tqdm/tqdm\" rel=\"nofollow\"\u003e\u003cimg alt=\"Coverage-Status\" src=\"https://camo.githubusercontent.com/0fb03064c8e6382d370f30e2a5b46785831be345d14a3e162ac853643455faf6/68747470733a2f2f696d672e736869656c64732e696f2f636f766572616c6c732f6769746875622f7471646d2f7471646d2f6d61737465723f6c6f676f3d636f766572616c6c73\" data-canonical-src=\"https://img.shields.io/coveralls/github/tqdm/tqdm/master?logo=coveralls\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e \u003ca href=\"https://codecov.io/gh/tqdm/tqdm\" rel=\"nofollow\"\u003e\u003cimg alt=\"Branch-Coverage-Status\" src=\"https://camo.githubusercontent.com/ed0cc055181ac469872540e35430f4bf70edd969eaa2fef709dbf222aa1ddcbd/68747470733a2f2f636f6465636f762e696f2f67682f7471646d2f7471646d2f6272616e63682f6d61737465722f67726170682f62616467652e737667\" data-canonical-src=\"https://codecov.io/gh/tqdm/tqdm/branch/master/graph/badge.svg\" style=\"max-width: 100%;\"\u003e\n\u003c/a\u003e \u003ca href=\"https://www.codacy.com/gh/tqdm/tqdm/dashboard\" rel=\"nofollow\"\u003e\u003cimg alt=\"Codacy-Grade\" src=\"https://camo.githubusercontent.com/6e3342d9a8306188181444ee67152594eb4655d1a873ea2db96230052300c47d/68747470733a2f2f6170702e636f646163792e636f6d2f70726f6a6563742f62616467652f47726164652f3366393635353731353938663434353439633738313866323963646366313737\" data-canonical-src=\"https://app.codacy.com/project/badge/Grade/3f965571598f44549c7818f29cdcf177\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e \u003ca href=\"https://libraries.io/pypi/tqdm\" rel=\"nofollow\"\u003e\u003cimg alt=\"Libraries-Rank\" src=\"https://camo.githubusercontent.com/ff9053427c1560df8049e8bd0b43c0ac6fc7ca2d19e70c2b49dcf1ceddd482d5/68747470733a2f2f696d672e736869656c64732e696f2f6c6962726172696573696f2f736f7572636572616e6b2f707970692f7471646d2e7376673f6c6f676f3d6b6f64696e67266c6f676f436f6c6f723d7768697465\" data-canonical-src=\"https://img.shields.io/librariesio/sourcerank/pypi/tqdm.svg?logo=koding\u0026amp;logoColor=white\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e \u003ca href=\"https://pepy.tech/project/tqdm\" rel=\"nofollow\"\u003e\u003cimg alt=\"PyPI-Downloads\" src=\"https://camo.githubusercontent.com/7cf1d221d1808758fc2ff128ce463d3a124b9f883bd1497c54275cf21ca0f562/68747470733a2f2f696d672e736869656c64732e696f2f707970692f646d2f7471646d2e7376673f6c6162656c3d70797069253230646f776e6c6f616473266c6f676f3d50795049266c6f676f436f6c6f723d7768697465\" data-canonical-src=\"https://img.shields.io/pypi/dm/tqdm.svg?label=pypi%20downloads\u0026amp;logo=PyPI\u0026amp;logoColor=white\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003ca href=\"https://raw.githubusercontent.com/tqdm/tqdm/master/LICENCE\" rel=\"nofollow\"\u003e\u003cimg alt=\"LICENCE\" src=\"https://camo.githubusercontent.com/d5daff2dea068d33eefe608aff6c890e506dfdf1bb466adce907e76a192cd87a/68747470733a2f2f696d672e736869656c64732e696f2f707970692f6c2f7471646d2e737667\" data-canonical-src=\"https://img.shields.io/pypi/l/tqdm.svg\" style=\"max-width: 100%;\"\u003e\n\u003c/a\u003e \u003ca href=\"https://www.openhub.net/p/tqdm?ref=Thin+badge\" rel=\"nofollow\"\u003e\u003cimg alt=\"OpenHub-Status\" src=\"https://camo.githubusercontent.com/ac14f272ab53a5192e3561e8a01bced574602f0e0bbb0fd91686bb712835139c/68747470733a2f2f7777772e6f70656e6875622e6e65742f702f7471646d2f776964676574732f70726f6a6563745f7468696e5f62616467653f666f726d61743d676966\" data-canonical-src=\"https://www.openhub.net/p/tqdm/widgets/project_thin_badge?format=gif\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e \u003ca href=\"https://mybinder.org/v2/gh/tqdm/tqdm/master?filepath=DEMO.ipynb\" rel=\"nofollow\"\u003e\u003cimg alt=\"binder-demo\" src=\"https://camo.githubusercontent.com/7861126a7eb56440456a50288331e87b9604edbaa125354195637561fd400014/68747470733a2f2f6d7962696e6465722e6f72672f62616467655f6c6f676f2e737667\" data-canonical-src=\"https://mybinder.org/badge_logo.svg\" style=\"max-width: 100%;\"\u003e\n\u003c/a\u003e \u003ca href=\"https://github.com/vinta/awesome-python\"\u003e\u003cimg alt=\"awesome-python\" src=\"https://camo.githubusercontent.com/d8b2bde4796b67266f07c7a619f554c926ca4750d5d8861b4b740baaddc3fd1e/68747470733a2f2f617765736f6d652e72652f6d656e74696f6e65642d62616467652e737667\" data-canonical-src=\"https://awesome.re/mentioned-badge.svg\" style=\"max-width: 100%;\"\u003e\n\u003c/a\u003e\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003ccode\u003etqdm\u003c/code\u003e derives from the Arabic word \u003cem\u003etaqaddum\u003c/em\u003e (تقدّم) which can mean \"progress,\"\nand is an abbreviation for \"I love you so much\" in Spanish (\u003cem\u003ete quiero demasiado\u003c/em\u003e).\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eInstantly make your loops show a smart progress meter - just wrap any\niterable with \u003ccode\u003etqdm(iterable)\u003c/code\u003e, and you're done!\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-python notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"from tqdm import tqdm\nfor i in tqdm(range(10000)):\n ...\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003efrom\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etqdm\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eimport\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etqdm\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003ein\u003c/span\u003e \u003cspan class=\"pl-en\"\u003etqdm\u003c/span\u003e(\u003cspan class=\"pl-en\"\u003erange\u003c/span\u003e(\u003cspan class=\"pl-c1\"\u003e10000\u003c/span\u003e)):\n ...\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e\u003ccode\u003e76%|████████████████████████        | 7568/10000 [00:33\u0026lt;00:10, 229.00it/s]\u003c/code\u003e\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003ccode\u003etrange(N)\u003c/code\u003e can be also used as a convenient shortcut for\n\u003ccode\u003etqdm(range(N))\u003c/code\u003e.\u003c/p\u003e\n\u003cdl\u003e\n\u003cdt\u003e\u003ca target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://camo.githubusercontent.com/c61c0951f91c3687057e16a8c99decb33a1874786ec929c498449ab36213781e/68747470733a2f2f7471646d2e6769746875622e696f2f696d672f7471646d2e676966\"\u003e\u003cimg alt=\"Screenshot\" src=\"https://camo.githubusercontent.com/c61c0951f91c3687057e16a8c99decb33a1874786ec929c498449ab36213781e/68747470733a2f2f7471646d2e6769746875622e696f2f696d672f7471646d2e676966\" data-animated-image=\"\" data-canonical-src=\"https://tqdm.github.io/img/tqdm.gif\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\u003c/dt\u003e\n\u003cdd\u003e\u003ca href=\"https://tqdm.github.io/video\" rel=\"nofollow\"\u003e\u003cimg alt=\"Video\" src=\"https://camo.githubusercontent.com/50aab498d9b5bfd91306fbc8fe0661f36bf81d32d826bc58a9b4e7b93fcfd64f/68747470733a2f2f7471646d2e6769746875622e696f2f696d672f766964656f2e6a7067\" data-canonical-src=\"https://tqdm.github.io/img/video.jpg\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e \u003ca href=\"https://tqdm.github.io/PyData2019/slides.html\" rel=\"nofollow\"\u003e\u003cimg alt=\"Slides\" src=\"https://camo.githubusercontent.com/985b4aa5f036a962164c1cb56d7cf16cc37e79fde8f5284ef7defbc133bf26fa/68747470733a2f2f7471646d2e6769746875622e696f2f696d672f736c696465732e6a7067\" data-canonical-src=\"https://tqdm.github.io/img/slides.jpg\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e \u003ca href=\"https://tqdm.github.io/merch\" rel=\"nofollow\"\u003e\u003cimg alt=\"Merch\" src=\"https://camo.githubusercontent.com/6acfb97ad1dca0ceee6b49aae9af21547e1b9f3725b0705631469a0320032205/68747470733a2f2f7471646d2e6769746875622e696f2f696d672f6d657263682e6a7067\" data-canonical-src=\"https://tqdm.github.io/img/merch.jpg\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\u003c/dd\u003e\n\u003c/dl\u003e\n\u003cp dir=\"auto\"\u003eIt can also be executed as a module with pipes:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"$ seq 9999999 | tqdm --bytes | wc -l\n75.2MB [00:00, 217MB/s]\n9999999\n\n$ tar -zcf - docs/ | tqdm --bytes --total `du -sb docs/ | cut -f1` \\\n \u0026gt; backup.tgz\n 32%|██████████▍ | 8.89G/27.9G [00:42\u0026lt;01:31, 223MB/s]\"\u003e\u003cpre\u003e$ seq 9999999 \u003cspan class=\"pl-k\"\u003e|\u003c/span\u003e tqdm --bytes \u003cspan class=\"pl-k\"\u003e|\u003c/span\u003e wc -l\n75.2MB [00:00, 217MB/s]\n9999999\n\n$ tar -zcf - docs/ \u003cspan class=\"pl-k\"\u003e|\u003c/span\u003e tqdm --bytes --total \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e`\u003c/span\u003edu -sb docs/ \u003cspan class=\"pl-k\"\u003e|\u003c/span\u003e cut -f1\u003cspan class=\"pl-pds\"\u003e`\u003c/span\u003e\u003c/span\u003e \\\n \u003cspan class=\"pl-k\"\u003e\u0026gt;\u003c/span\u003e backup.tgz\n 32%\u003cspan class=\"pl-k\"\u003e|\u003c/span\u003e██████████▍ \u003cspan class=\"pl-k\"\u003e|\u003c/span\u003e 8.89G/27.9G [00:\u003cspan class=\"pl-k\"\u003e42\u0026lt;\u003c/span\u003e01:31, 223MB/s]\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eOverhead is low -- about 60ns per iteration (80ns with \u003ccode\u003etqdm.gui\u003c/code\u003e), and is\nunit tested against performance regression.\nBy comparison, the well-established\n\u003ca href=\"https://github.com/niltonvolpato/python-progressbar\"\u003eProgressBar\u003c/a\u003e has\nan 800ns/iter overhead.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eIn addition to its low overhead, \u003ccode\u003etqdm\u003c/code\u003e uses smart algorithms to predict\nthe remaining time and to skip unnecessary iteration displays, which allows\nfor a negligible overhead in most cases.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003ccode\u003etqdm\u003c/code\u003e works on any platform\n(Linux, Windows, Mac, FreeBSD, NetBSD, Solaris/SunOS),\nin any console or in a GUI, and is also friendly with IPython/Jupyter notebooks.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003ccode\u003etqdm\u003c/code\u003e does not require any dependencies (not even \u003ccode\u003ecurses\u003c/code\u003e!), just\nPython and an environment supporting \u003ccode\u003ecarriage return \\r\u003c/code\u003e and\n\u003ccode\u003eline feed \\n\u003c/code\u003e control characters.\u003c/p\u003e\n\u003chr\u003e\n\u003cdiv id=\"user-content-table-of-contents\" dir=\"auto\"\u003e\n\u003cp dir=\"auto\"\u003eTable of contents\u003c/p\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ca href=\"#installation\" id=\"user-content-id1\"\u003eInstallation\u003c/a\u003e\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ca href=\"#latest-pypi-stable-release\" id=\"user-content-id2\"\u003eLatest PyPI stable release\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#latest-development-release-on-github\" id=\"user-content-id3\"\u003eLatest development release on GitHub\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#latest-conda-release\" id=\"user-content-id4\"\u003eLatest Conda release\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#latest-snapcraft-release\" id=\"user-content-id5\"\u003eLatest Snapcraft release\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#latest-docker-release\" id=\"user-content-id6\"\u003eLatest Docker release\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#other\" id=\"user-content-id7\"\u003eOther\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#changelog\" id=\"user-content-id8\"\u003eChangelog\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#usage\" id=\"user-content-id9\"\u003eUsage\u003c/a\u003e\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ca href=\"#iterable-based\" id=\"user-content-id10\"\u003eIterable-based\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#manual\" id=\"user-content-id11\"\u003eManual\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#module\" id=\"user-content-id12\"\u003eModule\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#faq-and-known-issues\" id=\"user-content-id13\"\u003eFAQ and Known Issues\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#documentation\" id=\"user-content-id14\"\u003eDocumentation\u003c/a\u003e\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ca href=\"#parameters\" id=\"user-content-id15\"\u003eParameters\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#extra-cli-options\" id=\"user-content-id16\"\u003eExtra CLI Options\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#returns\" id=\"user-content-id17\"\u003eReturns\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#convenience-functions\" id=\"user-content-id18\"\u003eConvenience Functions\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#submodules\" id=\"user-content-id19\"\u003eSubmodules\u003c/a\u003e\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ca href=\"#contrib\" id=\"user-content-id20\"\u003e\u003ccode\u003econtrib\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#examples-and-advanced-usage\" id=\"user-content-id21\"\u003eExamples and Advanced Usage\u003c/a\u003e\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ca href=\"#description-and-additional-stats\" id=\"user-content-id22\"\u003eDescription and additional stats\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#nested-progress-bars\" id=\"user-content-id23\"\u003eNested progress bars\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#hooks-and-callbacks\" id=\"user-content-id24\"\u003eHooks and callbacks\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#asyncio\" id=\"user-content-id25\"\u003e\u003ccode\u003easyncio\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#pandas-integration\" id=\"user-content-id26\"\u003ePandas Integration\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#keras-integration\" id=\"user-content-id27\"\u003eKeras Integration\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#dask-integration\" id=\"user-content-id28\"\u003eDask Integration\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#ipython-jupyter-integration\" id=\"user-content-id29\"\u003eIPython/Jupyter Integration\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#custom-integration\" id=\"user-content-id30\"\u003eCustom Integration\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#dynamic-monitor-meter\" id=\"user-content-id31\"\u003eDynamic Monitor/Meter\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#writing-messages\" id=\"user-content-id32\"\u003eWriting messages\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#redirecting-writing\" id=\"user-content-id33\"\u003eRedirecting writing\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#redirecting-logging\" id=\"user-content-id34\"\u003eRedirecting \u003ccode\u003elogging\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#monitoring-thread-intervals-and-miniters\" id=\"user-content-id35\"\u003eMonitoring thread, intervals and miniters\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#merch\" id=\"user-content-id36\"\u003eMerch\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#contributions\" id=\"user-content-id37\"\u003eContributions\u003c/a\u003e\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ca href=\"#ports-to-other-languages\" id=\"user-content-id38\"\u003ePorts to Other Languages\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#licence\" id=\"user-content-id39\"\u003eLICENCE\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/div\u003e\n\u003ca name=\"user-content-installation\"\u003e\u003c/a\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e\u003ca href=\"#table-of-contents\"\u003eInstallation\u003c/a\u003e\u003c/h3\u003e\u003ca id=\"user-content-installation\" class=\"anchor\" aria-label=\"Permalink: Installation\" href=\"#installation\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003ca name=\"user-content-latest-pypi-stable-release\"\u003e\u003c/a\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch4 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e\u003ca href=\"#table-of-contents\"\u003eLatest PyPI stable release\u003c/a\u003e\u003c/h4\u003e\u003ca id=\"user-content-latest-pypi-stable-release\" class=\"anchor\" aria-label=\"Permalink: Latest PyPI stable release\" href=\"#latest-pypi-stable-release\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e\u003ca href=\"https://tqdm.github.io/releases\" rel=\"nofollow\"\u003e\u003cimg alt=\"Versions\" src=\"https://camo.githubusercontent.com/54d2bd4750ddaa629dc59ef76440c3d5085e57581bc97e13f140493e5ff1179e/68747470733a2f2f696d672e736869656c64732e696f2f707970692f762f7471646d2e737667\" data-canonical-src=\"https://img.shields.io/pypi/v/tqdm.svg\" style=\"max-width: 100%;\"\u003e\n\u003c/a\u003e \u003ca href=\"https://pepy.tech/project/tqdm\" rel=\"nofollow\"\u003e\u003cimg alt=\"PyPI-Downloads\" src=\"https://camo.githubusercontent.com/7cf1d221d1808758fc2ff128ce463d3a124b9f883bd1497c54275cf21ca0f562/68747470733a2f2f696d672e736869656c64732e696f2f707970692f646d2f7471646d2e7376673f6c6162656c3d70797069253230646f776e6c6f616473266c6f676f3d50795049266c6f676f436f6c6f723d7768697465\" data-canonical-src=\"https://img.shields.io/pypi/dm/tqdm.svg?label=pypi%20downloads\u0026amp;logo=PyPI\u0026amp;logoColor=white\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e \u003ca href=\"https://github.com/tqdm/tqdm/network/dependents\"\u003e\u003cimg alt=\"Libraries-Dependents\" src=\"https://camo.githubusercontent.com/c4419e1885738b6afd8b9dc572520cef2d10fb78704d8733ee1f2225efd58ab8/68747470733a2f2f696d672e736869656c64732e696f2f6c6962726172696573696f2f646570656e64656e742d7265706f732f707970692f7471646d2e7376673f6c6f676f3d6b6f64696e67266c6f676f436f6c6f723d7768697465\" data-canonical-src=\"https://img.shields.io/librariesio/dependent-repos/pypi/tqdm.svg?logo=koding\u0026amp;logoColor=white\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"pip install tqdm\"\u003e\u003cpre\u003epip install tqdm\u003c/pre\u003e\u003c/div\u003e\n\u003ca name=\"user-content-latest-development-release-on-github\"\u003e\u003c/a\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch4 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e\u003ca href=\"#table-of-contents\"\u003eLatest development release on GitHub\u003c/a\u003e\u003c/h4\u003e\u003ca id=\"user-content-latest-development-release-on-github\" class=\"anchor\" aria-label=\"Permalink: Latest development release on GitHub\" href=\"#latest-development-release-on-github\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e\u003ca href=\"https://github.com/tqdm/tqdm/releases\"\u003e\u003cimg alt=\"GitHub-Status\" src=\"https://camo.githubusercontent.com/46d6cf7e01e490dec10ed1e8d643d57b8230e626b8af6dacac6a50dbc5beb0fe/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f7461672f7471646d2f7471646d2e7376673f6d61784167653d3836343030266c6f676f3d676974687562266c6f676f436f6c6f723d7768697465\" data-canonical-src=\"https://img.shields.io/github/tag/tqdm/tqdm.svg?maxAge=86400\u0026amp;logo=github\u0026amp;logoColor=white\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e \u003ca href=\"https://github.com/tqdm/tqdm/stargazers\"\u003e\u003cimg alt=\"GitHub-Stars\" src=\"https://camo.githubusercontent.com/eb9e3ac5811c450733cb9964bcd8e3f2823258c4f02cd87a8279044f36fd4e71/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f73746172732f7471646d2f7471646d2e7376673f6c6f676f3d676974687562266c6f676f436f6c6f723d7768697465\" data-canonical-src=\"https://img.shields.io/github/stars/tqdm/tqdm.svg?logo=github\u0026amp;logoColor=white\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e \u003ca href=\"https://github.com/tqdm/tqdm/graphs/commit-activity\"\u003e\u003cimg alt=\"GitHub-Commits\" src=\"https://camo.githubusercontent.com/074830ea80f6a475d636c6d370ea48ad0abd0bbd45fc65c8214bd089dbe1f18c/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f636f6d6d69742d61637469766974792f792f7471646d2f7471646d2e7376673f6c6f676f3d676974266c6f676f436f6c6f723d7768697465\" data-canonical-src=\"https://img.shields.io/github/commit-activity/y/tqdm/tqdm.svg?logo=git\u0026amp;logoColor=white\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e \u003ca href=\"https://github.com/tqdm/tqdm/network\"\u003e\u003cimg alt=\"GitHub-Forks\" src=\"https://camo.githubusercontent.com/af32aa0e131f59b66540dd4ae10baeb92c764f4c45ae445f57f967e08d38ae79/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f666f726b732f7471646d2f7471646d2e7376673f6c6f676f3d676974687562266c6f676f436f6c6f723d7768697465\" data-canonical-src=\"https://img.shields.io/github/forks/tqdm/tqdm.svg?logo=github\u0026amp;logoColor=white\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e \u003ca href=\"https://github.com/tqdm/tqdm/pulse\"\u003e\u003cimg alt=\"GitHub-Updated\" src=\"https://camo.githubusercontent.com/fe18abf6415b584e4fcb55d50390b5b9dcccf2906d13797ec6426595678f25ff/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6173742d636f6d6d69742f7471646d2f7471646d2f6d61737465722e7376673f6c6f676f3d676974687562266c6f676f436f6c6f723d7768697465266c6162656c3d707573686564\" data-canonical-src=\"https://img.shields.io/github/last-commit/tqdm/tqdm/master.svg?logo=github\u0026amp;logoColor=white\u0026amp;label=pushed\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp dir=\"auto\"\u003ePull and install pre-release \u003ccode\u003edevel\u003c/code\u003e branch:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"pip install \u0026quot;git+https://github.com/tqdm/tqdm.git@devel#egg=tqdm\u0026quot;\"\u003e\u003cpre\u003epip install \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003egit+https://github.com/tqdm/tqdm.git@devel#egg=tqdm\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003ca name=\"user-content-latest-conda-release\"\u003e\u003c/a\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch4 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e\u003ca href=\"#table-of-contents\"\u003eLatest Conda release\u003c/a\u003e\u003c/h4\u003e\u003ca id=\"user-content-latest-conda-release\" class=\"anchor\" aria-label=\"Permalink: Latest Conda release\" href=\"#latest-conda-release\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e\u003ca href=\"https://anaconda.org/conda-forge/tqdm\" rel=\"nofollow\"\u003e\u003cimg alt=\"Conda-Forge-Status\" src=\"https://camo.githubusercontent.com/fed7eaa5e2507c06e57a4fd54f9390a2a3c672fec6a6d17e42855841b88edb3f/68747470733a2f2f696d672e736869656c64732e696f2f636f6e64612f762f636f6e64612d666f7267652f7471646d2e7376673f6c6162656c3d636f6e64612d666f726765266c6f676f3d636f6e64612d666f726765\" data-canonical-src=\"https://img.shields.io/conda/v/conda-forge/tqdm.svg?label=conda-forge\u0026amp;logo=conda-forge\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"conda install -c conda-forge tqdm\"\u003e\u003cpre\u003econda install -c conda-forge tqdm\u003c/pre\u003e\u003c/div\u003e\n\u003ca name=\"user-content-latest-snapcraft-release\"\u003e\u003c/a\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch4 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e\u003ca href=\"#table-of-contents\"\u003eLatest Snapcraft release\u003c/a\u003e\u003c/h4\u003e\u003ca id=\"user-content-latest-snapcraft-release\" class=\"anchor\" aria-label=\"Permalink: Latest Snapcraft release\" href=\"#latest-snapcraft-release\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e\u003ca href=\"https://snapcraft.io/tqdm\" rel=\"nofollow\"\u003e\u003cimg alt=\"Snapcraft\" src=\"https://camo.githubusercontent.com/03639514007136021a69dff73594b695aec6b6459d3752af8a1651fb930b99a2/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f736e61702d696e7374616c6c2d3832424541302e7376673f6c6f676f3d736e61706372616674\" data-canonical-src=\"https://img.shields.io/badge/snap-install-82BEA0.svg?logo=snapcraft\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eThere are 3 channels to choose from:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"snap install tqdm # implies --stable, i.e. latest tagged release\nsnap install tqdm --candidate # master branch\nsnap install tqdm --edge # devel branch\"\u003e\u003cpre\u003esnap install tqdm \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e implies --stable, i.e. latest tagged release\u003c/span\u003e\nsnap install tqdm --candidate \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e master branch\u003c/span\u003e\nsnap install tqdm --edge \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e devel branch\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eNote that \u003ccode\u003esnap\u003c/code\u003e binaries are purely for CLI use (not \u003ccode\u003eimport\u003c/code\u003e-able), and\nautomatically set up \u003ccode\u003ebash\u003c/code\u003e tab-completion.\u003c/p\u003e\n\u003ca name=\"user-content-latest-docker-release\"\u003e\u003c/a\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch4 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e\u003ca href=\"#table-of-contents\"\u003eLatest Docker release\u003c/a\u003e\u003c/h4\u003e\u003ca id=\"user-content-latest-docker-release\" class=\"anchor\" aria-label=\"Permalink: Latest Docker release\" href=\"#latest-docker-release\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e\u003ca href=\"https://hub.docker.com/r/tqdm/tqdm\" rel=\"nofollow\"\u003e\u003cimg alt=\"Docker\" src=\"https://camo.githubusercontent.com/88972cbe4fa1cffce98c3abb59e83f4b033f4481260c8b79bc5c86f7c6d4177e/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f646f636b65722d70756c6c2d626c75652e7376673f6c6f676f3d646f636b6572266c6f676f436f6c6f723d7768697465\" data-canonical-src=\"https://img.shields.io/badge/docker-pull-blue.svg?logo=docker\u0026amp;logoColor=white\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"docker pull tqdm/tqdm\ndocker run -i --rm tqdm/tqdm --help\"\u003e\u003cpre\u003edocker pull tqdm/tqdm\ndocker run -i --rm tqdm/tqdm --help\u003c/pre\u003e\u003c/div\u003e\n\u003ca name=\"user-content-other\"\u003e\u003c/a\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch4 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e\u003ca href=\"#table-of-contents\"\u003eOther\u003c/a\u003e\u003c/h4\u003e\u003ca id=\"user-content-other\" class=\"anchor\" aria-label=\"Permalink: Other\" href=\"#other\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eThere are other (unofficial) places where \u003ccode\u003etqdm\u003c/code\u003e may be downloaded, particularly for CLI use:\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003ca href=\"https://repology.org/project/python:tqdm/versions\" rel=\"nofollow\"\u003e\u003cimg alt=\"Repology\" src=\"https://camo.githubusercontent.com/d9be6fb339e19d404db849e014b46df5e97beeda1a0cf863eb90ec7ef8bb5149/68747470733a2f2f7265706f6c6f67792e6f72672f62616467652f74696e792d7265706f732f707974686f6e3a7471646d2e737667\" data-canonical-src=\"https://repology.org/badge/tiny-repos/python:tqdm.svg\" style=\"max-width: 100%;\"\u003e\n\u003c/a\u003e\u003c/p\u003e\n\u003ca name=\"user-content-changelog\"\u003e\u003c/a\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e\u003ca href=\"#table-of-contents\"\u003eChangelog\u003c/a\u003e\u003c/h3\u003e\u003ca id=\"user-content-changelog\" class=\"anchor\" aria-label=\"Permalink: Changelog\" href=\"#changelog\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eThe list of all changes is available either on GitHub's Releases:\n\u003ca href=\"https://github.com/tqdm/tqdm/releases\"\u003e\u003cimg alt=\"GitHub-Status\" src=\"https://camo.githubusercontent.com/46d6cf7e01e490dec10ed1e8d643d57b8230e626b8af6dacac6a50dbc5beb0fe/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f7461672f7471646d2f7471646d2e7376673f6d61784167653d3836343030266c6f676f3d676974687562266c6f676f436f6c6f723d7768697465\" data-canonical-src=\"https://img.shields.io/github/tag/tqdm/tqdm.svg?maxAge=86400\u0026amp;logo=github\u0026amp;logoColor=white\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e, on the\n\u003ca href=\"https://github.com/tqdm/tqdm/wiki/Releases\"\u003ewiki\u003c/a\u003e, or on the\n\u003ca href=\"https://tqdm.github.io/releases\" rel=\"nofollow\"\u003ewebsite\u003c/a\u003e.\u003c/p\u003e\n\u003ca name=\"user-content-usage\"\u003e\u003c/a\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e\u003ca href=\"#table-of-contents\"\u003eUsage\u003c/a\u003e\u003c/h3\u003e\u003ca id=\"user-content-usage\" class=\"anchor\" aria-label=\"Permalink: Usage\" href=\"#usage\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e\u003ccode\u003etqdm\u003c/code\u003e is very versatile and can be used in a number of ways.\nThe three main ones are given below.\u003c/p\u003e\n\u003ca name=\"user-content-iterable-based\"\u003e\u003c/a\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch4 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e\u003ca href=\"#table-of-contents\"\u003eIterable-based\u003c/a\u003e\u003c/h4\u003e\u003ca id=\"user-content-iterable-based\" class=\"anchor\" aria-label=\"Permalink: Iterable-based\" href=\"#iterable-based\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eWrap \u003ccode\u003etqdm()\u003c/code\u003e around any iterable:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-python notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"from tqdm import tqdm\nfrom time import sleep\n\ntext = \u0026quot;\u0026quot;\nfor char in tqdm([\u0026quot;a\u0026quot;, \u0026quot;b\u0026quot;, \u0026quot;c\u0026quot;, \u0026quot;d\u0026quot;]):\n sleep(0.25)\n text = text + char\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003efrom\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etqdm\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eimport\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etqdm\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003efrom\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etime\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eimport\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003esleep\u003c/span\u003e\n\n\u003cspan class=\"pl-s1\"\u003etext\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"\"\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003echar\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003ein\u003c/span\u003e \u003cspan class=\"pl-en\"\u003etqdm\u003c/span\u003e([\u003cspan class=\"pl-s\"\u003e\"a\"\u003c/span\u003e, \u003cspan class=\"pl-s\"\u003e\"b\"\u003c/span\u003e, \u003cspan class=\"pl-s\"\u003e\"c\"\u003c/span\u003e, \u003cspan class=\"pl-s\"\u003e\"d\"\u003c/span\u003e]):\n \u003cspan class=\"pl-en\"\u003esleep\u003c/span\u003e(\u003cspan class=\"pl-c1\"\u003e0.25\u003c/span\u003e)\n \u003cspan class=\"pl-s1\"\u003etext\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etext\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e+\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003echar\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e\u003ccode\u003etrange(i)\u003c/code\u003e is a special optimised instance of \u003ccode\u003etqdm(range(i))\u003c/code\u003e:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-python notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"from tqdm import trange\n\nfor i in trange(100):\n sleep(0.01)\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003efrom\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etqdm\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eimport\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etrange\u003c/span\u003e\n\n\u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003ein\u003c/span\u003e \u003cspan class=\"pl-en\"\u003etrange\u003c/span\u003e(\u003cspan class=\"pl-c1\"\u003e100\u003c/span\u003e):\n \u003cspan class=\"pl-en\"\u003esleep\u003c/span\u003e(\u003cspan class=\"pl-c1\"\u003e0.01\u003c/span\u003e)\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eInstantiation outside of the loop allows for manual control over \u003ccode\u003etqdm()\u003c/code\u003e:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-python notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"pbar = tqdm([\u0026quot;a\u0026quot;, \u0026quot;b\u0026quot;, \u0026quot;c\u0026quot;, \u0026quot;d\u0026quot;])\nfor char in pbar:\n sleep(0.25)\n pbar.set_description(\u0026quot;Processing %s\u0026quot; % char)\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003epbar\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-en\"\u003etqdm\u003c/span\u003e([\u003cspan class=\"pl-s\"\u003e\"a\"\u003c/span\u003e, \u003cspan class=\"pl-s\"\u003e\"b\"\u003c/span\u003e, \u003cspan class=\"pl-s\"\u003e\"c\"\u003c/span\u003e, \u003cspan class=\"pl-s\"\u003e\"d\"\u003c/span\u003e])\n\u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003echar\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003ein\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003epbar\u003c/span\u003e:\n \u003cspan class=\"pl-en\"\u003esleep\u003c/span\u003e(\u003cspan class=\"pl-c1\"\u003e0.25\u003c/span\u003e)\n \u003cspan class=\"pl-s1\"\u003epbar\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eset_description\u003c/span\u003e(\u003cspan class=\"pl-s\"\u003e\"Processing %s\"\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e%\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003echar\u003c/span\u003e)\u003c/pre\u003e\u003c/div\u003e\n\u003ca name=\"user-content-manual\"\u003e\u003c/a\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch4 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e\u003ca href=\"#table-of-contents\"\u003eManual\u003c/a\u003e\u003c/h4\u003e\u003ca id=\"user-content-manual\" class=\"anchor\" aria-label=\"Permalink: Manual\" href=\"#manual\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eManual control of \u003ccode\u003etqdm()\u003c/code\u003e updates using a \u003ccode\u003ewith\u003c/code\u003e statement:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-python notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"with tqdm(total=100) as pbar:\n for i in range(10):\n sleep(0.1)\n pbar.update(10)\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003ewith\u003c/span\u003e \u003cspan class=\"pl-en\"\u003etqdm\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003etotal\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e100\u003c/span\u003e) \u003cspan class=\"pl-k\"\u003eas\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003epbar\u003c/span\u003e:\n \u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003ein\u003c/span\u003e \u003cspan class=\"pl-en\"\u003erange\u003c/span\u003e(\u003cspan class=\"pl-c1\"\u003e10\u003c/span\u003e):\n \u003cspan class=\"pl-en\"\u003esleep\u003c/span\u003e(\u003cspan class=\"pl-c1\"\u003e0.1\u003c/span\u003e)\n \u003cspan class=\"pl-s1\"\u003epbar\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eupdate\u003c/span\u003e(\u003cspan class=\"pl-c1\"\u003e10\u003c/span\u003e)\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eIf the optional variable \u003ccode\u003etotal\u003c/code\u003e (or an iterable with \u003ccode\u003elen()\u003c/code\u003e) is\nprovided, predictive stats are displayed.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003ccode\u003ewith\u003c/code\u003e is also optional (you can just assign \u003ccode\u003etqdm()\u003c/code\u003e to a variable,\nbut in this case don't forget to \u003ccode\u003edel\u003c/code\u003e or \u003ccode\u003eclose()\u003c/code\u003e at the end:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-python notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"pbar = tqdm(total=100)\nfor i in range(10):\n sleep(0.1)\n pbar.update(10)\npbar.close()\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003epbar\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-en\"\u003etqdm\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003etotal\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e100\u003c/span\u003e)\n\u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003ein\u003c/span\u003e \u003cspan class=\"pl-en\"\u003erange\u003c/span\u003e(\u003cspan class=\"pl-c1\"\u003e10\u003c/span\u003e):\n \u003cspan class=\"pl-en\"\u003esleep\u003c/span\u003e(\u003cspan class=\"pl-c1\"\u003e0.1\u003c/span\u003e)\n \u003cspan class=\"pl-s1\"\u003epbar\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eupdate\u003c/span\u003e(\u003cspan class=\"pl-c1\"\u003e10\u003c/span\u003e)\n\u003cspan class=\"pl-s1\"\u003epbar\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eclose\u003c/span\u003e()\u003c/pre\u003e\u003c/div\u003e\n\u003ca name=\"user-content-module\"\u003e\u003c/a\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch4 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e\u003ca href=\"#table-of-contents\"\u003eModule\u003c/a\u003e\u003c/h4\u003e\u003ca id=\"user-content-module\" class=\"anchor\" aria-label=\"Permalink: Module\" href=\"#module\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003ePerhaps the most wonderful use of \u003ccode\u003etqdm\u003c/code\u003e is in a script or on the command\nline. Simply inserting \u003ccode\u003etqdm\u003c/code\u003e (or \u003ccode\u003epython -m tqdm\u003c/code\u003e) between pipes will pass\nthrough all \u003ccode\u003estdin\u003c/code\u003e to \u003ccode\u003estdout\u003c/code\u003e while printing progress to \u003ccode\u003estderr\u003c/code\u003e.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eThe example below demonstrate counting the number of lines in all Python files\nin the current directory, with timing information included.\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"$ time find . -name '*.py' -type f -exec cat \\{} \\; | wc -l\n857365\n\nreal 0m3.458s\nuser 0m0.274s\nsys 0m3.325s\n\n$ time find . -name '*.py' -type f -exec cat \\{} \\; | tqdm | wc -l\n857366it [00:03, 246471.31it/s]\n857365\n\nreal 0m3.585s\nuser 0m0.862s\nsys 0m3.358s\"\u003e\u003cpre\u003e$ \u003cspan class=\"pl-k\"\u003etime\u003c/span\u003e find \u003cspan class=\"pl-c1\"\u003e.\u003c/span\u003e -name \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e'\u003c/span\u003e*.py\u003cspan class=\"pl-pds\"\u003e'\u003c/span\u003e\u003c/span\u003e -type f -exec cat \u003cspan class=\"pl-cce\"\u003e\\{\u003c/span\u003e} \u003cspan class=\"pl-cce\"\u003e\\;\u003c/span\u003e \u003cspan class=\"pl-k\"\u003e|\u003c/span\u003e wc -l\n857365\n\nreal 0m3.458s\nuser 0m0.274s\nsys 0m3.325s\n\n$ \u003cspan class=\"pl-k\"\u003etime\u003c/span\u003e find \u003cspan class=\"pl-c1\"\u003e.\u003c/span\u003e -name \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e'\u003c/span\u003e*.py\u003cspan class=\"pl-pds\"\u003e'\u003c/span\u003e\u003c/span\u003e -type f -exec cat \u003cspan class=\"pl-cce\"\u003e\\{\u003c/span\u003e} \u003cspan class=\"pl-cce\"\u003e\\;\u003c/span\u003e \u003cspan class=\"pl-k\"\u003e|\u003c/span\u003e tqdm \u003cspan class=\"pl-k\"\u003e|\u003c/span\u003e wc -l\n857366it [00:03, 246471.31it/s]\n857365\n\nreal 0m3.585s\nuser 0m0.862s\nsys 0m3.358s\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eNote that the usual arguments for \u003ccode\u003etqdm\u003c/code\u003e can also be specified.\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"$ find . -name '*.py' -type f -exec cat \\{} \\; |\n tqdm --unit loc --unit_scale --total 857366 \u0026gt;\u0026gt; /dev/null\n100%|█████████████████████████████████| 857K/857K [00:04\u0026lt;00:00, 246Kloc/s]\"\u003e\u003cpre\u003e$ find \u003cspan class=\"pl-c1\"\u003e.\u003c/span\u003e -name \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e'\u003c/span\u003e*.py\u003cspan class=\"pl-pds\"\u003e'\u003c/span\u003e\u003c/span\u003e -type f -exec cat \u003cspan class=\"pl-cce\"\u003e\\{\u003c/span\u003e} \u003cspan class=\"pl-cce\"\u003e\\;\u003c/span\u003e \u003cspan class=\"pl-k\"\u003e|\u003c/span\u003e\n tqdm --unit loc --unit_scale --total 857366 \u003cspan class=\"pl-k\"\u003e\u0026gt;\u0026gt;\u003c/span\u003e /dev/null\n100%\u003cspan class=\"pl-k\"\u003e|\u003c/span\u003e█████████████████████████████████\u003cspan class=\"pl-k\"\u003e|\u003c/span\u003e 857K/857K [00:\u003cspan class=\"pl-k\"\u003e04\u0026lt;\u003c/span\u003e00:00, 246Kloc/s]\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eBacking up a large directory?\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"$ tar -zcf - docs/ | tqdm --bytes --total `du -sb docs/ | cut -f1` \\\n \u0026gt; backup.tgz\n 44%|██████████████▊ | 153M/352M [00:14\u0026lt;00:18, 11.0MB/s]\"\u003e\u003cpre\u003e$ tar -zcf - docs/ \u003cspan class=\"pl-k\"\u003e|\u003c/span\u003e tqdm --bytes --total \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e`\u003c/span\u003edu -sb docs/ \u003cspan class=\"pl-k\"\u003e|\u003c/span\u003e cut -f1\u003cspan class=\"pl-pds\"\u003e`\u003c/span\u003e\u003c/span\u003e \\\n \u003cspan class=\"pl-k\"\u003e\u0026gt;\u003c/span\u003e backup.tgz\n 44%\u003cspan class=\"pl-k\"\u003e|\u003c/span\u003e██████████████▊ \u003cspan class=\"pl-k\"\u003e|\u003c/span\u003e 153M/352M [00:\u003cspan class=\"pl-k\"\u003e14\u0026lt;\u003c/span\u003e00:18, 11.0MB/s]\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eThis can be beautified further:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"$ BYTES=$(du -sb docs/ | cut -f1)\n$ tar -cf - docs/ \\\n | tqdm --bytes --total \u0026quot;$BYTES\u0026quot; --desc Processing | gzip \\\n | tqdm --bytes --total \u0026quot;$BYTES\u0026quot; --desc Compressed --position 1 \\\n \u0026gt; ~/backup.tgz\nProcessing: 100%|██████████████████████| 352M/352M [00:14\u0026lt;00:00, 30.2MB/s]\nCompressed: 42%|█████████▎ | 148M/352M [00:14\u0026lt;00:19, 10.9MB/s]\"\u003e\u003cpre\u003e$ BYTES=\u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e$(\u003c/span\u003edu -sb docs/ \u003cspan class=\"pl-k\"\u003e|\u003c/span\u003e cut -f1\u003cspan class=\"pl-pds\"\u003e)\u003c/span\u003e\u003c/span\u003e\n$ tar -cf - docs/ \\\n \u003cspan class=\"pl-k\"\u003e|\u003c/span\u003e tqdm --bytes --total \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003e$BYTES\u003c/span\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e --desc Processing \u003cspan class=\"pl-k\"\u003e|\u003c/span\u003e gzip \\\n \u003cspan class=\"pl-k\"\u003e|\u003c/span\u003e tqdm --bytes --total \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003e$BYTES\u003c/span\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e --desc Compressed --position 1 \\\n \u003cspan class=\"pl-k\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-k\"\u003e~\u003c/span\u003e/backup.tgz\nProcessing: 100%\u003cspan class=\"pl-k\"\u003e|\u003c/span\u003e██████████████████████\u003cspan class=\"pl-k\"\u003e|\u003c/span\u003e 352M/352M [00:\u003cspan class=\"pl-k\"\u003e14\u0026lt;\u003c/span\u003e00:00, 30.2MB/s]\nCompressed: 42%\u003cspan class=\"pl-k\"\u003e|\u003c/span\u003e█████████▎ \u003cspan class=\"pl-k\"\u003e|\u003c/span\u003e 148M/352M [00:\u003cspan class=\"pl-k\"\u003e14\u0026lt;\u003c/span\u003e00:19, 10.9MB/s]\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eOr done on a file level using 7-zip:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"$ 7z a -bd -r backup.7z docs/ | grep Compressing \\\n | tqdm --total $(find docs/ -type f | wc -l) --unit files \\\n | grep -v Compressing\n100%|██████████████████████████▉| 15327/15327 [01:00\u0026lt;00:00, 712.96files/s]\"\u003e\u003cpre\u003e$ 7z a -bd -r backup.7z docs/ \u003cspan class=\"pl-k\"\u003e|\u003c/span\u003e grep Compressing \\\n \u003cspan class=\"pl-k\"\u003e|\u003c/span\u003e tqdm --total \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e$(\u003c/span\u003efind docs/ -type f \u003cspan class=\"pl-k\"\u003e|\u003c/span\u003e wc -l\u003cspan class=\"pl-pds\"\u003e)\u003c/span\u003e\u003c/span\u003e --unit files \\\n \u003cspan class=\"pl-k\"\u003e|\u003c/span\u003e grep -v Compressing\n100%\u003cspan class=\"pl-k\"\u003e|\u003c/span\u003e██████████████████████████▉\u003cspan class=\"pl-k\"\u003e|\u003c/span\u003e 15327/15327 [01:\u003cspan class=\"pl-k\"\u003e00\u0026lt;\u003c/span\u003e00:00, 712.96files/s]\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003ePre-existing CLI programs already outputting basic progress information will\nbenefit from \u003ccode\u003etqdm\u003c/code\u003e's \u003ccode\u003e--update\u003c/code\u003e and \u003ccode\u003e--update_to\u003c/code\u003e flags:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"$ seq 3 0.1 5 | tqdm --total 5 --update_to --null\n100%|████████████████████████████████████| 5.0/5 [00:00\u0026lt;00:00, 9673.21it/s]\n$ seq 10 | tqdm --update --null # 1 + 2 + ... + 10 = 55 iterations\n55it [00:00, 90006.52it/s]\"\u003e\u003cpre\u003e$ seq 3 0.1 5 \u003cspan class=\"pl-k\"\u003e|\u003c/span\u003e tqdm --total 5 --update_to --null\n100%\u003cspan class=\"pl-k\"\u003e|\u003c/span\u003e████████████████████████████████████\u003cspan class=\"pl-k\"\u003e|\u003c/span\u003e 5.0/5 [00:\u003cspan class=\"pl-k\"\u003e00\u0026lt;\u003c/span\u003e00:00, 9673.21it/s]\n$ seq 10 \u003cspan class=\"pl-k\"\u003e|\u003c/span\u003e tqdm --update --null \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e 1 + 2 + ... + 10 = 55 iterations\u003c/span\u003e\n55it [00:00, 90006.52it/s]\u003c/pre\u003e\u003c/div\u003e\n\u003ca name=\"user-content-faq-and-known-issues\"\u003e\u003c/a\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e\u003ca href=\"#table-of-contents\"\u003eFAQ and Known Issues\u003c/a\u003e\u003c/h3\u003e\u003ca id=\"user-content-faq-and-known-issues\" class=\"anchor\" aria-label=\"Permalink: FAQ and Known Issues\" href=\"#faq-and-known-issues\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e\u003ca href=\"https://github.com/tqdm/tqdm/issues?q=\"\u003e\u003cimg alt=\"GitHub-Issues\" src=\"https://camo.githubusercontent.com/70e2e8e5918a84706aef777108b1b2f746905dbde5632e31dd6a6995ea606b92/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6973737565732d636c6f7365642f7471646d2f7471646d2e7376673f6c6f676f3d676974687562266c6f676f436f6c6f723d7768697465\" data-canonical-src=\"https://img.shields.io/github/issues-closed/tqdm/tqdm.svg?logo=github\u0026amp;logoColor=white\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eThe most common issues relate to excessive output on multiple lines, instead\nof a neat one-line progress bar.\u003c/p\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eConsoles in general: require support for carriage return (\u003ccode\u003eCR\u003c/code\u003e, \u003ccode\u003e\\r\u003c/code\u003e).\u003cul dir=\"auto\"\u003e\n\u003cli\u003eSome cloud logging consoles which don't support \u003ccode\u003e\\r\u003c/code\u003e properly\n(\u003ca href=\"https://github.com/tqdm/tqdm/issues/966\" data-hovercard-type=\"issue\" data-hovercard-url=\"/tqdm/tqdm/issues/966/hovercard\"\u003ecloudwatch\u003c/a\u003e,\n\u003ca href=\"https://github.com/tqdm/tqdm/issues/1319\" data-hovercard-type=\"issue\" data-hovercard-url=\"/tqdm/tqdm/issues/1319/hovercard\"\u003eK8s\u003c/a\u003e) may benefit from\n\u003ccode\u003eexport TQDM_POSITION=-1\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eNested progress bars:\u003cul dir=\"auto\"\u003e\n\u003cli\u003eConsoles in general: require support for moving cursors up to the\nprevious line. For example,\n\u003ca href=\"https://github.com/tqdm/tqdm/issues/191#issuecomment-230168030\" data-hovercard-type=\"issue\" data-hovercard-url=\"/tqdm/tqdm/issues/191/hovercard\"\u003eIDLE\u003c/a\u003e,\n\u003ca href=\"https://github.com/tqdm/tqdm/issues/254\" data-hovercard-type=\"issue\" data-hovercard-url=\"/tqdm/tqdm/issues/254/hovercard\"\u003eConEmu\u003c/a\u003e and\n\u003ca href=\"https://github.com/tqdm/tqdm/issues/203\" data-hovercard-type=\"issue\" data-hovercard-url=\"/tqdm/tqdm/issues/203/hovercard\"\u003ePyCharm\u003c/a\u003e (also\n\u003ca href=\"https://github.com/tqdm/tqdm/issues/208\" data-hovercard-type=\"issue\" data-hovercard-url=\"/tqdm/tqdm/issues/208/hovercard\"\u003ehere\u003c/a\u003e,\n\u003ca href=\"https://github.com/tqdm/tqdm/issues/307\" data-hovercard-type=\"issue\" data-hovercard-url=\"/tqdm/tqdm/issues/307/hovercard\"\u003ehere\u003c/a\u003e, and\n\u003ca href=\"https://github.com/tqdm/tqdm/issues/454#issuecomment-335416815\" data-hovercard-type=\"issue\" data-hovercard-url=\"/tqdm/tqdm/issues/454/hovercard\"\u003ehere\u003c/a\u003e)\nlack full support.\u003c/li\u003e\n\u003cli\u003eWindows: additionally may require the Python module \u003ccode\u003ecolorama\u003c/code\u003e\nto ensure nested bars stay within their respective lines.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eUnicode:\u003cul dir=\"auto\"\u003e\n\u003cli\u003eEnvironments which report that they support unicode will have solid smooth\nprogressbars. The fallback is an \u003ccode\u003eascii\u003c/code\u003e-only bar.\u003c/li\u003e\n\u003cli\u003eWindows consoles often only partially support unicode and thus\n\u003ca href=\"https://github.com/tqdm/tqdm/issues/454#issuecomment-335416815\" data-hovercard-type=\"issue\" data-hovercard-url=\"/tqdm/tqdm/issues/454/hovercard\"\u003eoften require explicit ascii=True\u003c/a\u003e\n(also \u003ca href=\"https://github.com/tqdm/tqdm/issues/499\" data-hovercard-type=\"issue\" data-hovercard-url=\"/tqdm/tqdm/issues/499/hovercard\"\u003ehere\u003c/a\u003e). This is due to\neither normal-width unicode characters being incorrectly displayed as\n\"wide\", or some unicode characters not rendering.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eWrapping generators:\u003cul dir=\"auto\"\u003e\n\u003cli\u003eGenerator wrapper functions tend to hide the length of iterables.\n\u003ccode\u003etqdm\u003c/code\u003e does not.\u003c/li\u003e\n\u003cli\u003eReplace \u003ccode\u003etqdm(enumerate(...))\u003c/code\u003e with \u003ccode\u003eenumerate(tqdm(...))\u003c/code\u003e or\n\u003ccode\u003etqdm(enumerate(x), total=len(x), ...)\u003c/code\u003e.\nThe same applies to \u003ccode\u003enumpy.ndenumerate\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eReplace \u003ccode\u003etqdm(zip(a, b))\u003c/code\u003e with \u003ccode\u003ezip(tqdm(a), b)\u003c/code\u003e or even\n\u003ccode\u003ezip(tqdm(a), tqdm(b))\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eThe same applies to \u003ccode\u003eitertools\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eSome useful convenience functions can be found under \u003ccode\u003etqdm.contrib\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tqdm/tqdm/issues/771\" data-hovercard-type=\"issue\" data-hovercard-url=\"/tqdm/tqdm/issues/771/hovercard\"\u003eNo intermediate output in docker-compose\u003c/a\u003e:\nuse \u003ccode\u003edocker-compose run\u003c/code\u003e instead of \u003ccode\u003edocker-compose up\u003c/code\u003e and \u003ccode\u003etty: true\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eOverriding defaults via environment variables:\ne.g. in CI/cloud jobs, \u003ccode\u003eexport TQDM_MININTERVAL=5\u003c/code\u003e to avoid log spam.\nThis override logic is handled by the \u003ccode\u003etqdm.utils.envwrap\u003c/code\u003e decorator\n(useful independent of \u003ccode\u003etqdm\u003c/code\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp dir=\"auto\"\u003eIf you come across any other difficulties, browse and file \u003ca href=\"https://github.com/tqdm/tqdm/issues?q=\"\u003e\u003cimg alt=\"GitHub-Issues\" src=\"https://camo.githubusercontent.com/70e2e8e5918a84706aef777108b1b2f746905dbde5632e31dd6a6995ea606b92/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6973737565732d636c6f7365642f7471646d2f7471646d2e7376673f6c6f676f3d676974687562266c6f676f436f6c6f723d7768697465\" data-canonical-src=\"https://img.shields.io/github/issues-closed/tqdm/tqdm.svg?logo=github\u0026amp;logoColor=white\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e.\u003c/p\u003e\n\u003ca name=\"user-content-documentation\"\u003e\u003c/a\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e\u003ca href=\"#table-of-contents\"\u003eDocumentation\u003c/a\u003e\u003c/h3\u003e\u003ca id=\"user-content-documentation\" class=\"anchor\" aria-label=\"Permalink: Documentation\" href=\"#documentation\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e\u003ca href=\"https://pypi.org/project/tqdm\" rel=\"nofollow\"\u003e\u003cimg alt=\"Py-Versions\" src=\"https://camo.githubusercontent.com/81e0211e02aef6098f5a6537a1633907b94d63f4acba8c56f5b4b64ecb36223c/68747470733a2f2f696d672e736869656c64732e696f2f707970692f707976657273696f6e732f7471646d2e7376673f6c6f676f3d707974686f6e266c6f676f436f6c6f723d7768697465\" data-canonical-src=\"https://img.shields.io/pypi/pyversions/tqdm.svg?logo=python\u0026amp;logoColor=white\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e \u003ca href=\"https://cgi.cdcl.ml/hits?q=tqdm\u0026amp;a=plot\u0026amp;r=https://github.com/tqdm/tqdm\u0026amp;l=https://tqdm.github.io/img/favicon.png\u0026amp;f=https://tqdm.github.io/img/logo.gif\u0026amp;style=social\" rel=\"nofollow\"\u003e\u003cimg alt=\"README-Hits\" src=\"https://camo.githubusercontent.com/05dba70319f22e964483c4ab94f37757d0d95698320a34f53286620788b7ae54/68747470733a2f2f6367692e6364636c2e6d6c2f686974733f713d7471646d267374796c653d736f6369616c26723d68747470733a2f2f6769746875622e636f6d2f7471646d2f7471646d266c3d68747470733a2f2f7471646d2e6769746875622e696f2f696d672f66617669636f6e2e706e6726663d68747470733a2f2f7471646d2e6769746875622e696f2f696d672f6c6f676f2e676966\" data-canonical-src=\"https://cgi.cdcl.ml/hits?q=tqdm\u0026amp;style=social\u0026amp;r=https://github.com/tqdm/tqdm\u0026amp;l=https://tqdm.github.io/img/favicon.png\u0026amp;f=https://tqdm.github.io/img/logo.gif\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e (Since 19 May 2016)\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-python notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"class tqdm():\n \u0026quot;\u0026quot;\u0026quot;\n Decorate an iterable object, returning an iterator which acts exactly\n like the original iterable, but prints a dynamically updating\n progressbar every time a value is requested.\n \u0026quot;\u0026quot;\u0026quot;\n\n @envwrap(\u0026quot;TQDM_\u0026quot;) # override defaults via env vars\n def __init__(self, iterable=None, desc=None, total=None, leave=True,\n file=None, ncols=None, mininterval=0.1,\n maxinterval=10.0, miniters=None, ascii=None, disable=False,\n unit='it', unit_scale=False, dynamic_ncols=False,\n smoothing=0.3, bar_format=None, initial=0, position=None,\n postfix=None, unit_divisor=1000, write_bytes=False,\n lock_args=None, nrows=None, colour=None, delay=0):\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003eclass\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etqdm\u003c/span\u003e():\n \u003cspan class=\"pl-s\"\u003e\"\"\"\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e Decorate an iterable object, returning an iterator which acts exactly\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e like the original iterable, but prints a dynamically updating\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e progressbar every time a value is requested.\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e \"\"\"\u003c/span\u003e\n\n \u003cspan class=\"pl-en\"\u003e@\u003cspan class=\"pl-en\"\u003eenvwrap\u003c/span\u003e(\u003cspan class=\"pl-s\"\u003e\"TQDM_\"\u003c/span\u003e) \u003cspan class=\"pl-c\"\u003e# override defaults via env vars\u003c/span\u003e\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003edef\u003c/span\u003e \u003cspan class=\"pl-en\"\u003e__init__\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eself\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003eiterable\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eNone\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003edesc\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eNone\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003etotal\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eNone\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003eleave\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eTrue\u003c/span\u003e,\n \u003cspan class=\"pl-s1\"\u003efile\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eNone\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003encols\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eNone\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003emininterval\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e0.1\u003c/span\u003e,\n \u003cspan class=\"pl-s1\"\u003emaxinterval\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e10.0\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003eminiters\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eNone\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003eascii\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eNone\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003edisable\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eFalse\u003c/span\u003e,\n \u003cspan class=\"pl-s1\"\u003eunit\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e'it'\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003eunit_scale\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eFalse\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003edynamic_ncols\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eFalse\u003c/span\u003e,\n \u003cspan class=\"pl-s1\"\u003esmoothing\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e0.3\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003ebar_format\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eNone\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003einitial\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003eposition\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eNone\u003c/span\u003e,\n \u003cspan class=\"pl-s1\"\u003epostfix\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eNone\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003eunit_divisor\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e1000\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003ewrite_bytes\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eFalse\u003c/span\u003e,\n \u003cspan class=\"pl-s1\"\u003elock_args\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eNone\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003enrows\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eNone\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003ecolour\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eNone\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003edelay\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e):\u003c/pre\u003e\u003c/div\u003e\n\u003ca name=\"user-content-parameters\"\u003e\u003c/a\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch4 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e\u003ca href=\"#table-of-contents\"\u003eParameters\u003c/a\u003e\u003c/h4\u003e\u003ca id=\"user-content-parameters\" class=\"anchor\" aria-label=\"Permalink: Parameters\" href=\"#parameters\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003cdl\u003e\n\u003cdt\u003eiterable \u003cspan\u003e:\u003c/span\u003e \u003cspan\u003eiterable, optional\u003c/span\u003e\u003c/dt\u003e\n\u003cdd\u003e\u003cp dir=\"auto\"\u003eIterable to decorate with a progressbar.\nLeave blank to manually manage the updates.\u003c/p\u003e\n\u003c/dd\u003e\n\u003c/dl\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cdl\u003e\n\u003cdt\u003edesc \u003cspan\u003e:\u003c/span\u003e \u003cspan\u003estr, optional\u003c/span\u003e\u003c/dt\u003e\n\u003cdd\u003e\u003cp dir=\"auto\"\u003ePrefix for the progressbar.\u003c/p\u003e\n\u003c/dd\u003e\n\u003c/dl\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cdl\u003e\n\u003cdt\u003etotal \u003cspan\u003e:\u003c/span\u003e \u003cspan\u003eint or float, optional\u003c/span\u003e\u003c/dt\u003e\n\u003cdd\u003e\u003cp dir=\"auto\"\u003eThe number of expected iterations. If unspecified,\nlen(iterable) is used if possible. If float(\"inf\") or as a last\nresort, only basic progress statistics are displayed\n(no ETA, no progressbar).\nIf \u003ccode\u003egui\u003c/code\u003e is True and this parameter needs subsequent updating,\nspecify an initial arbitrary large positive number,\ne.g. 9e9.\u003c/p\u003e\n\u003c/dd\u003e\n\u003c/dl\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cdl\u003e\n\u003cdt\u003eleave \u003cspan\u003e:\u003c/span\u003e \u003cspan\u003ebool, optional\u003c/span\u003e\u003c/dt\u003e\n\u003cdd\u003e\u003cp dir=\"auto\"\u003eIf [default: True], keeps all traces of the progressbar\nupon termination of iteration.\nIf \u003ccode\u003eNone\u003c/code\u003e, will leave only if \u003ccode\u003eposition\u003c/code\u003e is \u003ccode\u003e0\u003c/code\u003e.\u003c/p\u003e\n\u003c/dd\u003e\n\u003c/dl\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cdl\u003e\n\u003cdt\u003efile \u003cspan\u003e:\u003c/span\u003e \u003cspan\u003e\u003ccode\u003eio.TextIOWrapper\u003c/code\u003e or \u003ccode\u003eio.StringIO\u003c/code\u003e, optional\u003c/span\u003e\u003c/dt\u003e\n\u003cdd\u003e\u003cp dir=\"auto\"\u003eSpecifies where to output the progress messages\n(default: sys.stderr). Uses \u003ccode\u003efile.write(str)\u003c/code\u003e and \u003ccode\u003efile.flush()\u003c/code\u003e\nmethods. For encoding, see \u003ccode\u003ewrite_bytes\u003c/code\u003e.\u003c/p\u003e\n\u003c/dd\u003e\n\u003c/dl\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cdl\u003e\n\u003cdt\u003encols \u003cspan\u003e:\u003c/span\u003e \u003cspan\u003eint, optional\u003c/span\u003e\u003c/dt\u003e\n\u003cdd\u003e\u003cp dir=\"auto\"\u003eThe width of the entire output message. If specified,\ndynamically resizes the progressbar to stay within this bound.\nIf unspecified, attempts to use environment width. The\nfallback is a meter width of 10 and no limit for the counter and\nstatistics. If 0, will not print any meter (only stats).\u003c/p\u003e\n\u003c/dd\u003e\n\u003c/dl\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cdl\u003e\n\u003cdt\u003emininterval \u003cspan\u003e:\u003c/span\u003e \u003cspan\u003efloat, optional\u003c/span\u003e\u003c/dt\u003e\n\u003cdd\u003e\u003cp dir=\"auto\"\u003eMinimum progress display update interval [default: 0.1] seconds.\u003c/p\u003e\n\u003c/dd\u003e\n\u003c/dl\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cdl\u003e\n\u003cdt\u003emaxinterval \u003cspan\u003e:\u003c/span\u003e \u003cspan\u003efloat, optional\u003c/span\u003e\u003c/dt\u003e\n\u003cdd\u003e\u003cp dir=\"auto\"\u003eMaximum progress display update interval [default: 10] seconds.\nAutomatically adjusts \u003ccode\u003eminiters\u003c/code\u003e to correspond to \u003ccode\u003emininterval\u003c/code\u003e\nafter long display update lag. Only works if \u003ccode\u003edynamic_miniters\u003c/code\u003e\nor monitor thread is enabled.\u003c/p\u003e\n\u003c/dd\u003e\n\u003c/dl\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cdl\u003e\n\u003cdt\u003eminiters \u003cspan\u003e:\u003c/span\u003e \u003cspan\u003eint or float, optional\u003c/span\u003e\u003c/dt\u003e\n\u003cdd\u003e\u003cp dir=\"auto\"\u003eMinimum progress display update interval, in iterations.\nIf 0 and \u003ccode\u003edynamic_miniters\u003c/code\u003e, will automatically adjust to equal\n\u003ccode\u003emininterval\u003c/code\u003e (more CPU efficient, good for tight loops).\nIf \u0026gt; 0, will skip display of specified number of iterations.\nTweak this and \u003ccode\u003emininterval\u003c/code\u003e to get very efficient loops.\nIf your progress is erratic with both fast and slow iterations\n(network, skipping items, etc) you should set miniters=1.\u003c/p\u003e\n\u003c/dd\u003e\n\u003c/dl\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cdl\u003e\n\u003cdt\u003eascii \u003cspan\u003e:\u003c/span\u003e \u003cspan\u003ebool or str, optional\u003c/span\u003e\u003c/dt\u003e\n\u003cdd\u003e\u003cp dir=\"auto\"\u003eIf unspecified or False, use unicode (smooth blocks) to fill\nthe meter. The fallback is to use ASCII characters \" 123456789#\".\u003c/p\u003e\n\u003c/dd\u003e\n\u003c/dl\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cdl\u003e\n\u003cdt\u003edisable \u003cspan\u003e:\u003c/span\u003e \u003cspan\u003ebool, optional\u003c/span\u003e\u003c/dt\u003e\n\u003cdd\u003e\u003cp dir=\"auto\"\u003eWhether to disable the entire progressbar wrapper\n[default: False]. If set to None, disable on non-TTY.\u003c/p\u003e\n\u003c/dd\u003e\n\u003c/dl\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cdl\u003e\n\u003cdt\u003eunit \u003cspan\u003e:\u003c/span\u003e \u003cspan\u003estr, optional\u003c/span\u003e\u003c/dt\u003e\n\u003cdd\u003e\u003cp dir=\"auto\"\u003eString that will be used to define the unit of each iteration\n[default: it].\u003c/p\u003e\n\u003c/dd\u003e\n\u003c/dl\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cdl\u003e\n\u003cdt\u003eunit_scale \u003cspan\u003e:\u003c/span\u003e \u003cspan\u003ebool or int or float, optional\u003c/span\u003e\u003c/dt\u003e\n\u003cdd\u003e\u003cp dir=\"auto\"\u003eIf 1 or True, the number of iterations will be reduced/scaled\nautomatically and a metric prefix following the\nInternational System of Units standard will be added\n(kilo, mega, etc.) [default: False]. If any other non-zero\nnumber, will scale \u003ccode\u003etotal\u003c/code\u003e and \u003ccode\u003en\u003c/code\u003e.\u003c/p\u003e\n\u003c/dd\u003e\n\u003c/dl\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cdl\u003e\n\u003cdt\u003edynamic_ncols \u003cspan\u003e:\u003c/span\u003e \u003cspan\u003ebool, optional\u003c/span\u003e\u003c/dt\u003e\n\u003cdd\u003e\u003cp dir=\"auto\"\u003eIf set, constantly alters \u003ccode\u003encols\u003c/code\u003e and \u003ccode\u003enrows\u003c/code\u003e to the\nenvironment (allowing for window resizes) [default: False].\u003c/p\u003e\n\u003c/dd\u003e\n\u003c/dl\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cdl\u003e\n\u003cdt\u003esmoothing \u003cspan\u003e:\u003c/span\u003e \u003cspan\u003efloat, optional\u003c/span\u003e\u003c/dt\u003e\n\u003cdd\u003e\u003cp dir=\"auto\"\u003eExponential moving average smoothing factor for speed estimates\n(ignored in GUI mode). Ranges from 0 (average speed) to 1\n(current/instantaneous speed) [default: 0.3].\u003c/p\u003e\n\u003c/dd\u003e\n\u003c/dl\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cdl\u003e\n\u003cdt\u003ebar_format \u003cspan\u003e:\u003c/span\u003e \u003cspan\u003estr, optional\u003c/span\u003e\u003c/dt\u003e\n\u003cdd\u003e\u003cp dir=\"auto\"\u003eSpecify a custom bar string formatting. May impact performance.\n[default: '{l_bar}{bar}{r_bar}'], where\nl_bar='{desc}: {percentage:3.0f}%|' and\nr_bar='| {n_fmt}/{total_fmt} [{elapsed}\u0026lt;{remaining}, '\n'{rate_fmt}{postfix}]'\nPossible vars: l_bar, bar, r_bar, n, n_fmt, total, total_fmt,\npercentage, elapsed, elapsed_s, ncols, nrows, desc, unit,\nrate, rate_fmt, rate_noinv, rate_noinv_fmt,\nrate_inv, rate_inv_fmt, postfix, unit_divisor,\nremaining, remaining_s, eta.\nNote that a trailing \": \" is automatically removed after {desc}\nif the latter is empty.\u003c/p\u003e\n\u003c/dd\u003e\n\u003c/dl\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cdl\u003e\n\u003cdt\u003einitial \u003cspan\u003e:\u003c/span\u003e \u003cspan\u003eint or float, optional\u003c/span\u003e\u003c/dt\u003e\n\u003cdd\u003e\u003cp dir=\"auto\"\u003eThe initial counter value. Useful when restarting a progress\nbar [default: 0]. If using float, consider specifying \u003ccode\u003e{n:.3f}\u003c/code\u003e\nor similar in \u003ccode\u003ebar_format\u003c/code\u003e, or specifying \u003ccode\u003eunit_scale\u003c/code\u003e.\u003c/p\u003e\n\u003c/dd\u003e\n\u003c/dl\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cdl\u003e\n\u003cdt\u003eposition \u003cspan\u003e:\u003c/span\u003e \u003cspan\u003eint, optional\u003c/span\u003e\u003c/dt\u003e\n\u003cdd\u003e\u003cp dir=\"auto\"\u003eSpecify the line offset to print this bar (starting from 0)\nAutomatic if unspecified.\nUseful to manage multiple bars at once (eg, from threads).\u003c/p\u003e\n\u003c/dd\u003e\n\u003c/dl\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cdl\u003e\n\u003cdt\u003epostfix \u003cspan\u003e:\u003c/span\u003e \u003cspan\u003edict or \u003ccode\u003e*\u003c/code\u003e, optional\u003c/span\u003e\u003c/dt\u003e\n\u003cdd\u003e\u003cp dir=\"auto\"\u003eSpecify additional stats to display at the end of the bar.\nCalls \u003ccode\u003eset_postfix(**postfix)\u003c/code\u003e if possible (dict).\u003c/p\u003e\n\u003c/dd\u003e\n\u003c/dl\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cdl\u003e\n\u003cdt\u003eunit_divisor \u003cspan\u003e:\u003c/span\u003e \u003cspan\u003efloat, optional\u003c/span\u003e\u003c/dt\u003e\n\u003cdd\u003e\u003cp dir=\"auto\"\u003e[default: 1000], ignored unless \u003ccode\u003eunit_scale\u003c/code\u003e is True.\u003c/p\u003e\n\u003c/dd\u003e\n\u003c/dl\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cdl\u003e\n\u003cdt\u003ewrite_bytes \u003cspan\u003e:\u003c/span\u003e \u003cspan\u003ebool, optional\u003c/span\u003e\u003c/dt\u003e\n\u003cdd\u003e\u003cp dir=\"auto\"\u003eWhether to write bytes. If (default: False) will write unicode.\u003c/p\u003e\n\u003c/dd\u003e\n\u003c/dl\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cdl\u003e\n\u003cdt\u003elock_args \u003cspan\u003e:\u003c/span\u003e \u003cspan\u003etuple, optional\u003c/span\u003e\u003c/dt\u003e\n\u003cdd\u003e\u003cp dir=\"auto\"\u003ePassed to \u003ccode\u003erefresh\u003c/code\u003e for intermediate output\n(initialisation, iterating, and updating).\u003c/p\u003e\n\u003c/dd\u003e\n\u003c/dl\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cdl\u003e\n\u003cdt\u003enrows \u003cspan\u003e:\u003c/span\u003e \u003cspan\u003eint, optional\u003c/span\u003e\u003c/dt\u003e\n\u003cdd\u003e\u003cp dir=\"auto\"\u003eThe screen height. If specified, hides nested bars outside this\nbound. If unspecified, attempts to use environment height.\nThe fallback is 20.\u003c/p\u003e\n\u003c/dd\u003e\n\u003c/dl\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cdl\u003e\n\u003cdt\u003ecolour \u003cspan\u003e:\u003c/span\u003e \u003cspan\u003estr, optional\u003c/span\u003e\u003c/dt\u003e\n\u003cdd\u003e\u003cp dir=\"auto\"\u003eBar colour (e.g. 'green', '#00ff00').\u003c/p\u003e\n\u003c/dd\u003e\n\u003c/dl\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cdl\u003e\n\u003cdt\u003edelay \u003cspan\u003e:\u003c/span\u003e \u003cspan\u003efloat, optional\u003c/span\u003e\u003c/dt\u003e\n\u003cdd\u003e\u003cp dir=\"auto\"\u003eDon't display until [default: 0] seconds have elapsed.\u003c/p\u003e\n\u003c/dd\u003e\n\u003c/dl\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ca name=\"user-content-extra-cli-options\"\u003e\u003c/a\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch4 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e\u003ca href=\"#table-of-contents\"\u003eExtra CLI Options\u003c/a\u003e\u003c/h4\u003e\u003ca id=\"user-content-extra-cli-options\" class=\"anchor\" aria-label=\"Permalink: Extra CLI Options\" href=\"#extra-cli-options\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003cdl\u003e\n\u003cdt\u003edelim \u003cspan\u003e:\u003c/span\u003e \u003cspan\u003echr, optional\u003c/span\u003e\u003c/dt\u003e\n\u003cdd\u003eDelimiting character [default: 'n']. Use '0' for null.\nN.B.: on Windows systems, Python converts 'n' to 'rn'.\u003c/dd\u003e\n\u003c/dl\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cdl\u003e\n\u003cdt\u003ebuf_size \u003cspan\u003e:\u003c/span\u003e \u003cspan\u003eint, optional\u003c/span\u003e\u003c/dt\u003e\n\u003cdd\u003eString buffer size in bytes [default: 256]\nused when \u003ccode\u003edelim\u003c/code\u003e is specified.\u003c/dd\u003e\n\u003c/dl\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cdl\u003e\n\u003cdt\u003ebytes \u003cspan\u003e:\u003c/span\u003e \u003cspan\u003ebool, optional\u003c/span\u003e\u003c/dt\u003e\n\u003cdd\u003eIf true, will count bytes, ignore \u003ccode\u003edelim\u003c/code\u003e, and default\n\u003ccode\u003eunit_scale\u003c/code\u003e to True, \u003ccode\u003eunit_divisor\u003c/code\u003e to 1024, and \u003ccode\u003eunit\u003c/code\u003e to 'B'.\u003c/dd\u003e\n\u003c/dl\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cdl\u003e\n\u003cdt\u003etee \u003cspan\u003e:\u003c/span\u003e \u003cspan\u003ebool, optional\u003c/span\u003e\u003c/dt\u003e\n\u003cdd\u003eIf true, passes \u003ccode\u003estdin\u003c/code\u003e to both \u003ccode\u003estderr\u003c/code\u003e and \u003ccode\u003estdout\u003c/code\u003e.\u003c/dd\u003e\n\u003c/dl\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cdl\u003e\n\u003cdt\u003eupdate \u003cspan\u003e:\u003c/span\u003e \u003cspan\u003ebool, optional\u003c/span\u003e\u003c/dt\u003e\n\u003cdd\u003eIf true, will treat input as newly elapsed iterations,\ni.e. numbers to pass to \u003ccode\u003eupdate()\u003c/code\u003e. Note that this is slow\n(~2e5 it/s) since every input must be decoded as a number.\u003c/dd\u003e\n\u003c/dl\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cdl\u003e\n\u003cdt\u003eupdate_to \u003cspan\u003e:\u003c/span\u003e \u003cspan\u003ebool, optional\u003c/span\u003e\u003c/dt\u003e\n\u003cdd\u003eIf true, will treat input as total elapsed iterations,\ni.e. numbers to assign to \u003ccode\u003eself.n\u003c/code\u003e. Note that this is slow\n(~2e5 it/s) since every input must be decoded as a number.\u003c/dd\u003e\n\u003c/dl\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cdl\u003e\n\u003cdt\u003enull \u003cspan\u003e:\u003c/span\u003e \u003cspan\u003ebool, optional\u003c/span\u003e\u003c/dt\u003e\n\u003cdd\u003eIf true, will discard input (no stdout).\u003c/dd\u003e\n\u003c/dl\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cdl\u003e\n\u003cdt\u003emanpath \u003cspan\u003e:\u003c/span\u003e \u003cspan\u003estr, optional\u003c/span\u003e\u003c/dt\u003e\n\u003cdd\u003eDirectory in which to install tqdm man pages.\u003c/dd\u003e\n\u003c/dl\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cdl\u003e\n\u003cdt\u003ecomppath \u003cspan\u003e:\u003c/span\u003e \u003cspan\u003estr, optional\u003c/span\u003e\u003c/dt\u003e\n\u003cdd\u003eDirectory in which to place tqdm completion.\u003c/dd\u003e\n\u003c/dl\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cdl\u003e\n\u003cdt\u003elog \u003cspan\u003e:\u003c/span\u003e \u003cspan\u003estr, optional\u003c/span\u003e\u003c/dt\u003e\n\u003cdd\u003eCRITICAL|FATAL|ERROR|WARN(ING)|[default: 'INFO']|DEBUG|NOTSET.\u003c/dd\u003e\n\u003c/dl\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ca name=\"user-content-returns\"\u003e\u003c/a\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch4 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e\u003ca href=\"#table-of-contents\"\u003eReturns\u003c/a\u003e\u003c/h4\u003e\u003ca id=\"user-content-returns\" class=\"anchor\" aria-label=\"Permalink: Returns\" href=\"#returns\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eout : decorated iterator.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"highlight highlight-source-python notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"class tqdm():\n def update(self, n=1):\n \u0026quot;\u0026quot;\u0026quot;\n Manually update the progress bar, useful for streams\n such as reading files.\n E.g.:\n \u0026gt;\u0026gt;\u0026gt; t = tqdm(total=filesize) # Initialise\n \u0026gt;\u0026gt;\u0026gt; for current_buffer in stream:\n ... ...\n ... t.update(len(current_buffer))\n \u0026gt;\u0026gt;\u0026gt; t.close()\n The last line is highly recommended, but possibly not necessary if\n ``t.update()`` will be called in such a way that ``filesize`` will be\n exactly reached and printed.\n\n Parameters\n ----------\n n : int or float, optional\n Increment to add to the internal counter of iterations\n [default: 1]. If using float, consider specifying ``{n:.3f}``\n or similar in ``bar_format``, or specifying ``unit_scale``.\n\n Returns\n -------\n out : bool or None\n True if a ``display()`` was triggered.\n \u0026quot;\u0026quot;\u0026quot;\n\n def close(self):\n \u0026quot;\u0026quot;\u0026quot;Cleanup and (if leave=False) close the progressbar.\u0026quot;\u0026quot;\u0026quot;\n\n def clear(self, nomove=False):\n \u0026quot;\u0026quot;\u0026quot;Clear current bar display.\u0026quot;\u0026quot;\u0026quot;\n\n def refresh(self):\n \u0026quot;\u0026quot;\u0026quot;\n Force refresh the display of this bar.\n\n Parameters\n ----------\n nolock : bool, optional\n If ``True``, does not lock.\n If [default: ``False``]: calls ``acquire()`` on internal lock.\n lock_args : tuple, optional\n Passed to internal lock's ``acquire()``.\n If specified, will only ``display()`` if ``acquire()`` returns ``True``.\n \u0026quot;\u0026quot;\u0026quot;\n\n def unpause(self):\n \u0026quot;\u0026quot;\u0026quot;Restart tqdm timer from last print time.\u0026quot;\u0026quot;\u0026quot;\n\n def reset(self, total=None):\n \u0026quot;\u0026quot;\u0026quot;\n Resets to 0 iterations for repeated use.\n\n Consider combining with ``leave=True``.\n\n Parameters\n ----------\n total : int or float, optional. Total to use for the new bar.\n \u0026quot;\u0026quot;\u0026quot;\n\n def set_description(self, desc=None, refresh=True):\n \u0026quot;\u0026quot;\u0026quot;\n Set/modify description of the progress bar.\n\n Parameters\n ----------\n desc : str, optional\n refresh : bool, optional\n Forces refresh [default: True].\n \u0026quot;\u0026quot;\u0026quot;\n\n def set_postfix(self, ordered_dict=None, refresh=True, **tqdm_kwargs):\n \u0026quot;\u0026quot;\u0026quot;\n Set/modify postfix (additional stats)\n with automatic formatting based on datatype.\n\n Parameters\n ----------\n ordered_dict : dict or OrderedDict, optional\n refresh : bool, optional\n Forces refresh [default: True].\n kwargs : dict, optional\n \u0026quot;\u0026quot;\u0026quot;\n\n @classmethod\n def write(cls, s, file=sys.stdout, end=\u0026quot;\\n\u0026quot;):\n \u0026quot;\u0026quot;\u0026quot;Print a message via tqdm (without overlap with bars).\u0026quot;\u0026quot;\u0026quot;\n\n @property\n def format_dict(self):\n \u0026quot;\u0026quot;\u0026quot;Public API for read-only member access.\u0026quot;\u0026quot;\u0026quot;\n\n def display(self, msg=None, pos=None):\n \u0026quot;\u0026quot;\u0026quot;\n Use ``self.sp`` to display ``msg`` in the specified ``pos``.\n\n Consider overloading this function when inheriting to use e.g.:\n ``self.some_frontend(**self.format_dict)`` instead of ``self.sp``.\n\n Parameters\n ----------\n msg : str, optional. What to display (default: ``repr(self)``).\n pos : int, optional. Position to ``moveto``\n (default: ``abs(self.pos)``).\n \u0026quot;\u0026quot;\u0026quot;\n\n @classmethod\n @contextmanager\n def wrapattr(cls, stream, method, total=None, bytes=True, **tqdm_kwargs):\n \u0026quot;\u0026quot;\u0026quot;\n stream : file-like object.\n method : str, \u0026quot;read\u0026quot; or \u0026quot;write\u0026quot;. The result of ``read()`` and\n the first argument of ``write()`` should have a ``len()``.\n\n \u0026gt;\u0026gt;\u0026gt; with tqdm.wrapattr(file_obj, \u0026quot;read\u0026quot;, total=file_obj.size) as fobj:\n ... while True:\n ... chunk = fobj.read(chunk_size)\n ... if not chunk:\n ... break\n \u0026quot;\u0026quot;\u0026quot;\n\n @classmethod\n def pandas(cls, *targs, **tqdm_kwargs):\n \u0026quot;\u0026quot;\u0026quot;Registers the current `tqdm` class with `pandas`.\u0026quot;\u0026quot;\u0026quot;\n\ndef trange(*args, **tqdm_kwargs):\n \u0026quot;\u0026quot;\u0026quot;Shortcut for `tqdm(range(*args), **tqdm_kwargs)`.\u0026quot;\u0026quot;\u0026quot;\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003eclass\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etqdm\u003c/span\u003e():\n \u003cspan class=\"pl-k\"\u003edef\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eupdate\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eself\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003en\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e):\n \u003cspan class=\"pl-s\"\u003e\"\"\"\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e Manually update the progress bar, useful for streams\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e such as reading files.\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e E.g.:\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e \u0026gt;\u0026gt;\u0026gt; t = tqdm(total=filesize) # Initialise\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e \u0026gt;\u0026gt;\u0026gt; for current_buffer in stream:\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e ... ...\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e ... t.update(len(current_buffer))\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e \u0026gt;\u0026gt;\u0026gt; t.close()\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e The last line is highly recommended, but possibly not necessary if\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e ``t.update()`` will be called in such a way that ``filesize`` will be\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e exactly reached and printed.\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e Parameters\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e ----------\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e n : int or float, optional\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e Increment to add to the internal counter of iterations\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e [default: 1]. If using float, consider specifying ``{n:.3f}``\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e or similar in ``bar_format``, or specifying ``unit_scale``.\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e Returns\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e -------\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e out : bool or None\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e True if a ``display()`` was triggered.\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e \"\"\"\u003c/span\u003e\n\n \u003cspan class=\"pl-k\"\u003edef\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eclose\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eself\u003c/span\u003e):\n \u003cspan class=\"pl-s\"\u003e\"\"\"Cleanup and (if leave=False) close the progressbar.\"\"\"\u003c/span\u003e\n\n \u003cspan class=\"pl-k\"\u003edef\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eclear\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eself\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003enomove\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eFalse\u003c/span\u003e):\n \u003cspan class=\"pl-s\"\u003e\"\"\"Clear current bar display.\"\"\"\u003c/span\u003e\n\n \u003cspan class=\"pl-k\"\u003edef\u003c/span\u003e \u003cspan class=\"pl-en\"\u003erefresh\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eself\u003c/span\u003e):\n \u003cspan class=\"pl-s\"\u003e\"\"\"\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e Force refresh the display of this bar.\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e Parameters\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e ----------\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e nolock : bool, optional\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e If ``True``, does not lock.\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e If [default: ``False``]: calls ``acquire()`` on internal lock.\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e lock_args : tuple, optional\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e Passed to internal lock's ``acquire()``.\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e If specified, will only ``display()`` if ``acquire()`` returns ``True``.\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e \"\"\"\u003c/span\u003e\n\n \u003cspan class=\"pl-k\"\u003edef\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eunpause\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eself\u003c/span\u003e):\n \u003cspan class=\"pl-s\"\u003e\"\"\"Restart tqdm timer from last print time.\"\"\"\u003c/span\u003e\n\n \u003cspan class=\"pl-k\"\u003edef\u003c/span\u003e \u003cspan class=\"pl-en\"\u003ereset\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eself\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003etotal\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eNone\u003c/span\u003e):\n \u003cspan class=\"pl-s\"\u003e\"\"\"\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e Resets to 0 iterations for repeated use.\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e Consider combining with ``leave=True``.\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e Parameters\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e ----------\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e total : int or float, optional. Total to use for the new bar.\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e \"\"\"\u003c/span\u003e\n\n \u003cspan class=\"pl-k\"\u003edef\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eset_description\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eself\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003edesc\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eNone\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003erefresh\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eTrue\u003c/span\u003e):\n \u003cspan class=\"pl-s\"\u003e\"\"\"\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e Set/modify description of the progress bar.\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e Parameters\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e ----------\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e desc : str, optional\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e refresh : bool, optional\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e Forces refresh [default: True].\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e \"\"\"\u003c/span\u003e\n\n \u003cspan class=\"pl-k\"\u003edef\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eset_postfix\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eself\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003eordered_dict\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eNone\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003erefresh\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eTrue\u003c/span\u003e, \u003cspan class=\"pl-c1\"\u003e**\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003etqdm_kwargs\u003c/span\u003e):\n \u003cspan class=\"pl-s\"\u003e\"\"\"\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e Set/modify postfix (additional stats)\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e with automatic formatting based on datatype.\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e Parameters\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e ----------\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e ordered_dict : dict or OrderedDict, optional\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e refresh : bool, optional\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e Forces refresh [default: True].\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e kwargs : dict, optional\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e \"\"\"\u003c/span\u003e\n\n \u003cspan class=\"pl-en\"\u003e@\u003cspan class=\"pl-s1\"\u003eclassmethod\u003c/span\u003e\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003edef\u003c/span\u003e \u003cspan class=\"pl-en\"\u003ewrite\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003ecls\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003es\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003efile\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003esys\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003estdout\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003eend\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"\u003cspan class=\"pl-cce\"\u003e\\n\u003c/span\u003e\"\u003c/span\u003e):\n \u003cspan class=\"pl-s\"\u003e\"\"\"Print a message via tqdm (without overlap with bars).\"\"\"\u003c/span\u003e\n\n \u003cspan class=\"pl-en\"\u003e@\u003cspan class=\"pl-s1\"\u003eproperty\u003c/span\u003e\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003edef\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eformat_dict\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eself\u003c/span\u003e):\n \u003cspan class=\"pl-s\"\u003e\"\"\"Public API for read-only member access.\"\"\"\u003c/span\u003e\n\n \u003cspan class=\"pl-k\"\u003edef\u003c/span\u003e \u003cspan class=\"pl-en\"\u003edisplay\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eself\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003emsg\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eNone\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003epos\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eNone\u003c/span\u003e):\n \u003cspan class=\"pl-s\"\u003e\"\"\"\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e Use ``self.sp`` to display ``msg`` in the specified ``pos``.\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e Consider overloading this function when inheriting to use e.g.:\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e ``self.some_frontend(**self.format_dict)`` instead of ``self.sp``.\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e Parameters\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e ----------\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e msg : str, optional. What to display (default: ``repr(self)``).\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e pos : int, optional. Position to ``moveto``\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e (default: ``abs(self.pos)``).\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e \"\"\"\u003c/span\u003e\n\n \u003cspan class=\"pl-en\"\u003e@\u003cspan class=\"pl-s1\"\u003eclassmethod\u003c/span\u003e\u003c/span\u003e\n \u003cspan class=\"pl-en\"\u003e@\u003cspan class=\"pl-s1\"\u003econtextmanager\u003c/span\u003e\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003edef\u003c/span\u003e \u003cspan class=\"pl-en\"\u003ewrapattr\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003ecls\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003estream\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003emethod\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003etotal\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eNone\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003ebytes\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eTrue\u003c/span\u003e, \u003cspan class=\"pl-c1\"\u003e**\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003etqdm_kwargs\u003c/span\u003e):\n \u003cspan class=\"pl-s\"\u003e\"\"\"\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e stream : file-like object.\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e method : str, \"read\" or \"write\". The result of ``read()`` and\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e the first argument of ``write()`` should have a ``len()``.\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e \u0026gt;\u0026gt;\u0026gt; with tqdm.wrapattr(file_obj, \"read\", total=file_obj.size) as fobj:\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e ... while True:\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e ... chunk = fobj.read(chunk_size)\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e ... if not chunk:\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e ... break\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e \"\"\"\u003c/span\u003e\n\n \u003cspan class=\"pl-en\"\u003e@\u003cspan class=\"pl-s1\"\u003eclassmethod\u003c/span\u003e\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003edef\u003c/span\u003e \u003cspan class=\"pl-en\"\u003epandas\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003ecls\u003c/span\u003e, \u003cspan class=\"pl-c1\"\u003e*\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003etargs\u003c/span\u003e, \u003cspan class=\"pl-c1\"\u003e**\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003etqdm_kwargs\u003c/span\u003e):\n \u003cspan class=\"pl-s\"\u003e\"\"\"Registers the current `tqdm` class with `pandas`.\"\"\"\u003c/span\u003e\n\n\u003cspan class=\"pl-k\"\u003edef\u003c/span\u003e \u003cspan class=\"pl-en\"\u003etrange\u003c/span\u003e(\u003cspan class=\"pl-c1\"\u003e*\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eargs\u003c/span\u003e, \u003cspan class=\"pl-c1\"\u003e**\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003etqdm_kwargs\u003c/span\u003e):\n \u003cspan class=\"pl-s\"\u003e\"\"\"Shortcut for `tqdm(range(*args), **tqdm_kwargs)`.\"\"\"\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003ca name=\"user-content-convenience-functions\"\u003e\u003c/a\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch4 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e\u003ca href=\"#table-of-contents\"\u003eConvenience Functions\u003c/a\u003e\u003c/h4\u003e\u003ca id=\"user-content-convenience-functions\" class=\"anchor\" aria-label=\"Permalink: Convenience Functions\" href=\"#convenience-functions\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-python notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"def tqdm.contrib.tenumerate(iterable, start=0, total=None,\n tqdm_class=tqdm.auto.tqdm, **tqdm_kwargs):\n \u0026quot;\u0026quot;\u0026quot;Equivalent of `numpy.ndenumerate` or builtin `enumerate`.\u0026quot;\u0026quot;\u0026quot;\n\ndef tqdm.contrib.tzip(iter1, *iter2plus, **tqdm_kwargs):\n \u0026quot;\u0026quot;\u0026quot;Equivalent of builtin `zip`.\u0026quot;\u0026quot;\u0026quot;\n\ndef tqdm.contrib.tmap(function, *sequences, **tqdm_kwargs):\n \u0026quot;\u0026quot;\u0026quot;Equivalent of builtin `map`.\u0026quot;\u0026quot;\u0026quot;\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003edef\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etqdm\u003c/span\u003e.\u003cspan class=\"pl-s1\"\u003econtrib\u003c/span\u003e.\u003cspan class=\"pl-en\"\u003etenumerate\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eiterable\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003estart\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003etotal\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eNone\u003c/span\u003e,\n \u003cspan class=\"pl-s1\"\u003etqdm_class\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003etqdm\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eauto\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003etqdm\u003c/span\u003e, \u003cspan class=\"pl-c1\"\u003e**\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003etqdm_kwargs\u003c/span\u003e):\n \u003cspan class=\"pl-s\"\u003e\"\"\"Equivalent of `numpy.ndenumerate` or builtin `enumerate`.\"\"\"\u003c/span\u003e\n\n\u003cspan class=\"pl-k\"\u003edef\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etqdm\u003c/span\u003e.\u003cspan class=\"pl-s1\"\u003econtrib\u003c/span\u003e.\u003cspan class=\"pl-en\"\u003etzip\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eiter1\u003c/span\u003e, \u003cspan class=\"pl-c1\"\u003e*\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eiter2plus\u003c/span\u003e, \u003cspan class=\"pl-c1\"\u003e**\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003etqdm_kwargs\u003c/span\u003e):\n \u003cspan class=\"pl-s\"\u003e\"\"\"Equivalent of builtin `zip`.\"\"\"\u003c/span\u003e\n\n\u003cspan class=\"pl-k\"\u003edef\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etqdm\u003c/span\u003e.\u003cspan class=\"pl-s1\"\u003econtrib\u003c/span\u003e.\u003cspan class=\"pl-en\"\u003etmap\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003efunction\u003c/span\u003e, \u003cspan class=\"pl-c1\"\u003e*\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003esequences\u003c/span\u003e, \u003cspan class=\"pl-c1\"\u003e**\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003etqdm_kwargs\u003c/span\u003e):\n \u003cspan class=\"pl-s\"\u003e\"\"\"Equivalent of builtin `map`.\"\"\"\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003ca name=\"user-content-submodules\"\u003e\u003c/a\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch4 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e\u003ca href=\"#table-of-contents\"\u003eSubmodules\u003c/a\u003e\u003c/h4\u003e\u003ca id=\"user-content-submodules\" class=\"anchor\" aria-label=\"Permalink: Submodules\" href=\"#submodules\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-python notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"class tqdm.notebook.tqdm(tqdm.tqdm):\n \u0026quot;\u0026quot;\u0026quot;IPython/Jupyter Notebook widget.\u0026quot;\u0026quot;\u0026quot;\n\nclass tqdm.auto.tqdm(tqdm.tqdm):\n \u0026quot;\u0026quot;\u0026quot;Automatically chooses beween `tqdm.notebook` and `tqdm.tqdm`.\u0026quot;\u0026quot;\u0026quot;\n\nclass tqdm.asyncio.tqdm(tqdm.tqdm):\n \u0026quot;\u0026quot;\u0026quot;Asynchronous version.\u0026quot;\u0026quot;\u0026quot;\n @classmethod\n def as_completed(cls, fs, *, loop=None, timeout=None, total=None,\n **tqdm_kwargs):\n \u0026quot;\u0026quot;\u0026quot;Wrapper for `asyncio.as_completed`.\u0026quot;\u0026quot;\u0026quot;\n\nclass tqdm.gui.tqdm(tqdm.tqdm):\n \u0026quot;\u0026quot;\u0026quot;Matplotlib GUI version.\u0026quot;\u0026quot;\u0026quot;\n\nclass tqdm.tk.tqdm(tqdm.tqdm):\n \u0026quot;\u0026quot;\u0026quot;Tkinter GUI version.\u0026quot;\u0026quot;\u0026quot;\n\nclass tqdm.rich.tqdm(tqdm.tqdm):\n \u0026quot;\u0026quot;\u0026quot;`rich.progress` version.\u0026quot;\u0026quot;\u0026quot;\n\nclass tqdm.keras.TqdmCallback(keras.callbacks.Callback):\n \u0026quot;\u0026quot;\u0026quot;Keras callback for epoch and batch progress.\u0026quot;\u0026quot;\u0026quot;\n\nclass tqdm.dask.TqdmCallback(dask.callbacks.Callback):\n \u0026quot;\u0026quot;\u0026quot;Dask callback for task progress.\u0026quot;\u0026quot;\u0026quot;\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003eclass\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etqdm\u003c/span\u003e.\u003cspan class=\"pl-s1\"\u003enotebook\u003c/span\u003e.\u003cspan class=\"pl-s1\"\u003etqdm\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003etqdm\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003etqdm\u003c/span\u003e):\n \u003cspan class=\"pl-s\"\u003e\"\"\"IPython/Jupyter Notebook widget.\"\"\"\u003c/span\u003e\n\n\u003cspan class=\"pl-k\"\u003eclass\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etqdm\u003c/span\u003e.\u003cspan class=\"pl-s1\"\u003eauto\u003c/span\u003e.\u003cspan class=\"pl-s1\"\u003etqdm\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003etqdm\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003etqdm\u003c/span\u003e):\n \u003cspan class=\"pl-s\"\u003e\"\"\"Automatically chooses beween `tqdm.notebook` and `tqdm.tqdm`.\"\"\"\u003c/span\u003e\n\n\u003cspan class=\"pl-k\"\u003eclass\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etqdm\u003c/span\u003e.\u003cspan class=\"pl-s1\"\u003easyncio\u003c/span\u003e.\u003cspan class=\"pl-s1\"\u003etqdm\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003etqdm\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003etqdm\u003c/span\u003e):\n \u003cspan class=\"pl-s\"\u003e\"\"\"Asynchronous version.\"\"\"\u003c/span\u003e\n \u003cspan class=\"pl-en\"\u003e@\u003cspan class=\"pl-s1\"\u003eclassmethod\u003c/span\u003e\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003edef\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eas_completed\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003ecls\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003efs\u003c/span\u003e, \u003cspan class=\"pl-c1\"\u003e*\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003eloop\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eNone\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003etimeout\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eNone\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003etotal\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eNone\u003c/span\u003e,\n \u003cspan class=\"pl-c1\"\u003e**\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003etqdm_kwargs\u003c/span\u003e):\n \u003cspan class=\"pl-s\"\u003e\"\"\"Wrapper for `asyncio.as_completed`.\"\"\"\u003c/span\u003e\n\n\u003cspan class=\"pl-k\"\u003eclass\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etqdm\u003c/span\u003e.\u003cspan class=\"pl-s1\"\u003egui\u003c/span\u003e.\u003cspan class=\"pl-s1\"\u003etqdm\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003etqdm\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003etqdm\u003c/span\u003e):\n \u003cspan class=\"pl-s\"\u003e\"\"\"Matplotlib GUI version.\"\"\"\u003c/span\u003e\n\n\u003cspan class=\"pl-k\"\u003eclass\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etqdm\u003c/span\u003e.\u003cspan class=\"pl-s1\"\u003etk\u003c/span\u003e.\u003cspan class=\"pl-s1\"\u003etqdm\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003etqdm\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003etqdm\u003c/span\u003e):\n \u003cspan class=\"pl-s\"\u003e\"\"\"Tkinter GUI version.\"\"\"\u003c/span\u003e\n\n\u003cspan class=\"pl-k\"\u003eclass\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etqdm\u003c/span\u003e.\u003cspan class=\"pl-s1\"\u003erich\u003c/span\u003e.\u003cspan class=\"pl-s1\"\u003etqdm\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003etqdm\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003etqdm\u003c/span\u003e):\n \u003cspan class=\"pl-s\"\u003e\"\"\"`rich.progress` version.\"\"\"\u003c/span\u003e\n\n\u003cspan class=\"pl-k\"\u003eclass\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etqdm\u003c/span\u003e.\u003cspan class=\"pl-s1\"\u003ekeras\u003c/span\u003e.\u003cspan class=\"pl-v\"\u003eTqdmCallback\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003ekeras\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003ecallbacks\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eCallback\u003c/span\u003e):\n \u003cspan class=\"pl-s\"\u003e\"\"\"Keras callback for epoch and batch progress.\"\"\"\u003c/span\u003e\n\n\u003cspan class=\"pl-k\"\u003eclass\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etqdm\u003c/span\u003e.\u003cspan class=\"pl-s1\"\u003edask\u003c/span\u003e.\u003cspan class=\"pl-v\"\u003eTqdmCallback\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003edask\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003ecallbacks\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eCallback\u003c/span\u003e):\n \u003cspan class=\"pl-s\"\u003e\"\"\"Dask callback for task progress.\"\"\"\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003ca name=\"user-content-contrib\"\u003e\u003c/a\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch5 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e\u003ca href=\"#table-of-contents\"\u003e\u003ccode\u003econtrib\u003c/code\u003e\u003c/a\u003e\u003c/h5\u003e\u003ca id=\"user-content-contrib\" class=\"anchor\" aria-label=\"Permalink: contrib\" href=\"#contrib\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eThe \u003ccode\u003etqdm.contrib\u003c/code\u003e package also contains experimental modules:\u003c/p\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ccode\u003etqdm.contrib.itertools\u003c/code\u003e: Thin wrappers around \u003ccode\u003eitertools\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003etqdm.contrib.concurrent\u003c/code\u003e: Thin wrappers around \u003ccode\u003econcurrent.futures\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003etqdm.contrib.slack\u003c/code\u003e: Posts to \u003ca href=\"https://slack.com\" rel=\"nofollow\"\u003eSlack\u003c/a\u003e bots\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003etqdm.contrib.discord\u003c/code\u003e: Posts to \u003ca href=\"https://discord.com\" rel=\"nofollow\"\u003eDiscord\u003c/a\u003e bots\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003etqdm.contrib.telegram\u003c/code\u003e: Posts to \u003ca href=\"https://telegram.org\" rel=\"nofollow\"\u003eTelegram\u003c/a\u003e bots\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003etqdm.contrib.bells\u003c/code\u003e: Automagically enables all optional features\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ccode\u003eauto\u003c/code\u003e, \u003ccode\u003epandas\u003c/code\u003e, \u003ccode\u003eslack\u003c/code\u003e, \u003ccode\u003ediscord\u003c/code\u003e, \u003ccode\u003etelegram\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ca name=\"user-content-examples-and-advanced-usage\"\u003e\u003c/a\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e\u003ca href=\"#table-of-contents\"\u003eExamples and Advanced Usage\u003c/a\u003e\u003c/h3\u003e\u003ca id=\"user-content-examples-and-advanced-usage\" class=\"anchor\" aria-label=\"Permalink: Examples and Advanced Usage\" href=\"#examples-and-advanced-usage\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eSee the \u003ca href=\"https://github.com/tqdm/tqdm/tree/master/examples\"\u003eexamples\u003c/a\u003e\nfolder;\u003c/li\u003e\n\u003cli\u003eimport the module and run \u003ccode\u003ehelp()\u003c/code\u003e;\u003c/li\u003e\n\u003cli\u003econsult the \u003ca href=\"https://github.com/tqdm/tqdm/wiki\"\u003ewiki\u003c/a\u003e;\u003cul dir=\"auto\"\u003e\n\u003cli\u003ethis has an\n\u003ca href=\"https://github.com/tqdm/tqdm/wiki/How-to-make-a-great-Progress-Bar\"\u003eexcellent article\u003c/a\u003e\non how to make a \u003cstrong\u003egreat\u003c/strong\u003e progressbar;\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003echeck out the \u003ca href=\"https://tqdm.github.io/PyData2019/slides.html\" rel=\"nofollow\"\u003eslides from PyData London\u003c/a\u003e, or\u003c/li\u003e\n\u003cli\u003erun the \u003ca href=\"https://mybinder.org/v2/gh/tqdm/tqdm/master?filepath=DEMO.ipynb\" rel=\"nofollow\"\u003e\u003cimg alt=\"binder-demo\" src=\"https://camo.githubusercontent.com/7861126a7eb56440456a50288331e87b9604edbaa125354195637561fd400014/68747470733a2f2f6d7962696e6465722e6f72672f62616467655f6c6f676f2e737667\" data-canonical-src=\"https://mybinder.org/badge_logo.svg\" style=\"max-width: 100%;\"\u003e\n\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ca name=\"user-content-description-and-additional-stats\"\u003e\u003c/a\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch4 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e\u003ca href=\"#table-of-contents\"\u003eDescription and additional stats\u003c/a\u003e\u003c/h4\u003e\u003ca id=\"user-content-description-and-additional-stats\" class=\"anchor\" aria-label=\"Permalink: Description and additional stats\" href=\"#description-and-additional-stats\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eCustom information can be displayed and updated dynamically on \u003ccode\u003etqdm\u003c/code\u003e bars\nwith the \u003ccode\u003edesc\u003c/code\u003e and \u003ccode\u003epostfix\u003c/code\u003e arguments:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-python notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"from tqdm import tqdm, trange\nfrom random import random, randint\nfrom time import sleep\n\nwith trange(10) as t:\n for i in t:\n # Description will be displayed on the left\n t.set_description('GEN %i' % i)\n # Postfix will be displayed on the right,\n # formatted automatically based on argument's datatype\n t.set_postfix(loss=random(), gen=randint(1,999), str='h',\n lst=[1, 2])\n sleep(0.1)\n\nwith tqdm(total=10, bar_format=\u0026quot;{postfix[0]} {postfix[1][value]:\u0026gt;8.2g}\u0026quot;,\n postfix=[\u0026quot;Batch\u0026quot;, {\u0026quot;value\u0026quot;: 0}]) as t:\n for i in range(10):\n sleep(0.1)\n t.postfix[1][\u0026quot;value\u0026quot;] = i / 2\n t.update()\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003efrom\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etqdm\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eimport\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etqdm\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003etrange\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003efrom\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003erandom\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eimport\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003erandom\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003erandint\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003efrom\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etime\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eimport\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003esleep\u003c/span\u003e\n\n\u003cspan class=\"pl-k\"\u003ewith\u003c/span\u003e \u003cspan class=\"pl-en\"\u003etrange\u003c/span\u003e(\u003cspan class=\"pl-c1\"\u003e10\u003c/span\u003e) \u003cspan class=\"pl-k\"\u003eas\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003et\u003c/span\u003e:\n \u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003ein\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003et\u003c/span\u003e:\n \u003cspan class=\"pl-c\"\u003e# Description will be displayed on the left\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003et\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eset_description\u003c/span\u003e(\u003cspan class=\"pl-s\"\u003e'GEN %i'\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e%\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e)\n \u003cspan class=\"pl-c\"\u003e# Postfix will be displayed on the right,\u003c/span\u003e\n \u003cspan class=\"pl-c\"\u003e# formatted automatically based on argument's datatype\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003et\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eset_postfix\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eloss\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-en\"\u003erandom\u003c/span\u003e(), \u003cspan class=\"pl-s1\"\u003egen\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-en\"\u003erandint\u003c/span\u003e(\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e,\u003cspan class=\"pl-c1\"\u003e999\u003c/span\u003e), \u003cspan class=\"pl-s1\"\u003estr\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e'h'\u003c/span\u003e,\n \u003cspan class=\"pl-s1\"\u003elst\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e[\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e, \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e])\n \u003cspan class=\"pl-en\"\u003esleep\u003c/span\u003e(\u003cspan class=\"pl-c1\"\u003e0.1\u003c/span\u003e)\n\n\u003cspan class=\"pl-k\"\u003ewith\u003c/span\u003e \u003cspan class=\"pl-en\"\u003etqdm\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003etotal\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e10\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003ebar_format\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"{postfix[0]} {postfix[1][value]:\u0026gt;8.2g}\"\u003c/span\u003e,\n \u003cspan class=\"pl-s1\"\u003epostfix\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e[\u003cspan class=\"pl-s\"\u003e\"Batch\"\u003c/span\u003e, {\u003cspan class=\"pl-s\"\u003e\"value\"\u003c/span\u003e: \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e}]) \u003cspan class=\"pl-k\"\u003eas\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003et\u003c/span\u003e:\n \u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003ein\u003c/span\u003e \u003cspan class=\"pl-en\"\u003erange\u003c/span\u003e(\u003cspan class=\"pl-c1\"\u003e10\u003c/span\u003e):\n \u003cspan class=\"pl-en\"\u003esleep\u003c/span\u003e(\u003cspan class=\"pl-c1\"\u003e0.1\u003c/span\u003e)\n \u003cspan class=\"pl-s1\"\u003et\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003epostfix\u003c/span\u003e[\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e][\u003cspan class=\"pl-s\"\u003e\"value\"\u003c/span\u003e] \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e/\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003et\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eupdate\u003c/span\u003e()\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003ePoints to remember when using \u003ccode\u003e{postfix[...]}\u003c/code\u003e in the \u003ccode\u003ebar_format\u003c/code\u003e string:\u003c/p\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ccode\u003epostfix\u003c/code\u003e also needs to be passed as an initial argument in a compatible\nformat, and\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003epostfix\u003c/code\u003e will be auto-converted to a string if it is a \u003ccode\u003edict\u003c/code\u003e-like\nobject. To prevent this behaviour, insert an extra item into the dictionary\nwhere the key is not a string.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp dir=\"auto\"\u003eAdditional \u003ccode\u003ebar_format\u003c/code\u003e parameters may also be defined by overriding\n\u003ccode\u003eformat_dict\u003c/code\u003e, and the bar itself may be modified using \u003ccode\u003eascii\u003c/code\u003e:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-python notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"from tqdm import tqdm\nclass TqdmExtraFormat(tqdm):\n \u0026quot;\u0026quot;\u0026quot;Provides a `total_time` format parameter\u0026quot;\u0026quot;\u0026quot;\n @property\n def format_dict(self):\n d = super().format_dict\n total_time = d[\u0026quot;elapsed\u0026quot;] * (d[\u0026quot;total\u0026quot;] or 0) / max(d[\u0026quot;n\u0026quot;], 1)\n d.update(total_time=self.format_interval(total_time) + \u0026quot; in total\u0026quot;)\n return d\n\nfor i in TqdmExtraFormat(\n range(9), ascii=\u0026quot; .oO0\u0026quot;,\n bar_format=\u0026quot;{total_time}: {percentage:.0f}%|{bar}{r_bar}\u0026quot;):\n if i == 4:\n break\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003efrom\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etqdm\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eimport\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etqdm\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eclass\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eTqdmExtraFormat\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003etqdm\u003c/span\u003e):\n \u003cspan class=\"pl-s\"\u003e\"\"\"Provides a `total_time` format parameter\"\"\"\u003c/span\u003e\n \u003cspan class=\"pl-en\"\u003e@\u003cspan class=\"pl-s1\"\u003eproperty\u003c/span\u003e\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003edef\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eformat_dict\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eself\u003c/span\u003e):\n \u003cspan class=\"pl-s1\"\u003ed\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-en\"\u003esuper\u003c/span\u003e().\u003cspan class=\"pl-c1\"\u003eformat_dict\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003etotal_time\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ed\u003c/span\u003e[\u003cspan class=\"pl-s\"\u003e\"elapsed\"\u003c/span\u003e] \u003cspan class=\"pl-c1\"\u003e*\u003c/span\u003e (\u003cspan class=\"pl-s1\"\u003ed\u003c/span\u003e[\u003cspan class=\"pl-s\"\u003e\"total\"\u003c/span\u003e] \u003cspan class=\"pl-c1\"\u003eor\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e) \u003cspan class=\"pl-c1\"\u003e/\u003c/span\u003e \u003cspan class=\"pl-en\"\u003emax\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003ed\u003c/span\u003e[\u003cspan class=\"pl-s\"\u003e\"n\"\u003c/span\u003e], \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e)\n \u003cspan class=\"pl-s1\"\u003ed\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eupdate\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003etotal_time\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eself\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eformat_interval\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003etotal_time\u003c/span\u003e) \u003cspan class=\"pl-c1\"\u003e+\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\" in total\"\u003c/span\u003e)\n \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ed\u003c/span\u003e\n\n\u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003ein\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eTqdmExtraFormat\u003c/span\u003e(\n \u003cspan class=\"pl-en\"\u003erange\u003c/span\u003e(\u003cspan class=\"pl-c1\"\u003e9\u003c/span\u003e), \u003cspan class=\"pl-s1\"\u003eascii\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\" .oO0\"\u003c/span\u003e,\n \u003cspan class=\"pl-s1\"\u003ebar_format\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"{total_time}: {percentage:.0f}%|{bar}{r_bar}\"\u003c/span\u003e):\n \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e==\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e4\u003c/span\u003e:\n \u003cspan class=\"pl-k\"\u003ebreak\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cpre\u003e00:00 in total: 44%|0000. | 4/9 [00:00\u0026lt;00:00, 962.93it/s]\n\u003c/pre\u003e\n\u003cp dir=\"auto\"\u003eNote that \u003ccode\u003e{bar}\u003c/code\u003e also supports a format specifier \u003ccode\u003e[width][type]\u003c/code\u003e.\u003c/p\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ccode\u003ewidth\u003c/code\u003e\u003cul dir=\"auto\"\u003e\n\u003cli\u003eunspecified (default): automatic to fill \u003ccode\u003encols\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eint \u0026gt;= 0\u003c/code\u003e: fixed width overriding \u003ccode\u003encols\u003c/code\u003e logic\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eint \u0026lt; 0\u003c/code\u003e: subtract from the automatic default\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003etype\u003c/code\u003e\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ccode\u003ea\u003c/code\u003e: ascii (\u003ccode\u003eascii=True\u003c/code\u003e override)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eu\u003c/code\u003e: unicode (\u003ccode\u003eascii=False\u003c/code\u003e override)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eb\u003c/code\u003e: blank (\u003ccode\u003eascii=\" \"\u003c/code\u003e override)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp dir=\"auto\"\u003eThis means a fixed bar with right-justified text may be created by using:\n\u003ccode\u003ebar_format=\"{l_bar}{bar:10}|{bar:-10b}right-justified\"\u003c/code\u003e\u003c/p\u003e\n\u003ca name=\"user-content-nested-progress-bars\"\u003e\u003c/a\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch4 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e\u003ca href=\"#table-of-contents\"\u003eNested progress bars\u003c/a\u003e\u003c/h4\u003e\u003ca id=\"user-content-nested-progress-bars\" class=\"anchor\" aria-label=\"Permalink: Nested progress bars\" href=\"#nested-progress-bars\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e\u003ccode\u003etqdm\u003c/code\u003e supports nested progress bars. Here's an example:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-python notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"from tqdm.auto import trange\nfrom time import sleep\n\nfor i in trange(4, desc='1st loop'):\n for j in trange(5, desc='2nd loop'):\n for k in trange(50, desc='3rd loop', leave=False):\n sleep(0.01)\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003efrom\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etqdm\u003c/span\u003e.\u003cspan class=\"pl-s1\"\u003eauto\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eimport\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etrange\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003efrom\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etime\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eimport\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003esleep\u003c/span\u003e\n\n\u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003ein\u003c/span\u003e \u003cspan class=\"pl-en\"\u003etrange\u003c/span\u003e(\u003cspan class=\"pl-c1\"\u003e4\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003edesc\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e'1st loop'\u003c/span\u003e):\n \u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003ein\u003c/span\u003e \u003cspan class=\"pl-en\"\u003etrange\u003c/span\u003e(\u003cspan class=\"pl-c1\"\u003e5\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003edesc\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e'2nd loop'\u003c/span\u003e):\n \u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ek\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003ein\u003c/span\u003e \u003cspan class=\"pl-en\"\u003etrange\u003c/span\u003e(\u003cspan class=\"pl-c1\"\u003e50\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003edesc\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e'3rd loop'\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003eleave\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eFalse\u003c/span\u003e):\n \u003cspan class=\"pl-en\"\u003esleep\u003c/span\u003e(\u003cspan class=\"pl-c1\"\u003e0.01\u003c/span\u003e)\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eFor manual control over positioning (e.g. for multi-processing use),\nyou may specify \u003ccode\u003eposition=n\u003c/code\u003e where \u003ccode\u003en=0\u003c/code\u003e for the outermost bar,\n\u003ccode\u003en=1\u003c/code\u003e for the next, and so on.\nHowever, it's best to check if \u003ccode\u003etqdm\u003c/code\u003e can work without manual \u003ccode\u003eposition\u003c/code\u003e\nfirst.\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-python notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"from time import sleep\nfrom tqdm import trange, tqdm\nfrom multiprocessing import Pool, RLock, freeze_support\n\nL = list(range(9))\n\ndef progresser(n):\n interval = 0.001 / (n + 2)\n total = 5000\n text = f\u0026quot;#{n}, est. {interval * total:\u0026lt;04.2}s\u0026quot;\n for _ in trange(total, desc=text, position=n):\n sleep(interval)\n\nif __name__ == '__main__':\n freeze_support() # for Windows support\n tqdm.set_lock(RLock()) # for managing output contention\n p = Pool(initializer=tqdm.set_lock, initargs=(tqdm.get_lock(),))\n p.map(progresser, L)\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003efrom\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etime\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eimport\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003esleep\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003efrom\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etqdm\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eimport\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etrange\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003etqdm\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003efrom\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003emultiprocessing\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eimport\u003c/span\u003e \u003cspan class=\"pl-v\"\u003ePool\u003c/span\u003e, \u003cspan class=\"pl-v\"\u003eRLock\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003efreeze_support\u003c/span\u003e\n\n\u003cspan class=\"pl-c1\"\u003eL\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-en\"\u003elist\u003c/span\u003e(\u003cspan class=\"pl-en\"\u003erange\u003c/span\u003e(\u003cspan class=\"pl-c1\"\u003e9\u003c/span\u003e))\n\n\u003cspan class=\"pl-k\"\u003edef\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eprogresser\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003en\u003c/span\u003e):\n \u003cspan class=\"pl-s1\"\u003einterval\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e0.001\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e/\u003c/span\u003e (\u003cspan class=\"pl-s1\"\u003en\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e+\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e)\n \u003cspan class=\"pl-s1\"\u003etotal\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e5000\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003etext\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s\"\u003ef\"#\u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003en\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003c/span\u003e, est. \u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003einterval\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e*\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etotal\u003c/span\u003e:\u0026lt;04.2\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003c/span\u003es\"\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003e_\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003ein\u003c/span\u003e \u003cspan class=\"pl-en\"\u003etrange\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003etotal\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003edesc\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003etext\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003eposition\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003en\u003c/span\u003e):\n \u003cspan class=\"pl-en\"\u003esleep\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003einterval\u003c/span\u003e)\n\n\u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003e__name__\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e==\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e'__main__'\u003c/span\u003e:\n \u003cspan class=\"pl-en\"\u003efreeze_support\u003c/span\u003e() \u003cspan class=\"pl-c\"\u003e# for Windows support\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003etqdm\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eset_lock\u003c/span\u003e(\u003cspan class=\"pl-en\"\u003eRLock\u003c/span\u003e()) \u003cspan class=\"pl-c\"\u003e# for managing output contention\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003ep\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-en\"\u003ePool\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003einitializer\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003etqdm\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eset_lock\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003einitargs\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003etqdm\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eget_lock\u003c/span\u003e(),))\n \u003cspan class=\"pl-s1\"\u003ep\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003emap\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eprogresser\u003c/span\u003e, \u003cspan class=\"pl-c1\"\u003eL\u003c/span\u003e)\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eNote that in Python 3, \u003ccode\u003etqdm.write\u003c/code\u003e is thread-safe:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-python notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"from time import sleep\nfrom tqdm import tqdm, trange\nfrom concurrent.futures import ThreadPoolExecutor\n\nL = list(range(9))\n\ndef progresser(n):\n interval = 0.001 / (n + 2)\n total = 5000\n text = f\u0026quot;#{n}, est. {interval * total:\u0026lt;04.2}s\u0026quot;\n for _ in trange(total, desc=text):\n sleep(interval)\n if n == 6:\n tqdm.write(\u0026quot;n == 6 completed.\u0026quot;)\n tqdm.write(\u0026quot;`tqdm.write()` is thread-safe in py3!\u0026quot;)\n\nif __name__ == '__main__':\n with ThreadPoolExecutor() as p:\n p.map(progresser, L)\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003efrom\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etime\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eimport\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003esleep\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003efrom\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etqdm\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eimport\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etqdm\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003etrange\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003efrom\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003econcurrent\u003c/span\u003e.\u003cspan class=\"pl-s1\"\u003efutures\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eimport\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eThreadPoolExecutor\u003c/span\u003e\n\n\u003cspan class=\"pl-c1\"\u003eL\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-en\"\u003elist\u003c/span\u003e(\u003cspan class=\"pl-en\"\u003erange\u003c/span\u003e(\u003cspan class=\"pl-c1\"\u003e9\u003c/span\u003e))\n\n\u003cspan class=\"pl-k\"\u003edef\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eprogresser\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003en\u003c/span\u003e):\n \u003cspan class=\"pl-s1\"\u003einterval\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e0.001\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e/\u003c/span\u003e (\u003cspan class=\"pl-s1\"\u003en\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e+\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e)\n \u003cspan class=\"pl-s1\"\u003etotal\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e5000\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003etext\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s\"\u003ef\"#\u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003en\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003c/span\u003e, est. \u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003einterval\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e*\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etotal\u003c/span\u003e:\u0026lt;04.2\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003c/span\u003es\"\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003e_\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003ein\u003c/span\u003e \u003cspan class=\"pl-en\"\u003etrange\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003etotal\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003edesc\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003etext\u003c/span\u003e):\n \u003cspan class=\"pl-en\"\u003esleep\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003einterval\u003c/span\u003e)\n \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003en\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e==\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e6\u003c/span\u003e:\n \u003cspan class=\"pl-s1\"\u003etqdm\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003ewrite\u003c/span\u003e(\u003cspan class=\"pl-s\"\u003e\"n == 6 completed.\"\u003c/span\u003e)\n \u003cspan class=\"pl-s1\"\u003etqdm\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003ewrite\u003c/span\u003e(\u003cspan class=\"pl-s\"\u003e\"`tqdm.write()` is thread-safe in py3!\"\u003c/span\u003e)\n\n\u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003e__name__\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e==\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e'__main__'\u003c/span\u003e:\n \u003cspan class=\"pl-k\"\u003ewith\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eThreadPoolExecutor\u003c/span\u003e() \u003cspan class=\"pl-k\"\u003eas\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ep\u003c/span\u003e:\n \u003cspan class=\"pl-s1\"\u003ep\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003emap\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eprogresser\u003c/span\u003e, \u003cspan class=\"pl-c1\"\u003eL\u003c/span\u003e)\u003c/pre\u003e\u003c/div\u003e\n\u003ca name=\"user-content-hooks-and-callbacks\"\u003e\u003c/a\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch4 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e\u003ca href=\"#table-of-contents\"\u003eHooks and callbacks\u003c/a\u003e\u003c/h4\u003e\u003ca id=\"user-content-hooks-and-callbacks\" class=\"anchor\" aria-label=\"Permalink: Hooks and callbacks\" href=\"#hooks-and-callbacks\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e\u003ccode\u003etqdm\u003c/code\u003e can easily support callbacks/hooks and manual updates.\nHere's an example with \u003ccode\u003eurllib\u003c/code\u003e:\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003e``urllib.urlretrieve`` documentation\u003c/strong\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cdiv dir=\"auto\"\u003e\n\u003cdiv dir=\"auto\"\u003e[...]\u003c/div\u003e\n\u003cdiv dir=\"auto\"\u003eIf present, the hook function will be called once\u003c/div\u003e\n\u003cdiv dir=\"auto\"\u003eon establishment of the network connection and once after each block read\u003c/div\u003e\n\u003cdiv dir=\"auto\"\u003ethereafter. The hook will be passed three arguments; a count of blocks\u003c/div\u003e\n\u003cdiv dir=\"auto\"\u003etransferred so far, a block size in bytes, and the total size of the file.\u003c/div\u003e\n\u003cdiv dir=\"auto\"\u003e[...]\u003c/div\u003e\n\u003c/div\u003e\n\u003c/blockquote\u003e\n\u003cdiv class=\"highlight highlight-source-python notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"import urllib, os\nfrom tqdm import tqdm\nurllib = getattr(urllib, 'request', urllib)\n\nclass TqdmUpTo(tqdm):\n \u0026quot;\u0026quot;\u0026quot;Provides `update_to(n)` which uses `tqdm.update(delta_n)`.\u0026quot;\u0026quot;\u0026quot;\n def update_to(self, b=1, bsize=1, tsize=None):\n \u0026quot;\u0026quot;\u0026quot;\n b : int, optional\n Number of blocks transferred so far [default: 1].\n bsize : int, optional\n Size of each block (in tqdm units) [default: 1].\n tsize : int, optional\n Total size (in tqdm units). If [default: None] remains unchanged.\n \u0026quot;\u0026quot;\u0026quot;\n if tsize is not None:\n self.total = tsize\n return self.update(b * bsize - self.n) # also sets self.n = b * bsize\n\neg_link = \u0026quot;https://caspersci.uk.to/matryoshka.zip\u0026quot;\nwith TqdmUpTo(unit='B', unit_scale=True, unit_divisor=1024, miniters=1,\n desc=eg_link.split('/')[-1]) as t: # all optional kwargs\n urllib.urlretrieve(eg_link, filename=os.devnull,\n reporthook=t.update_to, data=None)\n t.total = t.n\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003eimport\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eurllib\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003eos\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003efrom\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etqdm\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eimport\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etqdm\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003eurllib\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-en\"\u003egetattr\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eurllib\u003c/span\u003e, \u003cspan class=\"pl-s\"\u003e'request'\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003eurllib\u003c/span\u003e)\n\n\u003cspan class=\"pl-k\"\u003eclass\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eTqdmUpTo\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003etqdm\u003c/span\u003e):\n \u003cspan class=\"pl-s\"\u003e\"\"\"Provides `update_to(n)` which uses `tqdm.update(delta_n)`.\"\"\"\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003edef\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eupdate_to\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eself\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003eb\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003ebsize\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003etsize\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eNone\u003c/span\u003e):\n \u003cspan class=\"pl-s\"\u003e\"\"\"\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e b : int, optional\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e Number of blocks transferred so far [default: 1].\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e bsize : int, optional\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e Size of each block (in tqdm units) [default: 1].\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e tsize : int, optional\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e Total size (in tqdm units). If [default: None] remains unchanged.\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e \"\"\"\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etsize\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e\u003cspan class=\"pl-c1\"\u003eis\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003enot\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003eNone\u003c/span\u003e:\n \u003cspan class=\"pl-s1\"\u003eself\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003etotal\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etsize\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eself\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eupdate\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eb\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e*\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ebsize\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e-\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eself\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003en\u003c/span\u003e) \u003cspan class=\"pl-c\"\u003e# also sets self.n = b * bsize\u003c/span\u003e\n\n\u003cspan class=\"pl-s1\"\u003eeg_link\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"https://caspersci.uk.to/matryoshka.zip\"\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003ewith\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eTqdmUpTo\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eunit\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e'B'\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003eunit_scale\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eTrue\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003eunit_divisor\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e1024\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003eminiters\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e,\n \u003cspan class=\"pl-s1\"\u003edesc\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eeg_link\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003esplit\u003c/span\u003e(\u003cspan class=\"pl-s\"\u003e'/'\u003c/span\u003e)[\u003cspan class=\"pl-c1\"\u003e-\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e]) \u003cspan class=\"pl-k\"\u003eas\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003et\u003c/span\u003e: \u003cspan class=\"pl-c\"\u003e# all optional kwargs\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003eurllib\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eurlretrieve\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eeg_link\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003efilename\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eos\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003edevnull\u003c/span\u003e,\n \u003cspan class=\"pl-s1\"\u003ereporthook\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003et\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eupdate_to\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003edata\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eNone\u003c/span\u003e)\n \u003cspan class=\"pl-s1\"\u003et\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003etotal\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003et\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003en\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eInspired by \u003ca href=\"https://github.com/pypa/twine/pull/242\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/pypa/twine/pull/242/hovercard\"\u003etwine#242\u003c/a\u003e.\nFunctional alternative in\n\u003ca href=\"https://github.com/tqdm/tqdm/blob/master/examples/tqdm_wget.py\"\u003eexamples/tqdm_wget.py\u003c/a\u003e.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eIt is recommend to use \u003ccode\u003eminiters=1\u003c/code\u003e whenever there is potentially\nlarge differences in iteration speed (e.g. downloading a file over\na patchy connection).\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003eWrapping read/write methods\u003c/strong\u003e\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eTo measure throughput through a file-like object's \u003ccode\u003eread\u003c/code\u003e or \u003ccode\u003ewrite\u003c/code\u003e\nmethods, use \u003ccode\u003eCallbackIOWrapper\u003c/code\u003e:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-python notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"from tqdm.auto import tqdm\nfrom tqdm.utils import CallbackIOWrapper\n\nwith tqdm(total=file_obj.size,\n unit='B', unit_scale=True, unit_divisor=1024) as t:\n fobj = CallbackIOWrapper(t.update, file_obj, \u0026quot;read\u0026quot;)\n while True:\n chunk = fobj.read(chunk_size)\n if not chunk:\n break\n t.reset()\n # ... continue to use `t` for something else\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003efrom\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etqdm\u003c/span\u003e.\u003cspan class=\"pl-s1\"\u003eauto\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eimport\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etqdm\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003efrom\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etqdm\u003c/span\u003e.\u003cspan class=\"pl-s1\"\u003eutils\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eimport\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eCallbackIOWrapper\u003c/span\u003e\n\n\u003cspan class=\"pl-k\"\u003ewith\u003c/span\u003e \u003cspan class=\"pl-en\"\u003etqdm\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003etotal\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003efile_obj\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003esize\u003c/span\u003e,\n \u003cspan class=\"pl-s1\"\u003eunit\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e'B'\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003eunit_scale\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eTrue\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003eunit_divisor\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e1024\u003c/span\u003e) \u003cspan class=\"pl-k\"\u003eas\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003et\u003c/span\u003e:\n \u003cspan class=\"pl-s1\"\u003efobj\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eCallbackIOWrapper\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003et\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eupdate\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003efile_obj\u003c/span\u003e, \u003cspan class=\"pl-s\"\u003e\"read\"\u003c/span\u003e)\n \u003cspan class=\"pl-k\"\u003ewhile\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003eTrue\u003c/span\u003e:\n \u003cspan class=\"pl-s1\"\u003echunk\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003efobj\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eread\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003echunk_size\u003c/span\u003e)\n \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003enot\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003echunk\u003c/span\u003e:\n \u003cspan class=\"pl-k\"\u003ebreak\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003et\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003ereset\u003c/span\u003e()\n \u003cspan class=\"pl-c\"\u003e# ... continue to use `t` for something else\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eAlternatively, use the even simpler \u003ccode\u003ewrapattr\u003c/code\u003e convenience function,\nwhich would condense both the \u003ccode\u003eurllib\u003c/code\u003e and \u003ccode\u003eCallbackIOWrapper\u003c/code\u003e examples\ndown to:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-python notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"import urllib, os\nfrom tqdm import tqdm\n\neg_link = \u0026quot;https://caspersci.uk.to/matryoshka.zip\u0026quot;\nresponse = getattr(urllib, 'request', urllib).urlopen(eg_link)\nwith tqdm.wrapattr(open(os.devnull, \u0026quot;wb\u0026quot;), \u0026quot;write\u0026quot;,\n miniters=1, desc=eg_link.split('/')[-1],\n total=getattr(response, 'length', None)) as fout:\n for chunk in response:\n fout.write(chunk)\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003eimport\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eurllib\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003eos\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003efrom\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etqdm\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eimport\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etqdm\u003c/span\u003e\n\n\u003cspan class=\"pl-s1\"\u003eeg_link\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"https://caspersci.uk.to/matryoshka.zip\"\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003eresponse\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-en\"\u003egetattr\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eurllib\u003c/span\u003e, \u003cspan class=\"pl-s\"\u003e'request'\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003eurllib\u003c/span\u003e).\u003cspan class=\"pl-c1\"\u003eurlopen\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eeg_link\u003c/span\u003e)\n\u003cspan class=\"pl-k\"\u003ewith\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etqdm\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003ewrapattr\u003c/span\u003e(\u003cspan class=\"pl-en\"\u003eopen\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eos\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003edevnull\u003c/span\u003e, \u003cspan class=\"pl-s\"\u003e\"wb\"\u003c/span\u003e), \u003cspan class=\"pl-s\"\u003e\"write\"\u003c/span\u003e,\n \u003cspan class=\"pl-s1\"\u003eminiters\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003edesc\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eeg_link\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003esplit\u003c/span\u003e(\u003cspan class=\"pl-s\"\u003e'/'\u003c/span\u003e)[\u003cspan class=\"pl-c1\"\u003e-\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e],\n \u003cspan class=\"pl-s1\"\u003etotal\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-en\"\u003egetattr\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eresponse\u003c/span\u003e, \u003cspan class=\"pl-s\"\u003e'length'\u003c/span\u003e, \u003cspan class=\"pl-c1\"\u003eNone\u003c/span\u003e)) \u003cspan class=\"pl-k\"\u003eas\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003efout\u003c/span\u003e:\n \u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003echunk\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003ein\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eresponse\u003c/span\u003e:\n \u003cspan class=\"pl-s1\"\u003efout\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003ewrite\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003echunk\u003c/span\u003e)\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eThe \u003ccode\u003erequests\u003c/code\u003e equivalent is nearly identical:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-python notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"import requests, os\nfrom tqdm import tqdm\n\neg_link = \u0026quot;https://caspersci.uk.to/matryoshka.zip\u0026quot;\nresponse = requests.get(eg_link, stream=True)\nwith tqdm.wrapattr(open(os.devnull, \u0026quot;wb\u0026quot;), \u0026quot;write\u0026quot;,\n miniters=1, desc=eg_link.split('/')[-1],\n total=int(response.headers.get('content-length', 0))) as fout:\n for chunk in response.iter_content(chunk_size=4096):\n fout.write(chunk)\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003eimport\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003erequests\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003eos\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003efrom\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etqdm\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eimport\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etqdm\u003c/span\u003e\n\n\u003cspan class=\"pl-s1\"\u003eeg_link\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"https://caspersci.uk.to/matryoshka.zip\"\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003eresponse\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003erequests\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eget\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eeg_link\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003estream\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eTrue\u003c/span\u003e)\n\u003cspan class=\"pl-k\"\u003ewith\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etqdm\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003ewrapattr\u003c/span\u003e(\u003cspan class=\"pl-en\"\u003eopen\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eos\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003edevnull\u003c/span\u003e, \u003cspan class=\"pl-s\"\u003e\"wb\"\u003c/span\u003e), \u003cspan class=\"pl-s\"\u003e\"write\"\u003c/span\u003e,\n \u003cspan class=\"pl-s1\"\u003eminiters\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003edesc\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eeg_link\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003esplit\u003c/span\u003e(\u003cspan class=\"pl-s\"\u003e'/'\u003c/span\u003e)[\u003cspan class=\"pl-c1\"\u003e-\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e],\n \u003cspan class=\"pl-s1\"\u003etotal\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eint\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eresponse\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eheaders\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eget\u003c/span\u003e(\u003cspan class=\"pl-s\"\u003e'content-length'\u003c/span\u003e, \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e))) \u003cspan class=\"pl-k\"\u003eas\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003efout\u003c/span\u003e:\n \u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003echunk\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003ein\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eresponse\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eiter_content\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003echunk_size\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e4096\u003c/span\u003e):\n \u003cspan class=\"pl-s1\"\u003efout\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003ewrite\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003echunk\u003c/span\u003e)\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003eCustom callback\u003c/strong\u003e\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003ccode\u003etqdm\u003c/code\u003e is known for intelligently skipping unnecessary displays. To make a\ncustom callback take advantage of this, simply use the return value of\n\u003ccode\u003eupdate()\u003c/code\u003e. This is set to \u003ccode\u003eTrue\u003c/code\u003e if a \u003ccode\u003edisplay()\u003c/code\u003e was triggered.\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-python notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"from tqdm.auto import tqdm as std_tqdm\n\ndef external_callback(*args, **kwargs):\n ...\n\nclass TqdmExt(std_tqdm):\n def update(self, n=1):\n displayed = super().update(n)\n if displayed:\n external_callback(**self.format_dict)\n return displayed\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003efrom\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etqdm\u003c/span\u003e.\u003cspan class=\"pl-s1\"\u003eauto\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eimport\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etqdm\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eas\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003estd_tqdm\u003c/span\u003e\n\n\u003cspan class=\"pl-k\"\u003edef\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eexternal_callback\u003c/span\u003e(\u003cspan class=\"pl-c1\"\u003e*\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eargs\u003c/span\u003e, \u003cspan class=\"pl-c1\"\u003e**\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ekwargs\u003c/span\u003e):\n ...\n\n\u003cspan class=\"pl-k\"\u003eclass\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eTqdmExt\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003estd_tqdm\u003c/span\u003e):\n \u003cspan class=\"pl-k\"\u003edef\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eupdate\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eself\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003en\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e):\n \u003cspan class=\"pl-s1\"\u003edisplayed\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-en\"\u003esuper\u003c/span\u003e().\u003cspan class=\"pl-c1\"\u003eupdate\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003en\u003c/span\u003e)\n \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003edisplayed\u003c/span\u003e:\n \u003cspan class=\"pl-en\"\u003eexternal_callback\u003c/span\u003e(\u003cspan class=\"pl-c1\"\u003e**\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eself\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eformat_dict\u003c/span\u003e)\n \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003edisplayed\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003ca name=\"user-content-asyncio\"\u003e\u003c/a\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch4 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e\u003ca href=\"#table-of-contents\"\u003e\u003ccode\u003easyncio\u003c/code\u003e\u003c/a\u003e\u003c/h4\u003e\u003ca id=\"user-content-asyncio\" class=\"anchor\" aria-label=\"Permalink: asyncio\" href=\"#asyncio\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eNote that \u003ccode\u003ebreak\u003c/code\u003e isn't currently caught by asynchronous iterators.\nThis means that \u003ccode\u003etqdm\u003c/code\u003e cannot clean up after itself in this case:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-python notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"from tqdm.asyncio import tqdm\n\nasync for i in tqdm(range(9)):\n if i == 2:\n break\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003efrom\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etqdm\u003c/span\u003e.\u003cspan class=\"pl-s1\"\u003easyncio\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eimport\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etqdm\u003c/span\u003e\n\n\u003cspan class=\"pl-k\"\u003easync\u003c/span\u003e \u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003ein\u003c/span\u003e \u003cspan class=\"pl-en\"\u003etqdm\u003c/span\u003e(\u003cspan class=\"pl-en\"\u003erange\u003c/span\u003e(\u003cspan class=\"pl-c1\"\u003e9\u003c/span\u003e)):\n \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e==\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e:\n \u003cspan class=\"pl-k\"\u003ebreak\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eInstead, either call \u003ccode\u003epbar.close()\u003c/code\u003e manually or use the context manager syntax:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-python notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"from tqdm.asyncio import tqdm\n\nwith tqdm(range(9)) as pbar:\n async for i in pbar:\n if i == 2:\n break\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003efrom\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etqdm\u003c/span\u003e.\u003cspan class=\"pl-s1\"\u003easyncio\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eimport\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etqdm\u003c/span\u003e\n\n\u003cspan class=\"pl-k\"\u003ewith\u003c/span\u003e \u003cspan class=\"pl-en\"\u003etqdm\u003c/span\u003e(\u003cspan class=\"pl-en\"\u003erange\u003c/span\u003e(\u003cspan class=\"pl-c1\"\u003e9\u003c/span\u003e)) \u003cspan class=\"pl-k\"\u003eas\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003epbar\u003c/span\u003e:\n \u003cspan class=\"pl-k\"\u003easync\u003c/span\u003e \u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003ein\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003epbar\u003c/span\u003e:\n \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e==\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e:\n \u003cspan class=\"pl-k\"\u003ebreak\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003ca name=\"user-content-pandas-integration\"\u003e\u003c/a\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch4 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e\u003ca href=\"#table-of-contents\"\u003ePandas Integration\u003c/a\u003e\u003c/h4\u003e\u003ca id=\"user-content-pandas-integration\" class=\"anchor\" aria-label=\"Permalink: Pandas Integration\" href=\"#pandas-integration\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eDue to popular demand we've added support for \u003ccode\u003epandas\u003c/code\u003e -- here's an example\nfor \u003ccode\u003eDataFrame.progress_apply\u003c/code\u003e and \u003ccode\u003eDataFrameGroupBy.progress_apply\u003c/code\u003e:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-python notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"import pandas as pd\nimport numpy as np\nfrom tqdm import tqdm\n\ndf = pd.DataFrame(np.random.randint(0, 100, (100000, 6)))\n\n# Register `pandas.progress_apply` and `pandas.Series.map_apply` with `tqdm`\n# (can use `tqdm.gui.tqdm`, `tqdm.notebook.tqdm`, optional kwargs, etc.)\ntqdm.pandas(desc=\u0026quot;my bar!\u0026quot;)\n\n# Now you can use `progress_apply` instead of `apply`\n# and `progress_map` instead of `map`\ndf.progress_apply(lambda x: x**2)\n# can also groupby:\n# df.groupby(0).progress_apply(lambda x: x**2)\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003eimport\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003epandas\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eas\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003epd\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eimport\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enumpy\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eas\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enp\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003efrom\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etqdm\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eimport\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etqdm\u003c/span\u003e\n\n\u003cspan class=\"pl-s1\"\u003edf\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003epd\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eDataFrame\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003enp\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003erandom\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003erandint\u003c/span\u003e(\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e, \u003cspan class=\"pl-c1\"\u003e100\u003c/span\u003e, (\u003cspan class=\"pl-c1\"\u003e100000\u003c/span\u003e, \u003cspan class=\"pl-c1\"\u003e6\u003c/span\u003e)))\n\n\u003cspan class=\"pl-c\"\u003e# Register `pandas.progress_apply` and `pandas.Series.map_apply` with `tqdm`\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# (can use `tqdm.gui.tqdm`, `tqdm.notebook.tqdm`, optional kwargs, etc.)\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003etqdm\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003epandas\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003edesc\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"my bar!\"\u003c/span\u003e)\n\n\u003cspan class=\"pl-c\"\u003e# Now you can use `progress_apply` instead of `apply`\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# and `progress_map` instead of `map`\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003edf\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eprogress_apply\u003c/span\u003e(\u003cspan class=\"pl-k\"\u003elambda\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ex\u003c/span\u003e: \u003cspan class=\"pl-s1\"\u003ex\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e**\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e)\n\u003cspan class=\"pl-c\"\u003e# can also groupby:\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# df.groupby(0).progress_apply(lambda x: x**2)\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eIn case you're interested in how this works (and how to modify it for your\nown callbacks), see the\n\u003ca href=\"https://github.com/tqdm/tqdm/tree/master/examples\"\u003eexamples\u003c/a\u003e\nfolder or import the module and run \u003ccode\u003ehelp()\u003c/code\u003e.\u003c/p\u003e\n\u003ca name=\"user-content-keras-integration\"\u003e\u003c/a\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch4 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e\u003ca href=\"#table-of-contents\"\u003eKeras Integration\u003c/a\u003e\u003c/h4\u003e\u003ca id=\"user-content-keras-integration\" class=\"anchor\" aria-label=\"Permalink: Keras Integration\" href=\"#keras-integration\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eA \u003ccode\u003ekeras\u003c/code\u003e callback is also available:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-python notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"from tqdm.keras import TqdmCallback\n\n...\n\nmodel.fit(..., verbose=0, callbacks=[TqdmCallback()])\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003efrom\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etqdm\u003c/span\u003e.\u003cspan class=\"pl-s1\"\u003ekeras\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eimport\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eTqdmCallback\u003c/span\u003e\n\n...\n\n\u003cspan class=\"pl-s1\"\u003emodel\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003efit\u003c/span\u003e(..., \u003cspan class=\"pl-s1\"\u003everbose\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003ecallbacks\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e[\u003cspan class=\"pl-en\"\u003eTqdmCallback\u003c/span\u003e()])\u003c/pre\u003e\u003c/div\u003e\n\u003ca name=\"user-content-dask-integration\"\u003e\u003c/a\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch4 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e\u003ca href=\"#table-of-contents\"\u003eDask Integration\u003c/a\u003e\u003c/h4\u003e\u003ca id=\"user-content-dask-integration\" class=\"anchor\" aria-label=\"Permalink: Dask Integration\" href=\"#dask-integration\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eA \u003ccode\u003edask\u003c/code\u003e callback is also available:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-python notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"from tqdm.dask import TqdmCallback\n\nwith TqdmCallback(desc=\u0026quot;compute\u0026quot;):\n ...\n arr.compute()\n\n# or use callback globally\ncb = TqdmCallback(desc=\u0026quot;global\u0026quot;)\ncb.register()\narr.compute()\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003efrom\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etqdm\u003c/span\u003e.\u003cspan class=\"pl-s1\"\u003edask\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eimport\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eTqdmCallback\u003c/span\u003e\n\n\u003cspan class=\"pl-k\"\u003ewith\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eTqdmCallback\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003edesc\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"compute\"\u003c/span\u003e):\n ...\n \u003cspan class=\"pl-s1\"\u003earr\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003ecompute\u003c/span\u003e()\n\n\u003cspan class=\"pl-c\"\u003e# or use callback globally\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003ecb\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eTqdmCallback\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003edesc\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"global\"\u003c/span\u003e)\n\u003cspan class=\"pl-s1\"\u003ecb\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eregister\u003c/span\u003e()\n\u003cspan class=\"pl-s1\"\u003earr\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003ecompute\u003c/span\u003e()\u003c/pre\u003e\u003c/div\u003e\n\u003ca name=\"user-content-ipython-jupyter-integration\"\u003e\u003c/a\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch4 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e\u003ca href=\"#table-of-contents\"\u003eIPython/Jupyter Integration\u003c/a\u003e\u003c/h4\u003e\u003ca id=\"user-content-ipythonjupyter-integration\" class=\"anchor\" aria-label=\"Permalink: IPython/Jupyter Integration\" href=\"#ipythonjupyter-integration\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eIPython/Jupyter is supported via the \u003ccode\u003etqdm.notebook\u003c/code\u003e submodule:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-python notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"from tqdm.notebook import trange, tqdm\nfrom time import sleep\n\nfor i in trange(3, desc='1st loop'):\n for j in tqdm(range(100), desc='2nd loop'):\n sleep(0.01)\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003efrom\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etqdm\u003c/span\u003e.\u003cspan class=\"pl-s1\"\u003enotebook\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eimport\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etrange\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003etqdm\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003efrom\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etime\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eimport\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003esleep\u003c/span\u003e\n\n\u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003ein\u003c/span\u003e \u003cspan class=\"pl-en\"\u003etrange\u003c/span\u003e(\u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003edesc\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e'1st loop'\u003c/span\u003e):\n \u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ej\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003ein\u003c/span\u003e \u003cspan class=\"pl-en\"\u003etqdm\u003c/span\u003e(\u003cspan class=\"pl-en\"\u003erange\u003c/span\u003e(\u003cspan class=\"pl-c1\"\u003e100\u003c/span\u003e), \u003cspan class=\"pl-s1\"\u003edesc\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e'2nd loop'\u003c/span\u003e):\n \u003cspan class=\"pl-en\"\u003esleep\u003c/span\u003e(\u003cspan class=\"pl-c1\"\u003e0.01\u003c/span\u003e)\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eIn addition to \u003ccode\u003etqdm\u003c/code\u003e features, the submodule provides a native Jupyter\nwidget (compatible with IPython v1-v4 and Jupyter), fully working nested bars\nand colour hints (blue: normal, green: completed, red: error/interrupt,\nlight blue: no ETA); as demonstrated below.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003ca target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://camo.githubusercontent.com/f5ebfb74be117579caa24a24e5e89c4f1552e14d33534ef1f3d45acacd944bad/68747470733a2f2f7471646d2e6769746875622e696f2f696d672f6a7570797465722d312e676966\"\u003e\u003cimg alt=\"Screenshot-Jupyter1\" src=\"https://camo.githubusercontent.com/f5ebfb74be117579caa24a24e5e89c4f1552e14d33534ef1f3d45acacd944bad/68747470733a2f2f7471646d2e6769746875622e696f2f696d672f6a7570797465722d312e676966\" data-animated-image=\"\" data-canonical-src=\"https://tqdm.github.io/img/jupyter-1.gif\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\n\u003ca target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://camo.githubusercontent.com/41b278dd33c08d839509fae6dac988948e0c98c6ceb4da78340c4b88055f0e91/68747470733a2f2f7471646d2e6769746875622e696f2f696d672f6a7570797465722d322e676966\"\u003e\u003cimg alt=\"Screenshot-Jupyter2\" src=\"https://camo.githubusercontent.com/41b278dd33c08d839509fae6dac988948e0c98c6ceb4da78340c4b88055f0e91/68747470733a2f2f7471646d2e6769746875622e696f2f696d672f6a7570797465722d322e676966\" data-animated-image=\"\" data-canonical-src=\"https://tqdm.github.io/img/jupyter-2.gif\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\n\u003ca target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://camo.githubusercontent.com/26ca8e3aba0f21035a87ab20dc697f57e8a8150fa44cbbff9fd88d13fa686a32/68747470733a2f2f7471646d2e6769746875622e696f2f696d672f6a7570797465722d332e676966\"\u003e\u003cimg alt=\"Screenshot-Jupyter3\" src=\"https://camo.githubusercontent.com/26ca8e3aba0f21035a87ab20dc697f57e8a8150fa44cbbff9fd88d13fa686a32/68747470733a2f2f7471646d2e6769746875622e696f2f696d672f6a7570797465722d332e676966\" data-animated-image=\"\" data-canonical-src=\"https://tqdm.github.io/img/jupyter-3.gif\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eThe \u003ccode\u003enotebook\u003c/code\u003e version supports percentage or pixels for overall width\n(e.g.: \u003ccode\u003encols='100%'\u003c/code\u003e or \u003ccode\u003encols='480px'\u003c/code\u003e).\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eIt is also possible to let \u003ccode\u003etqdm\u003c/code\u003e automatically choose between\nconsole or notebook versions by using the \u003ccode\u003eautonotebook\u003c/code\u003e submodule:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-python notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"from tqdm.autonotebook import tqdm\ntqdm.pandas()\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003efrom\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etqdm\u003c/span\u003e.\u003cspan class=\"pl-s1\"\u003eautonotebook\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eimport\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etqdm\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003etqdm\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003epandas\u003c/span\u003e()\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eNote that this will issue a \u003ccode\u003eTqdmExperimentalWarning\u003c/code\u003e if run in a notebook\nsince it is not meant to be possible to distinguish between \u003ccode\u003ejupyter notebook\u003c/code\u003e\nand \u003ccode\u003ejupyter console\u003c/code\u003e. Use \u003ccode\u003eauto\u003c/code\u003e instead of \u003ccode\u003eautonotebook\u003c/code\u003e to suppress\nthis warning.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eNote that notebooks will display the bar in the cell where it was created.\nThis may be a different cell from the one where it is used.\nIf this is not desired, either\u003c/p\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003edelay the creation of the bar to the cell where it must be displayed, or\u003c/li\u003e\n\u003cli\u003ecreate the bar with \u003ccode\u003edisplay=False\u003c/code\u003e, and in a later cell call\n\u003ccode\u003edisplay(bar.container)\u003c/code\u003e:\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"highlight highlight-source-python notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"from tqdm.notebook import tqdm\npbar = tqdm(..., display=False)\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003efrom\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etqdm\u003c/span\u003e.\u003cspan class=\"pl-s1\"\u003enotebook\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eimport\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etqdm\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003epbar\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-en\"\u003etqdm\u003c/span\u003e(..., \u003cspan class=\"pl-s1\"\u003edisplay\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eFalse\u003c/span\u003e)\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-python notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"# different cell\ndisplay(pbar.container)\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c\"\u003e# different cell\u003c/span\u003e\n\u003cspan class=\"pl-en\"\u003edisplay\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003epbar\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003econtainer\u003c/span\u003e)\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eThe \u003ccode\u003ekeras\u003c/code\u003e callback has a \u003ccode\u003edisplay()\u003c/code\u003e method which can be used likewise:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-python notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"from tqdm.keras import TqdmCallback\ncbk = TqdmCallback(display=False)\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003efrom\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etqdm\u003c/span\u003e.\u003cspan class=\"pl-s1\"\u003ekeras\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eimport\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eTqdmCallback\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003ecbk\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eTqdmCallback\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003edisplay\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eFalse\u003c/span\u003e)\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-python notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"# different cell\ncbk.display()\nmodel.fit(..., verbose=0, callbacks=[cbk])\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c\"\u003e# different cell\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003ecbk\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003edisplay\u003c/span\u003e()\n\u003cspan class=\"pl-s1\"\u003emodel\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003efit\u003c/span\u003e(..., \u003cspan class=\"pl-s1\"\u003everbose\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003ecallbacks\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e[\u003cspan class=\"pl-s1\"\u003ecbk\u003c/span\u003e])\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eAnother possibility is to have a single bar (near the top of the notebook)\nwhich is constantly re-used (using \u003ccode\u003ereset()\u003c/code\u003e rather than \u003ccode\u003eclose()\u003c/code\u003e).\nFor this reason, the notebook version (unlike the CLI version) does not\nautomatically call \u003ccode\u003eclose()\u003c/code\u003e upon \u003ccode\u003eException\u003c/code\u003e.\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-python notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"from tqdm.notebook import tqdm\npbar = tqdm()\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003efrom\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etqdm\u003c/span\u003e.\u003cspan class=\"pl-s1\"\u003enotebook\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eimport\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etqdm\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003epbar\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-en\"\u003etqdm\u003c/span\u003e()\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-python notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"# different cell\niterable = range(100)\npbar.reset(total=len(iterable)) # initialise with new `total`\nfor i in iterable:\n pbar.update()\npbar.refresh() # force print final status but don't `close()`\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c\"\u003e# different cell\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003eiterable\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-en\"\u003erange\u003c/span\u003e(\u003cspan class=\"pl-c1\"\u003e100\u003c/span\u003e)\n\u003cspan class=\"pl-s1\"\u003epbar\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003ereset\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003etotal\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-en\"\u003elen\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eiterable\u003c/span\u003e)) \u003cspan class=\"pl-c\"\u003e# initialise with new `total`\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003ein\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eiterable\u003c/span\u003e:\n \u003cspan class=\"pl-s1\"\u003epbar\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eupdate\u003c/span\u003e()\n\u003cspan class=\"pl-s1\"\u003epbar\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003erefresh\u003c/span\u003e() \u003cspan class=\"pl-c\"\u003e# force print final status but don't `close()`\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003ca name=\"user-content-custom-integration\"\u003e\u003c/a\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch4 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e\u003ca href=\"#table-of-contents\"\u003eCustom Integration\u003c/a\u003e\u003c/h4\u003e\u003ca id=\"user-content-custom-integration\" class=\"anchor\" aria-label=\"Permalink: Custom Integration\" href=\"#custom-integration\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eTo change the default arguments (such as making \u003ccode\u003edynamic_ncols=True\u003c/code\u003e),\nsimply use built-in Python magic:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-python notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"from functools import partial\nfrom tqdm import tqdm as std_tqdm\ntqdm = partial(std_tqdm, dynamic_ncols=True)\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003efrom\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003efunctools\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eimport\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003epartial\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003efrom\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etqdm\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eimport\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etqdm\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eas\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003estd_tqdm\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003etqdm\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-en\"\u003epartial\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003estd_tqdm\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003edynamic_ncols\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eTrue\u003c/span\u003e)\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eFor further customisation,\n\u003ccode\u003etqdm\u003c/code\u003e may be inherited from to create custom callbacks (as with the\n\u003ccode\u003eTqdmUpTo\u003c/code\u003e example \u003ca href=\"#hooks-and-callbacks\"\u003eabove\u003c/a\u003e) or for custom frontends\n(e.g. GUIs such as notebook or plotting packages). In the latter case:\u003c/p\u003e\n\u003col dir=\"auto\"\u003e\n\u003cli\u003e\u003ccode\u003edef __init__()\u003c/code\u003e to call \u003ccode\u003esuper().__init__(..., gui=True)\u003c/code\u003e to disable\nterminal \u003ccode\u003estatus_printer\u003c/code\u003e creation.\u003c/li\u003e\n\u003cli\u003eRedefine: \u003ccode\u003eclose()\u003c/code\u003e, \u003ccode\u003eclear()\u003c/code\u003e, \u003ccode\u003edisplay()\u003c/code\u003e.\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp dir=\"auto\"\u003eConsider overloading \u003ccode\u003edisplay()\u003c/code\u003e to use e.g.\n\u003ccode\u003eself.frontend(**self.format_dict)\u003c/code\u003e instead of \u003ccode\u003eself.sp(repr(self))\u003c/code\u003e.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eSome submodule examples of inheritance:\u003c/p\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tqdm/tqdm/blob/master/tqdm/notebook.py\"\u003etqdm/notebook.py\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tqdm/tqdm/blob/master/tqdm/gui.py\"\u003etqdm/gui.py\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tqdm/tqdm/blob/master/tqdm/tk.py\"\u003etqdm/tk.py\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tqdm/tqdm/blob/master/tqdm/contrib/slack.py\"\u003etqdm/contrib/slack.py\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tqdm/tqdm/blob/master/tqdm/contrib/discord.py\"\u003etqdm/contrib/discord.py\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tqdm/tqdm/blob/master/tqdm/contrib/telegram.py\"\u003etqdm/contrib/telegram.py\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ca name=\"user-content-dynamic-monitor-meter\"\u003e\u003c/a\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch4 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e\u003ca href=\"#table-of-contents\"\u003eDynamic Monitor/Meter\u003c/a\u003e\u003c/h4\u003e\u003ca id=\"user-content-dynamic-monitormeter\" class=\"anchor\" aria-label=\"Permalink: Dynamic Monitor/Meter\" href=\"#dynamic-monitormeter\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eYou can use a \u003ccode\u003etqdm\u003c/code\u003e as a meter which is not monotonically increasing.\nThis could be because \u003ccode\u003en\u003c/code\u003e decreases (e.g. a CPU usage monitor) or \u003ccode\u003etotal\u003c/code\u003e\nchanges.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eOne example would be recursively searching for files. The \u003ccode\u003etotal\u003c/code\u003e is the\nnumber of objects found so far, while \u003ccode\u003en\u003c/code\u003e is the number of those objects which\nare files (rather than folders):\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-python notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"from tqdm import tqdm\nimport os.path\n\ndef find_files_recursively(path, show_progress=True):\n files = []\n # total=1 assumes `path` is a file\n t = tqdm(total=1, unit=\u0026quot;file\u0026quot;, disable=not show_progress)\n if not os.path.exists(path):\n raise IOError(\u0026quot;Cannot find:\u0026quot; + path)\n\n def append_found_file(f):\n files.append(f)\n t.update()\n\n def list_found_dir(path):\n \u0026quot;\u0026quot;\u0026quot;returns os.listdir(path) assuming os.path.isdir(path)\u0026quot;\u0026quot;\u0026quot;\n listing = os.listdir(path)\n # subtract 1 since a \u0026quot;file\u0026quot; we found was actually this directory\n t.total += len(listing) - 1\n # fancy way to give info without forcing a refresh\n t.set_postfix(dir=path[-10:], refresh=False)\n t.update(0) # may trigger a refresh\n return listing\n\n def recursively_search(path):\n if os.path.isdir(path):\n for f in list_found_dir(path):\n recursively_search(os.path.join(path, f))\n else:\n append_found_file(path)\n\n recursively_search(path)\n t.set_postfix(dir=path)\n t.close()\n return files\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003efrom\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etqdm\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eimport\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etqdm\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eimport\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eos\u003c/span\u003e.\u003cspan class=\"pl-s1\"\u003epath\u003c/span\u003e\n\n\u003cspan class=\"pl-k\"\u003edef\u003c/span\u003e \u003cspan class=\"pl-en\"\u003efind_files_recursively\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003epath\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003eshow_progress\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eTrue\u003c/span\u003e):\n \u003cspan class=\"pl-s1\"\u003efiles\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e []\n \u003cspan class=\"pl-c\"\u003e# total=1 assumes `path` is a file\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003et\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-en\"\u003etqdm\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003etotal\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003eunit\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"file\"\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003edisable\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003enot\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eshow_progress\u003c/span\u003e)\n \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003enot\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eos\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003epath\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eexists\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003epath\u003c/span\u003e):\n \u003cspan class=\"pl-k\"\u003eraise\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eIOError\u003c/span\u003e(\u003cspan class=\"pl-s\"\u003e\"Cannot find:\"\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e+\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003epath\u003c/span\u003e)\n\n \u003cspan class=\"pl-k\"\u003edef\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eappend_found_file\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003ef\u003c/span\u003e):\n \u003cspan class=\"pl-s1\"\u003efiles\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eappend\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003ef\u003c/span\u003e)\n \u003cspan class=\"pl-s1\"\u003et\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eupdate\u003c/span\u003e()\n\n \u003cspan class=\"pl-k\"\u003edef\u003c/span\u003e \u003cspan class=\"pl-en\"\u003elist_found_dir\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003epath\u003c/span\u003e):\n \u003cspan class=\"pl-s\"\u003e\"\"\"returns os.listdir(path) assuming os.path.isdir(path)\"\"\"\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003elisting\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eos\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003elistdir\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003epath\u003c/span\u003e)\n \u003cspan class=\"pl-c\"\u003e# subtract 1 since a \"file\" we found was actually this directory\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003et\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003etotal\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e+=\u003c/span\u003e \u003cspan class=\"pl-en\"\u003elen\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003elisting\u003c/span\u003e) \u003cspan class=\"pl-c1\"\u003e-\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\n \u003cspan class=\"pl-c\"\u003e# fancy way to give info without forcing a refresh\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003et\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eset_postfix\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003edir\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003epath\u003c/span\u003e[\u003cspan class=\"pl-c1\"\u003e-\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e10\u003c/span\u003e:], \u003cspan class=\"pl-s1\"\u003erefresh\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eFalse\u003c/span\u003e)\n \u003cspan class=\"pl-s1\"\u003et\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eupdate\u003c/span\u003e(\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e) \u003cspan class=\"pl-c\"\u003e# may trigger a refresh\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003elisting\u003c/span\u003e\n\n \u003cspan class=\"pl-k\"\u003edef\u003c/span\u003e \u003cspan class=\"pl-en\"\u003erecursively_search\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003epath\u003c/span\u003e):\n \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eos\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003epath\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eisdir\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003epath\u003c/span\u003e):\n \u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ef\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003ein\u003c/span\u003e \u003cspan class=\"pl-en\"\u003elist_found_dir\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003epath\u003c/span\u003e):\n \u003cspan class=\"pl-en\"\u003erecursively_search\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eos\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003epath\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003ejoin\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003epath\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003ef\u003c/span\u003e))\n \u003cspan class=\"pl-k\"\u003eelse\u003c/span\u003e:\n \u003cspan class=\"pl-en\"\u003eappend_found_file\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003epath\u003c/span\u003e)\n\n \u003cspan class=\"pl-en\"\u003erecursively_search\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003epath\u003c/span\u003e)\n \u003cspan class=\"pl-s1\"\u003et\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eset_postfix\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003edir\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003epath\u003c/span\u003e)\n \u003cspan class=\"pl-s1\"\u003et\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eclose\u003c/span\u003e()\n \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003efiles\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eUsing \u003ccode\u003eupdate(0)\u003c/code\u003e is a handy way to let \u003ccode\u003etqdm\u003c/code\u003e decide when to trigger a\ndisplay refresh to avoid console spamming.\u003c/p\u003e\n\u003ca name=\"user-content-writing-messages\"\u003e\u003c/a\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch4 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e\u003ca href=\"#table-of-contents\"\u003eWriting messages\u003c/a\u003e\u003c/h4\u003e\u003ca id=\"user-content-writing-messages\" class=\"anchor\" aria-label=\"Permalink: Writing messages\" href=\"#writing-messages\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eThis is a work in progress (see\n\u003ca href=\"https://github.com/tqdm/tqdm/issues/737\" data-hovercard-type=\"issue\" data-hovercard-url=\"/tqdm/tqdm/issues/737/hovercard\"\u003e#737\u003c/a\u003e).\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eSince \u003ccode\u003etqdm\u003c/code\u003e uses a simple printing mechanism to display progress bars,\nyou should not write any message in the terminal using \u003ccode\u003eprint()\u003c/code\u003e while\na progressbar is open.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eTo write messages in the terminal without any collision with \u003ccode\u003etqdm\u003c/code\u003e bar\ndisplay, a \u003ccode\u003e.write()\u003c/code\u003e method is provided:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-python notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"from tqdm.auto import tqdm, trange\nfrom time import sleep\n\nbar = trange(10)\nfor i in bar:\n # Print using tqdm class method .write()\n sleep(0.1)\n if not (i % 3):\n tqdm.write(\u0026quot;Done task %i\u0026quot; % i)\n # Can also use bar.write()\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003efrom\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etqdm\u003c/span\u003e.\u003cspan class=\"pl-s1\"\u003eauto\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eimport\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etqdm\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003etrange\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003efrom\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etime\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eimport\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003esleep\u003c/span\u003e\n\n\u003cspan class=\"pl-s1\"\u003ebar\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-en\"\u003etrange\u003c/span\u003e(\u003cspan class=\"pl-c1\"\u003e10\u003c/span\u003e)\n\u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003ein\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ebar\u003c/span\u003e:\n \u003cspan class=\"pl-c\"\u003e# Print using tqdm class method .write()\u003c/span\u003e\n \u003cspan class=\"pl-en\"\u003esleep\u003c/span\u003e(\u003cspan class=\"pl-c1\"\u003e0.1\u003c/span\u003e)\n \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003enot\u003c/span\u003e (\u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e%\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e):\n \u003cspan class=\"pl-s1\"\u003etqdm\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003ewrite\u003c/span\u003e(\u003cspan class=\"pl-s\"\u003e\"Done task %i\"\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e%\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e)\n \u003cspan class=\"pl-c\"\u003e# Can also use bar.write()\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eBy default, this will print to standard output \u003ccode\u003esys.stdout\u003c/code\u003e. but you can\nspecify any file-like object using the \u003ccode\u003efile\u003c/code\u003e argument. For example, this\ncan be used to redirect the messages writing to a log file or class.\u003c/p\u003e\n\u003ca name=\"user-content-redirecting-writing\"\u003e\u003c/a\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch4 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e\u003ca href=\"#table-of-contents\"\u003eRedirecting writing\u003c/a\u003e\u003c/h4\u003e\u003ca id=\"user-content-redirecting-writing\" class=\"anchor\" aria-label=\"Permalink: Redirecting writing\" href=\"#redirecting-writing\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eIf using a library that can print messages to the console, editing the library\nby replacing \u003ccode\u003eprint()\u003c/code\u003e with \u003ccode\u003etqdm.write()\u003c/code\u003e may not be desirable.\nIn that case, redirecting \u003ccode\u003esys.stdout\u003c/code\u003e to \u003ccode\u003etqdm.write()\u003c/code\u003e is an option.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eTo redirect \u003ccode\u003esys.stdout\u003c/code\u003e, create a file-like class that will write\nany input string to \u003ccode\u003etqdm.write()\u003c/code\u003e, and supply the arguments\n\u003ccode\u003efile=sys.stdout, dynamic_ncols=True\u003c/code\u003e.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eA reusable canonical example is given below:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-python notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"from time import sleep\nimport contextlib\nimport sys\nfrom tqdm import tqdm\nfrom tqdm.contrib import DummyTqdmFile\n\n\n@contextlib.contextmanager\ndef std_out_err_redirect_tqdm():\n orig_out_err = sys.stdout, sys.stderr\n try:\n sys.stdout, sys.stderr = map(DummyTqdmFile, orig_out_err)\n yield orig_out_err[0]\n # Relay exceptions\n except Exception as exc:\n raise exc\n # Always restore sys.stdout/err if necessary\n finally:\n sys.stdout, sys.stderr = orig_out_err\n\ndef some_fun(i):\n print(\u0026quot;Fee, fi, fo,\u0026quot;.split()[i])\n\n# Redirect stdout to tqdm.write() (don't forget the `as save_stdout`)\nwith std_out_err_redirect_tqdm() as orig_stdout:\n # tqdm needs the original stdout\n # and dynamic_ncols=True to autodetect console width\n for i in tqdm(range(3), file=orig_stdout, dynamic_ncols=True):\n sleep(.5)\n some_fun(i)\n\n# After the `with`, printing is restored\nprint(\u0026quot;Done!\u0026quot;)\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003efrom\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etime\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eimport\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003esleep\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eimport\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003econtextlib\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eimport\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003esys\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003efrom\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etqdm\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eimport\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etqdm\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003efrom\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etqdm\u003c/span\u003e.\u003cspan class=\"pl-s1\"\u003econtrib\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eimport\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eDummyTqdmFile\u003c/span\u003e\n\n\n\u003cspan class=\"pl-en\"\u003e@\u003cspan class=\"pl-s1\"\u003econtextlib\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003econtextmanager\u003c/span\u003e\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003edef\u003c/span\u003e \u003cspan class=\"pl-en\"\u003estd_out_err_redirect_tqdm\u003c/span\u003e():\n \u003cspan class=\"pl-s1\"\u003eorig_out_err\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003esys\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003estdout\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003esys\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003estderr\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003etry\u003c/span\u003e:\n \u003cspan class=\"pl-s1\"\u003esys\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003estdout\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003esys\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003estderr\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-en\"\u003emap\u003c/span\u003e(\u003cspan class=\"pl-v\"\u003eDummyTqdmFile\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003eorig_out_err\u003c/span\u003e)\n \u003cspan class=\"pl-k\"\u003eyield\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eorig_out_err\u003c/span\u003e[\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e]\n \u003cspan class=\"pl-c\"\u003e# Relay exceptions\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003eexcept\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eException\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eas\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eexc\u003c/span\u003e:\n \u003cspan class=\"pl-k\"\u003eraise\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eexc\u003c/span\u003e\n \u003cspan class=\"pl-c\"\u003e# Always restore sys.stdout/err if necessary\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003efinally\u003c/span\u003e:\n \u003cspan class=\"pl-s1\"\u003esys\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003estdout\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003esys\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003estderr\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eorig_out_err\u003c/span\u003e\n\n\u003cspan class=\"pl-k\"\u003edef\u003c/span\u003e \u003cspan class=\"pl-en\"\u003esome_fun\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e):\n \u003cspan class=\"pl-en\"\u003eprint\u003c/span\u003e(\u003cspan class=\"pl-s\"\u003e\"Fee, fi, fo,\"\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003esplit\u003c/span\u003e()[\u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e])\n\n\u003cspan class=\"pl-c\"\u003e# Redirect stdout to tqdm.write() (don't forget the `as save_stdout`)\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003ewith\u003c/span\u003e \u003cspan class=\"pl-en\"\u003estd_out_err_redirect_tqdm\u003c/span\u003e() \u003cspan class=\"pl-k\"\u003eas\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eorig_stdout\u003c/span\u003e:\n \u003cspan class=\"pl-c\"\u003e# tqdm needs the original stdout\u003c/span\u003e\n \u003cspan class=\"pl-c\"\u003e# and dynamic_ncols=True to autodetect console width\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003ein\u003c/span\u003e \u003cspan class=\"pl-en\"\u003etqdm\u003c/span\u003e(\u003cspan class=\"pl-en\"\u003erange\u003c/span\u003e(\u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e), \u003cspan class=\"pl-s1\"\u003efile\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eorig_stdout\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003edynamic_ncols\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eTrue\u003c/span\u003e):\n \u003cspan class=\"pl-en\"\u003esleep\u003c/span\u003e(\u003cspan class=\"pl-c1\"\u003e.5\u003c/span\u003e)\n \u003cspan class=\"pl-en\"\u003esome_fun\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e)\n\n\u003cspan class=\"pl-c\"\u003e# After the `with`, printing is restored\u003c/span\u003e\n\u003cspan class=\"pl-en\"\u003eprint\u003c/span\u003e(\u003cspan class=\"pl-s\"\u003e\"Done!\"\u003c/span\u003e)\u003c/pre\u003e\u003c/div\u003e\n\u003ca name=\"user-content-redirecting-logging\"\u003e\u003c/a\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch4 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e\u003ca href=\"#table-of-contents\"\u003eRedirecting \u003ccode\u003elogging\u003c/code\u003e\u003c/a\u003e\u003c/h4\u003e\u003ca id=\"user-content-redirecting-logging\" class=\"anchor\" aria-label=\"Permalink: Redirecting logging\" href=\"#redirecting-logging\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eSimilar to \u003ccode\u003esys.stdout\u003c/code\u003e/\u003ccode\u003esys.stderr\u003c/code\u003e as detailed above, console \u003ccode\u003elogging\u003c/code\u003e\nmay also be redirected to \u003ccode\u003etqdm.write()\u003c/code\u003e.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eWarning: if also redirecting \u003ccode\u003esys.stdout\u003c/code\u003e/\u003ccode\u003esys.stderr\u003c/code\u003e, make sure to\nredirect \u003ccode\u003elogging\u003c/code\u003e first if needed.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eHelper methods are available in \u003ccode\u003etqdm.contrib.logging\u003c/code\u003e. For example:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-python notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"import logging\nfrom tqdm import trange\nfrom tqdm.contrib.logging import logging_redirect_tqdm\n\nLOG = logging.getLogger(__name__)\n\nif __name__ == '__main__':\n logging.basicConfig(level=logging.INFO)\n with logging_redirect_tqdm():\n for i in trange(9):\n if i == 4:\n LOG.info(\u0026quot;console logging redirected to `tqdm.write()`\u0026quot;)\n # logging restored\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003eimport\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003elogging\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003efrom\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etqdm\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eimport\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etrange\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003efrom\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etqdm\u003c/span\u003e.\u003cspan class=\"pl-s1\"\u003econtrib\u003c/span\u003e.\u003cspan class=\"pl-s1\"\u003elogging\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eimport\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003elogging_redirect_tqdm\u003c/span\u003e\n\n\u003cspan class=\"pl-c1\"\u003eLOG\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003elogging\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003egetLogger\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003e__name__\u003c/span\u003e)\n\n\u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003e__name__\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e==\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e'__main__'\u003c/span\u003e:\n \u003cspan class=\"pl-s1\"\u003elogging\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003ebasicConfig\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003elevel\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003elogging\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eINFO\u003c/span\u003e)\n \u003cspan class=\"pl-k\"\u003ewith\u003c/span\u003e \u003cspan class=\"pl-en\"\u003elogging_redirect_tqdm\u003c/span\u003e():\n \u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003ein\u003c/span\u003e \u003cspan class=\"pl-en\"\u003etrange\u003c/span\u003e(\u003cspan class=\"pl-c1\"\u003e9\u003c/span\u003e):\n \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e==\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e4\u003c/span\u003e:\n \u003cspan class=\"pl-c1\"\u003eLOG\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003einfo\u003c/span\u003e(\u003cspan class=\"pl-s\"\u003e\"console logging redirected to `tqdm.write()`\"\u003c/span\u003e)\n \u003cspan class=\"pl-c\"\u003e# logging restored\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003ca name=\"user-content-monitoring-thread-intervals-and-miniters\"\u003e\u003c/a\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch4 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e\u003ca href=\"#table-of-contents\"\u003eMonitoring thread, intervals and miniters\u003c/a\u003e\u003c/h4\u003e\u003ca id=\"user-content-monitoring-thread-intervals-and-miniters\" class=\"anchor\" aria-label=\"Permalink: Monitoring thread, intervals and miniters\" href=\"#monitoring-thread-intervals-and-miniters\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e\u003ccode\u003etqdm\u003c/code\u003e implements a few tricks to increase efficiency and reduce overhead.\u003c/p\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eAvoid unnecessary frequent bar refreshing: \u003ccode\u003emininterval\u003c/code\u003e defines how long\nto wait between each refresh. \u003ccode\u003etqdm\u003c/code\u003e always gets updated in the background,\nbut it will display only every \u003ccode\u003emininterval\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eReduce number of calls to check system clock/time.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003emininterval\u003c/code\u003e is more intuitive to configure than \u003ccode\u003eminiters\u003c/code\u003e.\nA clever adjustment system \u003ccode\u003edynamic_miniters\u003c/code\u003e will automatically adjust\n\u003ccode\u003eminiters\u003c/code\u003e to the amount of iterations that fit into time \u003ccode\u003emininterval\u003c/code\u003e.\nEssentially, \u003ccode\u003etqdm\u003c/code\u003e will check if it's time to print without actually\nchecking time. This behaviour can be still be bypassed by manually setting\n\u003ccode\u003eminiters\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp dir=\"auto\"\u003eHowever, consider a case with a combination of fast and slow iterations.\nAfter a few fast iterations, \u003ccode\u003edynamic_miniters\u003c/code\u003e will set \u003ccode\u003eminiters\u003c/code\u003e to a\nlarge number. When iteration rate subsequently slows, \u003ccode\u003eminiters\u003c/code\u003e will\nremain large and thus reduce display update frequency. To address this:\u003c/p\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ccode\u003emaxinterval\u003c/code\u003e defines the maximum time between display refreshes.\nA concurrent monitoring thread checks for overdue updates and forces one\nwhere necessary.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp dir=\"auto\"\u003eThe monitoring thread should not have a noticeable overhead, and guarantees\nupdates at least every 10 seconds by default.\nThis value can be directly changed by setting the \u003ccode\u003emonitor_interval\u003c/code\u003e of\nany \u003ccode\u003etqdm\u003c/code\u003e instance (i.e. \u003ccode\u003et = tqdm.tqdm(...); t.monitor_interval = 2\u003c/code\u003e).\nThe monitor thread may be disabled application-wide by setting\n\u003ccode\u003etqdm.tqdm.monitor_interval = 0\u003c/code\u003e before instantiation of any \u003ccode\u003etqdm\u003c/code\u003e bar.\u003c/p\u003e\n\u003ca name=\"user-content-merch\"\u003e\u003c/a\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e\u003ca href=\"#table-of-contents\"\u003eMerch\u003c/a\u003e\u003c/h3\u003e\u003ca id=\"user-content-merch\" class=\"anchor\" aria-label=\"Permalink: Merch\" href=\"#merch\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eYou can buy \u003ca href=\"https://tqdm.github.io/merch\" rel=\"nofollow\"\u003etqdm branded merch\u003c/a\u003e now!\u003c/p\u003e\n\u003ca name=\"user-content-contributions\"\u003e\u003c/a\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e\u003ca href=\"#table-of-contents\"\u003eContributions\u003c/a\u003e\u003c/h3\u003e\u003ca id=\"user-content-contributions\" class=\"anchor\" aria-label=\"Permalink: Contributions\" href=\"#contributions\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e\u003ca href=\"https://github.com/tqdm/tqdm/graphs/commit-activity\"\u003e\u003cimg alt=\"GitHub-Commits\" src=\"https://camo.githubusercontent.com/074830ea80f6a475d636c6d370ea48ad0abd0bbd45fc65c8214bd089dbe1f18c/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f636f6d6d69742d61637469766974792f792f7471646d2f7471646d2e7376673f6c6f676f3d676974266c6f676f436f6c6f723d7768697465\" data-canonical-src=\"https://img.shields.io/github/commit-activity/y/tqdm/tqdm.svg?logo=git\u0026amp;logoColor=white\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e \u003ca href=\"https://github.com/tqdm/tqdm/issues?q=\"\u003e\u003cimg alt=\"GitHub-Issues\" src=\"https://camo.githubusercontent.com/70e2e8e5918a84706aef777108b1b2f746905dbde5632e31dd6a6995ea606b92/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6973737565732d636c6f7365642f7471646d2f7471646d2e7376673f6c6f676f3d676974687562266c6f676f436f6c6f723d7768697465\" data-canonical-src=\"https://img.shields.io/github/issues-closed/tqdm/tqdm.svg?logo=github\u0026amp;logoColor=white\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e \u003ca href=\"https://github.com/tqdm/tqdm/pulls\"\u003e\u003cimg alt=\"GitHub-PRs\" src=\"https://camo.githubusercontent.com/7a64d61cc28a7a27cb4b7294d956d17c76f77b61574c90507bee59bfdc9fc4f4/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6973737565732d70722d636c6f7365642f7471646d2f7471646d2e7376673f6c6f676f3d676974687562266c6f676f436f6c6f723d7768697465\" data-canonical-src=\"https://img.shields.io/github/issues-pr-closed/tqdm/tqdm.svg?logo=github\u0026amp;logoColor=white\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e \u003ca href=\"https://www.openhub.net/p/tqdm?ref=Thin+badge\" rel=\"nofollow\"\u003e\u003cimg alt=\"OpenHub-Status\" src=\"https://camo.githubusercontent.com/ac14f272ab53a5192e3561e8a01bced574602f0e0bbb0fd91686bb712835139c/68747470733a2f2f7777772e6f70656e6875622e6e65742f702f7471646d2f776964676574732f70726f6a6563745f7468696e5f62616467653f666f726d61743d676966\" data-canonical-src=\"https://www.openhub.net/p/tqdm/widgets/project_thin_badge?format=gif\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e \u003ca href=\"https://github.com/tqdm/tqdm/graphs/contributors\"\u003e\u003cimg alt=\"GitHub-Contributions\" src=\"https://camo.githubusercontent.com/b45c9b56747c8ce317a820b6519e39c1dd4797d4a2fc7dd5f3106c51e43aa45e/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f636f6e7472696275746f72732f7471646d2f7471646d2e7376673f6c6f676f3d676974687562266c6f676f436f6c6f723d7768697465\" data-canonical-src=\"https://img.shields.io/github/contributors/tqdm/tqdm.svg?logo=github\u0026amp;logoColor=white\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e \u003ca href=\"https://bestpractices.coreinfrastructure.org/projects/3264\" rel=\"nofollow\"\u003e\u003cimg alt=\"CII Best Practices\" src=\"https://camo.githubusercontent.com/5c44fd126aa69c23a08d5b308523d220337a18c058fc862e2db70a6ab2af0870/68747470733a2f2f626573747072616374696365732e636f7265696e6672617374727563747572652e6f72672f70726f6a656374732f333236342f6261646765\" data-canonical-src=\"https://bestpractices.coreinfrastructure.org/projects/3264/badge\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eAll source code is hosted on \u003ca href=\"https://github.com/tqdm/tqdm\"\u003eGitHub\u003c/a\u003e.\nContributions are welcome.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eSee the\n\u003ca href=\"https://github.com/tqdm/tqdm/blob/master/CONTRIBUTING.md\"\u003eCONTRIBUTING\u003c/a\u003e\nfile for more information.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eDevelopers who have made significant contributions, ranked by \u003cem\u003eSLoC\u003c/em\u003e\n(surviving lines of code,\n\u003ca href=\"https://github.com/casperdcl/git-fame\"\u003egit fame\u003c/a\u003e \u003ccode\u003e-wMC --excl '\\.(png|gif|jpg)$'\u003c/code\u003e),\nare:\u003c/p\u003e\n\u003cmarkdown-accessiblity-table\u003e\u003ctable\u003e\n\n\n\n\n\n\n\u003cthead valign=\"bottom\"\u003e\n\u003ctr\u003e\u003cth\u003eName\u003c/th\u003e\n\u003cth\u003eID\u003c/th\u003e\n\u003cth\u003eSLoC\u003c/th\u003e\n\u003cth\u003eNotes\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody valign=\"top\"\u003e\n\u003ctr\u003e\u003ctd\u003eCasper da Costa-Luis\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/casperdcl\"\u003ecasperdcl\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003e~80%\u003c/td\u003e\n\u003ctd\u003eprimary maintainer \u003ca href=\"https://cdcl.ml/sponsor\" rel=\"nofollow\"\u003e\u003cimg alt=\"Gift-Casper\" src=\"https://camo.githubusercontent.com/30931f292c189e6bddbb3ef3dfaed2b5083d9a9b469f09f8fe2ec0e7cb92209a/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f64796e616d69632f6a736f6e2e7376673f636f6c6f723d666636396234266c6162656c3d67696674732532307265636569766564267072656669783d2543322541332671756572793d2532342e2e73756d2675726c3d68747470732533412532462532466361737065727363692e756b2e746f25324667696674732e6a736f6e\" data-canonical-src=\"https://img.shields.io/badge/dynamic/json.svg?color=ff69b4\u0026amp;label=gifts%20received\u0026amp;prefix=%C2%A3\u0026amp;query=%24..sum\u0026amp;url=https%3A%2F%2Fcaspersci.uk.to%2Fgifts.json\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003eStephen Larroque\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/lrq3000\"\u003elrq3000\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003e~9%\u003c/td\u003e\n\u003ctd\u003eteam member\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003eMartin Zugnoni\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/martinzugnoni\"\u003emartinzugnoni\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003e~3%\u003c/td\u003e\n\u003ctd\u003e \u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003eDaniel Ecer\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/de-code\"\u003ede-code\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003e~2%\u003c/td\u003e\n\u003ctd\u003e \u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003eRichard Sheridan\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/richardsheridan\"\u003erichardsheridan\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003e~1%\u003c/td\u003e\n\u003ctd\u003e \u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003eGuangshuo Chen\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/chengs\"\u003echengs\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003e~1%\u003c/td\u003e\n\u003ctd\u003e \u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003eHelio Machado\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/0x2b3bfa0\"\u003e0x2b3bfa0\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003e~1%\u003c/td\u003e\n\u003ctd\u003e \u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003eKyle Altendorf\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/altendky\"\u003ealtendky\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003e\u0026lt;1%\u003c/td\u003e\n\u003ctd\u003e \u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003eNoam Yorav-Raphael\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/noamraph\"\u003enoamraph\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003e\u0026lt;1%\u003c/td\u003e\n\u003ctd\u003eoriginal author\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003eMatthew Stevens\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/mjstevens777\"\u003emjstevens777\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003e\u0026lt;1%\u003c/td\u003e\n\u003ctd\u003e \u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003eHadrien Mary\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/hadim\"\u003ehadim\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003e\u0026lt;1%\u003c/td\u003e\n\u003ctd\u003eteam member\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003eMikhail Korobov\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/kmike\"\u003ekmike\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003e\u0026lt;1%\u003c/td\u003e\n\u003ctd\u003eteam member\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/markdown-accessiblity-table\u003e\n\u003ca name=\"user-content-ports-to-other-languages\"\u003e\u003c/a\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch4 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e\u003ca href=\"#table-of-contents\"\u003ePorts to Other Languages\u003c/a\u003e\u003c/h4\u003e\u003ca id=\"user-content-ports-to-other-languages\" class=\"anchor\" aria-label=\"Permalink: Ports to Other Languages\" href=\"#ports-to-other-languages\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eA list is available on\n\u003ca href=\"https://github.com/tqdm/tqdm/wiki/tqdm-ports\"\u003ethis wiki page\u003c/a\u003e.\u003c/p\u003e\n\u003ca name=\"user-content-licence\"\u003e\u003c/a\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e\u003ca href=\"#table-of-contents\"\u003eLICENCE\u003c/a\u003e\u003c/h3\u003e\u003ca id=\"user-content-licence\" class=\"anchor\" aria-label=\"Permalink: LICENCE\" href=\"#licence\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eOpen Source (OSI approved): \u003ca href=\"https://raw.githubusercontent.com/tqdm/tqdm/master/LICENCE\" rel=\"nofollow\"\u003e\u003cimg alt=\"LICENCE\" src=\"https://camo.githubusercontent.com/d5daff2dea068d33eefe608aff6c890e506dfdf1bb466adce907e76a192cd87a/68747470733a2f2f696d672e736869656c64732e696f2f707970692f6c2f7471646d2e737667\" data-canonical-src=\"https://img.shields.io/pypi/l/tqdm.svg\" style=\"max-width: 100%;\"\u003e\n\u003c/a\u003e\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eCitation information: \u003ca href=\"https://doi.org/10.5281/zenodo.595120\" rel=\"nofollow\"\u003e\u003cimg alt=\"DOI\" src=\"https://camo.githubusercontent.com/521368c6aab8cf69159a45d74b79a68e5a587a78423d0c58865524cd07fe1507/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f444f492d31302e353238312f7a656e6f646f2e3539353132302d626c75652e737667\" data-canonical-src=\"https://img.shields.io/badge/DOI-10.5281/zenodo.595120-blue.svg\" style=\"max-width: 100%;\"\u003e\n\u003c/a\u003e\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003ca href=\"https://cgi.cdcl.ml/hits?q=tqdm\u0026amp;a=plot\u0026amp;r=https://github.com/tqdm/tqdm\u0026amp;l=https://tqdm.github.io/img/favicon.png\u0026amp;f=https://tqdm.github.io/img/logo.gif\u0026amp;style=social\" rel=\"nofollow\"\u003e\u003cimg alt=\"README-Hits\" src=\"https://camo.githubusercontent.com/05dba70319f22e964483c4ab94f37757d0d95698320a34f53286620788b7ae54/68747470733a2f2f6367692e6364636c2e6d6c2f686974733f713d7471646d267374796c653d736f6369616c26723d68747470733a2f2f6769746875622e636f6d2f7471646d2f7471646d266c3d68747470733a2f2f7471646d2e6769746875622e696f2f696d672f66617669636f6e2e706e6726663d68747470733a2f2f7471646d2e6769746875622e696f2f696d672f6c6f676f2e676966\" data-canonical-src=\"https://cgi.cdcl.ml/hits?q=tqdm\u0026amp;style=social\u0026amp;r=https://github.com/tqdm/tqdm\u0026amp;l=https://tqdm.github.io/img/favicon.png\u0026amp;f=https://tqdm.github.io/img/logo.gif\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e (Since 19 May 2016)\u003c/p\u003e\n\n\u003c/article\u003e","loaded":true,"timedOut":false,"errorMessage":null,"headerInfo":{"toc":[{"level":2,"text":"tqdm","anchor":"tqdm","htmlText":"tqdm"},{"level":3,"text":"Installation","anchor":"installation","htmlText":"Installation"},{"level":4,"text":"Latest PyPI stable release","anchor":"latest-pypi-stable-release","htmlText":"Latest PyPI stable release"},{"level":4,"text":"Latest development release on GitHub","anchor":"latest-development-release-on-github","htmlText":"Latest development release on GitHub"},{"level":4,"text":"Latest Conda release","anchor":"latest-conda-release","htmlText":"Latest Conda release"},{"level":4,"text":"Latest Snapcraft release","anchor":"latest-snapcraft-release","htmlText":"Latest Snapcraft release"},{"level":4,"text":"Latest Docker release","anchor":"latest-docker-release","htmlText":"Latest Docker release"},{"level":4,"text":"Other","anchor":"other","htmlText":"Other"},{"level":3,"text":"Changelog","anchor":"changelog","htmlText":"Changelog"},{"level":3,"text":"Usage","anchor":"usage","htmlText":"Usage"},{"level":4,"text":"Iterable-based","anchor":"iterable-based","htmlText":"Iterable-based"},{"level":4,"text":"Manual","anchor":"manual","htmlText":"Manual"},{"level":4,"text":"Module","anchor":"module","htmlText":"Module"},{"level":3,"text":"FAQ and Known Issues","anchor":"faq-and-known-issues","htmlText":"FAQ and Known Issues"},{"level":3,"text":"Documentation","anchor":"documentation","htmlText":"Documentation"},{"level":4,"text":"Parameters","anchor":"parameters","htmlText":"Parameters"},{"level":4,"text":"Extra CLI Options","anchor":"extra-cli-options","htmlText":"Extra CLI Options"},{"level":4,"text":"Returns","anchor":"returns","htmlText":"Returns"},{"level":4,"text":"Convenience Functions","anchor":"convenience-functions","htmlText":"Convenience Functions"},{"level":4,"text":"Submodules","anchor":"submodules","htmlText":"Submodules"},{"level":5,"text":"contrib","anchor":"contrib","htmlText":"contrib"},{"level":3,"text":"Examples and Advanced Usage","anchor":"examples-and-advanced-usage","htmlText":"Examples and Advanced Usage"},{"level":4,"text":"Description and additional stats","anchor":"description-and-additional-stats","htmlText":"Description and additional stats"},{"level":4,"text":"Nested progress bars","anchor":"nested-progress-bars","htmlText":"Nested progress bars"},{"level":4,"text":"Hooks and callbacks","anchor":"hooks-and-callbacks","htmlText":"Hooks and callbacks"},{"level":4,"text":"asyncio","anchor":"asyncio","htmlText":"asyncio"},{"level":4,"text":"Pandas Integration","anchor":"pandas-integration","htmlText":"Pandas Integration"},{"level":4,"text":"Keras Integration","anchor":"keras-integration","htmlText":"Keras Integration"},{"level":4,"text":"Dask Integration","anchor":"dask-integration","htmlText":"Dask Integration"},{"level":4,"text":"IPython/Jupyter Integration","anchor":"ipythonjupyter-integration","htmlText":"IPython/Jupyter Integration"},{"level":4,"text":"Custom Integration","anchor":"custom-integration","htmlText":"Custom Integration"},{"level":4,"text":"Dynamic Monitor/Meter","anchor":"dynamic-monitormeter","htmlText":"Dynamic Monitor/Meter"},{"level":4,"text":"Writing messages","anchor":"writing-messages","htmlText":"Writing messages"},{"level":4,"text":"Redirecting writing","anchor":"redirecting-writing","htmlText":"Redirecting writing"},{"level":4,"text":"Redirecting logging","anchor":"redirecting-logging","htmlText":"Redirecting logging"},{"level":4,"text":"Monitoring thread, intervals and miniters","anchor":"monitoring-thread-intervals-and-miniters","htmlText":"Monitoring thread, intervals and miniters"},{"level":3,"text":"Merch","anchor":"merch","htmlText":"Merch"},{"level":3,"text":"Contributions","anchor":"contributions","htmlText":"Contributions"},{"level":4,"text":"Ports to Other Languages","anchor":"ports-to-other-languages","htmlText":"Ports to Other Languages"},{"level":3,"text":"LICENCE","anchor":"licence","htmlText":"LICENCE"}],"siteNavLoginPath":"/login?return_to=https%3A%2F%2Fgithub.com%2Ftqdm%2Ftqdm"}},{"displayName":"CODE_OF_CONDUCT.md","repoName":"tqdm","refName":"master","path":"CODE_OF_CONDUCT.md","preferredFileType":"code_of_conduct","tabName":"Code of conduct","richText":null,"loaded":false,"timedOut":false,"errorMessage":null,"headerInfo":{"toc":null,"siteNavLoginPath":"/login?return_to=https%3A%2F%2Fgithub.com%2Ftqdm%2Ftqdm"}},{"displayName":"LICENCE","repoName":"tqdm","refName":"master","path":"LICENCE","preferredFileType":"license","tabName":"License","richText":null,"loaded":false,"timedOut":false,"errorMessage":null,"headerInfo":{"toc":null,"siteNavLoginPath":"/login?return_to=https%3A%2F%2Fgithub.com%2Ftqdm%2Ftqdm"}},{"displayName":"SECURITY.md","repoName":"tqdm","refName":"master","path":".github/SECURITY.md","preferredFileType":"security","tabName":"Security","richText":null,"loaded":false,"timedOut":false,"errorMessage":null,"headerInfo":{"toc":null,"siteNavLoginPath":"/login?return_to=https%3A%2F%2Fgithub.com%2Ftqdm%2Ftqdm"}}],"overviewFilesProcessingTime":0}},"appPayload":{"helpUrl":"https://docs.github.com","findFileWorkerPath":"/assets-cdn/worker/find-file-worker-7d7eb7c71814.js","findInFileWorkerPath":"/assets-cdn/worker/find-in-file-worker-96e76d5fdb2c.js","githubDevUrl":null,"enabled_features":{"copilot_workspace":null,"code_nav_ui_events":false,"overview_shared_code_dropdown_button":false,"react_blob_overlay":false,"accessible_code_button":true,"github_models_repo_integration":false}}}}</script> <div data-target="react-partial.reactRoot"><style data-styled="true" data-styled-version="5.3.11">.iVEunk{margin-top:16px;margin-bottom:16px;}/*!sc*/ .jzuOtQ{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;}/*!sc*/ .bGojzy{margin-bottom:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;row-gap:16px;}/*!sc*/ .iNSVHo{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;padding-bottom:16px;padding-top:8px;}/*!sc*/ .bVgnfw{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;gap:8px;}/*!sc*/ @media screen and (max-width:320px){.bVgnfw{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;}}/*!sc*/ .CEgMp{position:relative;}/*!sc*/ @media screen and (max-width:380px){.CEgMp .ref-selector-button-text-container{max-width:80px;}}/*!sc*/ @media screen and (max-width:320px){.CEgMp{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;}.CEgMp .overview-ref-selector{width:100%;}.CEgMp .overview-ref-selector > span{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start;}.CEgMp .overview-ref-selector > span > span[data-component="text"]{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;}}/*!sc*/ .gMOVLe[data-size="medium"]{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;min-width:0;}/*!sc*/ .gMOVLe[data-size="medium"] svg{color:var(--fgColor-muted,var(--color-fg-muted,#656d76));}/*!sc*/ .gMOVLe[data-size="medium"] > span{width:inherit;}/*!sc*/ .gUkoLg{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;}/*!sc*/ .bZBlpz{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;width:100%;}/*!sc*/ .lhTYNA{margin-right:4px;color:var(--fgColor-muted,var(--color-fg-muted,#656d76));}/*!sc*/ .ffLUq{font-size:14px;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}/*!sc*/ .bmcJak{min-width:0;}/*!sc*/ .fLXEGX{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}/*!sc*/ @media screen and (max-width:1079px){.fLXEGX{display:none;}}/*!sc*/ .lmSMZJ[data-size="medium"]{color:var(--fgColor-muted,var(--color-fg-muted,#656d76));padding-left:4px;padding-right:4px;}/*!sc*/ .lmSMZJ[data-size="medium"] span[data-component="leadingVisual"]{margin-right:4px !important;}/*!sc*/ .dqfxud{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}/*!sc*/ @media screen and (min-width:1080px){.dqfxud{display:none;}}/*!sc*/ @media screen and (max-width:543px){.dqfxud{display:none;}}/*!sc*/ .fGwBZA[data-size="medium"][data-no-visuals]{color:var(--fgColor-muted,var(--color-fg-muted,#656d76));}/*!sc*/ .jxTzTd{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding-left:8px;gap:8px;}/*!sc*/ .gqqBXN{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;gap:8px;}/*!sc*/ @media screen and (max-width:543px){.gqqBXN{display:none;}}/*!sc*/ .dzXgxt{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}/*!sc*/ @media screen and (max-width:1011px){.dzXgxt{display:none;}}/*!sc*/ .iWFGlI{margin-left:8px;margin-right:8px;margin:0;}/*!sc*/ .vcvyP{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;min-width:160px;}/*!sc*/ .YUPas{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}/*!sc*/ @media screen and (min-width:1012px){.YUPas{display:none;}}/*!sc*/ .izFOf{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}/*!sc*/ @media screen and (min-width:544px){.izFOf{display:none;}}/*!sc*/ .vIPPs{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;gap:16px;}/*!sc*/ .fdROMU{width:100%;border-collapse:separate;border-spacing:0;border:1px solid;border-color:var(--borderColor-default,var(--color-border-default,#d0d7de));border-radius:6px;table-layout:fixed;overflow:unset;}/*!sc*/ .jGKpsv{height:0px;line-height:0px;}/*!sc*/ .jGKpsv tr{height:0px;font-size:0px;}/*!sc*/ .jdgHnn{padding:16px;color:var(--fgColor-muted,var(--color-fg-muted,#656d76));font-size:12px;text-align:left;height:40px;}/*!sc*/ .jdgHnn th{padding-left:16px;background-color:var(--bgColor-muted,var(--color-canvas-subtle,#f6f8fa));}/*!sc*/ .bQivRW{width:100%;border-top-left-radius:6px;}/*!sc*/ @media screen and (min-width:544px){.bQivRW{display:none;}}/*!sc*/ .ldkMIO{width:40%;border-top-left-radius:6px;}/*!sc*/ @media screen and (max-width:543px){.ldkMIO{display:none;}}/*!sc*/ .jMbWeI{text-align:right;padding-right:16px;width:136px;border-top-right-radius:6px;}/*!sc*/ .gpqjiB{color:var(--fgColor-muted,var(--color-fg-muted,#656d76));font-size:12px;height:40px;}/*!sc*/ .dzCJzi{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px;min-width:273px;padding:8px;}/*!sc*/ @media screen and (min-width:544px){.dzCJzi{-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;}}/*!sc*/ .eNCcrz{text-align:center;vertical-align:center;height:40px;border-top:1px solid;border-color:var(--borderColor-default,var(--color-border-default,#d0d7de));}/*!sc*/ .bHTcCe{border-top:1px solid var(--borderColor-default,var(--color-border-default));cursor:pointer;}/*!sc*/ .csrIcr{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;gap:16px;}/*!sc*/ .bUQNHB{border:1px solid;border-color:var(--borderColor-default,var(--color-border-default,#d0d7de));border-radius:6px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;}/*!sc*/ @media screen and (max-width:543px){.bUQNHB{margin-left:-16px;margin-right:-16px;max-width:calc(100% + 32px);}}/*!sc*/ @media screen and (min-width:544px){.bUQNHB{max-width:100%;}}/*!sc*/ .jPdcfu{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;border-bottom:1px solid;border-bottom-color:var(--borderColor-default,var(--color-border-default,#d0d7de));-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding-right:8px;position:-webkit-sticky;position:sticky;top:0;background-color:var(--bgColor-default,var(--color-canvas-default,#ffffff));z-index:1;border-top-left-radius:6px;border-top-right-radius:6px;}/*!sc*/ .iphEWz{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;border-bottom:none;max-width:100%;padding-left:8px;padding-right:8px;}/*!sc*/ .hUCRAk{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}/*!sc*/ .cwoBXV[data-size="medium"]{color:var(--fgColor-muted,var(--color-fg-subtle,#6e7781));padding-left:8px;padding-right:8px;}/*!sc*/ .QkQOb{padding:32px;overflow:auto;}/*!sc*/ data-styled.g1[id="Box-sc-g0xbh4-0"]{content:"iVEunk,jzuOtQ,bGojzy,iNSVHo,bVgnfw,CEgMp,gMOVLe,gUkoLg,bZBlpz,lhTYNA,ffLUq,bmcJak,fLXEGX,lmSMZJ,dqfxud,fGwBZA,jxTzTd,gqqBXN,dzXgxt,iWFGlI,vcvyP,YUPas,izFOf,vIPPs,fdROMU,jGKpsv,jdgHnn,bQivRW,ldkMIO,jMbWeI,gpqjiB,dzCJzi,eNCcrz,bHTcCe,csrIcr,bUQNHB,jPdcfu,iphEWz,hUCRAk,cwoBXV,QkQOb,"}/*!sc*/ .brGdpi{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;-webkit-clip:rect(0,0,0,0);clip:rect(0,0,0,0);white-space:nowrap;border-width:0;}/*!sc*/ data-styled.g6[id="_VisuallyHidden__VisuallyHidden-sc-11jhm7a-0"]{content:"brGdpi,"}/*!sc*/ .hWlpPn{position:relative;display:inline-block;}/*!sc*/ .hWlpPn::after{position:absolute;z-index:1000000;display:none;padding:0.5em 0.75em;font:normal normal 11px/1.5 -apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";-webkit-font-smoothing:subpixel-antialiased;color:var(--tooltip-fgColor,var(--fgColor-onEmphasis,var(--color-fg-on-emphasis,#ffffff)));text-align:center;-webkit-text-decoration:none;text-decoration:none;text-shadow:none;text-transform:none;-webkit-letter-spacing:normal;-moz-letter-spacing:normal;-ms-letter-spacing:normal;letter-spacing:normal;word-wrap:break-word;white-space:pre;pointer-events:none;content:attr(aria-label);background:var(--tooltip-bgColor,var(--bgColor-emphasis,var(--color-neutral-emphasis-plus,#24292f)));border-radius:6px;opacity:0;}/*!sc*/ @-webkit-keyframes tooltip-appear{from{opacity:0;}to{opacity:1;}}/*!sc*/ @keyframes tooltip-appear{from{opacity:0;}to{opacity:1;}}/*!sc*/ .hWlpPn:hover::after,.hWlpPn:active::after,.hWlpPn:focus::after,.hWlpPn:focus-within::after{display:inline-block;-webkit-text-decoration:none;text-decoration:none;-webkit-animation-name:tooltip-appear;animation-name:tooltip-appear;-webkit-animation-duration:0.1s;animation-duration:0.1s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;-webkit-animation-delay:0s;animation-delay:0s;}/*!sc*/ .hWlpPn.tooltipped-no-delay:hover::after,.hWlpPn.tooltipped-no-delay:active::after,.hWlpPn.tooltipped-no-delay:focus::after,.hWlpPn.tooltipped-no-delay:focus-within::after{-webkit-animation-delay:0s;animation-delay:0s;}/*!sc*/ .hWlpPn.tooltipped-multiline:hover::after,.hWlpPn.tooltipped-multiline:active::after,.hWlpPn.tooltipped-multiline:focus::after,.hWlpPn.tooltipped-multiline:focus-within::after{display:table-cell;}/*!sc*/ .hWlpPn.tooltipped-s::after,.hWlpPn.tooltipped-se::after,.hWlpPn.tooltipped-sw::after{top:100%;right:50%;margin-top:6px;}/*!sc*/ .hWlpPn.tooltipped-se::after{right:auto;left:50%;margin-left:-16px;}/*!sc*/ .hWlpPn.tooltipped-sw::after{margin-right:-16px;}/*!sc*/ .hWlpPn.tooltipped-n::after,.hWlpPn.tooltipped-ne::after,.hWlpPn.tooltipped-nw::after{right:50%;bottom:100%;margin-bottom:6px;}/*!sc*/ .hWlpPn.tooltipped-ne::after{right:auto;left:50%;margin-left:-16px;}/*!sc*/ .hWlpPn.tooltipped-nw::after{margin-right:-16px;}/*!sc*/ .hWlpPn.tooltipped-s::after,.hWlpPn.tooltipped-n::after{-webkit-transform:translateX(50%);-ms-transform:translateX(50%);transform:translateX(50%);}/*!sc*/ .hWlpPn.tooltipped-w::after{right:100%;bottom:50%;margin-right:6px;-webkit-transform:translateY(50%);-ms-transform:translateY(50%);transform:translateY(50%);}/*!sc*/ .hWlpPn.tooltipped-e::after{bottom:50%;left:100%;margin-left:6px;-webkit-transform:translateY(50%);-ms-transform:translateY(50%);transform:translateY(50%);}/*!sc*/ .hWlpPn.tooltipped-multiline::after{width:-webkit-max-content;width:-moz-max-content;width:max-content;max-width:250px;word-wrap:break-word;white-space:pre-line;border-collapse:separate;}/*!sc*/ .hWlpPn.tooltipped-multiline.tooltipped-s::after,.hWlpPn.tooltipped-multiline.tooltipped-n::after{right:auto;left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%);}/*!sc*/ .hWlpPn.tooltipped-multiline.tooltipped-w::after,.hWlpPn.tooltipped-multiline.tooltipped-e::after{right:100%;}/*!sc*/ .hWlpPn.tooltipped-align-right-2::after{right:0;margin-right:0;}/*!sc*/ .hWlpPn.tooltipped-align-left-2::after{left:0;margin-left:0;}/*!sc*/ data-styled.g17[id="Tooltip__TooltipBase-sc-17tf59c-0"]{content:"hWlpPn,"}/*!sc*/ .liVpTx{display:inline-block;overflow:hidden;text-overflow:ellipsis;vertical-align:top;white-space:nowrap;max-width:125px;}/*!sc*/ data-styled.g19[id="Truncate__StyledTruncate-sc-23o1d2-0"]{content:"liVpTx,"}/*!sc*/ </style> <!-- --> <!-- --> <div class="Box-sc-g0xbh4-0 iVEunk"><div class="Box-sc-g0xbh4-0 jzuOtQ"><div class="Box-sc-g0xbh4-0 bGojzy"></div></div><div class="Box-sc-g0xbh4-0 iNSVHo"><div class="Box-sc-g0xbh4-0 bVgnfw"><div class="Box-sc-g0xbh4-0 CEgMp"><button type="button" aria-haspopup="true" aria-expanded="false" tabindex="0" aria-label="master branch" data-testid="anchor-button" class="Box-sc-g0xbh4-0 gMOVLe prc-Button-ButtonBase-c50BI overview-ref-selector width-full" data-loading="false" data-size="medium" data-variant="default" aria-describedby="branch-picker-repos-header-ref-selector-loading-announcement" id="branch-picker-repos-header-ref-selector"><span data-component="buttonContent" class="Box-sc-g0xbh4-0 gUkoLg prc-Button-ButtonContent-HKbr-"><span data-component="text" class="prc-Button-Label-pTQ3x"><div class="Box-sc-g0xbh4-0 bZBlpz"><div class="Box-sc-g0xbh4-0 lhTYNA"><svg aria-hidden="true" focusable="false" class="octicon octicon-git-branch" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M9.5 3.25a2.25 2.25 0 1 1 3 2.122V6A2.5 2.5 0 0 1 10 8.5H6a1 1 0 0 0-1 1v1.128a2.251 2.251 0 1 1-1.5 0V5.372a2.25 2.25 0 1 1 1.5 0v1.836A2.493 2.493 0 0 1 6 7h4a1 1 0 0 0 1-1v-.628A2.25 2.25 0 0 1 9.5 3.25Zm-6 0a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Zm8.25-.75a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5ZM4.25 12a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Z"></path></svg></div><div class="Box-sc-g0xbh4-0 ffLUq ref-selector-button-text-container"><span class="Box-sc-g0xbh4-0 bmcJak prc-Text-Text-0ima0"> <!-- -->master</span></div></div></span><span data-component="trailingVisual" class="prc-Button-Visual-2epfX prc-Button-VisualWrap-Db-eB"><svg aria-hidden="true" focusable="false" class="octicon octicon-triangle-down" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m4.427 7.427 3.396 3.396a.25.25 0 0 0 .354 0l3.396-3.396A.25.25 0 0 0 11.396 7H4.604a.25.25 0 0 0-.177.427Z"></path></svg></span></span></button><button hidden="" data-hotkey-scope="read-only-cursor-text-area"></button></div><div class="Box-sc-g0xbh4-0 fLXEGX"><a style="--button-color:fg.muted" type="button" href="/tqdm/tqdm/branches" class="Box-sc-g0xbh4-0 lmSMZJ prc-Button-ButtonBase-c50BI" data-loading="false" data-size="medium" data-variant="invisible" aria-describedby=":Rclab:-loading-announcement"><span data-component="buttonContent" class="Box-sc-g0xbh4-0 gUkoLg prc-Button-ButtonContent-HKbr-"><span data-component="leadingVisual" class="prc-Button-Visual-2epfX prc-Button-VisualWrap-Db-eB"><svg aria-hidden="true" focusable="false" class="octicon octicon-git-branch" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M9.5 3.25a2.25 2.25 0 1 1 3 2.122V6A2.5 2.5 0 0 1 10 8.5H6a1 1 0 0 0-1 1v1.128a2.251 2.251 0 1 1-1.5 0V5.372a2.25 2.25 0 1 1 1.5 0v1.836A2.493 2.493 0 0 1 6 7h4a1 1 0 0 0 1-1v-.628A2.25 2.25 0 0 1 9.5 3.25Zm-6 0a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Zm8.25-.75a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5ZM4.25 12a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Z"></path></svg></span><span data-component="text" class="prc-Button-Label-pTQ3x">Branches</span></span></a><a style="--button-color:fg.muted" type="button" href="/tqdm/tqdm/tags" class="Box-sc-g0xbh4-0 lmSMZJ prc-Button-ButtonBase-c50BI" data-loading="false" data-size="medium" data-variant="invisible" aria-describedby=":Rklab:-loading-announcement"><span data-component="buttonContent" class="Box-sc-g0xbh4-0 gUkoLg prc-Button-ButtonContent-HKbr-"><span data-component="leadingVisual" class="prc-Button-Visual-2epfX prc-Button-VisualWrap-Db-eB"><svg aria-hidden="true" focusable="false" class="octicon octicon-tag" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M1 7.775V2.75C1 1.784 1.784 1 2.75 1h5.025c.464 0 .91.184 1.238.513l6.25 6.25a1.75 1.75 0 0 1 0 2.474l-5.026 5.026a1.75 1.75 0 0 1-2.474 0l-6.25-6.25A1.752 1.752 0 0 1 1 7.775Zm1.5 0c0 .066.026.13.073.177l6.25 6.25a.25.25 0 0 0 .354 0l5.025-5.025a.25.25 0 0 0 0-.354l-6.25-6.25a.25.25 0 0 0-.177-.073H2.75a.25.25 0 0 0-.25.25ZM6 5a1 1 0 1 1 0 2 1 1 0 0 1 0-2Z"></path></svg></span><span data-component="text" class="prc-Button-Label-pTQ3x">Tags</span></span></a></div><div class="Box-sc-g0xbh4-0 dqfxud"><a style="--button-color:fg.muted" type="button" aria-label="Go to Branches page" href="/tqdm/tqdm/branches" class="Box-sc-g0xbh4-0 fGwBZA prc-Button-ButtonBase-c50BI" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="invisible" aria-describedby=":Relab:-loading-announcement"><svg aria-hidden="true" focusable="false" class="octicon octicon-git-branch" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M9.5 3.25a2.25 2.25 0 1 1 3 2.122V6A2.5 2.5 0 0 1 10 8.5H6a1 1 0 0 0-1 1v1.128a2.251 2.251 0 1 1-1.5 0V5.372a2.25 2.25 0 1 1 1.5 0v1.836A2.493 2.493 0 0 1 6 7h4a1 1 0 0 0 1-1v-.628A2.25 2.25 0 0 1 9.5 3.25Zm-6 0a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Zm8.25-.75a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5ZM4.25 12a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Z"></path></svg></a><a style="--button-color:fg.muted" type="button" aria-label="Go to Tags page" href="/tqdm/tqdm/tags" class="Box-sc-g0xbh4-0 fGwBZA prc-Button-ButtonBase-c50BI" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="invisible" aria-describedby=":Rmlab:-loading-announcement"><svg aria-hidden="true" focusable="false" class="octicon octicon-tag" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M1 7.775V2.75C1 1.784 1.784 1 2.75 1h5.025c.464 0 .91.184 1.238.513l6.25 6.25a1.75 1.75 0 0 1 0 2.474l-5.026 5.026a1.75 1.75 0 0 1-2.474 0l-6.25-6.25A1.752 1.752 0 0 1 1 7.775Zm1.5 0c0 .066.026.13.073.177l6.25 6.25a.25.25 0 0 0 .354 0l5.025-5.025a.25.25 0 0 0 0-.354l-6.25-6.25a.25.25 0 0 0-.177-.073H2.75a.25.25 0 0 0-.25.25ZM6 5a1 1 0 1 1 0 2 1 1 0 0 1 0-2Z"></path></svg></a></div></div><div class="Box-sc-g0xbh4-0 jxTzTd"><div class="Box-sc-g0xbh4-0 gqqBXN"><div class="Box-sc-g0xbh4-0 dzXgxt"><!--$--><div class="Box-sc-g0xbh4-0 iWFGlI"><span class="Box-sc-g0xbh4-0 vcvyP TextInput-wrapper prc-components-TextInputWrapper-i1ofR prc-components-TextInputBaseWrapper-ueK9q" data-leading-visual="true" data-trailing-visual="true" aria-busy="false"><span class="TextInput-icon" id=":R2j5ab:" aria-hidden="true"><svg aria-hidden="true" focusable="false" class="octicon octicon-search" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M10.68 11.74a6 6 0 0 1-7.922-8.982 6 6 0 0 1 8.982 7.922l3.04 3.04a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215ZM11.5 7a4.499 4.499 0 1 0-8.997 0A4.499 4.499 0 0 0 11.5 7Z"></path></svg></span><input type="text" aria-label="Go to file" role="combobox" aria-controls="file-results-list" aria-expanded="false" aria-haspopup="dialog" autoCorrect="off" spellcheck="false" placeholder="Go to file" aria-describedby=":R2j5ab: :R2j5abH1:" data-component="input" class="prc-components-Input-Ic-y8" value=""/><span class="TextInput-icon" id=":R2j5abH1:" aria-hidden="true"></span></span></div><!--/$--></div><div class="Box-sc-g0xbh4-0 YUPas"><button type="button" class="prc-Button-ButtonBase-c50BI" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="default" aria-describedby=":Rr5ab:-loading-announcement"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-HKbr-"><span data-component="text" class="prc-Button-Label-pTQ3x">Go to file</span></span></button></div><div class="react-directory-add-file-icon"></div><div class="react-directory-remove-file-icon"></div></div><button type="button" aria-haspopup="true" aria-expanded="false" tabindex="0" class="prc-Button-ButtonBase-c50BI" data-loading="false" data-size="medium" data-variant="primary" aria-describedby=":R55ab:-loading-announcement" id=":R55ab:"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-HKbr-"><span data-component="leadingVisual" class="prc-Button-Visual-2epfX prc-Button-VisualWrap-Db-eB"><svg aria-hidden="true" focusable="false" class="octicon octicon-code hide-sm" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"></path></svg></span><span data-component="text" class="prc-Button-Label-pTQ3x">Code</span><span data-component="trailingVisual" class="prc-Button-Visual-2epfX prc-Button-VisualWrap-Db-eB"><svg aria-hidden="true" focusable="false" class="octicon octicon-triangle-down" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m4.427 7.427 3.396 3.396a.25.25 0 0 0 .354 0l3.396-3.396A.25.25 0 0 0 11.396 7H4.604a.25.25 0 0 0-.177.427Z"></path></svg></span></span></button><div class="Box-sc-g0xbh4-0 izFOf"><button data-component="IconButton" type="button" aria-label="Open more actions menu" aria-haspopup="true" aria-expanded="false" tabindex="0" class="prc-Button-ButtonBase-c50BI prc-Button-IconButton-szpyj" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="default" aria-describedby=":R75ab:-loading-announcement" id=":R75ab:"><svg aria-hidden="true" focusable="false" class="octicon octicon-kebab-horizontal" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M8 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3ZM1.5 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm13 0a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path></svg></button></div></div></div><div class="Box-sc-g0xbh4-0 vIPPs"><div data-hpc="true"><button hidden="" data-testid="focus-next-element-button" data-hotkey="j"></button><button hidden="" data-testid="focus-previous-element-button" data-hotkey="k"></button><h2 class="sr-only ScreenReaderHeading-module__userSelectNone--vW4Cq prc-Heading-Heading-6CmGO" data-testid="screen-reader-heading" id="folders-and-files">Folders and files</h2><table aria-labelledby="folders-and-files" class="Box-sc-g0xbh4-0 fdROMU"><thead class="Box-sc-g0xbh4-0 jGKpsv"><tr class="Box-sc-g0xbh4-0 jdgHnn"><th colSpan="2" class="Box-sc-g0xbh4-0 bQivRW"><span class="text-bold">Name</span></th><th colSpan="1" class="Box-sc-g0xbh4-0 ldkMIO"><span class="text-bold">Name</span></th><th class="hide-sm"><div title="Last commit message" class="Truncate__StyledTruncate-sc-23o1d2-0 liVpTx width-fit"><span class="text-bold">Last commit message</span></div></th><th colSpan="1" class="Box-sc-g0xbh4-0 jMbWeI"><div title="Last commit date" class="Truncate__StyledTruncate-sc-23o1d2-0 liVpTx width-fit"><span class="text-bold">Last commit date</span></div></th></tr></thead><tbody><tr class="Box-sc-g0xbh4-0 gpqjiB"><td colSpan="3" class="bgColor-muted p-1 rounded-top-2"><div class="Box-sc-g0xbh4-0 dzCJzi"><h2 class="sr-only ScreenReaderHeading-module__userSelectNone--vW4Cq prc-Heading-Heading-6CmGO" data-testid="screen-reader-heading">Latest commit</h2><div style="width:120px" class="Skeleton Skeleton--text" data-testid="loading"> </div><div class="d-flex flex-shrink-0 gap-2"><div data-testid="latest-commit-details" class="d-none d-sm-flex flex-items-center"></div><div class="d-flex gap-2"><h2 class="sr-only ScreenReaderHeading-module__userSelectNone--vW4Cq prc-Heading-Heading-6CmGO" data-testid="screen-reader-heading">History</h2><a href="/tqdm/tqdm/commits/master/" class="prc-Button-ButtonBase-c50BI d-none d-lg-flex LinkButton-module__code-view-link-button--xvCGA flex-items-center fgColor-default" data-loading="false" data-size="small" data-variant="invisible" aria-describedby=":Raqj8pab:-loading-announcement"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-HKbr-"><span data-component="leadingVisual" class="prc-Button-Visual-2epfX prc-Button-VisualWrap-Db-eB"><svg aria-hidden="true" focusable="false" class="octicon octicon-history" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m.427 1.927 1.215 1.215a8.002 8.002 0 1 1-1.6 5.685.75.75 0 1 1 1.493-.154 6.5 6.5 0 1 0 1.18-4.458l1.358 1.358A.25.25 0 0 1 3.896 6H.25A.25.25 0 0 1 0 5.75V2.104a.25.25 0 0 1 .427-.177ZM7.75 4a.75.75 0 0 1 .75.75v2.992l2.028.812a.75.75 0 0 1-.557 1.392l-2.5-1A.751.751 0 0 1 7 8.25v-3.5A.75.75 0 0 1 7.75 4Z"></path></svg></span><span data-component="text" class="prc-Button-Label-pTQ3x"><span class="fgColor-default">2,019 Commits</span></span></span></a><div class="d-sm-none"></div><div class="d-flex d-lg-none"><span role="tooltip" aria-label="2,019 Commits" id="history-icon-button-tooltip" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-n"><a href="/tqdm/tqdm/commits/master/" class="prc-Button-ButtonBase-c50BI LinkButton-module__code-view-link-button--xvCGA flex-items-center fgColor-default" data-loading="false" data-size="small" data-variant="invisible" aria-describedby=":R1iqj8pab:-loading-announcement history-icon-button-tooltip"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-HKbr-"><span data-component="leadingVisual" class="prc-Button-Visual-2epfX prc-Button-VisualWrap-Db-eB"><svg aria-hidden="true" focusable="false" class="octicon octicon-history" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m.427 1.927 1.215 1.215a8.002 8.002 0 1 1-1.6 5.685.75.75 0 1 1 1.493-.154 6.5 6.5 0 1 0 1.18-4.458l1.358 1.358A.25.25 0 0 1 3.896 6H.25A.25.25 0 0 1 0 5.75V2.104a.25.25 0 0 1 .427-.177ZM7.75 4a.75.75 0 0 1 .75.75v2.992l2.028.812a.75.75 0 0 1-.557 1.392l-2.5-1A.751.751 0 0 1 7 8.25v-3.5A.75.75 0 0 1 7.75 4Z"></path></svg></span></span></a></span></div></div></div></div></td></tr><tr class="react-directory-row undefined" id="folder-row-0"><td class="react-directory-row-name-cell-small-screen" colSpan="2"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file-directory-fill icon-directory" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M1.75 1A1.75 1.75 0 0 0 0 2.75v10.5C0 14.216.784 15 1.75 15h12.5A1.75 1.75 0 0 0 16 13.25v-8.5A1.75 1.75 0 0 0 14.25 3H7.5a.25.25 0 0 1-.2-.1l-.9-1.2C6.07 1.26 5.55 1 5 1H1.75Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title=".github" aria-label=".github, (Directory)" class="Link--primary" href="/tqdm/tqdm/tree/master/.github">.github</a></div></div></div></div></td><td class="react-directory-row-name-cell-large-screen" colSpan="1"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file-directory-fill icon-directory" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M1.75 1A1.75 1.75 0 0 0 0 2.75v10.5C0 14.216.784 15 1.75 15h12.5A1.75 1.75 0 0 0 16 13.25v-8.5A1.75 1.75 0 0 0 14.25 3H7.5a.25.25 0 0 1-.2-.1l-.9-1.2C6.07 1.26 5.55 1 5 1H1.75Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title=".github" aria-label=".github, (Directory)" class="Link--primary" href="/tqdm/tqdm/tree/master/.github">.github</a></div></div></div></div></td><td class="react-directory-row-commit-cell"><div class="Skeleton Skeleton--text"> </div></td><td><div class="Skeleton Skeleton--text"> </div></td></tr><tr class="react-directory-row undefined" id="folder-row-1"><td class="react-directory-row-name-cell-small-screen" colSpan="2"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file-directory-fill icon-directory" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M1.75 1A1.75 1.75 0 0 0 0 2.75v10.5C0 14.216.784 15 1.75 15h12.5A1.75 1.75 0 0 0 16 13.25v-8.5A1.75 1.75 0 0 0 14.25 3H7.5a.25.25 0 0 1-.2-.1l-.9-1.2C6.07 1.26 5.55 1 5 1H1.75Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title=".meta" aria-label=".meta, (Directory)" class="Link--primary" href="/tqdm/tqdm/tree/master/.meta">.meta</a></div></div></div></div></td><td class="react-directory-row-name-cell-large-screen" colSpan="1"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file-directory-fill icon-directory" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M1.75 1A1.75 1.75 0 0 0 0 2.75v10.5C0 14.216.784 15 1.75 15h12.5A1.75 1.75 0 0 0 16 13.25v-8.5A1.75 1.75 0 0 0 14.25 3H7.5a.25.25 0 0 1-.2-.1l-.9-1.2C6.07 1.26 5.55 1 5 1H1.75Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title=".meta" aria-label=".meta, (Directory)" class="Link--primary" href="/tqdm/tqdm/tree/master/.meta">.meta</a></div></div></div></div></td><td class="react-directory-row-commit-cell"><div class="Skeleton Skeleton--text"> </div></td><td><div class="Skeleton Skeleton--text"> </div></td></tr><tr class="react-directory-row undefined" id="folder-row-2"><td class="react-directory-row-name-cell-small-screen" colSpan="2"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file-directory-fill icon-directory" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M1.75 1A1.75 1.75 0 0 0 0 2.75v10.5C0 14.216.784 15 1.75 15h12.5A1.75 1.75 0 0 0 16 13.25v-8.5A1.75 1.75 0 0 0 14.25 3H7.5a.25.25 0 0 1-.2-.1l-.9-1.2C6.07 1.26 5.55 1 5 1H1.75Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="benchmarks" aria-label="benchmarks, (Directory)" class="Link--primary" href="/tqdm/tqdm/tree/master/benchmarks">benchmarks</a></div></div></div></div></td><td class="react-directory-row-name-cell-large-screen" colSpan="1"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file-directory-fill icon-directory" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M1.75 1A1.75 1.75 0 0 0 0 2.75v10.5C0 14.216.784 15 1.75 15h12.5A1.75 1.75 0 0 0 16 13.25v-8.5A1.75 1.75 0 0 0 14.25 3H7.5a.25.25 0 0 1-.2-.1l-.9-1.2C6.07 1.26 5.55 1 5 1H1.75Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="benchmarks" aria-label="benchmarks, (Directory)" class="Link--primary" href="/tqdm/tqdm/tree/master/benchmarks">benchmarks</a></div></div></div></div></td><td class="react-directory-row-commit-cell"><div class="Skeleton Skeleton--text"> </div></td><td><div class="Skeleton Skeleton--text"> </div></td></tr><tr class="react-directory-row undefined" id="folder-row-3"><td class="react-directory-row-name-cell-small-screen" colSpan="2"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file-directory-fill icon-directory" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M1.75 1A1.75 1.75 0 0 0 0 2.75v10.5C0 14.216.784 15 1.75 15h12.5A1.75 1.75 0 0 0 16 13.25v-8.5A1.75 1.75 0 0 0 14.25 3H7.5a.25.25 0 0 1-.2-.1l-.9-1.2C6.07 1.26 5.55 1 5 1H1.75Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="examples" aria-label="examples, (Directory)" class="Link--primary" href="/tqdm/tqdm/tree/master/examples">examples</a></div></div></div></div></td><td class="react-directory-row-name-cell-large-screen" colSpan="1"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file-directory-fill icon-directory" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M1.75 1A1.75 1.75 0 0 0 0 2.75v10.5C0 14.216.784 15 1.75 15h12.5A1.75 1.75 0 0 0 16 13.25v-8.5A1.75 1.75 0 0 0 14.25 3H7.5a.25.25 0 0 1-.2-.1l-.9-1.2C6.07 1.26 5.55 1 5 1H1.75Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="examples" aria-label="examples, (Directory)" class="Link--primary" href="/tqdm/tqdm/tree/master/examples">examples</a></div></div></div></div></td><td class="react-directory-row-commit-cell"><div class="Skeleton Skeleton--text"> </div></td><td><div class="Skeleton Skeleton--text"> </div></td></tr><tr class="react-directory-row undefined" id="folder-row-4"><td class="react-directory-row-name-cell-small-screen" colSpan="2"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file-directory-fill icon-directory" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M1.75 1A1.75 1.75 0 0 0 0 2.75v10.5C0 14.216.784 15 1.75 15h12.5A1.75 1.75 0 0 0 16 13.25v-8.5A1.75 1.75 0 0 0 14.25 3H7.5a.25.25 0 0 1-.2-.1l-.9-1.2C6.07 1.26 5.55 1 5 1H1.75Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="images" aria-label="images, (Directory)" class="Link--primary" href="/tqdm/tqdm/tree/master/images">images</a></div></div></div></div></td><td class="react-directory-row-name-cell-large-screen" colSpan="1"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file-directory-fill icon-directory" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M1.75 1A1.75 1.75 0 0 0 0 2.75v10.5C0 14.216.784 15 1.75 15h12.5A1.75 1.75 0 0 0 16 13.25v-8.5A1.75 1.75 0 0 0 14.25 3H7.5a.25.25 0 0 1-.2-.1l-.9-1.2C6.07 1.26 5.55 1 5 1H1.75Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="images" aria-label="images, (Directory)" class="Link--primary" href="/tqdm/tqdm/tree/master/images">images</a></div></div></div></div></td><td class="react-directory-row-commit-cell"><div class="Skeleton Skeleton--text"> </div></td><td><div class="Skeleton Skeleton--text"> </div></td></tr><tr class="react-directory-row undefined" id="folder-row-5"><td class="react-directory-row-name-cell-small-screen" colSpan="2"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file-directory-fill icon-directory" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M1.75 1A1.75 1.75 0 0 0 0 2.75v10.5C0 14.216.784 15 1.75 15h12.5A1.75 1.75 0 0 0 16 13.25v-8.5A1.75 1.75 0 0 0 14.25 3H7.5a.25.25 0 0 1-.2-.1l-.9-1.2C6.07 1.26 5.55 1 5 1H1.75Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="tests" aria-label="tests, (Directory)" class="Link--primary" href="/tqdm/tqdm/tree/master/tests">tests</a></div></div></div></div></td><td class="react-directory-row-name-cell-large-screen" colSpan="1"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file-directory-fill icon-directory" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M1.75 1A1.75 1.75 0 0 0 0 2.75v10.5C0 14.216.784 15 1.75 15h12.5A1.75 1.75 0 0 0 16 13.25v-8.5A1.75 1.75 0 0 0 14.25 3H7.5a.25.25 0 0 1-.2-.1l-.9-1.2C6.07 1.26 5.55 1 5 1H1.75Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="tests" aria-label="tests, (Directory)" class="Link--primary" href="/tqdm/tqdm/tree/master/tests">tests</a></div></div></div></div></td><td class="react-directory-row-commit-cell"><div class="Skeleton Skeleton--text"> </div></td><td><div class="Skeleton Skeleton--text"> </div></td></tr><tr class="react-directory-row undefined" id="folder-row-6"><td class="react-directory-row-name-cell-small-screen" colSpan="2"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file-directory-fill icon-directory" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M1.75 1A1.75 1.75 0 0 0 0 2.75v10.5C0 14.216.784 15 1.75 15h12.5A1.75 1.75 0 0 0 16 13.25v-8.5A1.75 1.75 0 0 0 14.25 3H7.5a.25.25 0 0 1-.2-.1l-.9-1.2C6.07 1.26 5.55 1 5 1H1.75Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="tqdm" aria-label="tqdm, (Directory)" class="Link--primary" href="/tqdm/tqdm/tree/master/tqdm">tqdm</a></div></div></div></div></td><td class="react-directory-row-name-cell-large-screen" colSpan="1"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file-directory-fill icon-directory" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M1.75 1A1.75 1.75 0 0 0 0 2.75v10.5C0 14.216.784 15 1.75 15h12.5A1.75 1.75 0 0 0 16 13.25v-8.5A1.75 1.75 0 0 0 14.25 3H7.5a.25.25 0 0 1-.2-.1l-.9-1.2C6.07 1.26 5.55 1 5 1H1.75Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="tqdm" aria-label="tqdm, (Directory)" class="Link--primary" href="/tqdm/tqdm/tree/master/tqdm">tqdm</a></div></div></div></div></td><td class="react-directory-row-commit-cell"><div class="Skeleton Skeleton--text"> </div></td><td><div class="Skeleton Skeleton--text"> </div></td></tr><tr class="react-directory-row undefined" id="folder-row-7"><td class="react-directory-row-name-cell-small-screen" colSpan="2"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title=".gitattributes" aria-label=".gitattributes, (File)" class="Link--primary" href="/tqdm/tqdm/blob/master/.gitattributes">.gitattributes</a></div></div></div></div></td><td class="react-directory-row-name-cell-large-screen" colSpan="1"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title=".gitattributes" aria-label=".gitattributes, (File)" class="Link--primary" href="/tqdm/tqdm/blob/master/.gitattributes">.gitattributes</a></div></div></div></div></td><td class="react-directory-row-commit-cell"><div class="Skeleton Skeleton--text"> </div></td><td><div class="Skeleton Skeleton--text"> </div></td></tr><tr class="react-directory-row undefined" id="folder-row-8"><td class="react-directory-row-name-cell-small-screen" colSpan="2"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title=".gitignore" aria-label=".gitignore, (File)" class="Link--primary" href="/tqdm/tqdm/blob/master/.gitignore">.gitignore</a></div></div></div></div></td><td class="react-directory-row-name-cell-large-screen" colSpan="1"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title=".gitignore" aria-label=".gitignore, (File)" class="Link--primary" href="/tqdm/tqdm/blob/master/.gitignore">.gitignore</a></div></div></div></div></td><td class="react-directory-row-commit-cell"><div class="Skeleton Skeleton--text"> </div></td><td><div class="Skeleton Skeleton--text"> </div></td></tr><tr class="react-directory-row undefined" id="folder-row-9"><td class="react-directory-row-name-cell-small-screen" colSpan="2"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title=".mailmap" aria-label=".mailmap, (File)" class="Link--primary" href="/tqdm/tqdm/blob/master/.mailmap">.mailmap</a></div></div></div></div></td><td class="react-directory-row-name-cell-large-screen" colSpan="1"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title=".mailmap" aria-label=".mailmap, (File)" class="Link--primary" href="/tqdm/tqdm/blob/master/.mailmap">.mailmap</a></div></div></div></div></td><td class="react-directory-row-commit-cell"><div class="Skeleton Skeleton--text"> </div></td><td><div class="Skeleton Skeleton--text"> </div></td></tr><tr class="react-directory-row truncate-for-mobile" id="folder-row-10"><td class="react-directory-row-name-cell-small-screen" colSpan="2"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title=".pre-commit-config.yaml" aria-label=".pre-commit-config.yaml, (File)" class="Link--primary" href="/tqdm/tqdm/blob/master/.pre-commit-config.yaml">.pre-commit-config.yaml</a></div></div></div></div></td><td class="react-directory-row-name-cell-large-screen" colSpan="1"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title=".pre-commit-config.yaml" aria-label=".pre-commit-config.yaml, (File)" class="Link--primary" href="/tqdm/tqdm/blob/master/.pre-commit-config.yaml">.pre-commit-config.yaml</a></div></div></div></div></td><td class="react-directory-row-commit-cell"><div class="Skeleton Skeleton--text"> </div></td><td><div class="Skeleton Skeleton--text"> </div></td></tr><tr class="react-directory-row truncate-for-mobile" id="folder-row-11"><td class="react-directory-row-name-cell-small-screen" colSpan="2"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title=".zenodo.json" aria-label=".zenodo.json, (File)" class="Link--primary" href="/tqdm/tqdm/blob/master/.zenodo.json">.zenodo.json</a></div></div></div></div></td><td class="react-directory-row-name-cell-large-screen" colSpan="1"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title=".zenodo.json" aria-label=".zenodo.json, (File)" class="Link--primary" href="/tqdm/tqdm/blob/master/.zenodo.json">.zenodo.json</a></div></div></div></div></td><td class="react-directory-row-commit-cell"><div class="Skeleton Skeleton--text"> </div></td><td><div class="Skeleton Skeleton--text"> </div></td></tr><tr class="react-directory-row truncate-for-mobile" id="folder-row-12"><td class="react-directory-row-name-cell-small-screen" colSpan="2"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="CODE_OF_CONDUCT.md" aria-label="CODE_OF_CONDUCT.md, (File)" class="Link--primary" href="/tqdm/tqdm/blob/master/CODE_OF_CONDUCT.md">CODE_OF_CONDUCT.md</a></div></div></div></div></td><td class="react-directory-row-name-cell-large-screen" colSpan="1"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="CODE_OF_CONDUCT.md" aria-label="CODE_OF_CONDUCT.md, (File)" class="Link--primary" href="/tqdm/tqdm/blob/master/CODE_OF_CONDUCT.md">CODE_OF_CONDUCT.md</a></div></div></div></div></td><td class="react-directory-row-commit-cell"><div class="Skeleton Skeleton--text"> </div></td><td><div class="Skeleton Skeleton--text"> </div></td></tr><tr class="react-directory-row truncate-for-mobile" id="folder-row-13"><td class="react-directory-row-name-cell-small-screen" colSpan="2"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="CONTRIBUTING.md" aria-label="CONTRIBUTING.md, (File)" class="Link--primary" href="/tqdm/tqdm/blob/master/CONTRIBUTING.md">CONTRIBUTING.md</a></div></div></div></div></td><td class="react-directory-row-name-cell-large-screen" colSpan="1"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="CONTRIBUTING.md" aria-label="CONTRIBUTING.md, (File)" class="Link--primary" href="/tqdm/tqdm/blob/master/CONTRIBUTING.md">CONTRIBUTING.md</a></div></div></div></div></td><td class="react-directory-row-commit-cell"><div class="Skeleton Skeleton--text"> </div></td><td><div class="Skeleton Skeleton--text"> </div></td></tr><tr class="react-directory-row truncate-for-mobile" id="folder-row-14"><td class="react-directory-row-name-cell-small-screen" colSpan="2"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="DEMO.ipynb" aria-label="DEMO.ipynb, (File)" class="Link--primary" href="/tqdm/tqdm/blob/master/DEMO.ipynb">DEMO.ipynb</a></div></div></div></div></td><td class="react-directory-row-name-cell-large-screen" colSpan="1"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="DEMO.ipynb" aria-label="DEMO.ipynb, (File)" class="Link--primary" href="/tqdm/tqdm/blob/master/DEMO.ipynb">DEMO.ipynb</a></div></div></div></div></td><td class="react-directory-row-commit-cell"><div class="Skeleton Skeleton--text"> </div></td><td><div class="Skeleton Skeleton--text"> </div></td></tr><tr class="react-directory-row truncate-for-mobile" id="folder-row-15"><td class="react-directory-row-name-cell-small-screen" colSpan="2"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="LICENCE" aria-label="LICENCE, (File)" class="Link--primary" href="/tqdm/tqdm/blob/master/LICENCE">LICENCE</a></div></div></div></div></td><td class="react-directory-row-name-cell-large-screen" colSpan="1"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="LICENCE" aria-label="LICENCE, (File)" class="Link--primary" href="/tqdm/tqdm/blob/master/LICENCE">LICENCE</a></div></div></div></div></td><td class="react-directory-row-commit-cell"><div class="Skeleton Skeleton--text"> </div></td><td><div class="Skeleton Skeleton--text"> </div></td></tr><tr class="react-directory-row truncate-for-mobile" id="folder-row-16"><td class="react-directory-row-name-cell-small-screen" colSpan="2"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="Makefile" aria-label="Makefile, (File)" class="Link--primary" href="/tqdm/tqdm/blob/master/Makefile">Makefile</a></div></div></div></div></td><td class="react-directory-row-name-cell-large-screen" colSpan="1"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="Makefile" aria-label="Makefile, (File)" class="Link--primary" href="/tqdm/tqdm/blob/master/Makefile">Makefile</a></div></div></div></div></td><td class="react-directory-row-commit-cell"><div class="Skeleton Skeleton--text"> </div></td><td><div class="Skeleton Skeleton--text"> </div></td></tr><tr class="react-directory-row truncate-for-mobile" id="folder-row-17"><td class="react-directory-row-name-cell-small-screen" colSpan="2"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="README.rst" aria-label="README.rst, (File)" class="Link--primary" href="/tqdm/tqdm/blob/master/README.rst">README.rst</a></div></div></div></div></td><td class="react-directory-row-name-cell-large-screen" colSpan="1"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="README.rst" aria-label="README.rst, (File)" class="Link--primary" href="/tqdm/tqdm/blob/master/README.rst">README.rst</a></div></div></div></div></td><td class="react-directory-row-commit-cell"><div class="Skeleton Skeleton--text"> </div></td><td><div class="Skeleton Skeleton--text"> </div></td></tr><tr class="react-directory-row truncate-for-mobile" id="folder-row-18"><td class="react-directory-row-name-cell-small-screen" colSpan="2"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="asv.conf.json" aria-label="asv.conf.json, (File)" class="Link--primary" href="/tqdm/tqdm/blob/master/asv.conf.json">asv.conf.json</a></div></div></div></div></td><td class="react-directory-row-name-cell-large-screen" colSpan="1"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="asv.conf.json" aria-label="asv.conf.json, (File)" class="Link--primary" href="/tqdm/tqdm/blob/master/asv.conf.json">asv.conf.json</a></div></div></div></div></td><td class="react-directory-row-commit-cell"><div class="Skeleton Skeleton--text"> </div></td><td><div class="Skeleton Skeleton--text"> </div></td></tr><tr class="react-directory-row truncate-for-mobile" id="folder-row-19"><td class="react-directory-row-name-cell-small-screen" colSpan="2"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="environment.yml" aria-label="environment.yml, (File)" class="Link--primary" href="/tqdm/tqdm/blob/master/environment.yml">environment.yml</a></div></div></div></div></td><td class="react-directory-row-name-cell-large-screen" colSpan="1"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="environment.yml" aria-label="environment.yml, (File)" class="Link--primary" href="/tqdm/tqdm/blob/master/environment.yml">environment.yml</a></div></div></div></div></td><td class="react-directory-row-commit-cell"><div class="Skeleton Skeleton--text"> </div></td><td><div class="Skeleton Skeleton--text"> </div></td></tr><tr class="react-directory-row truncate-for-mobile" id="folder-row-20"><td class="react-directory-row-name-cell-small-screen" colSpan="2"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="logo.png" aria-label="logo.png, (File)" class="Link--primary" href="/tqdm/tqdm/blob/master/logo.png">logo.png</a></div></div></div></div></td><td class="react-directory-row-name-cell-large-screen" colSpan="1"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="logo.png" aria-label="logo.png, (File)" class="Link--primary" href="/tqdm/tqdm/blob/master/logo.png">logo.png</a></div></div></div></div></td><td class="react-directory-row-commit-cell"><div class="Skeleton Skeleton--text"> </div></td><td><div class="Skeleton Skeleton--text"> </div></td></tr><tr class="react-directory-row truncate-for-mobile" id="folder-row-21"><td class="react-directory-row-name-cell-small-screen" colSpan="2"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="pyproject.toml" aria-label="pyproject.toml, (File)" class="Link--primary" href="/tqdm/tqdm/blob/master/pyproject.toml">pyproject.toml</a></div></div></div></div></td><td class="react-directory-row-name-cell-large-screen" colSpan="1"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="pyproject.toml" aria-label="pyproject.toml, (File)" class="Link--primary" href="/tqdm/tqdm/blob/master/pyproject.toml">pyproject.toml</a></div></div></div></div></td><td class="react-directory-row-commit-cell"><div class="Skeleton Skeleton--text"> </div></td><td><div class="Skeleton Skeleton--text"> </div></td></tr><tr class="react-directory-row truncate-for-mobile" id="folder-row-22"><td class="react-directory-row-name-cell-small-screen" colSpan="2"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="tests_notebook.ipynb" aria-label="tests_notebook.ipynb, (File)" class="Link--primary" href="/tqdm/tqdm/blob/master/tests_notebook.ipynb">tests_notebook.ipynb</a></div></div></div></div></td><td class="react-directory-row-name-cell-large-screen" colSpan="1"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="tests_notebook.ipynb" aria-label="tests_notebook.ipynb, (File)" class="Link--primary" href="/tqdm/tqdm/blob/master/tests_notebook.ipynb">tests_notebook.ipynb</a></div></div></div></div></td><td class="react-directory-row-commit-cell"><div class="Skeleton Skeleton--text"> </div></td><td><div class="Skeleton Skeleton--text"> </div></td></tr><tr class="react-directory-row truncate-for-mobile" id="folder-row-23"><td class="react-directory-row-name-cell-small-screen" colSpan="2"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="tox.ini" aria-label="tox.ini, (File)" class="Link--primary" href="/tqdm/tqdm/blob/master/tox.ini">tox.ini</a></div></div></div></div></td><td class="react-directory-row-name-cell-large-screen" colSpan="1"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="octicon octicon-file color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="tox.ini" aria-label="tox.ini, (File)" class="Link--primary" href="/tqdm/tqdm/blob/master/tox.ini">tox.ini</a></div></div></div></div></td><td class="react-directory-row-commit-cell"><div class="Skeleton Skeleton--text"> </div></td><td><div class="Skeleton Skeleton--text"> </div></td></tr><tr class="Box-sc-g0xbh4-0 eNCcrz show-for-mobile" data-testid="view-all-files-row"><td colSpan="3" class="Box-sc-g0xbh4-0 bHTcCe"><div><button class="prc-Link-Link-85e08">View all files</button></div></td></tr></tbody></table></div><div class="Box-sc-g0xbh4-0 csrIcr"><div class="Box-sc-g0xbh4-0 bUQNHB"><div itemscope="" itemType="https://schema.org/abstract" class="Box-sc-g0xbh4-0 jPdcfu"><h2 class="_VisuallyHidden__VisuallyHidden-sc-11jhm7a-0 brGdpi">Repository files navigation</h2><nav class="Box-sc-g0xbh4-0 iphEWz prc-components-UnderlineWrapper-oOh5J" aria-label="Repository files"><ul class="prc-components-UnderlineItemList-b23Hf" role="list"><li class="Box-sc-g0xbh4-0 hUCRAk"><a class="prc-components-UnderlineItem-lJsg-" href="#" aria-current="page"><span data-component="icon"><svg aria-hidden="true" focusable="false" class="octicon octicon-book" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M0 1.75A.75.75 0 0 1 .75 1h4.253c1.227 0 2.317.59 3 1.501A3.743 3.743 0 0 1 11.006 1h4.245a.75.75 0 0 1 .75.75v10.5a.75.75 0 0 1-.75.75h-4.507a2.25 2.25 0 0 0-1.591.659l-.622.621a.75.75 0 0 1-1.06 0l-.622-.621A2.25 2.25 0 0 0 5.258 13H.75a.75.75 0 0 1-.75-.75Zm7.251 10.324.004-5.073-.002-2.253A2.25 2.25 0 0 0 5.003 2.5H1.5v9h3.757a3.75 3.75 0 0 1 1.994.574ZM8.755 4.75l-.004 7.322a3.752 3.752 0 0 1 1.992-.572H14.5v-9h-3.495a2.25 2.25 0 0 0-2.25 2.25Z"></path></svg></span><span data-component="text" data-content="README">README</span></a></li><li class="Box-sc-g0xbh4-0 hUCRAk"><a class="prc-components-UnderlineItem-lJsg-" href="#"><span data-component="icon"><svg aria-hidden="true" focusable="false" class="octicon octicon-code-of-conduct" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M8.048 2.241c.964-.709 2.079-1.238 3.325-1.241a4.616 4.616 0 0 1 3.282 1.355c.41.408.757.86.996 1.428.238.568.348 1.206.347 1.968 0 2.193-1.505 4.254-3.081 5.862-1.496 1.526-3.213 2.796-4.249 3.563l-.22.163a.749.749 0 0 1-.895 0l-.221-.163c-1.036-.767-2.753-2.037-4.249-3.563C1.51 10.008.007 7.952.002 5.762a4.614 4.614 0 0 1 1.353-3.407C3.123.585 6.223.537 8.048 2.24Zm-1.153.983c-1.25-1.033-3.321-.967-4.48.191a3.115 3.115 0 0 0-.913 2.335c0 1.556 1.109 3.24 2.652 4.813C5.463 11.898 6.96 13.032 8 13.805c.353-.262.758-.565 1.191-.905l-1.326-1.223a.75.75 0 0 1 1.018-1.102l1.48 1.366c.328-.281.659-.577.984-.887L9.99 9.802a.75.75 0 1 1 1.019-1.103l1.384 1.28c.295-.329.566-.661.81-.995L12.92 8.7l-1.167-1.168c-.674-.671-1.78-.664-2.474.03-.268.269-.538.537-.802.797-.893.882-2.319.843-3.185-.032-.346-.35-.693-.697-1.043-1.047a.75.75 0 0 1-.04-1.016c.162-.191.336-.401.52-.623.62-.748 1.356-1.637 2.166-2.417Zm7.112 4.442c.313-.65.491-1.293.491-1.916v-.001c0-.614-.088-1.045-.23-1.385-.143-.339-.357-.633-.673-.949a3.111 3.111 0 0 0-2.218-.915c-1.092.003-2.165.627-3.226 1.602-.823.755-1.554 1.637-2.228 2.45l-.127.154.562.566a.755.755 0 0 0 1.066.02l.794-.79c1.258-1.258 3.312-1.31 4.594-.032.396.394.792.791 1.173 1.173Z"></path></svg></span><span data-component="text" data-content="Code of conduct">Code of conduct</span></a></li><li class="Box-sc-g0xbh4-0 hUCRAk"><a class="prc-components-UnderlineItem-lJsg-" href="#"><span data-component="icon"><svg aria-hidden="true" focusable="false" class="octicon octicon-law" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M8.75.75V2h.985c.304 0 .603.08.867.231l1.29.736c.038.022.08.033.124.033h2.234a.75.75 0 0 1 0 1.5h-.427l2.111 4.692a.75.75 0 0 1-.154.838l-.53-.53.529.531-.001.002-.002.002-.006.006-.006.005-.01.01-.045.04c-.21.176-.441.327-.686.45C14.556 10.78 13.88 11 13 11a4.498 4.498 0 0 1-2.023-.454 3.544 3.544 0 0 1-.686-.45l-.045-.04-.016-.015-.006-.006-.004-.004v-.001a.75.75 0 0 1-.154-.838L12.178 4.5h-.162c-.305 0-.604-.079-.868-.231l-1.29-.736a.245.245 0 0 0-.124-.033H8.75V13h2.5a.75.75 0 0 1 0 1.5h-6.5a.75.75 0 0 1 0-1.5h2.5V3.5h-.984a.245.245 0 0 0-.124.033l-1.289.737c-.265.15-.564.23-.869.23h-.162l2.112 4.692a.75.75 0 0 1-.154.838l-.53-.53.529.531-.001.002-.002.002-.006.006-.016.015-.045.04c-.21.176-.441.327-.686.45C4.556 10.78 3.88 11 3 11a4.498 4.498 0 0 1-2.023-.454 3.544 3.544 0 0 1-.686-.45l-.045-.04-.016-.015-.006-.006-.004-.004v-.001a.75.75 0 0 1-.154-.838L2.178 4.5H1.75a.75.75 0 0 1 0-1.5h2.234a.249.249 0 0 0 .125-.033l1.288-.737c.265-.15.564-.23.869-.23h.984V.75a.75.75 0 0 1 1.5 0Zm2.945 8.477c.285.135.718.273 1.305.273s1.02-.138 1.305-.273L13 6.327Zm-10 0c.285.135.718.273 1.305.273s1.02-.138 1.305-.273L3 6.327Z"></path></svg></span><span data-component="text" data-content="License">License</span></a></li><li class="Box-sc-g0xbh4-0 hUCRAk"><a class="prc-components-UnderlineItem-lJsg-" href="#"><span data-component="icon"><svg aria-hidden="true" focusable="false" class="octicon octicon-law" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M8.75.75V2h.985c.304 0 .603.08.867.231l1.29.736c.038.022.08.033.124.033h2.234a.75.75 0 0 1 0 1.5h-.427l2.111 4.692a.75.75 0 0 1-.154.838l-.53-.53.529.531-.001.002-.002.002-.006.006-.006.005-.01.01-.045.04c-.21.176-.441.327-.686.45C14.556 10.78 13.88 11 13 11a4.498 4.498 0 0 1-2.023-.454 3.544 3.544 0 0 1-.686-.45l-.045-.04-.016-.015-.006-.006-.004-.004v-.001a.75.75 0 0 1-.154-.838L12.178 4.5h-.162c-.305 0-.604-.079-.868-.231l-1.29-.736a.245.245 0 0 0-.124-.033H8.75V13h2.5a.75.75 0 0 1 0 1.5h-6.5a.75.75 0 0 1 0-1.5h2.5V3.5h-.984a.245.245 0 0 0-.124.033l-1.289.737c-.265.15-.564.23-.869.23h-.162l2.112 4.692a.75.75 0 0 1-.154.838l-.53-.53.529.531-.001.002-.002.002-.006.006-.016.015-.045.04c-.21.176-.441.327-.686.45C4.556 10.78 3.88 11 3 11a4.498 4.498 0 0 1-2.023-.454 3.544 3.544 0 0 1-.686-.45l-.045-.04-.016-.015-.006-.006-.004-.004v-.001a.75.75 0 0 1-.154-.838L2.178 4.5H1.75a.75.75 0 0 1 0-1.5h2.234a.249.249 0 0 0 .125-.033l1.288-.737c.265-.15.564-.23.869-.23h.984V.75a.75.75 0 0 1 1.5 0Zm2.945 8.477c.285.135.718.273 1.305.273s1.02-.138 1.305-.273L13 6.327Zm-10 0c.285.135.718.273 1.305.273s1.02-.138 1.305-.273L3 6.327Z"></path></svg></span><span data-component="text" data-content="Security">Security</span></a></li></ul></nav><button style="--button-color:fg.subtle" type="button" aria-label="Outline" aria-haspopup="true" aria-expanded="false" tabindex="0" class="Box-sc-g0xbh4-0 cwoBXV prc-Button-ButtonBase-c50BI" data-loading="false" data-size="medium" data-variant="invisible" aria-describedby=":Rr9ab:-loading-announcement" id=":Rr9ab:"><svg aria-hidden="true" focusable="false" class="octicon octicon-list-unordered" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M5.75 2.5h8.5a.75.75 0 0 1 0 1.5h-8.5a.75.75 0 0 1 0-1.5Zm0 5h8.5a.75.75 0 0 1 0 1.5h-8.5a.75.75 0 0 1 0-1.5Zm0 5h8.5a.75.75 0 0 1 0 1.5h-8.5a.75.75 0 0 1 0-1.5ZM2 14a1 1 0 1 1 0-2 1 1 0 0 1 0 2Zm1-6a1 1 0 1 1-2 0 1 1 0 0 1 2 0ZM2 4a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"></path></svg></button></div><div class="Box-sc-g0xbh4-0 QkQOb js-snippet-clipboard-copy-unpositioned undefined" data-hpc="true"><article class="markdown-body entry-content container-lg" itemprop="text"><p dir="auto"><a target="_blank" rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/3df47a29e4d76c9fa8ea437614a9f8319d54cb38087d2ca5152d739371fbc198/68747470733a2f2f7471646d2e6769746875622e696f2f696d672f6c6f676f2e676966"><img alt="Logo" src="https://camo.githubusercontent.com/3df47a29e4d76c9fa8ea437614a9f8319d54cb38087d2ca5152d739371fbc198/68747470733a2f2f7471646d2e6769746875622e696f2f696d672f6c6f676f2e676966" data-animated-image="" data-canonical-src="https://tqdm.github.io/img/logo.gif" style="max-width: 100%;"></a></p> <a name="user-content-tqdm"></a> <div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">tqdm</h2><a id="user-content-tqdm" class="anchor" aria-label="Permalink: tqdm" href="#tqdm"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto"><a href="https://pypi.org/project/tqdm" rel="nofollow"><img alt="Py-Versions" src="https://camo.githubusercontent.com/81e0211e02aef6098f5a6537a1633907b94d63f4acba8c56f5b4b64ecb36223c/68747470733a2f2f696d672e736869656c64732e696f2f707970692f707976657273696f6e732f7471646d2e7376673f6c6f676f3d707974686f6e266c6f676f436f6c6f723d7768697465" data-canonical-src="https://img.shields.io/pypi/pyversions/tqdm.svg?logo=python&amp;logoColor=white" style="max-width: 100%;"></a> <a href="https://tqdm.github.io/releases" rel="nofollow"><img alt="Versions" src="https://camo.githubusercontent.com/54d2bd4750ddaa629dc59ef76440c3d5085e57581bc97e13f140493e5ff1179e/68747470733a2f2f696d672e736869656c64732e696f2f707970692f762f7471646d2e737667" data-canonical-src="https://img.shields.io/pypi/v/tqdm.svg" style="max-width: 100%;"> </a> <a href="https://anaconda.org/conda-forge/tqdm" rel="nofollow"><img alt="Conda-Forge-Status" src="https://camo.githubusercontent.com/fed7eaa5e2507c06e57a4fd54f9390a2a3c672fec6a6d17e42855841b88edb3f/68747470733a2f2f696d672e736869656c64732e696f2f636f6e64612f762f636f6e64612d666f7267652f7471646d2e7376673f6c6162656c3d636f6e64612d666f726765266c6f676f3d636f6e64612d666f726765" data-canonical-src="https://img.shields.io/conda/v/conda-forge/tqdm.svg?label=conda-forge&amp;logo=conda-forge" style="max-width: 100%;"></a> <a href="https://hub.docker.com/r/tqdm/tqdm" rel="nofollow"><img alt="Docker" src="https://camo.githubusercontent.com/88972cbe4fa1cffce98c3abb59e83f4b033f4481260c8b79bc5c86f7c6d4177e/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f646f636b65722d70756c6c2d626c75652e7376673f6c6f676f3d646f636b6572266c6f676f436f6c6f723d7768697465" data-canonical-src="https://img.shields.io/badge/docker-pull-blue.svg?logo=docker&amp;logoColor=white" style="max-width: 100%;"></a> <a href="https://snapcraft.io/tqdm" rel="nofollow"><img alt="Snapcraft" src="https://camo.githubusercontent.com/03639514007136021a69dff73594b695aec6b6459d3752af8a1651fb930b99a2/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f736e61702d696e7374616c6c2d3832424541302e7376673f6c6f676f3d736e61706372616674" data-canonical-src="https://img.shields.io/badge/snap-install-82BEA0.svg?logo=snapcraft" style="max-width: 100%;"></a></p> <p dir="auto"><a href="https://github.com/tqdm/tqdm/actions/workflows/test.yml"><img alt="Build-Status" src="https://camo.githubusercontent.com/781334dbf5a7949806f8c7e1b4b31f7044d98995993b2870965ceceeae84b9d5/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f616374696f6e732f776f726b666c6f772f7374617475732f7471646d2f7471646d2f746573742e796d6c3f6272616e63683d6d6173746572266c6162656c3d7471646d266c6f676f3d476974487562" data-canonical-src="https://img.shields.io/github/actions/workflow/status/tqdm/tqdm/test.yml?branch=master&amp;label=tqdm&amp;logo=GitHub" style="max-width: 100%;"></a> <a href="https://coveralls.io/github/tqdm/tqdm" rel="nofollow"><img alt="Coverage-Status" src="https://camo.githubusercontent.com/0fb03064c8e6382d370f30e2a5b46785831be345d14a3e162ac853643455faf6/68747470733a2f2f696d672e736869656c64732e696f2f636f766572616c6c732f6769746875622f7471646d2f7471646d2f6d61737465723f6c6f676f3d636f766572616c6c73" data-canonical-src="https://img.shields.io/coveralls/github/tqdm/tqdm/master?logo=coveralls" style="max-width: 100%;"></a> <a href="https://codecov.io/gh/tqdm/tqdm" rel="nofollow"><img alt="Branch-Coverage-Status" src="https://camo.githubusercontent.com/ed0cc055181ac469872540e35430f4bf70edd969eaa2fef709dbf222aa1ddcbd/68747470733a2f2f636f6465636f762e696f2f67682f7471646d2f7471646d2f6272616e63682f6d61737465722f67726170682f62616467652e737667" data-canonical-src="https://codecov.io/gh/tqdm/tqdm/branch/master/graph/badge.svg" style="max-width: 100%;"> </a> <a href="https://www.codacy.com/gh/tqdm/tqdm/dashboard" rel="nofollow"><img alt="Codacy-Grade" src="https://camo.githubusercontent.com/6e3342d9a8306188181444ee67152594eb4655d1a873ea2db96230052300c47d/68747470733a2f2f6170702e636f646163792e636f6d2f70726f6a6563742f62616467652f47726164652f3366393635353731353938663434353439633738313866323963646366313737" data-canonical-src="https://app.codacy.com/project/badge/Grade/3f965571598f44549c7818f29cdcf177" style="max-width: 100%;"></a> <a href="https://libraries.io/pypi/tqdm" rel="nofollow"><img alt="Libraries-Rank" src="https://camo.githubusercontent.com/ff9053427c1560df8049e8bd0b43c0ac6fc7ca2d19e70c2b49dcf1ceddd482d5/68747470733a2f2f696d672e736869656c64732e696f2f6c6962726172696573696f2f736f7572636572616e6b2f707970692f7471646d2e7376673f6c6f676f3d6b6f64696e67266c6f676f436f6c6f723d7768697465" data-canonical-src="https://img.shields.io/librariesio/sourcerank/pypi/tqdm.svg?logo=koding&amp;logoColor=white" style="max-width: 100%;"></a> <a href="https://pepy.tech/project/tqdm" rel="nofollow"><img alt="PyPI-Downloads" src="https://camo.githubusercontent.com/7cf1d221d1808758fc2ff128ce463d3a124b9f883bd1497c54275cf21ca0f562/68747470733a2f2f696d672e736869656c64732e696f2f707970692f646d2f7471646d2e7376673f6c6162656c3d70797069253230646f776e6c6f616473266c6f676f3d50795049266c6f676f436f6c6f723d7768697465" data-canonical-src="https://img.shields.io/pypi/dm/tqdm.svg?label=pypi%20downloads&amp;logo=PyPI&amp;logoColor=white" style="max-width: 100%;"></a></p> <p dir="auto"><a href="https://raw.githubusercontent.com/tqdm/tqdm/master/LICENCE" rel="nofollow"><img alt="LICENCE" src="https://camo.githubusercontent.com/d5daff2dea068d33eefe608aff6c890e506dfdf1bb466adce907e76a192cd87a/68747470733a2f2f696d672e736869656c64732e696f2f707970692f6c2f7471646d2e737667" data-canonical-src="https://img.shields.io/pypi/l/tqdm.svg" style="max-width: 100%;"> </a> <a href="https://www.openhub.net/p/tqdm?ref=Thin+badge" rel="nofollow"><img alt="OpenHub-Status" src="https://camo.githubusercontent.com/ac14f272ab53a5192e3561e8a01bced574602f0e0bbb0fd91686bb712835139c/68747470733a2f2f7777772e6f70656e6875622e6e65742f702f7471646d2f776964676574732f70726f6a6563745f7468696e5f62616467653f666f726d61743d676966" data-canonical-src="https://www.openhub.net/p/tqdm/widgets/project_thin_badge?format=gif" style="max-width: 100%;"></a> <a href="https://mybinder.org/v2/gh/tqdm/tqdm/master?filepath=DEMO.ipynb" rel="nofollow"><img alt="binder-demo" src="https://camo.githubusercontent.com/7861126a7eb56440456a50288331e87b9604edbaa125354195637561fd400014/68747470733a2f2f6d7962696e6465722e6f72672f62616467655f6c6f676f2e737667" data-canonical-src="https://mybinder.org/badge_logo.svg" style="max-width: 100%;"> </a> <a href="https://github.com/vinta/awesome-python"><img alt="awesome-python" src="https://camo.githubusercontent.com/d8b2bde4796b67266f07c7a619f554c926ca4750d5d8861b4b740baaddc3fd1e/68747470733a2f2f617765736f6d652e72652f6d656e74696f6e65642d62616467652e737667" data-canonical-src="https://awesome.re/mentioned-badge.svg" style="max-width: 100%;"> </a></p> <p dir="auto"><code>tqdm</code> derives from the Arabic word <em>taqaddum</em> (تقدّم) which can mean "progress," and is an abbreviation for "I love you so much" in Spanish (<em>te quiero demasiado</em>).</p> <p dir="auto">Instantly make your loops show a smart progress meter - just wrap any iterable with <code>tqdm(iterable)</code>, and you're done!</p> <div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="from tqdm import tqdm for i in tqdm(range(10000)): ..."><pre><span class="pl-k">from</span> <span class="pl-s1">tqdm</span> <span class="pl-k">import</span> <span class="pl-s1">tqdm</span> <span class="pl-k">for</span> <span class="pl-s1">i</span> <span class="pl-c1">in</span> <span class="pl-en">tqdm</span>(<span class="pl-en">range</span>(<span class="pl-c1">10000</span>)): ...</pre></div> <p dir="auto"><code>76%|████████████████████████        | 7568/10000 [00:33&lt;00:10, 229.00it/s]</code></p> <p dir="auto"><code>trange(N)</code> can be also used as a convenient shortcut for <code>tqdm(range(N))</code>.</p> <dl> <dt><a target="_blank" rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/c61c0951f91c3687057e16a8c99decb33a1874786ec929c498449ab36213781e/68747470733a2f2f7471646d2e6769746875622e696f2f696d672f7471646d2e676966"><img alt="Screenshot" src="https://camo.githubusercontent.com/c61c0951f91c3687057e16a8c99decb33a1874786ec929c498449ab36213781e/68747470733a2f2f7471646d2e6769746875622e696f2f696d672f7471646d2e676966" data-animated-image="" data-canonical-src="https://tqdm.github.io/img/tqdm.gif" style="max-width: 100%;"></a></dt> <dd><a href="https://tqdm.github.io/video" rel="nofollow"><img alt="Video" src="https://camo.githubusercontent.com/50aab498d9b5bfd91306fbc8fe0661f36bf81d32d826bc58a9b4e7b93fcfd64f/68747470733a2f2f7471646d2e6769746875622e696f2f696d672f766964656f2e6a7067" data-canonical-src="https://tqdm.github.io/img/video.jpg" style="max-width: 100%;"></a> <a href="https://tqdm.github.io/PyData2019/slides.html" rel="nofollow"><img alt="Slides" src="https://camo.githubusercontent.com/985b4aa5f036a962164c1cb56d7cf16cc37e79fde8f5284ef7defbc133bf26fa/68747470733a2f2f7471646d2e6769746875622e696f2f696d672f736c696465732e6a7067" data-canonical-src="https://tqdm.github.io/img/slides.jpg" style="max-width: 100%;"></a> <a href="https://tqdm.github.io/merch" rel="nofollow"><img alt="Merch" src="https://camo.githubusercontent.com/6acfb97ad1dca0ceee6b49aae9af21547e1b9f3725b0705631469a0320032205/68747470733a2f2f7471646d2e6769746875622e696f2f696d672f6d657263682e6a7067" data-canonical-src="https://tqdm.github.io/img/merch.jpg" style="max-width: 100%;"></a></dd> </dl> <p dir="auto">It can also be executed as a module with pipes:</p> <div class="highlight highlight-source-shell notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="$ seq 9999999 | tqdm --bytes | wc -l 75.2MB [00:00, 217MB/s] 9999999 $ tar -zcf - docs/ | tqdm --bytes --total `du -sb docs/ | cut -f1` \ &gt; backup.tgz 32%|██████████▍ | 8.89G/27.9G [00:42&lt;01:31, 223MB/s]"><pre>$ seq 9999999 <span class="pl-k">|</span> tqdm --bytes <span class="pl-k">|</span> wc -l 75.2MB [00:00, 217MB/s] 9999999 $ tar -zcf - docs/ <span class="pl-k">|</span> tqdm --bytes --total <span class="pl-s"><span class="pl-pds">`</span>du -sb docs/ <span class="pl-k">|</span> cut -f1<span class="pl-pds">`</span></span> \ <span class="pl-k">&gt;</span> backup.tgz 32%<span class="pl-k">|</span>██████████▍ <span class="pl-k">|</span> 8.89G/27.9G [00:<span class="pl-k">42&lt;</span>01:31, 223MB/s]</pre></div> <p dir="auto">Overhead is low -- about 60ns per iteration (80ns with <code>tqdm.gui</code>), and is unit tested against performance regression. By comparison, the well-established <a href="https://github.com/niltonvolpato/python-progressbar">ProgressBar</a> has an 800ns/iter overhead.</p> <p dir="auto">In addition to its low overhead, <code>tqdm</code> uses smart algorithms to predict the remaining time and to skip unnecessary iteration displays, which allows for a negligible overhead in most cases.</p> <p dir="auto"><code>tqdm</code> works on any platform (Linux, Windows, Mac, FreeBSD, NetBSD, Solaris/SunOS), in any console or in a GUI, and is also friendly with IPython/Jupyter notebooks.</p> <p dir="auto"><code>tqdm</code> does not require any dependencies (not even <code>curses</code>!), just Python and an environment supporting <code>carriage return \r</code> and <code>line feed \n</code> control characters.</p> <hr> <div id="user-content-table-of-contents" dir="auto"> <p dir="auto">Table of contents</p> <ul dir="auto"> <li><a href="#installation" id="user-content-id1">Installation</a><ul dir="auto"> <li><a href="#latest-pypi-stable-release" id="user-content-id2">Latest PyPI stable release</a></li> <li><a href="#latest-development-release-on-github" id="user-content-id3">Latest development release on GitHub</a></li> <li><a href="#latest-conda-release" id="user-content-id4">Latest Conda release</a></li> <li><a href="#latest-snapcraft-release" id="user-content-id5">Latest Snapcraft release</a></li> <li><a href="#latest-docker-release" id="user-content-id6">Latest Docker release</a></li> <li><a href="#other" id="user-content-id7">Other</a></li> </ul> </li> <li><a href="#changelog" id="user-content-id8">Changelog</a></li> <li><a href="#usage" id="user-content-id9">Usage</a><ul dir="auto"> <li><a href="#iterable-based" id="user-content-id10">Iterable-based</a></li> <li><a href="#manual" id="user-content-id11">Manual</a></li> <li><a href="#module" id="user-content-id12">Module</a></li> </ul> </li> <li><a href="#faq-and-known-issues" id="user-content-id13">FAQ and Known Issues</a></li> <li><a href="#documentation" id="user-content-id14">Documentation</a><ul dir="auto"> <li><a href="#parameters" id="user-content-id15">Parameters</a></li> <li><a href="#extra-cli-options" id="user-content-id16">Extra CLI Options</a></li> <li><a href="#returns" id="user-content-id17">Returns</a></li> <li><a href="#convenience-functions" id="user-content-id18">Convenience Functions</a></li> <li><a href="#submodules" id="user-content-id19">Submodules</a><ul dir="auto"> <li><a href="#contrib" id="user-content-id20"><code>contrib</code></a></li> </ul> </li> </ul> </li> <li><a href="#examples-and-advanced-usage" id="user-content-id21">Examples and Advanced Usage</a><ul dir="auto"> <li><a href="#description-and-additional-stats" id="user-content-id22">Description and additional stats</a></li> <li><a href="#nested-progress-bars" id="user-content-id23">Nested progress bars</a></li> <li><a href="#hooks-and-callbacks" id="user-content-id24">Hooks and callbacks</a></li> <li><a href="#asyncio" id="user-content-id25"><code>asyncio</code></a></li> <li><a href="#pandas-integration" id="user-content-id26">Pandas Integration</a></li> <li><a href="#keras-integration" id="user-content-id27">Keras Integration</a></li> <li><a href="#dask-integration" id="user-content-id28">Dask Integration</a></li> <li><a href="#ipython-jupyter-integration" id="user-content-id29">IPython/Jupyter Integration</a></li> <li><a href="#custom-integration" id="user-content-id30">Custom Integration</a></li> <li><a href="#dynamic-monitor-meter" id="user-content-id31">Dynamic Monitor/Meter</a></li> <li><a href="#writing-messages" id="user-content-id32">Writing messages</a></li> <li><a href="#redirecting-writing" id="user-content-id33">Redirecting writing</a></li> <li><a href="#redirecting-logging" id="user-content-id34">Redirecting <code>logging</code></a></li> <li><a href="#monitoring-thread-intervals-and-miniters" id="user-content-id35">Monitoring thread, intervals and miniters</a></li> </ul> </li> <li><a href="#merch" id="user-content-id36">Merch</a></li> <li><a href="#contributions" id="user-content-id37">Contributions</a><ul dir="auto"> <li><a href="#ports-to-other-languages" id="user-content-id38">Ports to Other Languages</a></li> </ul> </li> <li><a href="#licence" id="user-content-id39">LICENCE</a></li> </ul> </div> <a name="user-content-installation"></a> <div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto"><a href="#table-of-contents">Installation</a></h3><a id="user-content-installation" class="anchor" aria-label="Permalink: Installation" href="#installation"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <a name="user-content-latest-pypi-stable-release"></a> <div class="markdown-heading" dir="auto"><h4 tabindex="-1" class="heading-element" dir="auto"><a href="#table-of-contents">Latest PyPI stable release</a></h4><a id="user-content-latest-pypi-stable-release" class="anchor" aria-label="Permalink: Latest PyPI stable release" href="#latest-pypi-stable-release"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto"><a href="https://tqdm.github.io/releases" rel="nofollow"><img alt="Versions" src="https://camo.githubusercontent.com/54d2bd4750ddaa629dc59ef76440c3d5085e57581bc97e13f140493e5ff1179e/68747470733a2f2f696d672e736869656c64732e696f2f707970692f762f7471646d2e737667" data-canonical-src="https://img.shields.io/pypi/v/tqdm.svg" style="max-width: 100%;"> </a> <a href="https://pepy.tech/project/tqdm" rel="nofollow"><img alt="PyPI-Downloads" src="https://camo.githubusercontent.com/7cf1d221d1808758fc2ff128ce463d3a124b9f883bd1497c54275cf21ca0f562/68747470733a2f2f696d672e736869656c64732e696f2f707970692f646d2f7471646d2e7376673f6c6162656c3d70797069253230646f776e6c6f616473266c6f676f3d50795049266c6f676f436f6c6f723d7768697465" data-canonical-src="https://img.shields.io/pypi/dm/tqdm.svg?label=pypi%20downloads&amp;logo=PyPI&amp;logoColor=white" style="max-width: 100%;"></a> <a href="https://github.com/tqdm/tqdm/network/dependents"><img alt="Libraries-Dependents" src="https://camo.githubusercontent.com/c4419e1885738b6afd8b9dc572520cef2d10fb78704d8733ee1f2225efd58ab8/68747470733a2f2f696d672e736869656c64732e696f2f6c6962726172696573696f2f646570656e64656e742d7265706f732f707970692f7471646d2e7376673f6c6f676f3d6b6f64696e67266c6f676f436f6c6f723d7768697465" data-canonical-src="https://img.shields.io/librariesio/dependent-repos/pypi/tqdm.svg?logo=koding&amp;logoColor=white" style="max-width: 100%;"></a></p> <div class="highlight highlight-source-shell notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="pip install tqdm"><pre>pip install tqdm</pre></div> <a name="user-content-latest-development-release-on-github"></a> <div class="markdown-heading" dir="auto"><h4 tabindex="-1" class="heading-element" dir="auto"><a href="#table-of-contents">Latest development release on GitHub</a></h4><a id="user-content-latest-development-release-on-github" class="anchor" aria-label="Permalink: Latest development release on GitHub" href="#latest-development-release-on-github"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto"><a href="https://github.com/tqdm/tqdm/releases"><img alt="GitHub-Status" src="https://camo.githubusercontent.com/46d6cf7e01e490dec10ed1e8d643d57b8230e626b8af6dacac6a50dbc5beb0fe/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f7461672f7471646d2f7471646d2e7376673f6d61784167653d3836343030266c6f676f3d676974687562266c6f676f436f6c6f723d7768697465" data-canonical-src="https://img.shields.io/github/tag/tqdm/tqdm.svg?maxAge=86400&amp;logo=github&amp;logoColor=white" style="max-width: 100%;"></a> <a href="https://github.com/tqdm/tqdm/stargazers"><img alt="GitHub-Stars" src="https://camo.githubusercontent.com/eb9e3ac5811c450733cb9964bcd8e3f2823258c4f02cd87a8279044f36fd4e71/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f73746172732f7471646d2f7471646d2e7376673f6c6f676f3d676974687562266c6f676f436f6c6f723d7768697465" data-canonical-src="https://img.shields.io/github/stars/tqdm/tqdm.svg?logo=github&amp;logoColor=white" style="max-width: 100%;"></a> <a href="https://github.com/tqdm/tqdm/graphs/commit-activity"><img alt="GitHub-Commits" src="https://camo.githubusercontent.com/074830ea80f6a475d636c6d370ea48ad0abd0bbd45fc65c8214bd089dbe1f18c/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f636f6d6d69742d61637469766974792f792f7471646d2f7471646d2e7376673f6c6f676f3d676974266c6f676f436f6c6f723d7768697465" data-canonical-src="https://img.shields.io/github/commit-activity/y/tqdm/tqdm.svg?logo=git&amp;logoColor=white" style="max-width: 100%;"></a> <a href="https://github.com/tqdm/tqdm/network"><img alt="GitHub-Forks" src="https://camo.githubusercontent.com/af32aa0e131f59b66540dd4ae10baeb92c764f4c45ae445f57f967e08d38ae79/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f666f726b732f7471646d2f7471646d2e7376673f6c6f676f3d676974687562266c6f676f436f6c6f723d7768697465" data-canonical-src="https://img.shields.io/github/forks/tqdm/tqdm.svg?logo=github&amp;logoColor=white" style="max-width: 100%;"></a> <a href="https://github.com/tqdm/tqdm/pulse"><img alt="GitHub-Updated" src="https://camo.githubusercontent.com/fe18abf6415b584e4fcb55d50390b5b9dcccf2906d13797ec6426595678f25ff/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6173742d636f6d6d69742f7471646d2f7471646d2f6d61737465722e7376673f6c6f676f3d676974687562266c6f676f436f6c6f723d7768697465266c6162656c3d707573686564" data-canonical-src="https://img.shields.io/github/last-commit/tqdm/tqdm/master.svg?logo=github&amp;logoColor=white&amp;label=pushed" style="max-width: 100%;"></a></p> <p dir="auto">Pull and install pre-release <code>devel</code> branch:</p> <div class="highlight highlight-source-shell notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="pip install &quot;git+https://github.com/tqdm/tqdm.git@devel#egg=tqdm&quot;"><pre>pip install <span class="pl-s"><span class="pl-pds">"</span>git+https://github.com/tqdm/tqdm.git@devel#egg=tqdm<span class="pl-pds">"</span></span></pre></div> <a name="user-content-latest-conda-release"></a> <div class="markdown-heading" dir="auto"><h4 tabindex="-1" class="heading-element" dir="auto"><a href="#table-of-contents">Latest Conda release</a></h4><a id="user-content-latest-conda-release" class="anchor" aria-label="Permalink: Latest Conda release" href="#latest-conda-release"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto"><a href="https://anaconda.org/conda-forge/tqdm" rel="nofollow"><img alt="Conda-Forge-Status" src="https://camo.githubusercontent.com/fed7eaa5e2507c06e57a4fd54f9390a2a3c672fec6a6d17e42855841b88edb3f/68747470733a2f2f696d672e736869656c64732e696f2f636f6e64612f762f636f6e64612d666f7267652f7471646d2e7376673f6c6162656c3d636f6e64612d666f726765266c6f676f3d636f6e64612d666f726765" data-canonical-src="https://img.shields.io/conda/v/conda-forge/tqdm.svg?label=conda-forge&amp;logo=conda-forge" style="max-width: 100%;"></a></p> <div class="highlight highlight-source-shell notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="conda install -c conda-forge tqdm"><pre>conda install -c conda-forge tqdm</pre></div> <a name="user-content-latest-snapcraft-release"></a> <div class="markdown-heading" dir="auto"><h4 tabindex="-1" class="heading-element" dir="auto"><a href="#table-of-contents">Latest Snapcraft release</a></h4><a id="user-content-latest-snapcraft-release" class="anchor" aria-label="Permalink: Latest Snapcraft release" href="#latest-snapcraft-release"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto"><a href="https://snapcraft.io/tqdm" rel="nofollow"><img alt="Snapcraft" src="https://camo.githubusercontent.com/03639514007136021a69dff73594b695aec6b6459d3752af8a1651fb930b99a2/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f736e61702d696e7374616c6c2d3832424541302e7376673f6c6f676f3d736e61706372616674" data-canonical-src="https://img.shields.io/badge/snap-install-82BEA0.svg?logo=snapcraft" style="max-width: 100%;"></a></p> <p dir="auto">There are 3 channels to choose from:</p> <div class="highlight highlight-source-shell notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="snap install tqdm # implies --stable, i.e. latest tagged release snap install tqdm --candidate # master branch snap install tqdm --edge # devel branch"><pre>snap install tqdm <span class="pl-c"><span class="pl-c">#</span> implies --stable, i.e. latest tagged release</span> snap install tqdm --candidate <span class="pl-c"><span class="pl-c">#</span> master branch</span> snap install tqdm --edge <span class="pl-c"><span class="pl-c">#</span> devel branch</span></pre></div> <p dir="auto">Note that <code>snap</code> binaries are purely for CLI use (not <code>import</code>-able), and automatically set up <code>bash</code> tab-completion.</p> <a name="user-content-latest-docker-release"></a> <div class="markdown-heading" dir="auto"><h4 tabindex="-1" class="heading-element" dir="auto"><a href="#table-of-contents">Latest Docker release</a></h4><a id="user-content-latest-docker-release" class="anchor" aria-label="Permalink: Latest Docker release" href="#latest-docker-release"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto"><a href="https://hub.docker.com/r/tqdm/tqdm" rel="nofollow"><img alt="Docker" src="https://camo.githubusercontent.com/88972cbe4fa1cffce98c3abb59e83f4b033f4481260c8b79bc5c86f7c6d4177e/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f646f636b65722d70756c6c2d626c75652e7376673f6c6f676f3d646f636b6572266c6f676f436f6c6f723d7768697465" data-canonical-src="https://img.shields.io/badge/docker-pull-blue.svg?logo=docker&amp;logoColor=white" style="max-width: 100%;"></a></p> <div class="highlight highlight-source-shell notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="docker pull tqdm/tqdm docker run -i --rm tqdm/tqdm --help"><pre>docker pull tqdm/tqdm docker run -i --rm tqdm/tqdm --help</pre></div> <a name="user-content-other"></a> <div class="markdown-heading" dir="auto"><h4 tabindex="-1" class="heading-element" dir="auto"><a href="#table-of-contents">Other</a></h4><a id="user-content-other" class="anchor" aria-label="Permalink: Other" href="#other"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto">There are other (unofficial) places where <code>tqdm</code> may be downloaded, particularly for CLI use:</p> <p dir="auto"><a href="https://repology.org/project/python:tqdm/versions" rel="nofollow"><img alt="Repology" src="https://camo.githubusercontent.com/d9be6fb339e19d404db849e014b46df5e97beeda1a0cf863eb90ec7ef8bb5149/68747470733a2f2f7265706f6c6f67792e6f72672f62616467652f74696e792d7265706f732f707974686f6e3a7471646d2e737667" data-canonical-src="https://repology.org/badge/tiny-repos/python:tqdm.svg" style="max-width: 100%;"> </a></p> <a name="user-content-changelog"></a> <div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto"><a href="#table-of-contents">Changelog</a></h3><a id="user-content-changelog" class="anchor" aria-label="Permalink: Changelog" href="#changelog"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto">The list of all changes is available either on GitHub's Releases: <a href="https://github.com/tqdm/tqdm/releases"><img alt="GitHub-Status" src="https://camo.githubusercontent.com/46d6cf7e01e490dec10ed1e8d643d57b8230e626b8af6dacac6a50dbc5beb0fe/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f7461672f7471646d2f7471646d2e7376673f6d61784167653d3836343030266c6f676f3d676974687562266c6f676f436f6c6f723d7768697465" data-canonical-src="https://img.shields.io/github/tag/tqdm/tqdm.svg?maxAge=86400&amp;logo=github&amp;logoColor=white" style="max-width: 100%;"></a>, on the <a href="https://github.com/tqdm/tqdm/wiki/Releases">wiki</a>, or on the <a href="https://tqdm.github.io/releases" rel="nofollow">website</a>.</p> <a name="user-content-usage"></a> <div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto"><a href="#table-of-contents">Usage</a></h3><a id="user-content-usage" class="anchor" aria-label="Permalink: Usage" href="#usage"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto"><code>tqdm</code> is very versatile and can be used in a number of ways. The three main ones are given below.</p> <a name="user-content-iterable-based"></a> <div class="markdown-heading" dir="auto"><h4 tabindex="-1" class="heading-element" dir="auto"><a href="#table-of-contents">Iterable-based</a></h4><a id="user-content-iterable-based" class="anchor" aria-label="Permalink: Iterable-based" href="#iterable-based"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto">Wrap <code>tqdm()</code> around any iterable:</p> <div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="from tqdm import tqdm from time import sleep text = &quot;&quot; for char in tqdm([&quot;a&quot;, &quot;b&quot;, &quot;c&quot;, &quot;d&quot;]): sleep(0.25) text = text + char"><pre><span class="pl-k">from</span> <span class="pl-s1">tqdm</span> <span class="pl-k">import</span> <span class="pl-s1">tqdm</span> <span class="pl-k">from</span> <span class="pl-s1">time</span> <span class="pl-k">import</span> <span class="pl-s1">sleep</span> <span class="pl-s1">text</span> <span class="pl-c1">=</span> <span class="pl-s">""</span> <span class="pl-k">for</span> <span class="pl-s1">char</span> <span class="pl-c1">in</span> <span class="pl-en">tqdm</span>([<span class="pl-s">"a"</span>, <span class="pl-s">"b"</span>, <span class="pl-s">"c"</span>, <span class="pl-s">"d"</span>]): <span class="pl-en">sleep</span>(<span class="pl-c1">0.25</span>) <span class="pl-s1">text</span> <span class="pl-c1">=</span> <span class="pl-s1">text</span> <span class="pl-c1">+</span> <span class="pl-s1">char</span></pre></div> <p dir="auto"><code>trange(i)</code> is a special optimised instance of <code>tqdm(range(i))</code>:</p> <div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="from tqdm import trange for i in trange(100): sleep(0.01)"><pre><span class="pl-k">from</span> <span class="pl-s1">tqdm</span> <span class="pl-k">import</span> <span class="pl-s1">trange</span> <span class="pl-k">for</span> <span class="pl-s1">i</span> <span class="pl-c1">in</span> <span class="pl-en">trange</span>(<span class="pl-c1">100</span>): <span class="pl-en">sleep</span>(<span class="pl-c1">0.01</span>)</pre></div> <p dir="auto">Instantiation outside of the loop allows for manual control over <code>tqdm()</code>:</p> <div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="pbar = tqdm([&quot;a&quot;, &quot;b&quot;, &quot;c&quot;, &quot;d&quot;]) for char in pbar: sleep(0.25) pbar.set_description(&quot;Processing %s&quot; % char)"><pre><span class="pl-s1">pbar</span> <span class="pl-c1">=</span> <span class="pl-en">tqdm</span>([<span class="pl-s">"a"</span>, <span class="pl-s">"b"</span>, <span class="pl-s">"c"</span>, <span class="pl-s">"d"</span>]) <span class="pl-k">for</span> <span class="pl-s1">char</span> <span class="pl-c1">in</span> <span class="pl-s1">pbar</span>: <span class="pl-en">sleep</span>(<span class="pl-c1">0.25</span>) <span class="pl-s1">pbar</span>.<span class="pl-c1">set_description</span>(<span class="pl-s">"Processing %s"</span> <span class="pl-c1">%</span> <span class="pl-s1">char</span>)</pre></div> <a name="user-content-manual"></a> <div class="markdown-heading" dir="auto"><h4 tabindex="-1" class="heading-element" dir="auto"><a href="#table-of-contents">Manual</a></h4><a id="user-content-manual" class="anchor" aria-label="Permalink: Manual" href="#manual"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto">Manual control of <code>tqdm()</code> updates using a <code>with</code> statement:</p> <div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="with tqdm(total=100) as pbar: for i in range(10): sleep(0.1) pbar.update(10)"><pre><span class="pl-k">with</span> <span class="pl-en">tqdm</span>(<span class="pl-s1">total</span><span class="pl-c1">=</span><span class="pl-c1">100</span>) <span class="pl-k">as</span> <span class="pl-s1">pbar</span>: <span class="pl-k">for</span> <span class="pl-s1">i</span> <span class="pl-c1">in</span> <span class="pl-en">range</span>(<span class="pl-c1">10</span>): <span class="pl-en">sleep</span>(<span class="pl-c1">0.1</span>) <span class="pl-s1">pbar</span>.<span class="pl-c1">update</span>(<span class="pl-c1">10</span>)</pre></div> <p dir="auto">If the optional variable <code>total</code> (or an iterable with <code>len()</code>) is provided, predictive stats are displayed.</p> <p dir="auto"><code>with</code> is also optional (you can just assign <code>tqdm()</code> to a variable, but in this case don't forget to <code>del</code> or <code>close()</code> at the end:</p> <div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="pbar = tqdm(total=100) for i in range(10): sleep(0.1) pbar.update(10) pbar.close()"><pre><span class="pl-s1">pbar</span> <span class="pl-c1">=</span> <span class="pl-en">tqdm</span>(<span class="pl-s1">total</span><span class="pl-c1">=</span><span class="pl-c1">100</span>) <span class="pl-k">for</span> <span class="pl-s1">i</span> <span class="pl-c1">in</span> <span class="pl-en">range</span>(<span class="pl-c1">10</span>): <span class="pl-en">sleep</span>(<span class="pl-c1">0.1</span>) <span class="pl-s1">pbar</span>.<span class="pl-c1">update</span>(<span class="pl-c1">10</span>) <span class="pl-s1">pbar</span>.<span class="pl-c1">close</span>()</pre></div> <a name="user-content-module"></a> <div class="markdown-heading" dir="auto"><h4 tabindex="-1" class="heading-element" dir="auto"><a href="#table-of-contents">Module</a></h4><a id="user-content-module" class="anchor" aria-label="Permalink: Module" href="#module"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto">Perhaps the most wonderful use of <code>tqdm</code> is in a script or on the command line. Simply inserting <code>tqdm</code> (or <code>python -m tqdm</code>) between pipes will pass through all <code>stdin</code> to <code>stdout</code> while printing progress to <code>stderr</code>.</p> <p dir="auto">The example below demonstrate counting the number of lines in all Python files in the current directory, with timing information included.</p> <div class="highlight highlight-source-shell notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="$ time find . -name '*.py' -type f -exec cat \{} \; | wc -l 857365 real 0m3.458s user 0m0.274s sys 0m3.325s $ time find . -name '*.py' -type f -exec cat \{} \; | tqdm | wc -l 857366it [00:03, 246471.31it/s] 857365 real 0m3.585s user 0m0.862s sys 0m3.358s"><pre>$ <span class="pl-k">time</span> find <span class="pl-c1">.</span> -name <span class="pl-s"><span class="pl-pds">'</span>*.py<span class="pl-pds">'</span></span> -type f -exec cat <span class="pl-cce">\{</span>} <span class="pl-cce">\;</span> <span class="pl-k">|</span> wc -l 857365 real 0m3.458s user 0m0.274s sys 0m3.325s $ <span class="pl-k">time</span> find <span class="pl-c1">.</span> -name <span class="pl-s"><span class="pl-pds">'</span>*.py<span class="pl-pds">'</span></span> -type f -exec cat <span class="pl-cce">\{</span>} <span class="pl-cce">\;</span> <span class="pl-k">|</span> tqdm <span class="pl-k">|</span> wc -l 857366it [00:03, 246471.31it/s] 857365 real 0m3.585s user 0m0.862s sys 0m3.358s</pre></div> <p dir="auto">Note that the usual arguments for <code>tqdm</code> can also be specified.</p> <div class="highlight highlight-source-shell notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="$ find . -name '*.py' -type f -exec cat \{} \; | tqdm --unit loc --unit_scale --total 857366 &gt;&gt; /dev/null 100%|█████████████████████████████████| 857K/857K [00:04&lt;00:00, 246Kloc/s]"><pre>$ find <span class="pl-c1">.</span> -name <span class="pl-s"><span class="pl-pds">'</span>*.py<span class="pl-pds">'</span></span> -type f -exec cat <span class="pl-cce">\{</span>} <span class="pl-cce">\;</span> <span class="pl-k">|</span> tqdm --unit loc --unit_scale --total 857366 <span class="pl-k">&gt;&gt;</span> /dev/null 100%<span class="pl-k">|</span>█████████████████████████████████<span class="pl-k">|</span> 857K/857K [00:<span class="pl-k">04&lt;</span>00:00, 246Kloc/s]</pre></div> <p dir="auto">Backing up a large directory?</p> <div class="highlight highlight-source-shell notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="$ tar -zcf - docs/ | tqdm --bytes --total `du -sb docs/ | cut -f1` \ &gt; backup.tgz 44%|██████████████▊ | 153M/352M [00:14&lt;00:18, 11.0MB/s]"><pre>$ tar -zcf - docs/ <span class="pl-k">|</span> tqdm --bytes --total <span class="pl-s"><span class="pl-pds">`</span>du -sb docs/ <span class="pl-k">|</span> cut -f1<span class="pl-pds">`</span></span> \ <span class="pl-k">&gt;</span> backup.tgz 44%<span class="pl-k">|</span>██████████████▊ <span class="pl-k">|</span> 153M/352M [00:<span class="pl-k">14&lt;</span>00:18, 11.0MB/s]</pre></div> <p dir="auto">This can be beautified further:</p> <div class="highlight highlight-source-shell notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="$ BYTES=$(du -sb docs/ | cut -f1) $ tar -cf - docs/ \ | tqdm --bytes --total &quot;$BYTES&quot; --desc Processing | gzip \ | tqdm --bytes --total &quot;$BYTES&quot; --desc Compressed --position 1 \ &gt; ~/backup.tgz Processing: 100%|██████████████████████| 352M/352M [00:14&lt;00:00, 30.2MB/s] Compressed: 42%|█████████▎ | 148M/352M [00:14&lt;00:19, 10.9MB/s]"><pre>$ BYTES=<span class="pl-s"><span class="pl-pds">$(</span>du -sb docs/ <span class="pl-k">|</span> cut -f1<span class="pl-pds">)</span></span> $ tar -cf - docs/ \ <span class="pl-k">|</span> tqdm --bytes --total <span class="pl-s"><span class="pl-pds">"</span><span class="pl-smi">$BYTES</span><span class="pl-pds">"</span></span> --desc Processing <span class="pl-k">|</span> gzip \ <span class="pl-k">|</span> tqdm --bytes --total <span class="pl-s"><span class="pl-pds">"</span><span class="pl-smi">$BYTES</span><span class="pl-pds">"</span></span> --desc Compressed --position 1 \ <span class="pl-k">&gt;</span> <span class="pl-k">~</span>/backup.tgz Processing: 100%<span class="pl-k">|</span>██████████████████████<span class="pl-k">|</span> 352M/352M [00:<span class="pl-k">14&lt;</span>00:00, 30.2MB/s] Compressed: 42%<span class="pl-k">|</span>█████████▎ <span class="pl-k">|</span> 148M/352M [00:<span class="pl-k">14&lt;</span>00:19, 10.9MB/s]</pre></div> <p dir="auto">Or done on a file level using 7-zip:</p> <div class="highlight highlight-source-shell notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="$ 7z a -bd -r backup.7z docs/ | grep Compressing \ | tqdm --total $(find docs/ -type f | wc -l) --unit files \ | grep -v Compressing 100%|██████████████████████████▉| 15327/15327 [01:00&lt;00:00, 712.96files/s]"><pre>$ 7z a -bd -r backup.7z docs/ <span class="pl-k">|</span> grep Compressing \ <span class="pl-k">|</span> tqdm --total <span class="pl-s"><span class="pl-pds">$(</span>find docs/ -type f <span class="pl-k">|</span> wc -l<span class="pl-pds">)</span></span> --unit files \ <span class="pl-k">|</span> grep -v Compressing 100%<span class="pl-k">|</span>██████████████████████████▉<span class="pl-k">|</span> 15327/15327 [01:<span class="pl-k">00&lt;</span>00:00, 712.96files/s]</pre></div> <p dir="auto">Pre-existing CLI programs already outputting basic progress information will benefit from <code>tqdm</code>'s <code>--update</code> and <code>--update_to</code> flags:</p> <div class="highlight highlight-source-shell notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="$ seq 3 0.1 5 | tqdm --total 5 --update_to --null 100%|████████████████████████████████████| 5.0/5 [00:00&lt;00:00, 9673.21it/s] $ seq 10 | tqdm --update --null # 1 + 2 + ... + 10 = 55 iterations 55it [00:00, 90006.52it/s]"><pre>$ seq 3 0.1 5 <span class="pl-k">|</span> tqdm --total 5 --update_to --null 100%<span class="pl-k">|</span>████████████████████████████████████<span class="pl-k">|</span> 5.0/5 [00:<span class="pl-k">00&lt;</span>00:00, 9673.21it/s] $ seq 10 <span class="pl-k">|</span> tqdm --update --null <span class="pl-c"><span class="pl-c">#</span> 1 + 2 + ... + 10 = 55 iterations</span> 55it [00:00, 90006.52it/s]</pre></div> <a name="user-content-faq-and-known-issues"></a> <div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto"><a href="#table-of-contents">FAQ and Known Issues</a></h3><a id="user-content-faq-and-known-issues" class="anchor" aria-label="Permalink: FAQ and Known Issues" href="#faq-and-known-issues"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto"><a href="https://github.com/tqdm/tqdm/issues?q="><img alt="GitHub-Issues" src="https://camo.githubusercontent.com/70e2e8e5918a84706aef777108b1b2f746905dbde5632e31dd6a6995ea606b92/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6973737565732d636c6f7365642f7471646d2f7471646d2e7376673f6c6f676f3d676974687562266c6f676f436f6c6f723d7768697465" data-canonical-src="https://img.shields.io/github/issues-closed/tqdm/tqdm.svg?logo=github&amp;logoColor=white" style="max-width: 100%;"></a></p> <p dir="auto">The most common issues relate to excessive output on multiple lines, instead of a neat one-line progress bar.</p> <ul dir="auto"> <li>Consoles in general: require support for carriage return (<code>CR</code>, <code>\r</code>).<ul dir="auto"> <li>Some cloud logging consoles which don't support <code>\r</code> properly (<a href="https://github.com/tqdm/tqdm/issues/966" data-hovercard-type="issue" data-hovercard-url="/tqdm/tqdm/issues/966/hovercard">cloudwatch</a>, <a href="https://github.com/tqdm/tqdm/issues/1319" data-hovercard-type="issue" data-hovercard-url="/tqdm/tqdm/issues/1319/hovercard">K8s</a>) may benefit from <code>export TQDM_POSITION=-1</code>.</li> </ul> </li> <li>Nested progress bars:<ul dir="auto"> <li>Consoles in general: require support for moving cursors up to the previous line. For example, <a href="https://github.com/tqdm/tqdm/issues/191#issuecomment-230168030" data-hovercard-type="issue" data-hovercard-url="/tqdm/tqdm/issues/191/hovercard">IDLE</a>, <a href="https://github.com/tqdm/tqdm/issues/254" data-hovercard-type="issue" data-hovercard-url="/tqdm/tqdm/issues/254/hovercard">ConEmu</a> and <a href="https://github.com/tqdm/tqdm/issues/203" data-hovercard-type="issue" data-hovercard-url="/tqdm/tqdm/issues/203/hovercard">PyCharm</a> (also <a href="https://github.com/tqdm/tqdm/issues/208" data-hovercard-type="issue" data-hovercard-url="/tqdm/tqdm/issues/208/hovercard">here</a>, <a href="https://github.com/tqdm/tqdm/issues/307" data-hovercard-type="issue" data-hovercard-url="/tqdm/tqdm/issues/307/hovercard">here</a>, and <a href="https://github.com/tqdm/tqdm/issues/454#issuecomment-335416815" data-hovercard-type="issue" data-hovercard-url="/tqdm/tqdm/issues/454/hovercard">here</a>) lack full support.</li> <li>Windows: additionally may require the Python module <code>colorama</code> to ensure nested bars stay within their respective lines.</li> </ul> </li> <li>Unicode:<ul dir="auto"> <li>Environments which report that they support unicode will have solid smooth progressbars. The fallback is an <code>ascii</code>-only bar.</li> <li>Windows consoles often only partially support unicode and thus <a href="https://github.com/tqdm/tqdm/issues/454#issuecomment-335416815" data-hovercard-type="issue" data-hovercard-url="/tqdm/tqdm/issues/454/hovercard">often require explicit ascii=True</a> (also <a href="https://github.com/tqdm/tqdm/issues/499" data-hovercard-type="issue" data-hovercard-url="/tqdm/tqdm/issues/499/hovercard">here</a>). This is due to either normal-width unicode characters being incorrectly displayed as "wide", or some unicode characters not rendering.</li> </ul> </li> <li>Wrapping generators:<ul dir="auto"> <li>Generator wrapper functions tend to hide the length of iterables. <code>tqdm</code> does not.</li> <li>Replace <code>tqdm(enumerate(...))</code> with <code>enumerate(tqdm(...))</code> or <code>tqdm(enumerate(x), total=len(x), ...)</code>. The same applies to <code>numpy.ndenumerate</code>.</li> <li>Replace <code>tqdm(zip(a, b))</code> with <code>zip(tqdm(a), b)</code> or even <code>zip(tqdm(a), tqdm(b))</code>.</li> <li>The same applies to <code>itertools</code>.</li> <li>Some useful convenience functions can be found under <code>tqdm.contrib</code>.</li> </ul> </li> <li><a href="https://github.com/tqdm/tqdm/issues/771" data-hovercard-type="issue" data-hovercard-url="/tqdm/tqdm/issues/771/hovercard">No intermediate output in docker-compose</a>: use <code>docker-compose run</code> instead of <code>docker-compose up</code> and <code>tty: true</code>.</li> <li>Overriding defaults via environment variables: e.g. in CI/cloud jobs, <code>export TQDM_MININTERVAL=5</code> to avoid log spam. This override logic is handled by the <code>tqdm.utils.envwrap</code> decorator (useful independent of <code>tqdm</code>).</li> </ul> <p dir="auto">If you come across any other difficulties, browse and file <a href="https://github.com/tqdm/tqdm/issues?q="><img alt="GitHub-Issues" src="https://camo.githubusercontent.com/70e2e8e5918a84706aef777108b1b2f746905dbde5632e31dd6a6995ea606b92/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6973737565732d636c6f7365642f7471646d2f7471646d2e7376673f6c6f676f3d676974687562266c6f676f436f6c6f723d7768697465" data-canonical-src="https://img.shields.io/github/issues-closed/tqdm/tqdm.svg?logo=github&amp;logoColor=white" style="max-width: 100%;"></a>.</p> <a name="user-content-documentation"></a> <div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto"><a href="#table-of-contents">Documentation</a></h3><a id="user-content-documentation" class="anchor" aria-label="Permalink: Documentation" href="#documentation"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto"><a href="https://pypi.org/project/tqdm" rel="nofollow"><img alt="Py-Versions" src="https://camo.githubusercontent.com/81e0211e02aef6098f5a6537a1633907b94d63f4acba8c56f5b4b64ecb36223c/68747470733a2f2f696d672e736869656c64732e696f2f707970692f707976657273696f6e732f7471646d2e7376673f6c6f676f3d707974686f6e266c6f676f436f6c6f723d7768697465" data-canonical-src="https://img.shields.io/pypi/pyversions/tqdm.svg?logo=python&amp;logoColor=white" style="max-width: 100%;"></a> <a href="https://cgi.cdcl.ml/hits?q=tqdm&amp;a=plot&amp;r=https://github.com/tqdm/tqdm&amp;l=https://tqdm.github.io/img/favicon.png&amp;f=https://tqdm.github.io/img/logo.gif&amp;style=social" rel="nofollow"><img alt="README-Hits" src="https://camo.githubusercontent.com/05dba70319f22e964483c4ab94f37757d0d95698320a34f53286620788b7ae54/68747470733a2f2f6367692e6364636c2e6d6c2f686974733f713d7471646d267374796c653d736f6369616c26723d68747470733a2f2f6769746875622e636f6d2f7471646d2f7471646d266c3d68747470733a2f2f7471646d2e6769746875622e696f2f696d672f66617669636f6e2e706e6726663d68747470733a2f2f7471646d2e6769746875622e696f2f696d672f6c6f676f2e676966" data-canonical-src="https://cgi.cdcl.ml/hits?q=tqdm&amp;style=social&amp;r=https://github.com/tqdm/tqdm&amp;l=https://tqdm.github.io/img/favicon.png&amp;f=https://tqdm.github.io/img/logo.gif" style="max-width: 100%;"></a> (Since 19 May 2016)</p> <div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="class tqdm(): &quot;&quot;&quot; Decorate an iterable object, returning an iterator which acts exactly like the original iterable, but prints a dynamically updating progressbar every time a value is requested. &quot;&quot;&quot; @envwrap(&quot;TQDM_&quot;) # override defaults via env vars def __init__(self, iterable=None, desc=None, total=None, leave=True, file=None, ncols=None, mininterval=0.1, maxinterval=10.0, miniters=None, ascii=None, disable=False, unit='it', unit_scale=False, dynamic_ncols=False, smoothing=0.3, bar_format=None, initial=0, position=None, postfix=None, unit_divisor=1000, write_bytes=False, lock_args=None, nrows=None, colour=None, delay=0):"><pre><span class="pl-k">class</span> <span class="pl-s1">tqdm</span>(): <span class="pl-s">"""</span> <span class="pl-s"> Decorate an iterable object, returning an iterator which acts exactly</span> <span class="pl-s"> like the original iterable, but prints a dynamically updating</span> <span class="pl-s"> progressbar every time a value is requested.</span> <span class="pl-s"> """</span> <span class="pl-en">@<span class="pl-en">envwrap</span>(<span class="pl-s">"TQDM_"</span>) <span class="pl-c"># override defaults via env vars</span></span> <span class="pl-k">def</span> <span class="pl-en">__init__</span>(<span class="pl-s1">self</span>, <span class="pl-s1">iterable</span><span class="pl-c1">=</span><span class="pl-c1">None</span>, <span class="pl-s1">desc</span><span class="pl-c1">=</span><span class="pl-c1">None</span>, <span class="pl-s1">total</span><span class="pl-c1">=</span><span class="pl-c1">None</span>, <span class="pl-s1">leave</span><span class="pl-c1">=</span><span class="pl-c1">True</span>, <span class="pl-s1">file</span><span class="pl-c1">=</span><span class="pl-c1">None</span>, <span class="pl-s1">ncols</span><span class="pl-c1">=</span><span class="pl-c1">None</span>, <span class="pl-s1">mininterval</span><span class="pl-c1">=</span><span class="pl-c1">0.1</span>, <span class="pl-s1">maxinterval</span><span class="pl-c1">=</span><span class="pl-c1">10.0</span>, <span class="pl-s1">miniters</span><span class="pl-c1">=</span><span class="pl-c1">None</span>, <span class="pl-s1">ascii</span><span class="pl-c1">=</span><span class="pl-c1">None</span>, <span class="pl-s1">disable</span><span class="pl-c1">=</span><span class="pl-c1">False</span>, <span class="pl-s1">unit</span><span class="pl-c1">=</span><span class="pl-s">'it'</span>, <span class="pl-s1">unit_scale</span><span class="pl-c1">=</span><span class="pl-c1">False</span>, <span class="pl-s1">dynamic_ncols</span><span class="pl-c1">=</span><span class="pl-c1">False</span>, <span class="pl-s1">smoothing</span><span class="pl-c1">=</span><span class="pl-c1">0.3</span>, <span class="pl-s1">bar_format</span><span class="pl-c1">=</span><span class="pl-c1">None</span>, <span class="pl-s1">initial</span><span class="pl-c1">=</span><span class="pl-c1">0</span>, <span class="pl-s1">position</span><span class="pl-c1">=</span><span class="pl-c1">None</span>, <span class="pl-s1">postfix</span><span class="pl-c1">=</span><span class="pl-c1">None</span>, <span class="pl-s1">unit_divisor</span><span class="pl-c1">=</span><span class="pl-c1">1000</span>, <span class="pl-s1">write_bytes</span><span class="pl-c1">=</span><span class="pl-c1">False</span>, <span class="pl-s1">lock_args</span><span class="pl-c1">=</span><span class="pl-c1">None</span>, <span class="pl-s1">nrows</span><span class="pl-c1">=</span><span class="pl-c1">None</span>, <span class="pl-s1">colour</span><span class="pl-c1">=</span><span class="pl-c1">None</span>, <span class="pl-s1">delay</span><span class="pl-c1">=</span><span class="pl-c1">0</span>):</pre></div> <a name="user-content-parameters"></a> <div class="markdown-heading" dir="auto"><h4 tabindex="-1" class="heading-element" dir="auto"><a href="#table-of-contents">Parameters</a></h4><a id="user-content-parameters" class="anchor" aria-label="Permalink: Parameters" href="#parameters"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <ul dir="auto"> <li><dl> <dt>iterable <span>:</span> <span>iterable, optional</span></dt> <dd><p dir="auto">Iterable to decorate with a progressbar. Leave blank to manually manage the updates.</p> </dd> </dl> </li> <li><dl> <dt>desc <span>:</span> <span>str, optional</span></dt> <dd><p dir="auto">Prefix for the progressbar.</p> </dd> </dl> </li> <li><dl> <dt>total <span>:</span> <span>int or float, optional</span></dt> <dd><p dir="auto">The number of expected iterations. If unspecified, len(iterable) is used if possible. If float("inf") or as a last resort, only basic progress statistics are displayed (no ETA, no progressbar). If <code>gui</code> is True and this parameter needs subsequent updating, specify an initial arbitrary large positive number, e.g. 9e9.</p> </dd> </dl> </li> <li><dl> <dt>leave <span>:</span> <span>bool, optional</span></dt> <dd><p dir="auto">If [default: True], keeps all traces of the progressbar upon termination of iteration. If <code>None</code>, will leave only if <code>position</code> is <code>0</code>.</p> </dd> </dl> </li> <li><dl> <dt>file <span>:</span> <span><code>io.TextIOWrapper</code> or <code>io.StringIO</code>, optional</span></dt> <dd><p dir="auto">Specifies where to output the progress messages (default: sys.stderr). Uses <code>file.write(str)</code> and <code>file.flush()</code> methods. For encoding, see <code>write_bytes</code>.</p> </dd> </dl> </li> <li><dl> <dt>ncols <span>:</span> <span>int, optional</span></dt> <dd><p dir="auto">The width of the entire output message. If specified, dynamically resizes the progressbar to stay within this bound. If unspecified, attempts to use environment width. The fallback is a meter width of 10 and no limit for the counter and statistics. If 0, will not print any meter (only stats).</p> </dd> </dl> </li> <li><dl> <dt>mininterval <span>:</span> <span>float, optional</span></dt> <dd><p dir="auto">Minimum progress display update interval [default: 0.1] seconds.</p> </dd> </dl> </li> <li><dl> <dt>maxinterval <span>:</span> <span>float, optional</span></dt> <dd><p dir="auto">Maximum progress display update interval [default: 10] seconds. Automatically adjusts <code>miniters</code> to correspond to <code>mininterval</code> after long display update lag. Only works if <code>dynamic_miniters</code> or monitor thread is enabled.</p> </dd> </dl> </li> <li><dl> <dt>miniters <span>:</span> <span>int or float, optional</span></dt> <dd><p dir="auto">Minimum progress display update interval, in iterations. If 0 and <code>dynamic_miniters</code>, will automatically adjust to equal <code>mininterval</code> (more CPU efficient, good for tight loops). If &gt; 0, will skip display of specified number of iterations. Tweak this and <code>mininterval</code> to get very efficient loops. If your progress is erratic with both fast and slow iterations (network, skipping items, etc) you should set miniters=1.</p> </dd> </dl> </li> <li><dl> <dt>ascii <span>:</span> <span>bool or str, optional</span></dt> <dd><p dir="auto">If unspecified or False, use unicode (smooth blocks) to fill the meter. The fallback is to use ASCII characters " 123456789#".</p> </dd> </dl> </li> <li><dl> <dt>disable <span>:</span> <span>bool, optional</span></dt> <dd><p dir="auto">Whether to disable the entire progressbar wrapper [default: False]. If set to None, disable on non-TTY.</p> </dd> </dl> </li> <li><dl> <dt>unit <span>:</span> <span>str, optional</span></dt> <dd><p dir="auto">String that will be used to define the unit of each iteration [default: it].</p> </dd> </dl> </li> <li><dl> <dt>unit_scale <span>:</span> <span>bool or int or float, optional</span></dt> <dd><p dir="auto">If 1 or True, the number of iterations will be reduced/scaled automatically and a metric prefix following the International System of Units standard will be added (kilo, mega, etc.) [default: False]. If any other non-zero number, will scale <code>total</code> and <code>n</code>.</p> </dd> </dl> </li> <li><dl> <dt>dynamic_ncols <span>:</span> <span>bool, optional</span></dt> <dd><p dir="auto">If set, constantly alters <code>ncols</code> and <code>nrows</code> to the environment (allowing for window resizes) [default: False].</p> </dd> </dl> </li> <li><dl> <dt>smoothing <span>:</span> <span>float, optional</span></dt> <dd><p dir="auto">Exponential moving average smoothing factor for speed estimates (ignored in GUI mode). Ranges from 0 (average speed) to 1 (current/instantaneous speed) [default: 0.3].</p> </dd> </dl> </li> <li><dl> <dt>bar_format <span>:</span> <span>str, optional</span></dt> <dd><p dir="auto">Specify a custom bar string formatting. May impact performance. [default: '{l_bar}{bar}{r_bar}'], where l_bar='{desc}: {percentage:3.0f}%|' and r_bar='| {n_fmt}/{total_fmt} [{elapsed}&lt;{remaining}, ' '{rate_fmt}{postfix}]' Possible vars: l_bar, bar, r_bar, n, n_fmt, total, total_fmt, percentage, elapsed, elapsed_s, ncols, nrows, desc, unit, rate, rate_fmt, rate_noinv, rate_noinv_fmt, rate_inv, rate_inv_fmt, postfix, unit_divisor, remaining, remaining_s, eta. Note that a trailing ": " is automatically removed after {desc} if the latter is empty.</p> </dd> </dl> </li> <li><dl> <dt>initial <span>:</span> <span>int or float, optional</span></dt> <dd><p dir="auto">The initial counter value. Useful when restarting a progress bar [default: 0]. If using float, consider specifying <code>{n:.3f}</code> or similar in <code>bar_format</code>, or specifying <code>unit_scale</code>.</p> </dd> </dl> </li> <li><dl> <dt>position <span>:</span> <span>int, optional</span></dt> <dd><p dir="auto">Specify the line offset to print this bar (starting from 0) Automatic if unspecified. Useful to manage multiple bars at once (eg, from threads).</p> </dd> </dl> </li> <li><dl> <dt>postfix <span>:</span> <span>dict or <code>*</code>, optional</span></dt> <dd><p dir="auto">Specify additional stats to display at the end of the bar. Calls <code>set_postfix(**postfix)</code> if possible (dict).</p> </dd> </dl> </li> <li><dl> <dt>unit_divisor <span>:</span> <span>float, optional</span></dt> <dd><p dir="auto">[default: 1000], ignored unless <code>unit_scale</code> is True.</p> </dd> </dl> </li> <li><dl> <dt>write_bytes <span>:</span> <span>bool, optional</span></dt> <dd><p dir="auto">Whether to write bytes. If (default: False) will write unicode.</p> </dd> </dl> </li> <li><dl> <dt>lock_args <span>:</span> <span>tuple, optional</span></dt> <dd><p dir="auto">Passed to <code>refresh</code> for intermediate output (initialisation, iterating, and updating).</p> </dd> </dl> </li> <li><dl> <dt>nrows <span>:</span> <span>int, optional</span></dt> <dd><p dir="auto">The screen height. If specified, hides nested bars outside this bound. If unspecified, attempts to use environment height. The fallback is 20.</p> </dd> </dl> </li> <li><dl> <dt>colour <span>:</span> <span>str, optional</span></dt> <dd><p dir="auto">Bar colour (e.g. 'green', '#00ff00').</p> </dd> </dl> </li> <li><dl> <dt>delay <span>:</span> <span>float, optional</span></dt> <dd><p dir="auto">Don't display until [default: 0] seconds have elapsed.</p> </dd> </dl> </li> </ul> <a name="user-content-extra-cli-options"></a> <div class="markdown-heading" dir="auto"><h4 tabindex="-1" class="heading-element" dir="auto"><a href="#table-of-contents">Extra CLI Options</a></h4><a id="user-content-extra-cli-options" class="anchor" aria-label="Permalink: Extra CLI Options" href="#extra-cli-options"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <ul dir="auto"> <li><dl> <dt>delim <span>:</span> <span>chr, optional</span></dt> <dd>Delimiting character [default: 'n']. Use '0' for null. N.B.: on Windows systems, Python converts 'n' to 'rn'.</dd> </dl> </li> <li><dl> <dt>buf_size <span>:</span> <span>int, optional</span></dt> <dd>String buffer size in bytes [default: 256] used when <code>delim</code> is specified.</dd> </dl> </li> <li><dl> <dt>bytes <span>:</span> <span>bool, optional</span></dt> <dd>If true, will count bytes, ignore <code>delim</code>, and default <code>unit_scale</code> to True, <code>unit_divisor</code> to 1024, and <code>unit</code> to 'B'.</dd> </dl> </li> <li><dl> <dt>tee <span>:</span> <span>bool, optional</span></dt> <dd>If true, passes <code>stdin</code> to both <code>stderr</code> and <code>stdout</code>.</dd> </dl> </li> <li><dl> <dt>update <span>:</span> <span>bool, optional</span></dt> <dd>If true, will treat input as newly elapsed iterations, i.e. numbers to pass to <code>update()</code>. Note that this is slow (~2e5 it/s) since every input must be decoded as a number.</dd> </dl> </li> <li><dl> <dt>update_to <span>:</span> <span>bool, optional</span></dt> <dd>If true, will treat input as total elapsed iterations, i.e. numbers to assign to <code>self.n</code>. Note that this is slow (~2e5 it/s) since every input must be decoded as a number.</dd> </dl> </li> <li><dl> <dt>null <span>:</span> <span>bool, optional</span></dt> <dd>If true, will discard input (no stdout).</dd> </dl> </li> <li><dl> <dt>manpath <span>:</span> <span>str, optional</span></dt> <dd>Directory in which to install tqdm man pages.</dd> </dl> </li> <li><dl> <dt>comppath <span>:</span> <span>str, optional</span></dt> <dd>Directory in which to place tqdm completion.</dd> </dl> </li> <li><dl> <dt>log <span>:</span> <span>str, optional</span></dt> <dd>CRITICAL|FATAL|ERROR|WARN(ING)|[default: 'INFO']|DEBUG|NOTSET.</dd> </dl> </li> </ul> <a name="user-content-returns"></a> <div class="markdown-heading" dir="auto"><h4 tabindex="-1" class="heading-element" dir="auto"><a href="#table-of-contents">Returns</a></h4><a id="user-content-returns" class="anchor" aria-label="Permalink: Returns" href="#returns"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <ul dir="auto"> <li>out : decorated iterator.</li> </ul> <div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="class tqdm(): def update(self, n=1): &quot;&quot;&quot; Manually update the progress bar, useful for streams such as reading files. E.g.: &gt;&gt;&gt; t = tqdm(total=filesize) # Initialise &gt;&gt;&gt; for current_buffer in stream: ... ... ... t.update(len(current_buffer)) &gt;&gt;&gt; t.close() The last line is highly recommended, but possibly not necessary if ``t.update()`` will be called in such a way that ``filesize`` will be exactly reached and printed. Parameters ---------- n : int or float, optional Increment to add to the internal counter of iterations [default: 1]. If using float, consider specifying ``{n:.3f}`` or similar in ``bar_format``, or specifying ``unit_scale``. Returns ------- out : bool or None True if a ``display()`` was triggered. &quot;&quot;&quot; def close(self): &quot;&quot;&quot;Cleanup and (if leave=False) close the progressbar.&quot;&quot;&quot; def clear(self, nomove=False): &quot;&quot;&quot;Clear current bar display.&quot;&quot;&quot; def refresh(self): &quot;&quot;&quot; Force refresh the display of this bar. Parameters ---------- nolock : bool, optional If ``True``, does not lock. If [default: ``False``]: calls ``acquire()`` on internal lock. lock_args : tuple, optional Passed to internal lock's ``acquire()``. If specified, will only ``display()`` if ``acquire()`` returns ``True``. &quot;&quot;&quot; def unpause(self): &quot;&quot;&quot;Restart tqdm timer from last print time.&quot;&quot;&quot; def reset(self, total=None): &quot;&quot;&quot; Resets to 0 iterations for repeated use. Consider combining with ``leave=True``. Parameters ---------- total : int or float, optional. Total to use for the new bar. &quot;&quot;&quot; def set_description(self, desc=None, refresh=True): &quot;&quot;&quot; Set/modify description of the progress bar. Parameters ---------- desc : str, optional refresh : bool, optional Forces refresh [default: True]. &quot;&quot;&quot; def set_postfix(self, ordered_dict=None, refresh=True, **tqdm_kwargs): &quot;&quot;&quot; Set/modify postfix (additional stats) with automatic formatting based on datatype. Parameters ---------- ordered_dict : dict or OrderedDict, optional refresh : bool, optional Forces refresh [default: True]. kwargs : dict, optional &quot;&quot;&quot; @classmethod def write(cls, s, file=sys.stdout, end=&quot;\n&quot;): &quot;&quot;&quot;Print a message via tqdm (without overlap with bars).&quot;&quot;&quot; @property def format_dict(self): &quot;&quot;&quot;Public API for read-only member access.&quot;&quot;&quot; def display(self, msg=None, pos=None): &quot;&quot;&quot; Use ``self.sp`` to display ``msg`` in the specified ``pos``. Consider overloading this function when inheriting to use e.g.: ``self.some_frontend(**self.format_dict)`` instead of ``self.sp``. Parameters ---------- msg : str, optional. What to display (default: ``repr(self)``). pos : int, optional. Position to ``moveto`` (default: ``abs(self.pos)``). &quot;&quot;&quot; @classmethod @contextmanager def wrapattr(cls, stream, method, total=None, bytes=True, **tqdm_kwargs): &quot;&quot;&quot; stream : file-like object. method : str, &quot;read&quot; or &quot;write&quot;. The result of ``read()`` and the first argument of ``write()`` should have a ``len()``. &gt;&gt;&gt; with tqdm.wrapattr(file_obj, &quot;read&quot;, total=file_obj.size) as fobj: ... while True: ... chunk = fobj.read(chunk_size) ... if not chunk: ... break &quot;&quot;&quot; @classmethod def pandas(cls, *targs, **tqdm_kwargs): &quot;&quot;&quot;Registers the current `tqdm` class with `pandas`.&quot;&quot;&quot; def trange(*args, **tqdm_kwargs): &quot;&quot;&quot;Shortcut for `tqdm(range(*args), **tqdm_kwargs)`.&quot;&quot;&quot;"><pre><span class="pl-k">class</span> <span class="pl-s1">tqdm</span>(): <span class="pl-k">def</span> <span class="pl-en">update</span>(<span class="pl-s1">self</span>, <span class="pl-s1">n</span><span class="pl-c1">=</span><span class="pl-c1">1</span>): <span class="pl-s">"""</span> <span class="pl-s"> Manually update the progress bar, useful for streams</span> <span class="pl-s"> such as reading files.</span> <span class="pl-s"> E.g.:</span> <span class="pl-s"> &gt;&gt;&gt; t = tqdm(total=filesize) # Initialise</span> <span class="pl-s"> &gt;&gt;&gt; for current_buffer in stream:</span> <span class="pl-s"> ... ...</span> <span class="pl-s"> ... t.update(len(current_buffer))</span> <span class="pl-s"> &gt;&gt;&gt; t.close()</span> <span class="pl-s"> The last line is highly recommended, but possibly not necessary if</span> <span class="pl-s"> ``t.update()`` will be called in such a way that ``filesize`` will be</span> <span class="pl-s"> exactly reached and printed.</span> <span class="pl-s"></span> <span class="pl-s"> Parameters</span> <span class="pl-s"> ----------</span> <span class="pl-s"> n : int or float, optional</span> <span class="pl-s"> Increment to add to the internal counter of iterations</span> <span class="pl-s"> [default: 1]. If using float, consider specifying ``{n:.3f}``</span> <span class="pl-s"> or similar in ``bar_format``, or specifying ``unit_scale``.</span> <span class="pl-s"></span> <span class="pl-s"> Returns</span> <span class="pl-s"> -------</span> <span class="pl-s"> out : bool or None</span> <span class="pl-s"> True if a ``display()`` was triggered.</span> <span class="pl-s"> """</span> <span class="pl-k">def</span> <span class="pl-en">close</span>(<span class="pl-s1">self</span>): <span class="pl-s">"""Cleanup and (if leave=False) close the progressbar."""</span> <span class="pl-k">def</span> <span class="pl-en">clear</span>(<span class="pl-s1">self</span>, <span class="pl-s1">nomove</span><span class="pl-c1">=</span><span class="pl-c1">False</span>): <span class="pl-s">"""Clear current bar display."""</span> <span class="pl-k">def</span> <span class="pl-en">refresh</span>(<span class="pl-s1">self</span>): <span class="pl-s">"""</span> <span class="pl-s"> Force refresh the display of this bar.</span> <span class="pl-s"></span> <span class="pl-s"> Parameters</span> <span class="pl-s"> ----------</span> <span class="pl-s"> nolock : bool, optional</span> <span class="pl-s"> If ``True``, does not lock.</span> <span class="pl-s"> If [default: ``False``]: calls ``acquire()`` on internal lock.</span> <span class="pl-s"> lock_args : tuple, optional</span> <span class="pl-s"> Passed to internal lock's ``acquire()``.</span> <span class="pl-s"> If specified, will only ``display()`` if ``acquire()`` returns ``True``.</span> <span class="pl-s"> """</span> <span class="pl-k">def</span> <span class="pl-en">unpause</span>(<span class="pl-s1">self</span>): <span class="pl-s">"""Restart tqdm timer from last print time."""</span> <span class="pl-k">def</span> <span class="pl-en">reset</span>(<span class="pl-s1">self</span>, <span class="pl-s1">total</span><span class="pl-c1">=</span><span class="pl-c1">None</span>): <span class="pl-s">"""</span> <span class="pl-s"> Resets to 0 iterations for repeated use.</span> <span class="pl-s"></span> <span class="pl-s"> Consider combining with ``leave=True``.</span> <span class="pl-s"></span> <span class="pl-s"> Parameters</span> <span class="pl-s"> ----------</span> <span class="pl-s"> total : int or float, optional. Total to use for the new bar.</span> <span class="pl-s"> """</span> <span class="pl-k">def</span> <span class="pl-en">set_description</span>(<span class="pl-s1">self</span>, <span class="pl-s1">desc</span><span class="pl-c1">=</span><span class="pl-c1">None</span>, <span class="pl-s1">refresh</span><span class="pl-c1">=</span><span class="pl-c1">True</span>): <span class="pl-s">"""</span> <span class="pl-s"> Set/modify description of the progress bar.</span> <span class="pl-s"></span> <span class="pl-s"> Parameters</span> <span class="pl-s"> ----------</span> <span class="pl-s"> desc : str, optional</span> <span class="pl-s"> refresh : bool, optional</span> <span class="pl-s"> Forces refresh [default: True].</span> <span class="pl-s"> """</span> <span class="pl-k">def</span> <span class="pl-en">set_postfix</span>(<span class="pl-s1">self</span>, <span class="pl-s1">ordered_dict</span><span class="pl-c1">=</span><span class="pl-c1">None</span>, <span class="pl-s1">refresh</span><span class="pl-c1">=</span><span class="pl-c1">True</span>, <span class="pl-c1">**</span><span class="pl-s1">tqdm_kwargs</span>): <span class="pl-s">"""</span> <span class="pl-s"> Set/modify postfix (additional stats)</span> <span class="pl-s"> with automatic formatting based on datatype.</span> <span class="pl-s"></span> <span class="pl-s"> Parameters</span> <span class="pl-s"> ----------</span> <span class="pl-s"> ordered_dict : dict or OrderedDict, optional</span> <span class="pl-s"> refresh : bool, optional</span> <span class="pl-s"> Forces refresh [default: True].</span> <span class="pl-s"> kwargs : dict, optional</span> <span class="pl-s"> """</span> <span class="pl-en">@<span class="pl-s1">classmethod</span></span> <span class="pl-k">def</span> <span class="pl-en">write</span>(<span class="pl-s1">cls</span>, <span class="pl-s1">s</span>, <span class="pl-s1">file</span><span class="pl-c1">=</span><span class="pl-s1">sys</span>.<span class="pl-c1">stdout</span>, <span class="pl-s1">end</span><span class="pl-c1">=</span><span class="pl-s">"<span class="pl-cce">\n</span>"</span>): <span class="pl-s">"""Print a message via tqdm (without overlap with bars)."""</span> <span class="pl-en">@<span class="pl-s1">property</span></span> <span class="pl-k">def</span> <span class="pl-en">format_dict</span>(<span class="pl-s1">self</span>): <span class="pl-s">"""Public API for read-only member access."""</span> <span class="pl-k">def</span> <span class="pl-en">display</span>(<span class="pl-s1">self</span>, <span class="pl-s1">msg</span><span class="pl-c1">=</span><span class="pl-c1">None</span>, <span class="pl-s1">pos</span><span class="pl-c1">=</span><span class="pl-c1">None</span>): <span class="pl-s">"""</span> <span class="pl-s"> Use ``self.sp`` to display ``msg`` in the specified ``pos``.</span> <span class="pl-s"></span> <span class="pl-s"> Consider overloading this function when inheriting to use e.g.:</span> <span class="pl-s"> ``self.some_frontend(**self.format_dict)`` instead of ``self.sp``.</span> <span class="pl-s"></span> <span class="pl-s"> Parameters</span> <span class="pl-s"> ----------</span> <span class="pl-s"> msg : str, optional. What to display (default: ``repr(self)``).</span> <span class="pl-s"> pos : int, optional. Position to ``moveto``</span> <span class="pl-s"> (default: ``abs(self.pos)``).</span> <span class="pl-s"> """</span> <span class="pl-en">@<span class="pl-s1">classmethod</span></span> <span class="pl-en">@<span class="pl-s1">contextmanager</span></span> <span class="pl-k">def</span> <span class="pl-en">wrapattr</span>(<span class="pl-s1">cls</span>, <span class="pl-s1">stream</span>, <span class="pl-s1">method</span>, <span class="pl-s1">total</span><span class="pl-c1">=</span><span class="pl-c1">None</span>, <span class="pl-s1">bytes</span><span class="pl-c1">=</span><span class="pl-c1">True</span>, <span class="pl-c1">**</span><span class="pl-s1">tqdm_kwargs</span>): <span class="pl-s">"""</span> <span class="pl-s"> stream : file-like object.</span> <span class="pl-s"> method : str, "read" or "write". The result of ``read()`` and</span> <span class="pl-s"> the first argument of ``write()`` should have a ``len()``.</span> <span class="pl-s"></span> <span class="pl-s"> &gt;&gt;&gt; with tqdm.wrapattr(file_obj, "read", total=file_obj.size) as fobj:</span> <span class="pl-s"> ... while True:</span> <span class="pl-s"> ... chunk = fobj.read(chunk_size)</span> <span class="pl-s"> ... if not chunk:</span> <span class="pl-s"> ... break</span> <span class="pl-s"> """</span> <span class="pl-en">@<span class="pl-s1">classmethod</span></span> <span class="pl-k">def</span> <span class="pl-en">pandas</span>(<span class="pl-s1">cls</span>, <span class="pl-c1">*</span><span class="pl-s1">targs</span>, <span class="pl-c1">**</span><span class="pl-s1">tqdm_kwargs</span>): <span class="pl-s">"""Registers the current `tqdm` class with `pandas`."""</span> <span class="pl-k">def</span> <span class="pl-en">trange</span>(<span class="pl-c1">*</span><span class="pl-s1">args</span>, <span class="pl-c1">**</span><span class="pl-s1">tqdm_kwargs</span>): <span class="pl-s">"""Shortcut for `tqdm(range(*args), **tqdm_kwargs)`."""</span></pre></div> <a name="user-content-convenience-functions"></a> <div class="markdown-heading" dir="auto"><h4 tabindex="-1" class="heading-element" dir="auto"><a href="#table-of-contents">Convenience Functions</a></h4><a id="user-content-convenience-functions" class="anchor" aria-label="Permalink: Convenience Functions" href="#convenience-functions"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="def tqdm.contrib.tenumerate(iterable, start=0, total=None, tqdm_class=tqdm.auto.tqdm, **tqdm_kwargs): &quot;&quot;&quot;Equivalent of `numpy.ndenumerate` or builtin `enumerate`.&quot;&quot;&quot; def tqdm.contrib.tzip(iter1, *iter2plus, **tqdm_kwargs): &quot;&quot;&quot;Equivalent of builtin `zip`.&quot;&quot;&quot; def tqdm.contrib.tmap(function, *sequences, **tqdm_kwargs): &quot;&quot;&quot;Equivalent of builtin `map`.&quot;&quot;&quot;"><pre><span class="pl-k">def</span> <span class="pl-s1">tqdm</span>.<span class="pl-s1">contrib</span>.<span class="pl-en">tenumerate</span>(<span class="pl-s1">iterable</span>, <span class="pl-s1">start</span><span class="pl-c1">=</span><span class="pl-c1">0</span>, <span class="pl-s1">total</span><span class="pl-c1">=</span><span class="pl-c1">None</span>, <span class="pl-s1">tqdm_class</span><span class="pl-c1">=</span><span class="pl-s1">tqdm</span>.<span class="pl-c1">auto</span>.<span class="pl-c1">tqdm</span>, <span class="pl-c1">**</span><span class="pl-s1">tqdm_kwargs</span>): <span class="pl-s">"""Equivalent of `numpy.ndenumerate` or builtin `enumerate`."""</span> <span class="pl-k">def</span> <span class="pl-s1">tqdm</span>.<span class="pl-s1">contrib</span>.<span class="pl-en">tzip</span>(<span class="pl-s1">iter1</span>, <span class="pl-c1">*</span><span class="pl-s1">iter2plus</span>, <span class="pl-c1">**</span><span class="pl-s1">tqdm_kwargs</span>): <span class="pl-s">"""Equivalent of builtin `zip`."""</span> <span class="pl-k">def</span> <span class="pl-s1">tqdm</span>.<span class="pl-s1">contrib</span>.<span class="pl-en">tmap</span>(<span class="pl-s1">function</span>, <span class="pl-c1">*</span><span class="pl-s1">sequences</span>, <span class="pl-c1">**</span><span class="pl-s1">tqdm_kwargs</span>): <span class="pl-s">"""Equivalent of builtin `map`."""</span></pre></div> <a name="user-content-submodules"></a> <div class="markdown-heading" dir="auto"><h4 tabindex="-1" class="heading-element" dir="auto"><a href="#table-of-contents">Submodules</a></h4><a id="user-content-submodules" class="anchor" aria-label="Permalink: Submodules" href="#submodules"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="class tqdm.notebook.tqdm(tqdm.tqdm): &quot;&quot;&quot;IPython/Jupyter Notebook widget.&quot;&quot;&quot; class tqdm.auto.tqdm(tqdm.tqdm): &quot;&quot;&quot;Automatically chooses beween `tqdm.notebook` and `tqdm.tqdm`.&quot;&quot;&quot; class tqdm.asyncio.tqdm(tqdm.tqdm): &quot;&quot;&quot;Asynchronous version.&quot;&quot;&quot; @classmethod def as_completed(cls, fs, *, loop=None, timeout=None, total=None, **tqdm_kwargs): &quot;&quot;&quot;Wrapper for `asyncio.as_completed`.&quot;&quot;&quot; class tqdm.gui.tqdm(tqdm.tqdm): &quot;&quot;&quot;Matplotlib GUI version.&quot;&quot;&quot; class tqdm.tk.tqdm(tqdm.tqdm): &quot;&quot;&quot;Tkinter GUI version.&quot;&quot;&quot; class tqdm.rich.tqdm(tqdm.tqdm): &quot;&quot;&quot;`rich.progress` version.&quot;&quot;&quot; class tqdm.keras.TqdmCallback(keras.callbacks.Callback): &quot;&quot;&quot;Keras callback for epoch and batch progress.&quot;&quot;&quot; class tqdm.dask.TqdmCallback(dask.callbacks.Callback): &quot;&quot;&quot;Dask callback for task progress.&quot;&quot;&quot;"><pre><span class="pl-k">class</span> <span class="pl-s1">tqdm</span>.<span class="pl-s1">notebook</span>.<span class="pl-s1">tqdm</span>(<span class="pl-s1">tqdm</span>.<span class="pl-c1">tqdm</span>): <span class="pl-s">"""IPython/Jupyter Notebook widget."""</span> <span class="pl-k">class</span> <span class="pl-s1">tqdm</span>.<span class="pl-s1">auto</span>.<span class="pl-s1">tqdm</span>(<span class="pl-s1">tqdm</span>.<span class="pl-c1">tqdm</span>): <span class="pl-s">"""Automatically chooses beween `tqdm.notebook` and `tqdm.tqdm`."""</span> <span class="pl-k">class</span> <span class="pl-s1">tqdm</span>.<span class="pl-s1">asyncio</span>.<span class="pl-s1">tqdm</span>(<span class="pl-s1">tqdm</span>.<span class="pl-c1">tqdm</span>): <span class="pl-s">"""Asynchronous version."""</span> <span class="pl-en">@<span class="pl-s1">classmethod</span></span> <span class="pl-k">def</span> <span class="pl-en">as_completed</span>(<span class="pl-s1">cls</span>, <span class="pl-s1">fs</span>, <span class="pl-c1">*</span>, <span class="pl-s1">loop</span><span class="pl-c1">=</span><span class="pl-c1">None</span>, <span class="pl-s1">timeout</span><span class="pl-c1">=</span><span class="pl-c1">None</span>, <span class="pl-s1">total</span><span class="pl-c1">=</span><span class="pl-c1">None</span>, <span class="pl-c1">**</span><span class="pl-s1">tqdm_kwargs</span>): <span class="pl-s">"""Wrapper for `asyncio.as_completed`."""</span> <span class="pl-k">class</span> <span class="pl-s1">tqdm</span>.<span class="pl-s1">gui</span>.<span class="pl-s1">tqdm</span>(<span class="pl-s1">tqdm</span>.<span class="pl-c1">tqdm</span>): <span class="pl-s">"""Matplotlib GUI version."""</span> <span class="pl-k">class</span> <span class="pl-s1">tqdm</span>.<span class="pl-s1">tk</span>.<span class="pl-s1">tqdm</span>(<span class="pl-s1">tqdm</span>.<span class="pl-c1">tqdm</span>): <span class="pl-s">"""Tkinter GUI version."""</span> <span class="pl-k">class</span> <span class="pl-s1">tqdm</span>.<span class="pl-s1">rich</span>.<span class="pl-s1">tqdm</span>(<span class="pl-s1">tqdm</span>.<span class="pl-c1">tqdm</span>): <span class="pl-s">"""`rich.progress` version."""</span> <span class="pl-k">class</span> <span class="pl-s1">tqdm</span>.<span class="pl-s1">keras</span>.<span class="pl-v">TqdmCallback</span>(<span class="pl-s1">keras</span>.<span class="pl-c1">callbacks</span>.<span class="pl-c1">Callback</span>): <span class="pl-s">"""Keras callback for epoch and batch progress."""</span> <span class="pl-k">class</span> <span class="pl-s1">tqdm</span>.<span class="pl-s1">dask</span>.<span class="pl-v">TqdmCallback</span>(<span class="pl-s1">dask</span>.<span class="pl-c1">callbacks</span>.<span class="pl-c1">Callback</span>): <span class="pl-s">"""Dask callback for task progress."""</span></pre></div> <a name="user-content-contrib"></a> <div class="markdown-heading" dir="auto"><h5 tabindex="-1" class="heading-element" dir="auto"><a href="#table-of-contents"><code>contrib</code></a></h5><a id="user-content-contrib" class="anchor" aria-label="Permalink: contrib" href="#contrib"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto">The <code>tqdm.contrib</code> package also contains experimental modules:</p> <ul dir="auto"> <li><code>tqdm.contrib.itertools</code>: Thin wrappers around <code>itertools</code></li> <li><code>tqdm.contrib.concurrent</code>: Thin wrappers around <code>concurrent.futures</code></li> <li><code>tqdm.contrib.slack</code>: Posts to <a href="https://slack.com" rel="nofollow">Slack</a> bots</li> <li><code>tqdm.contrib.discord</code>: Posts to <a href="https://discord.com" rel="nofollow">Discord</a> bots</li> <li><code>tqdm.contrib.telegram</code>: Posts to <a href="https://telegram.org" rel="nofollow">Telegram</a> bots</li> <li><code>tqdm.contrib.bells</code>: Automagically enables all optional features<ul dir="auto"> <li><code>auto</code>, <code>pandas</code>, <code>slack</code>, <code>discord</code>, <code>telegram</code></li> </ul> </li> </ul> <a name="user-content-examples-and-advanced-usage"></a> <div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto"><a href="#table-of-contents">Examples and Advanced Usage</a></h3><a id="user-content-examples-and-advanced-usage" class="anchor" aria-label="Permalink: Examples and Advanced Usage" href="#examples-and-advanced-usage"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <ul dir="auto"> <li>See the <a href="https://github.com/tqdm/tqdm/tree/master/examples">examples</a> folder;</li> <li>import the module and run <code>help()</code>;</li> <li>consult the <a href="https://github.com/tqdm/tqdm/wiki">wiki</a>;<ul dir="auto"> <li>this has an <a href="https://github.com/tqdm/tqdm/wiki/How-to-make-a-great-Progress-Bar">excellent article</a> on how to make a <strong>great</strong> progressbar;</li> </ul> </li> <li>check out the <a href="https://tqdm.github.io/PyData2019/slides.html" rel="nofollow">slides from PyData London</a>, or</li> <li>run the <a href="https://mybinder.org/v2/gh/tqdm/tqdm/master?filepath=DEMO.ipynb" rel="nofollow"><img alt="binder-demo" src="https://camo.githubusercontent.com/7861126a7eb56440456a50288331e87b9604edbaa125354195637561fd400014/68747470733a2f2f6d7962696e6465722e6f72672f62616467655f6c6f676f2e737667" data-canonical-src="https://mybinder.org/badge_logo.svg" style="max-width: 100%;"> </a>.</li> </ul> <a name="user-content-description-and-additional-stats"></a> <div class="markdown-heading" dir="auto"><h4 tabindex="-1" class="heading-element" dir="auto"><a href="#table-of-contents">Description and additional stats</a></h4><a id="user-content-description-and-additional-stats" class="anchor" aria-label="Permalink: Description and additional stats" href="#description-and-additional-stats"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto">Custom information can be displayed and updated dynamically on <code>tqdm</code> bars with the <code>desc</code> and <code>postfix</code> arguments:</p> <div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="from tqdm import tqdm, trange from random import random, randint from time import sleep with trange(10) as t: for i in t: # Description will be displayed on the left t.set_description('GEN %i' % i) # Postfix will be displayed on the right, # formatted automatically based on argument's datatype t.set_postfix(loss=random(), gen=randint(1,999), str='h', lst=[1, 2]) sleep(0.1) with tqdm(total=10, bar_format=&quot;{postfix[0]} {postfix[1][value]:&gt;8.2g}&quot;, postfix=[&quot;Batch&quot;, {&quot;value&quot;: 0}]) as t: for i in range(10): sleep(0.1) t.postfix[1][&quot;value&quot;] = i / 2 t.update()"><pre><span class="pl-k">from</span> <span class="pl-s1">tqdm</span> <span class="pl-k">import</span> <span class="pl-s1">tqdm</span>, <span class="pl-s1">trange</span> <span class="pl-k">from</span> <span class="pl-s1">random</span> <span class="pl-k">import</span> <span class="pl-s1">random</span>, <span class="pl-s1">randint</span> <span class="pl-k">from</span> <span class="pl-s1">time</span> <span class="pl-k">import</span> <span class="pl-s1">sleep</span> <span class="pl-k">with</span> <span class="pl-en">trange</span>(<span class="pl-c1">10</span>) <span class="pl-k">as</span> <span class="pl-s1">t</span>: <span class="pl-k">for</span> <span class="pl-s1">i</span> <span class="pl-c1">in</span> <span class="pl-s1">t</span>: <span class="pl-c"># Description will be displayed on the left</span> <span class="pl-s1">t</span>.<span class="pl-c1">set_description</span>(<span class="pl-s">'GEN %i'</span> <span class="pl-c1">%</span> <span class="pl-s1">i</span>) <span class="pl-c"># Postfix will be displayed on the right,</span> <span class="pl-c"># formatted automatically based on argument's datatype</span> <span class="pl-s1">t</span>.<span class="pl-c1">set_postfix</span>(<span class="pl-s1">loss</span><span class="pl-c1">=</span><span class="pl-en">random</span>(), <span class="pl-s1">gen</span><span class="pl-c1">=</span><span class="pl-en">randint</span>(<span class="pl-c1">1</span>,<span class="pl-c1">999</span>), <span class="pl-s1">str</span><span class="pl-c1">=</span><span class="pl-s">'h'</span>, <span class="pl-s1">lst</span><span class="pl-c1">=</span>[<span class="pl-c1">1</span>, <span class="pl-c1">2</span>]) <span class="pl-en">sleep</span>(<span class="pl-c1">0.1</span>) <span class="pl-k">with</span> <span class="pl-en">tqdm</span>(<span class="pl-s1">total</span><span class="pl-c1">=</span><span class="pl-c1">10</span>, <span class="pl-s1">bar_format</span><span class="pl-c1">=</span><span class="pl-s">"{postfix[0]} {postfix[1][value]:&gt;8.2g}"</span>, <span class="pl-s1">postfix</span><span class="pl-c1">=</span>[<span class="pl-s">"Batch"</span>, {<span class="pl-s">"value"</span>: <span class="pl-c1">0</span>}]) <span class="pl-k">as</span> <span class="pl-s1">t</span>: <span class="pl-k">for</span> <span class="pl-s1">i</span> <span class="pl-c1">in</span> <span class="pl-en">range</span>(<span class="pl-c1">10</span>): <span class="pl-en">sleep</span>(<span class="pl-c1">0.1</span>) <span class="pl-s1">t</span>.<span class="pl-c1">postfix</span>[<span class="pl-c1">1</span>][<span class="pl-s">"value"</span>] <span class="pl-c1">=</span> <span class="pl-s1">i</span> <span class="pl-c1">/</span> <span class="pl-c1">2</span> <span class="pl-s1">t</span>.<span class="pl-c1">update</span>()</pre></div> <p dir="auto">Points to remember when using <code>{postfix[...]}</code> in the <code>bar_format</code> string:</p> <ul dir="auto"> <li><code>postfix</code> also needs to be passed as an initial argument in a compatible format, and</li> <li><code>postfix</code> will be auto-converted to a string if it is a <code>dict</code>-like object. To prevent this behaviour, insert an extra item into the dictionary where the key is not a string.</li> </ul> <p dir="auto">Additional <code>bar_format</code> parameters may also be defined by overriding <code>format_dict</code>, and the bar itself may be modified using <code>ascii</code>:</p> <div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="from tqdm import tqdm class TqdmExtraFormat(tqdm): &quot;&quot;&quot;Provides a `total_time` format parameter&quot;&quot;&quot; @property def format_dict(self): d = super().format_dict total_time = d[&quot;elapsed&quot;] * (d[&quot;total&quot;] or 0) / max(d[&quot;n&quot;], 1) d.update(total_time=self.format_interval(total_time) + &quot; in total&quot;) return d for i in TqdmExtraFormat( range(9), ascii=&quot; .oO0&quot;, bar_format=&quot;{total_time}: {percentage:.0f}%|{bar}{r_bar}&quot;): if i == 4: break"><pre><span class="pl-k">from</span> <span class="pl-s1">tqdm</span> <span class="pl-k">import</span> <span class="pl-s1">tqdm</span> <span class="pl-k">class</span> <span class="pl-v">TqdmExtraFormat</span>(<span class="pl-s1">tqdm</span>): <span class="pl-s">"""Provides a `total_time` format parameter"""</span> <span class="pl-en">@<span class="pl-s1">property</span></span> <span class="pl-k">def</span> <span class="pl-en">format_dict</span>(<span class="pl-s1">self</span>): <span class="pl-s1">d</span> <span class="pl-c1">=</span> <span class="pl-en">super</span>().<span class="pl-c1">format_dict</span> <span class="pl-s1">total_time</span> <span class="pl-c1">=</span> <span class="pl-s1">d</span>[<span class="pl-s">"elapsed"</span>] <span class="pl-c1">*</span> (<span class="pl-s1">d</span>[<span class="pl-s">"total"</span>] <span class="pl-c1">or</span> <span class="pl-c1">0</span>) <span class="pl-c1">/</span> <span class="pl-en">max</span>(<span class="pl-s1">d</span>[<span class="pl-s">"n"</span>], <span class="pl-c1">1</span>) <span class="pl-s1">d</span>.<span class="pl-c1">update</span>(<span class="pl-s1">total_time</span><span class="pl-c1">=</span><span class="pl-s1">self</span>.<span class="pl-c1">format_interval</span>(<span class="pl-s1">total_time</span>) <span class="pl-c1">+</span> <span class="pl-s">" in total"</span>) <span class="pl-k">return</span> <span class="pl-s1">d</span> <span class="pl-k">for</span> <span class="pl-s1">i</span> <span class="pl-c1">in</span> <span class="pl-en">TqdmExtraFormat</span>( <span class="pl-en">range</span>(<span class="pl-c1">9</span>), <span class="pl-s1">ascii</span><span class="pl-c1">=</span><span class="pl-s">" .oO0"</span>, <span class="pl-s1">bar_format</span><span class="pl-c1">=</span><span class="pl-s">"{total_time}: {percentage:.0f}%|{bar}{r_bar}"</span>): <span class="pl-k">if</span> <span class="pl-s1">i</span> <span class="pl-c1">==</span> <span class="pl-c1">4</span>: <span class="pl-k">break</span></pre></div> <pre>00:00 in total: 44%|0000. | 4/9 [00:00&lt;00:00, 962.93it/s] </pre> <p dir="auto">Note that <code>{bar}</code> also supports a format specifier <code>[width][type]</code>.</p> <ul dir="auto"> <li><code>width</code><ul dir="auto"> <li>unspecified (default): automatic to fill <code>ncols</code></li> <li><code>int &gt;= 0</code>: fixed width overriding <code>ncols</code> logic</li> <li><code>int &lt; 0</code>: subtract from the automatic default</li> </ul> </li> <li><code>type</code><ul dir="auto"> <li><code>a</code>: ascii (<code>ascii=True</code> override)</li> <li><code>u</code>: unicode (<code>ascii=False</code> override)</li> <li><code>b</code>: blank (<code>ascii=" "</code> override)</li> </ul> </li> </ul> <p dir="auto">This means a fixed bar with right-justified text may be created by using: <code>bar_format="{l_bar}{bar:10}|{bar:-10b}right-justified"</code></p> <a name="user-content-nested-progress-bars"></a> <div class="markdown-heading" dir="auto"><h4 tabindex="-1" class="heading-element" dir="auto"><a href="#table-of-contents">Nested progress bars</a></h4><a id="user-content-nested-progress-bars" class="anchor" aria-label="Permalink: Nested progress bars" href="#nested-progress-bars"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto"><code>tqdm</code> supports nested progress bars. Here's an example:</p> <div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="from tqdm.auto import trange from time import sleep for i in trange(4, desc='1st loop'): for j in trange(5, desc='2nd loop'): for k in trange(50, desc='3rd loop', leave=False): sleep(0.01)"><pre><span class="pl-k">from</span> <span class="pl-s1">tqdm</span>.<span class="pl-s1">auto</span> <span class="pl-k">import</span> <span class="pl-s1">trange</span> <span class="pl-k">from</span> <span class="pl-s1">time</span> <span class="pl-k">import</span> <span class="pl-s1">sleep</span> <span class="pl-k">for</span> <span class="pl-s1">i</span> <span class="pl-c1">in</span> <span class="pl-en">trange</span>(<span class="pl-c1">4</span>, <span class="pl-s1">desc</span><span class="pl-c1">=</span><span class="pl-s">'1st loop'</span>): <span class="pl-k">for</span> <span class="pl-s1">j</span> <span class="pl-c1">in</span> <span class="pl-en">trange</span>(<span class="pl-c1">5</span>, <span class="pl-s1">desc</span><span class="pl-c1">=</span><span class="pl-s">'2nd loop'</span>): <span class="pl-k">for</span> <span class="pl-s1">k</span> <span class="pl-c1">in</span> <span class="pl-en">trange</span>(<span class="pl-c1">50</span>, <span class="pl-s1">desc</span><span class="pl-c1">=</span><span class="pl-s">'3rd loop'</span>, <span class="pl-s1">leave</span><span class="pl-c1">=</span><span class="pl-c1">False</span>): <span class="pl-en">sleep</span>(<span class="pl-c1">0.01</span>)</pre></div> <p dir="auto">For manual control over positioning (e.g. for multi-processing use), you may specify <code>position=n</code> where <code>n=0</code> for the outermost bar, <code>n=1</code> for the next, and so on. However, it's best to check if <code>tqdm</code> can work without manual <code>position</code> first.</p> <div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="from time import sleep from tqdm import trange, tqdm from multiprocessing import Pool, RLock, freeze_support L = list(range(9)) def progresser(n): interval = 0.001 / (n + 2) total = 5000 text = f&quot;#{n}, est. {interval * total:&lt;04.2}s&quot; for _ in trange(total, desc=text, position=n): sleep(interval) if __name__ == '__main__': freeze_support() # for Windows support tqdm.set_lock(RLock()) # for managing output contention p = Pool(initializer=tqdm.set_lock, initargs=(tqdm.get_lock(),)) p.map(progresser, L)"><pre><span class="pl-k">from</span> <span class="pl-s1">time</span> <span class="pl-k">import</span> <span class="pl-s1">sleep</span> <span class="pl-k">from</span> <span class="pl-s1">tqdm</span> <span class="pl-k">import</span> <span class="pl-s1">trange</span>, <span class="pl-s1">tqdm</span> <span class="pl-k">from</span> <span class="pl-s1">multiprocessing</span> <span class="pl-k">import</span> <span class="pl-v">Pool</span>, <span class="pl-v">RLock</span>, <span class="pl-s1">freeze_support</span> <span class="pl-c1">L</span> <span class="pl-c1">=</span> <span class="pl-en">list</span>(<span class="pl-en">range</span>(<span class="pl-c1">9</span>)) <span class="pl-k">def</span> <span class="pl-en">progresser</span>(<span class="pl-s1">n</span>): <span class="pl-s1">interval</span> <span class="pl-c1">=</span> <span class="pl-c1">0.001</span> <span class="pl-c1">/</span> (<span class="pl-s1">n</span> <span class="pl-c1">+</span> <span class="pl-c1">2</span>) <span class="pl-s1">total</span> <span class="pl-c1">=</span> <span class="pl-c1">5000</span> <span class="pl-s1">text</span> <span class="pl-c1">=</span> <span class="pl-s">f"#<span class="pl-s1"><span class="pl-kos">{</span><span class="pl-s1">n</span><span class="pl-kos">}</span></span>, est. <span class="pl-s1"><span class="pl-kos">{</span><span class="pl-s1">interval</span> <span class="pl-c1">*</span> <span class="pl-s1">total</span>:&lt;04.2<span class="pl-kos">}</span></span>s"</span> <span class="pl-k">for</span> <span class="pl-s1">_</span> <span class="pl-c1">in</span> <span class="pl-en">trange</span>(<span class="pl-s1">total</span>, <span class="pl-s1">desc</span><span class="pl-c1">=</span><span class="pl-s1">text</span>, <span class="pl-s1">position</span><span class="pl-c1">=</span><span class="pl-s1">n</span>): <span class="pl-en">sleep</span>(<span class="pl-s1">interval</span>) <span class="pl-k">if</span> <span class="pl-s1">__name__</span> <span class="pl-c1">==</span> <span class="pl-s">'__main__'</span>: <span class="pl-en">freeze_support</span>() <span class="pl-c"># for Windows support</span> <span class="pl-s1">tqdm</span>.<span class="pl-c1">set_lock</span>(<span class="pl-en">RLock</span>()) <span class="pl-c"># for managing output contention</span> <span class="pl-s1">p</span> <span class="pl-c1">=</span> <span class="pl-en">Pool</span>(<span class="pl-s1">initializer</span><span class="pl-c1">=</span><span class="pl-s1">tqdm</span>.<span class="pl-c1">set_lock</span>, <span class="pl-s1">initargs</span><span class="pl-c1">=</span>(<span class="pl-s1">tqdm</span>.<span class="pl-c1">get_lock</span>(),)) <span class="pl-s1">p</span>.<span class="pl-c1">map</span>(<span class="pl-s1">progresser</span>, <span class="pl-c1">L</span>)</pre></div> <p dir="auto">Note that in Python 3, <code>tqdm.write</code> is thread-safe:</p> <div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="from time import sleep from tqdm import tqdm, trange from concurrent.futures import ThreadPoolExecutor L = list(range(9)) def progresser(n): interval = 0.001 / (n + 2) total = 5000 text = f&quot;#{n}, est. {interval * total:&lt;04.2}s&quot; for _ in trange(total, desc=text): sleep(interval) if n == 6: tqdm.write(&quot;n == 6 completed.&quot;) tqdm.write(&quot;`tqdm.write()` is thread-safe in py3!&quot;) if __name__ == '__main__': with ThreadPoolExecutor() as p: p.map(progresser, L)"><pre><span class="pl-k">from</span> <span class="pl-s1">time</span> <span class="pl-k">import</span> <span class="pl-s1">sleep</span> <span class="pl-k">from</span> <span class="pl-s1">tqdm</span> <span class="pl-k">import</span> <span class="pl-s1">tqdm</span>, <span class="pl-s1">trange</span> <span class="pl-k">from</span> <span class="pl-s1">concurrent</span>.<span class="pl-s1">futures</span> <span class="pl-k">import</span> <span class="pl-v">ThreadPoolExecutor</span> <span class="pl-c1">L</span> <span class="pl-c1">=</span> <span class="pl-en">list</span>(<span class="pl-en">range</span>(<span class="pl-c1">9</span>)) <span class="pl-k">def</span> <span class="pl-en">progresser</span>(<span class="pl-s1">n</span>): <span class="pl-s1">interval</span> <span class="pl-c1">=</span> <span class="pl-c1">0.001</span> <span class="pl-c1">/</span> (<span class="pl-s1">n</span> <span class="pl-c1">+</span> <span class="pl-c1">2</span>) <span class="pl-s1">total</span> <span class="pl-c1">=</span> <span class="pl-c1">5000</span> <span class="pl-s1">text</span> <span class="pl-c1">=</span> <span class="pl-s">f"#<span class="pl-s1"><span class="pl-kos">{</span><span class="pl-s1">n</span><span class="pl-kos">}</span></span>, est. <span class="pl-s1"><span class="pl-kos">{</span><span class="pl-s1">interval</span> <span class="pl-c1">*</span> <span class="pl-s1">total</span>:&lt;04.2<span class="pl-kos">}</span></span>s"</span> <span class="pl-k">for</span> <span class="pl-s1">_</span> <span class="pl-c1">in</span> <span class="pl-en">trange</span>(<span class="pl-s1">total</span>, <span class="pl-s1">desc</span><span class="pl-c1">=</span><span class="pl-s1">text</span>): <span class="pl-en">sleep</span>(<span class="pl-s1">interval</span>) <span class="pl-k">if</span> <span class="pl-s1">n</span> <span class="pl-c1">==</span> <span class="pl-c1">6</span>: <span class="pl-s1">tqdm</span>.<span class="pl-c1">write</span>(<span class="pl-s">"n == 6 completed."</span>) <span class="pl-s1">tqdm</span>.<span class="pl-c1">write</span>(<span class="pl-s">"`tqdm.write()` is thread-safe in py3!"</span>) <span class="pl-k">if</span> <span class="pl-s1">__name__</span> <span class="pl-c1">==</span> <span class="pl-s">'__main__'</span>: <span class="pl-k">with</span> <span class="pl-en">ThreadPoolExecutor</span>() <span class="pl-k">as</span> <span class="pl-s1">p</span>: <span class="pl-s1">p</span>.<span class="pl-c1">map</span>(<span class="pl-s1">progresser</span>, <span class="pl-c1">L</span>)</pre></div> <a name="user-content-hooks-and-callbacks"></a> <div class="markdown-heading" dir="auto"><h4 tabindex="-1" class="heading-element" dir="auto"><a href="#table-of-contents">Hooks and callbacks</a></h4><a id="user-content-hooks-and-callbacks" class="anchor" aria-label="Permalink: Hooks and callbacks" href="#hooks-and-callbacks"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto"><code>tqdm</code> can easily support callbacks/hooks and manual updates. Here's an example with <code>urllib</code>:</p> <p dir="auto"><strong>``urllib.urlretrieve`` documentation</strong></p> <blockquote> <div dir="auto"> <div dir="auto">[...]</div> <div dir="auto">If present, the hook function will be called once</div> <div dir="auto">on establishment of the network connection and once after each block read</div> <div dir="auto">thereafter. The hook will be passed three arguments; a count of blocks</div> <div dir="auto">transferred so far, a block size in bytes, and the total size of the file.</div> <div dir="auto">[...]</div> </div> </blockquote> <div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="import urllib, os from tqdm import tqdm urllib = getattr(urllib, 'request', urllib) class TqdmUpTo(tqdm): &quot;&quot;&quot;Provides `update_to(n)` which uses `tqdm.update(delta_n)`.&quot;&quot;&quot; def update_to(self, b=1, bsize=1, tsize=None): &quot;&quot;&quot; b : int, optional Number of blocks transferred so far [default: 1]. bsize : int, optional Size of each block (in tqdm units) [default: 1]. tsize : int, optional Total size (in tqdm units). If [default: None] remains unchanged. &quot;&quot;&quot; if tsize is not None: self.total = tsize return self.update(b * bsize - self.n) # also sets self.n = b * bsize eg_link = &quot;https://caspersci.uk.to/matryoshka.zip&quot; with TqdmUpTo(unit='B', unit_scale=True, unit_divisor=1024, miniters=1, desc=eg_link.split('/')[-1]) as t: # all optional kwargs urllib.urlretrieve(eg_link, filename=os.devnull, reporthook=t.update_to, data=None) t.total = t.n"><pre><span class="pl-k">import</span> <span class="pl-s1">urllib</span>, <span class="pl-s1">os</span> <span class="pl-k">from</span> <span class="pl-s1">tqdm</span> <span class="pl-k">import</span> <span class="pl-s1">tqdm</span> <span class="pl-s1">urllib</span> <span class="pl-c1">=</span> <span class="pl-en">getattr</span>(<span class="pl-s1">urllib</span>, <span class="pl-s">'request'</span>, <span class="pl-s1">urllib</span>) <span class="pl-k">class</span> <span class="pl-v">TqdmUpTo</span>(<span class="pl-s1">tqdm</span>): <span class="pl-s">"""Provides `update_to(n)` which uses `tqdm.update(delta_n)`."""</span> <span class="pl-k">def</span> <span class="pl-en">update_to</span>(<span class="pl-s1">self</span>, <span class="pl-s1">b</span><span class="pl-c1">=</span><span class="pl-c1">1</span>, <span class="pl-s1">bsize</span><span class="pl-c1">=</span><span class="pl-c1">1</span>, <span class="pl-s1">tsize</span><span class="pl-c1">=</span><span class="pl-c1">None</span>): <span class="pl-s">"""</span> <span class="pl-s"> b : int, optional</span> <span class="pl-s"> Number of blocks transferred so far [default: 1].</span> <span class="pl-s"> bsize : int, optional</span> <span class="pl-s"> Size of each block (in tqdm units) [default: 1].</span> <span class="pl-s"> tsize : int, optional</span> <span class="pl-s"> Total size (in tqdm units). If [default: None] remains unchanged.</span> <span class="pl-s"> """</span> <span class="pl-k">if</span> <span class="pl-s1">tsize</span> <span class="pl-c1"><span class="pl-c1">is</span> <span class="pl-c1">not</span></span> <span class="pl-c1">None</span>: <span class="pl-s1">self</span>.<span class="pl-c1">total</span> <span class="pl-c1">=</span> <span class="pl-s1">tsize</span> <span class="pl-k">return</span> <span class="pl-s1">self</span>.<span class="pl-c1">update</span>(<span class="pl-s1">b</span> <span class="pl-c1">*</span> <span class="pl-s1">bsize</span> <span class="pl-c1">-</span> <span class="pl-s1">self</span>.<span class="pl-c1">n</span>) <span class="pl-c"># also sets self.n = b * bsize</span> <span class="pl-s1">eg_link</span> <span class="pl-c1">=</span> <span class="pl-s">"https://caspersci.uk.to/matryoshka.zip"</span> <span class="pl-k">with</span> <span class="pl-en">TqdmUpTo</span>(<span class="pl-s1">unit</span><span class="pl-c1">=</span><span class="pl-s">'B'</span>, <span class="pl-s1">unit_scale</span><span class="pl-c1">=</span><span class="pl-c1">True</span>, <span class="pl-s1">unit_divisor</span><span class="pl-c1">=</span><span class="pl-c1">1024</span>, <span class="pl-s1">miniters</span><span class="pl-c1">=</span><span class="pl-c1">1</span>, <span class="pl-s1">desc</span><span class="pl-c1">=</span><span class="pl-s1">eg_link</span>.<span class="pl-c1">split</span>(<span class="pl-s">'/'</span>)[<span class="pl-c1">-</span><span class="pl-c1">1</span>]) <span class="pl-k">as</span> <span class="pl-s1">t</span>: <span class="pl-c"># all optional kwargs</span> <span class="pl-s1">urllib</span>.<span class="pl-c1">urlretrieve</span>(<span class="pl-s1">eg_link</span>, <span class="pl-s1">filename</span><span class="pl-c1">=</span><span class="pl-s1">os</span>.<span class="pl-c1">devnull</span>, <span class="pl-s1">reporthook</span><span class="pl-c1">=</span><span class="pl-s1">t</span>.<span class="pl-c1">update_to</span>, <span class="pl-s1">data</span><span class="pl-c1">=</span><span class="pl-c1">None</span>) <span class="pl-s1">t</span>.<span class="pl-c1">total</span> <span class="pl-c1">=</span> <span class="pl-s1">t</span>.<span class="pl-c1">n</span></pre></div> <p dir="auto">Inspired by <a href="https://github.com/pypa/twine/pull/242" data-hovercard-type="pull_request" data-hovercard-url="/pypa/twine/pull/242/hovercard">twine#242</a>. Functional alternative in <a href="https://github.com/tqdm/tqdm/blob/master/examples/tqdm_wget.py">examples/tqdm_wget.py</a>.</p> <p dir="auto">It is recommend to use <code>miniters=1</code> whenever there is potentially large differences in iteration speed (e.g. downloading a file over a patchy connection).</p> <p dir="auto"><strong>Wrapping read/write methods</strong></p> <p dir="auto">To measure throughput through a file-like object's <code>read</code> or <code>write</code> methods, use <code>CallbackIOWrapper</code>:</p> <div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="from tqdm.auto import tqdm from tqdm.utils import CallbackIOWrapper with tqdm(total=file_obj.size, unit='B', unit_scale=True, unit_divisor=1024) as t: fobj = CallbackIOWrapper(t.update, file_obj, &quot;read&quot;) while True: chunk = fobj.read(chunk_size) if not chunk: break t.reset() # ... continue to use `t` for something else"><pre><span class="pl-k">from</span> <span class="pl-s1">tqdm</span>.<span class="pl-s1">auto</span> <span class="pl-k">import</span> <span class="pl-s1">tqdm</span> <span class="pl-k">from</span> <span class="pl-s1">tqdm</span>.<span class="pl-s1">utils</span> <span class="pl-k">import</span> <span class="pl-v">CallbackIOWrapper</span> <span class="pl-k">with</span> <span class="pl-en">tqdm</span>(<span class="pl-s1">total</span><span class="pl-c1">=</span><span class="pl-s1">file_obj</span>.<span class="pl-c1">size</span>, <span class="pl-s1">unit</span><span class="pl-c1">=</span><span class="pl-s">'B'</span>, <span class="pl-s1">unit_scale</span><span class="pl-c1">=</span><span class="pl-c1">True</span>, <span class="pl-s1">unit_divisor</span><span class="pl-c1">=</span><span class="pl-c1">1024</span>) <span class="pl-k">as</span> <span class="pl-s1">t</span>: <span class="pl-s1">fobj</span> <span class="pl-c1">=</span> <span class="pl-en">CallbackIOWrapper</span>(<span class="pl-s1">t</span>.<span class="pl-c1">update</span>, <span class="pl-s1">file_obj</span>, <span class="pl-s">"read"</span>) <span class="pl-k">while</span> <span class="pl-c1">True</span>: <span class="pl-s1">chunk</span> <span class="pl-c1">=</span> <span class="pl-s1">fobj</span>.<span class="pl-c1">read</span>(<span class="pl-s1">chunk_size</span>) <span class="pl-k">if</span> <span class="pl-c1">not</span> <span class="pl-s1">chunk</span>: <span class="pl-k">break</span> <span class="pl-s1">t</span>.<span class="pl-c1">reset</span>() <span class="pl-c"># ... continue to use `t` for something else</span></pre></div> <p dir="auto">Alternatively, use the even simpler <code>wrapattr</code> convenience function, which would condense both the <code>urllib</code> and <code>CallbackIOWrapper</code> examples down to:</p> <div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="import urllib, os from tqdm import tqdm eg_link = &quot;https://caspersci.uk.to/matryoshka.zip&quot; response = getattr(urllib, 'request', urllib).urlopen(eg_link) with tqdm.wrapattr(open(os.devnull, &quot;wb&quot;), &quot;write&quot;, miniters=1, desc=eg_link.split('/')[-1], total=getattr(response, 'length', None)) as fout: for chunk in response: fout.write(chunk)"><pre><span class="pl-k">import</span> <span class="pl-s1">urllib</span>, <span class="pl-s1">os</span> <span class="pl-k">from</span> <span class="pl-s1">tqdm</span> <span class="pl-k">import</span> <span class="pl-s1">tqdm</span> <span class="pl-s1">eg_link</span> <span class="pl-c1">=</span> <span class="pl-s">"https://caspersci.uk.to/matryoshka.zip"</span> <span class="pl-s1">response</span> <span class="pl-c1">=</span> <span class="pl-en">getattr</span>(<span class="pl-s1">urllib</span>, <span class="pl-s">'request'</span>, <span class="pl-s1">urllib</span>).<span class="pl-c1">urlopen</span>(<span class="pl-s1">eg_link</span>) <span class="pl-k">with</span> <span class="pl-s1">tqdm</span>.<span class="pl-c1">wrapattr</span>(<span class="pl-en">open</span>(<span class="pl-s1">os</span>.<span class="pl-c1">devnull</span>, <span class="pl-s">"wb"</span>), <span class="pl-s">"write"</span>, <span class="pl-s1">miniters</span><span class="pl-c1">=</span><span class="pl-c1">1</span>, <span class="pl-s1">desc</span><span class="pl-c1">=</span><span class="pl-s1">eg_link</span>.<span class="pl-c1">split</span>(<span class="pl-s">'/'</span>)[<span class="pl-c1">-</span><span class="pl-c1">1</span>], <span class="pl-s1">total</span><span class="pl-c1">=</span><span class="pl-en">getattr</span>(<span class="pl-s1">response</span>, <span class="pl-s">'length'</span>, <span class="pl-c1">None</span>)) <span class="pl-k">as</span> <span class="pl-s1">fout</span>: <span class="pl-k">for</span> <span class="pl-s1">chunk</span> <span class="pl-c1">in</span> <span class="pl-s1">response</span>: <span class="pl-s1">fout</span>.<span class="pl-c1">write</span>(<span class="pl-s1">chunk</span>)</pre></div> <p dir="auto">The <code>requests</code> equivalent is nearly identical:</p> <div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="import requests, os from tqdm import tqdm eg_link = &quot;https://caspersci.uk.to/matryoshka.zip&quot; response = requests.get(eg_link, stream=True) with tqdm.wrapattr(open(os.devnull, &quot;wb&quot;), &quot;write&quot;, miniters=1, desc=eg_link.split('/')[-1], total=int(response.headers.get('content-length', 0))) as fout: for chunk in response.iter_content(chunk_size=4096): fout.write(chunk)"><pre><span class="pl-k">import</span> <span class="pl-s1">requests</span>, <span class="pl-s1">os</span> <span class="pl-k">from</span> <span class="pl-s1">tqdm</span> <span class="pl-k">import</span> <span class="pl-s1">tqdm</span> <span class="pl-s1">eg_link</span> <span class="pl-c1">=</span> <span class="pl-s">"https://caspersci.uk.to/matryoshka.zip"</span> <span class="pl-s1">response</span> <span class="pl-c1">=</span> <span class="pl-s1">requests</span>.<span class="pl-c1">get</span>(<span class="pl-s1">eg_link</span>, <span class="pl-s1">stream</span><span class="pl-c1">=</span><span class="pl-c1">True</span>) <span class="pl-k">with</span> <span class="pl-s1">tqdm</span>.<span class="pl-c1">wrapattr</span>(<span class="pl-en">open</span>(<span class="pl-s1">os</span>.<span class="pl-c1">devnull</span>, <span class="pl-s">"wb"</span>), <span class="pl-s">"write"</span>, <span class="pl-s1">miniters</span><span class="pl-c1">=</span><span class="pl-c1">1</span>, <span class="pl-s1">desc</span><span class="pl-c1">=</span><span class="pl-s1">eg_link</span>.<span class="pl-c1">split</span>(<span class="pl-s">'/'</span>)[<span class="pl-c1">-</span><span class="pl-c1">1</span>], <span class="pl-s1">total</span><span class="pl-c1">=</span><span class="pl-en">int</span>(<span class="pl-s1">response</span>.<span class="pl-c1">headers</span>.<span class="pl-c1">get</span>(<span class="pl-s">'content-length'</span>, <span class="pl-c1">0</span>))) <span class="pl-k">as</span> <span class="pl-s1">fout</span>: <span class="pl-k">for</span> <span class="pl-s1">chunk</span> <span class="pl-c1">in</span> <span class="pl-s1">response</span>.<span class="pl-c1">iter_content</span>(<span class="pl-s1">chunk_size</span><span class="pl-c1">=</span><span class="pl-c1">4096</span>): <span class="pl-s1">fout</span>.<span class="pl-c1">write</span>(<span class="pl-s1">chunk</span>)</pre></div> <p dir="auto"><strong>Custom callback</strong></p> <p dir="auto"><code>tqdm</code> is known for intelligently skipping unnecessary displays. To make a custom callback take advantage of this, simply use the return value of <code>update()</code>. This is set to <code>True</code> if a <code>display()</code> was triggered.</p> <div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="from tqdm.auto import tqdm as std_tqdm def external_callback(*args, **kwargs): ... class TqdmExt(std_tqdm): def update(self, n=1): displayed = super().update(n) if displayed: external_callback(**self.format_dict) return displayed"><pre><span class="pl-k">from</span> <span class="pl-s1">tqdm</span>.<span class="pl-s1">auto</span> <span class="pl-k">import</span> <span class="pl-s1">tqdm</span> <span class="pl-k">as</span> <span class="pl-s1">std_tqdm</span> <span class="pl-k">def</span> <span class="pl-en">external_callback</span>(<span class="pl-c1">*</span><span class="pl-s1">args</span>, <span class="pl-c1">**</span><span class="pl-s1">kwargs</span>): ... <span class="pl-k">class</span> <span class="pl-v">TqdmExt</span>(<span class="pl-s1">std_tqdm</span>): <span class="pl-k">def</span> <span class="pl-en">update</span>(<span class="pl-s1">self</span>, <span class="pl-s1">n</span><span class="pl-c1">=</span><span class="pl-c1">1</span>): <span class="pl-s1">displayed</span> <span class="pl-c1">=</span> <span class="pl-en">super</span>().<span class="pl-c1">update</span>(<span class="pl-s1">n</span>) <span class="pl-k">if</span> <span class="pl-s1">displayed</span>: <span class="pl-en">external_callback</span>(<span class="pl-c1">**</span><span class="pl-s1">self</span>.<span class="pl-c1">format_dict</span>) <span class="pl-k">return</span> <span class="pl-s1">displayed</span></pre></div> <a name="user-content-asyncio"></a> <div class="markdown-heading" dir="auto"><h4 tabindex="-1" class="heading-element" dir="auto"><a href="#table-of-contents"><code>asyncio</code></a></h4><a id="user-content-asyncio" class="anchor" aria-label="Permalink: asyncio" href="#asyncio"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto">Note that <code>break</code> isn't currently caught by asynchronous iterators. This means that <code>tqdm</code> cannot clean up after itself in this case:</p> <div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="from tqdm.asyncio import tqdm async for i in tqdm(range(9)): if i == 2: break"><pre><span class="pl-k">from</span> <span class="pl-s1">tqdm</span>.<span class="pl-s1">asyncio</span> <span class="pl-k">import</span> <span class="pl-s1">tqdm</span> <span class="pl-k">async</span> <span class="pl-k">for</span> <span class="pl-s1">i</span> <span class="pl-c1">in</span> <span class="pl-en">tqdm</span>(<span class="pl-en">range</span>(<span class="pl-c1">9</span>)): <span class="pl-k">if</span> <span class="pl-s1">i</span> <span class="pl-c1">==</span> <span class="pl-c1">2</span>: <span class="pl-k">break</span></pre></div> <p dir="auto">Instead, either call <code>pbar.close()</code> manually or use the context manager syntax:</p> <div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="from tqdm.asyncio import tqdm with tqdm(range(9)) as pbar: async for i in pbar: if i == 2: break"><pre><span class="pl-k">from</span> <span class="pl-s1">tqdm</span>.<span class="pl-s1">asyncio</span> <span class="pl-k">import</span> <span class="pl-s1">tqdm</span> <span class="pl-k">with</span> <span class="pl-en">tqdm</span>(<span class="pl-en">range</span>(<span class="pl-c1">9</span>)) <span class="pl-k">as</span> <span class="pl-s1">pbar</span>: <span class="pl-k">async</span> <span class="pl-k">for</span> <span class="pl-s1">i</span> <span class="pl-c1">in</span> <span class="pl-s1">pbar</span>: <span class="pl-k">if</span> <span class="pl-s1">i</span> <span class="pl-c1">==</span> <span class="pl-c1">2</span>: <span class="pl-k">break</span></pre></div> <a name="user-content-pandas-integration"></a> <div class="markdown-heading" dir="auto"><h4 tabindex="-1" class="heading-element" dir="auto"><a href="#table-of-contents">Pandas Integration</a></h4><a id="user-content-pandas-integration" class="anchor" aria-label="Permalink: Pandas Integration" href="#pandas-integration"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto">Due to popular demand we've added support for <code>pandas</code> -- here's an example for <code>DataFrame.progress_apply</code> and <code>DataFrameGroupBy.progress_apply</code>:</p> <div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="import pandas as pd import numpy as np from tqdm import tqdm df = pd.DataFrame(np.random.randint(0, 100, (100000, 6))) # Register `pandas.progress_apply` and `pandas.Series.map_apply` with `tqdm` # (can use `tqdm.gui.tqdm`, `tqdm.notebook.tqdm`, optional kwargs, etc.) tqdm.pandas(desc=&quot;my bar!&quot;) # Now you can use `progress_apply` instead of `apply` # and `progress_map` instead of `map` df.progress_apply(lambda x: x**2) # can also groupby: # df.groupby(0).progress_apply(lambda x: x**2)"><pre><span class="pl-k">import</span> <span class="pl-s1">pandas</span> <span class="pl-k">as</span> <span class="pl-s1">pd</span> <span class="pl-k">import</span> <span class="pl-s1">numpy</span> <span class="pl-k">as</span> <span class="pl-s1">np</span> <span class="pl-k">from</span> <span class="pl-s1">tqdm</span> <span class="pl-k">import</span> <span class="pl-s1">tqdm</span> <span class="pl-s1">df</span> <span class="pl-c1">=</span> <span class="pl-s1">pd</span>.<span class="pl-c1">DataFrame</span>(<span class="pl-s1">np</span>.<span class="pl-c1">random</span>.<span class="pl-c1">randint</span>(<span class="pl-c1">0</span>, <span class="pl-c1">100</span>, (<span class="pl-c1">100000</span>, <span class="pl-c1">6</span>))) <span class="pl-c"># Register `pandas.progress_apply` and `pandas.Series.map_apply` with `tqdm`</span> <span class="pl-c"># (can use `tqdm.gui.tqdm`, `tqdm.notebook.tqdm`, optional kwargs, etc.)</span> <span class="pl-s1">tqdm</span>.<span class="pl-c1">pandas</span>(<span class="pl-s1">desc</span><span class="pl-c1">=</span><span class="pl-s">"my bar!"</span>) <span class="pl-c"># Now you can use `progress_apply` instead of `apply`</span> <span class="pl-c"># and `progress_map` instead of `map`</span> <span class="pl-s1">df</span>.<span class="pl-c1">progress_apply</span>(<span class="pl-k">lambda</span> <span class="pl-s1">x</span>: <span class="pl-s1">x</span><span class="pl-c1">**</span><span class="pl-c1">2</span>) <span class="pl-c"># can also groupby:</span> <span class="pl-c"># df.groupby(0).progress_apply(lambda x: x**2)</span></pre></div> <p dir="auto">In case you're interested in how this works (and how to modify it for your own callbacks), see the <a href="https://github.com/tqdm/tqdm/tree/master/examples">examples</a> folder or import the module and run <code>help()</code>.</p> <a name="user-content-keras-integration"></a> <div class="markdown-heading" dir="auto"><h4 tabindex="-1" class="heading-element" dir="auto"><a href="#table-of-contents">Keras Integration</a></h4><a id="user-content-keras-integration" class="anchor" aria-label="Permalink: Keras Integration" href="#keras-integration"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto">A <code>keras</code> callback is also available:</p> <div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="from tqdm.keras import TqdmCallback ... model.fit(..., verbose=0, callbacks=[TqdmCallback()])"><pre><span class="pl-k">from</span> <span class="pl-s1">tqdm</span>.<span class="pl-s1">keras</span> <span class="pl-k">import</span> <span class="pl-v">TqdmCallback</span> ... <span class="pl-s1">model</span>.<span class="pl-c1">fit</span>(..., <span class="pl-s1">verbose</span><span class="pl-c1">=</span><span class="pl-c1">0</span>, <span class="pl-s1">callbacks</span><span class="pl-c1">=</span>[<span class="pl-en">TqdmCallback</span>()])</pre></div> <a name="user-content-dask-integration"></a> <div class="markdown-heading" dir="auto"><h4 tabindex="-1" class="heading-element" dir="auto"><a href="#table-of-contents">Dask Integration</a></h4><a id="user-content-dask-integration" class="anchor" aria-label="Permalink: Dask Integration" href="#dask-integration"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto">A <code>dask</code> callback is also available:</p> <div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="from tqdm.dask import TqdmCallback with TqdmCallback(desc=&quot;compute&quot;): ... arr.compute() # or use callback globally cb = TqdmCallback(desc=&quot;global&quot;) cb.register() arr.compute()"><pre><span class="pl-k">from</span> <span class="pl-s1">tqdm</span>.<span class="pl-s1">dask</span> <span class="pl-k">import</span> <span class="pl-v">TqdmCallback</span> <span class="pl-k">with</span> <span class="pl-en">TqdmCallback</span>(<span class="pl-s1">desc</span><span class="pl-c1">=</span><span class="pl-s">"compute"</span>): ... <span class="pl-s1">arr</span>.<span class="pl-c1">compute</span>() <span class="pl-c"># or use callback globally</span> <span class="pl-s1">cb</span> <span class="pl-c1">=</span> <span class="pl-en">TqdmCallback</span>(<span class="pl-s1">desc</span><span class="pl-c1">=</span><span class="pl-s">"global"</span>) <span class="pl-s1">cb</span>.<span class="pl-c1">register</span>() <span class="pl-s1">arr</span>.<span class="pl-c1">compute</span>()</pre></div> <a name="user-content-ipython-jupyter-integration"></a> <div class="markdown-heading" dir="auto"><h4 tabindex="-1" class="heading-element" dir="auto"><a href="#table-of-contents">IPython/Jupyter Integration</a></h4><a id="user-content-ipythonjupyter-integration" class="anchor" aria-label="Permalink: IPython/Jupyter Integration" href="#ipythonjupyter-integration"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto">IPython/Jupyter is supported via the <code>tqdm.notebook</code> submodule:</p> <div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="from tqdm.notebook import trange, tqdm from time import sleep for i in trange(3, desc='1st loop'): for j in tqdm(range(100), desc='2nd loop'): sleep(0.01)"><pre><span class="pl-k">from</span> <span class="pl-s1">tqdm</span>.<span class="pl-s1">notebook</span> <span class="pl-k">import</span> <span class="pl-s1">trange</span>, <span class="pl-s1">tqdm</span> <span class="pl-k">from</span> <span class="pl-s1">time</span> <span class="pl-k">import</span> <span class="pl-s1">sleep</span> <span class="pl-k">for</span> <span class="pl-s1">i</span> <span class="pl-c1">in</span> <span class="pl-en">trange</span>(<span class="pl-c1">3</span>, <span class="pl-s1">desc</span><span class="pl-c1">=</span><span class="pl-s">'1st loop'</span>): <span class="pl-k">for</span> <span class="pl-s1">j</span> <span class="pl-c1">in</span> <span class="pl-en">tqdm</span>(<span class="pl-en">range</span>(<span class="pl-c1">100</span>), <span class="pl-s1">desc</span><span class="pl-c1">=</span><span class="pl-s">'2nd loop'</span>): <span class="pl-en">sleep</span>(<span class="pl-c1">0.01</span>)</pre></div> <p dir="auto">In addition to <code>tqdm</code> features, the submodule provides a native Jupyter widget (compatible with IPython v1-v4 and Jupyter), fully working nested bars and colour hints (blue: normal, green: completed, red: error/interrupt, light blue: no ETA); as demonstrated below.</p> <p dir="auto"><a target="_blank" rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/f5ebfb74be117579caa24a24e5e89c4f1552e14d33534ef1f3d45acacd944bad/68747470733a2f2f7471646d2e6769746875622e696f2f696d672f6a7570797465722d312e676966"><img alt="Screenshot-Jupyter1" src="https://camo.githubusercontent.com/f5ebfb74be117579caa24a24e5e89c4f1552e14d33534ef1f3d45acacd944bad/68747470733a2f2f7471646d2e6769746875622e696f2f696d672f6a7570797465722d312e676966" data-animated-image="" data-canonical-src="https://tqdm.github.io/img/jupyter-1.gif" style="max-width: 100%;"></a> <a target="_blank" rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/41b278dd33c08d839509fae6dac988948e0c98c6ceb4da78340c4b88055f0e91/68747470733a2f2f7471646d2e6769746875622e696f2f696d672f6a7570797465722d322e676966"><img alt="Screenshot-Jupyter2" src="https://camo.githubusercontent.com/41b278dd33c08d839509fae6dac988948e0c98c6ceb4da78340c4b88055f0e91/68747470733a2f2f7471646d2e6769746875622e696f2f696d672f6a7570797465722d322e676966" data-animated-image="" data-canonical-src="https://tqdm.github.io/img/jupyter-2.gif" style="max-width: 100%;"></a> <a target="_blank" rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/26ca8e3aba0f21035a87ab20dc697f57e8a8150fa44cbbff9fd88d13fa686a32/68747470733a2f2f7471646d2e6769746875622e696f2f696d672f6a7570797465722d332e676966"><img alt="Screenshot-Jupyter3" src="https://camo.githubusercontent.com/26ca8e3aba0f21035a87ab20dc697f57e8a8150fa44cbbff9fd88d13fa686a32/68747470733a2f2f7471646d2e6769746875622e696f2f696d672f6a7570797465722d332e676966" data-animated-image="" data-canonical-src="https://tqdm.github.io/img/jupyter-3.gif" style="max-width: 100%;"></a></p> <p dir="auto">The <code>notebook</code> version supports percentage or pixels for overall width (e.g.: <code>ncols='100%'</code> or <code>ncols='480px'</code>).</p> <p dir="auto">It is also possible to let <code>tqdm</code> automatically choose between console or notebook versions by using the <code>autonotebook</code> submodule:</p> <div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="from tqdm.autonotebook import tqdm tqdm.pandas()"><pre><span class="pl-k">from</span> <span class="pl-s1">tqdm</span>.<span class="pl-s1">autonotebook</span> <span class="pl-k">import</span> <span class="pl-s1">tqdm</span> <span class="pl-s1">tqdm</span>.<span class="pl-c1">pandas</span>()</pre></div> <p dir="auto">Note that this will issue a <code>TqdmExperimentalWarning</code> if run in a notebook since it is not meant to be possible to distinguish between <code>jupyter notebook</code> and <code>jupyter console</code>. Use <code>auto</code> instead of <code>autonotebook</code> to suppress this warning.</p> <p dir="auto">Note that notebooks will display the bar in the cell where it was created. This may be a different cell from the one where it is used. If this is not desired, either</p> <ul dir="auto"> <li>delay the creation of the bar to the cell where it must be displayed, or</li> <li>create the bar with <code>display=False</code>, and in a later cell call <code>display(bar.container)</code>:</li> </ul> <div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="from tqdm.notebook import tqdm pbar = tqdm(..., display=False)"><pre><span class="pl-k">from</span> <span class="pl-s1">tqdm</span>.<span class="pl-s1">notebook</span> <span class="pl-k">import</span> <span class="pl-s1">tqdm</span> <span class="pl-s1">pbar</span> <span class="pl-c1">=</span> <span class="pl-en">tqdm</span>(..., <span class="pl-s1">display</span><span class="pl-c1">=</span><span class="pl-c1">False</span>)</pre></div> <div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="# different cell display(pbar.container)"><pre><span class="pl-c"># different cell</span> <span class="pl-en">display</span>(<span class="pl-s1">pbar</span>.<span class="pl-c1">container</span>)</pre></div> <p dir="auto">The <code>keras</code> callback has a <code>display()</code> method which can be used likewise:</p> <div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="from tqdm.keras import TqdmCallback cbk = TqdmCallback(display=False)"><pre><span class="pl-k">from</span> <span class="pl-s1">tqdm</span>.<span class="pl-s1">keras</span> <span class="pl-k">import</span> <span class="pl-v">TqdmCallback</span> <span class="pl-s1">cbk</span> <span class="pl-c1">=</span> <span class="pl-en">TqdmCallback</span>(<span class="pl-s1">display</span><span class="pl-c1">=</span><span class="pl-c1">False</span>)</pre></div> <div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="# different cell cbk.display() model.fit(..., verbose=0, callbacks=[cbk])"><pre><span class="pl-c"># different cell</span> <span class="pl-s1">cbk</span>.<span class="pl-c1">display</span>() <span class="pl-s1">model</span>.<span class="pl-c1">fit</span>(..., <span class="pl-s1">verbose</span><span class="pl-c1">=</span><span class="pl-c1">0</span>, <span class="pl-s1">callbacks</span><span class="pl-c1">=</span>[<span class="pl-s1">cbk</span>])</pre></div> <p dir="auto">Another possibility is to have a single bar (near the top of the notebook) which is constantly re-used (using <code>reset()</code> rather than <code>close()</code>). For this reason, the notebook version (unlike the CLI version) does not automatically call <code>close()</code> upon <code>Exception</code>.</p> <div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="from tqdm.notebook import tqdm pbar = tqdm()"><pre><span class="pl-k">from</span> <span class="pl-s1">tqdm</span>.<span class="pl-s1">notebook</span> <span class="pl-k">import</span> <span class="pl-s1">tqdm</span> <span class="pl-s1">pbar</span> <span class="pl-c1">=</span> <span class="pl-en">tqdm</span>()</pre></div> <div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="# different cell iterable = range(100) pbar.reset(total=len(iterable)) # initialise with new `total` for i in iterable: pbar.update() pbar.refresh() # force print final status but don't `close()`"><pre><span class="pl-c"># different cell</span> <span class="pl-s1">iterable</span> <span class="pl-c1">=</span> <span class="pl-en">range</span>(<span class="pl-c1">100</span>) <span class="pl-s1">pbar</span>.<span class="pl-c1">reset</span>(<span class="pl-s1">total</span><span class="pl-c1">=</span><span class="pl-en">len</span>(<span class="pl-s1">iterable</span>)) <span class="pl-c"># initialise with new `total`</span> <span class="pl-k">for</span> <span class="pl-s1">i</span> <span class="pl-c1">in</span> <span class="pl-s1">iterable</span>: <span class="pl-s1">pbar</span>.<span class="pl-c1">update</span>() <span class="pl-s1">pbar</span>.<span class="pl-c1">refresh</span>() <span class="pl-c"># force print final status but don't `close()`</span></pre></div> <a name="user-content-custom-integration"></a> <div class="markdown-heading" dir="auto"><h4 tabindex="-1" class="heading-element" dir="auto"><a href="#table-of-contents">Custom Integration</a></h4><a id="user-content-custom-integration" class="anchor" aria-label="Permalink: Custom Integration" href="#custom-integration"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto">To change the default arguments (such as making <code>dynamic_ncols=True</code>), simply use built-in Python magic:</p> <div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="from functools import partial from tqdm import tqdm as std_tqdm tqdm = partial(std_tqdm, dynamic_ncols=True)"><pre><span class="pl-k">from</span> <span class="pl-s1">functools</span> <span class="pl-k">import</span> <span class="pl-s1">partial</span> <span class="pl-k">from</span> <span class="pl-s1">tqdm</span> <span class="pl-k">import</span> <span class="pl-s1">tqdm</span> <span class="pl-k">as</span> <span class="pl-s1">std_tqdm</span> <span class="pl-s1">tqdm</span> <span class="pl-c1">=</span> <span class="pl-en">partial</span>(<span class="pl-s1">std_tqdm</span>, <span class="pl-s1">dynamic_ncols</span><span class="pl-c1">=</span><span class="pl-c1">True</span>)</pre></div> <p dir="auto">For further customisation, <code>tqdm</code> may be inherited from to create custom callbacks (as with the <code>TqdmUpTo</code> example <a href="#hooks-and-callbacks">above</a>) or for custom frontends (e.g. GUIs such as notebook or plotting packages). In the latter case:</p> <ol dir="auto"> <li><code>def __init__()</code> to call <code>super().__init__(..., gui=True)</code> to disable terminal <code>status_printer</code> creation.</li> <li>Redefine: <code>close()</code>, <code>clear()</code>, <code>display()</code>.</li> </ol> <p dir="auto">Consider overloading <code>display()</code> to use e.g. <code>self.frontend(**self.format_dict)</code> instead of <code>self.sp(repr(self))</code>.</p> <p dir="auto">Some submodule examples of inheritance:</p> <ul dir="auto"> <li><a href="https://github.com/tqdm/tqdm/blob/master/tqdm/notebook.py">tqdm/notebook.py</a></li> <li><a href="https://github.com/tqdm/tqdm/blob/master/tqdm/gui.py">tqdm/gui.py</a></li> <li><a href="https://github.com/tqdm/tqdm/blob/master/tqdm/tk.py">tqdm/tk.py</a></li> <li><a href="https://github.com/tqdm/tqdm/blob/master/tqdm/contrib/slack.py">tqdm/contrib/slack.py</a></li> <li><a href="https://github.com/tqdm/tqdm/blob/master/tqdm/contrib/discord.py">tqdm/contrib/discord.py</a></li> <li><a href="https://github.com/tqdm/tqdm/blob/master/tqdm/contrib/telegram.py">tqdm/contrib/telegram.py</a></li> </ul> <a name="user-content-dynamic-monitor-meter"></a> <div class="markdown-heading" dir="auto"><h4 tabindex="-1" class="heading-element" dir="auto"><a href="#table-of-contents">Dynamic Monitor/Meter</a></h4><a id="user-content-dynamic-monitormeter" class="anchor" aria-label="Permalink: Dynamic Monitor/Meter" href="#dynamic-monitormeter"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto">You can use a <code>tqdm</code> as a meter which is not monotonically increasing. This could be because <code>n</code> decreases (e.g. a CPU usage monitor) or <code>total</code> changes.</p> <p dir="auto">One example would be recursively searching for files. The <code>total</code> is the number of objects found so far, while <code>n</code> is the number of those objects which are files (rather than folders):</p> <div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="from tqdm import tqdm import os.path def find_files_recursively(path, show_progress=True): files = [] # total=1 assumes `path` is a file t = tqdm(total=1, unit=&quot;file&quot;, disable=not show_progress) if not os.path.exists(path): raise IOError(&quot;Cannot find:&quot; + path) def append_found_file(f): files.append(f) t.update() def list_found_dir(path): &quot;&quot;&quot;returns os.listdir(path) assuming os.path.isdir(path)&quot;&quot;&quot; listing = os.listdir(path) # subtract 1 since a &quot;file&quot; we found was actually this directory t.total += len(listing) - 1 # fancy way to give info without forcing a refresh t.set_postfix(dir=path[-10:], refresh=False) t.update(0) # may trigger a refresh return listing def recursively_search(path): if os.path.isdir(path): for f in list_found_dir(path): recursively_search(os.path.join(path, f)) else: append_found_file(path) recursively_search(path) t.set_postfix(dir=path) t.close() return files"><pre><span class="pl-k">from</span> <span class="pl-s1">tqdm</span> <span class="pl-k">import</span> <span class="pl-s1">tqdm</span> <span class="pl-k">import</span> <span class="pl-s1">os</span>.<span class="pl-s1">path</span> <span class="pl-k">def</span> <span class="pl-en">find_files_recursively</span>(<span class="pl-s1">path</span>, <span class="pl-s1">show_progress</span><span class="pl-c1">=</span><span class="pl-c1">True</span>): <span class="pl-s1">files</span> <span class="pl-c1">=</span> [] <span class="pl-c"># total=1 assumes `path` is a file</span> <span class="pl-s1">t</span> <span class="pl-c1">=</span> <span class="pl-en">tqdm</span>(<span class="pl-s1">total</span><span class="pl-c1">=</span><span class="pl-c1">1</span>, <span class="pl-s1">unit</span><span class="pl-c1">=</span><span class="pl-s">"file"</span>, <span class="pl-s1">disable</span><span class="pl-c1">=</span><span class="pl-c1">not</span> <span class="pl-s1">show_progress</span>) <span class="pl-k">if</span> <span class="pl-c1">not</span> <span class="pl-s1">os</span>.<span class="pl-c1">path</span>.<span class="pl-c1">exists</span>(<span class="pl-s1">path</span>): <span class="pl-k">raise</span> <span class="pl-en">IOError</span>(<span class="pl-s">"Cannot find:"</span> <span class="pl-c1">+</span> <span class="pl-s1">path</span>) <span class="pl-k">def</span> <span class="pl-en">append_found_file</span>(<span class="pl-s1">f</span>): <span class="pl-s1">files</span>.<span class="pl-c1">append</span>(<span class="pl-s1">f</span>) <span class="pl-s1">t</span>.<span class="pl-c1">update</span>() <span class="pl-k">def</span> <span class="pl-en">list_found_dir</span>(<span class="pl-s1">path</span>): <span class="pl-s">"""returns os.listdir(path) assuming os.path.isdir(path)"""</span> <span class="pl-s1">listing</span> <span class="pl-c1">=</span> <span class="pl-s1">os</span>.<span class="pl-c1">listdir</span>(<span class="pl-s1">path</span>) <span class="pl-c"># subtract 1 since a "file" we found was actually this directory</span> <span class="pl-s1">t</span>.<span class="pl-c1">total</span> <span class="pl-c1">+=</span> <span class="pl-en">len</span>(<span class="pl-s1">listing</span>) <span class="pl-c1">-</span> <span class="pl-c1">1</span> <span class="pl-c"># fancy way to give info without forcing a refresh</span> <span class="pl-s1">t</span>.<span class="pl-c1">set_postfix</span>(<span class="pl-s1">dir</span><span class="pl-c1">=</span><span class="pl-s1">path</span>[<span class="pl-c1">-</span><span class="pl-c1">10</span>:], <span class="pl-s1">refresh</span><span class="pl-c1">=</span><span class="pl-c1">False</span>) <span class="pl-s1">t</span>.<span class="pl-c1">update</span>(<span class="pl-c1">0</span>) <span class="pl-c"># may trigger a refresh</span> <span class="pl-k">return</span> <span class="pl-s1">listing</span> <span class="pl-k">def</span> <span class="pl-en">recursively_search</span>(<span class="pl-s1">path</span>): <span class="pl-k">if</span> <span class="pl-s1">os</span>.<span class="pl-c1">path</span>.<span class="pl-c1">isdir</span>(<span class="pl-s1">path</span>): <span class="pl-k">for</span> <span class="pl-s1">f</span> <span class="pl-c1">in</span> <span class="pl-en">list_found_dir</span>(<span class="pl-s1">path</span>): <span class="pl-en">recursively_search</span>(<span class="pl-s1">os</span>.<span class="pl-c1">path</span>.<span class="pl-c1">join</span>(<span class="pl-s1">path</span>, <span class="pl-s1">f</span>)) <span class="pl-k">else</span>: <span class="pl-en">append_found_file</span>(<span class="pl-s1">path</span>) <span class="pl-en">recursively_search</span>(<span class="pl-s1">path</span>) <span class="pl-s1">t</span>.<span class="pl-c1">set_postfix</span>(<span class="pl-s1">dir</span><span class="pl-c1">=</span><span class="pl-s1">path</span>) <span class="pl-s1">t</span>.<span class="pl-c1">close</span>() <span class="pl-k">return</span> <span class="pl-s1">files</span></pre></div> <p dir="auto">Using <code>update(0)</code> is a handy way to let <code>tqdm</code> decide when to trigger a display refresh to avoid console spamming.</p> <a name="user-content-writing-messages"></a> <div class="markdown-heading" dir="auto"><h4 tabindex="-1" class="heading-element" dir="auto"><a href="#table-of-contents">Writing messages</a></h4><a id="user-content-writing-messages" class="anchor" aria-label="Permalink: Writing messages" href="#writing-messages"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto">This is a work in progress (see <a href="https://github.com/tqdm/tqdm/issues/737" data-hovercard-type="issue" data-hovercard-url="/tqdm/tqdm/issues/737/hovercard">#737</a>).</p> <p dir="auto">Since <code>tqdm</code> uses a simple printing mechanism to display progress bars, you should not write any message in the terminal using <code>print()</code> while a progressbar is open.</p> <p dir="auto">To write messages in the terminal without any collision with <code>tqdm</code> bar display, a <code>.write()</code> method is provided:</p> <div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="from tqdm.auto import tqdm, trange from time import sleep bar = trange(10) for i in bar: # Print using tqdm class method .write() sleep(0.1) if not (i % 3): tqdm.write(&quot;Done task %i&quot; % i) # Can also use bar.write()"><pre><span class="pl-k">from</span> <span class="pl-s1">tqdm</span>.<span class="pl-s1">auto</span> <span class="pl-k">import</span> <span class="pl-s1">tqdm</span>, <span class="pl-s1">trange</span> <span class="pl-k">from</span> <span class="pl-s1">time</span> <span class="pl-k">import</span> <span class="pl-s1">sleep</span> <span class="pl-s1">bar</span> <span class="pl-c1">=</span> <span class="pl-en">trange</span>(<span class="pl-c1">10</span>) <span class="pl-k">for</span> <span class="pl-s1">i</span> <span class="pl-c1">in</span> <span class="pl-s1">bar</span>: <span class="pl-c"># Print using tqdm class method .write()</span> <span class="pl-en">sleep</span>(<span class="pl-c1">0.1</span>) <span class="pl-k">if</span> <span class="pl-c1">not</span> (<span class="pl-s1">i</span> <span class="pl-c1">%</span> <span class="pl-c1">3</span>): <span class="pl-s1">tqdm</span>.<span class="pl-c1">write</span>(<span class="pl-s">"Done task %i"</span> <span class="pl-c1">%</span> <span class="pl-s1">i</span>) <span class="pl-c"># Can also use bar.write()</span></pre></div> <p dir="auto">By default, this will print to standard output <code>sys.stdout</code>. but you can specify any file-like object using the <code>file</code> argument. For example, this can be used to redirect the messages writing to a log file or class.</p> <a name="user-content-redirecting-writing"></a> <div class="markdown-heading" dir="auto"><h4 tabindex="-1" class="heading-element" dir="auto"><a href="#table-of-contents">Redirecting writing</a></h4><a id="user-content-redirecting-writing" class="anchor" aria-label="Permalink: Redirecting writing" href="#redirecting-writing"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto">If using a library that can print messages to the console, editing the library by replacing <code>print()</code> with <code>tqdm.write()</code> may not be desirable. In that case, redirecting <code>sys.stdout</code> to <code>tqdm.write()</code> is an option.</p> <p dir="auto">To redirect <code>sys.stdout</code>, create a file-like class that will write any input string to <code>tqdm.write()</code>, and supply the arguments <code>file=sys.stdout, dynamic_ncols=True</code>.</p> <p dir="auto">A reusable canonical example is given below:</p> <div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="from time import sleep import contextlib import sys from tqdm import tqdm from tqdm.contrib import DummyTqdmFile @contextlib.contextmanager def std_out_err_redirect_tqdm(): orig_out_err = sys.stdout, sys.stderr try: sys.stdout, sys.stderr = map(DummyTqdmFile, orig_out_err) yield orig_out_err[0] # Relay exceptions except Exception as exc: raise exc # Always restore sys.stdout/err if necessary finally: sys.stdout, sys.stderr = orig_out_err def some_fun(i): print(&quot;Fee, fi, fo,&quot;.split()[i]) # Redirect stdout to tqdm.write() (don't forget the `as save_stdout`) with std_out_err_redirect_tqdm() as orig_stdout: # tqdm needs the original stdout # and dynamic_ncols=True to autodetect console width for i in tqdm(range(3), file=orig_stdout, dynamic_ncols=True): sleep(.5) some_fun(i) # After the `with`, printing is restored print(&quot;Done!&quot;)"><pre><span class="pl-k">from</span> <span class="pl-s1">time</span> <span class="pl-k">import</span> <span class="pl-s1">sleep</span> <span class="pl-k">import</span> <span class="pl-s1">contextlib</span> <span class="pl-k">import</span> <span class="pl-s1">sys</span> <span class="pl-k">from</span> <span class="pl-s1">tqdm</span> <span class="pl-k">import</span> <span class="pl-s1">tqdm</span> <span class="pl-k">from</span> <span class="pl-s1">tqdm</span>.<span class="pl-s1">contrib</span> <span class="pl-k">import</span> <span class="pl-v">DummyTqdmFile</span> <span class="pl-en">@<span class="pl-s1">contextlib</span>.<span class="pl-c1">contextmanager</span></span> <span class="pl-k">def</span> <span class="pl-en">std_out_err_redirect_tqdm</span>(): <span class="pl-s1">orig_out_err</span> <span class="pl-c1">=</span> <span class="pl-s1">sys</span>.<span class="pl-c1">stdout</span>, <span class="pl-s1">sys</span>.<span class="pl-c1">stderr</span> <span class="pl-k">try</span>: <span class="pl-s1">sys</span>.<span class="pl-c1">stdout</span>, <span class="pl-s1">sys</span>.<span class="pl-c1">stderr</span> <span class="pl-c1">=</span> <span class="pl-en">map</span>(<span class="pl-v">DummyTqdmFile</span>, <span class="pl-s1">orig_out_err</span>) <span class="pl-k">yield</span> <span class="pl-s1">orig_out_err</span>[<span class="pl-c1">0</span>] <span class="pl-c"># Relay exceptions</span> <span class="pl-k">except</span> <span class="pl-v">Exception</span> <span class="pl-k">as</span> <span class="pl-s1">exc</span>: <span class="pl-k">raise</span> <span class="pl-s1">exc</span> <span class="pl-c"># Always restore sys.stdout/err if necessary</span> <span class="pl-k">finally</span>: <span class="pl-s1">sys</span>.<span class="pl-c1">stdout</span>, <span class="pl-s1">sys</span>.<span class="pl-c1">stderr</span> <span class="pl-c1">=</span> <span class="pl-s1">orig_out_err</span> <span class="pl-k">def</span> <span class="pl-en">some_fun</span>(<span class="pl-s1">i</span>): <span class="pl-en">print</span>(<span class="pl-s">"Fee, fi, fo,"</span>.<span class="pl-c1">split</span>()[<span class="pl-s1">i</span>]) <span class="pl-c"># Redirect stdout to tqdm.write() (don't forget the `as save_stdout`)</span> <span class="pl-k">with</span> <span class="pl-en">std_out_err_redirect_tqdm</span>() <span class="pl-k">as</span> <span class="pl-s1">orig_stdout</span>: <span class="pl-c"># tqdm needs the original stdout</span> <span class="pl-c"># and dynamic_ncols=True to autodetect console width</span> <span class="pl-k">for</span> <span class="pl-s1">i</span> <span class="pl-c1">in</span> <span class="pl-en">tqdm</span>(<span class="pl-en">range</span>(<span class="pl-c1">3</span>), <span class="pl-s1">file</span><span class="pl-c1">=</span><span class="pl-s1">orig_stdout</span>, <span class="pl-s1">dynamic_ncols</span><span class="pl-c1">=</span><span class="pl-c1">True</span>): <span class="pl-en">sleep</span>(<span class="pl-c1">.5</span>) <span class="pl-en">some_fun</span>(<span class="pl-s1">i</span>) <span class="pl-c"># After the `with`, printing is restored</span> <span class="pl-en">print</span>(<span class="pl-s">"Done!"</span>)</pre></div> <a name="user-content-redirecting-logging"></a> <div class="markdown-heading" dir="auto"><h4 tabindex="-1" class="heading-element" dir="auto"><a href="#table-of-contents">Redirecting <code>logging</code></a></h4><a id="user-content-redirecting-logging" class="anchor" aria-label="Permalink: Redirecting logging" href="#redirecting-logging"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto">Similar to <code>sys.stdout</code>/<code>sys.stderr</code> as detailed above, console <code>logging</code> may also be redirected to <code>tqdm.write()</code>.</p> <p dir="auto">Warning: if also redirecting <code>sys.stdout</code>/<code>sys.stderr</code>, make sure to redirect <code>logging</code> first if needed.</p> <p dir="auto">Helper methods are available in <code>tqdm.contrib.logging</code>. For example:</p> <div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="import logging from tqdm import trange from tqdm.contrib.logging import logging_redirect_tqdm LOG = logging.getLogger(__name__) if __name__ == '__main__': logging.basicConfig(level=logging.INFO) with logging_redirect_tqdm(): for i in trange(9): if i == 4: LOG.info(&quot;console logging redirected to `tqdm.write()`&quot;) # logging restored"><pre><span class="pl-k">import</span> <span class="pl-s1">logging</span> <span class="pl-k">from</span> <span class="pl-s1">tqdm</span> <span class="pl-k">import</span> <span class="pl-s1">trange</span> <span class="pl-k">from</span> <span class="pl-s1">tqdm</span>.<span class="pl-s1">contrib</span>.<span class="pl-s1">logging</span> <span class="pl-k">import</span> <span class="pl-s1">logging_redirect_tqdm</span> <span class="pl-c1">LOG</span> <span class="pl-c1">=</span> <span class="pl-s1">logging</span>.<span class="pl-c1">getLogger</span>(<span class="pl-s1">__name__</span>) <span class="pl-k">if</span> <span class="pl-s1">__name__</span> <span class="pl-c1">==</span> <span class="pl-s">'__main__'</span>: <span class="pl-s1">logging</span>.<span class="pl-c1">basicConfig</span>(<span class="pl-s1">level</span><span class="pl-c1">=</span><span class="pl-s1">logging</span>.<span class="pl-c1">INFO</span>) <span class="pl-k">with</span> <span class="pl-en">logging_redirect_tqdm</span>(): <span class="pl-k">for</span> <span class="pl-s1">i</span> <span class="pl-c1">in</span> <span class="pl-en">trange</span>(<span class="pl-c1">9</span>): <span class="pl-k">if</span> <span class="pl-s1">i</span> <span class="pl-c1">==</span> <span class="pl-c1">4</span>: <span class="pl-c1">LOG</span>.<span class="pl-c1">info</span>(<span class="pl-s">"console logging redirected to `tqdm.write()`"</span>) <span class="pl-c"># logging restored</span></pre></div> <a name="user-content-monitoring-thread-intervals-and-miniters"></a> <div class="markdown-heading" dir="auto"><h4 tabindex="-1" class="heading-element" dir="auto"><a href="#table-of-contents">Monitoring thread, intervals and miniters</a></h4><a id="user-content-monitoring-thread-intervals-and-miniters" class="anchor" aria-label="Permalink: Monitoring thread, intervals and miniters" href="#monitoring-thread-intervals-and-miniters"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto"><code>tqdm</code> implements a few tricks to increase efficiency and reduce overhead.</p> <ul dir="auto"> <li>Avoid unnecessary frequent bar refreshing: <code>mininterval</code> defines how long to wait between each refresh. <code>tqdm</code> always gets updated in the background, but it will display only every <code>mininterval</code>.</li> <li>Reduce number of calls to check system clock/time.</li> <li><code>mininterval</code> is more intuitive to configure than <code>miniters</code>. A clever adjustment system <code>dynamic_miniters</code> will automatically adjust <code>miniters</code> to the amount of iterations that fit into time <code>mininterval</code>. Essentially, <code>tqdm</code> will check if it's time to print without actually checking time. This behaviour can be still be bypassed by manually setting <code>miniters</code>.</li> </ul> <p dir="auto">However, consider a case with a combination of fast and slow iterations. After a few fast iterations, <code>dynamic_miniters</code> will set <code>miniters</code> to a large number. When iteration rate subsequently slows, <code>miniters</code> will remain large and thus reduce display update frequency. To address this:</p> <ul dir="auto"> <li><code>maxinterval</code> defines the maximum time between display refreshes. A concurrent monitoring thread checks for overdue updates and forces one where necessary.</li> </ul> <p dir="auto">The monitoring thread should not have a noticeable overhead, and guarantees updates at least every 10 seconds by default. This value can be directly changed by setting the <code>monitor_interval</code> of any <code>tqdm</code> instance (i.e. <code>t = tqdm.tqdm(...); t.monitor_interval = 2</code>). The monitor thread may be disabled application-wide by setting <code>tqdm.tqdm.monitor_interval = 0</code> before instantiation of any <code>tqdm</code> bar.</p> <a name="user-content-merch"></a> <div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto"><a href="#table-of-contents">Merch</a></h3><a id="user-content-merch" class="anchor" aria-label="Permalink: Merch" href="#merch"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto">You can buy <a href="https://tqdm.github.io/merch" rel="nofollow">tqdm branded merch</a> now!</p> <a name="user-content-contributions"></a> <div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto"><a href="#table-of-contents">Contributions</a></h3><a id="user-content-contributions" class="anchor" aria-label="Permalink: Contributions" href="#contributions"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto"><a href="https://github.com/tqdm/tqdm/graphs/commit-activity"><img alt="GitHub-Commits" src="https://camo.githubusercontent.com/074830ea80f6a475d636c6d370ea48ad0abd0bbd45fc65c8214bd089dbe1f18c/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f636f6d6d69742d61637469766974792f792f7471646d2f7471646d2e7376673f6c6f676f3d676974266c6f676f436f6c6f723d7768697465" data-canonical-src="https://img.shields.io/github/commit-activity/y/tqdm/tqdm.svg?logo=git&amp;logoColor=white" style="max-width: 100%;"></a> <a href="https://github.com/tqdm/tqdm/issues?q="><img alt="GitHub-Issues" src="https://camo.githubusercontent.com/70e2e8e5918a84706aef777108b1b2f746905dbde5632e31dd6a6995ea606b92/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6973737565732d636c6f7365642f7471646d2f7471646d2e7376673f6c6f676f3d676974687562266c6f676f436f6c6f723d7768697465" data-canonical-src="https://img.shields.io/github/issues-closed/tqdm/tqdm.svg?logo=github&amp;logoColor=white" style="max-width: 100%;"></a> <a href="https://github.com/tqdm/tqdm/pulls"><img alt="GitHub-PRs" src="https://camo.githubusercontent.com/7a64d61cc28a7a27cb4b7294d956d17c76f77b61574c90507bee59bfdc9fc4f4/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6973737565732d70722d636c6f7365642f7471646d2f7471646d2e7376673f6c6f676f3d676974687562266c6f676f436f6c6f723d7768697465" data-canonical-src="https://img.shields.io/github/issues-pr-closed/tqdm/tqdm.svg?logo=github&amp;logoColor=white" style="max-width: 100%;"></a> <a href="https://www.openhub.net/p/tqdm?ref=Thin+badge" rel="nofollow"><img alt="OpenHub-Status" src="https://camo.githubusercontent.com/ac14f272ab53a5192e3561e8a01bced574602f0e0bbb0fd91686bb712835139c/68747470733a2f2f7777772e6f70656e6875622e6e65742f702f7471646d2f776964676574732f70726f6a6563745f7468696e5f62616467653f666f726d61743d676966" data-canonical-src="https://www.openhub.net/p/tqdm/widgets/project_thin_badge?format=gif" style="max-width: 100%;"></a> <a href="https://github.com/tqdm/tqdm/graphs/contributors"><img alt="GitHub-Contributions" src="https://camo.githubusercontent.com/b45c9b56747c8ce317a820b6519e39c1dd4797d4a2fc7dd5f3106c51e43aa45e/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f636f6e7472696275746f72732f7471646d2f7471646d2e7376673f6c6f676f3d676974687562266c6f676f436f6c6f723d7768697465" data-canonical-src="https://img.shields.io/github/contributors/tqdm/tqdm.svg?logo=github&amp;logoColor=white" style="max-width: 100%;"></a> <a href="https://bestpractices.coreinfrastructure.org/projects/3264" rel="nofollow"><img alt="CII Best Practices" src="https://camo.githubusercontent.com/5c44fd126aa69c23a08d5b308523d220337a18c058fc862e2db70a6ab2af0870/68747470733a2f2f626573747072616374696365732e636f7265696e6672617374727563747572652e6f72672f70726f6a656374732f333236342f6261646765" data-canonical-src="https://bestpractices.coreinfrastructure.org/projects/3264/badge" style="max-width: 100%;"></a></p> <p dir="auto">All source code is hosted on <a href="https://github.com/tqdm/tqdm">GitHub</a>. Contributions are welcome.</p> <p dir="auto">See the <a href="https://github.com/tqdm/tqdm/blob/master/CONTRIBUTING.md">CONTRIBUTING</a> file for more information.</p> <p dir="auto">Developers who have made significant contributions, ranked by <em>SLoC</em> (surviving lines of code, <a href="https://github.com/casperdcl/git-fame">git fame</a> <code>-wMC --excl '\.(png|gif|jpg)$'</code>), are:</p> <markdown-accessiblity-table><table> <thead valign="bottom"> <tr><th>Name</th> <th>ID</th> <th>SLoC</th> <th>Notes</th> </tr> </thead> <tbody valign="top"> <tr><td>Casper da Costa-Luis</td> <td><a href="https://github.com/casperdcl">casperdcl</a></td> <td>~80%</td> <td>primary maintainer <a href="https://cdcl.ml/sponsor" rel="nofollow"><img alt="Gift-Casper" src="https://camo.githubusercontent.com/30931f292c189e6bddbb3ef3dfaed2b5083d9a9b469f09f8fe2ec0e7cb92209a/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f64796e616d69632f6a736f6e2e7376673f636f6c6f723d666636396234266c6162656c3d67696674732532307265636569766564267072656669783d2543322541332671756572793d2532342e2e73756d2675726c3d68747470732533412532462532466361737065727363692e756b2e746f25324667696674732e6a736f6e" data-canonical-src="https://img.shields.io/badge/dynamic/json.svg?color=ff69b4&amp;label=gifts%20received&amp;prefix=%C2%A3&amp;query=%24..sum&amp;url=https%3A%2F%2Fcaspersci.uk.to%2Fgifts.json" style="max-width: 100%;"></a></td> </tr> <tr><td>Stephen Larroque</td> <td><a href="https://github.com/lrq3000">lrq3000</a></td> <td>~9%</td> <td>team member</td> </tr> <tr><td>Martin Zugnoni</td> <td><a href="https://github.com/martinzugnoni">martinzugnoni</a></td> <td>~3%</td> <td> </td> </tr> <tr><td>Daniel Ecer</td> <td><a href="https://github.com/de-code">de-code</a></td> <td>~2%</td> <td> </td> </tr> <tr><td>Richard Sheridan</td> <td><a href="https://github.com/richardsheridan">richardsheridan</a></td> <td>~1%</td> <td> </td> </tr> <tr><td>Guangshuo Chen</td> <td><a href="https://github.com/chengs">chengs</a></td> <td>~1%</td> <td> </td> </tr> <tr><td>Helio Machado</td> <td><a href="https://github.com/0x2b3bfa0">0x2b3bfa0</a></td> <td>~1%</td> <td> </td> </tr> <tr><td>Kyle Altendorf</td> <td><a href="https://github.com/altendky">altendky</a></td> <td>&lt;1%</td> <td> </td> </tr> <tr><td>Noam Yorav-Raphael</td> <td><a href="https://github.com/noamraph">noamraph</a></td> <td>&lt;1%</td> <td>original author</td> </tr> <tr><td>Matthew Stevens</td> <td><a href="https://github.com/mjstevens777">mjstevens777</a></td> <td>&lt;1%</td> <td> </td> </tr> <tr><td>Hadrien Mary</td> <td><a href="https://github.com/hadim">hadim</a></td> <td>&lt;1%</td> <td>team member</td> </tr> <tr><td>Mikhail Korobov</td> <td><a href="https://github.com/kmike">kmike</a></td> <td>&lt;1%</td> <td>team member</td> </tr> </tbody> </table></markdown-accessiblity-table> <a name="user-content-ports-to-other-languages"></a> <div class="markdown-heading" dir="auto"><h4 tabindex="-1" class="heading-element" dir="auto"><a href="#table-of-contents">Ports to Other Languages</a></h4><a id="user-content-ports-to-other-languages" class="anchor" aria-label="Permalink: Ports to Other Languages" href="#ports-to-other-languages"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto">A list is available on <a href="https://github.com/tqdm/tqdm/wiki/tqdm-ports">this wiki page</a>.</p> <a name="user-content-licence"></a> <div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto"><a href="#table-of-contents">LICENCE</a></h3><a id="user-content-licence" class="anchor" aria-label="Permalink: LICENCE" href="#licence"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto">Open Source (OSI approved): <a href="https://raw.githubusercontent.com/tqdm/tqdm/master/LICENCE" rel="nofollow"><img alt="LICENCE" src="https://camo.githubusercontent.com/d5daff2dea068d33eefe608aff6c890e506dfdf1bb466adce907e76a192cd87a/68747470733a2f2f696d672e736869656c64732e696f2f707970692f6c2f7471646d2e737667" data-canonical-src="https://img.shields.io/pypi/l/tqdm.svg" style="max-width: 100%;"> </a></p> <p dir="auto">Citation information: <a href="https://doi.org/10.5281/zenodo.595120" rel="nofollow"><img alt="DOI" src="https://camo.githubusercontent.com/521368c6aab8cf69159a45d74b79a68e5a587a78423d0c58865524cd07fe1507/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f444f492d31302e353238312f7a656e6f646f2e3539353132302d626c75652e737667" data-canonical-src="https://img.shields.io/badge/DOI-10.5281/zenodo.595120-blue.svg" style="max-width: 100%;"> </a></p> <p dir="auto"><a href="https://cgi.cdcl.ml/hits?q=tqdm&amp;a=plot&amp;r=https://github.com/tqdm/tqdm&amp;l=https://tqdm.github.io/img/favicon.png&amp;f=https://tqdm.github.io/img/logo.gif&amp;style=social" rel="nofollow"><img alt="README-Hits" src="https://camo.githubusercontent.com/05dba70319f22e964483c4ab94f37757d0d95698320a34f53286620788b7ae54/68747470733a2f2f6367692e6364636c2e6d6c2f686974733f713d7471646d267374796c653d736f6369616c26723d68747470733a2f2f6769746875622e636f6d2f7471646d2f7471646d266c3d68747470733a2f2f7471646d2e6769746875622e696f2f696d672f66617669636f6e2e706e6726663d68747470733a2f2f7471646d2e6769746875622e696f2f696d672f6c6f676f2e676966" data-canonical-src="https://cgi.cdcl.ml/hits?q=tqdm&amp;style=social&amp;r=https://github.com/tqdm/tqdm&amp;l=https://tqdm.github.io/img/favicon.png&amp;f=https://tqdm.github.io/img/logo.gif" style="max-width: 100%;"></a> (Since 19 May 2016)</p> </article></div></div></div></div></div> <!-- --> <!-- --> <script type="application/json" id="__PRIMER_DATA_:R0:__">{"resolvedServerColorMode":"day"}</script></div> </react-partial> <input type="hidden" data-csrf="true" value="GWYzBinAxgohkS1YajvgB9aVFunXZx3KM6dvdGKhi4cNE68j6gskbRY7G2mEj9slesGghL8SDXCdZnjSj47tog==" /> </div> <div data-view-component="true" class="Layout-sidebar"> <div class="BorderGrid about-margin" data-pjax> <div class="BorderGrid-row"> <div class="BorderGrid-cell"> <div class="hide-sm hide-md"> <h2 class="mb-3 h4">About</h2> <p class="f4 my-3"> ⚡ A Fast, Extensible Progress Bar for Python and CLI </p> <div class="my-3 d-flex flex-items-center"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-link flex-shrink-0 mr-2"> <path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path> </svg> <span class="flex-auto min-width-0 css-truncate css-truncate-target width-fit"> <a title="https://tqdm.github.io" role="link" target="_blank" rel="noopener noreferrer nofollow" class="text-bold" href="https://tqdm.github.io">tqdm.github.io</a> </span> </div> <h3 class="sr-only">Topics</h3> <div class="my-3"> <div class="f6"> <a href="/topics/python" title="Topic: python" data-view-component="true" class="topic-tag topic-tag-link"> python </a> <a href="/topics/cli" title="Topic: cli" data-view-component="true" class="topic-tag topic-tag-link"> cli </a> <a href="/topics/console" title="Topic: console" data-view-component="true" class="topic-tag topic-tag-link"> console </a> <a href="/topics/gui" title="Topic: gui" data-view-component="true" class="topic-tag topic-tag-link"> gui </a> <a href="/topics/time" title="Topic: time" data-view-component="true" class="topic-tag topic-tag-link"> time </a> <a href="/topics/terminal" title="Topic: terminal" data-view-component="true" class="topic-tag topic-tag-link"> terminal </a> <a href="/topics/telegram" title="Topic: telegram" data-view-component="true" class="topic-tag topic-tag-link"> telegram </a> <a href="/topics/utilities" title="Topic: utilities" data-view-component="true" class="topic-tag topic-tag-link"> utilities </a> <a href="/topics/jupyter" title="Topic: jupyter" data-view-component="true" class="topic-tag topic-tag-link"> jupyter </a> <a href="/topics/progress" title="Topic: progress" data-view-component="true" class="topic-tag topic-tag-link"> progress </a> <a href="/topics/discord" title="Topic: discord" data-view-component="true" class="topic-tag topic-tag-link"> discord </a> <a href="/topics/progress-bar" title="Topic: progress-bar" data-view-component="true" class="topic-tag topic-tag-link"> progress-bar </a> <a href="/topics/parallel" title="Topic: parallel" data-view-component="true" class="topic-tag topic-tag-link"> parallel </a> <a href="/topics/keras" title="Topic: keras" data-view-component="true" class="topic-tag topic-tag-link"> keras </a> <a href="/topics/meter" title="Topic: meter" data-view-component="true" class="topic-tag topic-tag-link"> meter </a> <a href="/topics/progressbar" title="Topic: progressbar" data-view-component="true" class="topic-tag topic-tag-link"> progressbar </a> <a href="/topics/pandas" title="Topic: pandas" data-view-component="true" class="topic-tag topic-tag-link"> pandas </a> <a href="/topics/progressmeter" title="Topic: progressmeter" data-view-component="true" class="topic-tag topic-tag-link"> progressmeter </a> <a href="/topics/rate" title="Topic: rate" data-view-component="true" class="topic-tag topic-tag-link"> rate </a> <a href="/topics/closember" title="Topic: closember" data-view-component="true" class="topic-tag topic-tag-link"> closember </a> </div> </div> <h3 class="sr-only">Resources</h3> <div class="mt-2"> <a class="Link--muted" data-analytics-event="{&quot;category&quot;:&quot;Repository Overview&quot;,&quot;action&quot;:&quot;click&quot;,&quot;label&quot;:&quot;location:sidebar;file:readme&quot;}" href="#readme-ov-file"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-book mr-2"> <path d="M0 1.75A.75.75 0 0 1 .75 1h4.253c1.227 0 2.317.59 3 1.501A3.743 3.743 0 0 1 11.006 1h4.245a.75.75 0 0 1 .75.75v10.5a.75.75 0 0 1-.75.75h-4.507a2.25 2.25 0 0 0-1.591.659l-.622.621a.75.75 0 0 1-1.06 0l-.622-.621A2.25 2.25 0 0 0 5.258 13H.75a.75.75 0 0 1-.75-.75Zm7.251 10.324.004-5.073-.002-2.253A2.25 2.25 0 0 0 5.003 2.5H1.5v9h3.757a3.75 3.75 0 0 1 1.994.574ZM8.755 4.75l-.004 7.322a3.752 3.752 0 0 1 1.992-.572H14.5v-9h-3.495a2.25 2.25 0 0 0-2.25 2.25Z"></path> </svg> Readme </a> </div> <h3 class="sr-only">License</h3> <div class="mt-2"> <a href="#License-1-ov-file" class="Link--muted" data-analytics-event="{&quot;category&quot;:&quot;Repository Overview&quot;,&quot;action&quot;:&quot;click&quot;,&quot;label&quot;:&quot;location:sidebar;file:license&quot;}" > <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-law mr-2"> <path d="M8.75.75V2h.985c.304 0 .603.08.867.231l1.29.736c.038.022.08.033.124.033h2.234a.75.75 0 0 1 0 1.5h-.427l2.111 4.692a.75.75 0 0 1-.154.838l-.53-.53.529.531-.001.002-.002.002-.006.006-.006.005-.01.01-.045.04c-.21.176-.441.327-.686.45C14.556 10.78 13.88 11 13 11a4.498 4.498 0 0 1-2.023-.454 3.544 3.544 0 0 1-.686-.45l-.045-.04-.016-.015-.006-.006-.004-.004v-.001a.75.75 0 0 1-.154-.838L12.178 4.5h-.162c-.305 0-.604-.079-.868-.231l-1.29-.736a.245.245 0 0 0-.124-.033H8.75V13h2.5a.75.75 0 0 1 0 1.5h-6.5a.75.75 0 0 1 0-1.5h2.5V3.5h-.984a.245.245 0 0 0-.124.033l-1.289.737c-.265.15-.564.23-.869.23h-.162l2.112 4.692a.75.75 0 0 1-.154.838l-.53-.53.529.531-.001.002-.002.002-.006.006-.016.015-.045.04c-.21.176-.441.327-.686.45C4.556 10.78 3.88 11 3 11a4.498 4.498 0 0 1-2.023-.454 3.544 3.544 0 0 1-.686-.45l-.045-.04-.016-.015-.006-.006-.004-.004v-.001a.75.75 0 0 1-.154-.838L2.178 4.5H1.75a.75.75 0 0 1 0-1.5h2.234a.249.249 0 0 0 .125-.033l1.288-.737c.265-.15.564-.23.869-.23h.984V.75a.75.75 0 0 1 1.5 0Zm2.945 8.477c.285.135.718.273 1.305.273s1.02-.138 1.305-.273L13 6.327Zm-10 0c.285.135.718.273 1.305.273s1.02-.138 1.305-.273L3 6.327Z"></path> </svg> View license </a> </div> <h3 class="sr-only">Code of conduct</h3> <div class="mt-2"> <a href="#coc-ov-file" class="Link--muted" data-analytics-event="{&quot;category&quot;:&quot;Repository Overview&quot;,&quot;action&quot;:&quot;click&quot;,&quot;label&quot;:&quot;location:sidebar;file:code of conduct&quot;}" > <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-code-of-conduct mr-2"> <path d="M8.048 2.241c.964-.709 2.079-1.238 3.325-1.241a4.616 4.616 0 0 1 3.282 1.355c.41.408.757.86.996 1.428.238.568.348 1.206.347 1.968 0 2.193-1.505 4.254-3.081 5.862-1.496 1.526-3.213 2.796-4.249 3.563l-.22.163a.749.749 0 0 1-.895 0l-.221-.163c-1.036-.767-2.753-2.037-4.249-3.563C1.51 10.008.007 7.952.002 5.762a4.614 4.614 0 0 1 1.353-3.407C3.123.585 6.223.537 8.048 2.24Zm-1.153.983c-1.25-1.033-3.321-.967-4.48.191a3.115 3.115 0 0 0-.913 2.335c0 1.556 1.109 3.24 2.652 4.813C5.463 11.898 6.96 13.032 8 13.805c.353-.262.758-.565 1.191-.905l-1.326-1.223a.75.75 0 0 1 1.018-1.102l1.48 1.366c.328-.281.659-.577.984-.887L9.99 9.802a.75.75 0 1 1 1.019-1.103l1.384 1.28c.295-.329.566-.661.81-.995L12.92 8.7l-1.167-1.168c-.674-.671-1.78-.664-2.474.03-.268.269-.538.537-.802.797-.893.882-2.319.843-3.185-.032-.346-.35-.693-.697-1.043-1.047a.75.75 0 0 1-.04-1.016c.162-.191.336-.401.52-.623.62-.748 1.356-1.637 2.166-2.417Zm7.112 4.442c.313-.65.491-1.293.491-1.916v-.001c0-.614-.088-1.045-.23-1.385-.143-.339-.357-.633-.673-.949a3.111 3.111 0 0 0-2.218-.915c-1.092.003-2.165.627-3.226 1.602-.823.755-1.554 1.637-2.228 2.45l-.127.154.562.566a.755.755 0 0 0 1.066.02l.794-.79c1.258-1.258 3.312-1.31 4.594-.032.396.394.792.791 1.173 1.173Z"></path> </svg> Code of conduct </a> </div> <h3 class="sr-only">Security policy</h3> <div class="mt-2"> <a href="#security-ov-file" class="Link--muted" data-analytics-event="{&quot;category&quot;:&quot;Repository Overview&quot;,&quot;action&quot;:&quot;click&quot;,&quot;label&quot;:&quot;location:sidebar;file:security policy&quot;}" > <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-law mr-2"> <path d="M8.75.75V2h.985c.304 0 .603.08.867.231l1.29.736c.038.022.08.033.124.033h2.234a.75.75 0 0 1 0 1.5h-.427l2.111 4.692a.75.75 0 0 1-.154.838l-.53-.53.529.531-.001.002-.002.002-.006.006-.006.005-.01.01-.045.04c-.21.176-.441.327-.686.45C14.556 10.78 13.88 11 13 11a4.498 4.498 0 0 1-2.023-.454 3.544 3.544 0 0 1-.686-.45l-.045-.04-.016-.015-.006-.006-.004-.004v-.001a.75.75 0 0 1-.154-.838L12.178 4.5h-.162c-.305 0-.604-.079-.868-.231l-1.29-.736a.245.245 0 0 0-.124-.033H8.75V13h2.5a.75.75 0 0 1 0 1.5h-6.5a.75.75 0 0 1 0-1.5h2.5V3.5h-.984a.245.245 0 0 0-.124.033l-1.289.737c-.265.15-.564.23-.869.23h-.162l2.112 4.692a.75.75 0 0 1-.154.838l-.53-.53.529.531-.001.002-.002.002-.006.006-.016.015-.045.04c-.21.176-.441.327-.686.45C4.556 10.78 3.88 11 3 11a4.498 4.498 0 0 1-2.023-.454 3.544 3.544 0 0 1-.686-.45l-.045-.04-.016-.015-.006-.006-.004-.004v-.001a.75.75 0 0 1-.154-.838L2.178 4.5H1.75a.75.75 0 0 1 0-1.5h2.234a.249.249 0 0 0 .125-.033l1.288-.737c.265-.15.564-.23.869-.23h.984V.75a.75.75 0 0 1 1.5 0Zm2.945 8.477c.285.135.718.273 1.305.273s1.02-.138 1.305-.273L13 6.327Zm-10 0c.285.135.718.273 1.305.273s1.02-.138 1.305-.273L3 6.327Z"></path> </svg> Security policy </a> </div> <include-fragment src="/tqdm/tqdm/hovercards/citation/sidebar_partial?tree_name=master"> </include-fragment> <div class="mt-2"> <a href="/tqdm/tqdm/activity" data-view-component="true" class="Link Link--muted"><svg text="gray" aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-pulse mr-2"> <path d="M6 2c.306 0 .582.187.696.471L10 10.731l1.304-3.26A.751.751 0 0 1 12 7h3.25a.75.75 0 0 1 0 1.5h-2.742l-1.812 4.528a.751.751 0 0 1-1.392 0L6 4.77 4.696 8.03A.75.75 0 0 1 4 8.5H.75a.75.75 0 0 1 0-1.5h2.742l1.812-4.529A.751.751 0 0 1 6 2Z"></path> </svg> <span class="color-fg-muted">Activity</span></a> </div> <div class="mt-2"> <a href="/tqdm/tqdm/custom-properties" data-view-component="true" class="Link Link--muted"><svg text="gray" aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-note mr-2"> <path d="M0 3.75C0 2.784.784 2 1.75 2h12.5c.966 0 1.75.784 1.75 1.75v8.5A1.75 1.75 0 0 1 14.25 14H1.75A1.75 1.75 0 0 1 0 12.25Zm1.75-.25a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25v-8.5a.25.25 0 0 0-.25-.25ZM3.5 6.25a.75.75 0 0 1 .75-.75h7a.75.75 0 0 1 0 1.5h-7a.75.75 0 0 1-.75-.75Zm.75 2.25h4a.75.75 0 0 1 0 1.5h-4a.75.75 0 0 1 0-1.5Z"></path> </svg> <span class="color-fg-muted">Custom properties</span></a> </div> <h3 class="sr-only">Stars</h3> <div class="mt-2"> <a href="/tqdm/tqdm/stargazers" data-view-component="true" class="Link Link--muted"><svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-star mr-2"> <path d="M8 .25a.75.75 0 0 1 .673.418l1.882 3.815 4.21.612a.75.75 0 0 1 .416 1.279l-3.046 2.97.719 4.192a.751.751 0 0 1-1.088.791L8 12.347l-3.766 1.98a.75.75 0 0 1-1.088-.79l.72-4.194L.818 6.374a.75.75 0 0 1 .416-1.28l4.21-.611L7.327.668A.75.75 0 0 1 8 .25Zm0 2.445L6.615 5.5a.75.75 0 0 1-.564.41l-3.097.45 2.24 2.184a.75.75 0 0 1 .216.664l-.528 3.084 2.769-1.456a.75.75 0 0 1 .698 0l2.77 1.456-.53-3.084a.75.75 0 0 1 .216-.664l2.24-2.183-3.096-.45a.75.75 0 0 1-.564-.41L8 2.694Z"></path> </svg> <strong>29.5k</strong> stars</a> </div> <h3 class="sr-only">Watchers</h3> <div class="mt-2"> <a href="/tqdm/tqdm/watchers" data-view-component="true" class="Link Link--muted"><svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-eye mr-2"> <path d="M8 2c1.981 0 3.671.992 4.933 2.078 1.27 1.091 2.187 2.345 2.637 3.023a1.62 1.62 0 0 1 0 1.798c-.45.678-1.367 1.932-2.637 3.023C11.67 13.008 9.981 14 8 14c-1.981 0-3.671-.992-4.933-2.078C1.797 10.83.88 9.576.43 8.898a1.62 1.62 0 0 1 0-1.798c.45-.677 1.367-1.931 2.637-3.022C4.33 2.992 6.019 2 8 2ZM1.679 7.932a.12.12 0 0 0 0 .136c.411.622 1.241 1.75 2.366 2.717C5.176 11.758 6.527 12.5 8 12.5c1.473 0 2.825-.742 3.955-1.715 1.124-.967 1.954-2.096 2.366-2.717a.12.12 0 0 0 0-.136c-.412-.621-1.242-1.75-2.366-2.717C10.824 4.242 9.473 3.5 8 3.5c-1.473 0-2.825.742-3.955 1.715-1.124.967-1.954 2.096-2.366 2.717ZM8 10a2 2 0 1 1-.001-3.999A2 2 0 0 1 8 10Z"></path> </svg> <strong>211</strong> watching</a> </div> <h3 class="sr-only">Forks</h3> <div class="mt-2"> <a href="/tqdm/tqdm/forks" data-view-component="true" class="Link Link--muted"><svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-repo-forked mr-2"> <path d="M5 5.372v.878c0 .414.336.75.75.75h4.5a.75.75 0 0 0 .75-.75v-.878a2.25 2.25 0 1 1 1.5 0v.878a2.25 2.25 0 0 1-2.25 2.25h-1.5v2.128a2.251 2.251 0 1 1-1.5 0V8.5h-1.5A2.25 2.25 0 0 1 3.5 6.25v-.878a2.25 2.25 0 1 1 1.5 0ZM5 3.25a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Zm6.75.75a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5Zm-3 8.75a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Z"></path> </svg> <strong>1.4k</strong> forks</a> </div> <div class="mt-2"> <a class="Link--muted" href="/contact/report-content?content_url=https%3A%2F%2Fgithub.com%2Ftqdm%2Ftqdm&amp;report=tqdm+%28user%29"> Report repository </a> </div> </div> </div> </div> <div class="BorderGrid-row"> <div class="BorderGrid-cell"> <h2 class="h4 mb-3" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame"> <a href="/tqdm/tqdm/releases" data-view-component="true" class="Link--primary no-underline Link">Releases <span title="131" data-view-component="true" class="Counter">131</span></a></h2> <a class="Link--primary d-flex no-underline" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" href="/tqdm/tqdm/releases/tag/v4.67.1"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-tag flex-shrink-0 mt-1 color-fg-success"> <path d="M1 7.775V2.75C1 1.784 1.784 1 2.75 1h5.025c.464 0 .91.184 1.238.513l6.25 6.25a1.75 1.75 0 0 1 0 2.474l-5.026 5.026a1.75 1.75 0 0 1-2.474 0l-6.25-6.25A1.752 1.752 0 0 1 1 7.775Zm1.5 0c0 .066.026.13.073.177l6.25 6.25a.25.25 0 0 0 .354 0l5.025-5.025a.25.25 0 0 0 0-.354l-6.25-6.25a.25.25 0 0 0-.177-.073H2.75a.25.25 0 0 0-.25.25ZM6 5a1 1 0 1 1 0 2 1 1 0 0 1 0-2Z"></path> </svg> <div class="ml-2 min-width-0"> <div class="d-flex"> <span class="css-truncate css-truncate-target text-bold mr-2" style="max-width: none;">tqdm v4.67.1 stable</span> <span title="Label: Latest" data-view-component="true" class="Label Label--success flex-shrink-0"> Latest </span> </div> <div class="text-small color-fg-muted"><relative-time datetime="2024-11-27T19:23:27Z" class="no-wrap">Nov 27, 2024</relative-time></div> </div> </a> <div data-view-component="true" class="mt-3"> <a text="small" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" href="/tqdm/tqdm/releases" data-view-component="true" class="Link">+ 130 releases</a></div> </div> </div> <div class="BorderGrid-row"> <div class="BorderGrid-cell"> <h2 class="h4 mb-3">Sponsor this project</h2> <include-fragment src="/tqdm/tqdm/sponsors_list?block_button=false&amp;current_repository=tqdm" aria-busy="true" aria-label="Loading sponsorable links"> <ul class="list-style-none"> <li class="mb-2 d-flex"> <div class="Skeleton avatar avatar-user mr-2" style="width:32px;height:32px;"></div> <div class="Skeleton Skeleton--text flex-1 flex-self-center f4">&nbsp;</div> </li> <li class="mb-2 d-flex"> <div class="Skeleton avatar avatar-user mr-2" style="width:32px;height:32px;"></div> <div class="Skeleton Skeleton--text flex-1 flex-self-center f4">&nbsp;</div> </li> </ul> </include-fragment> <ul class="list-style-none"> <li class="mb-2 d-flex"> <span class="mr-2 d-flex flex-items-center flex-justify-center" style="min-width:32px;height:32px;"> <img width="32" height="32" class="octicon rounded-2 d-block" alt="tidelift" src="https://github.githubassets.com/assets/tidelift-8cea37dea8fc.svg" /> </span> <span class="flex-self-center flex-auto min-width-0 css-truncate css-truncate-target width-fit"> <a target="_blank" data-ga-click="Dashboard, click, Nav menu - item:org-profile context:organization" data-hydro-click="{&quot;event_type&quot;:&quot;sponsors.repo_funding_links_link_click&quot;,&quot;payload&quot;:{&quot;platform&quot;:{&quot;platform_type&quot;:&quot;TIDELIFT&quot;,&quot;platform_url&quot;:&quot;https://tidelift.com/funding/github/pypi/tqdm&quot;},&quot;platforms&quot;:[{&quot;platform_type&quot;:&quot;GITHUB&quot;,&quot;platform_url&quot;:&quot;https://github.com/casperdcl&quot;},{&quot;platform_type&quot;:&quot;GITHUB&quot;,&quot;platform_url&quot;:&quot;https://github.com/tqdm&quot;},{&quot;platform_type&quot;:&quot;TIDELIFT&quot;,&quot;platform_url&quot;:&quot;https://tidelift.com/funding/github/pypi/tqdm&quot;},{&quot;platform_type&quot;:&quot;CUSTOM&quot;,&quot;platform_url&quot;:&quot;https://tqdm.github.io/merch&quot;}],&quot;repo_id&quot;:36804486,&quot;owner_id&quot;:12731565,&quot;user_id&quot;:null,&quot;originating_url&quot;:&quot;https://github.com/tqdm/tqdm&quot;}}" data-hydro-click-hmac="59677626324e8a5af054decf3bd47dbd4cd343ef802684ee3726dcd03ddb4586" href="https://tidelift.com/funding/github/pypi/tqdm"><span>tidelift.com/funding/github/<strong>pypi/tqdm</strong></span></a> </span> </li> <li class="mb-2 d-flex"> <span class="mr-2 d-flex flex-items-center flex-justify-center" style="min-width:32px;height:32px;"> <svg class="octicon octicon-link color-fg-muted" alt="custom" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> </span> <span class="flex-self-center flex-auto min-width-0 css-truncate css-truncate-target width-fit"> <a target="_blank" data-ga-click="Dashboard, click, Nav menu - item:org-profile context:organization" data-hydro-click="{&quot;event_type&quot;:&quot;sponsors.repo_funding_links_link_click&quot;,&quot;payload&quot;:{&quot;platform&quot;:{&quot;platform_type&quot;:&quot;CUSTOM&quot;,&quot;platform_url&quot;:&quot;https://tqdm.github.io/merch&quot;},&quot;platforms&quot;:[{&quot;platform_type&quot;:&quot;GITHUB&quot;,&quot;platform_url&quot;:&quot;https://github.com/casperdcl&quot;},{&quot;platform_type&quot;:&quot;GITHUB&quot;,&quot;platform_url&quot;:&quot;https://github.com/tqdm&quot;},{&quot;platform_type&quot;:&quot;TIDELIFT&quot;,&quot;platform_url&quot;:&quot;https://tidelift.com/funding/github/pypi/tqdm&quot;},{&quot;platform_type&quot;:&quot;CUSTOM&quot;,&quot;platform_url&quot;:&quot;https://tqdm.github.io/merch&quot;}],&quot;repo_id&quot;:36804486,&quot;owner_id&quot;:12731565,&quot;user_id&quot;:null,&quot;originating_url&quot;:&quot;https://github.com/tqdm/tqdm&quot;}}" data-hydro-click-hmac="c931f85cc67247dae7b2e1f1d85a05b1b98dbf8dd33aca944b0224addd8eec69" rel="noopener noreferrer" href="https://tqdm.github.io/merch">https://tqdm.github.io/merch</a> </span> </li> </ul> <div class="text-small mt-3"> <a href="/sponsors">Learn more about GitHub Sponsors</a> </div> </div> </div> <div class="BorderGrid-row"> <div class="BorderGrid-cell"> <include-fragment src="/tqdm/tqdm/packages_list?current_repository=tqdm" aria-busy="true" aria-label="Loading latest packages"> <h2 class="h4 mb-3"> <a href="/orgs/tqdm/packages?repo_name=tqdm" data-view-component="true" class="Link--primary no-underline Link d-flex flex-items-center">Packages <span title="0" hidden="hidden" data-view-component="true" class="Counter ml-1">0</span></a></h2> <div class="mb-2 d-flex flex-items-center"> <div class="Skeleton mr-2" style="width:20px;height:20px;"></div> <div class="Skeleton Skeleton--text flex-auto">&nbsp;</div> </div> <div class="mb-2 d-flex flex-items-center"> <div class="Skeleton mr-2" style="width:20px;height:20px;"></div> <div class="Skeleton Skeleton--text flex-auto">&nbsp;</div> </div> <div class="mb-2 d-flex flex-items-center"> <div class="Skeleton mr-2" style="width:20px;height:20px;"></div> <div class="Skeleton Skeleton--text flex-auto">&nbsp;</div> </div> </include-fragment> </div> </div> <div class="BorderGrid-row" > <div class="BorderGrid-cell"> <h2 class="h4 mb-3"> <a href="/tqdm/tqdm/network/dependents" data-view-component="true" class="Link--primary no-underline Link">Used by <span title="982,264" data-view-component="true" class="Counter">982k</span></a> </h2> <a class="d-flex flex-items-center" href="/tqdm/tqdm/network/dependents"> <ul class="hx_flex-avatar-stack list-style-none min-width-0"> <li class="hx_flex-avatar-stack-item"> <img class="avatar avatar-user" src="https://avatars.githubusercontent.com/u/82964530?s=64&amp;v=4" width="32" height="32" alt="@klxcoder" /> </li> <li class="hx_flex-avatar-stack-item"> <img class="avatar avatar-user" src="https://avatars.githubusercontent.com/u/139642565?s=64&amp;v=4" width="32" height="32" alt="@EnchantedOcean" /> </li> <li class="hx_flex-avatar-stack-item"> <img class="avatar avatar-user" src="https://avatars.githubusercontent.com/u/88430420?s=64&amp;v=4" width="32" height="32" alt="@chihebkitar" /> </li> <li class="hx_flex-avatar-stack-item"> <img class="avatar" src="https://avatars.githubusercontent.com/u/171150712?s=64&amp;v=4" width="32" height="32" alt="@zenapticlabs" /> </li> <li class="hx_flex-avatar-stack-item"> <img class="avatar avatar-user" src="https://avatars.githubusercontent.com/u/154977139?s=64&amp;v=4" width="32" height="32" alt="@DhruvGaur32" /> </li> <li class="hx_flex-avatar-stack-item"> <img class="avatar avatar-user" src="https://avatars.githubusercontent.com/u/199298900?s=64&amp;v=4" width="32" height="32" alt="@liminalcommons" /> </li> <li class="hx_flex-avatar-stack-item"> <img class="avatar avatar-user" src="https://avatars.githubusercontent.com/u/70490197?s=64&amp;v=4" width="32" height="32" alt="@markhywang" /> </li> <li class="hx_flex-avatar-stack-item"> <img class="avatar avatar-user" src="https://avatars.githubusercontent.com/u/98721968?s=64&amp;v=4" width="32" height="32" alt="@alexbakers" /> </li> </ul> <span class="px-2 text-bold text-small no-wrap"> + 982,256 </span> </a> </div> </div> <div class="BorderGrid-row"> <div class="BorderGrid-cell"> <h2 class="h4 mb-3"> <a href="/tqdm/tqdm/graphs/contributors" data-view-component="true" class="Link--primary no-underline Link d-flex flex-items-center">Contributors <span title="115" data-view-component="true" class="Counter ml-1">115</span></a></h2> <include-fragment src="/tqdm/tqdm/contributors_list?count=115&amp;current_repository=tqdm&amp;items_to_show=14" aria-busy="true" aria-label="Loading contributors"> <ul class="list-style-none d-flex flex-wrap mb-n2"> <li class="mb-2 "> <div class="Skeleton avatar avatar-user mr-2" style="width:32px;height:32px;"></div> </li> <li class="mb-2 "> <div class="Skeleton avatar avatar-user mr-2" style="width:32px;height:32px;"></div> </li> <li class="mb-2 "> <div class="Skeleton avatar avatar-user mr-2" style="width:32px;height:32px;"></div> </li> <li class="mb-2 "> <div class="Skeleton avatar avatar-user mr-2" style="width:32px;height:32px;"></div> </li> <li class="mb-2 "> <div class="Skeleton avatar avatar-user mr-2" style="width:32px;height:32px;"></div> </li> <li class="mb-2 "> <div class="Skeleton avatar avatar-user mr-2" style="width:32px;height:32px;"></div> </li> <li class="mb-2 "> <div class="Skeleton avatar avatar-user mr-2" style="width:32px;height:32px;"></div> </li> <li class="mb-2 "> <div class="Skeleton avatar avatar-user mr-2" style="width:32px;height:32px;"></div> </li> <li class="mb-2 "> <div class="Skeleton avatar avatar-user mr-2" style="width:32px;height:32px;"></div> </li> <li class="mb-2 "> <div class="Skeleton avatar avatar-user mr-2" style="width:32px;height:32px;"></div> </li> <li class="mb-2 "> <div class="Skeleton avatar avatar-user mr-2" style="width:32px;height:32px;"></div> </li> <li class="mb-2 "> <div class="Skeleton avatar avatar-user mr-2" style="width:32px;height:32px;"></div> </li> <li class="mb-2 "> <div class="Skeleton avatar avatar-user mr-2" style="width:32px;height:32px;"></div> </li> <li class="mb-2 "> <div class="Skeleton avatar avatar-user mr-2" style="width:32px;height:32px;"></div> </li> </ul> </include-fragment> <div data-view-component="true" class="mt-3"> <a text="small" href="/tqdm/tqdm/graphs/contributors" data-view-component="true" class="Link--inTextBlock Link">+ 101 contributors</a></div> </div> </div> <div class="BorderGrid-row"> <div class="BorderGrid-cell"> <h2 class="h4 mb-3">Languages</h2> <div class="mb-2"> <span data-view-component="true" class="Progress"> <span style="background-color:#3572A5 !important;;width: 83.7%;" itemprop="keywords" data-view-component="true" class="Progress-item color-bg-success-emphasis"></span> <span style="background-color:#DA5B0B !important;;width: 12.2%;" itemprop="keywords" data-view-component="true" class="Progress-item color-bg-success-emphasis"></span> <span style="background-color:#ecdebe !important;;width: 2.3%;" itemprop="keywords" data-view-component="true" class="Progress-item color-bg-success-emphasis"></span> <span style="background-color:#427819 !important;;width: 1.5%;" itemprop="keywords" data-view-component="true" class="Progress-item color-bg-success-emphasis"></span> <span style="background-color:#89e051 !important;;width: 0.3%;" itemprop="keywords" data-view-component="true" class="Progress-item color-bg-success-emphasis"></span> </span></div> <ul class="list-style-none"> <li class="d-inline"> <a class="d-inline-flex flex-items-center flex-nowrap Link--secondary no-underline text-small mr-3" href="/tqdm/tqdm/search?l=python" data-ga-click="Repository, language stats search click, location:repo overview"> <svg style="color:#3572A5;" aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-dot-fill mr-2"> <path d="M8 4a4 4 0 1 1 0 8 4 4 0 0 1 0-8Z"></path> </svg> <span class="color-fg-default text-bold mr-1">Python</span> <span>83.7%</span> </a> </li> <li class="d-inline"> <a class="d-inline-flex flex-items-center flex-nowrap Link--secondary no-underline text-small mr-3" href="/tqdm/tqdm/search?l=jupyter-notebook" data-ga-click="Repository, language stats search click, location:repo overview"> <svg style="color:#DA5B0B;" aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-dot-fill mr-2"> <path d="M8 4a4 4 0 1 1 0 8 4 4 0 0 1 0-8Z"></path> </svg> <span class="color-fg-default text-bold mr-1">Jupyter Notebook</span> <span>12.2%</span> </a> </li> <li class="d-inline"> <a class="d-inline-flex flex-items-center flex-nowrap Link--secondary no-underline text-small mr-3" href="/tqdm/tqdm/search?l=roff" data-ga-click="Repository, language stats search click, location:repo overview"> <svg style="color:#ecdebe;" aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-dot-fill mr-2"> <path d="M8 4a4 4 0 1 1 0 8 4 4 0 0 1 0-8Z"></path> </svg> <span class="color-fg-default text-bold mr-1">Roff</span> <span>2.3%</span> </a> </li> <li class="d-inline"> <a class="d-inline-flex flex-items-center flex-nowrap Link--secondary no-underline text-small mr-3" href="/tqdm/tqdm/search?l=makefile" data-ga-click="Repository, language stats search click, location:repo overview"> <svg style="color:#427819;" aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-dot-fill mr-2"> <path d="M8 4a4 4 0 1 1 0 8 4 4 0 0 1 0-8Z"></path> </svg> <span class="color-fg-default text-bold mr-1">Makefile</span> <span>1.5%</span> </a> </li> <li class="d-inline"> <a class="d-inline-flex flex-items-center flex-nowrap Link--secondary no-underline text-small mr-3" href="/tqdm/tqdm/search?l=shell" data-ga-click="Repository, language stats search click, location:repo overview"> <svg style="color:#89e051;" aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-dot-fill mr-2"> <path d="M8 4a4 4 0 1 1 0 8 4 4 0 0 1 0-8Z"></path> </svg> <span class="color-fg-default text-bold mr-1">Shell</span> <span>0.3%</span> </a> </li> </ul> </div> </div> </div> </div> </div></div> </div> </div> </turbo-frame> </main> </div> </div> <footer class="footer pt-8 pb-6 f6 color-fg-muted p-responsive" role="contentinfo" > <h2 class='sr-only'>Footer</h2> <div class="d-flex flex-justify-center flex-items-center flex-column-reverse flex-lg-row flex-wrap flex-lg-nowrap"> <div class="d-flex flex-items-center flex-shrink-0 mx-2"> <a aria-label="Homepage" title="GitHub" class="footer-octicon mr-2" href="https://github.com"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-mark-github"> <path d="M12 1C5.9225 1 1 5.9225 1 12C1 16.8675 4.14875 20.9787 8.52125 22.4362C9.07125 22.5325 9.2775 22.2025 9.2775 21.9137C9.2775 21.6525 9.26375 20.7862 9.26375 19.865C6.5 20.3737 5.785 19.1912 5.565 18.5725C5.44125 18.2562 4.905 17.28 4.4375 17.0187C4.0525 16.8125 3.5025 16.3037 4.42375 16.29C5.29 16.2762 5.90875 17.0875 6.115 17.4175C7.105 19.0812 8.68625 18.6137 9.31875 18.325C9.415 17.61 9.70375 17.1287 10.02 16.8537C7.5725 16.5787 5.015 15.63 5.015 11.4225C5.015 10.2262 5.44125 9.23625 6.1425 8.46625C6.0325 8.19125 5.6475 7.06375 6.2525 5.55125C6.2525 5.55125 7.17375 5.2625 9.2775 6.67875C10.1575 6.43125 11.0925 6.3075 12.0275 6.3075C12.9625 6.3075 13.8975 6.43125 14.7775 6.67875C16.8813 5.24875 17.8025 5.55125 17.8025 5.55125C18.4075 7.06375 18.0225 8.19125 17.9125 8.46625C18.6138 9.23625 19.04 10.2125 19.04 11.4225C19.04 15.6437 16.4688 16.5787 14.0213 16.8537C14.42 17.1975 14.7638 17.8575 14.7638 18.8887C14.7638 20.36 14.75 21.5425 14.75 21.9137C14.75 22.2025 14.9563 22.5462 15.5063 22.4362C19.8513 20.9787 23 16.8537 23 12C23 5.9225 18.0775 1 12 1Z"></path> </svg> </a> <span> &copy; 2025 GitHub,&nbsp;Inc. </span> </div> <nav aria-label="Footer"> <h3 class="sr-only" id="sr-footer-heading">Footer navigation</h3> <ul class="list-style-none d-flex flex-justify-center flex-wrap mb-2 mb-lg-0" aria-labelledby="sr-footer-heading"> <li class="mx-2"> <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to Terms&quot;,&quot;label&quot;:&quot;text:terms&quot;}" href="https://docs.github.com/site-policy/github-terms/github-terms-of-service" data-view-component="true" class="Link--secondary Link">Terms</a> </li> <li class="mx-2"> <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to privacy&quot;,&quot;label&quot;:&quot;text:privacy&quot;}" href="https://docs.github.com/site-policy/privacy-policies/github-privacy-statement" data-view-component="true" class="Link--secondary Link">Privacy</a> </li> <li class="mx-2"> <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to security&quot;,&quot;label&quot;:&quot;text:security&quot;}" href="https://github.com/security" data-view-component="true" class="Link--secondary Link">Security</a> </li> <li class="mx-2"> <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to status&quot;,&quot;label&quot;:&quot;text:status&quot;}" href="https://www.githubstatus.com/" data-view-component="true" class="Link--secondary Link">Status</a> </li> <li class="mx-2"> <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to docs&quot;,&quot;label&quot;:&quot;text:docs&quot;}" href="https://docs.github.com/" data-view-component="true" class="Link--secondary Link">Docs</a> </li> <li class="mx-2"> <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to contact&quot;,&quot;label&quot;:&quot;text:contact&quot;}" href="https://support.github.com?tags=dotcom-footer" data-view-component="true" class="Link--secondary Link">Contact</a> </li> <li class="mx-2" > <cookie-consent-link> <button type="button" class="Link--secondary underline-on-hover border-0 p-0 color-bg-transparent" data-action="click:cookie-consent-link#showConsentManagement" data-analytics-event="{&quot;location&quot;:&quot;footer&quot;,&quot;action&quot;:&quot;cookies&quot;,&quot;context&quot;:&quot;subfooter&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;cookies_link_subfooter_footer&quot;}" > Manage cookies </button> </cookie-consent-link> </li> <li class="mx-2"> <cookie-consent-link> <button type="button" class="Link--secondary underline-on-hover border-0 p-0 color-bg-transparent" data-action="click:cookie-consent-link#showConsentManagement" data-analytics-event="{&quot;location&quot;:&quot;footer&quot;,&quot;action&quot;:&quot;dont_share_info&quot;,&quot;context&quot;:&quot;subfooter&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;dont_share_info_link_subfooter_footer&quot;}" > Do not share my personal information </button> </cookie-consent-link> </li> </ul> </nav> </div> </footer> <ghcc-consent id="ghcc" class="position-fixed bottom-0 left-0" style="z-index: 999999" data-initial-cookie-consent-allowed="" data-cookie-consent-required="false"></ghcc-consent> <div id="ajax-error-message" class="ajax-error-message flash flash-error" hidden> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert"> <path d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path> </svg> <button type="button" class="flash-close js-ajax-error-dismiss" aria-label="Dismiss error"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x"> <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path> </svg> </button> You can’t perform that action at this time. </div> <template id="site-details-dialog"> <details class="details-reset details-overlay details-overlay-dark lh-default color-fg-default hx_rsm" open> <summary role="button" aria-label="Close dialog"></summary> <details-dialog class="Box Box--overlay d-flex flex-column anim-fade-in fast hx_rsm-dialog hx_rsm-modal"> <button class="Box-btn-octicon m-0 btn-octicon position-absolute right-0 top-0" type="button" aria-label="Close dialog" data-close-dialog> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x"> <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path> </svg> </button> <div class="octocat-spinner my-6 js-details-dialog-spinner"></div> </details-dialog> </details> </template> <div class="Popover js-hovercard-content position-absolute" style="display: none; outline: none;"> <div class="Popover-message Popover-message--bottom-left Popover-message--large Box color-shadow-large" style="width:360px;"> </div> </div> <template id="snippet-clipboard-copy-button"> <div class="zeroclipboard-container position-absolute right-0 top-0"> <clipboard-copy aria-label="Copy" class="ClipboardButton btn js-clipboard-copy m-2 p-0" data-copy-feedback="Copied!" data-tooltip-direction="w"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-copy js-clipboard-copy-icon m-2"> <path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path> </svg> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-check js-clipboard-check-icon color-fg-success d-none m-2"> <path d="M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z"></path> </svg> </clipboard-copy> </div> </template> <template id="snippet-clipboard-copy-button-unpositioned"> <div class="zeroclipboard-container"> <clipboard-copy aria-label="Copy" class="ClipboardButton btn btn-invisible js-clipboard-copy m-2 p-0 d-flex flex-justify-center flex-items-center" data-copy-feedback="Copied!" data-tooltip-direction="w"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-copy js-clipboard-copy-icon"> <path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path> </svg> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-check js-clipboard-check-icon color-fg-success d-none"> <path d="M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z"></path> </svg> </clipboard-copy> </div> </template> </div> <div id="js-global-screen-reader-notice" class="sr-only mt-n1" aria-live="polite" aria-atomic="true" ></div> <div id="js-global-screen-reader-notice-assertive" class="sr-only mt-n1" aria-live="assertive" aria-atomic="true"></div> </body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10