
    e%                        d Z ddlZddlZddlZddlZddlmZ ddlZ	ddl
mZmZmZ  e	j                  dd       ddlZ	 ddlZ e	j                  dd       dZ	 ddlZdZ	 dd
lmZ  ej2                  d      Zej7                  dd	ddd       ej7                  ddg dd       ej7                  dded       ej7                  ddddgdd        ej7                  d!dd" d#       ej7                  d$d	dd%&       ej7                  d'd	dd(d)       ej7                  d*d+d, d-       ej7                  d. ed/      ed0       ej=                  ej>                  d1d       Z  ejB                         Z"e= ejF                         Z$e$jK                  d       ejF                  jM                  e$        e	jN                  d2      Z( ejR                         Z*e*jW                  d3        ejX                         a-tZ        j]                  e*       e*j_                          e^tZ        j`                  jc                  d	       tZ        j`                  je                  tZ        j`                  jg                         d4z          n= e       tZ        _4        tZ        jj                  jm                  tZ        jh                         tZ        jn                  jq                  e jr                  xr e       tZ        jn                  jc                  e       tZ        jt                  jq                  exr  e	jv                  d5             tZ        jt                  jc                  e       tZ        jx                  j{                  e j|                         tZ        j~                  j{                  e j                  d          tZ        j                  j{                  e j                  d1          tZ        j                  j                  e j                         tZ        j                  jq                  e j                  dk(         tZ        j                  j                  d6d17       tZ        j                  j                  dd17       tZ        j                  tZ        j                  tZ        j                  tZ        j                  tZ        j                  tZ        j                  gaNe jr                  rereaOneaOe j                  @tZ        j                  jq                  d	       tZ        j                  jq                  d	       n'tZ        j                  jq                  d        eSe j                        d8k(  rxtZ        j                  jq                  d	       tZ        j                  j{                  e j                  d          tZ        j                  j{                  e j                  d1          n{ eSe j                        d9k(  rPtZ        j                  jq                  d        eTt        e j                        D ]  \  ZUZVeUj{                  eV        n eWd:e j                  d;      tZ        j                  jq                  e j                         tZ        j                  jq                  e j                          e	j                         a]tZ        j                  j                  t               t        j                           e	j                         Zbt        j                  eb       dadd< ZetZ        j                  j                  j                  ee        ee        tZ        j                  j                  j                  ee       d= Zj ej        tZ        j                  j                  j                  ej       i akd> Zld? Zmd@ ZndA Zo el        tZ        j                  j                  j                  el       tZ        j                  j                  j                  el       tZ        j~                  j                  j                  el       tZ        j                  j                  j                  el       tZ        jx                  j                  j                  el       tZ        j~                  j                  j                  em       tZ        j                  j                  j                  em       tZ        jx                  j                  j                  em       tZ        jn                  j                  j                  en       tZ        jt                  j                  j                  eo       dasdB Zt ej                         Zvevj                  j                  et       evj                  d        e       Zyeyj                  j                  dC        e{dDk(  r e	j                          yy# e$ r dZd	ZY 	w xY w# e$ r dZd	ZY 	w xY w# e$ r dZY 	w xY w)Ez
Tests the speed of image updates for an ImageItem and RawImageWidget.
The speed will generally depend on the type of data being shown, whether
it is being scaled and/or converted by lookup table, and whether OpenGL
is used by the view widget
    N)FrameCounter)QtCoreQtGui	QtWidgetsimageAxisOrderz	row-majoruseCupyTF)RawImageGLWidgetz'Benchmark for testing video performance)descriptionz--cuda
store_truezUse CUDA to process on the GPUcuda)defaultactionhelpdestz--dtypeuint8)r   uint16floatz%Image dtype (uint8, uint16, or float))r   choicesr   z--frames   z.Number of image frames to generate (default=3))r   typer   z--image-modemonorgbzImage data mode (mono or rgb)
image_mode)r   r   r   r   z--levelsc                 n    t        | j                  d      D cg c]  }t        |       c}      S c c}w )N,)tuplesplitr   sxs     C/usr/lib/python3/dist-packages/pyqtgraph/examples/VideoSpeedTest.py<lambda>r"   /   s+    UVWV]V]^aVbCcQRE!HCc=d Cc   2zhmin,max levels to scale monochromatic image dynamic range, or rmin,rmax,gmin,gmax,bmin,bmax to scale rgbz--lutzUse color lookup table)r   r   r   z--lut-alphazUse alpha color lookup table	lut_alphaz--size512x512c                 n    t        | j                  d      D cg c]  }t        |       c}      S c c}w )Nr    )r   r   intr   s     r!   r"   r"   2   s+    WXW^W^_bWcFdRSs1vFd@e Fdr#   z&WxH image dimensions default='512x512'z--iterationsinfz*Number of iterations to run before exiting   zVideo Speed Test Examplez!pyqtgraph example: VideoSpeedTestz (OpenGL not available)useNumba   )valuestep      z;levels argument must be 2 or 6 comma-separated values (got )c                  *   t         j                  j                         } | dk(  rd}nd}t         j                  j	                  |t         j
                  j                               at        r(t        t        k(  rt        j                  t              ay y y )Nr         )alpha)ui
dtypeCombocurrentTextgradientgetLookupTable
alphaCheck	isCheckedLUT	_has_cupyxpcpasarray)dtypens     r!   	updateLUTrC   }   si    MM%%'E
++
$
$Qbmm.E.E.G
$
HCR2Xjjo y    c                      t         j                  j                         r t        dd  D ]  } | j	                  d        y t        dd  D ]  } | j	                  d        y )Nr.   TF)r5   rgbLevelsCheckr;   
levelSpins
setEnabled)r   s    r!   updateScalerI      sX    	""$AB 	ALL	 AB 	 ALL	 rD   c                     t        j                         5  t        j                  j	                         } t        j
                  j	                         }t        j                  j	                         }t        j                  j                         t        j                  j                         | ||f}|t        vrh|d   dk(  rt        j                  }d}d}d}nO|d   dk(  rt        j                  }d}d}d	}n0|d   d
k(  rt        j                  }d}d}d}nt!        d|d          ||f}t        j                  j                         r|dz   }	n|}	t        j#                  | f|	z   |      at$        j'                  d|z         }
t)        |
j*                  d         D ]J  }t        j,                  j/                  |||      }|d   d
k7  rt        j1                  |d||       ||
|<   L |t$        d d dddf<   |t$        d d dddf<   |t$        d d dddf<   |t$        iat        |   at3                t5                d d d        y # 1 sw Y   y xY w)Nr   r      @   r+   r   r3   i   i  r   g      ?g?zunable to handle dtype: )r   )rA   ))locscalesize)out
   2   0   	      /         )pg
BusyCursorr5   
framesSpinr,   	widthSpin
heightSpinr6   r7   rgbCheckr;   cacher>   r   r   float32
ValueErroremptydatareshaperangeshaperandomnormalcliprC   
updateSize)frameswidthheightcacheKeydtrN   rO   mx
chan_shapeframe_shapeviewidxsubdatas                r!   mkDatarw      s   	 /$$&""$$$&MM--/1F1F1H&RWY_`5 {g%XX!(YY!'ZZ #;HQK=!IJJ %J{{$$&(4/(88VI328>D<<
 23DTZZ]+ $))**s%j*Q A;')GGGQG8#S	$ "$DBrE2 "DB" "DB"t$EX_/ / /s   H(IIc                  <   t         j                  j                         } t         j                  j                         }t         j                  j                         }t
        j                  t        t         j                  j                                     }t         j                  j                         rdnd}t         j                  j                  d| |z  |z  |z  |j                  z  dz  z         t        j!                  t#        j$                  dd||             y )Nr   r)   z%d MBg    .Ar   )r5   r\   r,   r]   r^   r>   rA   strr6   r7   r_   r;   	sizeLabelsetTextitemsizevbsetRanger   QRectF)rl   rm   rn   rA   r   s        r!   rk   rk      s    ]]  "FLL E]]  "FHHS22456E{{$$&!ACLLFUNV$;c$AENN$RUX$XYZKKaE623rD   c                      i a t        j                  j                         rGt        rt
        at                y t        at        j                  j                  d       t                y t        at                y )NF)
