
    Mf#                         d dl Z d dlZd dlZd dlmZ d dlmZmZ  G d de          Z G d de	          Z
 G d d	e
          ZdS )
    N)Enum)ListNoReturnc                       e Zd ZdZdZdZdS )TimeTypesmsnsN)__name__
__module____qualname__secondmillisecond
nanosecond     T/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/TimeConvert/stopwatch.pyr   r      s        FKJJJr   r   c                   N    e Zd Zededefd            Zededefd            ZdS )	BaseWatchtreturnc                 @    t          t          | dz                      S )Ni@B introundr   s    r   _timestamp_to_nanoszBaseWatch._timestamp_to_nanos   s     5W%%&&&r   c                 @    t          t          | dz                      S )Ni  r   r   s    r   _timestamp_to_milliszBaseWatch._timestamp_to_millis   s     5T??###r   N)r   r   r   staticmethodfloatr   r   r   r   r   r   r   r      sn        'u ' ' ' ' \' $ $# $ $ $ \$ $ $r   r   c                      e Zd ZU  G d de          ZdZepded<   dZe	ed<   dZ
e	ed<   dZeed<   dZee         ed	<   dZeed
<   dej        fdededefdZd$dedefdZdefdZdefdZedepdfd            ZdefdZdefdZde	fdZdefdZdefdZdefdZdefdZ de	fdZ!defdZ"dee         fd Z#d%dedefd!Z$d%dedefd"Z%d# Z&dS )&	StopWatchc                   B    e Zd ZdedefdZdefdZdefdZdefdZ	dS )	StopWatch.TaskInfo	task_name	timestampc                 "    || _         || _        d S N)r&   r'   )selfr&   r'   s      r   __init__zStopWatch.TaskInfo.__init__!   s    &DN&DNNNr   r   c                 6    |                      | j                  S r)   )r   r'   r*   s    r   get_time_nanosz!StopWatch.TaskInfo.get_time_nanos%   s    ++DN;;;r   c                 6    |                      | j                  S r)   )r   r'   r-   s    r   get_time_millisz"StopWatch.TaskInfo.get_time_millis(   s    ,,T^<<<r   c                     | j         S r)   )r'   r-   s    r   get_time_secondsz#StopWatch.TaskInfo.get_time_seconds+   s
    >!r   N)
r   r   r   strr!   r+   r   r.   r0   r2   r   r   r   TaskInfor%      s        	'c 	'e 	' 	' 	' 	'	<C 	< 	< 	< 	<	=S 	= 	= 	= 	=	"e 	" 	" 	" 	" 	" 	"r   r4   N_StopWatch__current_task_name _StopWatch__start_time_timestampg         _StopWatch__total_time_timestamp_StopWatch__last_task_info_StopWatch__task_info_StopWatch__task_countT	unique_idkeep_task_list	time_typec                 d    || _         || _        || _        t                      | _        d| _        dS )u>  
        stop_watch计时器
        **线程不安全** 请在使用时 实例化新对象进行计时
        :param unique_id: 计时器的唯一标识，一般起比较有特点的名称
        :param keep_task_list: 是否保存单个计时点(计时任务)的信息
        :param time_type: 计时器输出的时间单位 默认毫秒
        eg:
            sw = StopWatch('计时器唯一名称', time_type=TimeType.second)
            sw.start('我是计时点1')
            time.sleep(1)
            # 计时点1计时结束
            sw.stop()

            sw.start('我是计时点2')
            time.sleep(2)
            # 计时点2计时结束
            sw.stop()
            print(sw.pretty_print())

        output:
            stopWatch [我是一个计时器]: running time = 3.0048 s
            ---------------------------------------------
            s             %         Task name
            ---------------------------------------------
            0000001.0043  033.42%  我是计时点1
            0000002.0005  066.58%  我是计时点2
        r   N)_StopWatch__unique_id_StopWatch__keep_task_list_StopWatch__time_typelistr9   r:   )r*   r;   r<   r=   s       r   r+   zStopWatch.__init__7   s7    B % .$66r    r&   r   c                 p    | j         t          d          || _         t          j                    | _        dS )ui   
        开始计时
        :param task_name: 计时任务(计时点)的名称
        :return
        Nz+Can't start StopWatch: it's already running)r5   
ValueErrortimer6   )r*   r&   s     r   startzStopWatch.start_   s8     #/LMMM#, &*ikk###r   c                 L   | j         t          d          t          j                    | j        z
  }| xj        |z  c_        |                     | j         |          | _        | j        r| j        	                    | j                   | xj
        | j
        z  c_
        d| _         dS )u4   
        停止任务计时
        :return
        Nz&Can't stop StopWatch: it's not running)r5   rE   rF   r6   r7   r4   r8   r@   r9   appendr:   )r*   	last_times     r   stopzStopWatch.stopk   s    
 #+GHHH9;;)DD	##y0## $d.F	 R R  	;##D$9:::T..#'   r   c                     | j         du S )u'   
        计时器是否运行
        Nr5   r-   s    r   
is_runningzStopWatch.is_running|   s     '4//r   c                     | j         S )u;   
        返回当前任务名称
        :return:
        rM   r-   s    r   current_task_namezStopWatch.current_task_name   s     ''r   c                 l    | j         t          d          |                     | j         j                  S )uR   
        获取最后一次计时任务的时间(微秒)
        :return:
        N*No tasks run: can't get last task interval)r8   rE   r   r'   r-   s    r   get_last_task_time_nanosz"StopWatch.get_last_task_time_nanos   s6    
  (JKKK''(=(GHHHr   c                 l    | j         t          d          |                     | j         j                  S )uR   
        获取最后一次计时任务的时间(毫秒)
        :return:
        NrR   )r8   rE   r   r'   r-   s    r   get_last_task_time_millisz#StopWatch.get_last_task_time_millis   s6    
  (JKKK(()>)HIIIr   c                 F    | j         t          d          | j         j        S )uO   
        获取最后一次计时任务的时间(秒)
        :return:
        NrR   )r8   rE   r'   r-   s    r   get_last_task_time_secondsz$StopWatch.get_last_task_time_seconds   s(    
  (JKKK$..r   c                 F    | j         t          d          | j         j        S )uJ   
        获取最后一次计时任务的名称
        :return:
        Nz&No tasks run: can't get last task name)r8   rE   r&   r-   s    r   get_last_task_namezStopWatch.get_last_task_name   s(    
  (FGGG$..r   c                     | j         S )u;   
        返回最后一个任务
        :return:
        )r8   r-   s    r   get_last_task_infozStopWatch.get_last_task_info   s    
 $$r   c                 6    |                      | j                  S )uS   
        获取当前stop_watch总计时的时间(微秒)
        :return:
        )r   r7   r-   s    r   get_total_time_nanoszStopWatch.get_total_time_nanos   s    
 ''(CDDDr   c                 6    |                      | j                  S )uS   
        获取当前stop_watch总计时的时间(毫秒)
        :return:
        )r   r7   r-   s    r   get_total_time_milliszStopWatch.get_total_time_millis   s    
 (()DEEEr   c                     | j         S )uP   
        获取当前stop_watch总计时的时间(秒)
        :return:
        )r7   r-   s    r   get_total_time_secondsz StopWatch.get_total_time_seconds   s    
 **r   c                     | j         S )uQ   
        获取当前stop_watch对象记录的任务数
        :return:
        )r:   r-   s    r   get_task_countzStopWatch.get_task_count   s    
   r   c                 `    | j         st          d          t          j        | j                  S )uT   
        获取当前stop_watch对象记录的全部任务
        :return:
        ztask info is not being kept!)r@   RuntimeErrorcopydeepcopyr9   r-   s    r   get_task_infozStopWatch.get_task_info   s1    
 $ 	?=>>>}T-...r   c                    |p| j         }|t          j        k    r|                                 }nG|t          j        k    r|                                 }n"t          |                                 d          }d| j         d| d|j	         S )u   
        获取当前统计时间数据简述
        :param time_type: 计时器输出的时间单位, 如果在此传入，则覆盖掉类构造函数中传入的 time_type
        :return:
           zStopWatch [z]: running time =  )
rA   r   r   r_   r   r]   r   ra   r?   value)r*   r=   running_times      r   short_summaryzStopWatch.short_summary   s     1!1	,,,5577LL(---4466LL !<!<!>!>BBLaT-aaaaPYP_aaar   c           	         |p| j         }t          j                    }|                    |                                            |                    d           | j        s|                    d           n|                    d           |                    |j         d           |                    d           | j        D ]}|t          j	        k    rK|                    t          |                                                              d           d           n|t          j        k    rK|                    t          |                                                              d           d           nK|                    t          |                                d                              d           d           |                                |                                 z  }|                    t          t          |dz  d	                                        d
           d           |                    |j         d           |                                S )u   
        获取当前统计时间数据详情 并生成字符串
        :param time_type: 计时器输出的时间单位, 如果在此传入，则覆盖掉类构造函数中传入的 time_type
        :return:
        
zNo task info keptz.---------------------------------------------
z             %         Task name
   z  z.4fd   z.2f   z%  )rA   ioStringIOwritern   r@   rl   r9   r   r   r3   r0   zfillr   r.   formatr2   ra   r&   getvalue)r*   r=   sb	task_infopercents        r   pretty_printzStopWatch.pretty_print   s+    1!1	[]]
##%%&&&
$ 	5HH())))HHFGGGHH	JJJKKKHHFGGG!- 	5 	5	 444HHI$=$=$?$? @ @ F Fr J JNNNOOOO("555HHI$<$<$>$> ? ? E Eb I IMMMNNNNHHy'A'A'C'CU K K Q QRT U UYYYZZZ#44669T9T9V9VVCw}e < <==CCAFFKKKLLLI/3334444{{}}r   c           	      f   t          j                    }|                    |                                            | j        s|                    d           n| j        D ]}|                    d           |                    |j                    |                    d           |                    |                                 d           |                    dt          |	                                | 
                                z  d           d           |                                S )Nz; no task info keptz; [z] took z nsz =    %)rt   ru   rv   rn   r@   r9   r&   r.   r   r2   ra   ry   )r*   rz   r{   s      r   __str__zStopWatch.__str__	  s   []]
##%%&&&$ 	jHH*++++!- j j	   I/1222###I4466;;;<<<huY%?%?%A%ADD_D_DaDa%acdeehhhiiii{{}}r   )rC   r)   )'r   r   r   r   r4   r5   r3   __annotations__r6   r!   r7   r8   r9   r   r:   r   r   r   boolr+   r   rG   rK   rN   propertyrP   rS   rU   rW   rY   r[   r]   r_   ra   rc   rh   rn   r}   r   r   r   r   r#   r#      s        " " " " "9 " " " (,+++$(E((($'E'''!%h%%%"&Kh&&&L#
 $("*"6	& && !&  	& & & &P
2 
2s 
2H 
2 
2 
2 
2(h ( ( ( ("0D 0 0 0 0 (3;$ ( ( ( X(I# I I I IJ3 J J J J/E / / / //C / / / /%H % % % %Ec E E E EFs F F F F+ + + + +! ! ! ! !/tH~ / / / /b bx b3 b b b b h #    8    r   r#   )rf   rt   rF   enumr   typingr   r   r   objectr   r#   r   r   r   <module>r      s     				        ! ! ! ! ! ! ! !    t   
$ 
$ 
$ 
$ 
$ 
$ 
$ 
$w w w w w	 w w w w wr   