当前位置: 首页 > news >正文

window下tqdm进度条

原代码是linux下运行,修改后可在window下运行。

#ifndef TQDM_H
#define TQDM_H#include <chrono>
#include <ctime>
#include <numeric>
#include <ios>
#include <string>
#include <cstdlib>
#include <iostream>
#include <vector>
#include <math.h>
#include <algorithm>
#include <io.h>
class tqdm {
private:// time, iteration counters and deques for rate calculationsstd::chrono::time_point<std::chrono::system_clock> t_first = std::chrono::system_clock::now();std::chrono::time_point<std::chrono::system_clock> t_old = std::chrono::system_clock::now();int n_old = 0;std::vector<double> deq_t;std::vector<int> deq_n;int nupdates = 0;int total_ = 0;int period = 1;unsigned int smoothing = 50;bool use_ema = true;float alpha_ema = 0.1;std::vector<const char*> bars = { " ", "▏", "▎", "▍", "▌", "▋", "▊", "▉", "█" };bool in_screen = (system("test $STY") == 0);bool in_tmux = (system("test $TMUX") == 0);bool is_tty = _isatty(1);bool use_colors = true;bool color_transition = true;int width = 40;std::string right_pad = "▏";std::string label = "";void hsv_to_rgb(float h, float s, float v, int& r, int& g, int& b) {if (s < 1e-6) {v *= 255.;r = v; g = v; b = v;}int i = (int)(h*6.0);float f = (h*6.) - i;int p = (int)(255.0*(v*(1. - s)));int q = (int)(255.0*(v*(1. - s * f)));int t = (int)(255.0*(v*(1. - s * (1. - f))));v *= 255;i %= 6;int vi = (int)v;if (i == 0) { r = vi; g = t;  b = p; }else if (i == 1) { r = q;  g = vi; b = p; }else if (i == 2) { r = p;  g = vi; b = t; }else if (i == 3) { r = p;  g = q;  b = vi; }else if (i == 4) { r = t;  g = p;  b = vi; }else if (i == 5) { r = vi; g = p;  b = q; }}public:tqdm() {if (in_screen) {set_theme_basic();color_transition = false;}else if (in_tmux) {color_transition = false;}}void reset() {t_first = std::chrono::system_clock::now();t_old = std::chrono::system_clock::now();n_old = 0;deq_t.clear();deq_n.clear();period = 1;nupdates = 0;total_ = 0;label = "";}void set_theme_line() { bars = { "─", "─", "─", "╾", "╾", "╾", "╾", "━", "═" }; }void set_theme_circle() { bars = { " ", "◓", "◑", "◒", "◐", "◓", "◑", "◒", "#" }; }void set_theme_braille() { bars = { " ", "⡀", "⡄", "⡆", "⡇", "⡏", "⡟", "⡿", "⣿" }; }void set_theme_braille_spin() { bars = { " ", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠇", "⠿" }; }void set_theme_vertical() { bars = { "▁", "▂", "▃", "▄", "▅", "▆", "▇", "█", "█" }; }void set_theme_basic() {bars = { " ", " ", " ", " ", " ", " ", " ", " ", "#" };right_pad = "|";}void set_label(std::string label_) { label = label_; }void disable_colors() {color_transition = false;use_colors = false;}void finish() {progress(total_, total_);printf("\n");fflush(stdout);}void progress(int curr, int tot) {if (is_tty && (curr%period == 0)) {total_ = tot;nupdates++;auto now = std::chrono::system_clock::now();double dt = ((std::chrono::duration<double>)(now - t_old)).count();double dt_tot = ((std::chrono::duration<double>)(now - t_first)).count();int dn = curr - n_old;n_old = curr;t_old = now;if (deq_n.size() >= smoothing) deq_n.erase(deq_n.begin());if (deq_t.size() >= smoothing) deq_t.erase(deq_t.begin());deq_t.push_back(dt);deq_n.push_back(dn);double avgrate = 0.;if (use_ema) {avgrate = deq_n[0] / deq_t[0];for (unsigned int i = 1; i < deq_t.size(); i++) {double r = 1.0*deq_n[i] / deq_t[i];avgrate = alpha_ema * r + (1.0 - alpha_ema)*avgrate;}}else {double dtsum = std::accumulate(deq_t.begin(), deq_t.end(), 0.);int dnsum = std::accumulate(deq_n.begin(), deq_n.end(), 0.);avgrate = dnsum / dtsum;}// learn an appropriate period length to avoid spamming stdout// and slowing down the loop, shoot for ~25Hz and smooth over 3 secondsif (nupdates > 10) {period = (int)(std::min(std::max((1.0 / 25)*curr / dt_tot, 1.0), 5e5));smoothing = 25 * 3;}double peta = (tot - curr) / avgrate;double pct = (double)curr / (tot*0.01);if ((tot - curr) <= period) {pct = 100.0;avgrate = tot / dt_tot;curr = tot;peta = 0;}double fills = ((double)curr / tot * width);int ifills = (int)fills;printf("\015 ");if (use_colors) {if (color_transition) {// red (hue=0) to green (hue=1/3)int r = 255, g = 255, b = 255;hsv_to_rgb(0.0 + 0.01*pct / 3, 0.65, 1.0, r, g, b);printf("\033[38;2;%d;%d;%dm ", r, g, b);}else {printf("\033[32m ");}}for (int i = 0; i < ifills; i++) std::cout << bars[8];if (!in_screen && (curr != tot)) printf("%s", bars[(int)(8.0*(fills - ifills))]);for (int i = 0; i < width - ifills - 1; i++) std::cout << bars[0];printf("%s ", right_pad.c_str());if (use_colors) printf("\033[1m\033[31m");printf("%4.1f%% ", pct);if (use_colors) printf("\033[34m");std::string unit = "Hz";double div = 1.;if (avgrate > 1e6) {unit = "MHz"; div = 1.0e6;}else if (avgrate > 1e3) {unit = "kHz"; div = 1.0e3;}printf("[%4d/%4d | %3.1f %s | %.0fs<%.0fs] ", curr, tot, avgrate / div, unit.c_str(), dt_tot, peta);printf("%s ", label.c_str());if (use_colors) printf("\033[0m\033[32m\033[0m\015 ");if ((tot - curr) > period) fflush(stdout);}}
};
#endif