r`   r5   	cudaCheckr;   r=   r?   r>   np
setCheckedrw    rD   r!   noticeCudaCheckr      sR    E	||B H	 BLL##E* H 
HrD   c                  x    t        j                  dt        xr t        j                  j                                y )Nr*   )rZ   setConfigOption
_has_numbar5   
numbaCheckr;   r   rD   r!   noticeNumbaCheckr      s$    z:#K"--2I2I2KLrD   c                  f   t        t              t        j                  kD  r)t        j                          t        j                          y t        j                  j                         rt        } nd } t        j                  j                         }t        j                  j                         rt        j                  j                         rt        j                  j!                         t        j"                  j!                         gt        j$                  j!                         t        j&                  j!                         gt        j(                  j!                         t        j*                  j!                         gg}n?t        j                  j!                         t        j"                  j!                         g}nd }t        j,                  j                         rat        j.                  j1                  t2        t4        t2        j6                  d   z     | |       t        j8                  j;                  d       nt        j<                  j                         rat        j>                  j1                  t2        t4        t2        j6                  d   z     | |       t        j8                  j;                  d       nXt@        j1                  t2        t4        t2        j6                  d   z     d|| |       t        j8                  j;                  d       t4        dz  atB        jE                          y )Nr   )lutlevelsr)   r.   F)
autoLevelsr   r   autoDownsample)#nextiterations_counterargs
iterationstimerstopappquitr5   lutCheckr;   r<   downsampleCheck
scaleCheckrF   minSpin1r,   maxSpin1minSpin2maxSpin2minSpin3maxSpin3rawRadiorawImgsetImagerd   ptrrg   stacksetCurrentIndex
rawGLRadiorawGLImgimgframecntupdate)useLut
downsampleuseScales      r!   r   r      s   $//1


	{{##--/J	}} &&(""$bkk&7&7&9:""$bkk&7&7&9:""$bkk&7&7&9:<H
 ))+R[[->->-@AH	{{
		4DJJqM 12xP
  #		 	 	"
T#djjm"34&R
  #T#djjm+,xU[lvw
  # 1HCOOrD   c                 H    t         j                  j                  | dd      S )Nz.1fz fps)r5   fpsLabelr{   )fpss    r!   r"   r"   &  s    "++*=*=S	>N*O rD   __main__)}__doc__argparse	itertoolssysnumpyr   utilsr   	pyqtgraphrZ   pyqtgraph.Qtr   r   r   r   VideoTemplate_genericui_templatecupyr?   r=   ImportErrornumbar    pyqtgraph.widgets.RawImageWidgetr	   ArgumentParserparseradd_argumentr'   r   
parse_argsargvr   countr   QSurfaceFormatsfmtsetSwapIntervalsetDefaultFormatmkQAppr   QMainWindowwinsetWindowTitleUi_MainWindowr5   setupUishowr   rH   r{   textr   r   	addWidgetr   r   r   r   getConfigOptionr\   setValuerl   r]   rP   r^   r6   setCurrentTextrA   r_   r   r   setOptsr   r   r   r   r   rG   r>   r   r   rF   lenzipspinvalrb   r   r   r:   r$   ViewBoxr}   graphicsViewsetCentralItemsetAspectLocked	ImageItemr   addItemr<   rC   r8   sigGradientChangedconnecttoggledrI   r`   rw   rk   r   r   currentIndexChangededitingFinishedvalueChangedr   r   QTimerr   timeoutstartr   sigFpsUpdate__name__execr   rD   r!   <module>r      s     
    1 1   #[ 1 +By$'I
J
A 
!	 	 -V	W   HeLGgnt  u   Iw8T  \C   D   J:j  k   NFVUORq  yE   F   J3d  lV   W   GU<F^  _   M5Ljq|  }   Hi6e  mU   V   NE%Lu	5   !"&$Y__& 5!D	))$/bii*+i   6 7[  

3 
MMU#MM"--,,.1JJK"$BKHHr{{#   		/i 0   	 "   F(:(:(::(F G    $   t{{ #   diil #   tyy| $   TZZ (   t- .   #A  &   !!  $kk2;;R[["++r{{[
99	B	B;;MMU#  'MMT"
4;;1
$$U+
T[[^,
T[[^,	T[[	Q	
$$T*J4 	HDMM#	 ]a]h]hjkk   txx      (
 RZZ\   r "    blln 

3 	    & &y 1 	     i (        ! !+ .
0d4M   ! ! ) )& 1     F #    $ $V ,    % %f -    % %f -    ! !* -    " ": .    " ": .     _ -     . /&P 	   f  A>     O PzBGGI ]  	BI  EJ  s5   g g  g/ 	gg	g,+g,/g:9g: