o yft@sddlZddlmZmZmZdddZddZddZdd d Zd d Z d dZ ddZ GdddZ ee_ee_ee_ee_e e_ dS)N)devices rng_philoxsharedcCsrt|tjjdkrtj|pt|tj dStjjdks#tj j dkr0tj|tj |d tj Stj|tj |dS)zGenerate a tensor with random numbers from a normal distribution using seed. Uses the seed parameter to set the global torch seed; to generate more with that seed, use randn_like/randn_without_seed.NVdeviceCPUmpsr generator) manual_seedropts randn_sourcetorchasarraynv_rngrandnrrtypecputo)seedshaper r\C:\Users\Luke\Documents\Stable diffusion\Automatic1111\stable-diffusion-webui\modules\rng.pyrs  rcCs|tjjdkrt|}tj||tj dStjjdks"tj j dkr%tj ntj }t| t |}tj|||dtj S)zGenerate a tensor with random numbers from a normal distribution using seed. Does not change the global random number generator. You can only generate the seed's first tensor using this function.rrrr r )rr rr Generatorrrrrrrrr intr)rrrng local_deviceZlocal_generatorrrr randn_locals  $rcCsbtjjdkrtjt|j|j|j dStjjdks |jj dkr,tj |t j d|jSt |S)Generate a tensor with random numbers from a normal distribution using the previously initialized generator. Use either randn() or manual_seed() to initialize the generator.r)rdtyperr r)rr rrrrrrrr r randn_likerrr)xrrrr!$s  r!cCsjtjjdkrtj|p t|tjdStjjdkstjj dkr,tj|tj |d tjStj|tj|dS)rrrrr r ) rr rrrrrrrrrr)rr rrrrandn_without_seed2s r#cCs(tjjdkr t|adSt|dS)zASet up a global random number generator using the specified seed.rN)rr rrrrrr )rrrrr @s  r cCsRtjjdkr t|Stjjdkstjjdkrtjntj}t | t |}|S)Nrrr ) rr rrrrrrrrr r)rrr rrrcreate_generatorKs  $r$c Cs|tj|ddd}|tj|ddd}||d}|dkr+|||d|St|}t|}td|||d|t|||d|}|S)NT)dimkeepdimgCl?g?)rnormsummeanacossin unsqueeze) vallowhighZlow_normZ high_normdotomegasoresrrrslerpUs   <r5c@s&eZdZd ddZddZdd ZdS) ImageRNGNrcCsHttt||_||_||_||_||_||_dd|D|_ d|_ dS)NcSsg|]}t|qSrr$.0rrrr lsz%ImageRNG.__init__..T) tuplemaprrseedssubseedssubseed_strengthseed_resize_from_hseed_resize_from_w generatorsis_first)selfrr>r?r@rArBrrr__init__ds zImageRNG.__init__cs"|jdks |jdkr |jn|jdt|jdt|jdf}g}tt|j|jD]\}\}}d}|jdurO|j dkrO|t |jkrEdn|j|}t ||}||jkrZt ||}nt ||j|d}|durmt |j ||}||jkrt ||j|d} |jd|dd} |jd|dd} | dkr|dn|dd| } | dkr|dn|dd| } | dkrdn| }| dkrdn| }t | d} t | d} |dd| | | | | | f| dd||| ||| f<| }||q*tjjpdrfdd|jD|_t|tjS)Nrr r%csg|]}t|qSrr8r9eta_noise_seed_deltarrr;sz"ImageRNG.first..)rArBrr enumeratezipr>rCr?r@lenrr5maxappendrr rKrstackrr)rEZ noise_shapexsirr Zsubnoisesubseednoiser"dxdywhtxtyrrJrfirstps:>        @  zImageRNG.firstcCsN|jr d|_|Sg}|jD]}t|j|d}||qt|t j S)NFrH) rDr\rCr#rrPrrQrrr)rErRr r"rrrnexts  z ImageRNG.next)Nr7rr)__name__ __module__ __qualname__rFr\r]rrrrr6cs  )r6)N) rmodulesrrrrrr!r#r r$r5r6rrrrs    C