主函数: 

#include "MyClass.h"
#include <windows.h>
int main() {int N = 2000;tqdm bar;std::cout << "Overhead of loop only:" << std::endl;for (int i = 0; i < 100000000; i++) {bar.progress(i, 100000000);}bar.finish();std::cout << "Basic:" << std::endl;bar.reset();bar.set_theme_basic();for (int i = 0; i < N; i++) {bar.progress(i, N);Sleep(1000);}bar.finish();std::cout << "Braille:" << std::endl;bar.reset();bar.set_theme_braille();for (int i = 0; i < N; i++) {bar.progress(i, N);Sleep(300);}bar.finish();std::cout << "Line:" << std::endl;bar.reset();bar.set_theme_line();for (int i = 0; i < N; i++) {bar.progress(i, N);Sleep(300);}bar.finish();std::cout << "Circles:" << std::endl;bar.reset();bar.set_theme_circle();for (int i = 0; i < N; i++) {bar.progress(i, N);Sleep(300);}bar.finish();bar.reset();std::cout << "Vertical bars:" << std::endl;bar.reset();bar.set_theme_vertical();for (int i = 0; i < N; i++) {bar.progress(i, N);Sleep(3000);}bar.finish();return 0;
}

源码 

相关文章:

window下tqdm进度条

原代码是linux下运行&#xff0c;修改后可在window下运行。 #ifndef TQDM_H #define TQDM_H#include <chrono> #include <ctime> #include <numeric> #include <ios> #include <string> #include <cstdlib> #include <iostream> #i…...

记录些Redis题集(1)

Redis内存淘汰触发条件的相关配置如下&#xff1a; Redis通过配置项maxmemory来设定其允许使用的最大内存容量。当Redis实际占用的内存达到这一阈值时&#xff0c;将触发内存淘汰机制&#xff0c;开始删除部分数据以释放内存空间&#xff0c;防止服务因内存溢出而异常。 Redi…...

防火墙双机热备带宽管理综合实验

一、实验拓扑 二、实验要求 12&#xff0c;对现有网络进行改造升级&#xff0c;将当个防火墙组网改成双机热备的组网形式&#xff0c;做负载分担模式&#xff0c;游客区和DMZ区走FW3&#xff0c;生产区和办公区的流量走FW1 13&#xff0c;办公区上网用户限制流量不超过100M&am…...

【Redis】哨兵(sentinel)

文章目录 一、哨兵是什么&#xff1f;二、 哨兵sentinel文件参数三、 模仿主机redis宕机四、哨兵运行流程和选举原理SDOWN主观下线ODOWN客观下线 五、 使用建议 以下是本篇文章正文内容 一、哨兵是什么&#xff1f; 哨兵巡查监控后台master主机是否故障&#xff0c;如果故障了…...

2024年高职云计算实验室建设及云计算实训平台整体解决方案

随着云计算技术的飞速发展&#xff0c;高职院校亟需构建一个与行业需求紧密结合的云计算实验室和实训平台。以下是针对2024年高职院校云计算实验室建设的全面解决方案。 1、在高职云计算实验室的建设与规划中&#xff0c;首要任务是立足于云计算学科的精准定位&#xff0c;紧密…...

入门实战篇,利用PADS Layout画电阻电容电感的封装

大家好&#xff0c;我是山羊君Goat。 不管怎么设计&#xff0c;怎么学习硬件知识&#xff0c;都需要实战&#xff0c;硬件工程师设计PCB是必不可少的&#xff08;大部分来说&#xff09;&#xff0c;本篇主要从最基本的电阻电容电感的PCB设计封装来说起&#xff0c;算是最基础…...

解决npm install 安装报错记录贴

前言 环境背景 nodeJS v.14.8.3(nvm安装) package.json: “node-sass”:“8.0.0” 网络环境&#xff1a; 公司内网 镜像地址&#xff1a;公司的镜像源 解决报错过程&#xff1a; 1.换了最新版 vscode&#xff0c; 然后重装 node_modules 还是不行&#xff0c; 报PostCSS rec…...

CollectionUtils的使用

1、非空判断 判断集合是否为空 List<String>对象list&#xff0c;可以使用CollectionUtils中的isEmpty方法来判断list是否为空。代码如下 List<String> list new ArrayList<>(); boolean isEmpty CollectionUtils.isEmpty(list); System.out.println(is…...

WEB前端03-CSS3基础

CSS3基础 1.CSS基本概念 CSS是Cascading Style Sheets&#xff08;层叠样式表&#xff09;的缩写&#xff0c;它是一种对Web文档添加样式的简单机制&#xff0c;是一种表现HTML或XML等文件外观样式的计算机语言&#xff0c;是一种网页排版和布局设计的技术。 CSS的特点 纯C…...

【java深入学习第7章】用 Spring Boot 和 Java Mail 轻松实现邮件发送功能

引言 在现代的企业应用中&#xff0c;邮件发送是一个非常常见的功能。无论是用户注册后的验证邮件&#xff0c;还是系统通知邮件&#xff0c;邮件服务都扮演着重要的角色。本文将介绍如何在Spring Boot项目中整合Java Mail&#xff0c;实现发送邮件的功能。 一、准备工作 在…...

Linux抽象套接字

在UNIX和类UNIX系统中,socket编程提供了一种机制,允许进程之间进行通信。其中,UNIX域套接字(UNIX domain socket)是一种特殊的套接字,用于同一台机器上的进程间通信(IPC)。UNIX域套接字可以使用两种类型的地址:路径名套接字(pathname socket)和抽象套接字(abstract…...

GA-Kmeans-Transformer-GRU时序聚类+状态识别组合模型,创新发文无忧!

GA-Kmeans-Transformer-GRU时序聚类状态识别组合模型&#xff0c;创新发文无忧&#xff01; 目录 GA-Kmeans-Transformer-GRU时序聚类状态识别组合模型&#xff0c;创新发文无忧&#xff01;效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.GA-Kmeans-Transformer-GRU时…...

Python面试全攻略:基础知识、特性、算法与实战解析

随着Python的普及&#xff0c;越来越多的人开始学习Python并尝试在面试中展示自己的技能。在这篇文章中&#xff0c;我们将探讨Python面试需要注意的问题以及一些经典的Python算法。 一、Python面试需要注意的问题 基础知识 在Python面试中&#xff0c;基础知识是非常重要的。…...

Linux网络编程-socket套接字使用详解

1.概念 在Linux中&#xff0c;套接字&#xff08;socket&#xff09;是一种通信机制&#xff0c;用于实现不同进程之间或同一主机上的不同线程之间的数据交换。它是网络编程的基础&#xff0c;允许应用程序通过网络进行通信&#xff0c;也可以在同一台机器上的不同进程间进行通…...

Leetcode 236. 二叉树的最近公共祖先

142. 环形链表 II 问题描述 给定一个链表的头节点 head &#xff0c;返回链表开始入环的第一个节点。 如果链表无环&#xff0c;则返回 null。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&am…...

GPT-4从0到1搭建一个Agent简介

GPT-4从0到1搭建一个Agent简介 1. 引言 在人工智能领域&#xff0c;Agent是一种能够感知环境并采取行动以实现特定目标的系统。本文将简单介绍如何基于GPT-4搭建一个Agent。 2. Agent的基本原理 Agent的核心是感知-行动循环&#xff08;Perception-Action Loop&#xff09;…...

docker镜像源配置

docker默认的镜像源&#xff0c;走的是国外网络&#xff0c;下载速度感人&#xff0c;修改镜像源&#xff0c;进入/etc/docker/ cd /etc/docker 编辑文件daemon.json(没有就直接创建)&#xff0c;内容&#xff1a; {"registry-mirrors": ["https://q7ta64ip.…...

解读InnoDB数据库索引页与数据行的紧密关联

目录 一、快速走进索引页结构 &#xff08;一&#xff09;整体展示说明 &#xff08;二&#xff09;内容说明 File Header&#xff08;文件头部&#xff09; Page Header&#xff08;页面头部&#xff09; Infimum Supremum&#xff08;最小记录和最大记录&#xff09; …...

以数据编织,重构数据管理新范式

大数据产业创新服务媒体 ——聚焦数据 改变商业 人工智能几乎统一了全球最顶尖科技公司的认知&#xff1a;这个时代&#xff0c;除了AI&#xff0c;没有第二条路可走。 人工智能的技术逻辑颇有一种“暴力美学”&#xff0c;它依托于海量大数据和超高算力的训练和推理&#xff…...

在linux x86服务器安装jdk

安装JDK&#xff08;Java Development Kit&#xff09;在Linux x86 服务器上可以按照以下步骤进行操作。以下步骤假设你有root权限或者sudo权限。 1. 下载JDK安装包 首先&#xff0c;你需要从Oracle官网或者OpenJDK官网下载JDK的安装包。可以选择对应的版本&#xff0c;比如J…...

2024智慧竞技游戏俱乐部线下面临倒闭?

在2024年的中国&#xff0c;智慧竞技游戏俱乐部如雨后春笋般在二三线城市中兴起&#xff0c;它们不仅是年轻人娱乐的场所&#xff0c;更是智慧与技巧的较量场。然而&#xff0c;随着疫情的冲击&#xff0c;这些俱乐部面临着前所未有的挑战。本文将通过一个小镇上的故事&#xf…...

jmeter分布式(四)

一、gui jmeter的gui主要用来调试脚本 1、先gui创建脚本 先做一个脚本 演示&#xff1a;如何做混合场景的脚本&#xff1f; 用211的业务比例 ①启动数据库服务 数据库服务&#xff1a;包括mysql、redis mysql端口默认3306 netstat -lntp | grep 3306处于监听状态&#xf…...

如何解决手机游戏因IP代理被封禁无法正常游戏的问题?

在当前的网络环境下&#xff0c;许多手机游戏为了维护游戏的公平性和安全性&#xff0c;会采取措施对使用IP代理的玩家进行封禁&#xff0c;导致他们无法正常访问游戏。这种情况对于一些需要使用IP代理的用户来说可能显得很棘手&#xff0c;但实际上有几种技术性的解决方案可以…...

windows10 安装Anaconda

文章目录 1. 下载2. 安装3. 配置环境变量4. 检查是否安装成功 1. 下载 官网下载 https://www.anaconda.com/download 下载的最新版本&#xff0c;要求python的版本也高一些 清华大学开源软件镜像站 https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/ 所有版本在这个网…...

[图解]SysML和EA建模住宅安全系统-14-黑盒系统规约

1 00:00:02,320 --> 00:00:07,610 接下来&#xff0c;我们看下一步指定黑盒系统需求 2 00:00:08,790 --> 00:00:10,490 就是说&#xff0c;把这个系统 3 00:00:11,880 --> 00:00:15,810 我们的目标系统&#xff0c;ESS&#xff0c;看成黑盒 4 00:00:18,030 --> …...

frp内网穿透xtcp安全点对点p2p部署记录打洞失败解决方法

环境 一、有公网IP、nas主机&#xff08;需要穿透里面的服务&#xff09;、安卓手机、frps-0.58.1、frpc-0.59.0(群晖NAS套件)、安卓版frpc-0.56.0 二、两端frpc必须要有一端nat网络类型不是非对称nat 开始 有公网的主机上配置frps.toml bindPort 7000nas主机端frpc.toml配…...

C++基础篇(2)

目录 前言 1.缺省参数 2.函数重载 2.1函数重载的基本规则 ​编辑2.2注意事项 2.3 重载解析&#xff08;Overload Resolution&#xff09;--补充内容 3.引用 3.1引用的概念和定义 3.2引用的特性 3.3引用的使用 3.4const引用 4.指针和引用的关系 结束语 前言 上节小编…...

c++ primer plus 第16章string 类和标准模板库,16.1.3 使用字符串

c primer plus 第16章string 类和标准模板库,16.1.3 使用字符串 c primer plus 第16章string 类和标准模板库,16.1.3 使用字符串 文章目录 c primer plus 第16章string 类和标准模板库,16.1.3 使用字符串16.1.3 使用字符串程序清单16.3 hangman.cpp 16.1.3 使用字符串 现在&a…...

使用mybatis的statementHander拦截器监控表和字段并发送钉钉消息

新建mybatis的statementHander拦截器拦截器 类 面试题&#xff1a; 2.实现 解析Sql时引入JSqlParser JSqlParser 是一个 SQL 语句解析器。 它将 SQL转换为可遍历的 Java 类层次结构。 <dependency><groupId>com.github.jsqlparser</groupId><artifac…...

信贷系统——基础信贷概念

摘要 信贷是金融领域中的一个重要概念,指的是金融机构(如银行、信用合作社等)向个人、企业或政府提供资金的过程。在信贷过程中,金融机构向借款人提供资金,借款人则承诺在未来的某个时间点按照约定的条件和利率偿还借款。这种借款通常是在合同中明确约定的,包括贷款金额、…...