| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806380738083809381038113812381338143815381638173818381938203821382238233824382538263827382838293830383138323833383438353836383738383839384038413842384338443845384638473848384938503851385238533854385538563857385838593860386138623863386438653866386738683869387038713872387338743875387638773878387938803881388238833884388538863887388838893890389138923893389438953896389738983899390039013902390339043905390639073908390939103911391239133914391539163917391839193920392139223923392439253926392739283929393039313932393339343935393639373938393939403941394239433944394539463947394839493950395139523953395439553956395739583959396039613962396339643965396639673968396939703971397239733974397539763977397839793980398139823983398439853986398739883989399039913992399339943995399639973998399940004001400240034004400540064007400840094010401140124013401440154016401740184019402040214022402340244025402640274028402940304031403240334034403540364037403840394040404140424043404440454046404740484049405040514052405340544055405640574058405940604061406240634064406540664067406840694070407140724073407440754076407740784079408040814082408340844085408640874088408940904091409240934094409540964097409840994100410141024103410441054106410741084109411041114112411341144115411641174118411941204121412241234124412541264127412841294130413141324133413441354136413741384139414041414142414341444145414641474148414941504151415241534154415541564157415841594160416141624163416441654166416741684169417041714172417341744175417641774178417941804181418241834184418541864187418841894190419141924193419441954196419741984199420042014202420342044205420642074208420942104211421242134214421542164217421842194220422142224223422442254226422742284229423042314232423342344235423642374238423942404241424242434244424542464247424842494250425142524253425442554256425742584259426042614262426342644265426642674268426942704271427242734274427542764277427842794280428142824283428442854286428742884289429042914292429342944295429642974298429943004301430243034304430543064307430843094310431143124313431443154316431743184319432043214322432343244325432643274328432943304331433243334334433543364337433843394340434143424343434443454346434743484349435043514352435343544355435643574358435943604361436243634364436543664367436843694370437143724373437443754376437743784379438043814382438343844385438643874388438943904391439243934394439543964397439843994400440144024403440444054406440744084409441044114412441344144415441644174418441944204421442244234424442544264427442844294430443144324433443444354436443744384439444044414442444344444445444644474448444944504451445244534454445544564457445844594460446144624463446444654466446744684469447044714472447344744475447644774478447944804481448244834484448544864487448844894490449144924493449444954496449744984499450045014502450345044505450645074508450945104511451245134514451545164517451845194520452145224523452445254526452745284529453045314532453345344535453645374538453945404541454245434544454545464547454845494550455145524553455445554556455745584559456045614562456345644565456645674568456945704571457245734574457545764577457845794580458145824583458445854586458745884589459045914592459345944595459645974598459946004601460246034604460546064607460846094610461146124613461446154616461746184619462046214622462346244625462646274628462946304631463246334634463546364637463846394640464146424643464446454646464746484649465046514652465346544655465646574658465946604661466246634664466546664667466846694670467146724673467446754676467746784679468046814682468346844685468646874688468946904691469246934694469546964697469846994700470147024703470447054706470747084709471047114712471347144715471647174718471947204721472247234724472547264727472847294730473147324733473447354736473747384739474047414742474347444745474647474748474947504751475247534754475547564757475847594760476147624763476447654766476747684769477047714772477347744775477647774778477947804781478247834784478547864787478847894790479147924793479447954796479747984799480048014802480348044805480648074808480948104811481248134814481548164817481848194820482148224823482448254826482748284829483048314832483348344835483648374838483948404841484248434844484548464847484848494850485148524853485448554856485748584859486048614862486348644865486648674868486948704871487248734874487548764877487848794880488148824883488448854886488748884889489048914892489348944895489648974898489949004901490249034904490549064907490849094910491149124913491449154916491749184919492049214922492349244925492649274928492949304931493249334934493549364937493849394940494149424943494449454946494749484949495049514952495349544955495649574958495949604961496249634964496549664967496849694970497149724973497449754976497749784979498049814982498349844985498649874988498949904991499249934994499549964997499849995000500150025003500450055006500750085009501050115012501350145015501650175018501950205021502250235024502550265027502850295030503150325033503450355036503750385039504050415042504350445045504650475048504950505051505250535054505550565057505850595060506150625063506450655066506750685069507050715072507350745075507650775078507950805081508250835084508550865087508850895090509150925093509450955096509750985099510051015102510351045105510651075108510951105111511251135114511551165117511851195120512151225123512451255126512751285129513051315132513351345135513651375138513951405141514251435144514551465147514851495150515151525153515451555156515751585159516051615162516351645165516651675168516951705171517251735174517551765177517851795180518151825183518451855186518751885189519051915192519351945195519651975198519952005201520252035204520552065207520852095210521152125213521452155216521752185219522052215222522352245225522652275228522952305231523252335234523552365237523852395240524152425243524452455246524752485249525052515252525352545255525652575258525952605261526252635264526552665267526852695270527152725273527452755276527752785279528052815282528352845285528652875288528952905291529252935294529552965297529852995300530153025303530453055306530753085309531053115312531353145315531653175318531953205321532253235324532553265327532853295330533153325333533453355336533753385339534053415342534353445345534653475348534953505351535253535354535553565357535853595360536153625363536453655366536753685369537053715372537353745375537653775378537953805381538253835384538553865387538853895390539153925393539453955396539753985399540054015402540354045405540654075408540954105411541254135414541554165417541854195420542154225423542454255426542754285429543054315432543354345435543654375438543954405441544254435444544554465447544854495450545154525453545454555456545754585459546054615462546354645465546654675468546954705471547254735474547554765477547854795480548154825483548454855486548754885489549054915492549354945495549654975498549955005501550255035504550555065507550855095510551155125513551455155516551755185519552055215522552355245525552655275528552955305531553255335534553555365537553855395540554155425543554455455546554755485549555055515552555355545555555655575558555955605561556255635564556555665567556855695570557155725573557455755576557755785579558055815582558355845585558655875588558955905591559255935594559555965597559855995600560156025603560456055606560756085609561056115612561356145615561656175618561956205621562256235624562556265627562856295630563156325633563456355636563756385639564056415642564356445645564656475648564956505651565256535654565556565657565856595660566156625663566456655666566756685669567056715672567356745675567656775678567956805681568256835684568556865687568856895690569156925693569456955696569756985699570057015702570357045705570657075708570957105711571257135714571557165717571857195720572157225723572457255726572757285729573057315732573357345735573657375738573957405741574257435744574557465747574857495750575157525753575457555756575757585759576057615762576357645765576657675768576957705771577257735774577557765777577857795780578157825783578457855786578757885789579057915792579357945795579657975798579958005801580258035804580558065807580858095810581158125813581458155816581758185819582058215822582358245825582658275828582958305831583258335834583558365837583858395840584158425843584458455846584758485849585058515852585358545855585658575858585958605861586258635864586558665867586858695870587158725873587458755876587758785879588058815882588358845885588658875888588958905891589258935894589558965897589858995900590159025903590459055906590759085909591059115912591359145915591659175918591959205921592259235924592559265927592859295930593159325933593459355936593759385939594059415942594359445945594659475948594959505951595259535954595559565957595859595960596159625963596459655966596759685969597059715972597359745975597659775978597959805981598259835984598559865987598859895990599159925993599459955996599759985999600060016002600360046005600660076008600960106011601260136014601560166017601860196020602160226023602460256026602760286029603060316032603360346035603660376038603960406041604260436044604560466047604860496050605160526053605460556056605760586059606060616062606360646065606660676068606960706071607260736074607560766077607860796080608160826083608460856086608760886089609060916092609360946095609660976098609961006101610261036104610561066107610861096110611161126113611461156116611761186119612061216122612361246125612661276128612961306131613261336134613561366137613861396140614161426143614461456146614761486149615061516152615361546155615661576158615961606161616261636164616561666167616861696170617161726173617461756176617761786179618061816182618361846185618661876188618961906191619261936194619561966197619861996200620162026203620462056206620762086209621062116212621362146215621662176218621962206221622262236224622562266227622862296230623162326233623462356236623762386239624062416242624362446245624662476248624962506251625262536254625562566257625862596260626162626263626462656266626762686269627062716272627362746275627662776278627962806281628262836284628562866287628862896290629162926293629462956296629762986299630063016302630363046305630663076308630963106311631263136314631563166317631863196320632163226323632463256326632763286329633063316332633363346335633663376338633963406341634263436344634563466347634863496350635163526353635463556356635763586359636063616362636363646365636663676368636963706371637263736374637563766377637863796380638163826383638463856386638763886389639063916392639363946395639663976398639964006401640264036404640564066407640864096410641164126413641464156416641764186419642064216422642364246425642664276428642964306431643264336434643564366437643864396440644164426443644464456446644764486449645064516452645364546455645664576458645964606461646264636464646564666467646864696470647164726473647464756476647764786479648064816482648364846485648664876488648964906491649264936494649564966497649864996500650165026503650465056506650765086509651065116512651365146515651665176518651965206521652265236524652565266527652865296530653165326533653465356536653765386539654065416542654365446545654665476548654965506551655265536554655565566557655865596560656165626563656465656566656765686569657065716572657365746575657665776578657965806581658265836584658565866587658865896590659165926593659465956596659765986599660066016602660366046605660666076608660966106611661266136614661566166617661866196620662166226623662466256626662766286629663066316632663366346635663666376638663966406641664266436644664566466647664866496650665166526653665466556656665766586659666066616662666366646665666666676668666966706671667266736674667566766677667866796680668166826683668466856686668766886689669066916692669366946695669666976698669967006701670267036704670567066707670867096710671167126713671467156716671767186719672067216722672367246725672667276728672967306731673267336734673567366737673867396740674167426743674467456746674767486749675067516752675367546755675667576758675967606761676267636764676567666767676867696770677167726773677467756776677767786779678067816782678367846785678667876788678967906791679267936794679567966797679867996800680168026803680468056806680768086809681068116812681368146815681668176818681968206821682268236824682568266827682868296830683168326833683468356836683768386839684068416842684368446845684668476848684968506851685268536854685568566857685868596860686168626863686468656866686768686869687068716872687368746875687668776878687968806881688268836884688568866887688868896890689168926893689468956896689768986899690069016902690369046905690669076908690969106911691269136914691569166917691869196920692169226923692469256926692769286929693069316932693369346935693669376938693969406941694269436944694569466947694869496950695169526953695469556956695769586959696069616962696369646965696669676968696969706971697269736974697569766977697869796980698169826983698469856986698769886989699069916992699369946995699669976998699970007001700270037004700570067007700870097010701170127013701470157016701770187019702070217022702370247025702670277028702970307031703270337034703570367037703870397040704170427043704470457046704770487049705070517052705370547055705670577058705970607061706270637064706570667067706870697070707170727073707470757076707770787079708070817082708370847085708670877088708970907091709270937094709570967097709870997100710171027103710471057106710771087109711071117112711371147115711671177118711971207121712271237124712571267127712871297130713171327133713471357136713771387139714071417142714371447145714671477148714971507151715271537154715571567157715871597160716171627163716471657166716771687169717071717172717371747175717671777178717971807181718271837184718571867187718871897190719171927193719471957196719771987199720072017202720372047205720672077208720972107211721272137214721572167217721872197220722172227223722472257226722772287229723072317232723372347235723672377238723972407241724272437244724572467247724872497250725172527253725472557256725772587259726072617262726372647265726672677268726972707271727272737274727572767277727872797280728172827283728472857286728772887289729072917292729372947295729672977298729973007301730273037304730573067307730873097310731173127313731473157316731773187319732073217322732373247325732673277328732973307331733273337334733573367337733873397340734173427343734473457346734773487349735073517352735373547355735673577358735973607361736273637364736573667367736873697370737173727373737473757376737773787379738073817382738373847385738673877388738973907391739273937394739573967397739873997400740174027403740474057406740774087409741074117412741374147415741674177418741974207421742274237424742574267427742874297430743174327433743474357436743774387439744074417442744374447445744674477448744974507451745274537454745574567457745874597460746174627463746474657466746774687469747074717472747374747475747674777478747974807481748274837484748574867487748874897490749174927493749474957496749774987499750075017502750375047505750675077508750975107511751275137514751575167517751875197520752175227523752475257526752775287529753075317532753375347535753675377538753975407541754275437544754575467547754875497550755175527553755475557556755775587559756075617562756375647565756675677568756975707571757275737574757575767577757875797580758175827583758475857586758775887589759075917592759375947595759675977598759976007601760276037604760576067607760876097610761176127613761476157616761776187619762076217622762376247625762676277628762976307631763276337634763576367637763876397640764176427643764476457646764776487649765076517652765376547655765676577658765976607661766276637664766576667667766876697670767176727673767476757676767776787679768076817682768376847685768676877688768976907691769276937694769576967697769876997700770177027703770477057706770777087709771077117712771377147715771677177718771977207721772277237724772577267727772877297730773177327733773477357736773777387739774077417742774377447745774677477748774977507751775277537754775577567757775877597760776177627763776477657766776777687769777077717772777377747775777677777778777977807781778277837784778577867787778877897790779177927793779477957796779777987799780078017802780378047805780678077808780978107811781278137814781578167817781878197820782178227823782478257826782778287829783078317832783378347835783678377838783978407841784278437844784578467847784878497850785178527853785478557856785778587859786078617862786378647865786678677868786978707871787278737874787578767877787878797880788178827883788478857886788778887889789078917892789378947895789678977898789979007901790279037904790579067907790879097910791179127913791479157916791779187919792079217922792379247925792679277928792979307931793279337934793579367937793879397940794179427943794479457946794779487949795079517952795379547955795679577958795979607961796279637964796579667967796879697970797179727973797479757976797779787979798079817982798379847985798679877988798979907991799279937994799579967997799879998000800180028003800480058006800780088009801080118012801380148015801680178018801980208021802280238024802580268027802880298030803180328033803480358036803780388039804080418042804380448045804680478048804980508051805280538054805580568057805880598060806180628063806480658066806780688069807080718072807380748075807680778078807980808081808280838084808580868087808880898090809180928093809480958096809780988099810081018102810381048105810681078108810981108111811281138114811581168117811881198120812181228123812481258126812781288129813081318132813381348135813681378138813981408141814281438144814581468147814881498150815181528153815481558156815781588159816081618162816381648165816681678168816981708171817281738174817581768177817881798180818181828183818481858186818781888189819081918192819381948195819681978198819982008201820282038204820582068207820882098210821182128213821482158216821782188219822082218222822382248225822682278228822982308231823282338234823582368237823882398240824182428243824482458246824782488249825082518252825382548255825682578258825982608261826282638264826582668267826882698270827182728273827482758276827782788279828082818282828382848285828682878288828982908291829282938294829582968297829882998300830183028303830483058306830783088309831083118312831383148315831683178318831983208321832283238324832583268327832883298330833183328333833483358336833783388339834083418342834383448345834683478348834983508351835283538354835583568357835883598360836183628363836483658366836783688369837083718372837383748375837683778378837983808381838283838384838583868387838883898390839183928393839483958396839783988399840084018402840384048405840684078408840984108411841284138414841584168417841884198420842184228423842484258426842784288429843084318432843384348435843684378438843984408441844284438444844584468447844884498450845184528453845484558456845784588459846084618462846384648465846684678468846984708471847284738474847584768477847884798480848184828483848484858486848784888489849084918492849384948495849684978498849985008501850285038504850585068507850885098510851185128513851485158516851785188519852085218522852385248525852685278528852985308531853285338534853585368537853885398540854185428543854485458546854785488549855085518552855385548555855685578558855985608561856285638564856585668567856885698570857185728573857485758576857785788579858085818582858385848585858685878588858985908591859285938594859585968597859885998600860186028603860486058606860786088609861086118612861386148615861686178618861986208621862286238624862586268627862886298630863186328633863486358636863786388639864086418642864386448645864686478648864986508651865286538654865586568657865886598660866186628663866486658666866786688669867086718672867386748675867686778678867986808681868286838684868586868687868886898690869186928693869486958696869786988699870087018702870387048705870687078708870987108711871287138714871587168717871887198720872187228723872487258726872787288729873087318732873387348735873687378738873987408741874287438744874587468747874887498750875187528753875487558756875787588759876087618762876387648765876687678768876987708771877287738774877587768777877887798780878187828783878487858786878787888789879087918792879387948795879687978798879988008801880288038804880588068807880888098810881188128813881488158816881788188819882088218822882388248825882688278828882988308831883288338834883588368837883888398840884188428843884488458846884788488849885088518852885388548855885688578858885988608861886288638864886588668867886888698870887188728873887488758876887788788879888088818882888388848885888688878888888988908891889288938894889588968897889888998900890189028903890489058906890789088909891089118912891389148915891689178918891989208921892289238924892589268927892889298930893189328933893489358936893789388939894089418942894389448945894689478948894989508951895289538954895589568957895889598960896189628963896489658966896789688969897089718972897389748975897689778978897989808981898289838984898589868987898889898990899189928993899489958996899789988999900090019002900390049005900690079008900990109011901290139014901590169017901890199020902190229023902490259026902790289029903090319032903390349035903690379038903990409041904290439044904590469047904890499050905190529053905490559056905790589059906090619062906390649065906690679068906990709071907290739074907590769077907890799080908190829083908490859086908790889089909090919092909390949095909690979098909991009101910291039104910591069107910891099110911191129113911491159116911791189119912091219122912391249125912691279128912991309131913291339134913591369137913891399140914191429143914491459146914791489149915091519152915391549155915691579158915991609161916291639164916591669167916891699170917191729173917491759176917791789179918091819182918391849185918691879188918991909191919291939194919591969197919891999200920192029203920492059206920792089209921092119212921392149215921692179218921992209221922292239224922592269227922892299230923192329233923492359236923792389239924092419242924392449245924692479248924992509251925292539254925592569257925892599260926192629263926492659266926792689269927092719272927392749275927692779278927992809281928292839284928592869287928892899290929192929293929492959296929792989299930093019302930393049305930693079308930993109311931293139314931593169317931893199320932193229323932493259326932793289329933093319332933393349335933693379338933993409341934293439344934593469347934893499350935193529353935493559356935793589359936093619362936393649365936693679368936993709371937293739374937593769377937893799380938193829383938493859386938793889389939093919392939393949395939693979398939994009401940294039404940594069407940894099410941194129413941494159416941794189419942094219422942394249425942694279428942994309431943294339434943594369437943894399440944194429443944494459446944794489449945094519452945394549455945694579458945994609461946294639464946594669467946894699470947194729473947494759476947794789479948094819482948394849485948694879488948994909491949294939494949594969497949894999500950195029503950495059506950795089509951095119512951395149515951695179518951995209521952295239524952595269527952895299530953195329533953495359536953795389539954095419542954395449545954695479548954995509551955295539554955595569557955895599560956195629563956495659566956795689569957095719572957395749575957695779578957995809581958295839584958595869587958895899590959195929593959495959596959795989599960096019602960396049605960696079608960996109611961296139614961596169617961896199620962196229623962496259626962796289629963096319632963396349635963696379638963996409641964296439644964596469647964896499650965196529653965496559656965796589659966096619662966396649665966696679668966996709671967296739674967596769677967896799680968196829683968496859686968796889689969096919692969396949695969696979698969997009701970297039704970597069707970897099710971197129713971497159716971797189719972097219722972397249725972697279728972997309731973297339734973597369737973897399740974197429743974497459746974797489749975097519752975397549755975697579758975997609761976297639764976597669767976897699770977197729773977497759776977797789779978097819782978397849785978697879788978997909791979297939794979597969797979897999800980198029803980498059806980798089809981098119812981398149815981698179818981998209821982298239824982598269827982898299830983198329833983498359836983798389839984098419842984398449845984698479848984998509851985298539854985598569857985898599860986198629863986498659866986798689869987098719872987398749875987698779878987998809881988298839884988598869887988898899890989198929893989498959896989798989899990099019902990399049905990699079908990999109911991299139914991599169917991899199920992199229923992499259926992799289929993099319932993399349935993699379938993999409941994299439944994599469947994899499950995199529953995499559956995799589959996099619962996399649965996699679968996999709971997299739974997599769977997899799980998199829983998499859986998799889989999099919992999399949995999699979998999910000100011000210003100041000510006100071000810009100101001110012100131001410015100161001710018100191002010021100221002310024100251002610027100281002910030100311003210033100341003510036100371003810039100401004110042100431004410045100461004710048100491005010051100521005310054100551005610057100581005910060100611006210063100641006510066100671006810069100701007110072100731007410075100761007710078100791008010081100821008310084100851008610087100881008910090100911009210093100941009510096100971009810099101001010110102101031010410105101061010710108101091011010111101121011310114101151011610117101181011910120101211012210123101241012510126101271012810129101301013110132101331013410135101361013710138101391014010141101421014310144101451014610147101481014910150101511015210153101541015510156101571015810159101601016110162101631016410165101661016710168101691017010171101721017310174101751017610177101781017910180101811018210183101841018510186101871018810189101901019110192101931019410195101961019710198101991020010201102021020310204102051020610207102081020910210102111021210213102141021510216102171021810219102201022110222102231022410225102261022710228102291023010231102321023310234102351023610237102381023910240102411024210243102441024510246102471024810249102501025110252102531025410255102561025710258102591026010261102621026310264102651026610267102681026910270102711027210273102741027510276102771027810279102801028110282102831028410285102861028710288102891029010291102921029310294102951029610297102981029910300103011030210303103041030510306103071030810309103101031110312103131031410315103161031710318103191032010321103221032310324103251032610327103281032910330103311033210333103341033510336103371033810339103401034110342103431034410345103461034710348103491035010351103521035310354103551035610357103581035910360103611036210363103641036510366103671036810369103701037110372103731037410375103761037710378103791038010381103821038310384103851038610387103881038910390103911039210393103941039510396103971039810399104001040110402104031040410405104061040710408104091041010411104121041310414104151041610417104181041910420104211042210423104241042510426104271042810429104301043110432104331043410435104361043710438104391044010441104421044310444104451044610447104481044910450104511045210453104541045510456104571045810459104601046110462104631046410465104661046710468104691047010471104721047310474104751047610477104781047910480104811048210483104841048510486104871048810489104901049110492104931049410495104961049710498104991050010501105021050310504105051050610507105081050910510105111051210513105141051510516105171051810519105201052110522105231052410525105261052710528105291053010531105321053310534105351053610537105381053910540105411054210543105441054510546105471054810549105501055110552105531055410555105561055710558105591056010561105621056310564105651056610567105681056910570105711057210573105741057510576105771057810579105801058110582105831058410585105861058710588105891059010591105921059310594105951059610597105981059910600106011060210603106041060510606106071060810609106101061110612106131061410615106161061710618106191062010621106221062310624106251062610627106281062910630106311063210633106341063510636106371063810639106401064110642106431064410645106461064710648106491065010651106521065310654106551065610657106581065910660106611066210663106641066510666106671066810669106701067110672106731067410675106761067710678106791068010681106821068310684106851068610687106881068910690106911069210693106941069510696106971069810699107001070110702107031070410705107061070710708107091071010711107121071310714107151071610717107181071910720107211072210723107241072510726107271072810729107301073110732107331073410735107361073710738107391074010741107421074310744107451074610747107481074910750107511075210753107541075510756107571075810759107601076110762107631076410765107661076710768107691077010771107721077310774107751077610777107781077910780107811078210783107841078510786107871078810789107901079110792107931079410795107961079710798107991080010801108021080310804108051080610807108081080910810108111081210813108141081510816108171081810819108201082110822108231082410825108261082710828108291083010831108321083310834108351083610837108381083910840108411084210843108441084510846108471084810849108501085110852108531085410855108561085710858108591086010861108621086310864108651086610867108681086910870108711087210873108741087510876108771087810879108801088110882108831088410885108861088710888108891089010891108921089310894108951089610897108981089910900109011090210903109041090510906109071090810909109101091110912109131091410915109161091710918109191092010921109221092310924109251092610927109281092910930109311093210933109341093510936109371093810939109401094110942109431094410945109461094710948109491095010951109521095310954109551095610957109581095910960109611096210963109641096510966109671096810969109701097110972109731097410975109761097710978109791098010981109821098310984109851098610987109881098910990109911099210993109941099510996109971099810999110001100111002110031100411005110061100711008110091101011011110121101311014110151101611017110181101911020110211102211023110241102511026110271102811029110301103111032110331103411035110361103711038110391104011041110421104311044110451104611047110481104911050110511105211053110541105511056110571105811059110601106111062110631106411065110661106711068110691107011071110721107311074110751107611077110781107911080110811108211083110841108511086110871108811089110901109111092110931109411095110961109711098110991110011101111021110311104111051110611107111081110911110111111111211113111141111511116111171111811119111201112111122111231112411125111261112711128111291113011131111321113311134111351113611137111381113911140111411114211143111441114511146111471114811149111501115111152111531115411155111561115711158111591116011161111621116311164111651116611167111681116911170111711117211173111741117511176111771117811179111801118111182111831118411185111861118711188111891119011191111921119311194111951119611197111981119911200112011120211203112041120511206112071120811209112101121111212112131121411215112161121711218112191122011221112221122311224112251122611227112281122911230112311123211233112341123511236112371123811239112401124111242112431124411245112461124711248112491125011251112521125311254112551125611257112581125911260112611126211263112641126511266112671126811269112701127111272112731127411275112761127711278112791128011281112821128311284112851128611287112881128911290112911129211293112941129511296112971129811299113001130111302113031130411305113061130711308113091131011311113121131311314113151131611317113181131911320113211132211323113241132511326113271132811329113301133111332113331133411335113361133711338113391134011341113421134311344113451134611347113481134911350113511135211353113541135511356113571135811359113601136111362113631136411365113661136711368113691137011371113721137311374113751137611377113781137911380113811138211383113841138511386113871138811389113901139111392113931139411395113961139711398113991140011401114021140311404114051140611407114081140911410114111141211413114141141511416114171141811419114201142111422114231142411425114261142711428114291143011431114321143311434114351143611437114381143911440114411144211443114441144511446114471144811449114501145111452114531145411455114561145711458114591146011461114621146311464114651146611467114681146911470114711147211473114741147511476114771147811479114801148111482114831148411485114861148711488114891149011491114921149311494114951149611497114981149911500115011150211503115041150511506115071150811509115101151111512115131151411515115161151711518115191152011521115221152311524115251152611527115281152911530115311153211533115341153511536115371153811539115401154111542115431154411545115461154711548115491155011551115521155311554115551155611557115581155911560115611156211563115641156511566115671156811569115701157111572115731157411575115761157711578115791158011581115821158311584115851158611587115881158911590115911159211593115941159511596115971159811599116001160111602116031160411605116061160711608116091161011611116121161311614116151161611617116181161911620116211162211623116241162511626116271162811629116301163111632116331163411635116361163711638116391164011641116421164311644116451164611647116481164911650116511165211653116541165511656116571165811659116601166111662116631166411665116661166711668116691167011671116721167311674116751167611677116781167911680116811168211683116841168511686116871168811689116901169111692116931169411695116961169711698116991170011701117021170311704117051170611707117081170911710117111171211713117141171511716117171171811719117201172111722117231172411725117261172711728117291173011731117321173311734117351173611737117381173911740117411174211743117441174511746117471174811749117501175111752117531175411755117561175711758117591176011761117621176311764117651176611767117681176911770117711177211773117741177511776117771177811779117801178111782117831178411785117861178711788117891179011791117921179311794117951179611797117981179911800118011180211803118041180511806118071180811809118101181111812118131181411815118161181711818118191182011821118221182311824118251182611827118281182911830118311183211833118341183511836118371183811839118401184111842118431184411845118461184711848118491185011851118521185311854118551185611857118581185911860118611186211863118641186511866118671186811869118701187111872118731187411875118761187711878118791188011881118821188311884118851188611887118881188911890118911189211893118941189511896118971189811899119001190111902119031190411905119061190711908119091191011911119121191311914119151191611917119181191911920119211192211923119241192511926119271192811929119301193111932119331193411935119361193711938119391194011941119421194311944119451194611947119481194911950119511195211953119541195511956119571195811959119601196111962119631196411965119661196711968119691197011971119721197311974119751197611977119781197911980119811198211983119841198511986119871198811989119901199111992119931199411995119961199711998119991200012001120021200312004120051200612007120081200912010120111201212013120141201512016120171201812019120201202112022120231202412025120261202712028120291203012031120321203312034120351203612037120381203912040120411204212043120441204512046120471204812049120501205112052120531205412055120561205712058120591206012061120621206312064120651206612067120681206912070120711207212073120741207512076120771207812079120801208112082120831208412085120861208712088120891209012091120921209312094120951209612097120981209912100121011210212103121041210512106121071210812109121101211112112121131211412115121161211712118121191212012121121221212312124121251212612127121281212912130121311213212133121341213512136121371213812139121401214112142121431214412145121461214712148121491215012151121521215312154121551215612157121581215912160121611216212163121641216512166121671216812169121701217112172121731217412175121761217712178121791218012181121821218312184121851218612187121881218912190121911219212193121941219512196121971219812199122001220112202122031220412205122061220712208122091221012211122121221312214122151221612217122181221912220122211222212223122241222512226122271222812229122301223112232122331223412235122361223712238122391224012241122421224312244122451224612247122481224912250122511225212253122541225512256122571225812259122601226112262122631226412265122661226712268122691227012271122721227312274122751227612277122781227912280122811228212283122841228512286122871228812289122901229112292122931229412295122961229712298122991230012301123021230312304123051230612307123081230912310123111231212313123141231512316123171231812319123201232112322123231232412325123261232712328123291233012331123321233312334123351233612337123381233912340123411234212343123441234512346123471234812349123501235112352123531235412355123561235712358123591236012361123621236312364123651236612367123681236912370123711237212373123741237512376123771237812379123801238112382123831238412385123861238712388123891239012391123921239312394123951239612397123981239912400124011240212403124041240512406124071240812409124101241112412124131241412415124161241712418124191242012421124221242312424124251242612427124281242912430124311243212433124341243512436124371243812439124401244112442124431244412445124461244712448124491245012451124521245312454124551245612457124581245912460124611246212463124641246512466124671246812469124701247112472124731247412475124761247712478124791248012481124821248312484124851248612487124881248912490124911249212493124941249512496124971249812499125001250112502125031250412505125061250712508125091251012511125121251312514125151251612517125181251912520125211252212523125241252512526125271252812529125301253112532125331253412535125361253712538125391254012541125421254312544125451254612547125481254912550125511255212553125541255512556125571255812559125601256112562125631256412565125661256712568125691257012571125721257312574125751257612577125781257912580125811258212583125841258512586125871258812589125901259112592125931259412595125961259712598125991260012601126021260312604126051260612607126081260912610126111261212613126141261512616126171261812619126201262112622126231262412625126261262712628126291263012631126321263312634126351263612637126381263912640126411264212643126441264512646126471264812649126501265112652126531265412655126561265712658126591266012661126621266312664126651266612667126681266912670126711267212673126741267512676126771267812679126801268112682126831268412685126861268712688126891269012691126921269312694126951269612697126981269912700127011270212703127041270512706127071270812709127101271112712127131271412715127161271712718127191272012721127221272312724127251272612727127281272912730127311273212733127341273512736127371273812739127401274112742127431274412745127461274712748127491275012751127521275312754127551275612757127581275912760127611276212763127641276512766127671276812769127701277112772127731277412775127761277712778127791278012781127821278312784127851278612787127881278912790127911279212793127941279512796127971279812799128001280112802128031280412805128061280712808128091281012811128121281312814128151281612817128181281912820128211282212823128241282512826128271282812829128301283112832128331283412835128361283712838128391284012841128421284312844128451284612847128481284912850128511285212853128541285512856128571285812859128601286112862128631286412865128661286712868128691287012871128721287312874128751287612877128781287912880128811288212883128841288512886128871288812889128901289112892128931289412895128961289712898128991290012901129021290312904129051290612907129081290912910129111291212913129141291512916129171291812919129201292112922129231292412925129261292712928129291293012931129321293312934129351293612937129381293912940129411294212943129441294512946129471294812949129501295112952129531295412955129561295712958129591296012961129621296312964129651296612967129681296912970129711297212973129741297512976129771297812979129801298112982129831298412985129861298712988129891299012991129921299312994129951299612997129981299913000130011300213003130041300513006130071300813009130101301113012130131301413015130161301713018130191302013021130221302313024130251302613027130281302913030130311303213033130341303513036130371303813039130401304113042130431304413045130461304713048130491305013051130521305313054130551305613057130581305913060130611306213063130641306513066130671306813069130701307113072130731307413075130761307713078130791308013081130821308313084130851308613087130881308913090130911309213093130941309513096130971309813099131001310113102131031310413105131061310713108131091311013111131121311313114131151311613117131181311913120131211312213123131241312513126131271312813129131301313113132131331313413135131361313713138131391314013141131421314313144131451314613147131481314913150131511315213153131541315513156131571315813159131601316113162131631316413165131661316713168131691317013171131721317313174131751317613177131781317913180131811318213183131841318513186131871318813189131901319113192131931319413195131961319713198131991320013201132021320313204132051320613207132081320913210132111321213213132141321513216132171321813219132201322113222132231322413225132261322713228132291323013231132321323313234132351323613237132381323913240132411324213243132441324513246132471324813249132501325113252132531325413255132561325713258132591326013261132621326313264132651326613267132681326913270132711327213273132741327513276132771327813279132801328113282132831328413285132861328713288132891329013291132921329313294132951329613297132981329913300133011330213303133041330513306133071330813309133101331113312133131331413315133161331713318133191332013321133221332313324133251332613327133281332913330133311333213333133341333513336133371333813339133401334113342133431334413345133461334713348133491335013351133521335313354133551335613357133581335913360133611336213363133641336513366133671336813369133701337113372133731337413375133761337713378133791338013381133821338313384133851338613387133881338913390133911339213393133941339513396133971339813399134001340113402134031340413405134061340713408134091341013411134121341313414134151341613417134181341913420134211342213423134241342513426134271342813429134301343113432134331343413435134361343713438134391344013441134421344313444134451344613447134481344913450134511345213453134541345513456134571345813459134601346113462134631346413465134661346713468134691347013471134721347313474134751347613477134781347913480134811348213483134841348513486134871348813489134901349113492134931349413495134961349713498134991350013501135021350313504135051350613507135081350913510135111351213513135141351513516135171351813519135201352113522135231352413525135261352713528135291353013531135321353313534135351353613537135381353913540135411354213543135441354513546135471354813549135501355113552135531355413555135561355713558135591356013561135621356313564135651356613567135681356913570135711357213573135741357513576135771357813579135801358113582135831358413585135861358713588135891359013591135921359313594135951359613597135981359913600136011360213603136041360513606136071360813609136101361113612136131361413615136161361713618136191362013621136221362313624136251362613627136281362913630136311363213633136341363513636136371363813639136401364113642136431364413645136461364713648136491365013651136521365313654136551365613657136581365913660136611366213663136641366513666136671366813669136701367113672136731367413675136761367713678136791368013681136821368313684136851368613687136881368913690136911369213693136941369513696136971369813699137001370113702137031370413705137061370713708137091371013711137121371313714137151371613717137181371913720137211372213723137241372513726137271372813729137301373113732137331373413735137361373713738137391374013741137421374313744137451374613747137481374913750137511375213753137541375513756137571375813759137601376113762137631376413765137661376713768137691377013771137721377313774137751377613777137781377913780137811378213783137841378513786137871378813789137901379113792137931379413795137961379713798137991380013801138021380313804138051380613807138081380913810138111381213813138141381513816138171381813819138201382113822138231382413825138261382713828138291383013831138321383313834138351383613837138381383913840138411384213843138441384513846138471384813849138501385113852138531385413855138561385713858138591386013861138621386313864138651386613867138681386913870138711387213873138741387513876138771387813879138801388113882138831388413885138861388713888138891389013891138921389313894138951389613897138981389913900139011390213903139041390513906139071390813909139101391113912139131391413915139161391713918139191392013921139221392313924139251392613927139281392913930139311393213933139341393513936139371393813939139401394113942139431394413945139461394713948139491395013951139521395313954139551395613957139581395913960139611396213963139641396513966139671396813969139701397113972139731397413975139761397713978139791398013981139821398313984139851398613987139881398913990139911399213993139941399513996139971399813999140001400114002140031400414005140061400714008140091401014011140121401314014140151401614017140181401914020140211402214023140241402514026140271402814029140301403114032140331403414035140361403714038140391404014041140421404314044140451404614047140481404914050140511405214053140541405514056140571405814059140601406114062140631406414065140661406714068140691407014071140721407314074140751407614077140781407914080140811408214083140841408514086140871408814089140901409114092140931409414095140961409714098140991410014101141021410314104141051410614107141081410914110141111411214113141141411514116141171411814119141201412114122141231412414125141261412714128141291413014131141321413314134141351413614137141381413914140141411414214143141441414514146141471414814149141501415114152141531415414155141561415714158141591416014161141621416314164141651416614167141681416914170141711417214173141741417514176141771417814179141801418114182141831418414185141861418714188141891419014191141921419314194141951419614197141981419914200142011420214203142041420514206142071420814209142101421114212142131421414215142161421714218142191422014221142221422314224142251422614227142281422914230142311423214233142341423514236142371423814239142401424114242142431424414245142461424714248142491425014251142521425314254142551425614257142581425914260142611426214263142641426514266142671426814269142701427114272142731427414275142761427714278142791428014281142821428314284142851428614287142881428914290142911429214293142941429514296142971429814299143001430114302143031430414305143061430714308143091431014311143121431314314143151431614317143181431914320143211432214323143241432514326143271432814329143301433114332143331433414335143361433714338143391434014341143421434314344143451434614347143481434914350143511435214353143541435514356143571435814359143601436114362143631436414365143661436714368143691437014371143721437314374143751437614377143781437914380143811438214383143841438514386143871438814389143901439114392143931439414395143961439714398143991440014401144021440314404144051440614407144081440914410144111441214413144141441514416144171441814419144201442114422144231442414425144261442714428144291443014431144321443314434144351443614437144381443914440144411444214443144441444514446144471444814449144501445114452144531445414455144561445714458144591446014461144621446314464144651446614467144681446914470144711447214473144741447514476144771447814479144801448114482144831448414485144861448714488144891449014491144921449314494144951449614497144981449914500145011450214503145041450514506145071450814509145101451114512145131451414515145161451714518145191452014521145221452314524145251452614527145281452914530145311453214533145341453514536145371453814539145401454114542145431454414545145461454714548145491455014551145521455314554145551455614557145581455914560145611456214563145641456514566145671456814569145701457114572145731457414575145761457714578145791458014581145821458314584145851458614587145881458914590145911459214593145941459514596145971459814599146001460114602146031460414605146061460714608146091461014611146121461314614146151461614617146181461914620146211462214623146241462514626146271462814629146301463114632146331463414635146361463714638146391464014641146421464314644146451464614647146481464914650146511465214653146541465514656146571465814659146601466114662146631466414665146661466714668146691467014671146721467314674146751467614677146781467914680146811468214683146841468514686146871468814689146901469114692146931469414695146961469714698146991470014701147021470314704147051470614707147081470914710147111471214713147141471514716147171471814719147201472114722147231472414725147261472714728147291473014731147321473314734147351473614737147381473914740147411474214743147441474514746147471474814749147501475114752147531475414755147561475714758147591476014761147621476314764147651476614767147681476914770147711477214773147741477514776147771477814779147801478114782147831478414785147861478714788147891479014791147921479314794147951479614797147981479914800148011480214803148041480514806148071480814809148101481114812148131481414815148161481714818148191482014821148221482314824148251482614827148281482914830148311483214833148341483514836148371483814839148401484114842148431484414845148461484714848148491485014851148521485314854148551485614857148581485914860148611486214863148641486514866148671486814869148701487114872148731487414875148761487714878148791488014881148821488314884148851488614887148881488914890148911489214893148941489514896148971489814899149001490114902149031490414905149061490714908149091491014911149121491314914149151491614917149181491914920149211492214923149241492514926149271492814929149301493114932149331493414935149361493714938149391494014941149421494314944149451494614947149481494914950149511495214953149541495514956149571495814959149601496114962149631496414965149661496714968149691497014971149721497314974149751497614977149781497914980149811498214983149841498514986149871498814989149901499114992149931499414995149961499714998149991500015001150021500315004150051500615007150081500915010150111501215013150141501515016150171501815019150201502115022150231502415025150261502715028150291503015031150321503315034150351503615037150381503915040150411504215043150441504515046150471504815049150501505115052150531505415055150561505715058150591506015061150621506315064150651506615067150681506915070150711507215073150741507515076150771507815079150801508115082150831508415085150861508715088150891509015091150921509315094150951509615097150981509915100151011510215103151041510515106151071510815109151101511115112151131511415115151161511715118151191512015121151221512315124151251512615127151281512915130151311513215133151341513515136151371513815139151401514115142151431514415145151461514715148151491515015151151521515315154151551515615157151581515915160151611516215163151641516515166151671516815169151701517115172151731517415175151761517715178151791518015181151821518315184151851518615187151881518915190151911519215193151941519515196151971519815199152001520115202152031520415205152061520715208152091521015211152121521315214152151521615217152181521915220152211522215223152241522515226152271522815229152301523115232152331523415235152361523715238152391524015241152421524315244152451524615247152481524915250152511525215253152541525515256152571525815259152601526115262152631526415265152661526715268152691527015271152721527315274152751527615277152781527915280152811528215283152841528515286152871528815289152901529115292152931529415295152961529715298152991530015301153021530315304153051530615307153081530915310153111531215313153141531515316153171531815319153201532115322153231532415325153261532715328153291533015331153321533315334153351533615337153381533915340153411534215343153441534515346153471534815349153501535115352153531535415355153561535715358153591536015361153621536315364153651536615367153681536915370153711537215373153741537515376153771537815379153801538115382153831538415385153861538715388153891539015391153921539315394153951539615397153981539915400154011540215403154041540515406154071540815409154101541115412154131541415415154161541715418154191542015421154221542315424154251542615427154281542915430154311543215433154341543515436154371543815439154401544115442154431544415445154461544715448154491545015451154521545315454154551545615457154581545915460154611546215463154641546515466154671546815469154701547115472154731547415475154761547715478154791548015481154821548315484154851548615487154881548915490154911549215493154941549515496154971549815499155001550115502155031550415505155061550715508155091551015511155121551315514155151551615517155181551915520155211552215523155241552515526155271552815529155301553115532155331553415535155361553715538155391554015541155421554315544155451554615547155481554915550155511555215553155541555515556155571555815559155601556115562155631556415565155661556715568155691557015571155721557315574155751557615577155781557915580155811558215583155841558515586155871558815589155901559115592155931559415595155961559715598155991560015601156021560315604156051560615607156081560915610156111561215613156141561515616156171561815619156201562115622156231562415625156261562715628156291563015631156321563315634156351563615637156381563915640156411564215643156441564515646156471564815649156501565115652156531565415655156561565715658156591566015661156621566315664156651566615667156681566915670156711567215673156741567515676156771567815679156801568115682156831568415685156861568715688156891569015691156921569315694156951569615697156981569915700157011570215703157041570515706157071570815709157101571115712157131571415715157161571715718157191572015721157221572315724157251572615727157281572915730157311573215733157341573515736157371573815739157401574115742157431574415745157461574715748157491575015751157521575315754157551575615757157581575915760157611576215763157641576515766157671576815769157701577115772157731577415775157761577715778157791578015781157821578315784157851578615787157881578915790157911579215793157941579515796157971579815799158001580115802158031580415805158061580715808158091581015811158121581315814158151581615817158181581915820158211582215823158241582515826158271582815829158301583115832158331583415835158361583715838158391584015841158421584315844158451584615847158481584915850158511585215853158541585515856158571585815859158601586115862158631586415865158661586715868158691587015871158721587315874158751587615877158781587915880158811588215883158841588515886158871588815889158901589115892158931589415895158961589715898158991590015901159021590315904159051590615907159081590915910159111591215913159141591515916159171591815919159201592115922159231592415925159261592715928159291593015931159321593315934159351593615937159381593915940159411594215943159441594515946159471594815949159501595115952159531595415955159561595715958159591596015961159621596315964159651596615967159681596915970159711597215973159741597515976159771597815979159801598115982159831598415985159861598715988159891599015991159921599315994159951599615997159981599916000160011600216003160041600516006160071600816009160101601116012160131601416015160161601716018160191602016021160221602316024160251602616027160281602916030160311603216033160341603516036160371603816039160401604116042160431604416045160461604716048160491605016051160521605316054160551605616057160581605916060160611606216063160641606516066160671606816069160701607116072160731607416075160761607716078160791608016081160821608316084160851608616087160881608916090160911609216093160941609516096160971609816099161001610116102161031610416105161061610716108161091611016111161121611316114161151611616117161181611916120161211612216123161241612516126161271612816129161301613116132161331613416135161361613716138161391614016141161421614316144161451614616147161481614916150161511615216153161541615516156161571615816159161601616116162161631616416165161661616716168161691617016171161721617316174161751617616177161781617916180161811618216183161841618516186161871618816189161901619116192161931619416195161961619716198161991620016201162021620316204162051620616207162081620916210162111621216213162141621516216162171621816219162201622116222162231622416225162261622716228162291623016231162321623316234162351623616237162381623916240162411624216243162441624516246162471624816249162501625116252162531625416255162561625716258162591626016261162621626316264162651626616267162681626916270162711627216273162741627516276162771627816279162801628116282162831628416285162861628716288162891629016291162921629316294162951629616297162981629916300163011630216303163041630516306163071630816309163101631116312163131631416315163161631716318163191632016321163221632316324163251632616327163281632916330163311633216333163341633516336163371633816339163401634116342163431634416345163461634716348163491635016351163521635316354163551635616357163581635916360163611636216363163641636516366163671636816369163701637116372163731637416375163761637716378163791638016381163821638316384163851638616387163881638916390163911639216393163941639516396163971639816399164001640116402164031640416405164061640716408164091641016411164121641316414164151641616417164181641916420164211642216423164241642516426164271642816429164301643116432164331643416435164361643716438164391644016441164421644316444164451644616447164481644916450164511645216453164541645516456164571645816459164601646116462164631646416465164661646716468164691647016471164721647316474164751647616477164781647916480164811648216483164841648516486164871648816489164901649116492164931649416495164961649716498164991650016501165021650316504165051650616507165081650916510165111651216513165141651516516165171651816519165201652116522165231652416525165261652716528165291653016531165321653316534165351653616537165381653916540165411654216543165441654516546165471654816549165501655116552165531655416555165561655716558165591656016561165621656316564165651656616567165681656916570165711657216573165741657516576165771657816579165801658116582165831658416585165861658716588165891659016591165921659316594165951659616597165981659916600166011660216603166041660516606166071660816609166101661116612166131661416615166161661716618166191662016621166221662316624166251662616627166281662916630166311663216633166341663516636166371663816639166401664116642166431664416645166461664716648166491665016651166521665316654166551665616657166581665916660166611666216663166641666516666166671666816669166701667116672166731667416675166761667716678166791668016681166821668316684166851668616687166881668916690166911669216693166941669516696166971669816699167001670116702167031670416705167061670716708167091671016711167121671316714167151671616717167181671916720167211672216723167241672516726167271672816729167301673116732167331673416735167361673716738167391674016741167421674316744167451674616747167481674916750167511675216753167541675516756167571675816759167601676116762167631676416765167661676716768167691677016771167721677316774167751677616777167781677916780167811678216783167841678516786167871678816789167901679116792167931679416795167961679716798167991680016801168021680316804168051680616807168081680916810168111681216813168141681516816168171681816819168201682116822168231682416825168261682716828168291683016831168321683316834168351683616837168381683916840168411684216843168441684516846168471684816849168501685116852168531685416855168561685716858168591686016861168621686316864168651686616867168681686916870168711687216873168741687516876168771687816879168801688116882168831688416885168861688716888168891689016891168921689316894168951689616897168981689916900169011690216903169041690516906169071690816909169101691116912169131691416915169161691716918169191692016921169221692316924169251692616927169281692916930169311693216933169341693516936169371693816939169401694116942169431694416945169461694716948169491695016951169521695316954169551695616957169581695916960169611696216963169641696516966169671696816969169701697116972169731697416975169761697716978169791698016981169821698316984169851698616987169881698916990169911699216993169941699516996169971699816999170001700117002170031700417005170061700717008170091701017011170121701317014170151701617017170181701917020170211702217023170241702517026170271702817029170301703117032170331703417035170361703717038170391704017041170421704317044170451704617047170481704917050170511705217053170541705517056170571705817059170601706117062170631706417065170661706717068170691707017071170721707317074170751707617077170781707917080170811708217083170841708517086170871708817089170901709117092170931709417095170961709717098170991710017101171021710317104171051710617107171081710917110171111711217113171141711517116171171711817119171201712117122171231712417125171261712717128171291713017131171321713317134171351713617137171381713917140171411714217143171441714517146171471714817149171501715117152171531715417155171561715717158171591716017161171621716317164171651716617167171681716917170171711717217173171741717517176171771717817179171801718117182171831718417185171861718717188171891719017191171921719317194171951719617197171981719917200172011720217203172041720517206172071720817209172101721117212172131721417215172161721717218172191722017221172221722317224172251722617227172281722917230172311723217233172341723517236172371723817239172401724117242172431724417245172461724717248172491725017251172521725317254172551725617257172581725917260172611726217263172641726517266172671726817269172701727117272172731727417275172761727717278172791728017281172821728317284172851728617287172881728917290172911729217293172941729517296172971729817299173001730117302173031730417305173061730717308173091731017311173121731317314173151731617317173181731917320173211732217323173241732517326173271732817329173301733117332173331733417335173361733717338173391734017341173421734317344173451734617347173481734917350173511735217353173541735517356173571735817359173601736117362173631736417365173661736717368173691737017371173721737317374173751737617377173781737917380173811738217383173841738517386173871738817389173901739117392173931739417395173961739717398173991740017401174021740317404174051740617407174081740917410174111741217413174141741517416174171741817419174201742117422174231742417425174261742717428174291743017431174321743317434174351743617437174381743917440174411744217443174441744517446174471744817449174501745117452174531745417455174561745717458174591746017461174621746317464174651746617467174681746917470174711747217473174741747517476174771747817479174801748117482174831748417485174861748717488174891749017491174921749317494174951749617497174981749917500175011750217503175041750517506175071750817509175101751117512175131751417515175161751717518175191752017521175221752317524175251752617527175281752917530175311753217533175341753517536175371753817539175401754117542175431754417545175461754717548175491755017551175521755317554175551755617557175581755917560175611756217563175641756517566175671756817569175701757117572175731757417575175761757717578175791758017581175821758317584175851758617587175881758917590175911759217593175941759517596175971759817599176001760117602176031760417605176061760717608176091761017611176121761317614176151761617617176181761917620176211762217623176241762517626176271762817629176301763117632176331763417635176361763717638176391764017641176421764317644176451764617647176481764917650176511765217653176541765517656176571765817659176601766117662176631766417665176661766717668176691767017671176721767317674176751767617677176781767917680176811768217683176841768517686176871768817689176901769117692176931769417695176961769717698176991770017701177021770317704177051770617707177081770917710177111771217713177141771517716177171771817719177201772117722177231772417725177261772717728177291773017731177321773317734177351773617737177381773917740177411774217743177441774517746177471774817749177501775117752177531775417755177561775717758177591776017761177621776317764177651776617767177681776917770177711777217773177741777517776177771777817779177801778117782177831778417785177861778717788177891779017791177921779317794177951779617797177981779917800178011780217803178041780517806178071780817809178101781117812178131781417815178161781717818178191782017821178221782317824178251782617827178281782917830178311783217833178341783517836178371783817839178401784117842178431784417845178461784717848178491785017851178521785317854178551785617857178581785917860178611786217863178641786517866178671786817869178701787117872178731787417875178761787717878178791788017881178821788317884178851788617887178881788917890178911789217893178941789517896178971789817899179001790117902179031790417905179061790717908179091791017911179121791317914179151791617917179181791917920179211792217923179241792517926179271792817929179301793117932179331793417935179361793717938179391794017941179421794317944179451794617947179481794917950179511795217953179541795517956179571795817959179601796117962179631796417965179661796717968179691797017971179721797317974179751797617977179781797917980179811798217983179841798517986179871798817989179901799117992179931799417995179961799717998179991800018001180021800318004180051800618007180081800918010180111801218013180141801518016180171801818019180201802118022180231802418025180261802718028180291803018031180321803318034180351803618037180381803918040180411804218043180441804518046180471804818049180501805118052180531805418055180561805718058180591806018061180621806318064180651806618067180681806918070180711807218073180741807518076180771807818079180801808118082180831808418085180861808718088180891809018091180921809318094180951809618097180981809918100181011810218103181041810518106181071810818109181101811118112181131811418115181161811718118181191812018121181221812318124181251812618127181281812918130181311813218133181341813518136181371813818139181401814118142181431814418145181461814718148181491815018151181521815318154181551815618157181581815918160181611816218163181641816518166181671816818169181701817118172181731817418175181761817718178181791818018181181821818318184181851818618187181881818918190181911819218193181941819518196181971819818199182001820118202182031820418205182061820718208182091821018211182121821318214182151821618217182181821918220182211822218223182241822518226182271822818229182301823118232182331823418235182361823718238182391824018241182421824318244182451824618247182481824918250182511825218253182541825518256182571825818259182601826118262182631826418265182661826718268182691827018271182721827318274182751827618277182781827918280182811828218283182841828518286182871828818289182901829118292182931829418295182961829718298182991830018301183021830318304183051830618307183081830918310183111831218313183141831518316183171831818319183201832118322183231832418325183261832718328183291833018331183321833318334183351833618337183381833918340183411834218343183441834518346183471834818349183501835118352183531835418355183561835718358183591836018361183621836318364183651836618367183681836918370183711837218373183741837518376183771837818379183801838118382183831838418385183861838718388183891839018391183921839318394183951839618397183981839918400184011840218403184041840518406184071840818409184101841118412184131841418415184161841718418184191842018421184221842318424184251842618427184281842918430184311843218433184341843518436184371843818439184401844118442184431844418445184461844718448184491845018451184521845318454184551845618457184581845918460184611846218463184641846518466184671846818469184701847118472184731847418475184761847718478184791848018481184821848318484184851848618487184881848918490184911849218493184941849518496184971849818499185001850118502185031850418505185061850718508185091851018511185121851318514185151851618517185181851918520185211852218523185241852518526185271852818529185301853118532185331853418535185361853718538185391854018541185421854318544185451854618547185481854918550185511855218553185541855518556185571855818559185601856118562185631856418565185661856718568185691857018571185721857318574185751857618577185781857918580185811858218583185841858518586185871858818589185901859118592185931859418595185961859718598185991860018601186021860318604186051860618607186081860918610186111861218613186141861518616186171861818619186201862118622186231862418625186261862718628186291863018631186321863318634186351863618637186381863918640186411864218643186441864518646186471864818649186501865118652186531865418655186561865718658186591866018661186621866318664186651866618667186681866918670186711867218673186741867518676186771867818679186801868118682186831868418685186861868718688186891869018691186921869318694186951869618697186981869918700187011870218703187041870518706187071870818709187101871118712187131871418715187161871718718187191872018721187221872318724187251872618727187281872918730187311873218733187341873518736187371873818739187401874118742187431874418745187461874718748187491875018751187521875318754187551875618757187581875918760187611876218763187641876518766187671876818769187701877118772187731877418775187761877718778187791878018781187821878318784187851878618787187881878918790187911879218793187941879518796187971879818799188001880118802188031880418805188061880718808188091881018811188121881318814188151881618817188181881918820188211882218823188241882518826188271882818829188301883118832188331883418835188361883718838188391884018841188421884318844188451884618847188481884918850188511885218853188541885518856188571885818859188601886118862188631886418865188661886718868188691887018871188721887318874188751887618877188781887918880188811888218883188841888518886188871888818889188901889118892188931889418895188961889718898188991890018901189021890318904189051890618907189081890918910189111891218913189141891518916189171891818919189201892118922189231892418925189261892718928189291893018931189321893318934189351893618937189381893918940189411894218943189441894518946189471894818949189501895118952189531895418955189561895718958189591896018961189621896318964189651896618967189681896918970189711897218973189741897518976189771897818979189801898118982189831898418985189861898718988189891899018991189921899318994189951899618997189981899919000190011900219003190041900519006190071900819009190101901119012190131901419015190161901719018190191902019021190221902319024190251902619027190281902919030190311903219033190341903519036190371903819039190401904119042190431904419045190461904719048190491905019051190521905319054190551905619057190581905919060190611906219063190641906519066190671906819069190701907119072190731907419075190761907719078190791908019081190821908319084190851908619087190881908919090190911909219093190941909519096190971909819099191001910119102191031910419105191061910719108191091911019111191121911319114191151911619117191181911919120191211912219123191241912519126191271912819129191301913119132191331913419135191361913719138191391914019141191421914319144191451914619147191481914919150191511915219153191541915519156191571915819159191601916119162191631916419165191661916719168191691917019171191721917319174191751917619177191781917919180191811918219183191841918519186191871918819189191901919119192191931919419195191961919719198191991920019201192021920319204192051920619207192081920919210192111921219213192141921519216192171921819219192201922119222192231922419225192261922719228192291923019231192321923319234192351923619237192381923919240192411924219243192441924519246192471924819249192501925119252192531925419255192561925719258192591926019261192621926319264192651926619267192681926919270192711927219273192741927519276192771927819279192801928119282192831928419285192861928719288192891929019291192921929319294192951929619297192981929919300193011930219303193041930519306193071930819309193101931119312193131931419315193161931719318193191932019321193221932319324193251932619327193281932919330193311933219333193341933519336193371933819339193401934119342193431934419345193461934719348193491935019351193521935319354193551935619357193581935919360193611936219363193641936519366193671936819369193701937119372193731937419375193761937719378193791938019381193821938319384193851938619387193881938919390193911939219393193941939519396193971939819399194001940119402194031940419405194061940719408194091941019411194121941319414194151941619417194181941919420194211942219423194241942519426194271942819429194301943119432194331943419435194361943719438194391944019441194421944319444194451944619447194481944919450194511945219453194541945519456194571945819459194601946119462194631946419465194661946719468194691947019471194721947319474194751947619477194781947919480194811948219483194841948519486194871948819489194901949119492194931949419495194961949719498194991950019501195021950319504195051950619507195081950919510195111951219513195141951519516195171951819519195201952119522195231952419525195261952719528195291953019531195321953319534195351953619537195381953919540195411954219543195441954519546195471954819549195501955119552195531955419555195561955719558195591956019561195621956319564195651956619567195681956919570195711957219573195741957519576195771957819579195801958119582195831958419585195861958719588195891959019591195921959319594195951959619597195981959919600196011960219603196041960519606196071960819609196101961119612196131961419615196161961719618196191962019621196221962319624196251962619627196281962919630196311963219633196341963519636196371963819639196401964119642196431964419645196461964719648196491965019651196521965319654196551965619657196581965919660196611966219663196641966519666196671966819669196701967119672196731967419675196761967719678196791968019681196821968319684196851968619687196881968919690196911969219693196941969519696196971969819699197001970119702197031970419705197061970719708197091971019711197121971319714197151971619717197181971919720197211972219723197241972519726197271972819729197301973119732197331973419735197361973719738197391974019741197421974319744197451974619747197481974919750197511975219753197541975519756197571975819759197601976119762197631976419765197661976719768197691977019771197721977319774197751977619777197781977919780197811978219783197841978519786197871978819789197901979119792197931979419795197961979719798197991980019801198021980319804198051980619807198081980919810198111981219813198141981519816198171981819819198201982119822198231982419825198261982719828198291983019831198321983319834198351983619837198381983919840198411984219843198441984519846198471984819849198501985119852198531985419855198561985719858198591986019861198621986319864198651986619867198681986919870198711987219873198741987519876198771987819879198801988119882198831988419885198861988719888198891989019891198921989319894198951989619897198981989919900199011990219903199041990519906199071990819909199101991119912199131991419915199161991719918199191992019921199221992319924199251992619927199281992919930199311993219933199341993519936199371993819939199401994119942199431994419945199461994719948199491995019951199521995319954199551995619957199581995919960199611996219963199641996519966199671996819969199701997119972199731997419975199761997719978199791998019981199821998319984199851998619987199881998919990199911999219993199941999519996199971999819999200002000120002200032000420005200062000720008200092001020011200122001320014200152001620017200182001920020200212002220023200242002520026200272002820029200302003120032200332003420035200362003720038200392004020041200422004320044200452004620047200482004920050200512005220053200542005520056200572005820059200602006120062200632006420065200662006720068200692007020071200722007320074200752007620077200782007920080200812008220083200842008520086200872008820089200902009120092200932009420095200962009720098200992010020101201022010320104201052010620107201082010920110201112011220113201142011520116201172011820119201202012120122201232012420125201262012720128201292013020131201322013320134201352013620137201382013920140201412014220143201442014520146201472014820149201502015120152201532015420155201562015720158201592016020161201622016320164201652016620167201682016920170201712017220173201742017520176201772017820179201802018120182201832018420185201862018720188201892019020191201922019320194201952019620197201982019920200202012020220203202042020520206202072020820209202102021120212202132021420215202162021720218202192022020221202222022320224202252022620227202282022920230202312023220233202342023520236202372023820239202402024120242202432024420245202462024720248202492025020251202522025320254202552025620257202582025920260202612026220263202642026520266202672026820269202702027120272202732027420275202762027720278202792028020281202822028320284202852028620287202882028920290202912029220293202942029520296202972029820299203002030120302203032030420305203062030720308203092031020311203122031320314203152031620317203182031920320203212032220323203242032520326203272032820329203302033120332203332033420335203362033720338203392034020341203422034320344203452034620347203482034920350203512035220353203542035520356203572035820359203602036120362203632036420365203662036720368203692037020371203722037320374203752037620377203782037920380203812038220383203842038520386203872038820389203902039120392203932039420395203962039720398203992040020401204022040320404204052040620407204082040920410204112041220413204142041520416204172041820419204202042120422204232042420425204262042720428204292043020431204322043320434204352043620437204382043920440204412044220443204442044520446204472044820449204502045120452204532045420455204562045720458204592046020461204622046320464204652046620467204682046920470204712047220473204742047520476204772047820479204802048120482204832048420485204862048720488204892049020491204922049320494204952049620497204982049920500205012050220503205042050520506205072050820509205102051120512205132051420515205162051720518205192052020521205222052320524205252052620527205282052920530205312053220533205342053520536205372053820539205402054120542205432054420545205462054720548205492055020551205522055320554205552055620557205582055920560205612056220563205642056520566205672056820569205702057120572205732057420575205762057720578205792058020581205822058320584205852058620587205882058920590205912059220593205942059520596205972059820599206002060120602206032060420605206062060720608206092061020611206122061320614206152061620617206182061920620206212062220623206242062520626206272062820629206302063120632206332063420635206362063720638206392064020641206422064320644206452064620647206482064920650206512065220653206542065520656206572065820659206602066120662206632066420665206662066720668206692067020671206722067320674206752067620677206782067920680206812068220683206842068520686206872068820689206902069120692206932069420695206962069720698206992070020701207022070320704207052070620707207082070920710207112071220713207142071520716207172071820719207202072120722207232072420725207262072720728207292073020731207322073320734207352073620737207382073920740207412074220743207442074520746207472074820749207502075120752207532075420755207562075720758207592076020761207622076320764207652076620767207682076920770207712077220773207742077520776207772077820779207802078120782207832078420785207862078720788207892079020791207922079320794207952079620797207982079920800208012080220803208042080520806208072080820809208102081120812208132081420815208162081720818208192082020821208222082320824208252082620827208282082920830208312083220833208342083520836208372083820839208402084120842208432084420845208462084720848208492085020851208522085320854208552085620857208582085920860208612086220863208642086520866208672086820869208702087120872208732087420875208762087720878208792088020881208822088320884208852088620887208882088920890208912089220893208942089520896208972089820899209002090120902209032090420905209062090720908209092091020911209122091320914209152091620917209182091920920209212092220923209242092520926209272092820929209302093120932209332093420935209362093720938209392094020941209422094320944209452094620947209482094920950209512095220953209542095520956209572095820959209602096120962209632096420965209662096720968209692097020971209722097320974209752097620977209782097920980209812098220983209842098520986209872098820989209902099120992209932099420995209962099720998209992100021001210022100321004210052100621007210082100921010210112101221013210142101521016210172101821019210202102121022210232102421025210262102721028210292103021031210322103321034210352103621037210382103921040210412104221043210442104521046210472104821049210502105121052210532105421055210562105721058210592106021061210622106321064210652106621067210682106921070210712107221073210742107521076210772107821079210802108121082210832108421085210862108721088210892109021091210922109321094210952109621097210982109921100211012110221103211042110521106211072110821109211102111121112211132111421115211162111721118211192112021121211222112321124211252112621127211282112921130211312113221133211342113521136211372113821139211402114121142211432114421145211462114721148211492115021151211522115321154211552115621157211582115921160211612116221163211642116521166211672116821169211702117121172211732117421175211762117721178211792118021181211822118321184211852118621187211882118921190211912119221193211942119521196211972119821199212002120121202212032120421205212062120721208212092121021211212122121321214212152121621217212182121921220212212122221223212242122521226212272122821229212302123121232212332123421235212362123721238212392124021241212422124321244212452124621247212482124921250212512125221253212542125521256212572125821259212602126121262212632126421265212662126721268212692127021271212722127321274212752127621277212782127921280212812128221283212842128521286212872128821289212902129121292212932129421295212962129721298212992130021301213022130321304213052130621307213082130921310213112131221313213142131521316213172131821319213202132121322213232132421325213262132721328213292133021331213322133321334213352133621337213382133921340213412134221343213442134521346213472134821349213502135121352213532135421355213562135721358213592136021361213622136321364213652136621367213682136921370213712137221373213742137521376213772137821379213802138121382213832138421385213862138721388213892139021391213922139321394213952139621397213982139921400214012140221403214042140521406214072140821409214102141121412214132141421415214162141721418214192142021421214222142321424214252142621427214282142921430214312143221433214342143521436214372143821439214402144121442214432144421445214462144721448214492145021451214522145321454214552145621457214582145921460214612146221463214642146521466214672146821469214702147121472214732147421475214762147721478214792148021481214822148321484214852148621487214882148921490214912149221493214942149521496214972149821499215002150121502215032150421505215062150721508215092151021511215122151321514215152151621517215182151921520215212152221523215242152521526215272152821529215302153121532215332153421535215362153721538215392154021541215422154321544215452154621547215482154921550215512155221553215542155521556215572155821559215602156121562215632156421565215662156721568215692157021571215722157321574215752157621577215782157921580215812158221583215842158521586215872158821589215902159121592215932159421595215962159721598215992160021601216022160321604216052160621607216082160921610216112161221613216142161521616216172161821619216202162121622216232162421625216262162721628216292163021631216322163321634216352163621637216382163921640216412164221643216442164521646216472164821649216502165121652216532165421655216562165721658216592166021661216622166321664216652166621667216682166921670216712167221673216742167521676216772167821679216802168121682216832168421685216862168721688216892169021691216922169321694216952169621697216982169921700217012170221703217042170521706217072170821709217102171121712217132171421715217162171721718217192172021721217222172321724217252172621727217282172921730217312173221733217342173521736217372173821739217402174121742217432174421745217462174721748217492175021751217522175321754217552175621757217582175921760217612176221763217642176521766217672176821769217702177121772217732177421775217762177721778217792178021781217822178321784217852178621787217882178921790217912179221793217942179521796217972179821799218002180121802218032180421805218062180721808218092181021811218122181321814218152181621817218182181921820218212182221823218242182521826218272182821829218302183121832218332183421835218362183721838218392184021841218422184321844218452184621847218482184921850218512185221853218542185521856218572185821859218602186121862218632186421865218662186721868218692187021871218722187321874218752187621877218782187921880218812188221883218842188521886218872188821889218902189121892218932189421895218962189721898218992190021901219022190321904219052190621907219082190921910219112191221913219142191521916219172191821919219202192121922219232192421925219262192721928219292193021931219322193321934219352193621937219382193921940219412194221943219442194521946219472194821949219502195121952219532195421955219562195721958219592196021961219622196321964219652196621967219682196921970219712197221973219742197521976219772197821979219802198121982219832198421985219862198721988219892199021991219922199321994219952199621997219982199922000220012200222003220042200522006220072200822009220102201122012220132201422015220162201722018220192202022021220222202322024220252202622027220282202922030220312203222033220342203522036220372203822039220402204122042220432204422045220462204722048220492205022051220522205322054220552205622057220582205922060220612206222063220642206522066220672206822069220702207122072220732207422075220762207722078220792208022081220822208322084220852208622087220882208922090220912209222093220942209522096220972209822099221002210122102221032210422105221062210722108221092211022111221122211322114221152211622117221182211922120221212212222123221242212522126221272212822129221302213122132221332213422135221362213722138221392214022141221422214322144221452214622147221482214922150221512215222153221542215522156221572215822159221602216122162221632216422165221662216722168221692217022171221722217322174221752217622177221782217922180221812218222183221842218522186221872218822189221902219122192221932219422195221962219722198221992220022201222022220322204222052220622207222082220922210222112221222213222142221522216222172221822219222202222122222222232222422225222262222722228222292223022231222322223322234222352223622237222382223922240222412224222243222442224522246222472224822249222502225122252222532225422255222562225722258222592226022261222622226322264222652226622267222682226922270222712227222273222742227522276222772227822279222802228122282222832228422285222862228722288222892229022291222922229322294222952229622297222982229922300223012230222303223042230522306223072230822309223102231122312223132231422315223162231722318223192232022321223222232322324223252232622327223282232922330223312233222333223342233522336223372233822339223402234122342223432234422345223462234722348223492235022351223522235322354223552235622357223582235922360223612236222363223642236522366223672236822369223702237122372223732237422375223762237722378223792238022381223822238322384223852238622387223882238922390223912239222393223942239522396223972239822399224002240122402224032240422405224062240722408224092241022411224122241322414224152241622417224182241922420224212242222423224242242522426224272242822429224302243122432224332243422435224362243722438224392244022441224422244322444224452244622447224482244922450224512245222453224542245522456224572245822459224602246122462224632246422465224662246722468224692247022471224722247322474224752247622477224782247922480224812248222483224842248522486224872248822489224902249122492224932249422495224962249722498224992250022501225022250322504225052250622507225082250922510225112251222513225142251522516225172251822519225202252122522225232252422525225262252722528225292253022531225322253322534225352253622537225382253922540225412254222543225442254522546225472254822549225502255122552225532255422555225562255722558225592256022561225622256322564225652256622567225682256922570225712257222573225742257522576225772257822579225802258122582225832258422585225862258722588225892259022591225922259322594225952259622597225982259922600226012260222603226042260522606226072260822609226102261122612226132261422615226162261722618226192262022621226222262322624226252262622627226282262922630226312263222633226342263522636226372263822639226402264122642226432264422645226462264722648226492265022651226522265322654226552265622657226582265922660226612266222663226642266522666226672266822669226702267122672226732267422675226762267722678226792268022681226822268322684226852268622687226882268922690226912269222693226942269522696226972269822699227002270122702227032270422705227062270722708227092271022711227122271322714227152271622717227182271922720227212272222723227242272522726227272272822729227302273122732227332273422735227362273722738227392274022741227422274322744227452274622747227482274922750227512275222753227542275522756227572275822759227602276122762227632276422765227662276722768227692277022771227722277322774227752277622777227782277922780227812278222783227842278522786227872278822789227902279122792227932279422795227962279722798227992280022801228022280322804228052280622807228082280922810228112281222813228142281522816228172281822819228202282122822228232282422825228262282722828228292283022831228322283322834228352283622837228382283922840228412284222843228442284522846228472284822849228502285122852228532285422855228562285722858228592286022861228622286322864228652286622867228682286922870228712287222873228742287522876228772287822879228802288122882228832288422885228862288722888228892289022891228922289322894228952289622897228982289922900229012290222903229042290522906229072290822909229102291122912229132291422915229162291722918229192292022921229222292322924229252292622927229282292922930229312293222933229342293522936229372293822939229402294122942229432294422945229462294722948229492295022951229522295322954229552295622957229582295922960229612296222963229642296522966229672296822969229702297122972229732297422975229762297722978229792298022981229822298322984229852298622987229882298922990229912299222993229942299522996229972299822999230002300123002230032300423005230062300723008230092301023011230122301323014230152301623017230182301923020230212302223023230242302523026230272302823029230302303123032230332303423035230362303723038230392304023041230422304323044230452304623047230482304923050230512305223053230542305523056230572305823059230602306123062230632306423065230662306723068230692307023071230722307323074230752307623077230782307923080230812308223083230842308523086230872308823089230902309123092230932309423095230962309723098230992310023101231022310323104231052310623107231082310923110231112311223113231142311523116231172311823119231202312123122231232312423125231262312723128231292313023131231322313323134231352313623137231382313923140231412314223143231442314523146231472314823149231502315123152231532315423155231562315723158231592316023161231622316323164231652316623167231682316923170231712317223173231742317523176231772317823179231802318123182231832318423185231862318723188231892319023191231922319323194231952319623197231982319923200232012320223203232042320523206232072320823209232102321123212232132321423215232162321723218232192322023221232222322323224232252322623227232282322923230232312323223233232342323523236232372323823239232402324123242232432324423245232462324723248232492325023251232522325323254232552325623257232582325923260232612326223263232642326523266232672326823269232702327123272232732327423275232762327723278232792328023281232822328323284232852328623287232882328923290232912329223293232942329523296232972329823299233002330123302233032330423305233062330723308233092331023311233122331323314233152331623317233182331923320233212332223323233242332523326233272332823329233302333123332233332333423335233362333723338233392334023341233422334323344233452334623347233482334923350233512335223353233542335523356233572335823359233602336123362233632336423365233662336723368233692337023371233722337323374233752337623377233782337923380233812338223383233842338523386233872338823389233902339123392233932339423395233962339723398233992340023401234022340323404234052340623407234082340923410234112341223413234142341523416234172341823419234202342123422234232342423425234262342723428234292343023431234322343323434234352343623437234382343923440234412344223443234442344523446234472344823449234502345123452234532345423455234562345723458234592346023461234622346323464234652346623467234682346923470234712347223473234742347523476234772347823479234802348123482234832348423485234862348723488234892349023491234922349323494234952349623497234982349923500235012350223503235042350523506235072350823509235102351123512235132351423515235162351723518235192352023521235222352323524235252352623527235282352923530235312353223533235342353523536235372353823539235402354123542235432354423545235462354723548235492355023551235522355323554235552355623557235582355923560235612356223563235642356523566235672356823569235702357123572235732357423575235762357723578235792358023581235822358323584235852358623587235882358923590235912359223593235942359523596235972359823599236002360123602236032360423605236062360723608236092361023611236122361323614236152361623617236182361923620236212362223623236242362523626236272362823629236302363123632236332363423635236362363723638236392364023641236422364323644236452364623647236482364923650236512365223653236542365523656236572365823659236602366123662236632366423665236662366723668236692367023671236722367323674236752367623677236782367923680236812368223683236842368523686236872368823689236902369123692236932369423695236962369723698236992370023701237022370323704237052370623707237082370923710237112371223713237142371523716237172371823719237202372123722237232372423725237262372723728237292373023731237322373323734237352373623737237382373923740237412374223743237442374523746237472374823749237502375123752237532375423755237562375723758237592376023761237622376323764237652376623767237682376923770237712377223773237742377523776237772377823779237802378123782237832378423785237862378723788237892379023791237922379323794237952379623797237982379923800238012380223803238042380523806238072380823809238102381123812238132381423815238162381723818238192382023821238222382323824238252382623827238282382923830238312383223833238342383523836238372383823839238402384123842238432384423845238462384723848238492385023851238522385323854238552385623857238582385923860238612386223863238642386523866238672386823869238702387123872238732387423875238762387723878238792388023881238822388323884238852388623887238882388923890238912389223893238942389523896238972389823899239002390123902239032390423905239062390723908239092391023911239122391323914239152391623917239182391923920239212392223923239242392523926239272392823929239302393123932239332393423935239362393723938239392394023941239422394323944239452394623947239482394923950239512395223953239542395523956239572395823959239602396123962239632396423965239662396723968239692397023971239722397323974239752397623977239782397923980239812398223983239842398523986239872398823989239902399123992239932399423995239962399723998239992400024001240022400324004240052400624007240082400924010240112401224013240142401524016240172401824019240202402124022240232402424025240262402724028240292403024031240322403324034240352403624037240382403924040240412404224043240442404524046240472404824049240502405124052240532405424055240562405724058240592406024061240622406324064240652406624067240682406924070240712407224073240742407524076240772407824079240802408124082240832408424085240862408724088240892409024091240922409324094240952409624097240982409924100241012410224103241042410524106241072410824109241102411124112241132411424115241162411724118241192412024121241222412324124241252412624127241282412924130241312413224133241342413524136241372413824139241402414124142241432414424145241462414724148241492415024151241522415324154241552415624157241582415924160241612416224163241642416524166241672416824169241702417124172241732417424175241762417724178241792418024181241822418324184241852418624187241882418924190241912419224193241942419524196241972419824199242002420124202242032420424205242062420724208242092421024211242122421324214242152421624217242182421924220242212422224223242242422524226242272422824229242302423124232242332423424235242362423724238242392424024241242422424324244242452424624247242482424924250242512425224253242542425524256242572425824259242602426124262242632426424265242662426724268242692427024271242722427324274242752427624277242782427924280242812428224283242842428524286242872428824289242902429124292242932429424295242962429724298242992430024301243022430324304243052430624307243082430924310243112431224313243142431524316243172431824319243202432124322243232432424325243262432724328243292433024331243322433324334243352433624337243382433924340243412434224343243442434524346243472434824349243502435124352243532435424355243562435724358243592436024361243622436324364243652436624367243682436924370243712437224373243742437524376243772437824379243802438124382243832438424385243862438724388243892439024391243922439324394243952439624397243982439924400244012440224403244042440524406244072440824409244102441124412244132441424415244162441724418244192442024421244222442324424244252442624427244282442924430244312443224433244342443524436244372443824439244402444124442244432444424445244462444724448244492445024451244522445324454244552445624457244582445924460244612446224463244642446524466244672446824469244702447124472244732447424475244762447724478244792448024481244822448324484244852448624487244882448924490244912449224493244942449524496244972449824499245002450124502245032450424505245062450724508245092451024511245122451324514245152451624517245182451924520245212452224523245242452524526245272452824529245302453124532245332453424535245362453724538245392454024541245422454324544245452454624547245482454924550245512455224553245542455524556245572455824559245602456124562245632456424565245662456724568245692457024571245722457324574245752457624577245782457924580245812458224583245842458524586245872458824589245902459124592245932459424595245962459724598245992460024601246022460324604246052460624607246082460924610246112461224613246142461524616246172461824619246202462124622246232462424625246262462724628246292463024631246322463324634246352463624637246382463924640246412464224643246442464524646246472464824649246502465124652246532465424655246562465724658246592466024661246622466324664246652466624667246682466924670246712467224673246742467524676246772467824679246802468124682246832468424685246862468724688246892469024691246922469324694246952469624697246982469924700247012470224703247042470524706247072470824709247102471124712247132471424715247162471724718247192472024721247222472324724247252472624727247282472924730247312473224733247342473524736247372473824739247402474124742247432474424745247462474724748247492475024751247522475324754247552475624757247582475924760247612476224763247642476524766247672476824769247702477124772247732477424775247762477724778247792478024781247822478324784247852478624787247882478924790247912479224793247942479524796247972479824799248002480124802248032480424805248062480724808248092481024811248122481324814248152481624817248182481924820248212482224823248242482524826248272482824829248302483124832248332483424835248362483724838248392484024841248422484324844248452484624847248482484924850248512485224853248542485524856248572485824859248602486124862248632486424865248662486724868248692487024871248722487324874248752487624877248782487924880248812488224883248842488524886248872488824889248902489124892248932489424895248962489724898248992490024901249022490324904249052490624907249082490924910249112491224913249142491524916249172491824919249202492124922249232492424925249262492724928249292493024931249322493324934249352493624937249382493924940249412494224943249442494524946249472494824949249502495124952249532495424955249562495724958249592496024961249622496324964249652496624967249682496924970249712497224973249742497524976249772497824979249802498124982249832498424985249862498724988249892499024991249922499324994249952499624997249982499925000250012500225003250042500525006250072500825009250102501125012250132501425015250162501725018250192502025021250222502325024250252502625027250282502925030250312503225033250342503525036250372503825039250402504125042250432504425045250462504725048250492505025051250522505325054250552505625057250582505925060250612506225063250642506525066250672506825069250702507125072250732507425075250762507725078250792508025081250822508325084250852508625087250882508925090250912509225093250942509525096250972509825099251002510125102251032510425105251062510725108251092511025111251122511325114251152511625117251182511925120251212512225123251242512525126251272512825129251302513125132251332513425135251362513725138251392514025141251422514325144251452514625147251482514925150251512515225153251542515525156251572515825159251602516125162251632516425165251662516725168251692517025171251722517325174251752517625177251782517925180251812518225183251842518525186251872518825189251902519125192251932519425195251962519725198251992520025201252022520325204252052520625207252082520925210252112521225213252142521525216252172521825219252202522125222252232522425225252262522725228252292523025231252322523325234252352523625237252382523925240252412524225243252442524525246252472524825249252502525125252252532525425255252562525725258252592526025261252622526325264252652526625267252682526925270252712527225273252742527525276252772527825279252802528125282252832528425285252862528725288252892529025291252922529325294252952529625297252982529925300253012530225303253042530525306253072530825309253102531125312253132531425315253162531725318253192532025321253222532325324253252532625327253282532925330253312533225333253342533525336253372533825339253402534125342253432534425345253462534725348253492535025351253522535325354253552535625357253582535925360253612536225363253642536525366253672536825369253702537125372253732537425375253762537725378253792538025381253822538325384253852538625387253882538925390253912539225393253942539525396253972539825399254002540125402254032540425405254062540725408254092541025411254122541325414254152541625417254182541925420254212542225423254242542525426254272542825429254302543125432254332543425435254362543725438254392544025441254422544325444254452544625447254482544925450254512545225453254542545525456254572545825459254602546125462254632546425465254662546725468254692547025471254722547325474254752547625477254782547925480254812548225483254842548525486254872548825489254902549125492254932549425495254962549725498254992550025501255022550325504255052550625507255082550925510255112551225513255142551525516255172551825519255202552125522255232552425525255262552725528255292553025531255322553325534255352553625537255382553925540255412554225543255442554525546255472554825549255502555125552255532555425555255562555725558255592556025561255622556325564255652556625567255682556925570255712557225573255742557525576255772557825579255802558125582255832558425585255862558725588255892559025591255922559325594255952559625597255982559925600256012560225603256042560525606256072560825609256102561125612256132561425615256162561725618256192562025621256222562325624256252562625627256282562925630256312563225633256342563525636256372563825639256402564125642256432564425645256462564725648256492565025651256522565325654256552565625657256582565925660256612566225663256642566525666256672566825669256702567125672256732567425675256762567725678256792568025681256822568325684256852568625687256882568925690256912569225693256942569525696256972569825699257002570125702257032570425705257062570725708257092571025711257122571325714257152571625717257182571925720257212572225723257242572525726257272572825729257302573125732257332573425735257362573725738257392574025741257422574325744257452574625747257482574925750257512575225753257542575525756257572575825759257602576125762257632576425765257662576725768257692577025771257722577325774257752577625777257782577925780257812578225783257842578525786257872578825789257902579125792257932579425795257962579725798257992580025801258022580325804258052580625807258082580925810258112581225813258142581525816258172581825819258202582125822258232582425825258262582725828258292583025831258322583325834258352583625837258382583925840258412584225843258442584525846258472584825849258502585125852258532585425855258562585725858258592586025861258622586325864258652586625867258682586925870258712587225873258742587525876258772587825879258802588125882258832588425885258862588725888258892589025891258922589325894258952589625897258982589925900259012590225903259042590525906259072590825909259102591125912259132591425915259162591725918259192592025921259222592325924259252592625927259282592925930259312593225933259342593525936259372593825939259402594125942259432594425945259462594725948259492595025951259522595325954259552595625957259582595925960259612596225963259642596525966259672596825969259702597125972259732597425975259762597725978259792598025981259822598325984259852598625987259882598925990259912599225993259942599525996259972599825999260002600126002260032600426005260062600726008260092601026011260122601326014260152601626017260182601926020260212602226023260242602526026260272602826029260302603126032260332603426035260362603726038260392604026041260422604326044260452604626047260482604926050260512605226053260542605526056260572605826059260602606126062260632606426065260662606726068260692607026071260722607326074260752607626077260782607926080260812608226083260842608526086260872608826089260902609126092260932609426095260962609726098260992610026101261022610326104261052610626107261082610926110261112611226113261142611526116261172611826119261202612126122261232612426125261262612726128261292613026131261322613326134261352613626137261382613926140261412614226143261442614526146261472614826149261502615126152261532615426155261562615726158261592616026161261622616326164261652616626167261682616926170261712617226173261742617526176261772617826179261802618126182261832618426185261862618726188261892619026191261922619326194261952619626197261982619926200262012620226203262042620526206262072620826209262102621126212262132621426215262162621726218262192622026221262222622326224262252622626227262282622926230262312623226233262342623526236262372623826239262402624126242262432624426245262462624726248262492625026251262522625326254262552625626257262582625926260262612626226263262642626526266262672626826269262702627126272262732627426275262762627726278262792628026281262822628326284262852628626287262882628926290262912629226293262942629526296262972629826299263002630126302263032630426305263062630726308263092631026311263122631326314263152631626317263182631926320263212632226323263242632526326263272632826329263302633126332263332633426335263362633726338263392634026341263422634326344263452634626347263482634926350263512635226353263542635526356263572635826359263602636126362263632636426365263662636726368263692637026371263722637326374263752637626377263782637926380263812638226383263842638526386263872638826389263902639126392263932639426395263962639726398263992640026401264022640326404264052640626407264082640926410264112641226413264142641526416264172641826419264202642126422264232642426425264262642726428264292643026431264322643326434264352643626437264382643926440264412644226443264442644526446264472644826449264502645126452264532645426455264562645726458264592646026461264622646326464264652646626467264682646926470264712647226473264742647526476264772647826479264802648126482264832648426485264862648726488264892649026491264922649326494264952649626497264982649926500265012650226503265042650526506265072650826509265102651126512265132651426515265162651726518265192652026521265222652326524265252652626527265282652926530265312653226533265342653526536265372653826539265402654126542265432654426545265462654726548265492655026551265522655326554265552655626557265582655926560265612656226563265642656526566265672656826569265702657126572265732657426575265762657726578265792658026581265822658326584265852658626587265882658926590265912659226593265942659526596265972659826599266002660126602266032660426605266062660726608266092661026611266122661326614266152661626617266182661926620266212662226623266242662526626266272662826629266302663126632266332663426635266362663726638266392664026641266422664326644266452664626647266482664926650266512665226653266542665526656266572665826659266602666126662266632666426665266662666726668266692667026671266722667326674266752667626677266782667926680266812668226683266842668526686266872668826689266902669126692266932669426695266962669726698266992670026701267022670326704267052670626707267082670926710267112671226713267142671526716267172671826719267202672126722267232672426725267262672726728267292673026731267322673326734267352673626737267382673926740267412674226743267442674526746267472674826749267502675126752267532675426755267562675726758267592676026761267622676326764267652676626767267682676926770267712677226773267742677526776267772677826779267802678126782267832678426785267862678726788267892679026791267922679326794267952679626797267982679926800268012680226803268042680526806268072680826809268102681126812268132681426815268162681726818268192682026821268222682326824268252682626827268282682926830268312683226833268342683526836268372683826839268402684126842268432684426845268462684726848268492685026851268522685326854268552685626857268582685926860268612686226863268642686526866268672686826869268702687126872268732687426875268762687726878268792688026881268822688326884268852688626887268882688926890268912689226893268942689526896268972689826899269002690126902269032690426905269062690726908269092691026911269122691326914269152691626917269182691926920269212692226923269242692526926269272692826929269302693126932269332693426935269362693726938269392694026941269422694326944269452694626947269482694926950269512695226953269542695526956269572695826959269602696126962269632696426965269662696726968269692697026971269722697326974269752697626977269782697926980269812698226983269842698526986269872698826989269902699126992269932699426995269962699726998269992700027001270022700327004270052700627007270082700927010270112701227013270142701527016270172701827019270202702127022270232702427025270262702727028270292703027031270322703327034270352703627037270382703927040270412704227043270442704527046270472704827049270502705127052270532705427055270562705727058270592706027061270622706327064270652706627067270682706927070270712707227073270742707527076270772707827079270802708127082270832708427085270862708727088270892709027091270922709327094270952709627097270982709927100271012710227103271042710527106271072710827109271102711127112271132711427115271162711727118271192712027121271222712327124271252712627127271282712927130271312713227133271342713527136271372713827139271402714127142271432714427145271462714727148271492715027151271522715327154271552715627157271582715927160271612716227163271642716527166271672716827169271702717127172271732717427175271762717727178271792718027181271822718327184271852718627187271882718927190271912719227193271942719527196271972719827199272002720127202272032720427205272062720727208272092721027211272122721327214272152721627217272182721927220272212722227223272242722527226272272722827229272302723127232272332723427235272362723727238272392724027241272422724327244272452724627247272482724927250272512725227253272542725527256272572725827259272602726127262272632726427265272662726727268272692727027271272722727327274272752727627277272782727927280272812728227283272842728527286272872728827289272902729127292272932729427295272962729727298272992730027301273022730327304273052730627307273082730927310273112731227313273142731527316273172731827319273202732127322273232732427325273262732727328273292733027331273322733327334273352733627337273382733927340273412734227343273442734527346273472734827349273502735127352273532735427355273562735727358273592736027361273622736327364273652736627367273682736927370273712737227373273742737527376273772737827379273802738127382273832738427385273862738727388273892739027391273922739327394273952739627397273982739927400274012740227403274042740527406274072740827409274102741127412274132741427415274162741727418274192742027421274222742327424274252742627427274282742927430274312743227433274342743527436274372743827439274402744127442274432744427445274462744727448274492745027451274522745327454274552745627457274582745927460274612746227463274642746527466274672746827469274702747127472274732747427475274762747727478274792748027481274822748327484274852748627487274882748927490274912749227493274942749527496274972749827499275002750127502275032750427505275062750727508275092751027511275122751327514275152751627517275182751927520275212752227523275242752527526275272752827529275302753127532275332753427535275362753727538275392754027541275422754327544275452754627547275482754927550275512755227553275542755527556275572755827559275602756127562275632756427565275662756727568275692757027571275722757327574275752757627577275782757927580275812758227583275842758527586275872758827589275902759127592275932759427595275962759727598275992760027601276022760327604276052760627607276082760927610276112761227613276142761527616276172761827619276202762127622276232762427625276262762727628276292763027631276322763327634276352763627637276382763927640276412764227643276442764527646276472764827649276502765127652276532765427655276562765727658276592766027661276622766327664276652766627667276682766927670276712767227673276742767527676276772767827679276802768127682276832768427685276862768727688276892769027691276922769327694276952769627697276982769927700277012770227703277042770527706277072770827709277102771127712277132771427715277162771727718277192772027721277222772327724277252772627727277282772927730277312773227733277342773527736277372773827739277402774127742277432774427745277462774727748277492775027751277522775327754277552775627757277582775927760277612776227763277642776527766277672776827769277702777127772277732777427775277762777727778277792778027781277822778327784277852778627787277882778927790277912779227793277942779527796277972779827799278002780127802278032780427805278062780727808278092781027811278122781327814278152781627817278182781927820278212782227823278242782527826278272782827829278302783127832278332783427835278362783727838278392784027841278422784327844278452784627847278482784927850278512785227853278542785527856278572785827859278602786127862278632786427865278662786727868278692787027871278722787327874278752787627877278782787927880278812788227883278842788527886278872788827889278902789127892278932789427895278962789727898278992790027901279022790327904279052790627907279082790927910279112791227913279142791527916279172791827919279202792127922279232792427925279262792727928279292793027931279322793327934279352793627937279382793927940279412794227943279442794527946279472794827949279502795127952279532795427955279562795727958279592796027961279622796327964279652796627967279682796927970279712797227973279742797527976279772797827979279802798127982279832798427985279862798727988279892799027991279922799327994279952799627997279982799928000280012800228003280042800528006280072800828009280102801128012280132801428015280162801728018280192802028021280222802328024280252802628027280282802928030280312803228033280342803528036280372803828039280402804128042280432804428045280462804728048280492805028051280522805328054280552805628057280582805928060280612806228063280642806528066280672806828069280702807128072280732807428075280762807728078280792808028081280822808328084280852808628087280882808928090280912809228093280942809528096280972809828099281002810128102281032810428105281062810728108281092811028111281122811328114281152811628117281182811928120281212812228123281242812528126281272812828129281302813128132281332813428135281362813728138281392814028141281422814328144281452814628147281482814928150281512815228153281542815528156281572815828159281602816128162281632816428165281662816728168281692817028171281722817328174281752817628177281782817928180281812818228183281842818528186281872818828189281902819128192281932819428195281962819728198281992820028201282022820328204282052820628207282082820928210282112821228213282142821528216282172821828219282202822128222282232822428225282262822728228282292823028231282322823328234282352823628237282382823928240282412824228243282442824528246282472824828249282502825128252282532825428255282562825728258282592826028261282622826328264282652826628267282682826928270282712827228273282742827528276282772827828279282802828128282282832828428285282862828728288282892829028291282922829328294282952829628297282982829928300283012830228303283042830528306283072830828309283102831128312283132831428315283162831728318283192832028321283222832328324283252832628327283282832928330283312833228333283342833528336283372833828339283402834128342283432834428345283462834728348283492835028351283522835328354283552835628357283582835928360283612836228363283642836528366283672836828369283702837128372283732837428375283762837728378283792838028381283822838328384283852838628387283882838928390283912839228393283942839528396283972839828399284002840128402284032840428405284062840728408284092841028411284122841328414284152841628417284182841928420284212842228423284242842528426284272842828429284302843128432284332843428435284362843728438284392844028441284422844328444284452844628447284482844928450284512845228453284542845528456284572845828459284602846128462284632846428465284662846728468284692847028471284722847328474284752847628477284782847928480284812848228483284842848528486284872848828489284902849128492284932849428495284962849728498284992850028501285022850328504285052850628507285082850928510285112851228513285142851528516285172851828519285202852128522285232852428525285262852728528285292853028531285322853328534285352853628537285382853928540285412854228543285442854528546285472854828549285502855128552285532855428555285562855728558285592856028561285622856328564285652856628567285682856928570285712857228573285742857528576285772857828579285802858128582285832858428585285862858728588285892859028591285922859328594285952859628597285982859928600286012860228603286042860528606286072860828609286102861128612286132861428615286162861728618286192862028621286222862328624286252862628627286282862928630286312863228633286342863528636286372863828639286402864128642286432864428645286462864728648286492865028651286522865328654286552865628657286582865928660286612866228663286642866528666286672866828669286702867128672286732867428675286762867728678286792868028681286822868328684286852868628687286882868928690286912869228693286942869528696286972869828699287002870128702287032870428705287062870728708287092871028711287122871328714287152871628717287182871928720287212872228723287242872528726287272872828729287302873128732287332873428735287362873728738287392874028741287422874328744287452874628747287482874928750287512875228753287542875528756287572875828759287602876128762287632876428765287662876728768287692877028771287722877328774287752877628777287782877928780287812878228783287842878528786287872878828789287902879128792287932879428795287962879728798287992880028801288022880328804288052880628807288082880928810288112881228813288142881528816288172881828819288202882128822288232882428825288262882728828288292883028831288322883328834288352883628837288382883928840288412884228843288442884528846288472884828849288502885128852288532885428855288562885728858288592886028861288622886328864288652886628867288682886928870288712887228873288742887528876288772887828879288802888128882288832888428885288862888728888288892889028891288922889328894288952889628897288982889928900289012890228903289042890528906289072890828909289102891128912289132891428915289162891728918289192892028921289222892328924289252892628927289282892928930289312893228933289342893528936289372893828939289402894128942289432894428945289462894728948289492895028951289522895328954289552895628957289582895928960289612896228963289642896528966289672896828969289702897128972289732897428975289762897728978289792898028981289822898328984289852898628987289882898928990289912899228993289942899528996289972899828999290002900129002290032900429005290062900729008290092901029011290122901329014290152901629017290182901929020290212902229023290242902529026290272902829029290302903129032290332903429035290362903729038290392904029041290422904329044290452904629047290482904929050290512905229053290542905529056290572905829059290602906129062290632906429065290662906729068290692907029071290722907329074290752907629077290782907929080290812908229083290842908529086290872908829089290902909129092290932909429095290962909729098290992910029101291022910329104291052910629107291082910929110291112911229113291142911529116291172911829119291202912129122291232912429125291262912729128291292913029131291322913329134291352913629137291382913929140291412914229143291442914529146291472914829149291502915129152291532915429155291562915729158291592916029161291622916329164291652916629167291682916929170291712917229173291742917529176291772917829179291802918129182291832918429185291862918729188291892919029191291922919329194291952919629197291982919929200292012920229203292042920529206292072920829209292102921129212292132921429215292162921729218292192922029221292222922329224292252922629227292282922929230292312923229233292342923529236292372923829239292402924129242292432924429245292462924729248292492925029251292522925329254292552925629257292582925929260292612926229263292642926529266292672926829269292702927129272292732927429275292762927729278292792928029281292822928329284292852928629287292882928929290292912929229293292942929529296292972929829299293002930129302293032930429305293062930729308293092931029311293122931329314293152931629317293182931929320293212932229323293242932529326293272932829329293302933129332293332933429335293362933729338293392934029341293422934329344293452934629347293482934929350293512935229353293542935529356293572935829359293602936129362293632936429365293662936729368293692937029371293722937329374293752937629377293782937929380293812938229383293842938529386293872938829389293902939129392293932939429395293962939729398293992940029401294022940329404294052940629407294082940929410294112941229413294142941529416294172941829419294202942129422294232942429425294262942729428294292943029431294322943329434294352943629437294382943929440294412944229443294442944529446294472944829449294502945129452294532945429455294562945729458294592946029461294622946329464294652946629467294682946929470294712947229473294742947529476294772947829479294802948129482294832948429485294862948729488294892949029491294922949329494294952949629497294982949929500295012950229503295042950529506295072950829509295102951129512295132951429515295162951729518295192952029521295222952329524295252952629527295282952929530295312953229533295342953529536295372953829539295402954129542295432954429545295462954729548295492955029551295522955329554295552955629557295582955929560295612956229563295642956529566295672956829569295702957129572295732957429575295762957729578295792958029581295822958329584295852958629587295882958929590295912959229593295942959529596295972959829599296002960129602296032960429605296062960729608296092961029611296122961329614296152961629617296182961929620296212962229623296242962529626296272962829629296302963129632296332963429635296362963729638296392964029641296422964329644296452964629647296482964929650296512965229653296542965529656296572965829659296602966129662296632966429665296662966729668296692967029671296722967329674296752967629677296782967929680296812968229683296842968529686296872968829689296902969129692296932969429695296962969729698296992970029701297022970329704297052970629707297082970929710297112971229713297142971529716297172971829719297202972129722297232972429725297262972729728297292973029731297322973329734297352973629737297382973929740297412974229743297442974529746297472974829749297502975129752297532975429755297562975729758297592976029761297622976329764297652976629767297682976929770297712977229773297742977529776297772977829779297802978129782297832978429785297862978729788297892979029791297922979329794297952979629797297982979929800298012980229803298042980529806298072980829809298102981129812298132981429815298162981729818298192982029821298222982329824298252982629827298282982929830298312983229833298342983529836298372983829839298402984129842298432984429845298462984729848298492985029851298522985329854298552985629857298582985929860298612986229863298642986529866298672986829869298702987129872298732987429875298762987729878298792988029881298822988329884298852988629887298882988929890298912989229893298942989529896298972989829899299002990129902299032990429905299062990729908299092991029911299122991329914299152991629917299182991929920299212992229923299242992529926299272992829929299302993129932299332993429935299362993729938299392994029941299422994329944299452994629947299482994929950299512995229953299542995529956299572995829959299602996129962299632996429965299662996729968299692997029971299722997329974299752997629977299782997929980299812998229983299842998529986299872998829989299902999129992299932999429995299962999729998299993000030001300023000330004300053000630007300083000930010300113001230013300143001530016300173001830019300203002130022300233002430025300263002730028300293003030031300323003330034300353003630037300383003930040300413004230043300443004530046300473004830049300503005130052300533005430055300563005730058300593006030061300623006330064300653006630067300683006930070300713007230073300743007530076300773007830079300803008130082300833008430085300863008730088300893009030091300923009330094300953009630097300983009930100301013010230103301043010530106301073010830109301103011130112301133011430115301163011730118301193012030121301223012330124301253012630127301283012930130301313013230133301343013530136301373013830139301403014130142301433014430145301463014730148301493015030151301523015330154301553015630157301583015930160301613016230163301643016530166301673016830169301703017130172301733017430175301763017730178301793018030181301823018330184301853018630187301883018930190301913019230193301943019530196301973019830199302003020130202302033020430205302063020730208302093021030211302123021330214302153021630217302183021930220302213022230223302243022530226302273022830229302303023130232302333023430235302363023730238302393024030241302423024330244302453024630247302483024930250302513025230253302543025530256302573025830259302603026130262302633026430265302663026730268302693027030271302723027330274302753027630277302783027930280302813028230283302843028530286302873028830289302903029130292302933029430295302963029730298302993030030301303023030330304303053030630307303083030930310303113031230313303143031530316303173031830319303203032130322303233032430325303263032730328303293033030331303323033330334303353033630337303383033930340303413034230343303443034530346303473034830349303503035130352303533035430355303563035730358303593036030361303623036330364303653036630367303683036930370303713037230373303743037530376303773037830379303803038130382303833038430385303863038730388303893039030391303923039330394303953039630397303983039930400304013040230403304043040530406304073040830409304103041130412304133041430415304163041730418304193042030421304223042330424304253042630427304283042930430304313043230433304343043530436304373043830439304403044130442304433044430445304463044730448304493045030451304523045330454304553045630457304583045930460304613046230463304643046530466304673046830469304703047130472304733047430475304763047730478304793048030481304823048330484304853048630487304883048930490304913049230493304943049530496304973049830499305003050130502305033050430505305063050730508305093051030511305123051330514305153051630517305183051930520305213052230523305243052530526305273052830529305303053130532305333053430535305363053730538305393054030541305423054330544305453054630547305483054930550305513055230553305543055530556305573055830559305603056130562305633056430565305663056730568305693057030571305723057330574305753057630577305783057930580305813058230583305843058530586305873058830589305903059130592305933059430595305963059730598305993060030601306023060330604306053060630607306083060930610306113061230613306143061530616306173061830619306203062130622306233062430625306263062730628306293063030631306323063330634306353063630637306383063930640306413064230643306443064530646306473064830649306503065130652306533065430655306563065730658306593066030661306623066330664306653066630667306683066930670306713067230673306743067530676306773067830679306803068130682306833068430685306863068730688306893069030691306923069330694306953069630697306983069930700307013070230703307043070530706307073070830709307103071130712307133071430715307163071730718307193072030721307223072330724307253072630727307283072930730307313073230733307343073530736307373073830739307403074130742307433074430745307463074730748307493075030751307523075330754307553075630757307583075930760307613076230763307643076530766307673076830769307703077130772307733077430775307763077730778307793078030781307823078330784307853078630787307883078930790307913079230793307943079530796307973079830799308003080130802308033080430805308063080730808308093081030811308123081330814308153081630817308183081930820308213082230823308243082530826308273082830829308303083130832308333083430835308363083730838308393084030841308423084330844308453084630847308483084930850308513085230853308543085530856308573085830859308603086130862308633086430865308663086730868308693087030871308723087330874308753087630877308783087930880308813088230883308843088530886308873088830889308903089130892308933089430895308963089730898308993090030901309023090330904309053090630907309083090930910309113091230913309143091530916309173091830919309203092130922309233092430925309263092730928309293093030931309323093330934309353093630937309383093930940309413094230943309443094530946309473094830949309503095130952309533095430955309563095730958309593096030961309623096330964309653096630967309683096930970309713097230973309743097530976309773097830979309803098130982309833098430985309863098730988309893099030991309923099330994309953099630997309983099931000310013100231003310043100531006310073100831009310103101131012310133101431015310163101731018310193102031021310223102331024310253102631027310283102931030310313103231033310343103531036310373103831039310403104131042310433104431045310463104731048310493105031051310523105331054310553105631057310583105931060310613106231063310643106531066310673106831069310703107131072310733107431075310763107731078310793108031081310823108331084310853108631087310883108931090310913109231093310943109531096310973109831099311003110131102311033110431105311063110731108311093111031111311123111331114311153111631117311183111931120311213112231123311243112531126311273112831129311303113131132311333113431135311363113731138311393114031141311423114331144311453114631147311483114931150311513115231153311543115531156311573115831159311603116131162311633116431165311663116731168311693117031171311723117331174311753117631177311783117931180311813118231183311843118531186311873118831189311903119131192311933119431195311963119731198311993120031201312023120331204312053120631207312083120931210312113121231213312143121531216312173121831219312203122131222312233122431225312263122731228312293123031231312323123331234312353123631237312383123931240312413124231243312443124531246312473124831249312503125131252312533125431255312563125731258312593126031261312623126331264312653126631267312683126931270312713127231273312743127531276312773127831279312803128131282312833128431285312863128731288312893129031291312923129331294312953129631297312983129931300313013130231303313043130531306313073130831309313103131131312313133131431315313163131731318313193132031321313223132331324313253132631327313283132931330313313133231333313343133531336313373133831339313403134131342313433134431345313463134731348313493135031351313523135331354313553135631357313583135931360313613136231363313643136531366313673136831369313703137131372313733137431375313763137731378313793138031381313823138331384313853138631387313883138931390313913139231393313943139531396313973139831399314003140131402314033140431405314063140731408314093141031411314123141331414314153141631417314183141931420314213142231423314243142531426314273142831429314303143131432314333143431435314363143731438314393144031441314423144331444314453144631447314483144931450314513145231453314543145531456314573145831459314603146131462314633146431465314663146731468314693147031471314723147331474314753147631477314783147931480314813148231483314843148531486314873148831489314903149131492314933149431495314963149731498314993150031501315023150331504315053150631507315083150931510315113151231513315143151531516315173151831519315203152131522315233152431525315263152731528315293153031531315323153331534315353153631537315383153931540315413154231543315443154531546315473154831549315503155131552315533155431555315563155731558315593156031561315623156331564315653156631567315683156931570315713157231573315743157531576315773157831579315803158131582315833158431585315863158731588315893159031591315923159331594315953159631597315983159931600316013160231603316043160531606316073160831609316103161131612316133161431615316163161731618316193162031621316223162331624316253162631627316283162931630316313163231633316343163531636316373163831639316403164131642316433164431645316463164731648316493165031651316523165331654316553165631657316583165931660316613166231663316643166531666316673166831669316703167131672316733167431675316763167731678316793168031681316823168331684316853168631687316883168931690316913169231693316943169531696316973169831699317003170131702317033170431705317063170731708317093171031711317123171331714317153171631717317183171931720317213172231723317243172531726317273172831729317303173131732317333173431735317363173731738317393174031741317423174331744317453174631747317483174931750317513175231753317543175531756317573175831759317603176131762317633176431765317663176731768317693177031771317723177331774317753177631777317783177931780317813178231783317843178531786317873178831789317903179131792317933179431795317963179731798317993180031801318023180331804318053180631807318083180931810318113181231813318143181531816318173181831819318203182131822318233182431825318263182731828318293183031831318323183331834318353183631837318383183931840318413184231843318443184531846318473184831849318503185131852318533185431855318563185731858318593186031861318623186331864318653186631867318683186931870318713187231873318743187531876318773187831879318803188131882318833188431885318863188731888318893189031891318923189331894318953189631897318983189931900319013190231903319043190531906319073190831909319103191131912319133191431915319163191731918319193192031921319223192331924319253192631927319283192931930319313193231933319343193531936319373193831939319403194131942319433194431945319463194731948319493195031951319523195331954319553195631957319583195931960319613196231963319643196531966319673196831969319703197131972319733197431975319763197731978319793198031981319823198331984319853198631987319883198931990319913199231993319943199531996319973199831999320003200132002320033200432005320063200732008320093201032011320123201332014320153201632017320183201932020320213202232023320243202532026320273202832029320303203132032320333203432035320363203732038320393204032041320423204332044320453204632047320483204932050320513205232053320543205532056320573205832059320603206132062320633206432065320663206732068320693207032071320723207332074320753207632077320783207932080320813208232083320843208532086320873208832089320903209132092320933209432095320963209732098320993210032101321023210332104321053210632107321083210932110321113211232113321143211532116321173211832119321203212132122321233212432125321263212732128321293213032131321323213332134321353213632137321383213932140321413214232143321443214532146321473214832149321503215132152321533215432155321563215732158321593216032161321623216332164321653216632167321683216932170321713217232173321743217532176321773217832179321803218132182321833218432185321863218732188321893219032191321923219332194321953219632197321983219932200322013220232203322043220532206322073220832209322103221132212322133221432215322163221732218322193222032221322223222332224322253222632227322283222932230322313223232233322343223532236322373223832239322403224132242322433224432245322463224732248322493225032251322523225332254322553225632257322583225932260322613226232263322643226532266322673226832269322703227132272322733227432275322763227732278322793228032281322823228332284322853228632287322883228932290322913229232293322943229532296322973229832299323003230132302323033230432305323063230732308323093231032311323123231332314323153231632317323183231932320323213232232323323243232532326323273232832329323303233132332323333233432335323363233732338323393234032341323423234332344323453234632347323483234932350323513235232353323543235532356323573235832359323603236132362323633236432365323663236732368323693237032371323723237332374323753237632377323783237932380323813238232383323843238532386323873238832389323903239132392323933239432395323963239732398323993240032401324023240332404324053240632407324083240932410324113241232413324143241532416324173241832419324203242132422324233242432425324263242732428324293243032431324323243332434324353243632437324383243932440324413244232443324443244532446324473244832449324503245132452324533245432455324563245732458324593246032461324623246332464324653246632467324683246932470324713247232473324743247532476324773247832479324803248132482324833248432485324863248732488324893249032491324923249332494324953249632497324983249932500325013250232503325043250532506325073250832509325103251132512325133251432515325163251732518325193252032521325223252332524325253252632527325283252932530325313253232533325343253532536325373253832539325403254132542325433254432545325463254732548325493255032551325523255332554325553255632557325583255932560325613256232563325643256532566325673256832569325703257132572325733257432575325763257732578325793258032581325823258332584325853258632587325883258932590325913259232593325943259532596325973259832599326003260132602326033260432605326063260732608326093261032611326123261332614326153261632617326183261932620326213262232623326243262532626326273262832629326303263132632326333263432635326363263732638326393264032641326423264332644326453264632647326483264932650326513265232653326543265532656326573265832659326603266132662326633266432665326663266732668326693267032671326723267332674326753267632677326783267932680326813268232683326843268532686326873268832689326903269132692326933269432695326963269732698326993270032701327023270332704327053270632707327083270932710327113271232713327143271532716327173271832719327203272132722327233272432725327263272732728327293273032731327323273332734327353273632737327383273932740327413274232743327443274532746327473274832749327503275132752327533275432755327563275732758327593276032761327623276332764327653276632767327683276932770327713277232773327743277532776327773277832779327803278132782327833278432785327863278732788327893279032791327923279332794327953279632797327983279932800328013280232803328043280532806328073280832809328103281132812328133281432815328163281732818328193282032821328223282332824328253282632827328283282932830328313283232833328343283532836328373283832839328403284132842328433284432845328463284732848328493285032851328523285332854328553285632857328583285932860328613286232863328643286532866328673286832869328703287132872328733287432875328763287732878328793288032881328823288332884328853288632887328883288932890328913289232893328943289532896328973289832899329003290132902329033290432905329063290732908329093291032911329123291332914329153291632917329183291932920329213292232923329243292532926329273292832929329303293132932329333293432935329363293732938329393294032941329423294332944329453294632947329483294932950329513295232953329543295532956329573295832959329603296132962329633296432965329663296732968329693297032971329723297332974329753297632977329783297932980329813298232983329843298532986329873298832989329903299132992329933299432995329963299732998329993300033001330023300333004330053300633007330083300933010330113301233013330143301533016330173301833019330203302133022330233302433025330263302733028330293303033031330323303333034330353303633037330383303933040330413304233043330443304533046330473304833049330503305133052330533305433055330563305733058330593306033061330623306333064330653306633067330683306933070330713307233073330743307533076330773307833079330803308133082330833308433085330863308733088330893309033091330923309333094330953309633097330983309933100331013310233103331043310533106331073310833109331103311133112331133311433115331163311733118331193312033121331223312333124331253312633127331283312933130331313313233133331343313533136331373313833139331403314133142331433314433145331463314733148331493315033151331523315333154331553315633157331583315933160331613316233163331643316533166331673316833169331703317133172331733317433175331763317733178331793318033181331823318333184331853318633187331883318933190331913319233193331943319533196331973319833199332003320133202332033320433205332063320733208332093321033211332123321333214332153321633217332183321933220332213322233223332243322533226332273322833229332303323133232332333323433235332363323733238332393324033241332423324333244332453324633247332483324933250332513325233253332543325533256332573325833259332603326133262332633326433265332663326733268332693327033271332723327333274332753327633277332783327933280332813328233283332843328533286332873328833289332903329133292332933329433295332963329733298332993330033301333023330333304333053330633307333083330933310333113331233313333143331533316333173331833319333203332133322333233332433325333263332733328333293333033331333323333333334333353333633337333383333933340333413334233343333443334533346333473334833349333503335133352333533335433355333563335733358333593336033361333623336333364333653336633367333683336933370333713337233373333743337533376333773337833379333803338133382333833338433385333863338733388333893339033391333923339333394333953339633397333983339933400334013340233403334043340533406334073340833409334103341133412334133341433415334163341733418334193342033421334223342333424334253342633427334283342933430334313343233433334343343533436334373343833439334403344133442334433344433445334463344733448334493345033451334523345333454334553345633457334583345933460334613346233463334643346533466334673346833469334703347133472334733347433475334763347733478334793348033481334823348333484334853348633487334883348933490334913349233493334943349533496334973349833499335003350133502335033350433505335063350733508335093351033511335123351333514335153351633517335183351933520335213352233523335243352533526335273352833529335303353133532335333353433535335363353733538335393354033541 |
- # @generated by tools/pyi/gen_pyi.py from torch/_C/_VariableFunctions.pyi.in
- # mypy: disable-error-code="type-arg"
- # mypy: allow-untyped-defs
- # ruff: noqa: F401,PYI054
- from collections.abc import Sequence
- from types import EllipsisType
- from typing import Any, Callable, Literal, overload, TypeVar
- import torch
- from torch import (
- contiguous_format,
- Generator,
- inf,
- memory_format,
- strided,
- SymInt,
- Tensor,
- )
- from torch._prims_common import DeviceLikeType
- from torch.types import (
- _bool,
- _complex,
- _device,
- _dtype,
- _float,
- _int,
- _layout,
- _qscheme,
- _size,
- Device,
- Number,
- )
- __all__ = [
- "__and__",
- "__lshift__",
- "__or__",
- "__rshift__",
- "__xor__",
- "_adaptive_avg_pool2d",
- "_adaptive_avg_pool3d",
- "_add_batch_dim",
- "_add_relu",
- "_add_relu_",
- "_addmm_activation",
- "_aminmax",
- "_amp_foreach_non_finite_check_and_unscale_",
- "_amp_update_scale_",
- "_assert_async",
- "_assert_scalar",
- "_assert_tensor_metadata",
- "_batch_norm_impl_index",
- "_cast_Byte",
- "_cast_Char",
- "_cast_Double",
- "_cast_Float",
- "_cast_Half",
- "_cast_Int",
- "_cast_Long",
- "_cast_Short",
- "_choose_qparams_per_tensor",
- "_chunk_cat",
- "_coalesce",
- "_compute_linear_combination",
- "_conj",
- "_conj_copy",
- "_conj_physical",
- "_convert_indices_from_coo_to_csr",
- "_convert_indices_from_csr_to_coo",
- "_convert_weight_to_int4pack",
- "_convert_weight_to_int4pack_for_cpu",
- "_convolution",
- "_convolution_mode",
- "_copy_from",
- "_copy_from_and_resize",
- "_cslt_compress",
- "_cslt_sparse_mm",
- "_cslt_sparse_mm_search",
- "_ctc_loss",
- "_cudnn_ctc_loss",
- "_cudnn_init_dropout_state",
- "_cudnn_rnn",
- "_cudnn_rnn_flatten_weight",
- "_cufft_clear_plan_cache",
- "_cufft_get_plan_cache_max_size",
- "_cufft_get_plan_cache_size",
- "_cufft_set_plan_cache_max_size",
- "_cummax_helper",
- "_cummin_helper",
- "_debug_has_internal_overlap",
- "_dim_arange",
- "_dirichlet_grad",
- "_disable_functionalization",
- "_dyn_quant_matmul_4bit",
- "_dyn_quant_pack_4bit_weight",
- "_efficientzerotensor",
- "_embedding_bag",
- "_embedding_bag_forward_only",
- "_empty_affine_quantized",
- "_empty_per_channel_affine_quantized",
- "_enable_functionalization",
- "_euclidean_dist",
- "_fake_quantize_learnable_per_channel_affine",
- "_fake_quantize_learnable_per_tensor_affine",
- "_fake_quantize_per_tensor_affine_cachemask_tensor_qparams",
- "_fft_c2c",
- "_fft_c2r",
- "_fft_r2c",
- "_fill_mem_eff_dropout_mask_",
- "_foobar",
- "_foreach_abs",
- "_foreach_abs_",
- "_foreach_acos",
- "_foreach_acos_",
- "_foreach_add",
- "_foreach_add_",
- "_foreach_addcdiv",
- "_foreach_addcdiv_",
- "_foreach_addcmul",
- "_foreach_addcmul_",
- "_foreach_asin",
- "_foreach_asin_",
- "_foreach_atan",
- "_foreach_atan_",
- "_foreach_ceil",
- "_foreach_ceil_",
- "_foreach_clamp_max",
- "_foreach_clamp_max_",
- "_foreach_clamp_min",
- "_foreach_clamp_min_",
- "_foreach_copy_",
- "_foreach_cos",
- "_foreach_cos_",
- "_foreach_cosh",
- "_foreach_cosh_",
- "_foreach_div",
- "_foreach_div_",
- "_foreach_erf",
- "_foreach_erf_",
- "_foreach_erfc",
- "_foreach_erfc_",
- "_foreach_exp",
- "_foreach_exp_",
- "_foreach_expm1",
- "_foreach_expm1_",
- "_foreach_floor",
- "_foreach_floor_",
- "_foreach_frac",
- "_foreach_frac_",
- "_foreach_lerp",
- "_foreach_lerp_",
- "_foreach_lgamma",
- "_foreach_lgamma_",
- "_foreach_log",
- "_foreach_log10",
- "_foreach_log10_",
- "_foreach_log1p",
- "_foreach_log1p_",
- "_foreach_log2",
- "_foreach_log2_",
- "_foreach_log_",
- "_foreach_max",
- "_foreach_maximum",
- "_foreach_maximum_",
- "_foreach_minimum",
- "_foreach_minimum_",
- "_foreach_mul",
- "_foreach_mul_",
- "_foreach_neg",
- "_foreach_neg_",
- "_foreach_norm",
- "_foreach_pow",
- "_foreach_pow_",
- "_foreach_reciprocal",
- "_foreach_reciprocal_",
- "_foreach_round",
- "_foreach_round_",
- "_foreach_rsqrt",
- "_foreach_rsqrt_",
- "_foreach_sigmoid",
- "_foreach_sigmoid_",
- "_foreach_sign",
- "_foreach_sign_",
- "_foreach_sin",
- "_foreach_sin_",
- "_foreach_sinh",
- "_foreach_sinh_",
- "_foreach_sqrt",
- "_foreach_sqrt_",
- "_foreach_sub",
- "_foreach_sub_",
- "_foreach_tan",
- "_foreach_tan_",
- "_foreach_tanh",
- "_foreach_tanh_",
- "_foreach_trunc",
- "_foreach_trunc_",
- "_foreach_zero_",
- "_from_functional_tensor",
- "_functional_assert_async",
- "_functional_assert_scalar",
- "_functional_sym_constrain_range",
- "_functional_sym_constrain_range_for_size",
- "_functionalize_apply_view_metas",
- "_functionalize_are_all_mutations_hidden_from_autograd",
- "_functionalize_are_all_mutations_under_no_grad_or_inference_mode",
- "_functionalize_commit_update",
- "_functionalize_has_metadata_mutation",
- "_functionalize_inductor_storage_resized_counter",
- "_functionalize_is_symbolic",
- "_functionalize_mark_mutation_hidden_from_autograd",
- "_functionalize_mark_storage_changed",
- "_functionalize_mutation_counter",
- "_functionalize_replace",
- "_functionalize_storage_changed_counter",
- "_functionalize_sync",
- "_functionalize_unsafe_set",
- "_functionalize_was_inductor_storage_resized",
- "_functionalize_was_storage_changed",
- "_fused_adagrad_",
- "_fused_adam_",
- "_fused_adamw_",
- "_fused_dropout",
- "_fused_moving_avg_obs_fq_helper",
- "_fused_rms_norm",
- "_fused_sdp_choice",
- "_fused_sgd_",
- "_fw_primal_copy",
- "_grid_sampler_2d_cpu_fallback",
- "_grouped_mm",
- "_has_compatible_shallow_copy_type",
- "_histogramdd_bin_edges",
- "_histogramdd_from_bin_cts",
- "_histogramdd_from_bin_tensors",
- "_index_put_impl_",
- "_indices_copy",
- "_int_mm",
- "_is_all_true",
- "_is_any_true",
- "_is_functional_tensor",
- "_is_functional_tensor_base",
- "_is_zerotensor",
- "_lazy_clone",
- "_linalg_check_errors",
- "_linalg_det",
- "_linalg_eigh",
- "_linalg_slogdet",
- "_linalg_solve_ex",
- "_linalg_svd",
- "_log_softmax",
- "_log_softmax_backward_data",
- "_logcumsumexp",
- "_lstm_mps",
- "_lu_with_info",
- "_make_dep_token",
- "_make_dual",
- "_make_dual_copy",
- "_make_per_channel_quantized_tensor",
- "_make_per_tensor_quantized_tensor",
- "_masked_scale",
- "_masked_softmax",
- "_mixed_dtypes_linear",
- "_mkldnn_reshape",
- "_mkldnn_transpose",
- "_mkldnn_transpose_",
- "_mps_convolution",
- "_mps_convolution_transpose",
- "_native_batch_norm_legit",
- "_native_batch_norm_legit_no_training",
- "_native_multi_head_attention",
- "_neg_view",
- "_neg_view_copy",
- "_nested_compute_contiguous_strides_offsets",
- "_nested_from_padded",
- "_nested_from_padded_and_nested_example",
- "_nested_from_padded_tensor",
- "_nested_get_jagged_dummy",
- "_nested_get_lengths",
- "_nested_get_max_seqlen",
- "_nested_get_min_seqlen",
- "_nested_get_offsets",
- "_nested_get_ragged_idx",
- "_nested_get_values",
- "_nested_get_values_copy",
- "_nested_tensor_from_mask",
- "_nested_tensor_from_mask_left_aligned",
- "_nested_tensor_from_tensor_list",
- "_nested_tensor_softmax_with_shape",
- "_nested_view_from_buffer",
- "_nested_view_from_buffer_copy",
- "_nested_view_from_jagged",
- "_nested_view_from_jagged_copy",
- "_nnpack_available",
- "_nnpack_spatial_convolution",
- "_pack_padded_sequence",
- "_pad_packed_sequence",
- "_pin_memory",
- "_prelu_kernel",
- "_print",
- "_propagate_xla_data",
- "_remove_batch_dim",
- "_reshape_alias_copy",
- "_reshape_from_tensor",
- "_resize_output_",
- "_rowwise_prune",
- "_safe_softmax",
- "_sample_dirichlet",
- "_saturate_weight_to_fp16",
- "_scaled_dot_product_attention_math",
- "_scaled_dot_product_attention_math_for_mps",
- "_scaled_dot_product_cudnn_attention",
- "_scaled_dot_product_efficient_attention",
- "_scaled_dot_product_flash_attention",
- "_scaled_dot_product_flash_attention_for_cpu",
- "_scaled_grouped_mm",
- "_scaled_mm",
- "_shape_as_tensor",
- "_sobol_engine_draw",
- "_sobol_engine_ff_",
- "_sobol_engine_initialize_state_",
- "_sobol_engine_scramble_",
- "_softmax",
- "_softmax_backward_data",
- "_sparse_broadcast_to",
- "_sparse_broadcast_to_copy",
- "_sparse_csr_prod",
- "_sparse_csr_sum",
- "_sparse_log_softmax_backward_data",
- "_sparse_semi_structured_addmm",
- "_sparse_semi_structured_apply",
- "_sparse_semi_structured_apply_dense",
- "_sparse_semi_structured_linear",
- "_sparse_semi_structured_mm",
- "_sparse_semi_structured_tile",
- "_sparse_softmax_backward_data",
- "_sparse_sparse_matmul",
- "_sparse_sum",
- "_stack",
- "_standard_gamma",
- "_standard_gamma_grad",
- "_sync",
- "_test_autograd_multiple_dispatch",
- "_test_autograd_multiple_dispatch_view",
- "_test_autograd_multiple_dispatch_view_copy",
- "_test_check_tensor",
- "_test_functorch_fallback",
- "_test_parallel_materialize",
- "_test_serialization_subcmul",
- "_to_cpu",
- "_to_functional_tensor",
- "_to_sparse_semi_structured",
- "_transform_bias_rescale_qkv",
- "_transformer_encoder_layer_fwd",
- "_trilinear",
- "_triton_multi_head_attention",
- "_triton_scaled_dot_attention",
- "_unique",
- "_unique2",
- "_unpack_dual",
- "_unsafe_index",
- "_unsafe_index_put",
- "_unsafe_masked_index",
- "_unsafe_masked_index_put_accumulate",
- "_use_cudnn_ctc_loss",
- "_use_cudnn_rnn_flatten_weight",
- "_validate_compressed_sparse_indices",
- "_validate_sparse_bsc_tensor_args",
- "_validate_sparse_bsr_tensor_args",
- "_validate_sparse_compressed_tensor_args",
- "_validate_sparse_coo_tensor_args",
- "_validate_sparse_csc_tensor_args",
- "_validate_sparse_csr_tensor_args",
- "_values_copy",
- "_weight_int4pack_mm",
- "_weight_int4pack_mm_for_cpu",
- "_weight_int4pack_mm_with_scales_and_zeros",
- "_weight_int8pack_mm",
- "_weight_norm",
- "_weight_norm_interface",
- "_wrapped_linear_prepack",
- "_wrapped_quantized_linear_prepacked",
- "abs",
- "abs_",
- "absolute",
- "acos",
- "acos_",
- "acosh",
- "acosh_",
- "adaptive_avg_pool1d",
- "adaptive_max_pool1d",
- "add",
- "addbmm",
- "addcdiv",
- "addcmul",
- "addmm",
- "addmv",
- "addmv_",
- "addr",
- "adjoint",
- "affine_grid_generator",
- "alias_copy",
- "all",
- "allclose",
- "alpha_dropout",
- "alpha_dropout_",
- "amax",
- "amin",
- "aminmax",
- "angle",
- "any",
- "arange",
- "arccos",
- "arccos_",
- "arccosh",
- "arccosh_",
- "arcsin",
- "arcsin_",
- "arcsinh",
- "arcsinh_",
- "arctan",
- "arctan2",
- "arctan_",
- "arctanh",
- "arctanh_",
- "argmax",
- "argmin",
- "argsort",
- "argwhere",
- "as_strided",
- "as_strided_",
- "as_strided_copy",
- "as_strided_scatter",
- "as_tensor",
- "asarray",
- "asin",
- "asin_",
- "asinh",
- "asinh_",
- "atan",
- "atan2",
- "atan_",
- "atanh",
- "atanh_",
- "avg_pool1d",
- "baddbmm",
- "bartlett_window",
- "batch_norm",
- "batch_norm_backward_elemt",
- "batch_norm_backward_reduce",
- "batch_norm_elemt",
- "batch_norm_gather_stats",
- "batch_norm_gather_stats_with_counts",
- "batch_norm_stats",
- "batch_norm_update_stats",
- "bernoulli",
- "bilinear",
- "binary_cross_entropy_with_logits",
- "bincount",
- "binomial",
- "bitwise_and",
- "bitwise_left_shift",
- "bitwise_not",
- "bitwise_or",
- "bitwise_right_shift",
- "bitwise_xor",
- "blackman_window",
- "bmm",
- "broadcast_to",
- "bucketize",
- "can_cast",
- "cat",
- "ccol_indices_copy",
- "ceil",
- "ceil_",
- "celu",
- "celu_",
- "channel_shuffle",
- "cholesky",
- "cholesky_inverse",
- "cholesky_solve",
- "choose_qparams_optimized",
- "chunk",
- "clamp",
- "clamp_",
- "clamp_max",
- "clamp_max_",
- "clamp_min",
- "clamp_min_",
- "clip",
- "clip_",
- "clone",
- "col_indices_copy",
- "column_stack",
- "combinations",
- "complex",
- "concat",
- "concatenate",
- "conj",
- "conj_physical",
- "conj_physical_",
- "constant_pad_nd",
- "conv1d",
- "conv2d",
- "conv3d",
- "conv_tbc",
- "conv_transpose1d",
- "conv_transpose2d",
- "conv_transpose3d",
- "convolution",
- "copysign",
- "corrcoef",
- "cos",
- "cos_",
- "cosh",
- "cosh_",
- "cosine_embedding_loss",
- "cosine_similarity",
- "count_nonzero",
- "cov",
- "cross",
- "crow_indices_copy",
- "ctc_loss",
- "cudnn_affine_grid_generator",
- "cudnn_batch_norm",
- "cudnn_convolution",
- "cudnn_convolution_add_relu",
- "cudnn_convolution_relu",
- "cudnn_convolution_transpose",
- "cudnn_grid_sampler",
- "cudnn_is_acceptable",
- "cummax",
- "cummin",
- "cumprod",
- "cumsum",
- "cumulative_trapezoid",
- "deg2rad",
- "deg2rad_",
- "dequantize",
- "det",
- "detach",
- "detach_",
- "detach_copy",
- "diag",
- "diag_embed",
- "diagflat",
- "diagonal",
- "diagonal_copy",
- "diagonal_scatter",
- "diff",
- "digamma",
- "dist",
- "div",
- "divide",
- "dot",
- "dropout",
- "dropout_",
- "dsmm",
- "dsplit",
- "dstack",
- "embedding",
- "embedding_bag",
- "embedding_renorm_",
- "empty",
- "empty_like",
- "empty_permuted",
- "empty_quantized",
- "empty_strided",
- "eq",
- "equal",
- "erf",
- "erf_",
- "erfc",
- "erfc_",
- "erfinv",
- "exp",
- "exp2",
- "exp2_",
- "exp_",
- "expand_copy",
- "expm1",
- "expm1_",
- "eye",
- "fake_quantize_per_channel_affine",
- "fake_quantize_per_tensor_affine",
- "fbgemm_linear_fp16_weight",
- "fbgemm_linear_fp16_weight_fp32_activation",
- "fbgemm_linear_int8_weight",
- "fbgemm_linear_int8_weight_fp32_activation",
- "fbgemm_linear_quantize_weight",
- "fbgemm_pack_gemm_matrix_fp16",
- "fbgemm_pack_quantized_matrix",
- "feature_alpha_dropout",
- "feature_alpha_dropout_",
- "feature_dropout",
- "feature_dropout_",
- "fill",
- "fill_",
- "fix",
- "fix_",
- "flatten",
- "flip",
- "fliplr",
- "flipud",
- "float_power",
- "floor",
- "floor_",
- "floor_divide",
- "fmax",
- "fmin",
- "fmod",
- "frac",
- "frac_",
- "frexp",
- "frobenius_norm",
- "from_file",
- "from_numpy",
- "frombuffer",
- "full",
- "full_like",
- "fused_moving_avg_obs_fake_quant",
- "gather",
- "gcd",
- "gcd_",
- "ge",
- "geqrf",
- "ger",
- "get_default_dtype",
- "get_num_interop_threads",
- "get_num_threads",
- "gradient",
- "greater",
- "greater_equal",
- "grid_sampler",
- "grid_sampler_2d",
- "grid_sampler_3d",
- "group_norm",
- "gru",
- "gru_cell",
- "gt",
- "hamming_window",
- "hann_window",
- "hardshrink",
- "hash_tensor",
- "heaviside",
- "hinge_embedding_loss",
- "histc",
- "histogram",
- "histogramdd",
- "hsmm",
- "hsplit",
- "hspmm",
- "hstack",
- "hypot",
- "i0",
- "i0_",
- "igamma",
- "igammac",
- "imag",
- "index_add",
- "index_copy",
- "index_fill",
- "index_put",
- "index_put_",
- "index_reduce",
- "index_select",
- "indices_copy",
- "init_num_threads",
- "inner",
- "instance_norm",
- "int_repr",
- "inverse",
- "is_complex",
- "is_conj",
- "is_distributed",
- "is_floating_point",
- "is_grad_enabled",
- "is_inference",
- "is_inference_mode_enabled",
- "is_neg",
- "is_nonzero",
- "is_same_size",
- "is_signed",
- "is_vulkan_available",
- "isclose",
- "isfinite",
- "isin",
- "isinf",
- "isnan",
- "isneginf",
- "isposinf",
- "isreal",
- "istft",
- "kaiser_window",
- "kl_div",
- "kron",
- "kthvalue",
- "layer_norm",
- "lcm",
- "lcm_",
- "ldexp",
- "ldexp_",
- "le",
- "lerp",
- "less",
- "less_equal",
- "lgamma",
- "linspace",
- "log",
- "log10",
- "log10_",
- "log1p",
- "log1p_",
- "log2",
- "log2_",
- "log_",
- "log_softmax",
- "logaddexp",
- "logaddexp2",
- "logcumsumexp",
- "logdet",
- "logical_and",
- "logical_not",
- "logical_or",
- "logical_xor",
- "logit",
- "logit_",
- "logspace",
- "logsumexp",
- "lstm",
- "lstm_cell",
- "lt",
- "lu_solve",
- "lu_unpack",
- "margin_ranking_loss",
- "masked_fill",
- "masked_scatter",
- "masked_select",
- "matmul",
- "matrix_exp",
- "matrix_power",
- "max",
- "max_pool1d",
- "max_pool1d_with_indices",
- "max_pool2d",
- "max_pool3d",
- "maximum",
- "mean",
- "median",
- "min",
- "minimum",
- "miopen_batch_norm",
- "miopen_convolution",
- "miopen_convolution_add_relu",
- "miopen_convolution_relu",
- "miopen_convolution_transpose",
- "miopen_depthwise_convolution",
- "miopen_rnn",
- "mkldnn_adaptive_avg_pool2d",
- "mkldnn_convolution",
- "mkldnn_linear_backward_weights",
- "mkldnn_max_pool2d",
- "mkldnn_max_pool3d",
- "mkldnn_rnn_layer",
- "mm",
- "mode",
- "moveaxis",
- "movedim",
- "msort",
- "mul",
- "multinomial",
- "multiply",
- "mv",
- "mvlgamma",
- "nan_to_num",
- "nan_to_num_",
- "nanmean",
- "nanmedian",
- "nanquantile",
- "nansum",
- "narrow",
- "narrow_copy",
- "native_batch_norm",
- "native_channel_shuffle",
- "native_dropout",
- "native_group_norm",
- "native_layer_norm",
- "native_norm",
- "ne",
- "neg",
- "neg_",
- "negative",
- "negative_",
- "nextafter",
- "nonzero",
- "nonzero_static",
- "norm_except_dim",
- "normal",
- "not_equal",
- "nuclear_norm",
- "numel",
- "ones",
- "ones_like",
- "orgqr",
- "ormqr",
- "outer",
- "pairwise_distance",
- "pdist",
- "permute",
- "permute_copy",
- "pinverse",
- "pixel_shuffle",
- "pixel_unshuffle",
- "poisson",
- "poisson_nll_loss",
- "polar",
- "polygamma",
- "positive",
- "pow",
- "prelu",
- "prod",
- "promote_types",
- "put",
- "q_per_channel_axis",
- "q_per_channel_scales",
- "q_per_channel_zero_points",
- "q_scale",
- "q_zero_point",
- "qr",
- "quantile",
- "quantize_per_channel",
- "quantize_per_tensor",
- "quantize_per_tensor_dynamic",
- "quantized_batch_norm",
- "quantized_gru_cell",
- "quantized_lstm_cell",
- "quantized_max_pool1d",
- "quantized_max_pool2d",
- "quantized_max_pool3d",
- "quantized_rnn_relu_cell",
- "quantized_rnn_tanh_cell",
- "rad2deg",
- "rad2deg_",
- "rand",
- "rand_like",
- "randint",
- "randint_like",
- "randn",
- "randn_like",
- "randperm",
- "range",
- "ravel",
- "real",
- "reciprocal",
- "reciprocal_",
- "relu",
- "relu_",
- "remainder",
- "renorm",
- "repeat_interleave",
- "reshape",
- "resize_as_",
- "resize_as_sparse_",
- "resolve_conj",
- "resolve_neg",
- "result_type",
- "rms_norm",
- "rnn_relu",
- "rnn_relu_cell",
- "rnn_tanh",
- "rnn_tanh_cell",
- "roll",
- "rot90",
- "round",
- "round_",
- "row_indices_copy",
- "row_stack",
- "rrelu",
- "rrelu_",
- "rsqrt",
- "rsqrt_",
- "rsub",
- "saddmm",
- "scalar_tensor",
- "scatter",
- "scatter_add",
- "scatter_reduce",
- "searchsorted",
- "segment_reduce",
- "select",
- "select_copy",
- "select_scatter",
- "selu",
- "selu_",
- "set_flush_denormal",
- "set_num_interop_threads",
- "set_num_threads",
- "sgn",
- "sigmoid",
- "sigmoid_",
- "sign",
- "signbit",
- "sin",
- "sin_",
- "sinc",
- "sinc_",
- "sinh",
- "sinh_",
- "slice_copy",
- "slice_inverse",
- "slice_scatter",
- "slogdet",
- "smm",
- "softmax",
- "sort",
- "sparse_bsc_tensor",
- "sparse_bsr_tensor",
- "sparse_compressed_tensor",
- "sparse_coo_tensor",
- "sparse_csc_tensor",
- "sparse_csr_tensor",
- "split_copy",
- "split_with_sizes",
- "split_with_sizes_copy",
- "spmm",
- "sqrt",
- "sqrt_",
- "square",
- "square_",
- "squeeze",
- "squeeze_copy",
- "sspaddmm",
- "stack",
- "std",
- "std_mean",
- "sub",
- "subtract",
- "sum",
- "svd",
- "swapaxes",
- "swapdims",
- "sym_constrain_range",
- "sym_constrain_range_for_size",
- "t",
- "t_copy",
- "take",
- "take_along_dim",
- "tan",
- "tan_",
- "tanh",
- "tanh_",
- "tensor",
- "tensor_split",
- "threshold",
- "threshold_",
- "tile",
- "topk",
- "trace",
- "transpose",
- "transpose_copy",
- "trapezoid",
- "trapz",
- "triangular_solve",
- "tril",
- "tril_indices",
- "triplet_margin_loss",
- "triu",
- "triu_indices",
- "true_divide",
- "trunc",
- "trunc_",
- "unbind",
- "unbind_copy",
- "unflatten",
- "unfold_copy",
- "unique_dim",
- "unsafe_chunk",
- "unsafe_split",
- "unsafe_split_with_sizes",
- "unsqueeze",
- "unsqueeze_copy",
- "values_copy",
- "vander",
- "var",
- "var_mean",
- "vdot",
- "view_as_complex",
- "view_as_complex_copy",
- "view_as_real",
- "view_as_real_copy",
- "view_copy",
- "vsplit",
- "vstack",
- "where",
- "xlogy",
- "xlogy_",
- "zero_",
- "zeros",
- "zeros_like",
- ]
- @overload
- def __and__(input: Tensor, other: Tensor) -> Tensor: ...
- @overload
- def __and__(input: Tensor, other: Number | _complex) -> Tensor: ...
- @overload
- def __lshift__(input: Tensor, other: Tensor) -> Tensor: ...
- @overload
- def __lshift__(input: Tensor, other: Number | _complex) -> Tensor: ...
- @overload
- def __or__(input: Tensor, other: Tensor) -> Tensor: ...
- @overload
- def __or__(input: Tensor, other: Number | _complex) -> Tensor: ...
- @overload
- def __rshift__(input: Tensor, other: Tensor) -> Tensor: ...
- @overload
- def __rshift__(input: Tensor, other: Number | _complex) -> Tensor: ...
- @overload
- def __xor__(input: Tensor, other: Tensor) -> Tensor: ...
- @overload
- def __xor__(input: Tensor, other: Number | _complex) -> Tensor: ...
- def _adaptive_avg_pool2d(
- input: Tensor,
- output_size: _int | SymInt | Sequence[_int | SymInt],
- ) -> Tensor: ...
- def _adaptive_avg_pool3d(
- input: Tensor,
- output_size: _int | SymInt | Sequence[_int | SymInt],
- ) -> Tensor: ...
- def _add_batch_dim(input: Tensor, batch_dim: _int, level: _int) -> Tensor: ...
- @overload
- def _add_relu(
- input: Tensor,
- other: Tensor,
- *,
- alpha: Number | _complex = 1,
- out: Tensor | None = None,
- ) -> Tensor: ...
- @overload
- def _add_relu(
- input: Tensor,
- other: Number | _complex,
- alpha: Number | _complex = 1,
- ) -> Tensor: ...
- @overload
- def _add_relu_(
- input: Tensor,
- other: Tensor,
- *,
- alpha: Number | _complex = 1,
- ) -> Tensor: ...
- @overload
- def _add_relu_(
- input: Tensor,
- other: Number | _complex,
- alpha: Number | _complex = 1,
- ) -> Tensor: ...
- def _addmm_activation(
- input: Tensor,
- mat1: Tensor,
- mat2: Tensor,
- *,
- beta: Number | _complex = 1,
- alpha: Number | _complex = 1,
- use_gelu: _bool = False,
- out: Tensor | None = None,
- ) -> Tensor: ...
- @overload
- def _aminmax(input: Tensor) -> tuple[Tensor, Tensor]: ...
- @overload
- def _aminmax(
- input: Tensor,
- dim: _int,
- keepdim: _bool = False,
- ) -> tuple[Tensor, Tensor]: ...
- def _amp_foreach_non_finite_check_and_unscale_(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- found_inf: Tensor,
- inv_scale: Tensor,
- ) -> None: ...
- def _amp_update_scale_(
- input: Tensor,
- growth_tracker: Tensor,
- found_inf: Tensor,
- scale_growth_factor: _float,
- scale_backoff_factor: _float,
- growth_interval: _int,
- ) -> Tensor: ...
- @overload
- def _assert_async(input: Tensor) -> None:
- r"""
- _assert_async(tensor) -> void
- Asynchronously assert that the contents of tensor are nonzero. For CPU tensors,
- this is equivalent to ``assert tensor`` or ``assert tensor.is_nonzero()``; for
- CUDA tensors, we DO NOT synchronize and you may only find out the assertion
- failed at a later CUDA kernel launch. Asynchronous assertion can be helpful for
- testing invariants in CUDA tensors without giving up performance. This function
- is NOT intended to be used for regular error checking, as it will trash your CUDA
- context if the assert fails (forcing you to restart your PyTorch process.)
- Args:
- tensor (Tensor): a one element tensor to test to see if it is nonzero. Zero
- elements (including False for boolean tensors) cause an assertion failure
- to be raised.
- """
- @overload
- def _assert_async(input: Tensor, assert_msg: str) -> None:
- r"""
- _assert_async(tensor) -> void
- Asynchronously assert that the contents of tensor are nonzero. For CPU tensors,
- this is equivalent to ``assert tensor`` or ``assert tensor.is_nonzero()``; for
- CUDA tensors, we DO NOT synchronize and you may only find out the assertion
- failed at a later CUDA kernel launch. Asynchronous assertion can be helpful for
- testing invariants in CUDA tensors without giving up performance. This function
- is NOT intended to be used for regular error checking, as it will trash your CUDA
- context if the assert fails (forcing you to restart your PyTorch process.)
- Args:
- tensor (Tensor): a one element tensor to test to see if it is nonzero. Zero
- elements (including False for boolean tensors) cause an assertion failure
- to be raised.
- """
- def _assert_scalar(self: Number | _complex, assert_msg: str) -> None: ...
- def _assert_tensor_metadata(
- a: Tensor,
- size: Sequence[_int | SymInt] | None = None,
- stride: Sequence[_int | SymInt] | None = None,
- dtype: _dtype | None = None,
- *,
- device: DeviceLikeType | None = None,
- layout: _layout | None = None,
- ) -> None: ...
- def _batch_norm_impl_index(
- input: Tensor,
- weight: Tensor | None,
- bias: Tensor | None,
- running_mean: Tensor | None,
- running_var: Tensor | None,
- training: _bool,
- momentum: _float,
- eps: _float,
- cudnn_enabled: _bool,
- ) -> tuple[Tensor, Tensor, Tensor, Tensor, _int]: ...
- def _cast_Byte(input: Tensor, non_blocking: _bool = False) -> Tensor: ...
- def _cast_Char(input: Tensor, non_blocking: _bool = False) -> Tensor: ...
- def _cast_Double(input: Tensor, non_blocking: _bool = False) -> Tensor: ...
- def _cast_Float(input: Tensor, non_blocking: _bool = False) -> Tensor: ...
- def _cast_Half(input: Tensor, non_blocking: _bool = False) -> Tensor: ...
- def _cast_Int(input: Tensor, non_blocking: _bool = False) -> Tensor: ...
- def _cast_Long(input: Tensor, non_blocking: _bool = False) -> Tensor: ...
- def _cast_Short(input: Tensor, non_blocking: _bool = False) -> Tensor: ...
- def _choose_qparams_per_tensor(
- input: Tensor,
- reduce_range: _bool = False,
- ) -> tuple[_float, _int]: ...
- def _chunk_cat(
- tensors: tuple[Tensor, ...] | list[Tensor] | None,
- dim: _int,
- num_chunks: _int,
- *,
- out: Tensor | None = None,
- ) -> Tensor: ...
- def _coalesce(input: Tensor) -> Tensor: ...
- def _compute_linear_combination(
- input: Tensor,
- coefficients: Tensor,
- *,
- out: Tensor | None = None,
- ) -> Tensor: ...
- def _conj(input: Tensor) -> Tensor: ...
- def _conj_copy(input: Tensor, *, out: Tensor | None = None) -> Tensor: ...
- def _conj_physical(input: Tensor) -> Tensor: ...
- def _convert_indices_from_coo_to_csr(
- input: Tensor,
- size: _int,
- *,
- out_int32: _bool = False,
- out: Tensor | None = None,
- ) -> Tensor: ...
- def _convert_indices_from_csr_to_coo(
- crow_indices: Tensor,
- col_indices: Tensor,
- *,
- out_int32: _bool = False,
- transpose: _bool = False,
- out: Tensor | None = None,
- ) -> Tensor: ...
- def _convert_weight_to_int4pack(input: Tensor, innerKTiles: _int) -> Tensor: ...
- def _convert_weight_to_int4pack_for_cpu(
- input: Tensor,
- innerKTiles: _int,
- ) -> Tensor: ...
- @overload
- def _convolution(
- input: Tensor,
- weight: Tensor,
- bias: Tensor | None,
- stride: Sequence[_int | SymInt],
- padding: Sequence[_int | SymInt],
- dilation: Sequence[_int | SymInt],
- transposed: _bool,
- output_padding: _size,
- groups: _int | SymInt,
- benchmark: _bool,
- deterministic: _bool,
- cudnn_enabled: _bool,
- ) -> Tensor: ...
- @overload
- def _convolution(
- input: Tensor,
- weight: Tensor,
- bias: Tensor | None,
- stride: Sequence[_int | SymInt],
- padding: Sequence[_int | SymInt],
- dilation: Sequence[_int | SymInt],
- transposed: _bool,
- output_padding: Sequence[_int | SymInt],
- groups: _int | SymInt,
- benchmark: _bool,
- deterministic: _bool,
- cudnn_enabled: _bool,
- allow_tf32: _bool,
- ) -> Tensor: ...
- def _convolution_mode(
- input: Tensor,
- weight: Tensor,
- bias: Tensor | None,
- stride: Sequence[_int | SymInt],
- padding: str,
- dilation: Sequence[_int | SymInt],
- groups: _int | SymInt,
- ) -> Tensor: ...
- def _copy_from(
- input: Tensor,
- dst: Tensor,
- non_blocking: _bool = False,
- ) -> Tensor: ...
- def _copy_from_and_resize(input: Tensor, dst: Tensor) -> Tensor: ...
- def _cslt_compress(input: Tensor) -> Tensor: ...
- def _cslt_sparse_mm(
- compressed_A: Tensor,
- dense_B: Tensor,
- bias: Tensor | None = None,
- alpha: Tensor | None = None,
- out_dtype: _dtype | None = None,
- transpose_result: _bool = False,
- alg_id: _int = 0,
- split_k: _int = 1,
- split_k_mode: _int = -1,
- ) -> Tensor: ...
- def _cslt_sparse_mm_search(
- compressed_A: Tensor,
- dense_B: Tensor,
- bias: Tensor | None = None,
- alpha: Tensor | None = None,
- out_dtype: _dtype | None = None,
- transpose_result: _bool = False,
- ) -> _int: ...
- @overload
- def _ctc_loss(
- log_probs: Tensor,
- targets: Tensor,
- input_lengths: _size,
- target_lengths: _size,
- blank: _int = 0,
- zero_infinity: _bool = False,
- ) -> tuple[Tensor, Tensor]: ...
- @overload
- def _ctc_loss(
- log_probs: Tensor,
- targets: Tensor,
- input_lengths: Tensor,
- target_lengths: Tensor,
- blank: _int = 0,
- zero_infinity: _bool = False,
- ) -> tuple[Tensor, Tensor]: ...
- @overload
- def _cudnn_ctc_loss(
- log_probs: Tensor,
- targets: Tensor,
- input_lengths: _size,
- target_lengths: _size,
- blank: _int,
- deterministic: _bool,
- zero_infinity: _bool,
- ) -> tuple[Tensor, Tensor]: ...
- @overload
- def _cudnn_ctc_loss(
- log_probs: Tensor,
- targets: Tensor,
- input_lengths: Tensor,
- target_lengths: Tensor,
- blank: _int,
- deterministic: _bool,
- zero_infinity: _bool,
- ) -> tuple[Tensor, Tensor]: ...
- def _cudnn_init_dropout_state(
- dropout: _float,
- train: _bool,
- dropout_seed: _int,
- *,
- dtype: _dtype | None = None,
- layout: _layout | None = None,
- device: DeviceLikeType | None = None,
- pin_memory: _bool | None = False,
- requires_grad: _bool | None = False,
- ) -> Tensor: ...
- def _cudnn_rnn(
- input: Tensor,
- weight: tuple[Tensor, ...] | list[Tensor] | None,
- weight_stride0: _int,
- weight_buf: Tensor | None,
- hx: Tensor,
- cx: Tensor | None,
- mode: _int,
- hidden_size: _int | SymInt,
- proj_size: _int | SymInt,
- num_layers: _int,
- batch_first: _bool,
- dropout: _float,
- train: _bool,
- bidirectional: _bool,
- batch_sizes: Sequence[_int | SymInt],
- dropout_state: Tensor | None,
- ) -> tuple[Tensor, Tensor, Tensor, Tensor, Tensor]: ...
- def _cudnn_rnn_flatten_weight(
- weight_arr: tuple[Tensor, ...] | list[Tensor] | None,
- weight_stride0: _int,
- input_size: _int | SymInt,
- mode: _int,
- hidden_size: _int | SymInt,
- proj_size: _int | SymInt,
- num_layers: _int,
- batch_first: _bool,
- bidirectional: _bool,
- ) -> Tensor: ...
- def _cufft_clear_plan_cache(device_index: _int) -> None: ...
- def _cufft_get_plan_cache_max_size(device_index: _int) -> _int: ...
- def _cufft_get_plan_cache_size(device_index: _int) -> _int: ...
- def _cufft_set_plan_cache_max_size(
- device_index: _int,
- max_size: _int,
- ) -> None: ...
- def _cummax_helper(
- input: Tensor,
- values: Tensor,
- indices: Tensor,
- dim: _int,
- ) -> None: ...
- def _cummin_helper(
- input: Tensor,
- values: Tensor,
- indices: Tensor,
- dim: _int,
- ) -> None: ...
- def _debug_has_internal_overlap(input: Tensor) -> _int: ...
- def _dim_arange(like: Tensor, dim: _int) -> Tensor: ...
- def _dirichlet_grad(x: Tensor, alpha: Tensor, total: Tensor) -> Tensor: ...
- def _disable_functionalization(): ...
- def _dyn_quant_matmul_4bit(
- inp: Tensor,
- packed_weights: Tensor,
- block_size: _int,
- in_features: _int,
- out_features: _int,
- ) -> Tensor: ...
- def _dyn_quant_pack_4bit_weight(
- weights: Tensor,
- scales_zeros: Tensor,
- bias: Tensor | None,
- block_size: _int,
- in_features: _int,
- out_features: _int,
- ) -> Tensor: ...
- @overload
- def _efficientzerotensor(
- size: Sequence[_int | SymInt],
- *,
- dtype: _dtype | None = None,
- layout: _layout | None = None,
- device: DeviceLikeType | None = None,
- pin_memory: _bool | None = False,
- requires_grad: _bool | None = False,
- ) -> Tensor: ...
- @overload
- def _efficientzerotensor(
- *size: _int | SymInt,
- dtype: _dtype | None = None,
- layout: _layout | None = None,
- device: DeviceLikeType | None = None,
- pin_memory: _bool | None = False,
- requires_grad: _bool | None = False,
- ) -> Tensor: ...
- def _embedding_bag(
- weight: Tensor,
- indices: Tensor,
- offsets: Tensor,
- scale_grad_by_freq: _bool = False,
- mode: _int = 0,
- sparse: _bool = False,
- per_sample_weights: Tensor | None = None,
- include_last_offset: _bool = False,
- padding_idx: _int = -1,
- ) -> tuple[Tensor, Tensor, Tensor, Tensor]: ...
- def _embedding_bag_forward_only(
- weight: Tensor,
- indices: Tensor,
- offsets: Tensor,
- scale_grad_by_freq: _bool = False,
- mode: _int = 0,
- sparse: _bool = False,
- per_sample_weights: Tensor | None = None,
- include_last_offset: _bool = False,
- padding_idx: _int = -1,
- ) -> tuple[Tensor, Tensor, Tensor, Tensor]: ...
- @overload
- def _empty_affine_quantized(
- size: Sequence[_int | SymInt],
- *,
- scale: _float = 1,
- zero_point: _int = 0,
- memory_format: memory_format | None = contiguous_format,
- dtype: _dtype | None = None,
- layout: _layout | None = None,
- device: DeviceLikeType | None = None,
- pin_memory: _bool | None = False,
- requires_grad: _bool | None = False,
- ) -> Tensor: ...
- @overload
- def _empty_affine_quantized(
- *size: _int | SymInt,
- scale: _float = 1,
- zero_point: _int = 0,
- memory_format: memory_format | None = contiguous_format,
- dtype: _dtype | None = None,
- layout: _layout | None = None,
- device: DeviceLikeType | None = None,
- pin_memory: _bool | None = False,
- requires_grad: _bool | None = False,
- ) -> Tensor: ...
- @overload
- def _empty_per_channel_affine_quantized(
- size: Sequence[_int | SymInt],
- *,
- scales: Tensor,
- zero_points: Tensor,
- axis: _int,
- memory_format: memory_format | None = contiguous_format,
- dtype: _dtype | None = None,
- layout: _layout | None = None,
- device: DeviceLikeType | None = None,
- pin_memory: _bool | None = False,
- requires_grad: _bool | None = False,
- ) -> Tensor: ...
- @overload
- def _empty_per_channel_affine_quantized(
- *size: _int | SymInt,
- scales: Tensor,
- zero_points: Tensor,
- axis: _int,
- memory_format: memory_format | None = contiguous_format,
- dtype: _dtype | None = None,
- layout: _layout | None = None,
- device: DeviceLikeType | None = None,
- pin_memory: _bool | None = False,
- requires_grad: _bool | None = False,
- ) -> Tensor: ...
- def _enable_functionalization(*, reapply_views: _bool = False) -> None: ...
- def _euclidean_dist(x1: Tensor, x2: Tensor) -> Tensor: ...
- def _fake_quantize_learnable_per_channel_affine(
- input: Tensor,
- scale: Tensor,
- zero_point: Tensor,
- axis: _int,
- quant_min: _int,
- quant_max: _int,
- grad_factor: _float = 1.0,
- ) -> Tensor: ...
- def _fake_quantize_learnable_per_tensor_affine(
- input: Tensor,
- scale: Tensor,
- zero_point: Tensor,
- quant_min: _int,
- quant_max: _int,
- grad_factor: _float = 1.0,
- ) -> Tensor: ...
- def _fake_quantize_per_tensor_affine_cachemask_tensor_qparams(
- input: Tensor,
- scale: Tensor,
- zero_point: Tensor,
- fake_quant_enabled: Tensor,
- quant_min: _int,
- quant_max: _int,
- ) -> torch.return_types._fake_quantize_per_tensor_affine_cachemask_tensor_qparams: # fmt: skip
- ...
- def _fft_c2c(
- input: Tensor,
- dim: Sequence[_int | SymInt],
- normalization: _int,
- forward: _bool,
- *,
- out: Tensor | None = None,
- ) -> Tensor: ...
- def _fft_c2r(
- input: Tensor,
- dim: _size,
- normalization: _int,
- last_dim_size: _int | SymInt,
- *,
- out: Tensor | None = None,
- ) -> Tensor: ...
- def _fft_r2c(
- input: Tensor,
- dim: _size,
- normalization: _int,
- onesided: _bool,
- *,
- out: Tensor | None = None,
- ) -> Tensor: ...
- def _fill_mem_eff_dropout_mask_(
- input: Tensor,
- dropout_p: _float,
- seed: _int,
- offset: _int,
- ) -> Tensor: ...
- def _foobar(
- input: Tensor,
- arg1: _bool = True,
- arg2: _bool = True,
- *,
- arg3: _bool = True,
- ) -> Tensor: ...
- def _foreach_abs(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- ) -> tuple[Tensor, ...]:
- r"""
- _foreach_abs(self: List[Tensor]) -> List[Tensor]
- Apply :func:`torch.abs` to each Tensor of the input list.
- """
- def _foreach_abs_(self: tuple[Tensor, ...] | list[Tensor] | None) -> None:
- r"""
- _foreach_abs_(self: List[Tensor]) -> None
- Apply :func:`torch.abs` to each Tensor of the input list.
- """
- def _foreach_acos(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- ) -> tuple[Tensor, ...]:
- r"""
- _foreach_acos(self: List[Tensor]) -> List[Tensor]
- Apply :func:`torch.acos` to each Tensor of the input list.
- """
- def _foreach_acos_(self: tuple[Tensor, ...] | list[Tensor] | None) -> None:
- r"""
- _foreach_acos_(self: List[Tensor]) -> None
- Apply :func:`torch.acos` to each Tensor of the input list.
- """
- @overload
- def _foreach_add(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- scalars: Sequence[Number | _complex],
- ) -> tuple[Tensor, ...]: ...
- @overload
- def _foreach_add(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- other: tuple[Tensor, ...] | list[Tensor] | None,
- *,
- alpha: Number | _complex = 1,
- ) -> tuple[Tensor, ...]: ...
- @overload
- def _foreach_add(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- other: Tensor,
- *,
- alpha: Number | _complex = 1,
- ) -> tuple[Tensor, ...]: ...
- @overload
- def _foreach_add(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- scalar: Number | _complex,
- ) -> tuple[Tensor, ...]: ...
- @overload
- def _foreach_add_(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- scalars: Sequence[Number | _complex],
- ) -> None: ...
- @overload
- def _foreach_add_(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- other: tuple[Tensor, ...] | list[Tensor] | None,
- *,
- alpha: Number | _complex = 1,
- ) -> None: ...
- @overload
- def _foreach_add_(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- other: Tensor,
- *,
- alpha: Number | _complex = 1,
- ) -> None: ...
- @overload
- def _foreach_add_(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- scalar: Number | _complex,
- ) -> None: ...
- @overload
- def _foreach_addcdiv(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- tensor1: tuple[Tensor, ...] | list[Tensor] | None,
- tensor2: tuple[Tensor, ...] | list[Tensor] | None,
- scalars: Sequence[Number | _complex],
- ) -> tuple[Tensor, ...]: ...
- @overload
- def _foreach_addcdiv(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- tensor1: tuple[Tensor, ...] | list[Tensor] | None,
- tensor2: tuple[Tensor, ...] | list[Tensor] | None,
- scalars: Tensor,
- ) -> tuple[Tensor, ...]: ...
- @overload
- def _foreach_addcdiv(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- tensor1: tuple[Tensor, ...] | list[Tensor] | None,
- tensor2: tuple[Tensor, ...] | list[Tensor] | None,
- value: Number | _complex = 1,
- ) -> tuple[Tensor, ...]: ...
- @overload
- def _foreach_addcdiv_(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- tensor1: tuple[Tensor, ...] | list[Tensor] | None,
- tensor2: tuple[Tensor, ...] | list[Tensor] | None,
- scalars: Sequence[Number | _complex],
- ) -> None: ...
- @overload
- def _foreach_addcdiv_(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- tensor1: tuple[Tensor, ...] | list[Tensor] | None,
- tensor2: tuple[Tensor, ...] | list[Tensor] | None,
- scalars: Tensor,
- ) -> None: ...
- @overload
- def _foreach_addcdiv_(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- tensor1: tuple[Tensor, ...] | list[Tensor] | None,
- tensor2: tuple[Tensor, ...] | list[Tensor] | None,
- value: Number | _complex = 1,
- ) -> None: ...
- @overload
- def _foreach_addcmul(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- tensor1: tuple[Tensor, ...] | list[Tensor] | None,
- tensor2: tuple[Tensor, ...] | list[Tensor] | None,
- scalars: Sequence[Number | _complex],
- ) -> tuple[Tensor, ...]: ...
- @overload
- def _foreach_addcmul(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- tensor1: tuple[Tensor, ...] | list[Tensor] | None,
- tensor2: tuple[Tensor, ...] | list[Tensor] | None,
- scalars: Tensor,
- ) -> tuple[Tensor, ...]: ...
- @overload
- def _foreach_addcmul(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- tensor1: tuple[Tensor, ...] | list[Tensor] | None,
- tensor2: tuple[Tensor, ...] | list[Tensor] | None,
- value: Number | _complex = 1,
- ) -> tuple[Tensor, ...]: ...
- @overload
- def _foreach_addcmul_(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- tensor1: tuple[Tensor, ...] | list[Tensor] | None,
- tensor2: tuple[Tensor, ...] | list[Tensor] | None,
- scalars: Sequence[Number | _complex],
- ) -> None: ...
- @overload
- def _foreach_addcmul_(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- tensor1: tuple[Tensor, ...] | list[Tensor] | None,
- tensor2: tuple[Tensor, ...] | list[Tensor] | None,
- scalars: Tensor,
- ) -> None: ...
- @overload
- def _foreach_addcmul_(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- tensor1: tuple[Tensor, ...] | list[Tensor] | None,
- tensor2: tuple[Tensor, ...] | list[Tensor] | None,
- value: Number | _complex = 1,
- ) -> None: ...
- def _foreach_asin(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- ) -> tuple[Tensor, ...]:
- r"""
- _foreach_asin(self: List[Tensor]) -> List[Tensor]
- Apply :func:`torch.asin` to each Tensor of the input list.
- """
- def _foreach_asin_(self: tuple[Tensor, ...] | list[Tensor] | None) -> None:
- r"""
- _foreach_asin_(self: List[Tensor]) -> None
- Apply :func:`torch.asin` to each Tensor of the input list.
- """
- def _foreach_atan(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- ) -> tuple[Tensor, ...]:
- r"""
- _foreach_atan(self: List[Tensor]) -> List[Tensor]
- Apply :func:`torch.atan` to each Tensor of the input list.
- """
- def _foreach_atan_(self: tuple[Tensor, ...] | list[Tensor] | None) -> None:
- r"""
- _foreach_atan_(self: List[Tensor]) -> None
- Apply :func:`torch.atan` to each Tensor of the input list.
- """
- def _foreach_ceil(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- ) -> tuple[Tensor, ...]:
- r"""
- _foreach_ceil(self: List[Tensor]) -> List[Tensor]
- Apply :func:`torch.ceil` to each Tensor of the input list.
- """
- def _foreach_ceil_(self: tuple[Tensor, ...] | list[Tensor] | None) -> None:
- r"""
- _foreach_ceil_(self: List[Tensor]) -> None
- Apply :func:`torch.ceil` to each Tensor of the input list.
- """
- @overload
- def _foreach_clamp_max(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- scalars: Sequence[Number | _complex],
- ) -> tuple[Tensor, ...]: ...
- @overload
- def _foreach_clamp_max(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- scalar: Number | _complex,
- ) -> tuple[Tensor, ...]: ...
- @overload
- def _foreach_clamp_max(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- other: tuple[Tensor, ...] | list[Tensor] | None,
- ) -> tuple[Tensor, ...]: ...
- @overload
- def _foreach_clamp_max_(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- scalars: Sequence[Number | _complex],
- ) -> None: ...
- @overload
- def _foreach_clamp_max_(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- scalar: Number | _complex,
- ) -> None: ...
- @overload
- def _foreach_clamp_max_(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- other: tuple[Tensor, ...] | list[Tensor] | None,
- ) -> None: ...
- @overload
- def _foreach_clamp_min(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- scalars: Sequence[Number | _complex],
- ) -> tuple[Tensor, ...]: ...
- @overload
- def _foreach_clamp_min(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- scalar: Number | _complex,
- ) -> tuple[Tensor, ...]: ...
- @overload
- def _foreach_clamp_min(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- other: tuple[Tensor, ...] | list[Tensor] | None,
- ) -> tuple[Tensor, ...]: ...
- @overload
- def _foreach_clamp_min_(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- scalars: Sequence[Number | _complex],
- ) -> None: ...
- @overload
- def _foreach_clamp_min_(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- scalar: Number | _complex,
- ) -> None: ...
- @overload
- def _foreach_clamp_min_(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- other: tuple[Tensor, ...] | list[Tensor] | None,
- ) -> None: ...
- def _foreach_copy_(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- src: tuple[Tensor, ...] | list[Tensor] | None,
- non_blocking: _bool = False,
- ) -> None: ...
- def _foreach_cos(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- ) -> tuple[Tensor, ...]:
- r"""
- _foreach_cos(self: List[Tensor]) -> List[Tensor]
- Apply :func:`torch.cos` to each Tensor of the input list.
- """
- def _foreach_cos_(self: tuple[Tensor, ...] | list[Tensor] | None) -> None:
- r"""
- _foreach_cos_(self: List[Tensor]) -> None
- Apply :func:`torch.cos` to each Tensor of the input list.
- """
- def _foreach_cosh(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- ) -> tuple[Tensor, ...]:
- r"""
- _foreach_cosh(self: List[Tensor]) -> List[Tensor]
- Apply :func:`torch.cosh` to each Tensor of the input list.
- """
- def _foreach_cosh_(self: tuple[Tensor, ...] | list[Tensor] | None) -> None:
- r"""
- _foreach_cosh_(self: List[Tensor]) -> None
- Apply :func:`torch.cosh` to each Tensor of the input list.
- """
- @overload
- def _foreach_div(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- scalars: Sequence[Number | _complex],
- ) -> tuple[Tensor, ...]: ...
- @overload
- def _foreach_div(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- other: Tensor,
- ) -> tuple[Tensor, ...]: ...
- @overload
- def _foreach_div(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- scalar: Number | _complex,
- ) -> tuple[Tensor, ...]: ...
- @overload
- def _foreach_div(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- other: tuple[Tensor, ...] | list[Tensor] | None,
- ) -> tuple[Tensor, ...]: ...
- @overload
- def _foreach_div_(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- scalars: Sequence[Number | _complex],
- ) -> None: ...
- @overload
- def _foreach_div_(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- other: Tensor,
- ) -> None: ...
- @overload
- def _foreach_div_(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- scalar: Number | _complex,
- ) -> None: ...
- @overload
- def _foreach_div_(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- other: tuple[Tensor, ...] | list[Tensor] | None,
- ) -> None: ...
- def _foreach_erf(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- ) -> tuple[Tensor, ...]:
- r"""
- _foreach_erf(self: List[Tensor]) -> List[Tensor]
- Apply :func:`torch.erf` to each Tensor of the input list.
- """
- def _foreach_erf_(self: tuple[Tensor, ...] | list[Tensor] | None) -> None:
- r"""
- _foreach_erf_(self: List[Tensor]) -> None
- Apply :func:`torch.erf` to each Tensor of the input list.
- """
- def _foreach_erfc(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- ) -> tuple[Tensor, ...]:
- r"""
- _foreach_erfc(self: List[Tensor]) -> List[Tensor]
- Apply :func:`torch.erfc` to each Tensor of the input list.
- """
- def _foreach_erfc_(self: tuple[Tensor, ...] | list[Tensor] | None) -> None:
- r"""
- _foreach_erfc_(self: List[Tensor]) -> None
- Apply :func:`torch.erfc` to each Tensor of the input list.
- """
- def _foreach_exp(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- ) -> tuple[Tensor, ...]:
- r"""
- _foreach_exp(self: List[Tensor]) -> List[Tensor]
- Apply :func:`torch.exp` to each Tensor of the input list.
- """
- def _foreach_exp_(self: tuple[Tensor, ...] | list[Tensor] | None) -> None:
- r"""
- _foreach_exp_(self: List[Tensor]) -> None
- Apply :func:`torch.exp` to each Tensor of the input list.
- """
- def _foreach_expm1(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- ) -> tuple[Tensor, ...]:
- r"""
- _foreach_expm1(self: List[Tensor]) -> List[Tensor]
- Apply :func:`torch.expm1` to each Tensor of the input list.
- """
- def _foreach_expm1_(self: tuple[Tensor, ...] | list[Tensor] | None) -> None:
- r"""
- _foreach_expm1_(self: List[Tensor]) -> None
- Apply :func:`torch.expm1` to each Tensor of the input list.
- """
- def _foreach_floor(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- ) -> tuple[Tensor, ...]:
- r"""
- _foreach_floor(self: List[Tensor]) -> List[Tensor]
- Apply :func:`torch.floor` to each Tensor of the input list.
- """
- def _foreach_floor_(self: tuple[Tensor, ...] | list[Tensor] | None) -> None:
- r"""
- _foreach_floor_(self: List[Tensor]) -> None
- Apply :func:`torch.floor` to each Tensor of the input list.
- """
- def _foreach_frac(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- ) -> tuple[Tensor, ...]:
- r"""
- _foreach_frac(self: List[Tensor]) -> List[Tensor]
- Apply :func:`torch.frac` to each Tensor of the input list.
- """
- def _foreach_frac_(self: tuple[Tensor, ...] | list[Tensor] | None) -> None:
- r"""
- _foreach_frac_(self: List[Tensor]) -> None
- Apply :func:`torch.frac` to each Tensor of the input list.
- """
- @overload
- def _foreach_lerp(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- tensors1: tuple[Tensor, ...] | list[Tensor] | None,
- weight: Number | _complex,
- ) -> tuple[Tensor, ...]: ...
- @overload
- def _foreach_lerp(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- tensors1: tuple[Tensor, ...] | list[Tensor] | None,
- weight: Sequence[Number | _complex],
- ) -> tuple[Tensor, ...]: ...
- @overload
- def _foreach_lerp(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- tensors1: tuple[Tensor, ...] | list[Tensor] | None,
- weights: tuple[Tensor, ...] | list[Tensor] | None,
- ) -> tuple[Tensor, ...]: ...
- @overload
- def _foreach_lerp_(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- tensors1: tuple[Tensor, ...] | list[Tensor] | None,
- weight: Number | _complex,
- ) -> None: ...
- @overload
- def _foreach_lerp_(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- tensors1: tuple[Tensor, ...] | list[Tensor] | None,
- weight: Sequence[Number | _complex],
- ) -> None: ...
- @overload
- def _foreach_lerp_(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- tensors1: tuple[Tensor, ...] | list[Tensor] | None,
- weights: tuple[Tensor, ...] | list[Tensor] | None,
- ) -> None: ...
- def _foreach_lgamma(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- ) -> tuple[Tensor, ...]:
- r"""
- _foreach_lgamma(self: List[Tensor]) -> List[Tensor]
- Apply :func:`torch.lgamma` to each Tensor of the input list.
- """
- def _foreach_lgamma_(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- ) -> None:
- r"""
- _foreach_lgamma_(self: List[Tensor]) -> None
- Apply :func:`torch.lgamma` to each Tensor of the input list.
- """
- def _foreach_log(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- ) -> tuple[Tensor, ...]:
- r"""
- _foreach_log(self: List[Tensor]) -> List[Tensor]
- Apply :func:`torch.log` to each Tensor of the input list.
- """
- def _foreach_log10(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- ) -> tuple[Tensor, ...]:
- r"""
- _foreach_log10(self: List[Tensor]) -> List[Tensor]
- Apply :func:`torch.log10` to each Tensor of the input list.
- """
- def _foreach_log10_(self: tuple[Tensor, ...] | list[Tensor] | None) -> None:
- r"""
- _foreach_log10_(self: List[Tensor]) -> None
- Apply :func:`torch.log10` to each Tensor of the input list.
- """
- def _foreach_log1p(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- ) -> tuple[Tensor, ...]:
- r"""
- _foreach_log1p(self: List[Tensor]) -> List[Tensor]
- Apply :func:`torch.log1p` to each Tensor of the input list.
- """
- def _foreach_log1p_(self: tuple[Tensor, ...] | list[Tensor] | None) -> None:
- r"""
- _foreach_log1p_(self: List[Tensor]) -> None
- Apply :func:`torch.log1p` to each Tensor of the input list.
- """
- def _foreach_log2(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- ) -> tuple[Tensor, ...]:
- r"""
- _foreach_log2(self: List[Tensor]) -> List[Tensor]
- Apply :func:`torch.log2` to each Tensor of the input list.
- """
- def _foreach_log2_(self: tuple[Tensor, ...] | list[Tensor] | None) -> None:
- r"""
- _foreach_log2_(self: List[Tensor]) -> None
- Apply :func:`torch.log2` to each Tensor of the input list.
- """
- def _foreach_log_(self: tuple[Tensor, ...] | list[Tensor] | None) -> None:
- r"""
- _foreach_log_(self: List[Tensor]) -> None
- Apply :func:`torch.log` to each Tensor of the input list.
- """
- def _foreach_max(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- ) -> tuple[Tensor, ...]: ...
- @overload
- def _foreach_maximum(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- scalars: Sequence[Number | _complex],
- ) -> tuple[Tensor, ...]: ...
- @overload
- def _foreach_maximum(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- scalar: Number | _complex,
- ) -> tuple[Tensor, ...]: ...
- @overload
- def _foreach_maximum(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- other: tuple[Tensor, ...] | list[Tensor] | None,
- ) -> tuple[Tensor, ...]: ...
- @overload
- def _foreach_maximum_(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- scalars: Sequence[Number | _complex],
- ) -> None: ...
- @overload
- def _foreach_maximum_(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- scalar: Number | _complex,
- ) -> None: ...
- @overload
- def _foreach_maximum_(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- other: tuple[Tensor, ...] | list[Tensor] | None,
- ) -> None: ...
- @overload
- def _foreach_minimum(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- scalars: Sequence[Number | _complex],
- ) -> tuple[Tensor, ...]: ...
- @overload
- def _foreach_minimum(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- scalar: Number | _complex,
- ) -> tuple[Tensor, ...]: ...
- @overload
- def _foreach_minimum(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- other: tuple[Tensor, ...] | list[Tensor] | None,
- ) -> tuple[Tensor, ...]: ...
- @overload
- def _foreach_minimum_(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- scalars: Sequence[Number | _complex],
- ) -> None: ...
- @overload
- def _foreach_minimum_(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- scalar: Number | _complex,
- ) -> None: ...
- @overload
- def _foreach_minimum_(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- other: tuple[Tensor, ...] | list[Tensor] | None,
- ) -> None: ...
- @overload
- def _foreach_mul(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- scalars: Sequence[Number | _complex],
- ) -> tuple[Tensor, ...]: ...
- @overload
- def _foreach_mul(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- other: Tensor,
- ) -> tuple[Tensor, ...]: ...
- @overload
- def _foreach_mul(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- scalar: Number | _complex,
- ) -> tuple[Tensor, ...]: ...
- @overload
- def _foreach_mul(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- other: tuple[Tensor, ...] | list[Tensor] | None,
- ) -> tuple[Tensor, ...]: ...
- @overload
- def _foreach_mul_(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- scalars: Sequence[Number | _complex],
- ) -> None: ...
- @overload
- def _foreach_mul_(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- other: Tensor,
- ) -> None: ...
- @overload
- def _foreach_mul_(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- scalar: Number | _complex,
- ) -> None: ...
- @overload
- def _foreach_mul_(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- other: tuple[Tensor, ...] | list[Tensor] | None,
- ) -> None: ...
- def _foreach_neg(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- ) -> tuple[Tensor, ...]:
- r"""
- _foreach_neg(self: List[Tensor]) -> List[Tensor]
- Apply :func:`torch.neg` to each Tensor of the input list.
- """
- def _foreach_neg_(self: tuple[Tensor, ...] | list[Tensor] | None) -> None:
- r"""
- _foreach_neg_(self: List[Tensor]) -> None
- Apply :func:`torch.neg` to each Tensor of the input list.
- """
- def _foreach_norm(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- ord: Number | _complex = 2,
- dtype: _dtype | None = None,
- ) -> tuple[Tensor, ...]: ...
- @overload
- def _foreach_pow(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- exponent: Sequence[Number | _complex],
- ) -> tuple[Tensor, ...]: ...
- @overload
- def _foreach_pow(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- exponent: Number | _complex,
- ) -> tuple[Tensor, ...]: ...
- @overload
- def _foreach_pow(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- exponent: tuple[Tensor, ...] | list[Tensor] | None,
- ) -> tuple[Tensor, ...]: ...
- @overload
- def _foreach_pow(
- self: Number | _complex,
- exponent: tuple[Tensor, ...] | list[Tensor] | None,
- ) -> tuple[Tensor, ...]: ...
- @overload
- def _foreach_pow_(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- exponent: Sequence[Number | _complex],
- ) -> None: ...
- @overload
- def _foreach_pow_(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- exponent: Number | _complex,
- ) -> None: ...
- @overload
- def _foreach_pow_(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- exponent: tuple[Tensor, ...] | list[Tensor] | None,
- ) -> None: ...
- def _foreach_reciprocal(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- ) -> tuple[Tensor, ...]:
- r"""
- _foreach_reciprocal(self: List[Tensor]) -> List[Tensor]
- Apply :func:`torch.reciprocal` to each Tensor of the input list.
- """
- def _foreach_reciprocal_(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- ) -> None:
- r"""
- _foreach_reciprocal_(self: List[Tensor]) -> None
- Apply :func:`torch.reciprocal` to each Tensor of the input list.
- """
- def _foreach_round(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- ) -> tuple[Tensor, ...]:
- r"""
- _foreach_round(self: List[Tensor]) -> List[Tensor]
- Apply :func:`torch.round` to each Tensor of the input list.
- """
- def _foreach_round_(self: tuple[Tensor, ...] | list[Tensor] | None) -> None:
- r"""
- _foreach_round_(self: List[Tensor]) -> None
- Apply :func:`torch.round` to each Tensor of the input list.
- """
- def _foreach_rsqrt(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- ) -> tuple[Tensor, ...]: ...
- def _foreach_rsqrt_(self: tuple[Tensor, ...] | list[Tensor] | None) -> None: ...
- def _foreach_sigmoid(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- ) -> tuple[Tensor, ...]:
- r"""
- _foreach_sigmoid(self: List[Tensor]) -> List[Tensor]
- Apply :func:`torch.sigmoid` to each Tensor of the input list.
- """
- def _foreach_sigmoid_(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- ) -> None:
- r"""
- _foreach_sigmoid_(self: List[Tensor]) -> None
- Apply :func:`torch.sigmoid` to each Tensor of the input list.
- """
- def _foreach_sign(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- ) -> tuple[Tensor, ...]: ...
- def _foreach_sign_(self: tuple[Tensor, ...] | list[Tensor] | None) -> None: ...
- def _foreach_sin(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- ) -> tuple[Tensor, ...]:
- r"""
- _foreach_sin(self: List[Tensor]) -> List[Tensor]
- Apply :func:`torch.sin` to each Tensor of the input list.
- """
- def _foreach_sin_(self: tuple[Tensor, ...] | list[Tensor] | None) -> None:
- r"""
- _foreach_sin_(self: List[Tensor]) -> None
- Apply :func:`torch.sin` to each Tensor of the input list.
- """
- def _foreach_sinh(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- ) -> tuple[Tensor, ...]:
- r"""
- _foreach_sinh(self: List[Tensor]) -> List[Tensor]
- Apply :func:`torch.sinh` to each Tensor of the input list.
- """
- def _foreach_sinh_(self: tuple[Tensor, ...] | list[Tensor] | None) -> None:
- r"""
- _foreach_sinh_(self: List[Tensor]) -> None
- Apply :func:`torch.sinh` to each Tensor of the input list.
- """
- def _foreach_sqrt(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- ) -> tuple[Tensor, ...]:
- r"""
- _foreach_sqrt(self: List[Tensor]) -> List[Tensor]
- Apply :func:`torch.sqrt` to each Tensor of the input list.
- """
- def _foreach_sqrt_(self: tuple[Tensor, ...] | list[Tensor] | None) -> None:
- r"""
- _foreach_sqrt_(self: List[Tensor]) -> None
- Apply :func:`torch.sqrt` to each Tensor of the input list.
- """
- @overload
- def _foreach_sub(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- scalars: Sequence[Number | _complex],
- ) -> tuple[Tensor, ...]: ...
- @overload
- def _foreach_sub(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- other: tuple[Tensor, ...] | list[Tensor] | None,
- *,
- alpha: Number | _complex = 1,
- ) -> tuple[Tensor, ...]: ...
- @overload
- def _foreach_sub(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- scalar: Number | _complex,
- ) -> tuple[Tensor, ...]: ...
- @overload
- def _foreach_sub_(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- scalars: Sequence[Number | _complex],
- ) -> None: ...
- @overload
- def _foreach_sub_(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- other: tuple[Tensor, ...] | list[Tensor] | None,
- *,
- alpha: Number | _complex = 1,
- ) -> None: ...
- @overload
- def _foreach_sub_(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- scalar: Number | _complex,
- ) -> None: ...
- def _foreach_tan(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- ) -> tuple[Tensor, ...]:
- r"""
- _foreach_tan(self: List[Tensor]) -> List[Tensor]
- Apply :func:`torch.tan` to each Tensor of the input list.
- """
- def _foreach_tan_(self: tuple[Tensor, ...] | list[Tensor] | None) -> None:
- r"""
- _foreach_tan_(self: List[Tensor]) -> None
- Apply :func:`torch.tan` to each Tensor of the input list.
- """
- def _foreach_tanh(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- ) -> tuple[Tensor, ...]:
- r"""
- _foreach_tanh(self: List[Tensor]) -> List[Tensor]
- Apply :func:`torch.tanh` to each Tensor of the input list.
- """
- def _foreach_tanh_(self: tuple[Tensor, ...] | list[Tensor] | None) -> None:
- r"""
- _foreach_tanh_(self: List[Tensor]) -> None
- Apply :func:`torch.tanh` to each Tensor of the input list.
- """
- def _foreach_trunc(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- ) -> tuple[Tensor, ...]:
- r"""
- _foreach_trunc(self: List[Tensor]) -> List[Tensor]
- Apply :func:`torch.trunc` to each Tensor of the input list.
- """
- def _foreach_trunc_(self: tuple[Tensor, ...] | list[Tensor] | None) -> None:
- r"""
- _foreach_trunc_(self: List[Tensor]) -> None
- Apply :func:`torch.trunc` to each Tensor of the input list.
- """
- def _foreach_zero_(self: tuple[Tensor, ...] | list[Tensor] | None) -> None:
- r"""
- _foreach_zero_(self: List[Tensor]) -> None
- Apply :func:`torch.zero` to each Tensor of the input list.
- """
- def _from_functional_tensor(t: Tensor) -> Tensor: ...
- def _functional_assert_async(
- input: Tensor,
- assert_msg: str,
- dep_token: Tensor,
- ) -> Tensor: ...
- def _functional_assert_scalar(
- self: Number | _complex,
- assert_msg: str,
- dep_token: Tensor,
- ) -> Tensor: ...
- def _functional_sym_constrain_range(
- size: Number | _complex,
- min: _int | None,
- max: _int | None,
- dep_token: Tensor,
- ) -> Tensor: ...
- def _functional_sym_constrain_range_for_size(
- size: Number | _complex,
- min: _int | None,
- max: _int | None,
- dep_token: Tensor,
- ) -> Tensor: ...
- def _functionalize_apply_view_metas(tensor: Tensor, base: Tensor) -> Tensor: ...
- def _functionalize_are_all_mutations_hidden_from_autograd(
- t: Tensor,
- ) -> _bool: ...
- def _functionalize_are_all_mutations_under_no_grad_or_inference_mode(
- t: Tensor,
- ) -> _bool: ...
- def _functionalize_commit_update(t: Tensor) -> None: ...
- def _functionalize_has_metadata_mutation(tensor: Tensor) -> _bool: ...
- def _functionalize_inductor_storage_resized_counter(t: Tensor) -> _int: ...
- def _functionalize_is_symbolic(tensor: Tensor) -> _bool: ...
- def _functionalize_mark_mutation_hidden_from_autograd(t: Tensor) -> None: ...
- def _functionalize_mark_storage_changed(tensor: Tensor) -> _bool: ...
- def _functionalize_mutation_counter(t: Tensor) -> _int: ...
- def _functionalize_replace(self_: Tensor, other: Tensor) -> None: ...
- def _functionalize_storage_changed_counter(t: Tensor) -> _int: ...
- def _functionalize_sync(t: Tensor) -> None: ...
- def _functionalize_unsafe_set(dst: Tensor, src: Tensor) -> None: ...
- def _functionalize_was_inductor_storage_resized(t: Tensor) -> _bool: ...
- def _functionalize_was_storage_changed(tensor: Tensor) -> _bool: ...
- @overload
- def _fused_adagrad_(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- grads: tuple[Tensor, ...] | list[Tensor] | None,
- state_sums: tuple[Tensor, ...] | list[Tensor] | None,
- state_steps: tuple[Tensor, ...] | list[Tensor] | None,
- *,
- lr: Tensor,
- lr_decay: _float,
- weight_decay: _float,
- eps: _float,
- maximize: _bool,
- grad_scale: Tensor | None = None,
- found_inf: Tensor | None = None,
- ) -> None: ...
- @overload
- def _fused_adagrad_(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- grads: tuple[Tensor, ...] | list[Tensor] | None,
- state_sums: tuple[Tensor, ...] | list[Tensor] | None,
- state_steps: tuple[Tensor, ...] | list[Tensor] | None,
- *,
- lr: _float,
- lr_decay: _float,
- weight_decay: _float,
- eps: _float,
- maximize: _bool,
- grad_scale: Tensor | None = None,
- found_inf: Tensor | None = None,
- ) -> None: ...
- @overload
- def _fused_adam_(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- grads: tuple[Tensor, ...] | list[Tensor] | None,
- exp_avgs: tuple[Tensor, ...] | list[Tensor] | None,
- exp_avg_sqs: tuple[Tensor, ...] | list[Tensor] | None,
- max_exp_avg_sqs: tuple[Tensor, ...] | list[Tensor] | None,
- state_steps: tuple[Tensor, ...] | list[Tensor] | None,
- *,
- lr: Tensor,
- beta1: _float,
- beta2: _float,
- weight_decay: _float,
- eps: _float,
- amsgrad: _bool,
- maximize: _bool,
- grad_scale: Tensor | None = None,
- found_inf: Tensor | None = None,
- ) -> None: ...
- @overload
- def _fused_adam_(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- grads: tuple[Tensor, ...] | list[Tensor] | None,
- exp_avgs: tuple[Tensor, ...] | list[Tensor] | None,
- exp_avg_sqs: tuple[Tensor, ...] | list[Tensor] | None,
- max_exp_avg_sqs: tuple[Tensor, ...] | list[Tensor] | None,
- state_steps: tuple[Tensor, ...] | list[Tensor] | None,
- *,
- lr: _float,
- beta1: _float,
- beta2: _float,
- weight_decay: _float,
- eps: _float,
- amsgrad: _bool,
- maximize: _bool,
- grad_scale: Tensor | None = None,
- found_inf: Tensor | None = None,
- ) -> None: ...
- @overload
- def _fused_adamw_(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- grads: tuple[Tensor, ...] | list[Tensor] | None,
- exp_avgs: tuple[Tensor, ...] | list[Tensor] | None,
- exp_avg_sqs: tuple[Tensor, ...] | list[Tensor] | None,
- max_exp_avg_sqs: tuple[Tensor, ...] | list[Tensor] | None,
- state_steps: tuple[Tensor, ...] | list[Tensor] | None,
- *,
- lr: Tensor,
- beta1: _float,
- beta2: _float,
- weight_decay: _float,
- eps: _float,
- amsgrad: _bool,
- maximize: _bool,
- grad_scale: Tensor | None = None,
- found_inf: Tensor | None = None,
- ) -> None: ...
- @overload
- def _fused_adamw_(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- grads: tuple[Tensor, ...] | list[Tensor] | None,
- exp_avgs: tuple[Tensor, ...] | list[Tensor] | None,
- exp_avg_sqs: tuple[Tensor, ...] | list[Tensor] | None,
- max_exp_avg_sqs: tuple[Tensor, ...] | list[Tensor] | None,
- state_steps: tuple[Tensor, ...] | list[Tensor] | None,
- *,
- lr: _float,
- beta1: _float,
- beta2: _float,
- weight_decay: _float,
- eps: _float,
- amsgrad: _bool,
- maximize: _bool,
- grad_scale: Tensor | None = None,
- found_inf: Tensor | None = None,
- ) -> None: ...
- def _fused_dropout(
- input: Tensor,
- p: _float,
- generator: Generator | None = None,
- ) -> tuple[Tensor, Tensor]: ...
- def _fused_moving_avg_obs_fq_helper(
- input: Tensor,
- observer_on: Tensor,
- fake_quant_on: Tensor,
- running_min: Tensor,
- running_max: Tensor,
- scale: Tensor,
- zero_point: Tensor,
- averaging_const: _float,
- quant_min: _int,
- quant_max: _int,
- ch_axis: _int,
- per_row_fake_quant: _bool = False,
- symmetric_quant: _bool = False,
- ) -> torch.return_types._fused_moving_avg_obs_fq_helper: ...
- def _fused_rms_norm(
- input: Tensor,
- normalized_shape: _size,
- weight: Tensor | None,
- eps: _float | None,
- ) -> tuple[Tensor, Tensor]: ...
- def _fused_sdp_choice(
- query: Tensor,
- key: Tensor,
- value: Tensor,
- attn_mask: Tensor | None = None,
- dropout_p: _float = 0.0,
- is_causal: _bool = False,
- *,
- scale: _float | None = None,
- enable_gqa: _bool = False,
- ) -> _int: ...
- @overload
- def _fused_sgd_(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- grads: tuple[Tensor, ...] | list[Tensor] | None,
- momentum_buffer_list: tuple[Tensor, ...] | list[Tensor] | None,
- *,
- weight_decay: _float,
- momentum: _float,
- lr: Tensor,
- dampening: _float,
- nesterov: _bool,
- maximize: _bool,
- is_first_step: _bool,
- grad_scale: Tensor | None = None,
- found_inf: Tensor | None = None,
- ) -> None: ...
- @overload
- def _fused_sgd_(
- self: tuple[Tensor, ...] | list[Tensor] | None,
- grads: tuple[Tensor, ...] | list[Tensor] | None,
- momentum_buffer_list: tuple[Tensor, ...] | list[Tensor] | None,
- *,
- weight_decay: _float,
- momentum: _float,
- lr: _float,
- dampening: _float,
- nesterov: _bool,
- maximize: _bool,
- is_first_step: _bool,
- grad_scale: Tensor | None = None,
- found_inf: Tensor | None = None,
- ) -> None: ...
- def _fw_primal_copy(
- input: Tensor,
- level: _int,
- *,
- out: Tensor | None = None,
- ) -> Tensor: ...
- def _grid_sampler_2d_cpu_fallback(
- input: Tensor,
- grid: Tensor,
- interpolation_mode: _int,
- padding_mode: _int,
- align_corners: _bool,
- ) -> Tensor: ...
- def _grouped_mm(
- input: Tensor,
- mat2: Tensor,
- offs: Tensor | None = None,
- bias: Tensor | None = None,
- out_dtype: _dtype | None = None,
- ) -> Tensor: ...
- def _has_compatible_shallow_copy_type(
- input: Tensor,
- from_: Tensor,
- ) -> _bool: ...
- def _histogramdd_bin_edges(
- input: Tensor,
- bins: _size,
- *,
- range: Sequence[_float] | None = None,
- weight: Tensor | None = None,
- density: _bool = False,
- ) -> tuple[Tensor, ...]: ...
- def _histogramdd_from_bin_cts(
- input: Tensor,
- bins: _size,
- *,
- range: Sequence[_float] | None = None,
- weight: Tensor | None = None,
- density: _bool = False,
- ) -> Tensor: ...
- def _histogramdd_from_bin_tensors(
- input: Tensor,
- bins: tuple[Tensor, ...] | list[Tensor] | None,
- *,
- weight: Tensor | None = None,
- density: _bool = False,
- ) -> Tensor: ...
- def _index_put_impl_(
- input: Tensor,
- indices: tuple[Tensor, ...] | list[Tensor] | None,
- values: Tensor,
- accumulate: _bool = False,
- unsafe: _bool = False,
- ) -> Tensor: ...
- def _indices_copy(input: Tensor, *, out: Tensor | None = None) -> Tensor: ...
- def _int_mm(
- input: Tensor,
- mat2: Tensor,
- *,
- out: Tensor | None = None,
- ) -> Tensor: ...
- def _is_all_true(input: Tensor) -> Tensor: ...
- def _is_any_true(input: Tensor) -> Tensor: ...
- def _is_functional_tensor(t: Tensor) -> _bool: ...
- def _is_functional_tensor_base(t: Tensor) -> _bool: ...
- def _is_zerotensor(input: Tensor) -> _bool: ...
- def _lazy_clone(input: Tensor) -> Tensor: ...
- def _linalg_check_errors(
- info: Tensor,
- api_name: str,
- *,
- is_matrix: _bool,
- ) -> None: ...
- def _linalg_det(
- A: Tensor,
- *,
- out: Tensor | tuple[Tensor, ...] | list[Tensor] | None = None,
- ) -> torch.return_types._linalg_det: ...
- def _linalg_eigh(
- A: Tensor,
- UPLO: str = "L",
- compute_v: _bool = True,
- *,
- out: Tensor | tuple[Tensor, ...] | list[Tensor] | None = None,
- ) -> torch.return_types._linalg_eigh: ...
- def _linalg_slogdet(
- A: Tensor,
- *,
- out: Tensor | tuple[Tensor, ...] | list[Tensor] | None = None,
- ) -> torch.return_types._linalg_slogdet: ...
- def _linalg_solve_ex(
- A: Tensor,
- B: Tensor,
- *,
- left: _bool = True,
- check_errors: _bool = False,
- out: Tensor | tuple[Tensor, ...] | list[Tensor] | None = None,
- ) -> torch.return_types._linalg_solve_ex: ...
- def _linalg_svd(
- A: Tensor,
- full_matrices: _bool = False,
- compute_uv: _bool = True,
- *,
- driver: str | None = None,
- out: Tensor | tuple[Tensor, ...] | list[Tensor] | None = None,
- ) -> torch.return_types._linalg_svd: ...
- def _log_softmax(
- input: Tensor,
- dim: _int,
- half_to_float: _bool,
- *,
- out: Tensor | None = None,
- ) -> Tensor: ...
- def _log_softmax_backward_data(
- grad_output: Tensor,
- output: Tensor,
- dim: _int,
- input_dtype: _dtype,
- *,
- out: Tensor | None = None,
- ) -> Tensor: ...
- def _logcumsumexp(
- input: Tensor,
- dim: _int,
- *,
- out: Tensor | None = None,
- ) -> Tensor: ...
- def _lstm_mps(
- input: Tensor,
- hx: tuple[Tensor, ...] | list[Tensor] | None,
- params: tuple[Tensor, ...] | list[Tensor] | None,
- has_biases: _bool,
- num_layers: _int,
- dropout: _float,
- train: _bool,
- bidirectional: _bool,
- batch_first: _bool,
- ) -> tuple[Tensor, Tensor, Tensor, Tensor, Tensor, Tensor]: ...
- def _lu_with_info(
- input: Tensor,
- pivot: _bool = True,
- check_errors: _bool = True,
- ) -> torch.return_types._lu_with_info: ...
- def _make_dep_token(
- *,
- memory_format: memory_format | None = None,
- dtype: _dtype | None = None,
- layout: _layout | None = None,
- device: DeviceLikeType | None = None,
- pin_memory: _bool | None = False,
- requires_grad: _bool | None = False,
- ) -> Tensor: ...
- def _make_dual(primal: Tensor, tangent: Tensor, level: _int) -> Tensor: ...
- def _make_dual_copy(
- primal: Tensor,
- tangent: Tensor,
- level: _int,
- *,
- out: Tensor | None = None,
- ) -> Tensor: ...
- def _make_per_channel_quantized_tensor(
- input: Tensor,
- scale: Tensor,
- zero_point: Tensor,
- axis: _int,
- ) -> Tensor: ...
- def _make_per_tensor_quantized_tensor(
- input: Tensor,
- scale: _float,
- zero_point: _int,
- ) -> Tensor: ...
- def _masked_scale(input: Tensor, mask: Tensor, scale: _float) -> Tensor: ...
- def _masked_softmax(
- input: Tensor,
- mask: Tensor,
- dim: _int | None = None,
- mask_type: _int | None = None,
- ) -> Tensor: ...
- def _mixed_dtypes_linear(
- input: Tensor,
- weight: Tensor,
- scale: Tensor,
- *,
- bias: Tensor | None = None,
- activation: str | None = None,
- ) -> Tensor: ...
- def _mkldnn_reshape(input: Tensor, shape: _size) -> Tensor: ...
- def _mkldnn_transpose(input: Tensor, dim0: _int, dim1: _int) -> Tensor: ...
- def _mkldnn_transpose_(input: Tensor, dim0: _int, dim1: _int) -> Tensor: ...
- def _mps_convolution(
- input: Tensor,
- weight: Tensor,
- bias: Tensor | None,
- padding: Sequence[_int | SymInt],
- stride: Sequence[_int | SymInt],
- dilation: Sequence[_int | SymInt],
- groups: _int | SymInt,
- ) -> Tensor: ...
- def _mps_convolution_transpose(
- input: Tensor,
- weight: Tensor,
- padding: Sequence[_int | SymInt],
- output_padding: Sequence[_int | SymInt],
- stride: Sequence[_int | SymInt],
- dilation: Sequence[_int | SymInt],
- groups: _int | SymInt,
- ) -> Tensor: ...
- @overload
- def _native_batch_norm_legit(
- input: Tensor,
- weight: Tensor | None,
- bias: Tensor | None,
- running_mean: Tensor,
- running_var: Tensor,
- training: _bool,
- momentum: _float,
- eps: _float,
- *,
- out: Tensor | tuple[Tensor, ...] | list[Tensor] | None = None,
- ) -> tuple[Tensor, Tensor, Tensor]: ...
- @overload
- def _native_batch_norm_legit(
- input: Tensor,
- weight: Tensor | None,
- bias: Tensor | None,
- training: _bool,
- momentum: _float,
- eps: _float,
- *,
- out: Tensor | tuple[Tensor, ...] | list[Tensor] | None = None,
- ) -> tuple[Tensor, Tensor, Tensor]: ...
- def _native_batch_norm_legit_no_training(
- input: Tensor,
- weight: Tensor | None,
- bias: Tensor | None,
- running_mean: Tensor,
- running_var: Tensor,
- momentum: _float,
- eps: _float,
- ) -> tuple[Tensor, Tensor, Tensor]: ...
- def _native_multi_head_attention(
- query: Tensor,
- key: Tensor,
- value: Tensor,
- embed_dim: _int,
- num_head: _int,
- qkv_weight: Tensor,
- qkv_bias: Tensor,
- proj_weight: Tensor,
- proj_bias: Tensor,
- mask: Tensor | None = None,
- need_weights: _bool = True,
- average_attn_weights: _bool = True,
- mask_type: _int | None = None,
- ) -> tuple[Tensor, Tensor]: ...
- def _neg_view(input: Tensor) -> Tensor: ...
- def _neg_view_copy(input: Tensor, *, out: Tensor | None = None) -> Tensor: ...
- def _nested_compute_contiguous_strides_offsets(
- nested_size: Tensor,
- ) -> tuple[Tensor, Tensor]: ...
- def _nested_from_padded(
- padded: Tensor,
- cpu_nested_shape_example: Tensor,
- fuse_transform_0213: _bool = False,
- ) -> Tensor: ...
- def _nested_from_padded_and_nested_example(
- padded: Tensor,
- nt_example: Tensor,
- ) -> Tensor: ...
- def _nested_from_padded_tensor(
- padded: Tensor,
- offsets: Tensor,
- dummy: Tensor,
- ragged_idx: _int = 1,
- min_seqlen: Tensor | None = None,
- max_seqlen: Tensor | None = None,
- sum_S: _int | SymInt | None = None,
- ) -> Tensor: ...
- def _nested_get_jagged_dummy(any: Tensor) -> Tensor: ...
- def _nested_get_lengths(input: Tensor) -> Tensor: ...
- def _nested_get_max_seqlen(input: Tensor) -> Tensor: ...
- def _nested_get_min_seqlen(input: Tensor) -> Tensor: ...
- def _nested_get_offsets(input: Tensor) -> Tensor: ...
- def _nested_get_ragged_idx(input: Tensor) -> _int: ...
- def _nested_get_values(input: Tensor) -> Tensor: ...
- def _nested_get_values_copy(
- input: Tensor,
- *,
- out: Tensor | None = None,
- ) -> Tensor: ...
- def _nested_tensor_from_mask(
- t: Tensor,
- mask: Tensor,
- mask_check: _bool = True,
- ) -> Tensor: ...
- def _nested_tensor_from_mask_left_aligned(t: Tensor, mask: Tensor) -> _bool: ...
- def _nested_tensor_from_tensor_list(
- list: tuple[Tensor, ...] | list[Tensor] | None,
- dtype: _dtype | None = None,
- layout: _layout | None = None,
- device: DeviceLikeType | None = None,
- pin_memory: _bool | None = None,
- ) -> Tensor: ...
- def _nested_tensor_softmax_with_shape(
- input: Tensor,
- query: Tensor,
- ) -> Tensor: ...
- def _nested_view_from_buffer(
- input: Tensor,
- nested_size: Tensor,
- nested_strides: Tensor,
- offsets: Tensor,
- ) -> Tensor: ...
- def _nested_view_from_buffer_copy(
- input: Tensor,
- nested_size: Tensor,
- nested_strides: Tensor,
- offsets: Tensor,
- *,
- out: Tensor | None = None,
- ) -> Tensor: ...
- def _nested_view_from_jagged(
- input: Tensor,
- offsets: Tensor,
- dummy: Tensor,
- lengths: Tensor | None = None,
- ragged_idx: _int = 1,
- min_seqlen: Tensor | None = None,
- max_seqlen: Tensor | None = None,
- ) -> Tensor: ...
- def _nested_view_from_jagged_copy(
- input: Tensor,
- offsets: Tensor,
- dummy: Tensor,
- lengths: Tensor | None = None,
- ragged_idx: _int = 1,
- min_seqlen: Tensor | None = None,
- max_seqlen: Tensor | None = None,
- *,
- out: Tensor | None = None,
- ) -> Tensor: ...
- def _nnpack_available() -> _bool: ...
- def _nnpack_spatial_convolution(
- input: Tensor,
- weight: Tensor,
- bias: Tensor | None,
- padding: _int | SymInt | Sequence[_int | SymInt],
- stride: _int | SymInt | Sequence[_int | SymInt] = 1,
- ) -> Tensor: ...
- def _pack_padded_sequence(
- input: Tensor,
- lengths: Tensor,
- batch_first: _bool,
- ) -> tuple[Tensor, Tensor]: ...
- def _pad_packed_sequence(
- data: Tensor,
- batch_sizes: Tensor,
- batch_first: _bool,
- padding_value: Number | _complex,
- total_length: _int,
- ) -> tuple[Tensor, Tensor]: ...
- def _pin_memory(
- input: Tensor,
- device: DeviceLikeType | None = None,
- ) -> Tensor: ...
- def _prelu_kernel(input: Tensor, weight: Tensor) -> Tensor: ...
- def _print(s: str) -> None: ...
- def _propagate_xla_data(input: Tensor, output: Tensor) -> None: ...
- def _remove_batch_dim(
- input: Tensor,
- level: _int,
- batch_size: _int | SymInt,
- out_dim: _int,
- ) -> Tensor: ...
- def _reshape_alias_copy(
- input: Tensor,
- size: Sequence[_int | SymInt],
- stride: Sequence[_int | SymInt],
- *,
- out: Tensor | None = None,
- ) -> Tensor: ...
- def _reshape_from_tensor(input: Tensor, shape: Tensor) -> Tensor: ...
- def _resize_output_(
- input: Tensor,
- size: Sequence[_int | SymInt],
- device: DeviceLikeType | None,
- ) -> Tensor: ...
- def _rowwise_prune(
- weight: Tensor,
- mask: Tensor,
- compressed_indices_dtype: _dtype,
- ) -> tuple[Tensor, Tensor]: ...
- def _safe_softmax(
- input: Tensor,
- dim: _int,
- dtype: _dtype | None = None,
- ) -> Tensor: ...
- def _sample_dirichlet(
- input: Tensor,
- generator: Generator | None = None,
- ) -> Tensor: ...
- def _saturate_weight_to_fp16(weight: Tensor) -> Tensor: ...
- def _scaled_dot_product_attention_math(
- query: Tensor,
- key: Tensor,
- value: Tensor,
- attn_mask: Tensor | None = None,
- dropout_p: _float = 0.0,
- is_causal: _bool = False,
- dropout_mask: Tensor | None = None,
- *,
- scale: _float | None = None,
- enable_gqa: _bool = False,
- ) -> tuple[Tensor, Tensor]: ...
- def _scaled_dot_product_attention_math_for_mps(
- query: Tensor,
- key: Tensor,
- value: Tensor,
- attn_mask: Tensor | None = None,
- dropout_p: _float = 0.0,
- is_causal: _bool = False,
- dropout_mask: Tensor | None = None,
- *,
- scale: _float | None = None,
- ) -> tuple[Tensor, Tensor]: ...
- def _scaled_dot_product_cudnn_attention(
- query: Tensor,
- key: Tensor,
- value: Tensor,
- attn_bias: Tensor | None,
- compute_log_sumexp: _bool,
- dropout_p: _float = 0.0,
- is_causal: _bool = False,
- return_debug_mask: _bool = False,
- *,
- scale: _float | None = None,
- ) -> torch.return_types._scaled_dot_product_cudnn_attention: ...
- def _scaled_dot_product_efficient_attention(
- query: Tensor,
- key: Tensor,
- value: Tensor,
- attn_bias: Tensor | None,
- compute_log_sumexp: _bool,
- dropout_p: _float = 0.0,
- is_causal: _bool = False,
- *,
- scale: _float | None = None,
- ) -> torch.return_types._scaled_dot_product_efficient_attention: ...
- def _scaled_dot_product_flash_attention(
- query: Tensor,
- key: Tensor,
- value: Tensor,
- dropout_p: _float = 0.0,
- is_causal: _bool = False,
- return_debug_mask: _bool = False,
- *,
- scale: _float | None = None,
- ) -> torch.return_types._scaled_dot_product_flash_attention: ...
- def _scaled_dot_product_flash_attention_for_cpu(
- query: Tensor,
- key: Tensor,
- value: Tensor,
- dropout_p: _float = 0.0,
- is_causal: _bool = False,
- *,
- attn_mask: Tensor | None = None,
- scale: _float | None = None,
- ) -> torch.return_types._scaled_dot_product_flash_attention_for_cpu: ...
- def _scaled_grouped_mm(
- input: Tensor,
- mat2: Tensor,
- scale_a: Tensor,
- scale_b: Tensor,
- offs: Tensor | None = None,
- bias: Tensor | None = None,
- scale_result: Tensor | None = None,
- out_dtype: _dtype | None = None,
- use_fast_accum: _bool = False,
- ) -> Tensor: ...
- def _scaled_mm(
- input: Tensor,
- mat2: Tensor,
- scale_a: Tensor,
- scale_b: Tensor,
- bias: Tensor | None = None,
- scale_result: Tensor | None = None,
- out_dtype: _dtype | None = None,
- use_fast_accum: _bool = False,
- *,
- out: Tensor | None = None,
- ) -> Tensor: ...
- def _shape_as_tensor(input: Tensor) -> Tensor: ...
- def _sobol_engine_draw(
- quasi: Tensor,
- n: _int,
- sobolstate: Tensor,
- dimension: _int,
- num_generated: _int,
- dtype: _dtype | None,
- ) -> tuple[Tensor, Tensor]: ...
- def _sobol_engine_ff_(
- input: Tensor,
- n: _int,
- sobolstate: Tensor,
- dimension: _int,
- num_generated: _int,
- ) -> Tensor: ...
- def _sobol_engine_initialize_state_(
- input: Tensor,
- dimension: _int,
- ) -> Tensor: ...
- def _sobol_engine_scramble_(
- input: Tensor,
- ltm: Tensor,
- dimension: _int,
- ) -> Tensor: ...
- def _softmax(
- input: Tensor,
- dim: _int,
- half_to_float: _bool,
- *,
- out: Tensor | None = None,
- ) -> Tensor: ...
- def _softmax_backward_data(
- grad_output: Tensor,
- output: Tensor,
- dim: _int,
- input_dtype: _dtype,
- *,
- grad_input: Tensor | None = None,
- ) -> Tensor: ...
- def _sparse_broadcast_to(input: Tensor, size: _size) -> Tensor: ...
- def _sparse_broadcast_to_copy(
- input: Tensor,
- size: _size,
- *,
- out: Tensor | None = None,
- ) -> Tensor: ...
- def _sparse_csr_prod(
- input: Tensor,
- dim: _int | _size,
- keepdim: _bool = False,
- *,
- dtype: _dtype | None = None,
- ) -> Tensor: ...
- def _sparse_csr_sum(
- input: Tensor,
- dim: _int | _size,
- keepdim: _bool = False,
- *,
- dtype: _dtype | None = None,
- ) -> Tensor: ...
- def _sparse_log_softmax_backward_data(
- grad_output: Tensor,
- output: Tensor,
- dim: _int,
- input: Tensor,
- ) -> Tensor: ...
- def _sparse_semi_structured_addmm(
- input: Tensor,
- mat1: Tensor,
- mat1_meta: Tensor,
- mat2: Tensor,
- *,
- alpha: Number | _complex = 1,
- beta: Number | _complex = 1,
- out_dtype: _dtype | None = None,
- ) -> Tensor: ...
- def _sparse_semi_structured_apply(
- input: Tensor,
- thread_masks: Tensor,
- ) -> tuple[Tensor, Tensor]: ...
- def _sparse_semi_structured_apply_dense(
- input: Tensor,
- thread_masks: Tensor,
- ) -> Tensor: ...
- def _sparse_semi_structured_linear(
- input: Tensor,
- weight: Tensor,
- meta: Tensor,
- *,
- bias: Tensor | None = None,
- activation: str | None = None,
- out_dtype: _dtype | None = None,
- ) -> Tensor: ...
- def _sparse_semi_structured_mm(
- mat1: Tensor,
- mat1_meta: Tensor,
- mat2: Tensor,
- *,
- out_dtype: _dtype | None = None,
- ) -> Tensor: ...
- def _sparse_semi_structured_tile(
- input: Tensor,
- algorithm: str = "",
- use_cutlass: _bool = True,
- ) -> tuple[Tensor, Tensor, Tensor, Tensor, Tensor]: ...
- def _sparse_softmax_backward_data(
- grad_output: Tensor,
- output: Tensor,
- dim: _int,
- input: Tensor,
- ) -> Tensor: ...
- def _sparse_sparse_matmul(input: Tensor, other: Tensor) -> Tensor: ...
- @overload
- def _sparse_sum(input: Tensor) -> Tensor: ...
- @overload
- def _sparse_sum(input: Tensor, *, dtype: _dtype) -> Tensor: ...
- @overload
- def _sparse_sum(input: Tensor, dim: _int | _size) -> Tensor: ...
- @overload
- def _sparse_sum(
- input: Tensor,
- dim: _int | _size,
- *,
- dtype: _dtype,
- ) -> Tensor: ...
- def _stack(
- tensors: tuple[Tensor, ...] | list[Tensor] | None,
- dim: _int = 0,
- *,
- out: Tensor | None = None,
- ) -> Tensor: ...
- def _standard_gamma(
- input: Tensor,
- generator: Generator | None = None,
- ) -> Tensor: ...
- def _standard_gamma_grad(input: Tensor, output: Tensor) -> Tensor: ...
- def _sync(t: Tensor) -> None: ...
- @overload
- def _test_autograd_multiple_dispatch(input: Tensor) -> Tensor: ...
- @overload
- def _test_autograd_multiple_dispatch(input: Tensor, b: _bool) -> Tensor: ...
- def _test_autograd_multiple_dispatch_view(input: Tensor) -> Tensor: ...
- def _test_autograd_multiple_dispatch_view_copy(
- input: Tensor,
- *,
- out: Tensor | None = None,
- ) -> Tensor: ...
- def _test_check_tensor(input: Tensor) -> Tensor: ...
- def _test_functorch_fallback(input: Tensor, other: Tensor) -> Tensor: ...
- def _test_parallel_materialize(
- input: Tensor,
- num_parallel: _int,
- skip_first: _bool = False,
- ) -> Tensor: ...
- def _test_serialization_subcmul(
- input: Tensor,
- other: Tensor,
- alpha: Number | _complex = 1,
- ) -> Tensor: ...
- def _to_cpu(
- tensors: tuple[Tensor, ...] | list[Tensor] | None,
- ) -> tuple[Tensor, ...]: ...
- def _to_functional_tensor(t: Tensor) -> Tensor: ...
- def _to_sparse_semi_structured(dense: Tensor) -> tuple[Tensor, Tensor]: ...
- def _transform_bias_rescale_qkv(
- qkv: Tensor,
- qkv_bias: Tensor,
- num_heads: _int,
- ) -> tuple[Tensor, Tensor, Tensor]: ...
- def _transformer_encoder_layer_fwd(
- src: Tensor,
- embed_dim: _int,
- num_heads: _int,
- qkv_weight: Tensor,
- qkv_bias: Tensor,
- proj_weight: Tensor,
- proj_bias: Tensor,
- use_gelu: _bool,
- norm_first: _bool,
- eps: _float,
- norm_weight_1: Tensor,
- norm_bias_1: Tensor,
- norm_weight_2: Tensor,
- norm_bias_2: Tensor,
- ffn_weight_1: Tensor,
- ffn_bias_1: Tensor,
- ffn_weight_2: Tensor,
- ffn_bias_2: Tensor,
- mask: Tensor | None = None,
- mask_type: _int | None = None,
- ) -> Tensor: ...
- def _trilinear(
- i1: Tensor,
- i2: Tensor,
- i3: Tensor,
- expand1: _size,
- expand2: _size,
- expand3: _size,
- sumdim: _size,
- unroll_dim: _int = 1,
- ) -> Tensor: ...
- def _triton_multi_head_attention(
- query: Tensor,
- key: Tensor,
- value: Tensor,
- embed_dim: _int,
- num_head: _int,
- qkv_weight: Tensor,
- qkv_bias: Tensor,
- proj_weight: Tensor,
- proj_bias: Tensor,
- mask: Tensor | None = None,
- ) -> Tensor: ...
- def _triton_scaled_dot_attention(
- q: Tensor,
- k: Tensor,
- v: Tensor,
- dropout_p: _float = 0.0,
- ) -> Tensor: ...
- def _unique(
- input: Tensor,
- sorted: _bool = True,
- return_inverse: _bool = False,
- ) -> tuple[Tensor, Tensor]: ...
- def _unique2(
- input: Tensor,
- sorted: _bool = True,
- return_inverse: _bool = False,
- return_counts: _bool = False,
- ) -> tuple[Tensor, Tensor, Tensor]: ...
- def _unpack_dual(
- dual: Tensor,
- level: _int,
- ) -> torch.return_types._unpack_dual: ...
- def _unsafe_index(
- input: Tensor,
- indices: tuple[Tensor, ...] | list[Tensor] | None,
- ) -> Tensor: ...
- def _unsafe_index_put(
- input: Tensor,
- indices: tuple[Tensor, ...] | list[Tensor] | None,
- values: Tensor,
- accumulate: _bool = False,
- ) -> Tensor: ...
- def _unsafe_masked_index(
- input: Tensor,
- mask: Tensor,
- indices: tuple[Tensor, ...] | list[Tensor] | None,
- fill: Number | _complex,
- ) -> Tensor: ...
- def _unsafe_masked_index_put_accumulate(
- input: Tensor,
- mask: Tensor,
- indices: tuple[Tensor, ...] | list[Tensor] | None,
- values: Tensor,
- ) -> Tensor: ...
- @overload
- def _use_cudnn_ctc_loss(
- log_probs: Tensor,
- targets: Tensor,
- input_lengths: Tensor,
- target_lengths: Tensor,
- blank: _int,
- ) -> _bool: ...
- @overload
- def _use_cudnn_ctc_loss(
- log_probs: Tensor,
- targets: Tensor,
- input_lengths: _size,
- target_lengths: _size,
- blank: _int,
- ) -> _bool: ...
- def _use_cudnn_rnn_flatten_weight() -> _bool: ...
- def _validate_compressed_sparse_indices(
- is_crow: _bool,
- compressed_idx: Tensor,
- plain_idx: Tensor,
- cdim: _int,
- dim: _int,
- nnz: _int,
- ) -> None: ...
- def _validate_sparse_bsc_tensor_args(
- ccol_indices: Tensor,
- row_indices: Tensor,
- values: Tensor,
- size: _size,
- check_pinning: _bool | None = None,
- ) -> None: ...
- def _validate_sparse_bsr_tensor_args(
- crow_indices: Tensor,
- col_indices: Tensor,
- values: Tensor,
- size: _size,
- check_pinning: _bool | None = None,
- ) -> None: ...
- def _validate_sparse_compressed_tensor_args(
- compressed_indices: Tensor,
- plain_indices: Tensor,
- values: Tensor,
- size: _size,
- layout: _layout,
- check_pinning: _bool | None = None,
- ) -> None: ...
- def _validate_sparse_coo_tensor_args(
- indices: Tensor,
- values: Tensor,
- size: _size,
- is_coalesced: _bool | None = None,
- check_pinning: _bool | None = None,
- ) -> None: ...
- def _validate_sparse_csc_tensor_args(
- ccol_indices: Tensor,
- row_indices: Tensor,
- values: Tensor,
- size: _size,
- check_pinning: _bool | None = None,
- ) -> None: ...
- def _validate_sparse_csr_tensor_args(
- crow_indices: Tensor,
- col_indices: Tensor,
- values: Tensor,
- size: _size,
- check_pinning: _bool | None = None,
- ) -> None: ...
- def _values_copy(input: Tensor, *, out: Tensor | None = None) -> Tensor: ...
- def _weight_int4pack_mm(
- input: Tensor,
- mat2: Tensor,
- qGroupSize: _int,
- qScaleAndZeros: Tensor,
- ) -> Tensor: ...
- def _weight_int4pack_mm_for_cpu(
- input: Tensor,
- mat2: Tensor,
- qGroupSize: _int,
- qScaleAndZeros: Tensor,
- ) -> Tensor: ...
- def _weight_int4pack_mm_with_scales_and_zeros(
- input: Tensor,
- mat2: Tensor,
- qGroupSize: _int,
- qScale: Tensor,
- qZeros: Tensor,
- ) -> Tensor: ...
- def _weight_int8pack_mm(
- input: Tensor,
- mat2: Tensor,
- scales: Tensor,
- ) -> Tensor: ...
- def _weight_norm(v: Tensor, g: Tensor, dim: _int = 0) -> Tensor: ...
- def _weight_norm_interface(
- v: Tensor,
- g: Tensor,
- dim: _int = 0,
- ) -> tuple[Tensor, Tensor]: ...
- def _wrapped_linear_prepack(
- weight: Tensor,
- weight_scale: Tensor,
- weight_zero_point: Tensor,
- bias: Tensor,
- ) -> Tensor: ...
- def _wrapped_quantized_linear_prepacked(
- input: Tensor,
- input_scale: Tensor,
- input_zero_point: Tensor,
- packed_weight: Tensor,
- output_scale: Tensor,
- output_zero_point: Tensor,
- out_channel: _int,
- ) -> Tensor: ...
- def abs(input: Tensor, *, out: Tensor | None = None) -> Tensor:
- r"""
- abs(input: Tensor, *, out: Optional[Tensor]) -> Tensor
- Computes the absolute value of each element in :attr:`input`.
- .. math::
- \text{out}_{i} = |\text{input}_{i}|
- Args:
- input (Tensor): the input tensor.
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> torch.abs(torch.tensor([-1, -2, 3]))
- tensor([ 1, 2, 3])
- """
- def abs_(input: Tensor) -> Tensor: ...
- def absolute(input: Tensor, *, out: Tensor | None = None) -> Tensor:
- r"""
- absolute(input: Tensor, *, out: Optional[Tensor]) -> Tensor
- Alias for :func:`torch.abs`
- """
- def acos(input: Tensor, *, out: Tensor | None = None) -> Tensor:
- r"""
- acos(input: Tensor, *, out: Optional[Tensor]) -> Tensor
- Computes the inverse cosine of each element in :attr:`input`.
- .. math::
- \text{out}_{i} = \cos^{-1}(\text{input}_{i})
- Args:
- input (Tensor): the input tensor.
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> a = torch.randn(4)
- >>> a
- tensor([ 0.3348, -0.5889, 0.2005, -0.1584])
- >>> torch.acos(a)
- tensor([ 1.2294, 2.2004, 1.3690, 1.7298])
- """
- def acos_(input: Tensor) -> Tensor: ...
- def acosh(input: Tensor, *, out: Tensor | None = None) -> Tensor:
- r"""
- acosh(input: Tensor, *, out: Optional[Tensor]) -> Tensor
- Returns a new tensor with the inverse hyperbolic cosine of the elements of :attr:`input`.
- .. math::
- \text{out}_{i} = \cosh^{-1}(\text{input}_{i})
- Note:
- The domain of the inverse hyperbolic cosine is `[1, inf)` and values outside this range
- will be mapped to ``NaN``, except for `+ INF` for which the output is mapped to `+ INF`.
- Args:
- input (Tensor): the input tensor.
- Keyword arguments:
- out (Tensor, optional): the output tensor.
- Example::
- >>> a = torch.randn(4).uniform_(1, 2)
- >>> a
- tensor([ 1.3192, 1.9915, 1.9674, 1.7151 ])
- >>> torch.acosh(a)
- tensor([ 0.7791, 1.3120, 1.2979, 1.1341 ])
- """
- def acosh_(input: Tensor) -> Tensor: ...
- def adaptive_avg_pool1d(input: Tensor, output_size: _int | _size) -> Tensor: ...
- def adaptive_max_pool1d(
- input: Tensor,
- output_size: _int | _size,
- ) -> tuple[Tensor, Tensor]: ...
- @overload
- def add(
- input: Tensor | Number | _complex,
- other: Tensor | Number | _complex,
- *,
- alpha: Number | _complex | None = 1,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- add(input, other, *, alpha=1, out=None) -> Tensor
- Adds :attr:`other`, scaled by :attr:`alpha`, to :attr:`input`.
- .. math::
- \text{{out}}_i = \text{{input}}_i + \text{{alpha}} \times \text{{other}}_i
- Supports :ref:`broadcasting to a common shape <broadcasting-semantics>`,
- :ref:`type promotion <type-promotion-doc>`, and integer, float, and complex inputs.
- Args:
- input (Tensor): the input tensor.
- other (Tensor or Number): the tensor or number to add to :attr:`input`.
- Keyword arguments:
- alpha (Number): the multiplier for :attr:`other`.
- out (Tensor, optional): the output tensor.
- Examples::
- >>> a = torch.randn(4)
- >>> a
- tensor([ 0.0202, 1.0985, 1.3506, -0.6056])
- >>> torch.add(a, 20)
- tensor([ 20.0202, 21.0985, 21.3506, 19.3944])
- >>> b = torch.randn(4)
- >>> b
- tensor([-0.9732, -0.3497, 0.6245, 0.4022])
- >>> c = torch.randn(4, 1)
- >>> c
- tensor([[ 0.3743],
- [-1.7724],
- [-0.5811],
- [-0.8017]])
- >>> torch.add(b, c, alpha=10)
- tensor([[ 2.7695, 3.3930, 4.3672, 4.1450],
- [-18.6971, -18.0736, -17.0994, -17.3216],
- [ -6.7845, -6.1610, -5.1868, -5.4090],
- [ -8.9902, -8.3667, -7.3925, -7.6147]])
- """
- @overload
- def add(self: Tensor, alpha: Number | _complex, other: Tensor) -> Tensor:
- r"""
- add(input, other, *, alpha=1, out=None) -> Tensor
- Adds :attr:`other`, scaled by :attr:`alpha`, to :attr:`input`.
- .. math::
- \text{{out}}_i = \text{{input}}_i + \text{{alpha}} \times \text{{other}}_i
- Supports :ref:`broadcasting to a common shape <broadcasting-semantics>`,
- :ref:`type promotion <type-promotion-doc>`, and integer, float, and complex inputs.
- Args:
- input (Tensor): the input tensor.
- other (Tensor or Number): the tensor or number to add to :attr:`input`.
- Keyword arguments:
- alpha (Number): the multiplier for :attr:`other`.
- out (Tensor, optional): the output tensor.
- Examples::
- >>> a = torch.randn(4)
- >>> a
- tensor([ 0.0202, 1.0985, 1.3506, -0.6056])
- >>> torch.add(a, 20)
- tensor([ 20.0202, 21.0985, 21.3506, 19.3944])
- >>> b = torch.randn(4)
- >>> b
- tensor([-0.9732, -0.3497, 0.6245, 0.4022])
- >>> c = torch.randn(4, 1)
- >>> c
- tensor([[ 0.3743],
- [-1.7724],
- [-0.5811],
- [-0.8017]])
- >>> torch.add(b, c, alpha=10)
- tensor([[ 2.7695, 3.3930, 4.3672, 4.1450],
- [-18.6971, -18.0736, -17.0994, -17.3216],
- [ -6.7845, -6.1610, -5.1868, -5.4090],
- [ -8.9902, -8.3667, -7.3925, -7.6147]])
- """
- @overload
- def add(
- self: Tensor,
- alpha: Number | _complex,
- other: Tensor,
- *,
- out: Tensor,
- ) -> Tensor:
- r"""
- add(input, other, *, alpha=1, out=None) -> Tensor
- Adds :attr:`other`, scaled by :attr:`alpha`, to :attr:`input`.
- .. math::
- \text{{out}}_i = \text{{input}}_i + \text{{alpha}} \times \text{{other}}_i
- Supports :ref:`broadcasting to a common shape <broadcasting-semantics>`,
- :ref:`type promotion <type-promotion-doc>`, and integer, float, and complex inputs.
- Args:
- input (Tensor): the input tensor.
- other (Tensor or Number): the tensor or number to add to :attr:`input`.
- Keyword arguments:
- alpha (Number): the multiplier for :attr:`other`.
- out (Tensor, optional): the output tensor.
- Examples::
- >>> a = torch.randn(4)
- >>> a
- tensor([ 0.0202, 1.0985, 1.3506, -0.6056])
- >>> torch.add(a, 20)
- tensor([ 20.0202, 21.0985, 21.3506, 19.3944])
- >>> b = torch.randn(4)
- >>> b
- tensor([-0.9732, -0.3497, 0.6245, 0.4022])
- >>> c = torch.randn(4, 1)
- >>> c
- tensor([[ 0.3743],
- [-1.7724],
- [-0.5811],
- [-0.8017]])
- >>> torch.add(b, c, alpha=10)
- tensor([[ 2.7695, 3.3930, 4.3672, 4.1450],
- [-18.6971, -18.0736, -17.0994, -17.3216],
- [ -6.7845, -6.1610, -5.1868, -5.4090],
- [ -8.9902, -8.3667, -7.3925, -7.6147]])
- """
- @overload
- def addbmm(
- beta: Number | _complex,
- self: Tensor,
- alpha: Number | _complex,
- batch1: Tensor,
- batch2: Tensor,
- ) -> Tensor:
- r"""
- addbmm(input, batch1, batch2, *, beta=1, alpha=1, out=None) -> Tensor
- Performs a batch matrix-matrix product of matrices stored
- in :attr:`batch1` and :attr:`batch2`,
- with a reduced add step (all matrix multiplications get accumulated
- along the first dimension).
- :attr:`input` is added to the final result.
- :attr:`batch1` and :attr:`batch2` must be 3-D tensors each containing the
- same number of matrices.
- If :attr:`batch1` is a :math:`(b \times n \times m)` tensor, :attr:`batch2` is a
- :math:`(b \times m \times p)` tensor, :attr:`input` must be
- :ref:`broadcastable <broadcasting-semantics>` with a :math:`(n \times p)` tensor
- and :attr:`out` will be a :math:`(n \times p)` tensor.
- .. math::
- out = \beta\ \text{input} + \alpha\ (\sum_{i=0}^{b-1} \text{batch1}_i \mathbin{@} \text{batch2}_i)
- If :attr:`beta` is 0, then the content of :attr:`input` will be ignored, and `nan` and `inf` in
- it will not be propagated.
- For inputs of type `FloatTensor` or `DoubleTensor`, arguments :attr:`beta` and :attr:`alpha`
- must be real numbers, otherwise they should be integers.
- This operator supports :ref:`TensorFloat32<tf32_on_ampere>`.
- On certain ROCm devices, when using float16 inputs this module will use :ref:`different precision<fp16_on_mi200>` for backward.
- Args:
- input (Tensor): matrix to be added
- batch1 (Tensor): the first batch of matrices to be multiplied
- batch2 (Tensor): the second batch of matrices to be multiplied
- Keyword args:
- beta (Number, optional): multiplier for :attr:`input` (:math:`\beta`)
- alpha (Number, optional): multiplier for `batch1 @ batch2` (:math:`\alpha`)
- out (Tensor, optional): the output tensor.
- Example::
- >>> M = torch.randn(3, 5)
- >>> batch1 = torch.randn(10, 3, 4)
- >>> batch2 = torch.randn(10, 4, 5)
- >>> torch.addbmm(M, batch1, batch2)
- tensor([[ 6.6311, 0.0503, 6.9768, -12.0362, -2.1653],
- [ -4.8185, -1.4255, -6.6760, 8.9453, 2.5743],
- [ -3.8202, 4.3691, 1.0943, -1.1109, 5.4730]])
- """
- @overload
- def addbmm(
- beta: Number | _complex,
- self: Tensor,
- alpha: Number | _complex,
- batch1: Tensor,
- batch2: Tensor,
- *,
- out: Tensor,
- ) -> Tensor:
- r"""
- addbmm(input, batch1, batch2, *, beta=1, alpha=1, out=None) -> Tensor
- Performs a batch matrix-matrix product of matrices stored
- in :attr:`batch1` and :attr:`batch2`,
- with a reduced add step (all matrix multiplications get accumulated
- along the first dimension).
- :attr:`input` is added to the final result.
- :attr:`batch1` and :attr:`batch2` must be 3-D tensors each containing the
- same number of matrices.
- If :attr:`batch1` is a :math:`(b \times n \times m)` tensor, :attr:`batch2` is a
- :math:`(b \times m \times p)` tensor, :attr:`input` must be
- :ref:`broadcastable <broadcasting-semantics>` with a :math:`(n \times p)` tensor
- and :attr:`out` will be a :math:`(n \times p)` tensor.
- .. math::
- out = \beta\ \text{input} + \alpha\ (\sum_{i=0}^{b-1} \text{batch1}_i \mathbin{@} \text{batch2}_i)
- If :attr:`beta` is 0, then the content of :attr:`input` will be ignored, and `nan` and `inf` in
- it will not be propagated.
- For inputs of type `FloatTensor` or `DoubleTensor`, arguments :attr:`beta` and :attr:`alpha`
- must be real numbers, otherwise they should be integers.
- This operator supports :ref:`TensorFloat32<tf32_on_ampere>`.
- On certain ROCm devices, when using float16 inputs this module will use :ref:`different precision<fp16_on_mi200>` for backward.
- Args:
- input (Tensor): matrix to be added
- batch1 (Tensor): the first batch of matrices to be multiplied
- batch2 (Tensor): the second batch of matrices to be multiplied
- Keyword args:
- beta (Number, optional): multiplier for :attr:`input` (:math:`\beta`)
- alpha (Number, optional): multiplier for `batch1 @ batch2` (:math:`\alpha`)
- out (Tensor, optional): the output tensor.
- Example::
- >>> M = torch.randn(3, 5)
- >>> batch1 = torch.randn(10, 3, 4)
- >>> batch2 = torch.randn(10, 4, 5)
- >>> torch.addbmm(M, batch1, batch2)
- tensor([[ 6.6311, 0.0503, 6.9768, -12.0362, -2.1653],
- [ -4.8185, -1.4255, -6.6760, 8.9453, 2.5743],
- [ -3.8202, 4.3691, 1.0943, -1.1109, 5.4730]])
- """
- @overload
- def addbmm(
- input: Tensor,
- batch1: Tensor,
- batch2: Tensor,
- *,
- beta: Number | _complex = 1,
- alpha: Number | _complex = 1,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- addbmm(input, batch1, batch2, *, beta=1, alpha=1, out=None) -> Tensor
- Performs a batch matrix-matrix product of matrices stored
- in :attr:`batch1` and :attr:`batch2`,
- with a reduced add step (all matrix multiplications get accumulated
- along the first dimension).
- :attr:`input` is added to the final result.
- :attr:`batch1` and :attr:`batch2` must be 3-D tensors each containing the
- same number of matrices.
- If :attr:`batch1` is a :math:`(b \times n \times m)` tensor, :attr:`batch2` is a
- :math:`(b \times m \times p)` tensor, :attr:`input` must be
- :ref:`broadcastable <broadcasting-semantics>` with a :math:`(n \times p)` tensor
- and :attr:`out` will be a :math:`(n \times p)` tensor.
- .. math::
- out = \beta\ \text{input} + \alpha\ (\sum_{i=0}^{b-1} \text{batch1}_i \mathbin{@} \text{batch2}_i)
- If :attr:`beta` is 0, then the content of :attr:`input` will be ignored, and `nan` and `inf` in
- it will not be propagated.
- For inputs of type `FloatTensor` or `DoubleTensor`, arguments :attr:`beta` and :attr:`alpha`
- must be real numbers, otherwise they should be integers.
- This operator supports :ref:`TensorFloat32<tf32_on_ampere>`.
- On certain ROCm devices, when using float16 inputs this module will use :ref:`different precision<fp16_on_mi200>` for backward.
- Args:
- input (Tensor): matrix to be added
- batch1 (Tensor): the first batch of matrices to be multiplied
- batch2 (Tensor): the second batch of matrices to be multiplied
- Keyword args:
- beta (Number, optional): multiplier for :attr:`input` (:math:`\beta`)
- alpha (Number, optional): multiplier for `batch1 @ batch2` (:math:`\alpha`)
- out (Tensor, optional): the output tensor.
- Example::
- >>> M = torch.randn(3, 5)
- >>> batch1 = torch.randn(10, 3, 4)
- >>> batch2 = torch.randn(10, 4, 5)
- >>> torch.addbmm(M, batch1, batch2)
- tensor([[ 6.6311, 0.0503, 6.9768, -12.0362, -2.1653],
- [ -4.8185, -1.4255, -6.6760, 8.9453, 2.5743],
- [ -3.8202, 4.3691, 1.0943, -1.1109, 5.4730]])
- """
- @overload
- def addbmm(
- beta: Number | _complex,
- self: Tensor,
- batch1: Tensor,
- batch2: Tensor,
- ) -> Tensor:
- r"""
- addbmm(input, batch1, batch2, *, beta=1, alpha=1, out=None) -> Tensor
- Performs a batch matrix-matrix product of matrices stored
- in :attr:`batch1` and :attr:`batch2`,
- with a reduced add step (all matrix multiplications get accumulated
- along the first dimension).
- :attr:`input` is added to the final result.
- :attr:`batch1` and :attr:`batch2` must be 3-D tensors each containing the
- same number of matrices.
- If :attr:`batch1` is a :math:`(b \times n \times m)` tensor, :attr:`batch2` is a
- :math:`(b \times m \times p)` tensor, :attr:`input` must be
- :ref:`broadcastable <broadcasting-semantics>` with a :math:`(n \times p)` tensor
- and :attr:`out` will be a :math:`(n \times p)` tensor.
- .. math::
- out = \beta\ \text{input} + \alpha\ (\sum_{i=0}^{b-1} \text{batch1}_i \mathbin{@} \text{batch2}_i)
- If :attr:`beta` is 0, then the content of :attr:`input` will be ignored, and `nan` and `inf` in
- it will not be propagated.
- For inputs of type `FloatTensor` or `DoubleTensor`, arguments :attr:`beta` and :attr:`alpha`
- must be real numbers, otherwise they should be integers.
- This operator supports :ref:`TensorFloat32<tf32_on_ampere>`.
- On certain ROCm devices, when using float16 inputs this module will use :ref:`different precision<fp16_on_mi200>` for backward.
- Args:
- input (Tensor): matrix to be added
- batch1 (Tensor): the first batch of matrices to be multiplied
- batch2 (Tensor): the second batch of matrices to be multiplied
- Keyword args:
- beta (Number, optional): multiplier for :attr:`input` (:math:`\beta`)
- alpha (Number, optional): multiplier for `batch1 @ batch2` (:math:`\alpha`)
- out (Tensor, optional): the output tensor.
- Example::
- >>> M = torch.randn(3, 5)
- >>> batch1 = torch.randn(10, 3, 4)
- >>> batch2 = torch.randn(10, 4, 5)
- >>> torch.addbmm(M, batch1, batch2)
- tensor([[ 6.6311, 0.0503, 6.9768, -12.0362, -2.1653],
- [ -4.8185, -1.4255, -6.6760, 8.9453, 2.5743],
- [ -3.8202, 4.3691, 1.0943, -1.1109, 5.4730]])
- """
- @overload
- def addbmm(
- beta: Number | _complex,
- self: Tensor,
- batch1: Tensor,
- batch2: Tensor,
- *,
- out: Tensor,
- ) -> Tensor:
- r"""
- addbmm(input, batch1, batch2, *, beta=1, alpha=1, out=None) -> Tensor
- Performs a batch matrix-matrix product of matrices stored
- in :attr:`batch1` and :attr:`batch2`,
- with a reduced add step (all matrix multiplications get accumulated
- along the first dimension).
- :attr:`input` is added to the final result.
- :attr:`batch1` and :attr:`batch2` must be 3-D tensors each containing the
- same number of matrices.
- If :attr:`batch1` is a :math:`(b \times n \times m)` tensor, :attr:`batch2` is a
- :math:`(b \times m \times p)` tensor, :attr:`input` must be
- :ref:`broadcastable <broadcasting-semantics>` with a :math:`(n \times p)` tensor
- and :attr:`out` will be a :math:`(n \times p)` tensor.
- .. math::
- out = \beta\ \text{input} + \alpha\ (\sum_{i=0}^{b-1} \text{batch1}_i \mathbin{@} \text{batch2}_i)
- If :attr:`beta` is 0, then the content of :attr:`input` will be ignored, and `nan` and `inf` in
- it will not be propagated.
- For inputs of type `FloatTensor` or `DoubleTensor`, arguments :attr:`beta` and :attr:`alpha`
- must be real numbers, otherwise they should be integers.
- This operator supports :ref:`TensorFloat32<tf32_on_ampere>`.
- On certain ROCm devices, when using float16 inputs this module will use :ref:`different precision<fp16_on_mi200>` for backward.
- Args:
- input (Tensor): matrix to be added
- batch1 (Tensor): the first batch of matrices to be multiplied
- batch2 (Tensor): the second batch of matrices to be multiplied
- Keyword args:
- beta (Number, optional): multiplier for :attr:`input` (:math:`\beta`)
- alpha (Number, optional): multiplier for `batch1 @ batch2` (:math:`\alpha`)
- out (Tensor, optional): the output tensor.
- Example::
- >>> M = torch.randn(3, 5)
- >>> batch1 = torch.randn(10, 3, 4)
- >>> batch2 = torch.randn(10, 4, 5)
- >>> torch.addbmm(M, batch1, batch2)
- tensor([[ 6.6311, 0.0503, 6.9768, -12.0362, -2.1653],
- [ -4.8185, -1.4255, -6.6760, 8.9453, 2.5743],
- [ -3.8202, 4.3691, 1.0943, -1.1109, 5.4730]])
- """
- @overload
- def addcdiv(
- self: Tensor,
- value: Number | _complex,
- tensor1: Tensor,
- tensor2: Tensor,
- ) -> Tensor:
- r"""
- addcdiv(input, tensor1, tensor2, *, value=1, out=None) -> Tensor
- Performs the element-wise division of :attr:`tensor1` by :attr:`tensor2`,
- multiplies the result by the scalar :attr:`value` and adds it to :attr:`input`.
- .. warning::
- Integer division with addcdiv is no longer supported, and in a future
- release addcdiv will perform a true division of tensor1 and tensor2.
- The historic addcdiv behavior can be implemented as
- (input + value * torch.trunc(tensor1 / tensor2)).to(input.dtype)
- for integer inputs and as (input + value * tensor1 / tensor2) for float inputs.
- The future addcdiv behavior is just the latter implementation:
- (input + value * tensor1 / tensor2), for all dtypes.
- .. math::
- \text{out}_i = \text{input}_i + \text{value} \times \frac{\text{tensor1}_i}{\text{tensor2}_i}
- The shapes of :attr:`input`, :attr:`tensor1`, and :attr:`tensor2` must be
- :ref:`broadcastable <broadcasting-semantics>`.
- For inputs of type `FloatTensor` or `DoubleTensor`, :attr:`value` must be
- a real number, otherwise an integer.
- Args:
- input (Tensor): the tensor to be added
- tensor1 (Tensor): the numerator tensor
- tensor2 (Tensor): the denominator tensor
- Keyword args:
- value (Number, optional): multiplier for :math:`\text{tensor1} / \text{tensor2}`
- out (Tensor, optional): the output tensor.
- Example::
- >>> t = torch.randn(1, 3)
- >>> t1 = torch.randn(3, 1)
- >>> t2 = torch.randn(1, 3)
- >>> torch.addcdiv(t, t1, t2, value=0.1)
- tensor([[-0.2312, -3.6496, 0.1312],
- [-1.0428, 3.4292, -0.1030],
- [-0.5369, -0.9829, 0.0430]])
- """
- @overload
- def addcdiv(
- self: Tensor,
- value: Number | _complex,
- tensor1: Tensor,
- tensor2: Tensor,
- *,
- out: Tensor,
- ) -> Tensor:
- r"""
- addcdiv(input, tensor1, tensor2, *, value=1, out=None) -> Tensor
- Performs the element-wise division of :attr:`tensor1` by :attr:`tensor2`,
- multiplies the result by the scalar :attr:`value` and adds it to :attr:`input`.
- .. warning::
- Integer division with addcdiv is no longer supported, and in a future
- release addcdiv will perform a true division of tensor1 and tensor2.
- The historic addcdiv behavior can be implemented as
- (input + value * torch.trunc(tensor1 / tensor2)).to(input.dtype)
- for integer inputs and as (input + value * tensor1 / tensor2) for float inputs.
- The future addcdiv behavior is just the latter implementation:
- (input + value * tensor1 / tensor2), for all dtypes.
- .. math::
- \text{out}_i = \text{input}_i + \text{value} \times \frac{\text{tensor1}_i}{\text{tensor2}_i}
- The shapes of :attr:`input`, :attr:`tensor1`, and :attr:`tensor2` must be
- :ref:`broadcastable <broadcasting-semantics>`.
- For inputs of type `FloatTensor` or `DoubleTensor`, :attr:`value` must be
- a real number, otherwise an integer.
- Args:
- input (Tensor): the tensor to be added
- tensor1 (Tensor): the numerator tensor
- tensor2 (Tensor): the denominator tensor
- Keyword args:
- value (Number, optional): multiplier for :math:`\text{tensor1} / \text{tensor2}`
- out (Tensor, optional): the output tensor.
- Example::
- >>> t = torch.randn(1, 3)
- >>> t1 = torch.randn(3, 1)
- >>> t2 = torch.randn(1, 3)
- >>> torch.addcdiv(t, t1, t2, value=0.1)
- tensor([[-0.2312, -3.6496, 0.1312],
- [-1.0428, 3.4292, -0.1030],
- [-0.5369, -0.9829, 0.0430]])
- """
- @overload
- def addcdiv(
- input: Tensor,
- tensor1: Tensor,
- tensor2: Tensor,
- *,
- value: Number | _complex = 1,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- addcdiv(input, tensor1, tensor2, *, value=1, out=None) -> Tensor
- Performs the element-wise division of :attr:`tensor1` by :attr:`tensor2`,
- multiplies the result by the scalar :attr:`value` and adds it to :attr:`input`.
- .. warning::
- Integer division with addcdiv is no longer supported, and in a future
- release addcdiv will perform a true division of tensor1 and tensor2.
- The historic addcdiv behavior can be implemented as
- (input + value * torch.trunc(tensor1 / tensor2)).to(input.dtype)
- for integer inputs and as (input + value * tensor1 / tensor2) for float inputs.
- The future addcdiv behavior is just the latter implementation:
- (input + value * tensor1 / tensor2), for all dtypes.
- .. math::
- \text{out}_i = \text{input}_i + \text{value} \times \frac{\text{tensor1}_i}{\text{tensor2}_i}
- The shapes of :attr:`input`, :attr:`tensor1`, and :attr:`tensor2` must be
- :ref:`broadcastable <broadcasting-semantics>`.
- For inputs of type `FloatTensor` or `DoubleTensor`, :attr:`value` must be
- a real number, otherwise an integer.
- Args:
- input (Tensor): the tensor to be added
- tensor1 (Tensor): the numerator tensor
- tensor2 (Tensor): the denominator tensor
- Keyword args:
- value (Number, optional): multiplier for :math:`\text{tensor1} / \text{tensor2}`
- out (Tensor, optional): the output tensor.
- Example::
- >>> t = torch.randn(1, 3)
- >>> t1 = torch.randn(3, 1)
- >>> t2 = torch.randn(1, 3)
- >>> torch.addcdiv(t, t1, t2, value=0.1)
- tensor([[-0.2312, -3.6496, 0.1312],
- [-1.0428, 3.4292, -0.1030],
- [-0.5369, -0.9829, 0.0430]])
- """
- @overload
- def addcmul(
- self: Tensor,
- value: Number | _complex,
- tensor1: Tensor,
- tensor2: Tensor,
- ) -> Tensor:
- r"""
- addcmul(input, tensor1, tensor2, *, value=1, out=None) -> Tensor
- Performs the element-wise multiplication of :attr:`tensor1`
- by :attr:`tensor2`, multiplies the result by the scalar :attr:`value`
- and adds it to :attr:`input`.
- .. math::
- \text{out}_i = \text{input}_i + \text{value} \times \text{tensor1}_i \times \text{tensor2}_i
- The shapes of :attr:`tensor`, :attr:`tensor1`, and :attr:`tensor2` must be
- :ref:`broadcastable <broadcasting-semantics>`.
- For inputs of type `FloatTensor` or `DoubleTensor`, :attr:`value` must be
- a real number, otherwise an integer.
- Args:
- input (Tensor): the tensor to be added
- tensor1 (Tensor): the tensor to be multiplied
- tensor2 (Tensor): the tensor to be multiplied
- Keyword args:
- value (Number, optional): multiplier for :math:`tensor1 .* tensor2`
- out (Tensor, optional): the output tensor.
- Example::
- >>> t = torch.randn(1, 3)
- >>> t1 = torch.randn(3, 1)
- >>> t2 = torch.randn(1, 3)
- >>> torch.addcmul(t, t1, t2, value=0.1)
- tensor([[-0.8635, -0.6391, 1.6174],
- [-0.7617, -0.5879, 1.7388],
- [-0.8353, -0.6249, 1.6511]])
- """
- @overload
- def addcmul(
- self: Tensor,
- value: Number | _complex,
- tensor1: Tensor,
- tensor2: Tensor,
- *,
- out: Tensor,
- ) -> Tensor:
- r"""
- addcmul(input, tensor1, tensor2, *, value=1, out=None) -> Tensor
- Performs the element-wise multiplication of :attr:`tensor1`
- by :attr:`tensor2`, multiplies the result by the scalar :attr:`value`
- and adds it to :attr:`input`.
- .. math::
- \text{out}_i = \text{input}_i + \text{value} \times \text{tensor1}_i \times \text{tensor2}_i
- The shapes of :attr:`tensor`, :attr:`tensor1`, and :attr:`tensor2` must be
- :ref:`broadcastable <broadcasting-semantics>`.
- For inputs of type `FloatTensor` or `DoubleTensor`, :attr:`value` must be
- a real number, otherwise an integer.
- Args:
- input (Tensor): the tensor to be added
- tensor1 (Tensor): the tensor to be multiplied
- tensor2 (Tensor): the tensor to be multiplied
- Keyword args:
- value (Number, optional): multiplier for :math:`tensor1 .* tensor2`
- out (Tensor, optional): the output tensor.
- Example::
- >>> t = torch.randn(1, 3)
- >>> t1 = torch.randn(3, 1)
- >>> t2 = torch.randn(1, 3)
- >>> torch.addcmul(t, t1, t2, value=0.1)
- tensor([[-0.8635, -0.6391, 1.6174],
- [-0.7617, -0.5879, 1.7388],
- [-0.8353, -0.6249, 1.6511]])
- """
- @overload
- def addcmul(
- input: Tensor,
- tensor1: Tensor,
- tensor2: Tensor,
- *,
- value: Number | _complex = 1,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- addcmul(input, tensor1, tensor2, *, value=1, out=None) -> Tensor
- Performs the element-wise multiplication of :attr:`tensor1`
- by :attr:`tensor2`, multiplies the result by the scalar :attr:`value`
- and adds it to :attr:`input`.
- .. math::
- \text{out}_i = \text{input}_i + \text{value} \times \text{tensor1}_i \times \text{tensor2}_i
- The shapes of :attr:`tensor`, :attr:`tensor1`, and :attr:`tensor2` must be
- :ref:`broadcastable <broadcasting-semantics>`.
- For inputs of type `FloatTensor` or `DoubleTensor`, :attr:`value` must be
- a real number, otherwise an integer.
- Args:
- input (Tensor): the tensor to be added
- tensor1 (Tensor): the tensor to be multiplied
- tensor2 (Tensor): the tensor to be multiplied
- Keyword args:
- value (Number, optional): multiplier for :math:`tensor1 .* tensor2`
- out (Tensor, optional): the output tensor.
- Example::
- >>> t = torch.randn(1, 3)
- >>> t1 = torch.randn(3, 1)
- >>> t2 = torch.randn(1, 3)
- >>> torch.addcmul(t, t1, t2, value=0.1)
- tensor([[-0.8635, -0.6391, 1.6174],
- [-0.7617, -0.5879, 1.7388],
- [-0.8353, -0.6249, 1.6511]])
- """
- @overload
- def addmm(
- beta: Number | _complex,
- self: Tensor,
- alpha: Number | _complex,
- mat1: Tensor,
- mat2: Tensor,
- ) -> Tensor:
- r"""
- addmm(input, mat1, mat2, out_dtype=None, *, beta=1, alpha=1, out=None) -> Tensor
- Performs a matrix multiplication of the matrices :attr:`mat1` and :attr:`mat2`.
- The matrix :attr:`input` is added to the final result.
- If :attr:`mat1` is a :math:`(n \times m)` tensor, :attr:`mat2` is a
- :math:`(m \times p)` tensor, then :attr:`input` must be
- :ref:`broadcastable <broadcasting-semantics>` with a :math:`(n \times p)` tensor
- and :attr:`out` will be a :math:`(n \times p)` tensor.
- :attr:`alpha` and :attr:`beta` are scaling factors on matrix-vector product between
- :attr:`mat1` and :attr:`mat2` and the added matrix :attr:`input` respectively.
- .. math::
- \text{out} = \beta\ \text{input} + \alpha\ (\text{mat1}_i \mathbin{@} \text{mat2}_i)
- If :attr:`beta` is 0, then the content of :attr:`input` will be ignored, and `nan` and `inf` in
- it will not be propagated.
- For inputs of type `FloatTensor` or `DoubleTensor`, arguments :attr:`beta` and
- :attr:`alpha` must be real numbers, otherwise they should be integers.
- This operation has support for arguments with :ref:`sparse layouts<sparse-docs>`. If
- :attr:`input` is sparse the result will have the same layout and if :attr:`out`
- is provided it must have the same layout as :attr:`input`.
- .. warning::
- Sparse support is a beta feature and some layout(s)/dtype/device combinations may not be supported,
- or may not have autograd support. If you notice missing functionality please
- open a feature request.
- This operator supports :ref:`TensorFloat32<tf32_on_ampere>`.
- On certain ROCm devices, when using float16 inputs this module will use :ref:`different precision<fp16_on_mi200>` for backward.
- Args:
- input (Tensor): matrix to be added
- mat1 (Tensor): the first matrix to be matrix multiplied
- mat2 (Tensor): the second matrix to be matrix multiplied
- out_dtype (dtype, optional): the dtype of the output tensor,
- Supported only on CUDA and for torch.float32 given
- torch.float16/torch.bfloat16 input dtypes
- Keyword args:
- beta (Number, optional): multiplier for :attr:`input` (:math:`\beta`)
- alpha (Number, optional): multiplier for :math:`mat1 @ mat2` (:math:`\alpha`)
- out (Tensor, optional): the output tensor.
- Example::
- >>> M = torch.randn(2, 3)
- >>> mat1 = torch.randn(2, 3)
- >>> mat2 = torch.randn(3, 3)
- >>> torch.addmm(M, mat1, mat2)
- tensor([[-4.8716, 1.4671, -1.3746],
- [ 0.7573, -3.9555, -2.8681]])
- """
- @overload
- def addmm(
- beta: Number | _complex,
- self: Tensor,
- alpha: Number | _complex,
- mat1: Tensor,
- mat2: Tensor,
- *,
- out: Tensor,
- ) -> Tensor:
- r"""
- addmm(input, mat1, mat2, out_dtype=None, *, beta=1, alpha=1, out=None) -> Tensor
- Performs a matrix multiplication of the matrices :attr:`mat1` and :attr:`mat2`.
- The matrix :attr:`input` is added to the final result.
- If :attr:`mat1` is a :math:`(n \times m)` tensor, :attr:`mat2` is a
- :math:`(m \times p)` tensor, then :attr:`input` must be
- :ref:`broadcastable <broadcasting-semantics>` with a :math:`(n \times p)` tensor
- and :attr:`out` will be a :math:`(n \times p)` tensor.
- :attr:`alpha` and :attr:`beta` are scaling factors on matrix-vector product between
- :attr:`mat1` and :attr:`mat2` and the added matrix :attr:`input` respectively.
- .. math::
- \text{out} = \beta\ \text{input} + \alpha\ (\text{mat1}_i \mathbin{@} \text{mat2}_i)
- If :attr:`beta` is 0, then the content of :attr:`input` will be ignored, and `nan` and `inf` in
- it will not be propagated.
- For inputs of type `FloatTensor` or `DoubleTensor`, arguments :attr:`beta` and
- :attr:`alpha` must be real numbers, otherwise they should be integers.
- This operation has support for arguments with :ref:`sparse layouts<sparse-docs>`. If
- :attr:`input` is sparse the result will have the same layout and if :attr:`out`
- is provided it must have the same layout as :attr:`input`.
- .. warning::
- Sparse support is a beta feature and some layout(s)/dtype/device combinations may not be supported,
- or may not have autograd support. If you notice missing functionality please
- open a feature request.
- This operator supports :ref:`TensorFloat32<tf32_on_ampere>`.
- On certain ROCm devices, when using float16 inputs this module will use :ref:`different precision<fp16_on_mi200>` for backward.
- Args:
- input (Tensor): matrix to be added
- mat1 (Tensor): the first matrix to be matrix multiplied
- mat2 (Tensor): the second matrix to be matrix multiplied
- out_dtype (dtype, optional): the dtype of the output tensor,
- Supported only on CUDA and for torch.float32 given
- torch.float16/torch.bfloat16 input dtypes
- Keyword args:
- beta (Number, optional): multiplier for :attr:`input` (:math:`\beta`)
- alpha (Number, optional): multiplier for :math:`mat1 @ mat2` (:math:`\alpha`)
- out (Tensor, optional): the output tensor.
- Example::
- >>> M = torch.randn(2, 3)
- >>> mat1 = torch.randn(2, 3)
- >>> mat2 = torch.randn(3, 3)
- >>> torch.addmm(M, mat1, mat2)
- tensor([[-4.8716, 1.4671, -1.3746],
- [ 0.7573, -3.9555, -2.8681]])
- """
- @overload
- def addmm(
- input: Tensor,
- mat1: Tensor,
- mat2: Tensor,
- *,
- beta: Number | _complex = 1,
- alpha: Number | _complex = 1,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- addmm(input, mat1, mat2, out_dtype=None, *, beta=1, alpha=1, out=None) -> Tensor
- Performs a matrix multiplication of the matrices :attr:`mat1` and :attr:`mat2`.
- The matrix :attr:`input` is added to the final result.
- If :attr:`mat1` is a :math:`(n \times m)` tensor, :attr:`mat2` is a
- :math:`(m \times p)` tensor, then :attr:`input` must be
- :ref:`broadcastable <broadcasting-semantics>` with a :math:`(n \times p)` tensor
- and :attr:`out` will be a :math:`(n \times p)` tensor.
- :attr:`alpha` and :attr:`beta` are scaling factors on matrix-vector product between
- :attr:`mat1` and :attr:`mat2` and the added matrix :attr:`input` respectively.
- .. math::
- \text{out} = \beta\ \text{input} + \alpha\ (\text{mat1}_i \mathbin{@} \text{mat2}_i)
- If :attr:`beta` is 0, then the content of :attr:`input` will be ignored, and `nan` and `inf` in
- it will not be propagated.
- For inputs of type `FloatTensor` or `DoubleTensor`, arguments :attr:`beta` and
- :attr:`alpha` must be real numbers, otherwise they should be integers.
- This operation has support for arguments with :ref:`sparse layouts<sparse-docs>`. If
- :attr:`input` is sparse the result will have the same layout and if :attr:`out`
- is provided it must have the same layout as :attr:`input`.
- .. warning::
- Sparse support is a beta feature and some layout(s)/dtype/device combinations may not be supported,
- or may not have autograd support. If you notice missing functionality please
- open a feature request.
- This operator supports :ref:`TensorFloat32<tf32_on_ampere>`.
- On certain ROCm devices, when using float16 inputs this module will use :ref:`different precision<fp16_on_mi200>` for backward.
- Args:
- input (Tensor): matrix to be added
- mat1 (Tensor): the first matrix to be matrix multiplied
- mat2 (Tensor): the second matrix to be matrix multiplied
- out_dtype (dtype, optional): the dtype of the output tensor,
- Supported only on CUDA and for torch.float32 given
- torch.float16/torch.bfloat16 input dtypes
- Keyword args:
- beta (Number, optional): multiplier for :attr:`input` (:math:`\beta`)
- alpha (Number, optional): multiplier for :math:`mat1 @ mat2` (:math:`\alpha`)
- out (Tensor, optional): the output tensor.
- Example::
- >>> M = torch.randn(2, 3)
- >>> mat1 = torch.randn(2, 3)
- >>> mat2 = torch.randn(3, 3)
- >>> torch.addmm(M, mat1, mat2)
- tensor([[-4.8716, 1.4671, -1.3746],
- [ 0.7573, -3.9555, -2.8681]])
- """
- @overload
- def addmm(
- input: Tensor,
- mat1: Tensor,
- mat2: Tensor,
- out_dtype: _dtype,
- *,
- beta: Number | _complex = 1,
- alpha: Number | _complex = 1,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- addmm(input, mat1, mat2, out_dtype=None, *, beta=1, alpha=1, out=None) -> Tensor
- Performs a matrix multiplication of the matrices :attr:`mat1` and :attr:`mat2`.
- The matrix :attr:`input` is added to the final result.
- If :attr:`mat1` is a :math:`(n \times m)` tensor, :attr:`mat2` is a
- :math:`(m \times p)` tensor, then :attr:`input` must be
- :ref:`broadcastable <broadcasting-semantics>` with a :math:`(n \times p)` tensor
- and :attr:`out` will be a :math:`(n \times p)` tensor.
- :attr:`alpha` and :attr:`beta` are scaling factors on matrix-vector product between
- :attr:`mat1` and :attr:`mat2` and the added matrix :attr:`input` respectively.
- .. math::
- \text{out} = \beta\ \text{input} + \alpha\ (\text{mat1}_i \mathbin{@} \text{mat2}_i)
- If :attr:`beta` is 0, then the content of :attr:`input` will be ignored, and `nan` and `inf` in
- it will not be propagated.
- For inputs of type `FloatTensor` or `DoubleTensor`, arguments :attr:`beta` and
- :attr:`alpha` must be real numbers, otherwise they should be integers.
- This operation has support for arguments with :ref:`sparse layouts<sparse-docs>`. If
- :attr:`input` is sparse the result will have the same layout and if :attr:`out`
- is provided it must have the same layout as :attr:`input`.
- .. warning::
- Sparse support is a beta feature and some layout(s)/dtype/device combinations may not be supported,
- or may not have autograd support. If you notice missing functionality please
- open a feature request.
- This operator supports :ref:`TensorFloat32<tf32_on_ampere>`.
- On certain ROCm devices, when using float16 inputs this module will use :ref:`different precision<fp16_on_mi200>` for backward.
- Args:
- input (Tensor): matrix to be added
- mat1 (Tensor): the first matrix to be matrix multiplied
- mat2 (Tensor): the second matrix to be matrix multiplied
- out_dtype (dtype, optional): the dtype of the output tensor,
- Supported only on CUDA and for torch.float32 given
- torch.float16/torch.bfloat16 input dtypes
- Keyword args:
- beta (Number, optional): multiplier for :attr:`input` (:math:`\beta`)
- alpha (Number, optional): multiplier for :math:`mat1 @ mat2` (:math:`\alpha`)
- out (Tensor, optional): the output tensor.
- Example::
- >>> M = torch.randn(2, 3)
- >>> mat1 = torch.randn(2, 3)
- >>> mat2 = torch.randn(3, 3)
- >>> torch.addmm(M, mat1, mat2)
- tensor([[-4.8716, 1.4671, -1.3746],
- [ 0.7573, -3.9555, -2.8681]])
- """
- @overload
- def addmm(
- beta: Number | _complex,
- self: Tensor,
- mat1: Tensor,
- mat2: Tensor,
- ) -> Tensor:
- r"""
- addmm(input, mat1, mat2, out_dtype=None, *, beta=1, alpha=1, out=None) -> Tensor
- Performs a matrix multiplication of the matrices :attr:`mat1` and :attr:`mat2`.
- The matrix :attr:`input` is added to the final result.
- If :attr:`mat1` is a :math:`(n \times m)` tensor, :attr:`mat2` is a
- :math:`(m \times p)` tensor, then :attr:`input` must be
- :ref:`broadcastable <broadcasting-semantics>` with a :math:`(n \times p)` tensor
- and :attr:`out` will be a :math:`(n \times p)` tensor.
- :attr:`alpha` and :attr:`beta` are scaling factors on matrix-vector product between
- :attr:`mat1` and :attr:`mat2` and the added matrix :attr:`input` respectively.
- .. math::
- \text{out} = \beta\ \text{input} + \alpha\ (\text{mat1}_i \mathbin{@} \text{mat2}_i)
- If :attr:`beta` is 0, then the content of :attr:`input` will be ignored, and `nan` and `inf` in
- it will not be propagated.
- For inputs of type `FloatTensor` or `DoubleTensor`, arguments :attr:`beta` and
- :attr:`alpha` must be real numbers, otherwise they should be integers.
- This operation has support for arguments with :ref:`sparse layouts<sparse-docs>`. If
- :attr:`input` is sparse the result will have the same layout and if :attr:`out`
- is provided it must have the same layout as :attr:`input`.
- .. warning::
- Sparse support is a beta feature and some layout(s)/dtype/device combinations may not be supported,
- or may not have autograd support. If you notice missing functionality please
- open a feature request.
- This operator supports :ref:`TensorFloat32<tf32_on_ampere>`.
- On certain ROCm devices, when using float16 inputs this module will use :ref:`different precision<fp16_on_mi200>` for backward.
- Args:
- input (Tensor): matrix to be added
- mat1 (Tensor): the first matrix to be matrix multiplied
- mat2 (Tensor): the second matrix to be matrix multiplied
- out_dtype (dtype, optional): the dtype of the output tensor,
- Supported only on CUDA and for torch.float32 given
- torch.float16/torch.bfloat16 input dtypes
- Keyword args:
- beta (Number, optional): multiplier for :attr:`input` (:math:`\beta`)
- alpha (Number, optional): multiplier for :math:`mat1 @ mat2` (:math:`\alpha`)
- out (Tensor, optional): the output tensor.
- Example::
- >>> M = torch.randn(2, 3)
- >>> mat1 = torch.randn(2, 3)
- >>> mat2 = torch.randn(3, 3)
- >>> torch.addmm(M, mat1, mat2)
- tensor([[-4.8716, 1.4671, -1.3746],
- [ 0.7573, -3.9555, -2.8681]])
- """
- @overload
- def addmm(
- beta: Number | _complex,
- self: Tensor,
- mat1: Tensor,
- mat2: Tensor,
- *,
- out: Tensor,
- ) -> Tensor:
- r"""
- addmm(input, mat1, mat2, out_dtype=None, *, beta=1, alpha=1, out=None) -> Tensor
- Performs a matrix multiplication of the matrices :attr:`mat1` and :attr:`mat2`.
- The matrix :attr:`input` is added to the final result.
- If :attr:`mat1` is a :math:`(n \times m)` tensor, :attr:`mat2` is a
- :math:`(m \times p)` tensor, then :attr:`input` must be
- :ref:`broadcastable <broadcasting-semantics>` with a :math:`(n \times p)` tensor
- and :attr:`out` will be a :math:`(n \times p)` tensor.
- :attr:`alpha` and :attr:`beta` are scaling factors on matrix-vector product between
- :attr:`mat1` and :attr:`mat2` and the added matrix :attr:`input` respectively.
- .. math::
- \text{out} = \beta\ \text{input} + \alpha\ (\text{mat1}_i \mathbin{@} \text{mat2}_i)
- If :attr:`beta` is 0, then the content of :attr:`input` will be ignored, and `nan` and `inf` in
- it will not be propagated.
- For inputs of type `FloatTensor` or `DoubleTensor`, arguments :attr:`beta` and
- :attr:`alpha` must be real numbers, otherwise they should be integers.
- This operation has support for arguments with :ref:`sparse layouts<sparse-docs>`. If
- :attr:`input` is sparse the result will have the same layout and if :attr:`out`
- is provided it must have the same layout as :attr:`input`.
- .. warning::
- Sparse support is a beta feature and some layout(s)/dtype/device combinations may not be supported,
- or may not have autograd support. If you notice missing functionality please
- open a feature request.
- This operator supports :ref:`TensorFloat32<tf32_on_ampere>`.
- On certain ROCm devices, when using float16 inputs this module will use :ref:`different precision<fp16_on_mi200>` for backward.
- Args:
- input (Tensor): matrix to be added
- mat1 (Tensor): the first matrix to be matrix multiplied
- mat2 (Tensor): the second matrix to be matrix multiplied
- out_dtype (dtype, optional): the dtype of the output tensor,
- Supported only on CUDA and for torch.float32 given
- torch.float16/torch.bfloat16 input dtypes
- Keyword args:
- beta (Number, optional): multiplier for :attr:`input` (:math:`\beta`)
- alpha (Number, optional): multiplier for :math:`mat1 @ mat2` (:math:`\alpha`)
- out (Tensor, optional): the output tensor.
- Example::
- >>> M = torch.randn(2, 3)
- >>> mat1 = torch.randn(2, 3)
- >>> mat2 = torch.randn(3, 3)
- >>> torch.addmm(M, mat1, mat2)
- tensor([[-4.8716, 1.4671, -1.3746],
- [ 0.7573, -3.9555, -2.8681]])
- """
- @overload
- def addmv(
- beta: Number | _complex,
- self: Tensor,
- alpha: Number | _complex,
- mat: Tensor,
- vec: Tensor,
- ) -> Tensor:
- r"""
- addmv(input, mat, vec, *, beta=1, alpha=1, out=None) -> Tensor
- Performs a matrix-vector product of the matrix :attr:`mat` and
- the vector :attr:`vec`.
- The vector :attr:`input` is added to the final result.
- If :attr:`mat` is a :math:`(n \times m)` tensor, :attr:`vec` is a 1-D tensor of
- size `m`, then :attr:`input` must be
- :ref:`broadcastable <broadcasting-semantics>` with a 1-D tensor of size `n` and
- :attr:`out` will be 1-D tensor of size `n`.
- :attr:`alpha` and :attr:`beta` are scaling factors on matrix-vector product between
- :attr:`mat` and :attr:`vec` and the added tensor :attr:`input` respectively.
- .. math::
- \text{out} = \beta\ \text{input} + \alpha\ (\text{mat} \mathbin{@} \text{vec})
- If :attr:`beta` is 0, then the content of :attr:`input` will be ignored, and `nan` and `inf` in
- it will not be propagated.
- For inputs of type `FloatTensor` or `DoubleTensor`, arguments :attr:`beta` and
- :attr:`alpha` must be real numbers, otherwise they should be integers.
- Args:
- input (Tensor): vector to be added
- mat (Tensor): matrix to be matrix multiplied
- vec (Tensor): vector to be matrix multiplied
- Keyword args:
- beta (Number, optional): multiplier for :attr:`input` (:math:`\beta`)
- alpha (Number, optional): multiplier for :math:`mat @ vec` (:math:`\alpha`)
- out (Tensor, optional): the output tensor.
- Example::
- >>> M = torch.randn(2)
- >>> mat = torch.randn(2, 3)
- >>> vec = torch.randn(3)
- >>> torch.addmv(M, mat, vec)
- tensor([-0.3768, -5.5565])
- """
- @overload
- def addmv(
- beta: Number | _complex,
- self: Tensor,
- alpha: Number | _complex,
- mat: Tensor,
- vec: Tensor,
- *,
- out: Tensor,
- ) -> Tensor:
- r"""
- addmv(input, mat, vec, *, beta=1, alpha=1, out=None) -> Tensor
- Performs a matrix-vector product of the matrix :attr:`mat` and
- the vector :attr:`vec`.
- The vector :attr:`input` is added to the final result.
- If :attr:`mat` is a :math:`(n \times m)` tensor, :attr:`vec` is a 1-D tensor of
- size `m`, then :attr:`input` must be
- :ref:`broadcastable <broadcasting-semantics>` with a 1-D tensor of size `n` and
- :attr:`out` will be 1-D tensor of size `n`.
- :attr:`alpha` and :attr:`beta` are scaling factors on matrix-vector product between
- :attr:`mat` and :attr:`vec` and the added tensor :attr:`input` respectively.
- .. math::
- \text{out} = \beta\ \text{input} + \alpha\ (\text{mat} \mathbin{@} \text{vec})
- If :attr:`beta` is 0, then the content of :attr:`input` will be ignored, and `nan` and `inf` in
- it will not be propagated.
- For inputs of type `FloatTensor` or `DoubleTensor`, arguments :attr:`beta` and
- :attr:`alpha` must be real numbers, otherwise they should be integers.
- Args:
- input (Tensor): vector to be added
- mat (Tensor): matrix to be matrix multiplied
- vec (Tensor): vector to be matrix multiplied
- Keyword args:
- beta (Number, optional): multiplier for :attr:`input` (:math:`\beta`)
- alpha (Number, optional): multiplier for :math:`mat @ vec` (:math:`\alpha`)
- out (Tensor, optional): the output tensor.
- Example::
- >>> M = torch.randn(2)
- >>> mat = torch.randn(2, 3)
- >>> vec = torch.randn(3)
- >>> torch.addmv(M, mat, vec)
- tensor([-0.3768, -5.5565])
- """
- @overload
- def addmv(
- input: Tensor,
- mat: Tensor,
- vec: Tensor,
- *,
- beta: Number | _complex = 1,
- alpha: Number | _complex = 1,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- addmv(input, mat, vec, *, beta=1, alpha=1, out=None) -> Tensor
- Performs a matrix-vector product of the matrix :attr:`mat` and
- the vector :attr:`vec`.
- The vector :attr:`input` is added to the final result.
- If :attr:`mat` is a :math:`(n \times m)` tensor, :attr:`vec` is a 1-D tensor of
- size `m`, then :attr:`input` must be
- :ref:`broadcastable <broadcasting-semantics>` with a 1-D tensor of size `n` and
- :attr:`out` will be 1-D tensor of size `n`.
- :attr:`alpha` and :attr:`beta` are scaling factors on matrix-vector product between
- :attr:`mat` and :attr:`vec` and the added tensor :attr:`input` respectively.
- .. math::
- \text{out} = \beta\ \text{input} + \alpha\ (\text{mat} \mathbin{@} \text{vec})
- If :attr:`beta` is 0, then the content of :attr:`input` will be ignored, and `nan` and `inf` in
- it will not be propagated.
- For inputs of type `FloatTensor` or `DoubleTensor`, arguments :attr:`beta` and
- :attr:`alpha` must be real numbers, otherwise they should be integers.
- Args:
- input (Tensor): vector to be added
- mat (Tensor): matrix to be matrix multiplied
- vec (Tensor): vector to be matrix multiplied
- Keyword args:
- beta (Number, optional): multiplier for :attr:`input` (:math:`\beta`)
- alpha (Number, optional): multiplier for :math:`mat @ vec` (:math:`\alpha`)
- out (Tensor, optional): the output tensor.
- Example::
- >>> M = torch.randn(2)
- >>> mat = torch.randn(2, 3)
- >>> vec = torch.randn(3)
- >>> torch.addmv(M, mat, vec)
- tensor([-0.3768, -5.5565])
- """
- @overload
- def addmv(
- beta: Number | _complex,
- self: Tensor,
- mat: Tensor,
- vec: Tensor,
- ) -> Tensor:
- r"""
- addmv(input, mat, vec, *, beta=1, alpha=1, out=None) -> Tensor
- Performs a matrix-vector product of the matrix :attr:`mat` and
- the vector :attr:`vec`.
- The vector :attr:`input` is added to the final result.
- If :attr:`mat` is a :math:`(n \times m)` tensor, :attr:`vec` is a 1-D tensor of
- size `m`, then :attr:`input` must be
- :ref:`broadcastable <broadcasting-semantics>` with a 1-D tensor of size `n` and
- :attr:`out` will be 1-D tensor of size `n`.
- :attr:`alpha` and :attr:`beta` are scaling factors on matrix-vector product between
- :attr:`mat` and :attr:`vec` and the added tensor :attr:`input` respectively.
- .. math::
- \text{out} = \beta\ \text{input} + \alpha\ (\text{mat} \mathbin{@} \text{vec})
- If :attr:`beta` is 0, then the content of :attr:`input` will be ignored, and `nan` and `inf` in
- it will not be propagated.
- For inputs of type `FloatTensor` or `DoubleTensor`, arguments :attr:`beta` and
- :attr:`alpha` must be real numbers, otherwise they should be integers.
- Args:
- input (Tensor): vector to be added
- mat (Tensor): matrix to be matrix multiplied
- vec (Tensor): vector to be matrix multiplied
- Keyword args:
- beta (Number, optional): multiplier for :attr:`input` (:math:`\beta`)
- alpha (Number, optional): multiplier for :math:`mat @ vec` (:math:`\alpha`)
- out (Tensor, optional): the output tensor.
- Example::
- >>> M = torch.randn(2)
- >>> mat = torch.randn(2, 3)
- >>> vec = torch.randn(3)
- >>> torch.addmv(M, mat, vec)
- tensor([-0.3768, -5.5565])
- """
- @overload
- def addmv(
- beta: Number | _complex,
- self: Tensor,
- mat: Tensor,
- vec: Tensor,
- *,
- out: Tensor,
- ) -> Tensor:
- r"""
- addmv(input, mat, vec, *, beta=1, alpha=1, out=None) -> Tensor
- Performs a matrix-vector product of the matrix :attr:`mat` and
- the vector :attr:`vec`.
- The vector :attr:`input` is added to the final result.
- If :attr:`mat` is a :math:`(n \times m)` tensor, :attr:`vec` is a 1-D tensor of
- size `m`, then :attr:`input` must be
- :ref:`broadcastable <broadcasting-semantics>` with a 1-D tensor of size `n` and
- :attr:`out` will be 1-D tensor of size `n`.
- :attr:`alpha` and :attr:`beta` are scaling factors on matrix-vector product between
- :attr:`mat` and :attr:`vec` and the added tensor :attr:`input` respectively.
- .. math::
- \text{out} = \beta\ \text{input} + \alpha\ (\text{mat} \mathbin{@} \text{vec})
- If :attr:`beta` is 0, then the content of :attr:`input` will be ignored, and `nan` and `inf` in
- it will not be propagated.
- For inputs of type `FloatTensor` or `DoubleTensor`, arguments :attr:`beta` and
- :attr:`alpha` must be real numbers, otherwise they should be integers.
- Args:
- input (Tensor): vector to be added
- mat (Tensor): matrix to be matrix multiplied
- vec (Tensor): vector to be matrix multiplied
- Keyword args:
- beta (Number, optional): multiplier for :attr:`input` (:math:`\beta`)
- alpha (Number, optional): multiplier for :math:`mat @ vec` (:math:`\alpha`)
- out (Tensor, optional): the output tensor.
- Example::
- >>> M = torch.randn(2)
- >>> mat = torch.randn(2, 3)
- >>> vec = torch.randn(3)
- >>> torch.addmv(M, mat, vec)
- tensor([-0.3768, -5.5565])
- """
- @overload
- def addmv_(
- beta: Number | _complex,
- self: Tensor,
- alpha: Number | _complex,
- mat: Tensor,
- vec: Tensor,
- ) -> Tensor: ...
- @overload
- def addmv_(
- input: Tensor,
- mat: Tensor,
- vec: Tensor,
- *,
- beta: Number | _complex = 1,
- alpha: Number | _complex = 1,
- ) -> Tensor: ...
- @overload
- def addmv_(
- beta: Number | _complex,
- self: Tensor,
- mat: Tensor,
- vec: Tensor,
- ) -> Tensor: ...
- @overload
- def addr(
- beta: Number | _complex,
- self: Tensor,
- alpha: Number | _complex,
- vec1: Tensor,
- vec2: Tensor,
- ) -> Tensor:
- r"""
- addr(input, vec1, vec2, *, beta=1, alpha=1, out=None) -> Tensor
- Performs the outer-product of vectors :attr:`vec1` and :attr:`vec2`
- and adds it to the matrix :attr:`input`.
- Optional values :attr:`beta` and :attr:`alpha` are scaling factors on the
- outer product between :attr:`vec1` and :attr:`vec2` and the added matrix
- :attr:`input` respectively.
- .. math::
- \text{out} = \beta\ \text{input} + \alpha\ (\text{vec1} \otimes \text{vec2})
- If :attr:`beta` is 0, then the content of :attr:`input` will be ignored, and `nan` and `inf` in
- it will not be propagated.
- If :attr:`vec1` is a vector of size `n` and :attr:`vec2` is a vector
- of size `m`, then :attr:`input` must be
- :ref:`broadcastable <broadcasting-semantics>` with a matrix of size
- :math:`(n \times m)` and :attr:`out` will be a matrix of size
- :math:`(n \times m)`.
- Args:
- input (Tensor): matrix to be added
- vec1 (Tensor): the first vector of the outer product
- vec2 (Tensor): the second vector of the outer product
- Keyword args:
- beta (Number, optional): multiplier for :attr:`input` (:math:`\beta`)
- alpha (Number, optional): multiplier for :math:`\text{vec1} \otimes \text{vec2}` (:math:`\alpha`)
- out (Tensor, optional): the output tensor.
- Example::
- >>> vec1 = torch.arange(1., 4.)
- >>> vec2 = torch.arange(1., 3.)
- >>> M = torch.zeros(3, 2)
- >>> torch.addr(M, vec1, vec2)
- tensor([[ 1., 2.],
- [ 2., 4.],
- [ 3., 6.]])
- """
- @overload
- def addr(
- beta: Number | _complex,
- self: Tensor,
- alpha: Number | _complex,
- vec1: Tensor,
- vec2: Tensor,
- *,
- out: Tensor,
- ) -> Tensor:
- r"""
- addr(input, vec1, vec2, *, beta=1, alpha=1, out=None) -> Tensor
- Performs the outer-product of vectors :attr:`vec1` and :attr:`vec2`
- and adds it to the matrix :attr:`input`.
- Optional values :attr:`beta` and :attr:`alpha` are scaling factors on the
- outer product between :attr:`vec1` and :attr:`vec2` and the added matrix
- :attr:`input` respectively.
- .. math::
- \text{out} = \beta\ \text{input} + \alpha\ (\text{vec1} \otimes \text{vec2})
- If :attr:`beta` is 0, then the content of :attr:`input` will be ignored, and `nan` and `inf` in
- it will not be propagated.
- If :attr:`vec1` is a vector of size `n` and :attr:`vec2` is a vector
- of size `m`, then :attr:`input` must be
- :ref:`broadcastable <broadcasting-semantics>` with a matrix of size
- :math:`(n \times m)` and :attr:`out` will be a matrix of size
- :math:`(n \times m)`.
- Args:
- input (Tensor): matrix to be added
- vec1 (Tensor): the first vector of the outer product
- vec2 (Tensor): the second vector of the outer product
- Keyword args:
- beta (Number, optional): multiplier for :attr:`input` (:math:`\beta`)
- alpha (Number, optional): multiplier for :math:`\text{vec1} \otimes \text{vec2}` (:math:`\alpha`)
- out (Tensor, optional): the output tensor.
- Example::
- >>> vec1 = torch.arange(1., 4.)
- >>> vec2 = torch.arange(1., 3.)
- >>> M = torch.zeros(3, 2)
- >>> torch.addr(M, vec1, vec2)
- tensor([[ 1., 2.],
- [ 2., 4.],
- [ 3., 6.]])
- """
- @overload
- def addr(
- input: Tensor,
- vec1: Tensor,
- vec2: Tensor,
- *,
- beta: Number | _complex = 1,
- alpha: Number | _complex = 1,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- addr(input, vec1, vec2, *, beta=1, alpha=1, out=None) -> Tensor
- Performs the outer-product of vectors :attr:`vec1` and :attr:`vec2`
- and adds it to the matrix :attr:`input`.
- Optional values :attr:`beta` and :attr:`alpha` are scaling factors on the
- outer product between :attr:`vec1` and :attr:`vec2` and the added matrix
- :attr:`input` respectively.
- .. math::
- \text{out} = \beta\ \text{input} + \alpha\ (\text{vec1} \otimes \text{vec2})
- If :attr:`beta` is 0, then the content of :attr:`input` will be ignored, and `nan` and `inf` in
- it will not be propagated.
- If :attr:`vec1` is a vector of size `n` and :attr:`vec2` is a vector
- of size `m`, then :attr:`input` must be
- :ref:`broadcastable <broadcasting-semantics>` with a matrix of size
- :math:`(n \times m)` and :attr:`out` will be a matrix of size
- :math:`(n \times m)`.
- Args:
- input (Tensor): matrix to be added
- vec1 (Tensor): the first vector of the outer product
- vec2 (Tensor): the second vector of the outer product
- Keyword args:
- beta (Number, optional): multiplier for :attr:`input` (:math:`\beta`)
- alpha (Number, optional): multiplier for :math:`\text{vec1} \otimes \text{vec2}` (:math:`\alpha`)
- out (Tensor, optional): the output tensor.
- Example::
- >>> vec1 = torch.arange(1., 4.)
- >>> vec2 = torch.arange(1., 3.)
- >>> M = torch.zeros(3, 2)
- >>> torch.addr(M, vec1, vec2)
- tensor([[ 1., 2.],
- [ 2., 4.],
- [ 3., 6.]])
- """
- @overload
- def addr(
- beta: Number | _complex,
- self: Tensor,
- vec1: Tensor,
- vec2: Tensor,
- ) -> Tensor:
- r"""
- addr(input, vec1, vec2, *, beta=1, alpha=1, out=None) -> Tensor
- Performs the outer-product of vectors :attr:`vec1` and :attr:`vec2`
- and adds it to the matrix :attr:`input`.
- Optional values :attr:`beta` and :attr:`alpha` are scaling factors on the
- outer product between :attr:`vec1` and :attr:`vec2` and the added matrix
- :attr:`input` respectively.
- .. math::
- \text{out} = \beta\ \text{input} + \alpha\ (\text{vec1} \otimes \text{vec2})
- If :attr:`beta` is 0, then the content of :attr:`input` will be ignored, and `nan` and `inf` in
- it will not be propagated.
- If :attr:`vec1` is a vector of size `n` and :attr:`vec2` is a vector
- of size `m`, then :attr:`input` must be
- :ref:`broadcastable <broadcasting-semantics>` with a matrix of size
- :math:`(n \times m)` and :attr:`out` will be a matrix of size
- :math:`(n \times m)`.
- Args:
- input (Tensor): matrix to be added
- vec1 (Tensor): the first vector of the outer product
- vec2 (Tensor): the second vector of the outer product
- Keyword args:
- beta (Number, optional): multiplier for :attr:`input` (:math:`\beta`)
- alpha (Number, optional): multiplier for :math:`\text{vec1} \otimes \text{vec2}` (:math:`\alpha`)
- out (Tensor, optional): the output tensor.
- Example::
- >>> vec1 = torch.arange(1., 4.)
- >>> vec2 = torch.arange(1., 3.)
- >>> M = torch.zeros(3, 2)
- >>> torch.addr(M, vec1, vec2)
- tensor([[ 1., 2.],
- [ 2., 4.],
- [ 3., 6.]])
- """
- @overload
- def addr(
- beta: Number | _complex,
- self: Tensor,
- vec1: Tensor,
- vec2: Tensor,
- *,
- out: Tensor,
- ) -> Tensor:
- r"""
- addr(input, vec1, vec2, *, beta=1, alpha=1, out=None) -> Tensor
- Performs the outer-product of vectors :attr:`vec1` and :attr:`vec2`
- and adds it to the matrix :attr:`input`.
- Optional values :attr:`beta` and :attr:`alpha` are scaling factors on the
- outer product between :attr:`vec1` and :attr:`vec2` and the added matrix
- :attr:`input` respectively.
- .. math::
- \text{out} = \beta\ \text{input} + \alpha\ (\text{vec1} \otimes \text{vec2})
- If :attr:`beta` is 0, then the content of :attr:`input` will be ignored, and `nan` and `inf` in
- it will not be propagated.
- If :attr:`vec1` is a vector of size `n` and :attr:`vec2` is a vector
- of size `m`, then :attr:`input` must be
- :ref:`broadcastable <broadcasting-semantics>` with a matrix of size
- :math:`(n \times m)` and :attr:`out` will be a matrix of size
- :math:`(n \times m)`.
- Args:
- input (Tensor): matrix to be added
- vec1 (Tensor): the first vector of the outer product
- vec2 (Tensor): the second vector of the outer product
- Keyword args:
- beta (Number, optional): multiplier for :attr:`input` (:math:`\beta`)
- alpha (Number, optional): multiplier for :math:`\text{vec1} \otimes \text{vec2}` (:math:`\alpha`)
- out (Tensor, optional): the output tensor.
- Example::
- >>> vec1 = torch.arange(1., 4.)
- >>> vec2 = torch.arange(1., 3.)
- >>> M = torch.zeros(3, 2)
- >>> torch.addr(M, vec1, vec2)
- tensor([[ 1., 2.],
- [ 2., 4.],
- [ 3., 6.]])
- """
- def adjoint(input: Tensor) -> Tensor:
- r"""
- adjoint(input: Tensor) -> Tensor
- Returns a view of the tensor conjugated and with the last two dimensions transposed.
- ``x.adjoint()`` is equivalent to ``x.transpose(-2, -1).conj()`` for complex tensors and
- to ``x.transpose(-2, -1)`` for real tensors.
- Args:
- {input}
- Example::
- >>> x = torch.arange(4, dtype=torch.float)
- >>> A = torch.complex(x, x).reshape(2, 2)
- >>> A
- tensor([[0.+0.j, 1.+1.j],
- [2.+2.j, 3.+3.j]])
- >>> A.adjoint()
- tensor([[0.-0.j, 2.-2.j],
- [1.-1.j, 3.-3.j]])
- >>> (A.adjoint() == A.mH).all()
- tensor(True)
- """
- def affine_grid_generator(
- theta: Tensor,
- size: Sequence[_int | SymInt],
- align_corners: _bool,
- ) -> Tensor: ...
- def alias_copy(input: Tensor, *, out: Tensor | None = None) -> Tensor:
- r"""
- Performs the same operation as :func:`torch.alias`, but all output tensors
- are freshly created instead of aliasing the input.
- """
- @overload
- def all(input: Tensor, *, out: Tensor | None = None) -> Tensor:
- r"""
- all(input: Tensor, *, out=None) -> Tensor
- Tests if all elements in :attr:`input` evaluate to `True`.
- .. note:: This function matches the behaviour of NumPy in returning
- output of dtype `bool` for all supported dtypes except `uint8`.
- For `uint8` the dtype of output is `uint8` itself.
- Args:
- input (Tensor): the input tensor.
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> a = torch.rand(1, 2).bool()
- >>> a
- tensor([[False, True]], dtype=torch.bool)
- >>> torch.all(a)
- tensor(False, dtype=torch.bool)
- >>> a = torch.arange(0, 3)
- >>> a
- tensor([0, 1, 2])
- >>> torch.all(a)
- tensor(False)
- .. function:: all(input, dim, keepdim=False, *, out=None) -> Tensor
- :noindex:
- For each row of :attr:`input` in the given dimension :attr:`dim`,
- returns `True` if all elements in the row evaluate to `True` and `False` otherwise.
- If :attr:`keepdim` is ``True``, the output tensor is of the same size
- as :attr:`input` except in the dimension(s) :attr:`dim` where it is of size 1.
- Otherwise, :attr:`dim` is squeezed (see :func:`torch.squeeze`), resulting in the
- output tensor having 1 (or ``len(dim)``) fewer dimension(s).
- Args:
- input (Tensor): the input tensor.
- dim (int or tuple of ints, optional): the dimension or dimensions to reduce.
- If ``None``, all dimensions are reduced.
- keepdim (bool, optional): whether the output tensor has :attr:`dim` retained or not. Default: ``False``.
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> a = torch.rand(4, 2).bool()
- >>> a
- tensor([[True, True],
- [True, False],
- [True, True],
- [True, True]], dtype=torch.bool)
- >>> torch.all(a, dim=1)
- tensor([ True, False, True, True], dtype=torch.bool)
- >>> torch.all(a, dim=0)
- tensor([ True, False], dtype=torch.bool)
- """
- @overload
- def all(
- input: Tensor,
- dim: _size | None = None,
- keepdim: _bool = False,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- all(input: Tensor, *, out=None) -> Tensor
- Tests if all elements in :attr:`input` evaluate to `True`.
- .. note:: This function matches the behaviour of NumPy in returning
- output of dtype `bool` for all supported dtypes except `uint8`.
- For `uint8` the dtype of output is `uint8` itself.
- Args:
- input (Tensor): the input tensor.
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> a = torch.rand(1, 2).bool()
- >>> a
- tensor([[False, True]], dtype=torch.bool)
- >>> torch.all(a)
- tensor(False, dtype=torch.bool)
- >>> a = torch.arange(0, 3)
- >>> a
- tensor([0, 1, 2])
- >>> torch.all(a)
- tensor(False)
- .. function:: all(input, dim, keepdim=False, *, out=None) -> Tensor
- :noindex:
- For each row of :attr:`input` in the given dimension :attr:`dim`,
- returns `True` if all elements in the row evaluate to `True` and `False` otherwise.
- If :attr:`keepdim` is ``True``, the output tensor is of the same size
- as :attr:`input` except in the dimension(s) :attr:`dim` where it is of size 1.
- Otherwise, :attr:`dim` is squeezed (see :func:`torch.squeeze`), resulting in the
- output tensor having 1 (or ``len(dim)``) fewer dimension(s).
- Args:
- input (Tensor): the input tensor.
- dim (int or tuple of ints, optional): the dimension or dimensions to reduce.
- If ``None``, all dimensions are reduced.
- keepdim (bool, optional): whether the output tensor has :attr:`dim` retained or not. Default: ``False``.
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> a = torch.rand(4, 2).bool()
- >>> a
- tensor([[True, True],
- [True, False],
- [True, True],
- [True, True]], dtype=torch.bool)
- >>> torch.all(a, dim=1)
- tensor([ True, False, True, True], dtype=torch.bool)
- >>> torch.all(a, dim=0)
- tensor([ True, False], dtype=torch.bool)
- """
- @overload
- def all(
- input: Tensor,
- dim: _int,
- keepdim: _bool = False,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- all(input: Tensor, *, out=None) -> Tensor
- Tests if all elements in :attr:`input` evaluate to `True`.
- .. note:: This function matches the behaviour of NumPy in returning
- output of dtype `bool` for all supported dtypes except `uint8`.
- For `uint8` the dtype of output is `uint8` itself.
- Args:
- input (Tensor): the input tensor.
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> a = torch.rand(1, 2).bool()
- >>> a
- tensor([[False, True]], dtype=torch.bool)
- >>> torch.all(a)
- tensor(False, dtype=torch.bool)
- >>> a = torch.arange(0, 3)
- >>> a
- tensor([0, 1, 2])
- >>> torch.all(a)
- tensor(False)
- .. function:: all(input, dim, keepdim=False, *, out=None) -> Tensor
- :noindex:
- For each row of :attr:`input` in the given dimension :attr:`dim`,
- returns `True` if all elements in the row evaluate to `True` and `False` otherwise.
- If :attr:`keepdim` is ``True``, the output tensor is of the same size
- as :attr:`input` except in the dimension(s) :attr:`dim` where it is of size 1.
- Otherwise, :attr:`dim` is squeezed (see :func:`torch.squeeze`), resulting in the
- output tensor having 1 (or ``len(dim)``) fewer dimension(s).
- Args:
- input (Tensor): the input tensor.
- dim (int or tuple of ints, optional): the dimension or dimensions to reduce.
- If ``None``, all dimensions are reduced.
- keepdim (bool, optional): whether the output tensor has :attr:`dim` retained or not. Default: ``False``.
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> a = torch.rand(4, 2).bool()
- >>> a
- tensor([[True, True],
- [True, False],
- [True, True],
- [True, True]], dtype=torch.bool)
- >>> torch.all(a, dim=1)
- tensor([ True, False, True, True], dtype=torch.bool)
- >>> torch.all(a, dim=0)
- tensor([ True, False], dtype=torch.bool)
- """
- @overload
- def all(
- input: Tensor,
- dim: str | EllipsisType | None,
- keepdim: _bool = False,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- all(input: Tensor, *, out=None) -> Tensor
- Tests if all elements in :attr:`input` evaluate to `True`.
- .. note:: This function matches the behaviour of NumPy in returning
- output of dtype `bool` for all supported dtypes except `uint8`.
- For `uint8` the dtype of output is `uint8` itself.
- Args:
- input (Tensor): the input tensor.
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> a = torch.rand(1, 2).bool()
- >>> a
- tensor([[False, True]], dtype=torch.bool)
- >>> torch.all(a)
- tensor(False, dtype=torch.bool)
- >>> a = torch.arange(0, 3)
- >>> a
- tensor([0, 1, 2])
- >>> torch.all(a)
- tensor(False)
- .. function:: all(input, dim, keepdim=False, *, out=None) -> Tensor
- :noindex:
- For each row of :attr:`input` in the given dimension :attr:`dim`,
- returns `True` if all elements in the row evaluate to `True` and `False` otherwise.
- If :attr:`keepdim` is ``True``, the output tensor is of the same size
- as :attr:`input` except in the dimension(s) :attr:`dim` where it is of size 1.
- Otherwise, :attr:`dim` is squeezed (see :func:`torch.squeeze`), resulting in the
- output tensor having 1 (or ``len(dim)``) fewer dimension(s).
- Args:
- input (Tensor): the input tensor.
- dim (int or tuple of ints, optional): the dimension or dimensions to reduce.
- If ``None``, all dimensions are reduced.
- keepdim (bool, optional): whether the output tensor has :attr:`dim` retained or not. Default: ``False``.
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> a = torch.rand(4, 2).bool()
- >>> a
- tensor([[True, True],
- [True, False],
- [True, True],
- [True, True]], dtype=torch.bool)
- >>> torch.all(a, dim=1)
- tensor([ True, False, True, True], dtype=torch.bool)
- >>> torch.all(a, dim=0)
- tensor([ True, False], dtype=torch.bool)
- """
- def allclose(
- input: Tensor,
- other: Tensor,
- rtol: _float = 1e-05,
- atol: _float = 1e-08,
- equal_nan: _bool = False,
- ) -> _bool:
- r"""
- allclose(input: Tensor, other: Tensor, rtol: float = 1e-05, atol: float = 1e-08, equal_nan: bool = False) -> bool
- This function checks if :attr:`input` and :attr:`other` satisfy the condition:
- .. math::
- \lvert \text{input}_i - \text{other}_i \rvert \leq \texttt{atol} + \texttt{rtol} \times \lvert \text{other}_i \rvert
- elementwise, for all elements of :attr:`input` and :attr:`other`. The behaviour of this function is analogous to
- `numpy.allclose <https://numpy.org/doc/stable/reference/generated/numpy.allclose.html>`_
- Args:
- input (Tensor): first tensor to compare
- other (Tensor): second tensor to compare
- atol (float, optional): absolute tolerance. Default: 1e-08
- rtol (float, optional): relative tolerance. Default: 1e-05
- equal_nan (bool, optional): if ``True``, then two ``NaN`` s will be considered equal. Default: ``False``
- Example::
- >>> torch.allclose(torch.tensor([10000., 1e-07]), torch.tensor([10000.1, 1e-08]))
- False
- >>> torch.allclose(torch.tensor([10000., 1e-08]), torch.tensor([10000.1, 1e-09]))
- True
- >>> torch.allclose(torch.tensor([1.0, float('nan')]), torch.tensor([1.0, float('nan')]))
- False
- >>> torch.allclose(torch.tensor([1.0, float('nan')]), torch.tensor([1.0, float('nan')]), equal_nan=True)
- True
- """
- def alpha_dropout(input: Tensor, p: _float, train: _bool) -> Tensor: ...
- def alpha_dropout_(input: Tensor, p: _float, train: _bool) -> Tensor: ...
- def amax(
- input: Tensor,
- dim: _int | _size = (),
- keepdim: _bool = False,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- amax(input, dim, keepdim=False, *, out=None) -> Tensor
- Returns the maximum value of each slice of the :attr:`input` tensor in the given
- dimension(s) :attr:`dim`.
- .. note::
- The difference between ``max``/``min`` and ``amax``/``amin`` is:
- - ``amax``/``amin`` supports reducing on multiple dimensions,
- - ``amax``/``amin`` does not return indices.
- Both ``amax``/``amin`` evenly distribute gradients between equal values
- when there are multiple input elements with the same minimum or maximum value.
- For ``max``/``min``:
- - If reduce over all dimensions(no dim specified), gradients evenly distribute between equally ``max``/``min`` values.
- - If reduce over one specified axis, only propagate to the indexed element.
- If :attr:`keepdim` is ``True``, the output tensor is of the same size
- as :attr:`input` except in the dimension(s) :attr:`dim` where it is of size 1.
- Otherwise, :attr:`dim` is squeezed (see :func:`torch.squeeze`), resulting in the
- output tensor having 1 (or ``len(dim)``) fewer dimension(s).
- Args:
- input (Tensor): the input tensor.
- dim (int or tuple of ints, optional): the dimension or dimensions to reduce.
- If ``None``, all dimensions are reduced.
- keepdim (bool, optional): whether the output tensor has :attr:`dim` retained or not. Default: ``False``.
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> a = torch.randn(4, 4)
- >>> a
- tensor([[ 0.8177, 1.4878, -0.2491, 0.9130],
- [-0.7158, 1.1775, 2.0992, 0.4817],
- [-0.0053, 0.0164, -1.3738, -0.0507],
- [ 1.9700, 1.1106, -1.0318, -1.0816]])
- >>> torch.amax(a, 1)
- tensor([1.4878, 2.0992, 0.0164, 1.9700])
- """
- def amin(
- input: Tensor,
- dim: _int | _size = (),
- keepdim: _bool = False,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- amin(input, dim, keepdim=False, *, out=None) -> Tensor
- Returns the minimum value of each slice of the :attr:`input` tensor in the given
- dimension(s) :attr:`dim`.
- .. note::
- The difference between ``max``/``min`` and ``amax``/``amin`` is:
- - ``amax``/``amin`` supports reducing on multiple dimensions,
- - ``amax``/``amin`` does not return indices.
- Both ``amax``/``amin`` evenly distribute gradients between equal values
- when there are multiple input elements with the same minimum or maximum value.
- For ``max``/``min``:
- - If reduce over all dimensions(no dim specified), gradients evenly distribute between equally ``max``/``min`` values.
- - If reduce over one specified axis, only propagate to the indexed element.
- If :attr:`keepdim` is ``True``, the output tensor is of the same size
- as :attr:`input` except in the dimension(s) :attr:`dim` where it is of size 1.
- Otherwise, :attr:`dim` is squeezed (see :func:`torch.squeeze`), resulting in the
- output tensor having 1 (or ``len(dim)``) fewer dimension(s).
- Args:
- input (Tensor): the input tensor.
- dim (int or tuple of ints, optional): the dimension or dimensions to reduce.
- If ``None``, all dimensions are reduced.
- keepdim (bool, optional): whether the output tensor has :attr:`dim` retained or not. Default: ``False``.
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> a = torch.randn(4, 4)
- >>> a
- tensor([[ 0.6451, -0.4866, 0.2987, -1.3312],
- [-0.5744, 1.2980, 1.8397, -0.2713],
- [ 0.9128, 0.9214, -1.7268, -0.2995],
- [ 0.9023, 0.4853, 0.9075, -1.6165]])
- >>> torch.amin(a, 1)
- tensor([-1.3312, -0.5744, -1.7268, -1.6165])
- """
- def aminmax(
- input: Tensor,
- *,
- dim: _int | None = None,
- keepdim: _bool = False,
- out: Tensor | tuple[Tensor, ...] | list[Tensor] | None = None,
- ) -> torch.return_types.aminmax:
- r"""
- aminmax(input, *, dim=None, keepdim=False, out=None) -> (Tensor min, Tensor max)
- Computes the minimum and maximum values of the :attr:`input` tensor.
- Args:
- input (Tensor):
- The input tensor
- Keyword Args:
- dim (Optional[int]):
- The dimension along which to compute the values. If `None`,
- computes the values over the entire :attr:`input` tensor.
- Default is `None`.
- keepdim (bool):
- If `True`, the reduced dimensions will be kept in the output
- tensor as dimensions with size 1 for broadcasting, otherwise
- they will be removed, as if calling (:func:`torch.squeeze`).
- Default is `False`.
- out (Optional[Tuple[Tensor, Tensor]]):
- Optional tensors on which to write the result. Must have the same
- shape and dtype as the expected output.
- Default is `None`.
- Returns:
- A named tuple `(min, max)` containing the minimum and maximum values.
- Raises:
- RuntimeError
- If any of the dimensions to compute the values over has size 0.
- .. note::
- NaN values are propagated to the output if at least one value is NaN.
- .. seealso::
- :func:`torch.amin` computes just the minimum value
- :func:`torch.amax` computes just the maximum value
- Example::
- >>> torch.aminmax(torch.tensor([1, -3, 5]))
- torch.return_types.aminmax(
- min=tensor(-3),
- max=tensor(5))
- >>> # aminmax propagates NaNs
- >>> torch.aminmax(torch.tensor([1, -3, 5, torch.nan]))
- torch.return_types.aminmax(
- min=tensor(nan),
- max=tensor(nan))
- >>> t = torch.arange(10).view(2, 5)
- >>> t
- tensor([[0, 1, 2, 3, 4],
- [5, 6, 7, 8, 9]])
- >>> t.aminmax(dim=0, keepdim=True)
- torch.return_types.aminmax(
- min=tensor([[0, 1, 2, 3, 4]]),
- max=tensor([[5, 6, 7, 8, 9]]))
- """
- def angle(input: Tensor, *, out: Tensor | None = None) -> Tensor:
- r"""
- angle(input: Tensor, *, out: Optional[Tensor]) -> Tensor
- Computes the element-wise angle (in radians) of the given :attr:`input` tensor.
- .. math::
- \text{out}_{i} = angle(\text{input}_{i})
- Args:
- input (Tensor): the input tensor.
- Keyword args:
- out (Tensor, optional): the output tensor.
- .. note:: Starting in PyTorch 1.8, angle returns pi for negative real numbers,
- zero for non-negative real numbers, and propagates NaNs. Previously
- the function would return zero for all real numbers and not propagate
- floating-point NaNs.
- Example::
- >>> torch.angle(torch.tensor([-1 + 1j, -2 + 2j, 3 - 3j]))*180/3.14159
- tensor([ 135., 135, -45])
- """
- @overload
- def any(input: Tensor, *, out: Tensor | None = None) -> Tensor:
- r"""
- any(input: Tensor, *, out: Optional[Tensor]) -> Tensor
- Tests if any element in :attr:`input` evaluates to `True`.
- .. note:: This function matches the behaviour of NumPy in returning
- output of dtype `bool` for all supported dtypes except `uint8`.
- For `uint8` the dtype of output is `uint8` itself.
- Args:
- input (Tensor): the input tensor.
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> a = torch.rand(1, 2).bool()
- >>> a
- tensor([[False, True]], dtype=torch.bool)
- >>> torch.any(a)
- tensor(True, dtype=torch.bool)
- >>> a = torch.arange(0, 3)
- >>> a
- tensor([0, 1, 2])
- >>> torch.any(a)
- tensor(True)
- .. function:: any(input, dim, keepdim=False, *, out=None) -> Tensor
- :noindex:
- For each row of :attr:`input` in the given dimension :attr:`dim`,
- returns `True` if any element in the row evaluate to `True` and `False` otherwise.
- If :attr:`keepdim` is ``True``, the output tensor is of the same size
- as :attr:`input` except in the dimension(s) :attr:`dim` where it is of size 1.
- Otherwise, :attr:`dim` is squeezed (see :func:`torch.squeeze`), resulting in the
- output tensor having 1 (or ``len(dim)``) fewer dimension(s).
- Args:
- input (Tensor): the input tensor.
- dim (int or tuple of ints, optional): the dimension or dimensions to reduce.
- If ``None``, all dimensions are reduced.
- keepdim (bool, optional): whether the output tensor has :attr:`dim` retained or not. Default: ``False``.
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> a = torch.randn(4, 2) < 0
- >>> a
- tensor([[ True, True],
- [False, True],
- [ True, True],
- [False, False]])
- >>> torch.any(a, 1)
- tensor([ True, True, True, False])
- >>> torch.any(a, 0)
- tensor([True, True])
- """
- @overload
- def any(
- input: Tensor,
- dim: _size | None = None,
- keepdim: _bool = False,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- any(input: Tensor, *, out: Optional[Tensor]) -> Tensor
- Tests if any element in :attr:`input` evaluates to `True`.
- .. note:: This function matches the behaviour of NumPy in returning
- output of dtype `bool` for all supported dtypes except `uint8`.
- For `uint8` the dtype of output is `uint8` itself.
- Args:
- input (Tensor): the input tensor.
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> a = torch.rand(1, 2).bool()
- >>> a
- tensor([[False, True]], dtype=torch.bool)
- >>> torch.any(a)
- tensor(True, dtype=torch.bool)
- >>> a = torch.arange(0, 3)
- >>> a
- tensor([0, 1, 2])
- >>> torch.any(a)
- tensor(True)
- .. function:: any(input, dim, keepdim=False, *, out=None) -> Tensor
- :noindex:
- For each row of :attr:`input` in the given dimension :attr:`dim`,
- returns `True` if any element in the row evaluate to `True` and `False` otherwise.
- If :attr:`keepdim` is ``True``, the output tensor is of the same size
- as :attr:`input` except in the dimension(s) :attr:`dim` where it is of size 1.
- Otherwise, :attr:`dim` is squeezed (see :func:`torch.squeeze`), resulting in the
- output tensor having 1 (or ``len(dim)``) fewer dimension(s).
- Args:
- input (Tensor): the input tensor.
- dim (int or tuple of ints, optional): the dimension or dimensions to reduce.
- If ``None``, all dimensions are reduced.
- keepdim (bool, optional): whether the output tensor has :attr:`dim` retained or not. Default: ``False``.
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> a = torch.randn(4, 2) < 0
- >>> a
- tensor([[ True, True],
- [False, True],
- [ True, True],
- [False, False]])
- >>> torch.any(a, 1)
- tensor([ True, True, True, False])
- >>> torch.any(a, 0)
- tensor([True, True])
- """
- @overload
- def any(
- input: Tensor,
- dim: _int,
- keepdim: _bool = False,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- any(input: Tensor, *, out: Optional[Tensor]) -> Tensor
- Tests if any element in :attr:`input` evaluates to `True`.
- .. note:: This function matches the behaviour of NumPy in returning
- output of dtype `bool` for all supported dtypes except `uint8`.
- For `uint8` the dtype of output is `uint8` itself.
- Args:
- input (Tensor): the input tensor.
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> a = torch.rand(1, 2).bool()
- >>> a
- tensor([[False, True]], dtype=torch.bool)
- >>> torch.any(a)
- tensor(True, dtype=torch.bool)
- >>> a = torch.arange(0, 3)
- >>> a
- tensor([0, 1, 2])
- >>> torch.any(a)
- tensor(True)
- .. function:: any(input, dim, keepdim=False, *, out=None) -> Tensor
- :noindex:
- For each row of :attr:`input` in the given dimension :attr:`dim`,
- returns `True` if any element in the row evaluate to `True` and `False` otherwise.
- If :attr:`keepdim` is ``True``, the output tensor is of the same size
- as :attr:`input` except in the dimension(s) :attr:`dim` where it is of size 1.
- Otherwise, :attr:`dim` is squeezed (see :func:`torch.squeeze`), resulting in the
- output tensor having 1 (or ``len(dim)``) fewer dimension(s).
- Args:
- input (Tensor): the input tensor.
- dim (int or tuple of ints, optional): the dimension or dimensions to reduce.
- If ``None``, all dimensions are reduced.
- keepdim (bool, optional): whether the output tensor has :attr:`dim` retained or not. Default: ``False``.
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> a = torch.randn(4, 2) < 0
- >>> a
- tensor([[ True, True],
- [False, True],
- [ True, True],
- [False, False]])
- >>> torch.any(a, 1)
- tensor([ True, True, True, False])
- >>> torch.any(a, 0)
- tensor([True, True])
- """
- @overload
- def any(
- input: Tensor,
- dim: str | EllipsisType | None,
- keepdim: _bool = False,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- any(input: Tensor, *, out: Optional[Tensor]) -> Tensor
- Tests if any element in :attr:`input` evaluates to `True`.
- .. note:: This function matches the behaviour of NumPy in returning
- output of dtype `bool` for all supported dtypes except `uint8`.
- For `uint8` the dtype of output is `uint8` itself.
- Args:
- input (Tensor): the input tensor.
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> a = torch.rand(1, 2).bool()
- >>> a
- tensor([[False, True]], dtype=torch.bool)
- >>> torch.any(a)
- tensor(True, dtype=torch.bool)
- >>> a = torch.arange(0, 3)
- >>> a
- tensor([0, 1, 2])
- >>> torch.any(a)
- tensor(True)
- .. function:: any(input, dim, keepdim=False, *, out=None) -> Tensor
- :noindex:
- For each row of :attr:`input` in the given dimension :attr:`dim`,
- returns `True` if any element in the row evaluate to `True` and `False` otherwise.
- If :attr:`keepdim` is ``True``, the output tensor is of the same size
- as :attr:`input` except in the dimension(s) :attr:`dim` where it is of size 1.
- Otherwise, :attr:`dim` is squeezed (see :func:`torch.squeeze`), resulting in the
- output tensor having 1 (or ``len(dim)``) fewer dimension(s).
- Args:
- input (Tensor): the input tensor.
- dim (int or tuple of ints, optional): the dimension or dimensions to reduce.
- If ``None``, all dimensions are reduced.
- keepdim (bool, optional): whether the output tensor has :attr:`dim` retained or not. Default: ``False``.
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> a = torch.randn(4, 2) < 0
- >>> a
- tensor([[ True, True],
- [False, True],
- [ True, True],
- [False, False]])
- >>> torch.any(a, 1)
- tensor([ True, True, True, False])
- >>> torch.any(a, 0)
- tensor([True, True])
- """
- @overload
- def arange(
- start: Number,
- end: Number,
- step: Number,
- *,
- out: Tensor | None = None,
- dtype: _dtype | None = None,
- device: DeviceLikeType | None = None,
- requires_grad: _bool = False,
- pin_memory: _bool = False,
- ) -> Tensor:
- r"""
- arange(start=0, end, step=1, *, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False) -> Tensor
- Returns a 1-D tensor of size :math:`\left\lceil \frac{\text{end} - \text{start}}{\text{step}} \right\rceil`
- with values from the interval ``[start, end)`` taken with common difference
- :attr:`step` beginning from `start`.
- Note: When using floating-point dtypes (especially reduced precision types like ``bfloat16``),
- the results may be affected by floating-point rounding behavior. Some values in the sequence
- might not be exactly representable in certain floating-point formats, which can lead to
- repeated values or unexpected rounding. For precise sequences, it is recommended to use
- integer dtypes instead of floating-point dtypes.
- Note that non-integer :attr:`step` is subject to floating point rounding errors when
- comparing against :attr:`end`; to avoid inconsistency, we advise subtracting a small epsilon from :attr:`end`
- in such cases.
- .. math::
- \text{out}_{{i+1}} = \text{out}_{i} + \text{step}
- Args:
- start (Number, optional): the starting value for the set of points. Default: ``0``.
- end (Number): the ending value for the set of points
- step (Number, optional): the gap between each pair of adjacent points. Default: ``1``.
- Keyword args:
- out (Tensor, optional): the output tensor.
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor.
- Default: if ``None``, uses a global default (see :func:`torch.set_default_dtype`). If `dtype` is not given, infer the data type from the other input
- arguments. If any of `start`, `end`, or `stop` are floating-point, the
- `dtype` is inferred to be the default dtype, see
- :meth:`~torch.get_default_dtype`. Otherwise, the `dtype` is inferred to
- be `torch.int64`.
- layout (:class:`torch.layout`, optional): the desired layout of returned Tensor.
- Default: ``torch.strided``.
- device (:class:`torch.device`, optional): the desired device of returned tensor.
- Default: if ``None``, uses the current device for the default tensor type
- (see :func:`torch.set_default_device`). :attr:`device` will be the CPU
- for CPU tensor types and the current CUDA device for CUDA tensor types.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- Example::
- >>> torch.arange(5)
- tensor([ 0, 1, 2, 3, 4])
- >>> torch.arange(1, 4)
- tensor([ 1, 2, 3])
- >>> torch.arange(1, 2.5, 0.5)
- tensor([ 1.0000, 1.5000, 2.0000])
- """
- @overload
- def arange(
- start: Number,
- end: Number,
- *,
- out: Tensor | None = None,
- dtype: _dtype | None = None,
- device: DeviceLikeType | None = None,
- requires_grad: _bool = False,
- pin_memory: _bool = False,
- ) -> Tensor:
- r"""
- arange(start=0, end, step=1, *, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False) -> Tensor
- Returns a 1-D tensor of size :math:`\left\lceil \frac{\text{end} - \text{start}}{\text{step}} \right\rceil`
- with values from the interval ``[start, end)`` taken with common difference
- :attr:`step` beginning from `start`.
- Note: When using floating-point dtypes (especially reduced precision types like ``bfloat16``),
- the results may be affected by floating-point rounding behavior. Some values in the sequence
- might not be exactly representable in certain floating-point formats, which can lead to
- repeated values or unexpected rounding. For precise sequences, it is recommended to use
- integer dtypes instead of floating-point dtypes.
- Note that non-integer :attr:`step` is subject to floating point rounding errors when
- comparing against :attr:`end`; to avoid inconsistency, we advise subtracting a small epsilon from :attr:`end`
- in such cases.
- .. math::
- \text{out}_{{i+1}} = \text{out}_{i} + \text{step}
- Args:
- start (Number, optional): the starting value for the set of points. Default: ``0``.
- end (Number): the ending value for the set of points
- step (Number, optional): the gap between each pair of adjacent points. Default: ``1``.
- Keyword args:
- out (Tensor, optional): the output tensor.
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor.
- Default: if ``None``, uses a global default (see :func:`torch.set_default_dtype`). If `dtype` is not given, infer the data type from the other input
- arguments. If any of `start`, `end`, or `stop` are floating-point, the
- `dtype` is inferred to be the default dtype, see
- :meth:`~torch.get_default_dtype`. Otherwise, the `dtype` is inferred to
- be `torch.int64`.
- layout (:class:`torch.layout`, optional): the desired layout of returned Tensor.
- Default: ``torch.strided``.
- device (:class:`torch.device`, optional): the desired device of returned tensor.
- Default: if ``None``, uses the current device for the default tensor type
- (see :func:`torch.set_default_device`). :attr:`device` will be the CPU
- for CPU tensor types and the current CUDA device for CUDA tensor types.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- Example::
- >>> torch.arange(5)
- tensor([ 0, 1, 2, 3, 4])
- >>> torch.arange(1, 4)
- tensor([ 1, 2, 3])
- >>> torch.arange(1, 2.5, 0.5)
- tensor([ 1.0000, 1.5000, 2.0000])
- """
- @overload
- def arange(
- end: Number,
- *,
- out: Tensor | None = None,
- dtype: _dtype | None = None,
- device: DeviceLikeType | None = None,
- requires_grad: _bool = False,
- pin_memory: _bool = False,
- ) -> Tensor:
- r"""
- arange(start=0, end, step=1, *, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False) -> Tensor
- Returns a 1-D tensor of size :math:`\left\lceil \frac{\text{end} - \text{start}}{\text{step}} \right\rceil`
- with values from the interval ``[start, end)`` taken with common difference
- :attr:`step` beginning from `start`.
- Note: When using floating-point dtypes (especially reduced precision types like ``bfloat16``),
- the results may be affected by floating-point rounding behavior. Some values in the sequence
- might not be exactly representable in certain floating-point formats, which can lead to
- repeated values or unexpected rounding. For precise sequences, it is recommended to use
- integer dtypes instead of floating-point dtypes.
- Note that non-integer :attr:`step` is subject to floating point rounding errors when
- comparing against :attr:`end`; to avoid inconsistency, we advise subtracting a small epsilon from :attr:`end`
- in such cases.
- .. math::
- \text{out}_{{i+1}} = \text{out}_{i} + \text{step}
- Args:
- start (Number, optional): the starting value for the set of points. Default: ``0``.
- end (Number): the ending value for the set of points
- step (Number, optional): the gap between each pair of adjacent points. Default: ``1``.
- Keyword args:
- out (Tensor, optional): the output tensor.
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor.
- Default: if ``None``, uses a global default (see :func:`torch.set_default_dtype`). If `dtype` is not given, infer the data type from the other input
- arguments. If any of `start`, `end`, or `stop` are floating-point, the
- `dtype` is inferred to be the default dtype, see
- :meth:`~torch.get_default_dtype`. Otherwise, the `dtype` is inferred to
- be `torch.int64`.
- layout (:class:`torch.layout`, optional): the desired layout of returned Tensor.
- Default: ``torch.strided``.
- device (:class:`torch.device`, optional): the desired device of returned tensor.
- Default: if ``None``, uses the current device for the default tensor type
- (see :func:`torch.set_default_device`). :attr:`device` will be the CPU
- for CPU tensor types and the current CUDA device for CUDA tensor types.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- Example::
- >>> torch.arange(5)
- tensor([ 0, 1, 2, 3, 4])
- >>> torch.arange(1, 4)
- tensor([ 1, 2, 3])
- >>> torch.arange(1, 2.5, 0.5)
- tensor([ 1.0000, 1.5000, 2.0000])
- """
- @overload
- def arange(
- end: Number | _complex,
- *,
- out: Tensor | None = None,
- dtype: _dtype | None = None,
- layout: _layout | None = None,
- device: DeviceLikeType | None = None,
- pin_memory: _bool | None = False,
- requires_grad: _bool | None = False,
- ) -> Tensor:
- r"""
- arange(start=0, end, step=1, *, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False) -> Tensor
- Returns a 1-D tensor of size :math:`\left\lceil \frac{\text{end} - \text{start}}{\text{step}} \right\rceil`
- with values from the interval ``[start, end)`` taken with common difference
- :attr:`step` beginning from `start`.
- Note: When using floating-point dtypes (especially reduced precision types like ``bfloat16``),
- the results may be affected by floating-point rounding behavior. Some values in the sequence
- might not be exactly representable in certain floating-point formats, which can lead to
- repeated values or unexpected rounding. For precise sequences, it is recommended to use
- integer dtypes instead of floating-point dtypes.
- Note that non-integer :attr:`step` is subject to floating point rounding errors when
- comparing against :attr:`end`; to avoid inconsistency, we advise subtracting a small epsilon from :attr:`end`
- in such cases.
- .. math::
- \text{out}_{{i+1}} = \text{out}_{i} + \text{step}
- Args:
- start (Number, optional): the starting value for the set of points. Default: ``0``.
- end (Number): the ending value for the set of points
- step (Number, optional): the gap between each pair of adjacent points. Default: ``1``.
- Keyword args:
- out (Tensor, optional): the output tensor.
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor.
- Default: if ``None``, uses a global default (see :func:`torch.set_default_dtype`). If `dtype` is not given, infer the data type from the other input
- arguments. If any of `start`, `end`, or `stop` are floating-point, the
- `dtype` is inferred to be the default dtype, see
- :meth:`~torch.get_default_dtype`. Otherwise, the `dtype` is inferred to
- be `torch.int64`.
- layout (:class:`torch.layout`, optional): the desired layout of returned Tensor.
- Default: ``torch.strided``.
- device (:class:`torch.device`, optional): the desired device of returned tensor.
- Default: if ``None``, uses the current device for the default tensor type
- (see :func:`torch.set_default_device`). :attr:`device` will be the CPU
- for CPU tensor types and the current CUDA device for CUDA tensor types.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- Example::
- >>> torch.arange(5)
- tensor([ 0, 1, 2, 3, 4])
- >>> torch.arange(1, 4)
- tensor([ 1, 2, 3])
- >>> torch.arange(1, 2.5, 0.5)
- tensor([ 1.0000, 1.5000, 2.0000])
- """
- @overload
- def arange(
- start: Number | _complex,
- end: Number | _complex,
- *,
- dtype: _dtype | None = None,
- layout: _layout | None = None,
- device: DeviceLikeType | None = None,
- pin_memory: _bool | None = False,
- requires_grad: _bool | None = False,
- ) -> Tensor:
- r"""
- arange(start=0, end, step=1, *, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False) -> Tensor
- Returns a 1-D tensor of size :math:`\left\lceil \frac{\text{end} - \text{start}}{\text{step}} \right\rceil`
- with values from the interval ``[start, end)`` taken with common difference
- :attr:`step` beginning from `start`.
- Note: When using floating-point dtypes (especially reduced precision types like ``bfloat16``),
- the results may be affected by floating-point rounding behavior. Some values in the sequence
- might not be exactly representable in certain floating-point formats, which can lead to
- repeated values or unexpected rounding. For precise sequences, it is recommended to use
- integer dtypes instead of floating-point dtypes.
- Note that non-integer :attr:`step` is subject to floating point rounding errors when
- comparing against :attr:`end`; to avoid inconsistency, we advise subtracting a small epsilon from :attr:`end`
- in such cases.
- .. math::
- \text{out}_{{i+1}} = \text{out}_{i} + \text{step}
- Args:
- start (Number, optional): the starting value for the set of points. Default: ``0``.
- end (Number): the ending value for the set of points
- step (Number, optional): the gap between each pair of adjacent points. Default: ``1``.
- Keyword args:
- out (Tensor, optional): the output tensor.
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor.
- Default: if ``None``, uses a global default (see :func:`torch.set_default_dtype`). If `dtype` is not given, infer the data type from the other input
- arguments. If any of `start`, `end`, or `stop` are floating-point, the
- `dtype` is inferred to be the default dtype, see
- :meth:`~torch.get_default_dtype`. Otherwise, the `dtype` is inferred to
- be `torch.int64`.
- layout (:class:`torch.layout`, optional): the desired layout of returned Tensor.
- Default: ``torch.strided``.
- device (:class:`torch.device`, optional): the desired device of returned tensor.
- Default: if ``None``, uses the current device for the default tensor type
- (see :func:`torch.set_default_device`). :attr:`device` will be the CPU
- for CPU tensor types and the current CUDA device for CUDA tensor types.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- Example::
- >>> torch.arange(5)
- tensor([ 0, 1, 2, 3, 4])
- >>> torch.arange(1, 4)
- tensor([ 1, 2, 3])
- >>> torch.arange(1, 2.5, 0.5)
- tensor([ 1.0000, 1.5000, 2.0000])
- """
- @overload
- def arange(
- start: Number | _complex,
- end: Number | _complex,
- step: Number | _complex = 1,
- *,
- out: Tensor | None = None,
- dtype: _dtype | None = None,
- layout: _layout | None = None,
- device: DeviceLikeType | None = None,
- pin_memory: _bool | None = False,
- requires_grad: _bool | None = False,
- ) -> Tensor:
- r"""
- arange(start=0, end, step=1, *, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False) -> Tensor
- Returns a 1-D tensor of size :math:`\left\lceil \frac{\text{end} - \text{start}}{\text{step}} \right\rceil`
- with values from the interval ``[start, end)`` taken with common difference
- :attr:`step` beginning from `start`.
- Note: When using floating-point dtypes (especially reduced precision types like ``bfloat16``),
- the results may be affected by floating-point rounding behavior. Some values in the sequence
- might not be exactly representable in certain floating-point formats, which can lead to
- repeated values or unexpected rounding. For precise sequences, it is recommended to use
- integer dtypes instead of floating-point dtypes.
- Note that non-integer :attr:`step` is subject to floating point rounding errors when
- comparing against :attr:`end`; to avoid inconsistency, we advise subtracting a small epsilon from :attr:`end`
- in such cases.
- .. math::
- \text{out}_{{i+1}} = \text{out}_{i} + \text{step}
- Args:
- start (Number, optional): the starting value for the set of points. Default: ``0``.
- end (Number): the ending value for the set of points
- step (Number, optional): the gap between each pair of adjacent points. Default: ``1``.
- Keyword args:
- out (Tensor, optional): the output tensor.
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor.
- Default: if ``None``, uses a global default (see :func:`torch.set_default_dtype`). If `dtype` is not given, infer the data type from the other input
- arguments. If any of `start`, `end`, or `stop` are floating-point, the
- `dtype` is inferred to be the default dtype, see
- :meth:`~torch.get_default_dtype`. Otherwise, the `dtype` is inferred to
- be `torch.int64`.
- layout (:class:`torch.layout`, optional): the desired layout of returned Tensor.
- Default: ``torch.strided``.
- device (:class:`torch.device`, optional): the desired device of returned tensor.
- Default: if ``None``, uses the current device for the default tensor type
- (see :func:`torch.set_default_device`). :attr:`device` will be the CPU
- for CPU tensor types and the current CUDA device for CUDA tensor types.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- Example::
- >>> torch.arange(5)
- tensor([ 0, 1, 2, 3, 4])
- >>> torch.arange(1, 4)
- tensor([ 1, 2, 3])
- >>> torch.arange(1, 2.5, 0.5)
- tensor([ 1.0000, 1.5000, 2.0000])
- """
- def arccos(input: Tensor, *, out: Tensor | None = None) -> Tensor:
- r"""
- arccos(input: Tensor, *, out: Optional[Tensor]) -> Tensor
- Alias for :func:`torch.acos`.
- """
- def arccos_(input: Tensor) -> Tensor: ...
- def arccosh(input: Tensor, *, out: Tensor | None = None) -> Tensor:
- r"""
- arccosh(input: Tensor, *, out: Optional[Tensor]) -> Tensor
- Alias for :func:`torch.acosh`.
- """
- def arccosh_(input: Tensor) -> Tensor: ...
- def arcsin(input: Tensor, *, out: Tensor | None = None) -> Tensor:
- r"""
- arcsin(input: Tensor, *, out: Optional[Tensor]) -> Tensor
- Alias for :func:`torch.asin`.
- """
- def arcsin_(input: Tensor) -> Tensor: ...
- def arcsinh(input: Tensor, *, out: Tensor | None = None) -> Tensor:
- r"""
- arcsinh(input: Tensor, *, out: Optional[Tensor]) -> Tensor
- Alias for :func:`torch.asinh`.
- """
- def arcsinh_(input: Tensor) -> Tensor: ...
- def arctan(input: Tensor, *, out: Tensor | None = None) -> Tensor:
- r"""
- arctan(input: Tensor, *, out: Optional[Tensor]) -> Tensor
- Alias for :func:`torch.atan`.
- """
- def arctan2(
- input: Tensor,
- other: Tensor,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- arctan2(input: Tensor, other: Tensor, *, out: Optional[Tensor]) -> Tensor
- Alias for :func:`torch.atan2`.
- """
- def arctan_(input: Tensor) -> Tensor: ...
- def arctanh(input: Tensor, *, out: Tensor | None = None) -> Tensor:
- r"""
- arctanh(input: Tensor, *, out: Optional[Tensor]) -> Tensor
- Alias for :func:`torch.atanh`.
- """
- def arctanh_(input: Tensor) -> Tensor: ...
- def argmax(
- input: Tensor,
- dim: _int | None = None,
- keepdim: _bool = False,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- argmax(input) -> LongTensor
- Returns the indices of the maximum value of all elements in the :attr:`input` tensor.
- This is the second value returned by :meth:`torch.max`. See its
- documentation for the exact semantics of this method.
- .. note:: If there are multiple maximal values then the indices of the first maximal value are returned.
- Args:
- input (Tensor): the input tensor.
- Example::
- >>> a = torch.randn(4, 4)
- >>> a
- tensor([[ 1.3398, 0.2663, -0.2686, 0.2450],
- [-0.7401, -0.8805, -0.3402, -1.1936],
- [ 0.4907, -1.3948, -1.0691, -0.3132],
- [-1.6092, 0.5419, -0.2993, 0.3195]])
- >>> torch.argmax(a)
- tensor(0)
- .. function:: argmax(input, dim, keepdim=False) -> LongTensor
- :noindex:
- Returns the indices of the maximum values of a tensor across a dimension.
- This is the second value returned by :meth:`torch.max`. See its
- documentation for the exact semantics of this method.
- Args:
- input (Tensor): the input tensor.
- dim (int, optional): the dimension to reduce.
- If ``None``, the argmax of the flattened input is returned.
- keepdim (bool, optional): whether the output tensor has :attr:`dim` retained or not. Default: ``False``.
- Example::
- >>> a = torch.randn(4, 4)
- >>> a
- tensor([[ 1.3398, 0.2663, -0.2686, 0.2450],
- [-0.7401, -0.8805, -0.3402, -1.1936],
- [ 0.4907, -1.3948, -1.0691, -0.3132],
- [-1.6092, 0.5419, -0.2993, 0.3195]])
- >>> torch.argmax(a, dim=1)
- tensor([ 0, 2, 0, 1])
- """
- def argmin(
- input: Tensor,
- dim: _int | None = None,
- keepdim: _bool = False,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- argmin(input, dim=None, keepdim=False) -> LongTensor
- Returns the indices of the minimum value(s) of the flattened tensor or along a dimension
- This is the second value returned by :meth:`torch.min`. See its
- documentation for the exact semantics of this method.
- .. note:: If there are multiple minimal values then the indices of the first minimal value are returned.
- Args:
- input (Tensor): the input tensor.
- dim (int, optional): the dimension to reduce.
- If ``None``, the argmin of the flattened input is returned.
- keepdim (bool, optional): whether the output tensor has :attr:`dim` retained or not. Default: ``False``.
- Example::
- >>> a = torch.randn(4, 4)
- >>> a
- tensor([[ 0.1139, 0.2254, -0.1381, 0.3687],
- [ 1.0100, -1.1975, -0.0102, -0.4732],
- [-0.9240, 0.1207, -0.7506, -1.0213],
- [ 1.7809, -1.2960, 0.9384, 0.1438]])
- >>> torch.argmin(a)
- tensor(13)
- >>> torch.argmin(a, dim=1)
- tensor([ 2, 1, 3, 1])
- >>> torch.argmin(a, dim=1, keepdim=True)
- tensor([[2],
- [1],
- [3],
- [1]])
- """
- @overload
- def argsort(
- input: Tensor,
- *,
- stable: _bool,
- dim: _int = -1,
- descending: _bool = False,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- argsort(input, dim=-1, descending=False, *, stable=False) -> Tensor
- Returns the indices that sort a tensor along a given dimension in ascending
- order by value.
- This is the second value returned by :meth:`torch.sort`. See its documentation
- for the exact semantics of this method.
- If :attr:`stable` is ``True`` then the sorting routine becomes stable, preserving
- the order of equivalent elements. If ``False``, the relative order of values
- which compare equal is not guaranteed. ``True`` is slower.
- Args:
- input (Tensor): the input tensor.
- dim (int, optional): the dimension to sort along
- descending (bool, optional): controls the sorting order (ascending or descending)
- Keyword args:
- stable (bool, optional): controls the relative order of equivalent elements
- Example::
- >>> a = torch.randn(4, 4)
- >>> a
- tensor([[ 0.0785, 1.5267, -0.8521, 0.4065],
- [ 0.1598, 0.0788, -0.0745, -1.2700],
- [ 1.2208, 1.0722, -0.7064, 1.2564],
- [ 0.0669, -0.2318, -0.8229, -0.9280]])
- >>> torch.argsort(a, dim=1)
- tensor([[2, 0, 3, 1],
- [3, 2, 1, 0],
- [2, 1, 0, 3],
- [3, 2, 1, 0]])
- """
- @overload
- def argsort(
- input: Tensor,
- dim: _int = -1,
- descending: _bool = False,
- ) -> Tensor:
- r"""
- argsort(input, dim=-1, descending=False, *, stable=False) -> Tensor
- Returns the indices that sort a tensor along a given dimension in ascending
- order by value.
- This is the second value returned by :meth:`torch.sort`. See its documentation
- for the exact semantics of this method.
- If :attr:`stable` is ``True`` then the sorting routine becomes stable, preserving
- the order of equivalent elements. If ``False``, the relative order of values
- which compare equal is not guaranteed. ``True`` is slower.
- Args:
- input (Tensor): the input tensor.
- dim (int, optional): the dimension to sort along
- descending (bool, optional): controls the sorting order (ascending or descending)
- Keyword args:
- stable (bool, optional): controls the relative order of equivalent elements
- Example::
- >>> a = torch.randn(4, 4)
- >>> a
- tensor([[ 0.0785, 1.5267, -0.8521, 0.4065],
- [ 0.1598, 0.0788, -0.0745, -1.2700],
- [ 1.2208, 1.0722, -0.7064, 1.2564],
- [ 0.0669, -0.2318, -0.8229, -0.9280]])
- >>> torch.argsort(a, dim=1)
- tensor([[2, 0, 3, 1],
- [3, 2, 1, 0],
- [2, 1, 0, 3],
- [3, 2, 1, 0]])
- """
- @overload
- def argsort(
- input: Tensor,
- dim: str | EllipsisType | None,
- descending: _bool = False,
- ) -> Tensor:
- r"""
- argsort(input, dim=-1, descending=False, *, stable=False) -> Tensor
- Returns the indices that sort a tensor along a given dimension in ascending
- order by value.
- This is the second value returned by :meth:`torch.sort`. See its documentation
- for the exact semantics of this method.
- If :attr:`stable` is ``True`` then the sorting routine becomes stable, preserving
- the order of equivalent elements. If ``False``, the relative order of values
- which compare equal is not guaranteed. ``True`` is slower.
- Args:
- input (Tensor): the input tensor.
- dim (int, optional): the dimension to sort along
- descending (bool, optional): controls the sorting order (ascending or descending)
- Keyword args:
- stable (bool, optional): controls the relative order of equivalent elements
- Example::
- >>> a = torch.randn(4, 4)
- >>> a
- tensor([[ 0.0785, 1.5267, -0.8521, 0.4065],
- [ 0.1598, 0.0788, -0.0745, -1.2700],
- [ 1.2208, 1.0722, -0.7064, 1.2564],
- [ 0.0669, -0.2318, -0.8229, -0.9280]])
- >>> torch.argsort(a, dim=1)
- tensor([[2, 0, 3, 1],
- [3, 2, 1, 0],
- [2, 1, 0, 3],
- [3, 2, 1, 0]])
- """
- def argwhere(input: Tensor) -> Tensor:
- r"""
- argwhere(input) -> Tensor
- Returns a tensor containing the indices of all non-zero elements of
- :attr:`input`. Each row in the result contains the indices of a non-zero
- element in :attr:`input`. The result is sorted lexicographically, with
- the last index changing the fastest (C-style).
- If :attr:`input` has :math:`n` dimensions, then the resulting indices tensor
- :attr:`out` is of size :math:`(z \times n)`, where :math:`z` is the total number of
- non-zero elements in the :attr:`input` tensor.
- .. note::
- This function is similar to NumPy's `argwhere`.
- When :attr:`input` is on CUDA, this function causes host-device synchronization.
- Args:
- {input}
- Example::
- >>> t = torch.tensor([1, 0, 1])
- >>> torch.argwhere(t)
- tensor([[0],
- [2]])
- >>> t = torch.tensor([[1, 0, 1], [0, 1, 1]])
- >>> torch.argwhere(t)
- tensor([[0, 0],
- [0, 2],
- [1, 1],
- [1, 2]])
- """
- def as_strided(
- input: Tensor,
- size: Sequence[_int | SymInt],
- stride: Sequence[_int | SymInt],
- storage_offset: _int | SymInt | None = None,
- ) -> Tensor:
- r"""
- as_strided(input, size, stride, storage_offset=None) -> Tensor
- Create a view of an existing `torch.Tensor` :attr:`input` with specified
- :attr:`size`, :attr:`stride` and :attr:`storage_offset`.
- .. warning::
- Prefer using other view functions, like :meth:`torch.Tensor.view` or
- :meth:`torch.Tensor.expand`, to setting a view's strides manually with
- `as_strided`, as this function will throw an error on non-standard Pytorch
- backends (that do not have a concept of stride) and the result will depend
- on the current layout in memory. The constructed view must only refer to
- elements within the Tensor's storage or a runtime error will be thrown.
- If the generated view is "overlapped" (with multiple indices referring to
- the same element in memory), the behavior of inplace operations on this view
- is undefined (and might not throw runtime errors).
- Args:
- input (Tensor): the input tensor.
- size (tuple or ints): the shape of the output tensor
- stride (tuple or ints): the stride of the output tensor
- storage_offset (int, optional): the offset in the underlying storage of the output tensor.
- If ``None``, the storage_offset of the output tensor will match the input tensor.
- Example::
- >>> x = torch.randn(3, 3)
- >>> x
- tensor([[ 0.9039, 0.6291, 1.0795],
- [ 0.1586, 2.1939, -0.4900],
- [-0.1909, -0.7503, 1.9355]])
- >>> t = torch.as_strided(x, (2, 2), (1, 2))
- >>> t
- tensor([[0.9039, 1.0795],
- [0.6291, 0.1586]])
- >>> t = torch.as_strided(x, (2, 2), (1, 2), 1)
- tensor([[0.6291, 0.1586],
- [1.0795, 2.1939]])
- """
- def as_strided_(
- input: Tensor,
- size: Sequence[_int | SymInt],
- stride: Sequence[_int | SymInt],
- storage_offset: _int | SymInt | None = None,
- ) -> Tensor: ...
- def as_strided_copy(
- input: Tensor,
- size: Sequence[_int | SymInt],
- stride: Sequence[_int | SymInt],
- storage_offset: _int | SymInt | None = None,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- Performs the same operation as :func:`torch.as_strided`, but all output tensors
- are freshly created instead of aliasing the input.
- """
- def as_strided_scatter(
- input: Tensor,
- src: Tensor,
- size: Sequence[_int | SymInt],
- stride: Sequence[_int | SymInt],
- storage_offset: _int | SymInt | None = None,
- ) -> Tensor:
- r"""
- as_strided_scatter(input, src, size, stride, storage_offset=None) -> Tensor
- Embeds the values of the :attr:`src` tensor into :attr:`input` along
- the elements corresponding to the result of calling
- input.as_strided(size, stride, storage_offset).
- This function returns a tensor with fresh storage; it does not
- return a view.
- Args:
- input (Tensor): the input tensor.
- size (tuple or ints): the shape of the output tensor
- stride (tuple or ints): the stride of the output tensor
- storage_offset (int, optional): the offset in the underlying storage of the output tensor
- .. note::
- :attr:`src` must be of the proper size in order to be embedded
- into :attr:`input`. Specifically, it should have the same shape as
- `torch.as_strided(input, size, stride, storage_offset)`
- Example::
- >>> a = torch.arange(4).reshape(2, 2) + 1
- >>> a
- tensor([[1, 2],
- [3, 4]])
- >>> b = torch.zeros(3, 3)
- >>> b
- tensor([[0., 0., 0.],
- [0., 0., 0.],
- [0., 0., 0.]])
- >>> torch.as_strided_scatter(b, a, (2, 2), (1, 2))
- tensor([[1., 3., 2.],
- [4., 0., 0.],
- [0., 0., 0.]])
- """
- def as_tensor(
- data: Any,
- dtype: _dtype | None = None,
- device: DeviceLikeType | None = None,
- ) -> Tensor:
- r"""
- as_tensor(data: Any, dtype: Optional[dtype] = None, device: Optional[DeviceLikeType]) -> Tensor
- Converts :attr:`data` into a tensor, sharing data and preserving autograd
- history if possible.
- If :attr:`data` is already a tensor with the requested dtype and device
- then :attr:`data` itself is returned, but if :attr:`data` is a
- tensor with a different dtype or device then it's copied as if using
- `data.to(dtype=dtype, device=device)`.
- If :attr:`data` is a NumPy array (an ndarray) with the same dtype and device then a
- tensor is constructed using :func:`torch.from_numpy`.
- If :attr:`data` is a CuPy array, the returned tensor will be located on the same device as the CuPy array unless
- specifically overwritten by :attr:`device` or a default device. The device of the CuPy array is inferred from the
- pointer of the array using `cudaPointerGetAttributes` unless :attr:`device` is provided with an explicit device index.
- .. seealso::
- :func:`torch.tensor` never shares its data and creates a new "leaf tensor" (see :doc:`/notes/autograd`).
- Args:
- data (array_like): Initial data for the tensor. Can be a list, tuple,
- NumPy ``ndarray``, scalar, and other types.
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor.
- Default: if ``None``, infers data type from :attr:`data`.
- device (:class:`torch.device`, optional): the device of the constructed tensor. If None and data is a tensor
- then the device of data is used. If None and data is not a tensor then
- the result tensor is constructed on the current device.
- Example::
- >>> a = numpy.array([1, 2, 3])
- >>> t = torch.as_tensor(a)
- >>> t
- tensor([ 1, 2, 3])
- >>> t[0] = -1
- >>> a
- array([-1, 2, 3])
- >>> a = numpy.array([1, 2, 3])
- >>> t = torch.as_tensor(a, device=torch.device('cuda'))
- >>> t
- tensor([ 1, 2, 3])
- >>> t[0] = -1
- >>> a
- array([1, 2, 3])
- """
- def asarray(
- obj: Any,
- *,
- dtype: _dtype | None = None,
- device: DeviceLikeType | None = None,
- copy: _bool | None = None,
- requires_grad: _bool = False,
- ) -> Tensor:
- r"""
- asarray(obj: Any, *, dtype: Optional[dtype], device: Optional[DeviceLikeType], copy: Optional[bool] = None, requires_grad: bool = False) -> Tensor # noqa: B950
- Converts :attr:`obj` to a tensor.
- :attr:`obj` can be one of:
- 1. a tensor
- 2. a NumPy array or a NumPy scalar
- 3. a DLPack capsule
- 4. an object that implements Python's buffer protocol
- 5. a scalar
- 6. a sequence of scalars
- When :attr:`obj` is a tensor, NumPy array, or DLPack capsule the returned tensor will,
- by default, not require a gradient, have the same datatype as :attr:`obj`, be on the
- same device, and share memory with it. These properties can be controlled with the
- :attr:`dtype`, :attr:`device`, :attr:`copy`, and :attr:`requires_grad` keyword arguments.
- If the returned tensor is of a different datatype, on a different device, or a copy is
- requested then it will not share its memory with :attr:`obj`. If :attr:`requires_grad`
- is ``True`` then the returned tensor will require a gradient, and if :attr:`obj` is
- also a tensor with an autograd history then the returned tensor will have the same history.
- When :attr:`obj` is not a tensor, NumPy array, or DLPack capsule but implements Python's
- buffer protocol then the buffer is interpreted as an array of bytes grouped according to
- the size of the datatype passed to the :attr:`dtype` keyword argument. (If no datatype is
- passed then the default floating point datatype is used, instead.) The returned tensor
- will have the specified datatype (or default floating point datatype if none is specified)
- and, by default, be on the CPU device and share memory with the buffer.
- When :attr:`obj` is a NumPy scalar, the returned tensor will be a 0-dimensional tensor on
- the CPU and that doesn't share its memory (i.e. ``copy=True``). By default datatype will
- be the PyTorch datatype corresponding to the NumPy's scalar's datatype.
- When :attr:`obj` is none of the above but a scalar, or a sequence of scalars then the
- returned tensor will, by default, infer its datatype from the scalar values, be on the
- current default device, and not share its memory.
- .. seealso::
- :func:`torch.tensor` creates a tensor that always copies the data from the input object.
- :func:`torch.from_numpy` creates a tensor that always shares memory from NumPy arrays.
- :func:`torch.frombuffer` creates a tensor that always shares memory from objects that
- implement the buffer protocol.
- :func:`torch.from_dlpack` creates a tensor that always shares memory from
- DLPack capsules.
- Args:
- obj (object): a tensor, NumPy array, DLPack Capsule, object that implements Python's
- buffer protocol, scalar, or sequence of scalars.
- Keyword args:
- dtype (:class:`torch.dtype`, optional): the datatype of the returned tensor.
- Default: ``None``, which causes the datatype of the returned tensor to be
- inferred from :attr:`obj`.
- copy (bool, optional): controls whether the returned tensor shares memory with :attr:`obj`.
- Default: ``None``, which causes the returned tensor to share memory with :attr:`obj`
- whenever possible. If ``True`` then the returned tensor does not share its memory.
- If ``False`` then the returned tensor shares its memory with :attr:`obj` and an
- error is thrown if it cannot.
- device (:class:`torch.device`, optional): the device of the returned tensor.
- Default: ``None``, which causes the device of :attr:`obj` to be used. Or, if
- :attr:`obj` is a Python sequence, the current default device will be used.
- requires_grad (bool, optional): whether the returned tensor requires grad.
- Default: ``False``, which causes the returned tensor not to require a gradient.
- If ``True``, then the returned tensor will require a gradient, and if :attr:`obj`
- is also a tensor with an autograd history then the returned tensor will have
- the same history.
- Example::
- >>> a = torch.tensor([1, 2, 3])
- >>> # Shares memory with tensor 'a'
- >>> b = torch.asarray(a)
- >>> a.data_ptr() == b.data_ptr()
- True
- >>> # Forces memory copy
- >>> c = torch.asarray(a, copy=True)
- >>> a.data_ptr() == c.data_ptr()
- False
- >>> a = torch.tensor([1., 2., 3.], requires_grad=True)
- >>> b = a + 2
- >>> b
- tensor([3., 4., 5.], grad_fn=<AddBackward0>)
- >>> # Shares memory with tensor 'b', with no grad
- >>> c = torch.asarray(b)
- >>> c
- tensor([3., 4., 5.])
- >>> # Shares memory with tensor 'b', retaining autograd history
- >>> d = torch.asarray(b, requires_grad=True)
- >>> d
- tensor([3., 4., 5.], grad_fn=<AddBackward0>)
- >>> array = numpy.array([1, 2, 3])
- >>> # Shares memory with array 'array'
- >>> t1 = torch.asarray(array)
- >>> array.__array_interface__['data'][0] == t1.data_ptr()
- True
- >>> # Copies memory due to dtype mismatch
- >>> t2 = torch.asarray(array, dtype=torch.float32)
- >>> array.__array_interface__['data'][0] == t2.data_ptr()
- False
- >>> scalar = numpy.float64(0.5)
- >>> torch.asarray(scalar)
- tensor(0.5000, dtype=torch.float64)
- """
- def asin(input: Tensor, *, out: Tensor | None = None) -> Tensor:
- r"""
- asin(input: Tensor, *, out: Optional[Tensor]) -> Tensor
- Returns a new tensor with the arcsine of the elements of :attr:`input`.
- .. math::
- \text{out}_{i} = \sin^{-1}(\text{input}_{i})
- Args:
- input (Tensor): the input tensor.
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> a = torch.randn(4)
- >>> a
- tensor([-0.5962, 1.4985, -0.4396, 1.4525])
- >>> torch.asin(a)
- tensor([-0.6387, nan, -0.4552, nan])
- """
- def asin_(input: Tensor) -> Tensor: ...
- def asinh(input: Tensor, *, out: Tensor | None = None) -> Tensor:
- r"""
- asinh(input: Tensor, *, out: Optional[Tensor]) -> Tensor
- Returns a new tensor with the inverse hyperbolic sine of the elements of :attr:`input`.
- .. math::
- \text{out}_{i} = \sinh^{-1}(\text{input}_{i})
- Args:
- input (Tensor): the input tensor.
- Keyword arguments:
- out (Tensor, optional): the output tensor.
- Example::
- >>> a = torch.randn(4)
- >>> a
- tensor([ 0.1606, -1.4267, -1.0899, -1.0250 ])
- >>> torch.asinh(a)
- tensor([ 0.1599, -1.1534, -0.9435, -0.8990 ])
- """
- def asinh_(input: Tensor) -> Tensor: ...
- def atan(input: Tensor, *, out: Tensor | None = None) -> Tensor:
- r"""
- atan(input: Tensor, *, out: Optional[Tensor]) -> Tensor
- Returns a new tensor with the arctangent of the elements of :attr:`input`.
- .. math::
- \text{out}_{i} = \tan^{-1}(\text{input}_{i})
- Args:
- input (Tensor): the input tensor.
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> a = torch.randn(4)
- >>> a
- tensor([ 0.2341, 0.2539, -0.6256, -0.6448])
- >>> torch.atan(a)
- tensor([ 0.2299, 0.2487, -0.5591, -0.5727])
- """
- def atan2(
- input: Tensor,
- other: Tensor,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- atan2(input: Tensor, other: Tensor, *, out: Optional[Tensor]) -> Tensor
- Element-wise arctangent of :math:`\text{input}_{i} / \text{other}_{i}`
- with consideration of the quadrant. Returns a new tensor with the signed angles
- in radians between vector :math:`(\text{other}_{i}, \text{input}_{i})`
- and vector :math:`(1, 0)`. (Note that :math:`\text{other}_{i}`, the second
- parameter, is the x-coordinate, while :math:`\text{input}_{i}`, the first
- parameter, is the y-coordinate.)
- The shapes of ``input`` and ``other`` must be
- :ref:`broadcastable <broadcasting-semantics>`.
- Args:
- input (Tensor): the first input tensor
- other (Tensor): the second input tensor
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> a = torch.randn(4)
- >>> a
- tensor([ 0.9041, 0.0196, -0.3108, -2.4423])
- >>> torch.atan2(a, torch.randn(4))
- tensor([ 0.9833, 0.0811, -1.9743, -1.4151])
- """
- def atan_(input: Tensor) -> Tensor: ...
- def atanh(input: Tensor, *, out: Tensor | None = None) -> Tensor:
- r"""
- atanh(input: Tensor, *, out: Optional[Tensor]) -> Tensor
- Returns a new tensor with the inverse hyperbolic tangent of the elements of :attr:`input`.
- Note:
- The domain of the inverse hyperbolic tangent is `(-1, 1)` and values outside this range
- will be mapped to ``NaN``, except for the values `1` and `-1` for which the output is
- mapped to `+/-INF` respectively.
- .. math::
- \text{out}_{i} = \tanh^{-1}(\text{input}_{i})
- Args:
- input (Tensor): the input tensor.
- Keyword arguments:
- out (Tensor, optional): the output tensor.
- Example::
- >>> a = torch.randn(4).uniform_(-1, 1)
- >>> a
- tensor([ -0.9385, 0.2968, -0.8591, -0.1871 ])
- >>> torch.atanh(a)
- tensor([ -1.7253, 0.3060, -1.2899, -0.1893 ])
- """
- def atanh_(input: Tensor) -> Tensor: ...
- def avg_pool1d(
- input: Tensor,
- kernel_size: _int | _size,
- stride: _int | _size = (),
- padding: _int | _size = 0,
- ceil_mode: _bool = False,
- count_include_pad: _bool = True,
- ) -> Tensor: ...
- @overload
- def baddbmm(
- beta: Number | _complex,
- self: Tensor,
- alpha: Number | _complex,
- batch1: Tensor,
- batch2: Tensor,
- ) -> Tensor:
- r"""
- baddbmm(input, batch1, batch2, out_dtype=None, *, beta=1, alpha=1, out=None) -> Tensor
- Performs a batch matrix-matrix product of matrices in :attr:`batch1`
- and :attr:`batch2`.
- :attr:`input` is added to the final result.
- :attr:`batch1` and :attr:`batch2` must be 3-D tensors each containing the same
- number of matrices.
- If :attr:`batch1` is a :math:`(b \times n \times m)` tensor, :attr:`batch2` is a
- :math:`(b \times m \times p)` tensor, then :attr:`input` must be
- :ref:`broadcastable <broadcasting-semantics>` with a
- :math:`(b \times n \times p)` tensor and :attr:`out` will be a
- :math:`(b \times n \times p)` tensor. Both :attr:`alpha` and :attr:`beta` mean the
- same as the scaling factors used in :meth:`torch.addbmm`.
- .. math::
- \text{out}_i = \beta\ \text{input}_i + \alpha\ (\text{batch1}_i \mathbin{@} \text{batch2}_i)
- If :attr:`beta` is 0, then the content of :attr:`input` will be ignored, and `nan` and `inf` in
- it will not be propagated.
- For inputs of type `FloatTensor` or `DoubleTensor`, arguments :attr:`beta` and
- :attr:`alpha` must be real numbers, otherwise they should be integers.
- This operator supports :ref:`TensorFloat32<tf32_on_ampere>`.
- On certain ROCm devices, when using float16 inputs this module will use :ref:`different precision<fp16_on_mi200>` for backward.
- Args:
- input (Tensor): the tensor to be added
- batch1 (Tensor): the first batch of matrices to be multiplied
- batch2 (Tensor): the second batch of matrices to be multiplied
- out_dtype (dtype, optional): the dtype of the output tensor,
- Supported only on CUDA and for torch.float32 given
- torch.float16/torch.bfloat16 input dtypes
- Keyword args:
- beta (Number, optional): multiplier for :attr:`input` (:math:`\beta`)
- alpha (Number, optional): multiplier for :math:`\text{batch1} \mathbin{@} \text{batch2}` (:math:`\alpha`)
- out (Tensor, optional): the output tensor.
- Example::
- >>> M = torch.randn(10, 3, 5)
- >>> batch1 = torch.randn(10, 3, 4)
- >>> batch2 = torch.randn(10, 4, 5)
- >>> torch.baddbmm(M, batch1, batch2).size()
- torch.Size([10, 3, 5])
- """
- @overload
- def baddbmm(
- beta: Number | _complex,
- self: Tensor,
- alpha: Number | _complex,
- batch1: Tensor,
- batch2: Tensor,
- *,
- out: Tensor,
- ) -> Tensor:
- r"""
- baddbmm(input, batch1, batch2, out_dtype=None, *, beta=1, alpha=1, out=None) -> Tensor
- Performs a batch matrix-matrix product of matrices in :attr:`batch1`
- and :attr:`batch2`.
- :attr:`input` is added to the final result.
- :attr:`batch1` and :attr:`batch2` must be 3-D tensors each containing the same
- number of matrices.
- If :attr:`batch1` is a :math:`(b \times n \times m)` tensor, :attr:`batch2` is a
- :math:`(b \times m \times p)` tensor, then :attr:`input` must be
- :ref:`broadcastable <broadcasting-semantics>` with a
- :math:`(b \times n \times p)` tensor and :attr:`out` will be a
- :math:`(b \times n \times p)` tensor. Both :attr:`alpha` and :attr:`beta` mean the
- same as the scaling factors used in :meth:`torch.addbmm`.
- .. math::
- \text{out}_i = \beta\ \text{input}_i + \alpha\ (\text{batch1}_i \mathbin{@} \text{batch2}_i)
- If :attr:`beta` is 0, then the content of :attr:`input` will be ignored, and `nan` and `inf` in
- it will not be propagated.
- For inputs of type `FloatTensor` or `DoubleTensor`, arguments :attr:`beta` and
- :attr:`alpha` must be real numbers, otherwise they should be integers.
- This operator supports :ref:`TensorFloat32<tf32_on_ampere>`.
- On certain ROCm devices, when using float16 inputs this module will use :ref:`different precision<fp16_on_mi200>` for backward.
- Args:
- input (Tensor): the tensor to be added
- batch1 (Tensor): the first batch of matrices to be multiplied
- batch2 (Tensor): the second batch of matrices to be multiplied
- out_dtype (dtype, optional): the dtype of the output tensor,
- Supported only on CUDA and for torch.float32 given
- torch.float16/torch.bfloat16 input dtypes
- Keyword args:
- beta (Number, optional): multiplier for :attr:`input` (:math:`\beta`)
- alpha (Number, optional): multiplier for :math:`\text{batch1} \mathbin{@} \text{batch2}` (:math:`\alpha`)
- out (Tensor, optional): the output tensor.
- Example::
- >>> M = torch.randn(10, 3, 5)
- >>> batch1 = torch.randn(10, 3, 4)
- >>> batch2 = torch.randn(10, 4, 5)
- >>> torch.baddbmm(M, batch1, batch2).size()
- torch.Size([10, 3, 5])
- """
- @overload
- def baddbmm(
- input: Tensor,
- batch1: Tensor,
- batch2: Tensor,
- *,
- beta: Number | _complex = 1,
- alpha: Number | _complex = 1,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- baddbmm(input, batch1, batch2, out_dtype=None, *, beta=1, alpha=1, out=None) -> Tensor
- Performs a batch matrix-matrix product of matrices in :attr:`batch1`
- and :attr:`batch2`.
- :attr:`input` is added to the final result.
- :attr:`batch1` and :attr:`batch2` must be 3-D tensors each containing the same
- number of matrices.
- If :attr:`batch1` is a :math:`(b \times n \times m)` tensor, :attr:`batch2` is a
- :math:`(b \times m \times p)` tensor, then :attr:`input` must be
- :ref:`broadcastable <broadcasting-semantics>` with a
- :math:`(b \times n \times p)` tensor and :attr:`out` will be a
- :math:`(b \times n \times p)` tensor. Both :attr:`alpha` and :attr:`beta` mean the
- same as the scaling factors used in :meth:`torch.addbmm`.
- .. math::
- \text{out}_i = \beta\ \text{input}_i + \alpha\ (\text{batch1}_i \mathbin{@} \text{batch2}_i)
- If :attr:`beta` is 0, then the content of :attr:`input` will be ignored, and `nan` and `inf` in
- it will not be propagated.
- For inputs of type `FloatTensor` or `DoubleTensor`, arguments :attr:`beta` and
- :attr:`alpha` must be real numbers, otherwise they should be integers.
- This operator supports :ref:`TensorFloat32<tf32_on_ampere>`.
- On certain ROCm devices, when using float16 inputs this module will use :ref:`different precision<fp16_on_mi200>` for backward.
- Args:
- input (Tensor): the tensor to be added
- batch1 (Tensor): the first batch of matrices to be multiplied
- batch2 (Tensor): the second batch of matrices to be multiplied
- out_dtype (dtype, optional): the dtype of the output tensor,
- Supported only on CUDA and for torch.float32 given
- torch.float16/torch.bfloat16 input dtypes
- Keyword args:
- beta (Number, optional): multiplier for :attr:`input` (:math:`\beta`)
- alpha (Number, optional): multiplier for :math:`\text{batch1} \mathbin{@} \text{batch2}` (:math:`\alpha`)
- out (Tensor, optional): the output tensor.
- Example::
- >>> M = torch.randn(10, 3, 5)
- >>> batch1 = torch.randn(10, 3, 4)
- >>> batch2 = torch.randn(10, 4, 5)
- >>> torch.baddbmm(M, batch1, batch2).size()
- torch.Size([10, 3, 5])
- """
- @overload
- def baddbmm(
- input: Tensor,
- batch1: Tensor,
- batch2: Tensor,
- out_dtype: _dtype,
- *,
- beta: Number | _complex = 1,
- alpha: Number | _complex = 1,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- baddbmm(input, batch1, batch2, out_dtype=None, *, beta=1, alpha=1, out=None) -> Tensor
- Performs a batch matrix-matrix product of matrices in :attr:`batch1`
- and :attr:`batch2`.
- :attr:`input` is added to the final result.
- :attr:`batch1` and :attr:`batch2` must be 3-D tensors each containing the same
- number of matrices.
- If :attr:`batch1` is a :math:`(b \times n \times m)` tensor, :attr:`batch2` is a
- :math:`(b \times m \times p)` tensor, then :attr:`input` must be
- :ref:`broadcastable <broadcasting-semantics>` with a
- :math:`(b \times n \times p)` tensor and :attr:`out` will be a
- :math:`(b \times n \times p)` tensor. Both :attr:`alpha` and :attr:`beta` mean the
- same as the scaling factors used in :meth:`torch.addbmm`.
- .. math::
- \text{out}_i = \beta\ \text{input}_i + \alpha\ (\text{batch1}_i \mathbin{@} \text{batch2}_i)
- If :attr:`beta` is 0, then the content of :attr:`input` will be ignored, and `nan` and `inf` in
- it will not be propagated.
- For inputs of type `FloatTensor` or `DoubleTensor`, arguments :attr:`beta` and
- :attr:`alpha` must be real numbers, otherwise they should be integers.
- This operator supports :ref:`TensorFloat32<tf32_on_ampere>`.
- On certain ROCm devices, when using float16 inputs this module will use :ref:`different precision<fp16_on_mi200>` for backward.
- Args:
- input (Tensor): the tensor to be added
- batch1 (Tensor): the first batch of matrices to be multiplied
- batch2 (Tensor): the second batch of matrices to be multiplied
- out_dtype (dtype, optional): the dtype of the output tensor,
- Supported only on CUDA and for torch.float32 given
- torch.float16/torch.bfloat16 input dtypes
- Keyword args:
- beta (Number, optional): multiplier for :attr:`input` (:math:`\beta`)
- alpha (Number, optional): multiplier for :math:`\text{batch1} \mathbin{@} \text{batch2}` (:math:`\alpha`)
- out (Tensor, optional): the output tensor.
- Example::
- >>> M = torch.randn(10, 3, 5)
- >>> batch1 = torch.randn(10, 3, 4)
- >>> batch2 = torch.randn(10, 4, 5)
- >>> torch.baddbmm(M, batch1, batch2).size()
- torch.Size([10, 3, 5])
- """
- @overload
- def baddbmm(
- beta: Number | _complex,
- self: Tensor,
- batch1: Tensor,
- batch2: Tensor,
- ) -> Tensor:
- r"""
- baddbmm(input, batch1, batch2, out_dtype=None, *, beta=1, alpha=1, out=None) -> Tensor
- Performs a batch matrix-matrix product of matrices in :attr:`batch1`
- and :attr:`batch2`.
- :attr:`input` is added to the final result.
- :attr:`batch1` and :attr:`batch2` must be 3-D tensors each containing the same
- number of matrices.
- If :attr:`batch1` is a :math:`(b \times n \times m)` tensor, :attr:`batch2` is a
- :math:`(b \times m \times p)` tensor, then :attr:`input` must be
- :ref:`broadcastable <broadcasting-semantics>` with a
- :math:`(b \times n \times p)` tensor and :attr:`out` will be a
- :math:`(b \times n \times p)` tensor. Both :attr:`alpha` and :attr:`beta` mean the
- same as the scaling factors used in :meth:`torch.addbmm`.
- .. math::
- \text{out}_i = \beta\ \text{input}_i + \alpha\ (\text{batch1}_i \mathbin{@} \text{batch2}_i)
- If :attr:`beta` is 0, then the content of :attr:`input` will be ignored, and `nan` and `inf` in
- it will not be propagated.
- For inputs of type `FloatTensor` or `DoubleTensor`, arguments :attr:`beta` and
- :attr:`alpha` must be real numbers, otherwise they should be integers.
- This operator supports :ref:`TensorFloat32<tf32_on_ampere>`.
- On certain ROCm devices, when using float16 inputs this module will use :ref:`different precision<fp16_on_mi200>` for backward.
- Args:
- input (Tensor): the tensor to be added
- batch1 (Tensor): the first batch of matrices to be multiplied
- batch2 (Tensor): the second batch of matrices to be multiplied
- out_dtype (dtype, optional): the dtype of the output tensor,
- Supported only on CUDA and for torch.float32 given
- torch.float16/torch.bfloat16 input dtypes
- Keyword args:
- beta (Number, optional): multiplier for :attr:`input` (:math:`\beta`)
- alpha (Number, optional): multiplier for :math:`\text{batch1} \mathbin{@} \text{batch2}` (:math:`\alpha`)
- out (Tensor, optional): the output tensor.
- Example::
- >>> M = torch.randn(10, 3, 5)
- >>> batch1 = torch.randn(10, 3, 4)
- >>> batch2 = torch.randn(10, 4, 5)
- >>> torch.baddbmm(M, batch1, batch2).size()
- torch.Size([10, 3, 5])
- """
- @overload
- def baddbmm(
- beta: Number | _complex,
- self: Tensor,
- batch1: Tensor,
- batch2: Tensor,
- *,
- out: Tensor,
- ) -> Tensor:
- r"""
- baddbmm(input, batch1, batch2, out_dtype=None, *, beta=1, alpha=1, out=None) -> Tensor
- Performs a batch matrix-matrix product of matrices in :attr:`batch1`
- and :attr:`batch2`.
- :attr:`input` is added to the final result.
- :attr:`batch1` and :attr:`batch2` must be 3-D tensors each containing the same
- number of matrices.
- If :attr:`batch1` is a :math:`(b \times n \times m)` tensor, :attr:`batch2` is a
- :math:`(b \times m \times p)` tensor, then :attr:`input` must be
- :ref:`broadcastable <broadcasting-semantics>` with a
- :math:`(b \times n \times p)` tensor and :attr:`out` will be a
- :math:`(b \times n \times p)` tensor. Both :attr:`alpha` and :attr:`beta` mean the
- same as the scaling factors used in :meth:`torch.addbmm`.
- .. math::
- \text{out}_i = \beta\ \text{input}_i + \alpha\ (\text{batch1}_i \mathbin{@} \text{batch2}_i)
- If :attr:`beta` is 0, then the content of :attr:`input` will be ignored, and `nan` and `inf` in
- it will not be propagated.
- For inputs of type `FloatTensor` or `DoubleTensor`, arguments :attr:`beta` and
- :attr:`alpha` must be real numbers, otherwise they should be integers.
- This operator supports :ref:`TensorFloat32<tf32_on_ampere>`.
- On certain ROCm devices, when using float16 inputs this module will use :ref:`different precision<fp16_on_mi200>` for backward.
- Args:
- input (Tensor): the tensor to be added
- batch1 (Tensor): the first batch of matrices to be multiplied
- batch2 (Tensor): the second batch of matrices to be multiplied
- out_dtype (dtype, optional): the dtype of the output tensor,
- Supported only on CUDA and for torch.float32 given
- torch.float16/torch.bfloat16 input dtypes
- Keyword args:
- beta (Number, optional): multiplier for :attr:`input` (:math:`\beta`)
- alpha (Number, optional): multiplier for :math:`\text{batch1} \mathbin{@} \text{batch2}` (:math:`\alpha`)
- out (Tensor, optional): the output tensor.
- Example::
- >>> M = torch.randn(10, 3, 5)
- >>> batch1 = torch.randn(10, 3, 4)
- >>> batch2 = torch.randn(10, 4, 5)
- >>> torch.baddbmm(M, batch1, batch2).size()
- torch.Size([10, 3, 5])
- """
- @overload
- def bartlett_window(
- window_length: _int,
- *,
- dtype: _dtype | None = None,
- layout: _layout | None = None,
- device: DeviceLikeType | None = None,
- pin_memory: _bool | None = False,
- requires_grad: _bool | None = False,
- ) -> Tensor:
- r"""
- bartlett_window(window_length, periodic=True, *, dtype=None, layout=torch.strided, device=None, requires_grad=False) -> Tensor
- Bartlett window function.
- .. math::
- w[n] = 1 - \left| \frac{2n}{N-1} - 1 \right| = \begin{cases}
- \frac{2n}{N - 1} & \text{if } 0 \leq n \leq \frac{N - 1}{2} \\
- 2 - \frac{2n}{N - 1} & \text{if } \frac{N - 1}{2} < n < N \\
- \end{cases},
- where :math:`N` is the full window size.
- The input :attr:`window_length` is a positive integer controlling the
- returned window size. :attr:`periodic` flag determines whether the returned
- window trims off the last duplicate value from the symmetric window and is
- ready to be used as a periodic window with functions like
- :meth:`torch.stft`. Therefore, if :attr:`periodic` is true, the :math:`N` in
- above formula is in fact :math:`\text{window\_length} + 1`. Also, we always have
- ``torch.bartlett_window(L, periodic=True)`` equal to
- ``torch.bartlett_window(L + 1, periodic=False)[:-1])``.
- .. note::
- If :attr:`window_length` :math:`=1`, the returned window contains a single value 1.
- Arguments:
- window_length (int): the size of returned window
- periodic (bool, optional): If True, returns a window to be used as periodic
- function. If False, return a symmetric window.
- Keyword args:
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor.
- Default: if ``None``, uses a global default (see :func:`torch.set_default_dtype`). Only floating point types are supported.
- layout (:class:`torch.layout`, optional): the desired layout of returned window tensor. Only
- ``torch.strided`` (dense layout) is supported.
- device (:class:`torch.device`, optional): the desired device of returned tensor.
- Default: if ``None``, uses the current device for the default tensor type
- (see :func:`torch.set_default_device`). :attr:`device` will be the CPU
- for CPU tensor types and the current CUDA device for CUDA tensor types.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- Returns:
- Tensor: A 1-D tensor of size :math:`(\text{window\_length},)` containing the window
- """
- @overload
- def bartlett_window(
- window_length: _int,
- periodic: _bool,
- *,
- dtype: _dtype | None = None,
- layout: _layout | None = None,
- device: DeviceLikeType | None = None,
- pin_memory: _bool | None = False,
- requires_grad: _bool | None = False,
- ) -> Tensor:
- r"""
- bartlett_window(window_length, periodic=True, *, dtype=None, layout=torch.strided, device=None, requires_grad=False) -> Tensor
- Bartlett window function.
- .. math::
- w[n] = 1 - \left| \frac{2n}{N-1} - 1 \right| = \begin{cases}
- \frac{2n}{N - 1} & \text{if } 0 \leq n \leq \frac{N - 1}{2} \\
- 2 - \frac{2n}{N - 1} & \text{if } \frac{N - 1}{2} < n < N \\
- \end{cases},
- where :math:`N` is the full window size.
- The input :attr:`window_length` is a positive integer controlling the
- returned window size. :attr:`periodic` flag determines whether the returned
- window trims off the last duplicate value from the symmetric window and is
- ready to be used as a periodic window with functions like
- :meth:`torch.stft`. Therefore, if :attr:`periodic` is true, the :math:`N` in
- above formula is in fact :math:`\text{window\_length} + 1`. Also, we always have
- ``torch.bartlett_window(L, periodic=True)`` equal to
- ``torch.bartlett_window(L + 1, periodic=False)[:-1])``.
- .. note::
- If :attr:`window_length` :math:`=1`, the returned window contains a single value 1.
- Arguments:
- window_length (int): the size of returned window
- periodic (bool, optional): If True, returns a window to be used as periodic
- function. If False, return a symmetric window.
- Keyword args:
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor.
- Default: if ``None``, uses a global default (see :func:`torch.set_default_dtype`). Only floating point types are supported.
- layout (:class:`torch.layout`, optional): the desired layout of returned window tensor. Only
- ``torch.strided`` (dense layout) is supported.
- device (:class:`torch.device`, optional): the desired device of returned tensor.
- Default: if ``None``, uses the current device for the default tensor type
- (see :func:`torch.set_default_device`). :attr:`device` will be the CPU
- for CPU tensor types and the current CUDA device for CUDA tensor types.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- Returns:
- Tensor: A 1-D tensor of size :math:`(\text{window\_length},)` containing the window
- """
- def batch_norm(
- input: Tensor,
- weight: Tensor | None,
- bias: Tensor | None,
- running_mean: Tensor | None,
- running_var: Tensor | None,
- training: _bool,
- momentum: _float,
- eps: _float,
- cudnn_enabled: _bool,
- ) -> Tensor: ...
- def batch_norm_backward_elemt(
- grad_out: Tensor,
- input: Tensor,
- mean: Tensor,
- invstd: Tensor,
- weight: Tensor | None,
- sum_dy: Tensor,
- sum_dy_xmu: Tensor,
- count: Tensor,
- ) -> Tensor: ...
- def batch_norm_backward_reduce(
- grad_out: Tensor,
- input: Tensor,
- mean: Tensor,
- invstd: Tensor,
- weight: Tensor | None,
- input_g: _bool,
- weight_g: _bool,
- bias_g: _bool,
- ) -> tuple[Tensor, Tensor, Tensor, Tensor]: ...
- def batch_norm_elemt(
- input: Tensor,
- weight: Tensor | None,
- bias: Tensor | None,
- mean: Tensor,
- invstd: Tensor,
- eps: _float,
- *,
- out: Tensor | None = None,
- ) -> Tensor: ...
- def batch_norm_gather_stats(
- input: Tensor,
- mean: Tensor,
- invstd: Tensor,
- running_mean: Tensor | None,
- running_var: Tensor | None,
- momentum: _float,
- eps: _float,
- count: _int,
- ) -> tuple[Tensor, Tensor]: ...
- def batch_norm_gather_stats_with_counts(
- input: Tensor,
- mean: Tensor,
- invstd: Tensor,
- running_mean: Tensor | None,
- running_var: Tensor | None,
- momentum: _float,
- eps: _float,
- counts: Tensor,
- ) -> tuple[Tensor, Tensor]: ...
- def batch_norm_stats(input: Tensor, eps: _float) -> tuple[Tensor, Tensor]: ...
- def batch_norm_update_stats(
- input: Tensor,
- running_mean: Tensor | None,
- running_var: Tensor | None,
- momentum: _float,
- ) -> tuple[Tensor, Tensor]: ...
- @overload
- def bernoulli(
- input: Tensor,
- *,
- generator: Generator | None = None,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- bernoulli(input: Tensor, *, generator: Optional[Generator], out: Optional[Tensor]) -> Tensor
- Draws binary random numbers (0 or 1) from a Bernoulli distribution.
- The :attr:`input` tensor should be a tensor containing probabilities
- to be used for drawing the binary random number.
- Hence, all values in :attr:`input` have to be in the range:
- :math:`0 \leq \text{input}_i \leq 1`.
- The :math:`\text{i}^{th}` element of the output tensor will draw a
- value :math:`1` according to the :math:`\text{i}^{th}` probability value given
- in :attr:`input`.
- .. math::
- \text{out}_{i} \sim \mathrm{Bernoulli}(p = \text{input}_{i})
- The returned :attr:`out` tensor only has values 0 or 1 and is of the same
- shape as :attr:`input`.
- :attr:`out` can have integral ``dtype``, but :attr:`input` must have floating
- point ``dtype``.
- Args:
- input (Tensor): the input tensor of probability values for the Bernoulli distribution
- Keyword args:
- generator (:class:`torch.Generator`, optional): a pseudorandom number generator for sampling
- out (Tensor, optional): the output tensor.
- Example::
- >>> a = torch.empty(3, 3).uniform_(0, 1) # generate a uniform random matrix with range [0, 1]
- >>> a
- tensor([[ 0.1737, 0.0950, 0.3609],
- [ 0.7148, 0.0289, 0.2676],
- [ 0.9456, 0.8937, 0.7202]])
- >>> torch.bernoulli(a)
- tensor([[ 1., 0., 0.],
- [ 0., 0., 0.],
- [ 1., 1., 1.]])
- >>> a = torch.ones(3, 3) # probability of drawing "1" is 1
- >>> torch.bernoulli(a)
- tensor([[ 1., 1., 1.],
- [ 1., 1., 1.],
- [ 1., 1., 1.]])
- >>> a = torch.zeros(3, 3) # probability of drawing "1" is 0
- >>> torch.bernoulli(a)
- tensor([[ 0., 0., 0.],
- [ 0., 0., 0.],
- [ 0., 0., 0.]])
- """
- @overload
- def bernoulli(
- input: Tensor,
- p: _float,
- *,
- generator: Generator | None = None,
- ) -> Tensor:
- r"""
- bernoulli(input: Tensor, *, generator: Optional[Generator], out: Optional[Tensor]) -> Tensor
- Draws binary random numbers (0 or 1) from a Bernoulli distribution.
- The :attr:`input` tensor should be a tensor containing probabilities
- to be used for drawing the binary random number.
- Hence, all values in :attr:`input` have to be in the range:
- :math:`0 \leq \text{input}_i \leq 1`.
- The :math:`\text{i}^{th}` element of the output tensor will draw a
- value :math:`1` according to the :math:`\text{i}^{th}` probability value given
- in :attr:`input`.
- .. math::
- \text{out}_{i} \sim \mathrm{Bernoulli}(p = \text{input}_{i})
- The returned :attr:`out` tensor only has values 0 or 1 and is of the same
- shape as :attr:`input`.
- :attr:`out` can have integral ``dtype``, but :attr:`input` must have floating
- point ``dtype``.
- Args:
- input (Tensor): the input tensor of probability values for the Bernoulli distribution
- Keyword args:
- generator (:class:`torch.Generator`, optional): a pseudorandom number generator for sampling
- out (Tensor, optional): the output tensor.
- Example::
- >>> a = torch.empty(3, 3).uniform_(0, 1) # generate a uniform random matrix with range [0, 1]
- >>> a
- tensor([[ 0.1737, 0.0950, 0.3609],
- [ 0.7148, 0.0289, 0.2676],
- [ 0.9456, 0.8937, 0.7202]])
- >>> torch.bernoulli(a)
- tensor([[ 1., 0., 0.],
- [ 0., 0., 0.],
- [ 1., 1., 1.]])
- >>> a = torch.ones(3, 3) # probability of drawing "1" is 1
- >>> torch.bernoulli(a)
- tensor([[ 1., 1., 1.],
- [ 1., 1., 1.],
- [ 1., 1., 1.]])
- >>> a = torch.zeros(3, 3) # probability of drawing "1" is 0
- >>> torch.bernoulli(a)
- tensor([[ 0., 0., 0.],
- [ 0., 0., 0.],
- [ 0., 0., 0.]])
- """
- def bilinear(
- input1: Tensor,
- input2: Tensor,
- weight: Tensor,
- bias: Tensor | None = None,
- ) -> Tensor: ...
- def binary_cross_entropy_with_logits(
- input: Tensor,
- target: Tensor,
- weight: Tensor | None = None,
- pos_weight: Tensor | None = None,
- reduction: _int = 1,
- ) -> Tensor: ...
- def bincount(
- input: Tensor,
- weights: Tensor | None = None,
- minlength: _int | SymInt = 0,
- ) -> Tensor:
- r"""
- bincount(input, weights=None, minlength=0) -> Tensor
- Count the frequency of each value in an array of non-negative ints.
- The number of bins (size 1) is one larger than the largest value in
- :attr:`input` unless :attr:`input` is empty, in which case the result is a
- tensor of size 0. If :attr:`minlength` is specified, the number of bins is at least
- :attr:`minlength` and if :attr:`input` is empty, then the result is tensor of size
- :attr:`minlength` filled with zeros. If ``n`` is the value at position ``i``,
- ``out[n] += weights[i]`` if :attr:`weights` is specified else
- ``out[n] += 1``.
- Note:
- This operation may produce nondeterministic gradients when given tensors on a CUDA device. See :doc:`/notes/randomness` for more information.
- Arguments:
- input (Tensor): 1-d int tensor
- weights (Tensor): optional, weight for each value in the input tensor.
- Should be of same size as input tensor.
- minlength (int): optional, minimum number of bins. Should be non-negative.
- Returns:
- output (Tensor): a tensor of shape ``Size([max(input) + 1])`` if
- :attr:`input` is non-empty, else ``Size(0)``
- Example::
- >>> input = torch.randint(0, 8, (5,), dtype=torch.int64)
- >>> weights = torch.linspace(0, 1, steps=5)
- >>> input, weights
- (tensor([4, 3, 6, 3, 4]),
- tensor([ 0.0000, 0.2500, 0.5000, 0.7500, 1.0000])
- >>> torch.bincount(input)
- tensor([0, 0, 0, 2, 2, 0, 1])
- >>> input.bincount(weights)
- tensor([0.0000, 0.0000, 0.0000, 1.0000, 1.0000, 0.0000, 0.5000])
- """
- def binomial(
- count: Tensor,
- prob: Tensor,
- generator: Generator | None = None,
- ) -> Tensor: ...
- @overload
- def bitwise_and(
- input: Tensor,
- other: Tensor,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- bitwise_and(input, other, *, out=None) -> Tensor
- Computes the bitwise AND of :attr:`input` and :attr:`other`. The input tensor must be of
- integral or Boolean types. For bool tensors, it computes the logical AND.
- Args:
- input: the first input tensor
- other: the second input tensor
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> torch.bitwise_and(torch.tensor([-1, -2, 3], dtype=torch.int8), torch.tensor([1, 0, 3], dtype=torch.int8))
- tensor([1, 0, 3], dtype=torch.int8)
- >>> torch.bitwise_and(torch.tensor([True, True, False]), torch.tensor([False, True, False]))
- tensor([ False, True, False])
- """
- @overload
- def bitwise_and(self: Number | _complex, other: Tensor) -> Tensor:
- r"""
- bitwise_and(input, other, *, out=None) -> Tensor
- Computes the bitwise AND of :attr:`input` and :attr:`other`. The input tensor must be of
- integral or Boolean types. For bool tensors, it computes the logical AND.
- Args:
- input: the first input tensor
- other: the second input tensor
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> torch.bitwise_and(torch.tensor([-1, -2, 3], dtype=torch.int8), torch.tensor([1, 0, 3], dtype=torch.int8))
- tensor([1, 0, 3], dtype=torch.int8)
- >>> torch.bitwise_and(torch.tensor([True, True, False]), torch.tensor([False, True, False]))
- tensor([ False, True, False])
- """
- @overload
- def bitwise_and(
- input: Tensor,
- other: Number | _complex,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- bitwise_and(input, other, *, out=None) -> Tensor
- Computes the bitwise AND of :attr:`input` and :attr:`other`. The input tensor must be of
- integral or Boolean types. For bool tensors, it computes the logical AND.
- Args:
- input: the first input tensor
- other: the second input tensor
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> torch.bitwise_and(torch.tensor([-1, -2, 3], dtype=torch.int8), torch.tensor([1, 0, 3], dtype=torch.int8))
- tensor([1, 0, 3], dtype=torch.int8)
- >>> torch.bitwise_and(torch.tensor([True, True, False]), torch.tensor([False, True, False]))
- tensor([ False, True, False])
- """
- @overload
- def bitwise_left_shift(
- input: Tensor,
- other: Tensor,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- bitwise_left_shift(input, other, *, out=None) -> Tensor
- Computes the left arithmetic shift of :attr:`input` by :attr:`other` bits.
- The input tensor must be of integral type. This operator supports
- :ref:`broadcasting to a common shape <broadcasting-semantics>` and
- :ref:`type promotion <type-promotion-doc>`.
- The operation applied is:
- .. math::
- \text{out}_i = \text{input}_i << \text{other}_i
- Args:
- input (Tensor or Scalar): the first input tensor
- other (Tensor or Scalar): the second input tensor
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> torch.bitwise_left_shift(torch.tensor([-1, -2, 3], dtype=torch.int8), torch.tensor([1, 0, 3], dtype=torch.int8))
- tensor([-2, -2, 24], dtype=torch.int8)
- """
- @overload
- def bitwise_left_shift(self: Number | _complex, other: Tensor) -> Tensor:
- r"""
- bitwise_left_shift(input, other, *, out=None) -> Tensor
- Computes the left arithmetic shift of :attr:`input` by :attr:`other` bits.
- The input tensor must be of integral type. This operator supports
- :ref:`broadcasting to a common shape <broadcasting-semantics>` and
- :ref:`type promotion <type-promotion-doc>`.
- The operation applied is:
- .. math::
- \text{out}_i = \text{input}_i << \text{other}_i
- Args:
- input (Tensor or Scalar): the first input tensor
- other (Tensor or Scalar): the second input tensor
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> torch.bitwise_left_shift(torch.tensor([-1, -2, 3], dtype=torch.int8), torch.tensor([1, 0, 3], dtype=torch.int8))
- tensor([-2, -2, 24], dtype=torch.int8)
- """
- @overload
- def bitwise_left_shift(
- input: Tensor,
- other: Number | _complex,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- bitwise_left_shift(input, other, *, out=None) -> Tensor
- Computes the left arithmetic shift of :attr:`input` by :attr:`other` bits.
- The input tensor must be of integral type. This operator supports
- :ref:`broadcasting to a common shape <broadcasting-semantics>` and
- :ref:`type promotion <type-promotion-doc>`.
- The operation applied is:
- .. math::
- \text{out}_i = \text{input}_i << \text{other}_i
- Args:
- input (Tensor or Scalar): the first input tensor
- other (Tensor or Scalar): the second input tensor
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> torch.bitwise_left_shift(torch.tensor([-1, -2, 3], dtype=torch.int8), torch.tensor([1, 0, 3], dtype=torch.int8))
- tensor([-2, -2, 24], dtype=torch.int8)
- """
- def bitwise_not(input: Tensor, *, out: Tensor | None = None) -> Tensor:
- r"""
- bitwise_not(input, *, out=None) -> Tensor
- Computes the bitwise NOT of the given input tensor. The input tensor must be of
- integral or Boolean types. For bool tensors, it computes the logical NOT.
- Args:
- input (Tensor): the input tensor.
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> torch.bitwise_not(torch.tensor([-1, -2, 3], dtype=torch.int8))
- tensor([ 0, 1, -4], dtype=torch.int8)
- """
- @overload
- def bitwise_or(
- input: Tensor,
- other: Tensor,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- bitwise_or(input: Tensor, other: Tensor, *, out: Optional[Tensor]) -> Tensor
- Computes the bitwise OR of :attr:`input` and :attr:`other`. The input tensor must be of
- integral or Boolean types. For bool tensors, it computes the logical OR.
- Args:
- input: the first input tensor
- other: the second input tensor
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> torch.bitwise_or(torch.tensor([-1, -2, 3], dtype=torch.int8), torch.tensor([1, 0, 3], dtype=torch.int8))
- tensor([-1, -2, 3], dtype=torch.int8)
- >>> torch.bitwise_or(torch.tensor([True, True, False]), torch.tensor([False, True, False]))
- tensor([ True, True, False])
- """
- @overload
- def bitwise_or(self: Number | _complex, other: Tensor) -> Tensor:
- r"""
- bitwise_or(input: Tensor, other: Tensor, *, out: Optional[Tensor]) -> Tensor
- Computes the bitwise OR of :attr:`input` and :attr:`other`. The input tensor must be of
- integral or Boolean types. For bool tensors, it computes the logical OR.
- Args:
- input: the first input tensor
- other: the second input tensor
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> torch.bitwise_or(torch.tensor([-1, -2, 3], dtype=torch.int8), torch.tensor([1, 0, 3], dtype=torch.int8))
- tensor([-1, -2, 3], dtype=torch.int8)
- >>> torch.bitwise_or(torch.tensor([True, True, False]), torch.tensor([False, True, False]))
- tensor([ True, True, False])
- """
- @overload
- def bitwise_or(
- input: Tensor,
- other: Number | _complex,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- bitwise_or(input: Tensor, other: Tensor, *, out: Optional[Tensor]) -> Tensor
- Computes the bitwise OR of :attr:`input` and :attr:`other`. The input tensor must be of
- integral or Boolean types. For bool tensors, it computes the logical OR.
- Args:
- input: the first input tensor
- other: the second input tensor
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> torch.bitwise_or(torch.tensor([-1, -2, 3], dtype=torch.int8), torch.tensor([1, 0, 3], dtype=torch.int8))
- tensor([-1, -2, 3], dtype=torch.int8)
- >>> torch.bitwise_or(torch.tensor([True, True, False]), torch.tensor([False, True, False]))
- tensor([ True, True, False])
- """
- @overload
- def bitwise_right_shift(
- input: Tensor,
- other: Tensor,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- bitwise_right_shift(input, other, *, out=None) -> Tensor
- Computes the right arithmetic shift of :attr:`input` by :attr:`other` bits.
- The input tensor must be of integral type. This operator supports
- :ref:`broadcasting to a common shape <broadcasting-semantics>` and
- :ref:`type promotion <type-promotion-doc>`.
- In any case, if the value of the right operand is negative or is greater
- or equal to the number of bits in the promoted left operand, the behavior is undefined.
- The operation applied is:
- .. math::
- \text{out}_i = \text{input}_i >> \text{other}_i
- Args:
- input (Tensor or Scalar): the first input tensor
- other (Tensor or Scalar): the second input tensor
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> torch.bitwise_right_shift(torch.tensor([-2, -7, 31], dtype=torch.int8), torch.tensor([1, 0, 3], dtype=torch.int8))
- tensor([-1, -7, 3], dtype=torch.int8)
- """
- @overload
- def bitwise_right_shift(self: Number | _complex, other: Tensor) -> Tensor:
- r"""
- bitwise_right_shift(input, other, *, out=None) -> Tensor
- Computes the right arithmetic shift of :attr:`input` by :attr:`other` bits.
- The input tensor must be of integral type. This operator supports
- :ref:`broadcasting to a common shape <broadcasting-semantics>` and
- :ref:`type promotion <type-promotion-doc>`.
- In any case, if the value of the right operand is negative or is greater
- or equal to the number of bits in the promoted left operand, the behavior is undefined.
- The operation applied is:
- .. math::
- \text{out}_i = \text{input}_i >> \text{other}_i
- Args:
- input (Tensor or Scalar): the first input tensor
- other (Tensor or Scalar): the second input tensor
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> torch.bitwise_right_shift(torch.tensor([-2, -7, 31], dtype=torch.int8), torch.tensor([1, 0, 3], dtype=torch.int8))
- tensor([-1, -7, 3], dtype=torch.int8)
- """
- @overload
- def bitwise_right_shift(
- input: Tensor,
- other: Number | _complex,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- bitwise_right_shift(input, other, *, out=None) -> Tensor
- Computes the right arithmetic shift of :attr:`input` by :attr:`other` bits.
- The input tensor must be of integral type. This operator supports
- :ref:`broadcasting to a common shape <broadcasting-semantics>` and
- :ref:`type promotion <type-promotion-doc>`.
- In any case, if the value of the right operand is negative or is greater
- or equal to the number of bits in the promoted left operand, the behavior is undefined.
- The operation applied is:
- .. math::
- \text{out}_i = \text{input}_i >> \text{other}_i
- Args:
- input (Tensor or Scalar): the first input tensor
- other (Tensor or Scalar): the second input tensor
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> torch.bitwise_right_shift(torch.tensor([-2, -7, 31], dtype=torch.int8), torch.tensor([1, 0, 3], dtype=torch.int8))
- tensor([-1, -7, 3], dtype=torch.int8)
- """
- @overload
- def bitwise_xor(
- input: Tensor,
- other: Tensor,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- bitwise_xor(input, other, *, out=None) -> Tensor
- Computes the bitwise XOR of :attr:`input` and :attr:`other`. The input tensor must be of
- integral or Boolean types. For bool tensors, it computes the logical XOR.
- Args:
- input: the first input tensor
- other: the second input tensor
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> torch.bitwise_xor(torch.tensor([-1, -2, 3], dtype=torch.int8), torch.tensor([1, 0, 3], dtype=torch.int8))
- tensor([-2, -2, 0], dtype=torch.int8)
- >>> torch.bitwise_xor(torch.tensor([True, True, False]), torch.tensor([False, True, False]))
- tensor([ True, False, False])
- """
- @overload
- def bitwise_xor(self: Number | _complex, other: Tensor) -> Tensor:
- r"""
- bitwise_xor(input, other, *, out=None) -> Tensor
- Computes the bitwise XOR of :attr:`input` and :attr:`other`. The input tensor must be of
- integral or Boolean types. For bool tensors, it computes the logical XOR.
- Args:
- input: the first input tensor
- other: the second input tensor
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> torch.bitwise_xor(torch.tensor([-1, -2, 3], dtype=torch.int8), torch.tensor([1, 0, 3], dtype=torch.int8))
- tensor([-2, -2, 0], dtype=torch.int8)
- >>> torch.bitwise_xor(torch.tensor([True, True, False]), torch.tensor([False, True, False]))
- tensor([ True, False, False])
- """
- @overload
- def bitwise_xor(
- input: Tensor,
- other: Number | _complex,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- bitwise_xor(input, other, *, out=None) -> Tensor
- Computes the bitwise XOR of :attr:`input` and :attr:`other`. The input tensor must be of
- integral or Boolean types. For bool tensors, it computes the logical XOR.
- Args:
- input: the first input tensor
- other: the second input tensor
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> torch.bitwise_xor(torch.tensor([-1, -2, 3], dtype=torch.int8), torch.tensor([1, 0, 3], dtype=torch.int8))
- tensor([-2, -2, 0], dtype=torch.int8)
- >>> torch.bitwise_xor(torch.tensor([True, True, False]), torch.tensor([False, True, False]))
- tensor([ True, False, False])
- """
- @overload
- def blackman_window(
- window_length: _int,
- *,
- dtype: _dtype | None = None,
- layout: _layout | None = None,
- device: DeviceLikeType | None = None,
- pin_memory: _bool | None = False,
- requires_grad: _bool | None = False,
- ) -> Tensor:
- r"""
- blackman_window(window_length, periodic=True, *, dtype=None, layout=torch.strided, device=None, requires_grad=False) -> Tensor
- Blackman window function.
- .. math::
- w[n] = 0.42 - 0.5 \cos \left( \frac{2 \pi n}{N - 1} \right) + 0.08 \cos \left( \frac{4 \pi n}{N - 1} \right)
- where :math:`N` is the full window size.
- The input :attr:`window_length` is a positive integer controlling the
- returned window size. :attr:`periodic` flag determines whether the returned
- window trims off the last duplicate value from the symmetric window and is
- ready to be used as a periodic window with functions like
- :meth:`torch.stft`. Therefore, if :attr:`periodic` is true, the :math:`N` in
- above formula is in fact :math:`\text{window\_length} + 1`. Also, we always have
- ``torch.blackman_window(L, periodic=True)`` equal to
- ``torch.blackman_window(L + 1, periodic=False)[:-1]``.
- .. note::
- If :attr:`window_length` :math:`=1`, the returned window contains a single value 1.
- Arguments:
- window_length (int): the size of returned window
- periodic (bool, optional): If True, returns a window to be used as periodic
- function. If False, return a symmetric window.
- Keyword args:
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor.
- Default: if ``None``, uses a global default (see :func:`torch.set_default_dtype`). Only floating point types are supported.
- layout (:class:`torch.layout`, optional): the desired layout of returned window tensor. Only
- ``torch.strided`` (dense layout) is supported.
- device (:class:`torch.device`, optional): the desired device of returned tensor.
- Default: if ``None``, uses the current device for the default tensor type
- (see :func:`torch.set_default_device`). :attr:`device` will be the CPU
- for CPU tensor types and the current CUDA device for CUDA tensor types.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- Returns:
- Tensor: A 1-D tensor of size :math:`(\text{window\_length},)` containing the window
- """
- @overload
- def blackman_window(
- window_length: _int,
- periodic: _bool,
- *,
- dtype: _dtype | None = None,
- layout: _layout | None = None,
- device: DeviceLikeType | None = None,
- pin_memory: _bool | None = False,
- requires_grad: _bool | None = False,
- ) -> Tensor:
- r"""
- blackman_window(window_length, periodic=True, *, dtype=None, layout=torch.strided, device=None, requires_grad=False) -> Tensor
- Blackman window function.
- .. math::
- w[n] = 0.42 - 0.5 \cos \left( \frac{2 \pi n}{N - 1} \right) + 0.08 \cos \left( \frac{4 \pi n}{N - 1} \right)
- where :math:`N` is the full window size.
- The input :attr:`window_length` is a positive integer controlling the
- returned window size. :attr:`periodic` flag determines whether the returned
- window trims off the last duplicate value from the symmetric window and is
- ready to be used as a periodic window with functions like
- :meth:`torch.stft`. Therefore, if :attr:`periodic` is true, the :math:`N` in
- above formula is in fact :math:`\text{window\_length} + 1`. Also, we always have
- ``torch.blackman_window(L, periodic=True)`` equal to
- ``torch.blackman_window(L + 1, periodic=False)[:-1]``.
- .. note::
- If :attr:`window_length` :math:`=1`, the returned window contains a single value 1.
- Arguments:
- window_length (int): the size of returned window
- periodic (bool, optional): If True, returns a window to be used as periodic
- function. If False, return a symmetric window.
- Keyword args:
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor.
- Default: if ``None``, uses a global default (see :func:`torch.set_default_dtype`). Only floating point types are supported.
- layout (:class:`torch.layout`, optional): the desired layout of returned window tensor. Only
- ``torch.strided`` (dense layout) is supported.
- device (:class:`torch.device`, optional): the desired device of returned tensor.
- Default: if ``None``, uses the current device for the default tensor type
- (see :func:`torch.set_default_device`). :attr:`device` will be the CPU
- for CPU tensor types and the current CUDA device for CUDA tensor types.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- Returns:
- Tensor: A 1-D tensor of size :math:`(\text{window\_length},)` containing the window
- """
- @overload
- def bmm(
- input: Tensor,
- mat2: Tensor,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- bmm(input, mat2, out_dtype=None, *, out=None) -> Tensor
- Performs a batch matrix-matrix product of matrices stored in :attr:`input`
- and :attr:`mat2`.
- :attr:`input` and :attr:`mat2` must be 3-D tensors each containing
- the same number of matrices.
- If :attr:`input` is a :math:`(b \times n \times m)` tensor, :attr:`mat2` is a
- :math:`(b \times m \times p)` tensor, :attr:`out` will be a
- :math:`(b \times n \times p)` tensor.
- .. math::
- \text{out}_i = \text{input}_i \mathbin{@} \text{mat2}_i
- This operator supports :ref:`TensorFloat32<tf32_on_ampere>`.
- On certain ROCm devices, when using float16 inputs this module will use :ref:`different precision<fp16_on_mi200>` for backward.
- .. note:: This function does not :ref:`broadcast <broadcasting-semantics>`.
- For broadcasting matrix products, see :func:`torch.matmul`.
- Args:
- input (Tensor): the first batch of matrices to be multiplied
- mat2 (Tensor): the second batch of matrices to be multiplied
- out_dtype (dtype, optional): the dtype of the output tensor,
- Supported only on CUDA and for torch.float32 given
- torch.float16/torch.bfloat16 input dtypes
- Keyword Args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> input = torch.randn(10, 3, 4)
- >>> mat2 = torch.randn(10, 4, 5)
- >>> res = torch.bmm(input, mat2)
- >>> res.size()
- torch.Size([10, 3, 5])
- """
- @overload
- def bmm(
- input: Tensor,
- mat2: Tensor,
- out_dtype: _dtype,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- bmm(input, mat2, out_dtype=None, *, out=None) -> Tensor
- Performs a batch matrix-matrix product of matrices stored in :attr:`input`
- and :attr:`mat2`.
- :attr:`input` and :attr:`mat2` must be 3-D tensors each containing
- the same number of matrices.
- If :attr:`input` is a :math:`(b \times n \times m)` tensor, :attr:`mat2` is a
- :math:`(b \times m \times p)` tensor, :attr:`out` will be a
- :math:`(b \times n \times p)` tensor.
- .. math::
- \text{out}_i = \text{input}_i \mathbin{@} \text{mat2}_i
- This operator supports :ref:`TensorFloat32<tf32_on_ampere>`.
- On certain ROCm devices, when using float16 inputs this module will use :ref:`different precision<fp16_on_mi200>` for backward.
- .. note:: This function does not :ref:`broadcast <broadcasting-semantics>`.
- For broadcasting matrix products, see :func:`torch.matmul`.
- Args:
- input (Tensor): the first batch of matrices to be multiplied
- mat2 (Tensor): the second batch of matrices to be multiplied
- out_dtype (dtype, optional): the dtype of the output tensor,
- Supported only on CUDA and for torch.float32 given
- torch.float16/torch.bfloat16 input dtypes
- Keyword Args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> input = torch.randn(10, 3, 4)
- >>> mat2 = torch.randn(10, 4, 5)
- >>> res = torch.bmm(input, mat2)
- >>> res.size()
- torch.Size([10, 3, 5])
- """
- def broadcast_to(input: Tensor, size: Sequence[_int | SymInt]) -> Tensor:
- r"""
- broadcast_to(input, shape) -> Tensor
- Broadcasts :attr:`input` to the shape :attr:`\shape`.
- Equivalent to calling ``input.expand(shape)``. See :meth:`~Tensor.expand` for details.
- Args:
- input (Tensor): the input tensor.
- shape (list, tuple, or :class:`torch.Size`): the new shape.
- Example::
- >>> x = torch.tensor([1, 2, 3])
- >>> torch.broadcast_to(x, (3, 3))
- tensor([[1, 2, 3],
- [1, 2, 3],
- [1, 2, 3]])
- """
- @overload
- def bucketize(
- input: Tensor,
- boundaries: Tensor,
- *,
- out_int32: _bool = False,
- right: _bool = False,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- bucketize(input, boundaries, *, out_int32=False, right=False, out=None) -> Tensor
- Returns the indices of the buckets to which each value in the :attr:`input` belongs, where the
- boundaries of the buckets are set by :attr:`boundaries`. Return a new tensor with the same size
- as :attr:`input`. If :attr:`right` is False (default), then the left boundary is open. Note that
- this behavior is opposite the behavior of
- `numpy.digitize <https://numpy.org/doc/stable/reference/generated/numpy.digitize.html>`_.
- More formally, the returned index satisfies the following rules:
- .. list-table::
- :widths: 15 85
- :header-rows: 1
- * - :attr:`right`
- - *returned index satisfies*
- * - False
- - ``boundaries[i-1] < input[m][n]...[l][x] <= boundaries[i]``
- * - True
- - ``boundaries[i-1] <= input[m][n]...[l][x] < boundaries[i]``
- Args:
- input (Tensor or Scalar): N-D tensor or a Scalar containing the search value(s).
- boundaries (Tensor): 1-D tensor, must contain a strictly increasing sequence, or the return value is undefined.
- Keyword args:
- out_int32 (bool, optional): indicate the output data type. torch.int32 if True, torch.int64 otherwise.
- Default value is False, i.e. default output data type is torch.int64.
- right (bool, optional): determines the behavior for values in :attr:`boundaries`. See the table above.
- out (Tensor, optional): the output tensor, must be the same size as :attr:`input` if provided.
- Example::
- >>> boundaries = torch.tensor([1, 3, 5, 7, 9])
- >>> boundaries
- tensor([1, 3, 5, 7, 9])
- >>> v = torch.tensor([[3, 6, 9], [3, 6, 9]])
- >>> v
- tensor([[3, 6, 9],
- [3, 6, 9]])
- >>> torch.bucketize(v, boundaries)
- tensor([[1, 3, 4],
- [1, 3, 4]])
- >>> torch.bucketize(v, boundaries, right=True)
- tensor([[2, 3, 5],
- [2, 3, 5]])
- """
- @overload
- def bucketize(
- self: Number | _complex,
- boundaries: Tensor,
- *,
- out_int32: _bool = False,
- right: _bool = False,
- ) -> Tensor:
- r"""
- bucketize(input, boundaries, *, out_int32=False, right=False, out=None) -> Tensor
- Returns the indices of the buckets to which each value in the :attr:`input` belongs, where the
- boundaries of the buckets are set by :attr:`boundaries`. Return a new tensor with the same size
- as :attr:`input`. If :attr:`right` is False (default), then the left boundary is open. Note that
- this behavior is opposite the behavior of
- `numpy.digitize <https://numpy.org/doc/stable/reference/generated/numpy.digitize.html>`_.
- More formally, the returned index satisfies the following rules:
- .. list-table::
- :widths: 15 85
- :header-rows: 1
- * - :attr:`right`
- - *returned index satisfies*
- * - False
- - ``boundaries[i-1] < input[m][n]...[l][x] <= boundaries[i]``
- * - True
- - ``boundaries[i-1] <= input[m][n]...[l][x] < boundaries[i]``
- Args:
- input (Tensor or Scalar): N-D tensor or a Scalar containing the search value(s).
- boundaries (Tensor): 1-D tensor, must contain a strictly increasing sequence, or the return value is undefined.
- Keyword args:
- out_int32 (bool, optional): indicate the output data type. torch.int32 if True, torch.int64 otherwise.
- Default value is False, i.e. default output data type is torch.int64.
- right (bool, optional): determines the behavior for values in :attr:`boundaries`. See the table above.
- out (Tensor, optional): the output tensor, must be the same size as :attr:`input` if provided.
- Example::
- >>> boundaries = torch.tensor([1, 3, 5, 7, 9])
- >>> boundaries
- tensor([1, 3, 5, 7, 9])
- >>> v = torch.tensor([[3, 6, 9], [3, 6, 9]])
- >>> v
- tensor([[3, 6, 9],
- [3, 6, 9]])
- >>> torch.bucketize(v, boundaries)
- tensor([[1, 3, 4],
- [1, 3, 4]])
- >>> torch.bucketize(v, boundaries, right=True)
- tensor([[2, 3, 5],
- [2, 3, 5]])
- """
- def can_cast(from_: _dtype, to: _dtype) -> _bool:
- r"""
- can_cast(from_, to) -> bool
- Determines if a type conversion is allowed under PyTorch casting rules
- described in the type promotion :ref:`documentation <type-promotion-doc>`.
- Args:
- from\_ (dtype): The original :class:`torch.dtype`.
- to (dtype): The target :class:`torch.dtype`.
- Example::
- >>> torch.can_cast(torch.double, torch.float)
- True
- >>> torch.can_cast(torch.float, torch.int)
- False
- """
- @overload
- def cat(
- tensors: tuple[Tensor, ...] | list[Tensor] | None,
- dim: _int = 0,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- cat(tensors, dim=0, *, out=None) -> Tensor
- Concatenates the given sequence of tensors in :attr:`tensors` in the given dimension.
- All tensors must either have the same shape (except in the concatenating
- dimension) or be a 1-D empty tensor with size ``(0,)``.
- :func:`torch.cat` can be seen as an inverse operation for :func:`torch.split`
- and :func:`torch.chunk`.
- :func:`torch.cat` can be best understood via examples.
- .. seealso::
- :func:`torch.stack` concatenates the given sequence along a new dimension.
- Args:
- tensors (sequence of Tensors): Non-empty tensors provided must have the same shape,
- except in the cat dimension.
- dim (int, optional): the dimension over which the tensors are concatenated
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> x = torch.randn(2, 3)
- >>> x
- tensor([[ 0.6580, -1.0969, -0.4614],
- [-0.1034, -0.5790, 0.1497]])
- >>> torch.cat((x, x, x), 0)
- tensor([[ 0.6580, -1.0969, -0.4614],
- [-0.1034, -0.5790, 0.1497],
- [ 0.6580, -1.0969, -0.4614],
- [-0.1034, -0.5790, 0.1497],
- [ 0.6580, -1.0969, -0.4614],
- [-0.1034, -0.5790, 0.1497]])
- >>> torch.cat((x, x, x), 1)
- tensor([[ 0.6580, -1.0969, -0.4614, 0.6580, -1.0969, -0.4614, 0.6580,
- -1.0969, -0.4614],
- [-0.1034, -0.5790, 0.1497, -0.1034, -0.5790, 0.1497, -0.1034,
- -0.5790, 0.1497]])
- """
- @overload
- def cat(
- tensors: tuple[Tensor, ...] | list[Tensor] | None,
- dim: str | EllipsisType | None,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- cat(tensors, dim=0, *, out=None) -> Tensor
- Concatenates the given sequence of tensors in :attr:`tensors` in the given dimension.
- All tensors must either have the same shape (except in the concatenating
- dimension) or be a 1-D empty tensor with size ``(0,)``.
- :func:`torch.cat` can be seen as an inverse operation for :func:`torch.split`
- and :func:`torch.chunk`.
- :func:`torch.cat` can be best understood via examples.
- .. seealso::
- :func:`torch.stack` concatenates the given sequence along a new dimension.
- Args:
- tensors (sequence of Tensors): Non-empty tensors provided must have the same shape,
- except in the cat dimension.
- dim (int, optional): the dimension over which the tensors are concatenated
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> x = torch.randn(2, 3)
- >>> x
- tensor([[ 0.6580, -1.0969, -0.4614],
- [-0.1034, -0.5790, 0.1497]])
- >>> torch.cat((x, x, x), 0)
- tensor([[ 0.6580, -1.0969, -0.4614],
- [-0.1034, -0.5790, 0.1497],
- [ 0.6580, -1.0969, -0.4614],
- [-0.1034, -0.5790, 0.1497],
- [ 0.6580, -1.0969, -0.4614],
- [-0.1034, -0.5790, 0.1497]])
- >>> torch.cat((x, x, x), 1)
- tensor([[ 0.6580, -1.0969, -0.4614, 0.6580, -1.0969, -0.4614, 0.6580,
- -1.0969, -0.4614],
- [-0.1034, -0.5790, 0.1497, -0.1034, -0.5790, 0.1497, -0.1034,
- -0.5790, 0.1497]])
- """
- def ccol_indices_copy(
- input: Tensor,
- *,
- out: Tensor | None = None,
- ) -> Tensor: ...
- def ceil(input: Tensor, *, out: Tensor | None = None) -> Tensor:
- r"""
- ceil(input, *, out=None) -> Tensor
- Returns a new tensor with the ceil of the elements of :attr:`input`,
- the smallest integer greater than or equal to each element.
- For integer inputs, follows the array-api convention of returning a
- copy of the input tensor.
- .. math::
- \text{out}_{i} = \left\lceil \text{input}_{i} \right\rceil
- Args:
- input (Tensor): the input tensor.
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> a = torch.randn(4)
- >>> a
- tensor([-0.6341, -1.4208, -1.0900, 0.5826])
- >>> torch.ceil(a)
- tensor([-0., -1., -1., 1.])
- """
- def ceil_(input: Tensor) -> Tensor: ...
- def celu(input: Tensor, alpha: Number | _complex = 1.0) -> Tensor: ...
- def celu_(input: Tensor, alpha: Number | _complex = 1.0) -> Tensor: ...
- def channel_shuffle(input: Tensor, groups: _int | SymInt) -> Tensor: ...
- def cholesky(
- input: Tensor,
- upper: _bool = False,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- cholesky(input, upper=False, *, out=None) -> Tensor
- Computes the Cholesky decomposition of a symmetric positive-definite
- matrix :math:`A` or for batches of symmetric positive-definite matrices.
- If :attr:`upper` is ``True``, the returned matrix ``U`` is upper-triangular, and
- the decomposition has the form:
- .. math::
- A = U^TU
- If :attr:`upper` is ``False``, the returned matrix ``L`` is lower-triangular, and
- the decomposition has the form:
- .. math::
- A = LL^T
- If :attr:`upper` is ``True``, and :math:`A` is a batch of symmetric positive-definite
- matrices, then the returned tensor will be composed of upper-triangular Cholesky factors
- of each of the individual matrices. Similarly, when :attr:`upper` is ``False``, the returned
- tensor will be composed of lower-triangular Cholesky factors of each of the individual
- matrices.
- .. warning::
- :func:`torch.cholesky` is deprecated in favor of :func:`torch.linalg.cholesky`
- and will be removed in a future PyTorch release.
- ``L = torch.cholesky(A)`` should be replaced with
- .. code:: python
- L = torch.linalg.cholesky(A)
- ``U = torch.cholesky(A, upper=True)`` should be replaced with
- .. code:: python
- U = torch.linalg.cholesky(A).mH
- This transform will produce equivalent results for all valid (symmetric positive definite) inputs.
- Args:
- input (Tensor): the input tensor :math:`A` of size :math:`(*, n, n)` where `*` is zero or more
- batch dimensions consisting of symmetric positive-definite matrices.
- upper (bool, optional): flag that indicates whether to return a
- upper or lower triangular matrix. Default: ``False``
- Keyword args:
- out (Tensor, optional): the output matrix
- Example::
- >>> a = torch.randn(3, 3)
- >>> a = a @ a.mT + 1e-3 # make symmetric positive-definite
- >>> l = torch.cholesky(a)
- >>> a
- tensor([[ 2.4112, -0.7486, 1.4551],
- [-0.7486, 1.3544, 0.1294],
- [ 1.4551, 0.1294, 1.6724]])
- >>> l
- tensor([[ 1.5528, 0.0000, 0.0000],
- [-0.4821, 1.0592, 0.0000],
- [ 0.9371, 0.5487, 0.7023]])
- >>> l @ l.mT
- tensor([[ 2.4112, -0.7486, 1.4551],
- [-0.7486, 1.3544, 0.1294],
- [ 1.4551, 0.1294, 1.6724]])
- >>> a = torch.randn(3, 2, 2) # Example for batched input
- >>> a = a @ a.mT + 1e-03 # make symmetric positive-definite
- >>> l = torch.cholesky(a)
- >>> z = l @ l.mT
- >>> torch.dist(z, a)
- tensor(2.3842e-07)
- """
- def cholesky_inverse(
- input: Tensor,
- upper: _bool = False,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- cholesky_inverse(L, upper=False, *, out=None) -> Tensor
- Computes the inverse of a complex Hermitian or real symmetric
- positive-definite matrix given its Cholesky decomposition.
- Let :math:`A` be a complex Hermitian or real symmetric positive-definite matrix,
- and :math:`L` its Cholesky decomposition such that:
- .. math::
- A = LL^{\text{H}}
- where :math:`L^{\text{H}}` is the conjugate transpose when :math:`L` is complex,
- and the transpose when :math:`L` is real-valued.
- Computes the inverse matrix :math:`A^{-1}`.
- Supports input of float, double, cfloat and cdouble dtypes.
- Also supports batches of matrices, and if :math:`A` is a batch of matrices
- then the output has the same batch dimensions.
- Args:
- L (Tensor): tensor of shape `(*, n, n)` where `*` is zero or more batch dimensions
- consisting of lower or upper triangular Cholesky decompositions of
- symmetric or Hermitian positive-definite matrices.
- upper (bool, optional): flag that indicates whether :math:`L` is lower triangular
- or upper triangular. Default: ``False``
- Keyword args:
- out (Tensor, optional): output tensor. Ignored if `None`. Default: `None`.
- Example::
- >>> A = torch.randn(3, 3)
- >>> A = A @ A.T + torch.eye(3) * 1e-3 # Creates a symmetric positive-definite matrix
- >>> L = torch.linalg.cholesky(A) # Extract Cholesky decomposition
- >>> torch.cholesky_inverse(L)
- tensor([[ 1.9314, 1.2251, -0.0889],
- [ 1.2251, 2.4439, 0.2122],
- [-0.0889, 0.2122, 0.1412]])
- >>> A.inverse()
- tensor([[ 1.9314, 1.2251, -0.0889],
- [ 1.2251, 2.4439, 0.2122],
- [-0.0889, 0.2122, 0.1412]])
- >>> A = torch.randn(3, 2, 2, dtype=torch.complex64)
- >>> A = A @ A.mH + torch.eye(2) * 1e-3 # Batch of Hermitian positive-definite matrices
- >>> L = torch.linalg.cholesky(A)
- >>> torch.dist(torch.inverse(A), torch.cholesky_inverse(L))
- tensor(5.6358e-7)
- """
- def cholesky_solve(
- input: Tensor,
- input2: Tensor,
- upper: _bool = False,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- cholesky_solve(B, L, upper=False, *, out=None) -> Tensor
- Computes the solution of a system of linear equations with complex Hermitian
- or real symmetric positive-definite lhs given its Cholesky decomposition.
- Let :math:`A` be a complex Hermitian or real symmetric positive-definite matrix,
- and :math:`L` its Cholesky decomposition such that:
- .. math::
- A = LL^{\text{H}}
- where :math:`L^{\text{H}}` is the conjugate transpose when :math:`L` is complex,
- and the transpose when :math:`L` is real-valued.
- Returns the solution :math:`X` of the following linear system:
- .. math::
- AX = B
- Supports inputs of float, double, cfloat and cdouble dtypes.
- Also supports batches of matrices, and if :math:`A` or :math:`B` is a batch of matrices
- then the output has the same batch dimensions.
- Args:
- B (Tensor): right-hand side tensor of shape `(*, n, k)`
- where :math:`*` is zero or more batch dimensions
- L (Tensor): tensor of shape `(*, n, n)` where `*` is zero or more batch dimensions
- consisting of lower or upper triangular Cholesky decompositions of
- symmetric or Hermitian positive-definite matrices.
- upper (bool, optional): flag that indicates whether :math:`L` is lower triangular
- or upper triangular. Default: ``False``.
- Keyword args:
- out (Tensor, optional): output tensor. Ignored if `None`. Default: `None`.
- Example::
- >>> A = torch.randn(3, 3)
- >>> A = A @ A.T + torch.eye(3) * 1e-3 # Creates a symmetric positive-definite matrix
- >>> L = torch.linalg.cholesky(A) # Extract Cholesky decomposition
- >>> B = torch.randn(3, 2)
- >>> torch.cholesky_solve(B, L)
- tensor([[ -8.1625, 19.6097],
- [ -5.8398, 14.2387],
- [ -4.3771, 10.4173]])
- >>> A.inverse() @ B
- tensor([[ -8.1626, 19.6097],
- [ -5.8398, 14.2387],
- [ -4.3771, 10.4173]])
- >>> A = torch.randn(3, 2, 2, dtype=torch.complex64)
- >>> A = A @ A.mH + torch.eye(2) * 1e-3 # Batch of Hermitian positive-definite matrices
- >>> L = torch.linalg.cholesky(A)
- >>> B = torch.randn(2, 1, dtype=torch.complex64)
- >>> X = torch.cholesky_solve(B, L)
- >>> torch.dist(X, A.inverse() @ B)
- tensor(1.6881e-5)
- """
- def choose_qparams_optimized(
- input: Tensor,
- numel: _int,
- n_bins: _int,
- ratio: _float,
- bit_width: _int,
- ) -> tuple[Tensor, Tensor]: ...
- def chunk(input: Tensor, chunks: _int, dim: _int = 0) -> tuple[Tensor, ...]:
- r"""
- chunk(input: Tensor, chunks: int, dim: int = 0) -> Tuple[Tensor, ...]
- Attempts to split a tensor into the specified number of chunks. Each chunk is a view of
- the input tensor.
- .. note::
- This function may return fewer than the specified number of chunks!
- .. seealso::
- :func:`torch.tensor_split` a function that always returns exactly the specified number of chunks
- If the tensor size along the given dimension :attr:`dim` is divisible by :attr:`chunks`,
- all returned chunks will be the same size.
- If the tensor size along the given dimension :attr:`dim` is not divisible by :attr:`chunks`,
- all returned chunks will be the same size, except the last one.
- If such division is not possible, this function may return fewer
- than the specified number of chunks.
- Arguments:
- input (Tensor): the tensor to split
- chunks (int): number of chunks to return
- dim (int): dimension along which to split the tensor
- Example:
- >>> torch.arange(11).chunk(6)
- (tensor([0, 1]),
- tensor([2, 3]),
- tensor([4, 5]),
- tensor([6, 7]),
- tensor([8, 9]),
- tensor([10]))
- >>> torch.arange(12).chunk(6)
- (tensor([0, 1]),
- tensor([2, 3]),
- tensor([4, 5]),
- tensor([6, 7]),
- tensor([8, 9]),
- tensor([10, 11]))
- >>> torch.arange(13).chunk(6)
- (tensor([0, 1, 2]),
- tensor([3, 4, 5]),
- tensor([6, 7, 8]),
- tensor([ 9, 10, 11]),
- tensor([12]))
- """
- @overload
- def clamp(
- input: Tensor,
- min: Tensor | None = None,
- max: Tensor | None = None,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- clamp(input, min=None, max=None, *, out=None) -> Tensor
- Clamps all elements in :attr:`input` into the range `[` :attr:`min`, :attr:`max` `]`.
- Letting min_value and max_value be :attr:`min` and :attr:`max`, respectively, this returns:
- .. math::
- y_i = \min(\max(x_i, \text{min\_value}_i), \text{max\_value}_i)
- If :attr:`min` is ``None``, there is no lower bound.
- Or, if :attr:`max` is ``None`` there is no upper bound.
- .. note::
- If :attr:`min` is greater than :attr:`max` :func:`torch.clamp(..., min, max) <torch.clamp>`
- sets all elements in :attr:`input` to the value of :attr:`max`.
- Args:
- input (Tensor): the input tensor.
- min (Number or Tensor, optional): lower-bound of the range to be clamped to
- max (Number or Tensor, optional): upper-bound of the range to be clamped to
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> a = torch.randn(4)
- >>> a
- tensor([-1.7120, 0.1734, -0.0478, -0.0922])
- >>> torch.clamp(a, min=-0.5, max=0.5)
- tensor([-0.5000, 0.1734, -0.0478, -0.0922])
- >>> min = torch.linspace(-1, 1, steps=4)
- >>> torch.clamp(a, min=min)
- tensor([-1.0000, 0.1734, 0.3333, 1.0000])
- """
- @overload
- def clamp(
- input: Tensor,
- min: Number | _complex | None = None,
- max: Number | _complex | None = None,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- clamp(input, min=None, max=None, *, out=None) -> Tensor
- Clamps all elements in :attr:`input` into the range `[` :attr:`min`, :attr:`max` `]`.
- Letting min_value and max_value be :attr:`min` and :attr:`max`, respectively, this returns:
- .. math::
- y_i = \min(\max(x_i, \text{min\_value}_i), \text{max\_value}_i)
- If :attr:`min` is ``None``, there is no lower bound.
- Or, if :attr:`max` is ``None`` there is no upper bound.
- .. note::
- If :attr:`min` is greater than :attr:`max` :func:`torch.clamp(..., min, max) <torch.clamp>`
- sets all elements in :attr:`input` to the value of :attr:`max`.
- Args:
- input (Tensor): the input tensor.
- min (Number or Tensor, optional): lower-bound of the range to be clamped to
- max (Number or Tensor, optional): upper-bound of the range to be clamped to
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> a = torch.randn(4)
- >>> a
- tensor([-1.7120, 0.1734, -0.0478, -0.0922])
- >>> torch.clamp(a, min=-0.5, max=0.5)
- tensor([-0.5000, 0.1734, -0.0478, -0.0922])
- >>> min = torch.linspace(-1, 1, steps=4)
- >>> torch.clamp(a, min=min)
- tensor([-1.0000, 0.1734, 0.3333, 1.0000])
- """
- @overload
- def clamp_(
- input: Tensor,
- min: Tensor | None = None,
- max: Tensor | None = None,
- ) -> Tensor: ...
- @overload
- def clamp_(
- input: Tensor,
- min: Number | _complex | None = None,
- max: Number | _complex | None = None,
- ) -> Tensor: ...
- @overload
- def clamp_max(
- input: Tensor,
- max: Tensor,
- *,
- out: Tensor | None = None,
- ) -> Tensor: ...
- @overload
- def clamp_max(
- input: Tensor,
- max: Number | _complex,
- *,
- out: Tensor | None = None,
- ) -> Tensor: ...
- @overload
- def clamp_max_(input: Tensor, max: Tensor) -> Tensor: ...
- @overload
- def clamp_max_(input: Tensor, max: Number | _complex) -> Tensor: ...
- @overload
- def clamp_min(
- input: Tensor,
- min: Tensor,
- *,
- out: Tensor | None = None,
- ) -> Tensor: ...
- @overload
- def clamp_min(
- input: Tensor,
- min: Number | _complex,
- *,
- out: Tensor | None = None,
- ) -> Tensor: ...
- @overload
- def clamp_min_(input: Tensor, min: Tensor) -> Tensor: ...
- @overload
- def clamp_min_(input: Tensor, min: Number | _complex) -> Tensor: ...
- @overload
- def clip(
- input: Tensor,
- min: Tensor | None = None,
- max: Tensor | None = None,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- clip(input, min=None, max=None, *, out=None) -> Tensor
- Alias for :func:`torch.clamp`.
- """
- @overload
- def clip(
- input: Tensor,
- min: Number | _complex | None = None,
- max: Number | _complex | None = None,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- clip(input, min=None, max=None, *, out=None) -> Tensor
- Alias for :func:`torch.clamp`.
- """
- @overload
- def clip_(
- input: Tensor,
- min: Tensor | None = None,
- max: Tensor | None = None,
- ) -> Tensor: ...
- @overload
- def clip_(
- input: Tensor,
- min: Number | _complex | None = None,
- max: Number | _complex | None = None,
- ) -> Tensor: ...
- def clone(
- input: Tensor,
- *,
- memory_format: memory_format | None = None,
- ) -> Tensor:
- r"""
- clone(input, *, memory_format=torch.preserve_format) -> Tensor
- Returns a copy of :attr:`input`.
- .. note::
- This function is differentiable, so gradients will flow back from the
- result of this operation to :attr:`input`. To create a tensor without an
- autograd relationship to :attr:`input` see :meth:`~Tensor.detach`.
- In addition, when ``torch.preserve_format`` is used:
- If the input tensor is dense (i.e., non-overlapping strided),
- its memory format (including strides) is retained.
- Otherwise (e.g., a non-dense view like a stepped slice),
- the output is converted to the dense (contiguous) format.
- Args:
- input (Tensor): the input tensor.
- Keyword args:
- memory_format (:class:`torch.memory_format`, optional): the desired memory format of
- returned tensor. Default: ``torch.preserve_format``.
- """
- def col_indices_copy(input: Tensor, *, out: Tensor | None = None) -> Tensor:
- r"""
- Performs the same operation as :func:`torch.col_indices`, but all output tensors
- are freshly created instead of aliasing the input.
- """
- def column_stack(
- tensors: tuple[Tensor, ...] | list[Tensor] | None,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- column_stack(tensors, *, out=None) -> Tensor
- Creates a new tensor by horizontally stacking the tensors in :attr:`tensors`.
- Equivalent to ``torch.hstack(tensors)``, except each zero or one dimensional tensor ``t``
- in :attr:`tensors` is first reshaped into a ``(t.numel(), 1)`` column before being stacked horizontally.
- Args:
- tensors (sequence of Tensors): sequence of tensors to concatenate
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> a = torch.tensor([1, 2, 3])
- >>> b = torch.tensor([4, 5, 6])
- >>> torch.column_stack((a, b))
- tensor([[1, 4],
- [2, 5],
- [3, 6]])
- >>> a = torch.arange(5)
- >>> b = torch.arange(10).reshape(5, 2)
- >>> torch.column_stack((a, b, b))
- tensor([[0, 0, 1, 0, 1],
- [1, 2, 3, 2, 3],
- [2, 4, 5, 4, 5],
- [3, 6, 7, 6, 7],
- [4, 8, 9, 8, 9]])
- """
- def combinations(
- input: Tensor,
- r: _int = 2,
- with_replacement: _bool = False,
- ) -> Tensor:
- r"""
- combinations(input: Tensor, r: int = 2, with_replacement: bool = False) -> seq
- Compute combinations of length :math:`r` of the given tensor. The behavior is similar to
- python's `itertools.combinations` when `with_replacement` is set to `False`, and
- `itertools.combinations_with_replacement` when `with_replacement` is set to `True`.
- Arguments:
- input (Tensor): 1D vector.
- r (int, optional): number of elements to combine
- with_replacement (bool, optional): whether to allow duplication in combination
- Returns:
- Tensor: A tensor equivalent to converting all the input tensors into lists, do
- `itertools.combinations` or `itertools.combinations_with_replacement` on these
- lists, and finally convert the resulting list into tensor.
- Example::
- >>> a = [1, 2, 3]
- >>> list(itertools.combinations(a, r=2))
- [(1, 2), (1, 3), (2, 3)]
- >>> list(itertools.combinations(a, r=3))
- [(1, 2, 3)]
- >>> list(itertools.combinations_with_replacement(a, r=2))
- [(1, 1), (1, 2), (1, 3), (2, 2), (2, 3), (3, 3)]
- >>> tensor_a = torch.tensor(a)
- >>> torch.combinations(tensor_a)
- tensor([[1, 2],
- [1, 3],
- [2, 3]])
- >>> torch.combinations(tensor_a, r=3)
- tensor([[1, 2, 3]])
- >>> torch.combinations(tensor_a, with_replacement=True)
- tensor([[1, 1],
- [1, 2],
- [1, 3],
- [2, 2],
- [2, 3],
- [3, 3]])
- """
- def complex(
- real: Tensor,
- imag: Tensor,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- complex(real, imag, *, out=None) -> Tensor
- Constructs a complex tensor with its real part equal to :attr:`real` and its
- imaginary part equal to :attr:`imag`.
- Args:
- real (Tensor): The real part of the complex tensor. Must be half, float or double.
- imag (Tensor): The imaginary part of the complex tensor. Must be same dtype
- as :attr:`real`.
- Keyword args:
- out (Tensor): If the inputs are ``torch.float32``, must be
- ``torch.complex64``. If the inputs are ``torch.float64``, must be
- ``torch.complex128``.
- Example::
- >>> real = torch.tensor([1, 2], dtype=torch.float32)
- >>> imag = torch.tensor([3, 4], dtype=torch.float32)
- >>> z = torch.complex(real, imag)
- >>> z
- tensor([(1.+3.j), (2.+4.j)])
- >>> z.dtype
- torch.complex64
- """
- @overload
- def concat(
- tensors: tuple[Tensor, ...] | list[Tensor] | None,
- dim: _int = 0,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- concat(tensors, dim=0, *, out=None) -> Tensor
- Alias of :func:`torch.cat`.
- """
- @overload
- def concat(
- tensors: tuple[Tensor, ...] | list[Tensor] | None,
- dim: str | EllipsisType | None,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- concat(tensors, dim=0, *, out=None) -> Tensor
- Alias of :func:`torch.cat`.
- """
- @overload
- def concatenate(
- tensors: tuple[Tensor, ...] | list[Tensor] | None,
- dim: _int = 0,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- concatenate(tensors, axis=0, out=None) -> Tensor
- Alias of :func:`torch.cat`.
- """
- @overload
- def concatenate(
- tensors: tuple[Tensor, ...] | list[Tensor] | None,
- dim: str | EllipsisType | None,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- concatenate(tensors, axis=0, out=None) -> Tensor
- Alias of :func:`torch.cat`.
- """
- def conj(input: Tensor) -> Tensor:
- r"""
- conj(input) -> Tensor
- Returns a view of :attr:`input` with a flipped conjugate bit. If :attr:`input` has a non-complex dtype,
- this function just returns :attr:`input`.
- .. note::
- :func:`torch.conj` performs a lazy conjugation, but the actual conjugated tensor can be materialized
- at any time using :func:`torch.resolve_conj`.
- .. warning:: In the future, :func:`torch.conj` may return a non-writeable view for an :attr:`input` of
- non-complex dtype. It's recommended that programs not modify the tensor returned by :func:`torch.conj_physical`
- when :attr:`input` is of non-complex dtype to be compatible with this change.
- Args:
- input (Tensor): the input tensor.
- Example::
- >>> x = torch.tensor([-1 + 1j, -2 + 2j, 3 - 3j])
- >>> x.is_conj()
- False
- >>> y = torch.conj(x)
- >>> y.is_conj()
- True
- """
- def conj_physical(input: Tensor, *, out: Tensor | None = None) -> Tensor:
- r"""
- conj_physical(input, *, out=None) -> Tensor
- Computes the element-wise conjugate of the given :attr:`input` tensor.
- If :attr:`input` has a non-complex dtype, this function just returns :attr:`input`.
- .. note::
- This performs the conjugate operation regardless of the fact conjugate bit is set or not.
- .. warning:: In the future, :func:`torch.conj_physical` may return a non-writeable view for an :attr:`input` of
- non-complex dtype. It's recommended that programs not modify the tensor returned by :func:`torch.conj_physical`
- when :attr:`input` is of non-complex dtype to be compatible with this change.
- .. math::
- \text{out}_{i} = conj(\text{input}_{i})
- Args:
- input (Tensor): the input tensor.
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> torch.conj_physical(torch.tensor([-1 + 1j, -2 + 2j, 3 - 3j]))
- tensor([-1 - 1j, -2 - 2j, 3 + 3j])
- """
- def conj_physical_(input: Tensor) -> Tensor: ...
- def constant_pad_nd(
- input: Tensor,
- pad: Sequence[_int | SymInt],
- value: Number | _complex = 0,
- ) -> Tensor: ...
- @overload
- def conv1d(
- input: Tensor,
- weight: Tensor,
- bias: Tensor | None = None,
- stride: _int | SymInt | Sequence[_int | SymInt] = 1,
- padding: _int | SymInt | Sequence[_int | SymInt] = 0,
- dilation: _int | SymInt | Sequence[_int | SymInt] = 1,
- groups: _int | SymInt = 1,
- ) -> Tensor: ...
- @overload
- def conv1d(
- input: Tensor,
- weight: Tensor,
- bias: Tensor | None = None,
- stride: _int | SymInt | Sequence[_int | SymInt] = 1,
- padding: str = "valid",
- dilation: _int | SymInt | Sequence[_int | SymInt] = 1,
- groups: _int | SymInt = 1,
- ) -> Tensor: ...
- @overload
- def conv2d(
- input: Tensor,
- weight: Tensor,
- bias: Tensor | None = None,
- stride: _int | SymInt | Sequence[_int | SymInt] = 1,
- padding: _int | SymInt | Sequence[_int | SymInt] = 0,
- dilation: _int | SymInt | Sequence[_int | SymInt] = 1,
- groups: _int | SymInt = 1,
- ) -> Tensor: ...
- @overload
- def conv2d(
- input: Tensor,
- weight: Tensor,
- bias: Tensor | None = None,
- stride: _int | SymInt | Sequence[_int | SymInt] = 1,
- padding: str = "valid",
- dilation: _int | SymInt | Sequence[_int | SymInt] = 1,
- groups: _int | SymInt = 1,
- ) -> Tensor: ...
- @overload
- def conv3d(
- input: Tensor,
- weight: Tensor,
- bias: Tensor | None = None,
- stride: _int | SymInt | Sequence[_int | SymInt] = 1,
- padding: _int | SymInt | Sequence[_int | SymInt] = 0,
- dilation: _int | SymInt | Sequence[_int | SymInt] = 1,
- groups: _int | SymInt = 1,
- ) -> Tensor: ...
- @overload
- def conv3d(
- input: Tensor,
- weight: Tensor,
- bias: Tensor | None = None,
- stride: _int | SymInt | Sequence[_int | SymInt] = 1,
- padding: str = "valid",
- dilation: _int | SymInt | Sequence[_int | SymInt] = 1,
- groups: _int | SymInt = 1,
- ) -> Tensor: ...
- def conv_tbc(
- input: Tensor,
- weight: Tensor,
- bias: Tensor,
- pad: _int = 0,
- ) -> Tensor: ...
- def conv_transpose1d(
- input: Tensor,
- weight: Tensor,
- bias: Tensor | None = None,
- stride: _int | SymInt | Sequence[_int | SymInt] = 1,
- padding: _int | SymInt | Sequence[_int | SymInt] = 0,
- output_padding: _int | SymInt | Sequence[_int | SymInt] = 0,
- groups: _int | SymInt = 1,
- dilation: _int | SymInt | Sequence[_int | SymInt] = 1,
- ) -> Tensor: ...
- def conv_transpose2d(
- input: Tensor,
- weight: Tensor,
- bias: Tensor | None = None,
- stride: _int | SymInt | Sequence[_int | SymInt] = 1,
- padding: _int | SymInt | Sequence[_int | SymInt] = 0,
- output_padding: _int | SymInt | Sequence[_int | SymInt] = 0,
- groups: _int | SymInt = 1,
- dilation: _int | SymInt | Sequence[_int | SymInt] = 1,
- ) -> Tensor: ...
- def conv_transpose3d(
- input: Tensor,
- weight: Tensor,
- bias: Tensor | None = None,
- stride: _int | SymInt | Sequence[_int | SymInt] = 1,
- padding: _int | SymInt | Sequence[_int | SymInt] = 0,
- output_padding: _int | SymInt | Sequence[_int | SymInt] = 0,
- groups: _int | SymInt = 1,
- dilation: _int | SymInt | Sequence[_int | SymInt] = 1,
- ) -> Tensor: ...
- def convolution(
- input: Tensor,
- weight: Tensor,
- bias: Tensor | None,
- stride: Sequence[_int | SymInt],
- padding: Sequence[_int | SymInt],
- dilation: Sequence[_int | SymInt],
- transposed: _bool,
- output_padding: Sequence[_int | SymInt],
- groups: _int | SymInt,
- ) -> Tensor: ...
- @overload
- def copysign(
- input: Tensor,
- other: Tensor,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- copysign(input, other, *, out=None) -> Tensor
- Create a new floating-point tensor with the magnitude of :attr:`input` and the sign of :attr:`other`, elementwise.
- .. math::
- \text{out}_{i} = \begin{cases}
- -|\text{input}_{i}| & \text{if } \text{other}_{i} \leq -0.0 \\
- |\text{input}_{i}| & \text{if } \text{other}_{i} \geq 0.0 \\
- \end{cases}
- Supports :ref:`broadcasting to a common shape <broadcasting-semantics>`,
- and integer and float inputs.
- Args:
- input (Tensor): magnitudes.
- other (Tensor or Number): contains value(s) whose signbit(s) are
- applied to the magnitudes in :attr:`input`.
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> a = torch.randn(5)
- >>> a
- tensor([-1.2557, -0.0026, -0.5387, 0.4740, -0.9244])
- >>> torch.copysign(a, 1)
- tensor([1.2557, 0.0026, 0.5387, 0.4740, 0.9244])
- >>> a = torch.randn(4, 4)
- >>> a
- tensor([[ 0.7079, 0.2778, -1.0249, 0.5719],
- [-0.0059, -0.2600, -0.4475, -1.3948],
- [ 0.3667, -0.9567, -2.5757, -0.1751],
- [ 0.2046, -0.0742, 0.2998, -0.1054]])
- >>> b = torch.randn(4)
- tensor([ 0.2373, 0.3120, 0.3190, -1.1128])
- >>> torch.copysign(a, b)
- tensor([[ 0.7079, 0.2778, 1.0249, -0.5719],
- [ 0.0059, 0.2600, 0.4475, -1.3948],
- [ 0.3667, 0.9567, 2.5757, -0.1751],
- [ 0.2046, 0.0742, 0.2998, -0.1054]])
- >>> a = torch.tensor([1.])
- >>> b = torch.tensor([-0.])
- >>> torch.copysign(a, b)
- tensor([-1.])
- .. note::
- copysign handles signed zeros. If the other argument has a negative zero (-0),
- the corresponding output value will be negative.
- """
- @overload
- def copysign(
- input: Tensor,
- other: Number | _complex,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- copysign(input, other, *, out=None) -> Tensor
- Create a new floating-point tensor with the magnitude of :attr:`input` and the sign of :attr:`other`, elementwise.
- .. math::
- \text{out}_{i} = \begin{cases}
- -|\text{input}_{i}| & \text{if } \text{other}_{i} \leq -0.0 \\
- |\text{input}_{i}| & \text{if } \text{other}_{i} \geq 0.0 \\
- \end{cases}
- Supports :ref:`broadcasting to a common shape <broadcasting-semantics>`,
- and integer and float inputs.
- Args:
- input (Tensor): magnitudes.
- other (Tensor or Number): contains value(s) whose signbit(s) are
- applied to the magnitudes in :attr:`input`.
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> a = torch.randn(5)
- >>> a
- tensor([-1.2557, -0.0026, -0.5387, 0.4740, -0.9244])
- >>> torch.copysign(a, 1)
- tensor([1.2557, 0.0026, 0.5387, 0.4740, 0.9244])
- >>> a = torch.randn(4, 4)
- >>> a
- tensor([[ 0.7079, 0.2778, -1.0249, 0.5719],
- [-0.0059, -0.2600, -0.4475, -1.3948],
- [ 0.3667, -0.9567, -2.5757, -0.1751],
- [ 0.2046, -0.0742, 0.2998, -0.1054]])
- >>> b = torch.randn(4)
- tensor([ 0.2373, 0.3120, 0.3190, -1.1128])
- >>> torch.copysign(a, b)
- tensor([[ 0.7079, 0.2778, 1.0249, -0.5719],
- [ 0.0059, 0.2600, 0.4475, -1.3948],
- [ 0.3667, 0.9567, 2.5757, -0.1751],
- [ 0.2046, 0.0742, 0.2998, -0.1054]])
- >>> a = torch.tensor([1.])
- >>> b = torch.tensor([-0.])
- >>> torch.copysign(a, b)
- tensor([-1.])
- .. note::
- copysign handles signed zeros. If the other argument has a negative zero (-0),
- the corresponding output value will be negative.
- """
- def corrcoef(input: Tensor) -> Tensor:
- r"""
- corrcoef(input) -> Tensor
- Estimates the Pearson product-moment correlation coefficient matrix of the variables given by the :attr:`input` matrix,
- where rows are the variables and columns are the observations.
- .. note::
- The correlation coefficient matrix R is computed using the covariance matrix C as given by
- :math:`R_{ij} = \frac{ C_{ij} } { \sqrt{ C_{ii} * C_{jj} } }`
- .. note::
- Due to floating point rounding, the resulting array may not be Hermitian and its diagonal elements may not be 1.
- The real and imaginary values are clipped to the interval [-1, 1] in an attempt to improve this situation.
- Args:
- input (Tensor): A 2D matrix containing multiple variables and observations, or a
- Scalar or 1D vector representing a single variable.
- Returns:
- (Tensor) The correlation coefficient matrix of the variables.
- .. seealso::
- :func:`torch.cov` covariance matrix.
- Example::
- >>> x = torch.tensor([[0, 1, 2], [2, 1, 0]])
- >>> torch.corrcoef(x)
- tensor([[ 1., -1.],
- [-1., 1.]])
- >>> x = torch.randn(2, 4)
- >>> x
- tensor([[-0.2678, -0.0908, -0.3766, 0.2780],
- [-0.5812, 0.1535, 0.2387, 0.2350]])
- >>> torch.corrcoef(x)
- tensor([[1.0000, 0.3582],
- [0.3582, 1.0000]])
- >>> torch.corrcoef(x[0])
- tensor(1.)
- """
- def cos(input: Tensor, *, out: Tensor | None = None) -> Tensor:
- r"""
- cos(input, *, out=None) -> Tensor
- Returns a new tensor with the cosine of the elements of :attr:`input`.
- .. math::
- \text{out}_{i} = \cos(\text{input}_{i})
- Args:
- input (Tensor): the input tensor.
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> a = torch.randn(4)
- >>> a
- tensor([ 1.4309, 1.2706, -0.8562, 0.9796])
- >>> torch.cos(a)
- tensor([ 0.1395, 0.2957, 0.6553, 0.5574])
- """
- def cos_(input: Tensor) -> Tensor: ...
- def cosh(input: Tensor, *, out: Tensor | None = None) -> Tensor:
- r"""
- cosh(input, *, out=None) -> Tensor
- Returns a new tensor with the hyperbolic cosine of the elements of
- :attr:`input`.
- .. math::
- \text{out}_{i} = \cosh(\text{input}_{i})
- Args:
- input (Tensor): the input tensor.
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> a = torch.randn(4)
- >>> a
- tensor([ 0.1632, 1.1835, -0.6979, -0.7325])
- >>> torch.cosh(a)
- tensor([ 1.0133, 1.7860, 1.2536, 1.2805])
- .. note::
- When :attr:`input` is on the CPU, the implementation of torch.cosh may use
- the Sleef library, which rounds very large results to infinity or negative
- infinity. See `here <https://sleef.org/purec.xhtml>`_ for details.
- """
- def cosh_(input: Tensor) -> Tensor: ...
- def cosine_embedding_loss(
- input1: Tensor,
- input2: Tensor,
- target: Tensor,
- margin: _float = 0.0,
- reduction: _int = 1,
- ) -> Tensor: ...
- def cosine_similarity(
- x1: Tensor,
- x2: Tensor,
- dim: _int = 1,
- eps: _float = 1e-08,
- ) -> Tensor: ...
- @overload
- def count_nonzero(input: Tensor, dim: _int | None = None) -> Tensor:
- r"""
- count_nonzero(input, dim=None) -> Tensor
- Counts the number of non-zero values in the tensor :attr:`input` along the given :attr:`dim`.
- If no dim is specified then all non-zeros in the tensor are counted.
- Args:
- input (Tensor): the input tensor.
- dim (int or tuple of ints, optional): Dim or tuple of dims along which to count non-zeros.
- Example::
- >>> x = torch.zeros(3,3)
- >>> x[torch.randn(3,3) > 0.5] = 1
- >>> x
- tensor([[0., 1., 1.],
- [0., 0., 0.],
- [0., 0., 1.]])
- >>> torch.count_nonzero(x)
- tensor(3)
- >>> torch.count_nonzero(x, dim=0)
- tensor([0, 1, 2])
- """
- @overload
- def count_nonzero(input: Tensor, dim: _size) -> Tensor:
- r"""
- count_nonzero(input, dim=None) -> Tensor
- Counts the number of non-zero values in the tensor :attr:`input` along the given :attr:`dim`.
- If no dim is specified then all non-zeros in the tensor are counted.
- Args:
- input (Tensor): the input tensor.
- dim (int or tuple of ints, optional): Dim or tuple of dims along which to count non-zeros.
- Example::
- >>> x = torch.zeros(3,3)
- >>> x[torch.randn(3,3) > 0.5] = 1
- >>> x
- tensor([[0., 1., 1.],
- [0., 0., 0.],
- [0., 0., 1.]])
- >>> torch.count_nonzero(x)
- tensor(3)
- >>> torch.count_nonzero(x, dim=0)
- tensor([0, 1, 2])
- """
- def cov(
- input: Tensor,
- *,
- correction: _int = 1,
- fweights: Tensor | None = None,
- aweights: Tensor | None = None,
- ) -> Tensor:
- r"""
- cov(input, *, correction=1, fweights=None, aweights=None) -> Tensor
- Estimates the covariance matrix of the variables given by the :attr:`input` matrix, where rows are
- the variables and columns are the observations.
- A covariance matrix is a square matrix giving the covariance of each pair of variables. The diagonal contains
- the variance of each variable (covariance of a variable with itself). By definition, if :attr:`input` represents
- a single variable (Scalar or 1D) then its variance is returned.
- The sample covariance of the variables :math:`x` and :math:`y` is given by:
- .. math::
- \text{cov}(x,y) = \frac{\sum^{N}_{i = 1}(x_{i} - \bar{x})(y_{i} - \bar{y})}{\max(0,~N~-~\delta N)}
- where :math:`\bar{x}` and :math:`\bar{y}` are the simple means of the :math:`x` and :math:`y` respectively, and
- :math:`\delta N` is the :attr:`correction`.
- If :attr:`fweights` and/or :attr:`aweights` are provided, the weighted covariance
- is calculated, which is given by:
- .. math::
- \text{cov}_w(x,y) = \frac{\sum^{N}_{i = 1}w_i(x_{i} - \mu_x^*)(y_{i} - \mu_y^*)}
- {\max(0,~\sum^{N}_{i = 1}w_i~-~\frac{\sum^{N}_{i = 1}w_ia_i}{\sum^{N}_{i = 1}w_i}~\delta N)}
- where :math:`w` denotes :attr:`fweights` or :attr:`aweights` (``f`` and ``a`` for brevity) based on whichever is
- provided, or :math:`w = f \times a` if both are provided, and
- :math:`\mu_x^* = \frac{\sum^{N}_{i = 1}w_ix_{i} }{\sum^{N}_{i = 1}w_i}` is the weighted mean of the variable. If not
- provided, ``f`` and/or ``a`` can be seen as a :math:`\mathbb{1}` vector of appropriate size.
- Args:
- input (Tensor): A 2D matrix containing multiple variables and observations, or a
- Scalar or 1D vector representing a single variable.
- Keyword Args:
- correction (int, optional): difference between the sample size and sample degrees of freedom.
- Defaults to Bessel's correction, ``correction = 1`` which returns the unbiased estimate,
- even if both :attr:`fweights` and :attr:`aweights` are specified. ``correction = 0``
- will return the simple average. Defaults to ``1``.
- fweights (tensor, optional): A Scalar or 1D tensor of observation vector frequencies representing the number of
- times each observation should be repeated. Its numel must equal the number of columns of :attr:`input`.
- Must have integral dtype. Ignored if ``None``. Defaults to ``None``.
- aweights (tensor, optional): A Scalar or 1D array of observation vector weights.
- These relative weights are typically large for observations considered "important" and smaller for
- observations considered less "important". Its numel must equal the number of columns of :attr:`input`.
- Must have floating point dtype. Ignored if ``None``. Defaults to ``None``.
- Returns:
- (Tensor) The covariance matrix of the variables.
- .. seealso::
- :func:`torch.corrcoef` normalized covariance matrix.
- Example::
- >>> x = torch.tensor([[0, 2], [1, 1], [2, 0]]).T
- >>> x
- tensor([[0, 1, 2],
- [2, 1, 0]])
- >>> torch.cov(x)
- tensor([[ 1., -1.],
- [-1., 1.]])
- >>> torch.cov(x, correction=0)
- tensor([[ 0.6667, -0.6667],
- [-0.6667, 0.6667]])
- >>> fw = torch.randint(1, 10, (3,))
- >>> fw
- tensor([1, 6, 9])
- >>> aw = torch.rand(3)
- >>> aw
- tensor([0.4282, 0.0255, 0.4144])
- >>> torch.cov(x, fweights=fw, aweights=aw)
- tensor([[ 0.4169, -0.4169],
- [-0.4169, 0.4169]])
- """
- def cross(
- input: Tensor,
- other: Tensor,
- dim: _int | None = None,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- cross(input, other, dim=None, *, out=None) -> Tensor
- Returns the cross product of vectors in dimension :attr:`dim` of :attr:`input`
- and :attr:`other`.
- Supports input of float, double, cfloat and cdouble dtypes. Also supports batches
- of vectors, for which it computes the product along the dimension :attr:`dim`.
- In this case, the output has the same batch dimensions as the inputs.
- .. warning::
- If :attr:`dim` is not given, it defaults to the first dimension found
- with the size 3. Note that this might be unexpected.
- This behavior is deprecated and will be changed to match that of :func:`torch.linalg.cross`
- in a future release.
- .. seealso::
- :func:`torch.linalg.cross` which has dim=-1 as default.
- Args:
- input (Tensor): the input tensor.
- other (Tensor): the second input tensor
- dim (int, optional): the dimension to take the cross-product in.
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> a = torch.randn(4, 3)
- >>> a
- tensor([[-0.3956, 1.1455, 1.6895],
- [-0.5849, 1.3672, 0.3599],
- [-1.1626, 0.7180, -0.0521],
- [-0.1339, 0.9902, -2.0225]])
- >>> b = torch.randn(4, 3)
- >>> b
- tensor([[-0.0257, -1.4725, -1.2251],
- [-1.1479, -0.7005, -1.9757],
- [-1.3904, 0.3726, -1.1836],
- [-0.9688, -0.7153, 0.2159]])
- >>> torch.cross(a, b, dim=1)
- tensor([[ 1.0844, -0.5281, 0.6120],
- [-2.4490, -1.5687, 1.9792],
- [-0.8304, -1.3037, 0.5650],
- [-1.2329, 1.9883, 1.0551]])
- >>> torch.cross(a, b)
- tensor([[ 1.0844, -0.5281, 0.6120],
- [-2.4490, -1.5687, 1.9792],
- [-0.8304, -1.3037, 0.5650],
- [-1.2329, 1.9883, 1.0551]])
- """
- def crow_indices_copy(
- input: Tensor,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- Performs the same operation as :func:`torch.crow_indices`, but all output tensors
- are freshly created instead of aliasing the input.
- """
- @overload
- def ctc_loss(
- log_probs: Tensor,
- targets: Tensor,
- input_lengths: _size,
- target_lengths: _size,
- blank: _int = 0,
- reduction: _int = 1,
- zero_infinity: _bool = False,
- ) -> Tensor: ...
- @overload
- def ctc_loss(
- log_probs: Tensor,
- targets: Tensor,
- input_lengths: Tensor,
- target_lengths: Tensor,
- blank: _int = 0,
- reduction: _int = 1,
- zero_infinity: _bool = False,
- ) -> Tensor: ...
- def cudnn_affine_grid_generator(
- theta: Tensor,
- N: _int,
- C: _int,
- H: _int,
- W: _int,
- ) -> Tensor: ...
- def cudnn_batch_norm(
- input: Tensor,
- weight: Tensor,
- bias: Tensor | None,
- running_mean: Tensor | None,
- running_var: Tensor | None,
- training: _bool,
- exponential_average_factor: _float,
- epsilon: _float,
- *,
- out: Tensor | tuple[Tensor, ...] | list[Tensor] | None = None,
- ) -> tuple[Tensor, Tensor, Tensor, Tensor]: ...
- def cudnn_convolution(
- input: Tensor,
- weight: Tensor,
- padding: Sequence[_int | SymInt],
- stride: Sequence[_int | SymInt],
- dilation: Sequence[_int | SymInt],
- groups: _int | SymInt,
- benchmark: _bool,
- deterministic: _bool,
- allow_tf32: _bool,
- *,
- out: Tensor | None = None,
- ) -> Tensor: ...
- def cudnn_convolution_add_relu(
- input: Tensor,
- weight: Tensor,
- z: Tensor,
- alpha: Number | _complex | None,
- bias: Tensor | None,
- stride: Sequence[_int | SymInt],
- padding: Sequence[_int | SymInt],
- dilation: Sequence[_int | SymInt],
- groups: _int | SymInt,
- ) -> Tensor: ...
- def cudnn_convolution_relu(
- input: Tensor,
- weight: Tensor,
- bias: Tensor | None,
- stride: Sequence[_int | SymInt],
- padding: Sequence[_int | SymInt],
- dilation: Sequence[_int | SymInt],
- groups: _int | SymInt,
- ) -> Tensor: ...
- def cudnn_convolution_transpose(
- input: Tensor,
- weight: Tensor,
- padding: Sequence[_int | SymInt],
- output_padding: Sequence[_int | SymInt],
- stride: Sequence[_int | SymInt],
- dilation: Sequence[_int | SymInt],
- groups: _int | SymInt,
- benchmark: _bool,
- deterministic: _bool,
- allow_tf32: _bool,
- ) -> Tensor: ...
- def cudnn_grid_sampler(input: Tensor, grid: Tensor) -> Tensor: ...
- def cudnn_is_acceptable(input: Tensor) -> _bool: ...
- @overload
- def cummax(
- input: Tensor,
- dim: _int,
- *,
- out: Tensor | tuple[Tensor, ...] | list[Tensor] | None = None,
- ) -> torch.return_types.cummax:
- r"""
- cummax(input, dim, *, out=None) -> (Tensor, LongTensor)
- Returns a namedtuple ``(values, indices)`` where ``values`` is the cumulative maximum of
- elements of :attr:`input` in the dimension :attr:`dim`. And ``indices`` is the index
- location of each maximum value found in the dimension :attr:`dim`.
- .. math::
- y_i = max(x_1, x_2, x_3, \dots, x_i)
- Args:
- input (Tensor): the input tensor.
- dim (int): the dimension to do the operation over
- Keyword args:
- out (tuple, optional): the result tuple of two output tensors (values, indices)
- Example::
- >>> a = torch.randn(10)
- >>> a
- tensor([-0.3449, -1.5447, 0.0685, -1.5104, -1.1706, 0.2259, 1.4696, -1.3284,
- 1.9946, -0.8209])
- >>> torch.cummax(a, dim=0)
- torch.return_types.cummax(
- values=tensor([-0.3449, -0.3449, 0.0685, 0.0685, 0.0685, 0.2259, 1.4696, 1.4696,
- 1.9946, 1.9946]),
- indices=tensor([0, 0, 2, 2, 2, 5, 6, 6, 8, 8]))
- """
- @overload
- def cummax(
- input: Tensor,
- dim: str | EllipsisType | None,
- *,
- out: Tensor | tuple[Tensor, ...] | list[Tensor] | None = None,
- ) -> torch.return_types.cummax:
- r"""
- cummax(input, dim, *, out=None) -> (Tensor, LongTensor)
- Returns a namedtuple ``(values, indices)`` where ``values`` is the cumulative maximum of
- elements of :attr:`input` in the dimension :attr:`dim`. And ``indices`` is the index
- location of each maximum value found in the dimension :attr:`dim`.
- .. math::
- y_i = max(x_1, x_2, x_3, \dots, x_i)
- Args:
- input (Tensor): the input tensor.
- dim (int): the dimension to do the operation over
- Keyword args:
- out (tuple, optional): the result tuple of two output tensors (values, indices)
- Example::
- >>> a = torch.randn(10)
- >>> a
- tensor([-0.3449, -1.5447, 0.0685, -1.5104, -1.1706, 0.2259, 1.4696, -1.3284,
- 1.9946, -0.8209])
- >>> torch.cummax(a, dim=0)
- torch.return_types.cummax(
- values=tensor([-0.3449, -0.3449, 0.0685, 0.0685, 0.0685, 0.2259, 1.4696, 1.4696,
- 1.9946, 1.9946]),
- indices=tensor([0, 0, 2, 2, 2, 5, 6, 6, 8, 8]))
- """
- @overload
- def cummin(
- input: Tensor,
- dim: _int,
- *,
- out: Tensor | tuple[Tensor, ...] | list[Tensor] | None = None,
- ) -> torch.return_types.cummin:
- r"""
- cummin(input, dim, *, out=None) -> (Tensor, LongTensor)
- Returns a namedtuple ``(values, indices)`` where ``values`` is the cumulative minimum of
- elements of :attr:`input` in the dimension :attr:`dim`. And ``indices`` is the index
- location of each maximum value found in the dimension :attr:`dim`.
- .. math::
- y_i = min(x_1, x_2, x_3, \dots, x_i)
- Args:
- input (Tensor): the input tensor.
- dim (int): the dimension to do the operation over
- Keyword args:
- out (tuple, optional): the result tuple of two output tensors (values, indices)
- Example::
- >>> a = torch.randn(10)
- >>> a
- tensor([-0.2284, -0.6628, 0.0975, 0.2680, -1.3298, -0.4220, -0.3885, 1.1762,
- 0.9165, 1.6684])
- >>> torch.cummin(a, dim=0)
- torch.return_types.cummin(
- values=tensor([-0.2284, -0.6628, -0.6628, -0.6628, -1.3298, -1.3298, -1.3298, -1.3298,
- -1.3298, -1.3298]),
- indices=tensor([0, 1, 1, 1, 4, 4, 4, 4, 4, 4]))
- """
- @overload
- def cummin(
- input: Tensor,
- dim: str | EllipsisType | None,
- *,
- out: Tensor | tuple[Tensor, ...] | list[Tensor] | None = None,
- ) -> torch.return_types.cummin:
- r"""
- cummin(input, dim, *, out=None) -> (Tensor, LongTensor)
- Returns a namedtuple ``(values, indices)`` where ``values`` is the cumulative minimum of
- elements of :attr:`input` in the dimension :attr:`dim`. And ``indices`` is the index
- location of each maximum value found in the dimension :attr:`dim`.
- .. math::
- y_i = min(x_1, x_2, x_3, \dots, x_i)
- Args:
- input (Tensor): the input tensor.
- dim (int): the dimension to do the operation over
- Keyword args:
- out (tuple, optional): the result tuple of two output tensors (values, indices)
- Example::
- >>> a = torch.randn(10)
- >>> a
- tensor([-0.2284, -0.6628, 0.0975, 0.2680, -1.3298, -0.4220, -0.3885, 1.1762,
- 0.9165, 1.6684])
- >>> torch.cummin(a, dim=0)
- torch.return_types.cummin(
- values=tensor([-0.2284, -0.6628, -0.6628, -0.6628, -1.3298, -1.3298, -1.3298, -1.3298,
- -1.3298, -1.3298]),
- indices=tensor([0, 1, 1, 1, 4, 4, 4, 4, 4, 4]))
- """
- @overload
- def cumprod(
- input: Tensor,
- dim: _int,
- *,
- dtype: _dtype | None = None,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- cumprod(input, dim, *, dtype=None, out=None) -> Tensor
- Returns the cumulative product of elements of :attr:`input` in the dimension
- :attr:`dim`.
- For example, if :attr:`input` is a vector of size N, the result will also be
- a vector of size N, with elements.
- .. math::
- y_i = x_1 \times x_2\times x_3\times \dots \times x_i
- Args:
- input (Tensor): the input tensor.
- dim (int): the dimension to do the operation over
- Keyword args:
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor.
- If specified, the input tensor is casted to :attr:`dtype` before the operation
- is performed. This is useful for preventing data type overflows. Default: None.
- out (Tensor, optional): the output tensor.
- Example::
- >>> a = torch.randn(10)
- >>> a
- tensor([ 0.6001, 0.2069, -0.1919, 0.9792, 0.6727, 1.0062, 0.4126,
- -0.2129, -0.4206, 0.1968])
- >>> torch.cumprod(a, dim=0)
- tensor([ 0.6001, 0.1241, -0.0238, -0.0233, -0.0157, -0.0158, -0.0065,
- 0.0014, -0.0006, -0.0001])
- >>> a[5] = 0.0
- >>> torch.cumprod(a, dim=0)
- tensor([ 0.6001, 0.1241, -0.0238, -0.0233, -0.0157, -0.0000, -0.0000,
- 0.0000, -0.0000, -0.0000])
- """
- @overload
- def cumprod(
- input: Tensor,
- dim: str | EllipsisType | None,
- *,
- dtype: _dtype | None = None,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- cumprod(input, dim, *, dtype=None, out=None) -> Tensor
- Returns the cumulative product of elements of :attr:`input` in the dimension
- :attr:`dim`.
- For example, if :attr:`input` is a vector of size N, the result will also be
- a vector of size N, with elements.
- .. math::
- y_i = x_1 \times x_2\times x_3\times \dots \times x_i
- Args:
- input (Tensor): the input tensor.
- dim (int): the dimension to do the operation over
- Keyword args:
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor.
- If specified, the input tensor is casted to :attr:`dtype` before the operation
- is performed. This is useful for preventing data type overflows. Default: None.
- out (Tensor, optional): the output tensor.
- Example::
- >>> a = torch.randn(10)
- >>> a
- tensor([ 0.6001, 0.2069, -0.1919, 0.9792, 0.6727, 1.0062, 0.4126,
- -0.2129, -0.4206, 0.1968])
- >>> torch.cumprod(a, dim=0)
- tensor([ 0.6001, 0.1241, -0.0238, -0.0233, -0.0157, -0.0158, -0.0065,
- 0.0014, -0.0006, -0.0001])
- >>> a[5] = 0.0
- >>> torch.cumprod(a, dim=0)
- tensor([ 0.6001, 0.1241, -0.0238, -0.0233, -0.0157, -0.0000, -0.0000,
- 0.0000, -0.0000, -0.0000])
- """
- @overload
- def cumsum(
- input: Tensor,
- dim: _int,
- *,
- dtype: _dtype | None = None,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- cumsum(input, dim, *, dtype=None, out=None) -> Tensor
- Returns the cumulative sum of elements of :attr:`input` in the dimension
- :attr:`dim`.
- For example, if :attr:`input` is a vector of size N, the result will also be
- a vector of size N, with elements.
- .. math::
- y_i = x_1 + x_2 + x_3 + \dots + x_i
- Args:
- input (Tensor): the input tensor.
- dim (int): the dimension to do the operation over
- Keyword args:
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor.
- If specified, the input tensor is casted to :attr:`dtype` before the operation
- is performed. This is useful for preventing data type overflows. Default: None.
- out (Tensor, optional): the output tensor.
- Example::
- >>> a = torch.randint(1, 20, (10,))
- >>> a
- tensor([13, 7, 3, 10, 13, 3, 15, 10, 9, 10])
- >>> torch.cumsum(a, dim=0)
- tensor([13, 20, 23, 33, 46, 49, 64, 74, 83, 93])
- """
- @overload
- def cumsum(
- input: Tensor,
- dim: str | EllipsisType | None,
- *,
- dtype: _dtype | None = None,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- cumsum(input, dim, *, dtype=None, out=None) -> Tensor
- Returns the cumulative sum of elements of :attr:`input` in the dimension
- :attr:`dim`.
- For example, if :attr:`input` is a vector of size N, the result will also be
- a vector of size N, with elements.
- .. math::
- y_i = x_1 + x_2 + x_3 + \dots + x_i
- Args:
- input (Tensor): the input tensor.
- dim (int): the dimension to do the operation over
- Keyword args:
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor.
- If specified, the input tensor is casted to :attr:`dtype` before the operation
- is performed. This is useful for preventing data type overflows. Default: None.
- out (Tensor, optional): the output tensor.
- Example::
- >>> a = torch.randint(1, 20, (10,))
- >>> a
- tensor([13, 7, 3, 10, 13, 3, 15, 10, 9, 10])
- >>> torch.cumsum(a, dim=0)
- tensor([13, 20, 23, 33, 46, 49, 64, 74, 83, 93])
- """
- @overload
- def cumulative_trapezoid(y: Tensor, x: Tensor, *, dim: _int = -1) -> Tensor:
- r"""
- cumulative_trapezoid(y, x=None, *, dx=None, dim=-1) -> Tensor
- Cumulatively computes the `trapezoidal rule <https://en.wikipedia.org/wiki/Trapezoidal_rule>`_
- along :attr:`dim`. By default the spacing between elements is assumed to be 1, but
- :attr:`dx` can be used to specify a different constant spacing, and :attr:`x` can be
- used to specify arbitrary spacing along :attr:`dim`.
- For more details, please read :func:`torch.trapezoid`. The difference between :func:`torch.trapezoid`
- and this function is that, :func:`torch.trapezoid` returns a value for each integration,
- where as this function returns a cumulative value for every spacing within the integration. This
- is analogous to how `.sum` returns a value and `.cumsum` returns a cumulative sum.
- Arguments:
- y (Tensor): Values to use when computing the trapezoidal rule.
- x (Tensor): If specified, defines spacing between values as specified above.
- Keyword arguments:
- dx (float): constant spacing between values. If neither :attr:`x` or :attr:`dx`
- are specified then this defaults to 1. Effectively multiplies the result by its value.
- dim (int): The dimension along which to compute the trapezoidal rule.
- The last (inner-most) dimension by default.
- Examples::
- >>> # Cumulatively computes the trapezoidal rule in 1D, spacing is implicitly 1.
- >>> y = torch.tensor([1, 5, 10])
- >>> torch.cumulative_trapezoid(y)
- tensor([3., 10.5])
- >>> # Computes the same trapezoidal rule directly up to each element to verify
- >>> (1 + 5) / 2
- 3.0
- >>> (1 + 10 + 10) / 2
- 10.5
- >>> # Cumulatively computes the trapezoidal rule in 1D with constant spacing of 2
- >>> # NOTE: the result is the same as before, but multiplied by 2
- >>> torch.cumulative_trapezoid(y, dx=2)
- tensor([6., 21.])
- >>> # Cumulatively computes the trapezoidal rule in 1D with arbitrary spacing
- >>> x = torch.tensor([1, 3, 6])
- >>> torch.cumulative_trapezoid(y, x)
- tensor([6., 28.5])
- >>> # Computes the same trapezoidal rule directly up to each element to verify
- >>> ((3 - 1) * (1 + 5)) / 2
- 6.0
- >>> ((3 - 1) * (1 + 5) + (6 - 3) * (5 + 10)) / 2
- 28.5
- >>> # Cumulatively computes the trapezoidal rule for each row of a 3x3 matrix
- >>> y = torch.arange(9).reshape(3, 3)
- tensor([[0, 1, 2],
- [3, 4, 5],
- [6, 7, 8]])
- >>> torch.cumulative_trapezoid(y)
- tensor([[ 0.5, 2.],
- [ 3.5, 8.],
- [ 6.5, 14.]])
- >>> # Cumulatively computes the trapezoidal rule for each column of the matrix
- >>> torch.cumulative_trapezoid(y, dim=0)
- tensor([[ 1.5, 2.5, 3.5],
- [ 6.0, 8.0, 10.0]])
- >>> # Cumulatively computes the trapezoidal rule for each row of a 3x3 ones matrix
- >>> # with the same arbitrary spacing
- >>> y = torch.ones(3, 3)
- >>> x = torch.tensor([1, 3, 6])
- >>> torch.cumulative_trapezoid(y, x)
- tensor([[2., 5.],
- [2., 5.],
- [2., 5.]])
- >>> # Cumulatively computes the trapezoidal rule for each row of a 3x3 ones matrix
- >>> # with different arbitrary spacing per row
- >>> y = torch.ones(3, 3)
- >>> x = torch.tensor([[1, 2, 3], [1, 3, 5], [1, 4, 7]])
- >>> torch.cumulative_trapezoid(y, x)
- tensor([[1., 2.],
- [2., 4.],
- [3., 6.]])
- """
- @overload
- def cumulative_trapezoid(
- y: Tensor,
- *,
- dx: Number | _complex = 1,
- dim: _int = -1,
- ) -> Tensor:
- r"""
- cumulative_trapezoid(y, x=None, *, dx=None, dim=-1) -> Tensor
- Cumulatively computes the `trapezoidal rule <https://en.wikipedia.org/wiki/Trapezoidal_rule>`_
- along :attr:`dim`. By default the spacing between elements is assumed to be 1, but
- :attr:`dx` can be used to specify a different constant spacing, and :attr:`x` can be
- used to specify arbitrary spacing along :attr:`dim`.
- For more details, please read :func:`torch.trapezoid`. The difference between :func:`torch.trapezoid`
- and this function is that, :func:`torch.trapezoid` returns a value for each integration,
- where as this function returns a cumulative value for every spacing within the integration. This
- is analogous to how `.sum` returns a value and `.cumsum` returns a cumulative sum.
- Arguments:
- y (Tensor): Values to use when computing the trapezoidal rule.
- x (Tensor): If specified, defines spacing between values as specified above.
- Keyword arguments:
- dx (float): constant spacing between values. If neither :attr:`x` or :attr:`dx`
- are specified then this defaults to 1. Effectively multiplies the result by its value.
- dim (int): The dimension along which to compute the trapezoidal rule.
- The last (inner-most) dimension by default.
- Examples::
- >>> # Cumulatively computes the trapezoidal rule in 1D, spacing is implicitly 1.
- >>> y = torch.tensor([1, 5, 10])
- >>> torch.cumulative_trapezoid(y)
- tensor([3., 10.5])
- >>> # Computes the same trapezoidal rule directly up to each element to verify
- >>> (1 + 5) / 2
- 3.0
- >>> (1 + 10 + 10) / 2
- 10.5
- >>> # Cumulatively computes the trapezoidal rule in 1D with constant spacing of 2
- >>> # NOTE: the result is the same as before, but multiplied by 2
- >>> torch.cumulative_trapezoid(y, dx=2)
- tensor([6., 21.])
- >>> # Cumulatively computes the trapezoidal rule in 1D with arbitrary spacing
- >>> x = torch.tensor([1, 3, 6])
- >>> torch.cumulative_trapezoid(y, x)
- tensor([6., 28.5])
- >>> # Computes the same trapezoidal rule directly up to each element to verify
- >>> ((3 - 1) * (1 + 5)) / 2
- 6.0
- >>> ((3 - 1) * (1 + 5) + (6 - 3) * (5 + 10)) / 2
- 28.5
- >>> # Cumulatively computes the trapezoidal rule for each row of a 3x3 matrix
- >>> y = torch.arange(9).reshape(3, 3)
- tensor([[0, 1, 2],
- [3, 4, 5],
- [6, 7, 8]])
- >>> torch.cumulative_trapezoid(y)
- tensor([[ 0.5, 2.],
- [ 3.5, 8.],
- [ 6.5, 14.]])
- >>> # Cumulatively computes the trapezoidal rule for each column of the matrix
- >>> torch.cumulative_trapezoid(y, dim=0)
- tensor([[ 1.5, 2.5, 3.5],
- [ 6.0, 8.0, 10.0]])
- >>> # Cumulatively computes the trapezoidal rule for each row of a 3x3 ones matrix
- >>> # with the same arbitrary spacing
- >>> y = torch.ones(3, 3)
- >>> x = torch.tensor([1, 3, 6])
- >>> torch.cumulative_trapezoid(y, x)
- tensor([[2., 5.],
- [2., 5.],
- [2., 5.]])
- >>> # Cumulatively computes the trapezoidal rule for each row of a 3x3 ones matrix
- >>> # with different arbitrary spacing per row
- >>> y = torch.ones(3, 3)
- >>> x = torch.tensor([[1, 2, 3], [1, 3, 5], [1, 4, 7]])
- >>> torch.cumulative_trapezoid(y, x)
- tensor([[1., 2.],
- [2., 4.],
- [3., 6.]])
- """
- def deg2rad(input: Tensor, *, out: Tensor | None = None) -> Tensor:
- r"""
- deg2rad(input, *, out=None) -> Tensor
- Returns a new tensor with each of the elements of :attr:`input`
- converted from angles in degrees to radians.
- Args:
- input (Tensor): the input tensor.
- Keyword arguments:
- out (Tensor, optional): the output tensor.
- Example::
- >>> a = torch.tensor([[180.0, -180.0], [360.0, -360.0], [90.0, -90.0]])
- >>> torch.deg2rad(a)
- tensor([[ 3.1416, -3.1416],
- [ 6.2832, -6.2832],
- [ 1.5708, -1.5708]])
- """
- def deg2rad_(input: Tensor) -> Tensor: ...
- @overload
- def dequantize(input: Tensor) -> Tensor:
- r"""
- dequantize(tensor) -> Tensor
- Returns an fp32 Tensor by dequantizing a quantized Tensor
- Args:
- tensor (Tensor): A quantized Tensor
- .. function:: dequantize(tensors) -> sequence of Tensors
- :noindex:
- Given a list of quantized Tensors, dequantize them and return a list of fp32 Tensors
- Args:
- tensors (sequence of Tensors): A list of quantized Tensors
- """
- @overload
- def dequantize(
- tensors: tuple[Tensor, ...] | list[Tensor] | None,
- ) -> tuple[Tensor, ...]:
- r"""
- dequantize(tensor) -> Tensor
- Returns an fp32 Tensor by dequantizing a quantized Tensor
- Args:
- tensor (Tensor): A quantized Tensor
- .. function:: dequantize(tensors) -> sequence of Tensors
- :noindex:
- Given a list of quantized Tensors, dequantize them and return a list of fp32 Tensors
- Args:
- tensors (sequence of Tensors): A list of quantized Tensors
- """
- def det(input: Tensor) -> Tensor:
- r"""
- det(input) -> Tensor
- Alias for :func:`torch.linalg.det`
- """
- def detach(input: Tensor) -> Tensor: ...
- def detach_(input: Tensor) -> Tensor: ...
- def detach_copy(input: Tensor, *, out: Tensor | None = None) -> Tensor:
- r"""
- Performs the same operation as :func:`torch.detach`, but all output tensors
- are freshly created instead of aliasing the input.
- """
- def diag(
- input: Tensor,
- diagonal: _int = 0,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- diag(input, diagonal=0, *, out=None) -> Tensor
- - If :attr:`input` is a vector (1-D tensor), then returns a 2-D square tensor
- with the elements of :attr:`input` as the diagonal.
- - If :attr:`input` is a matrix (2-D tensor), then returns a 1-D tensor with
- the diagonal elements of :attr:`input`.
- The argument :attr:`diagonal` controls which diagonal to consider:
- - If :attr:`diagonal` = 0, it is the main diagonal.
- - If :attr:`diagonal` > 0, it is above the main diagonal.
- - If :attr:`diagonal` < 0, it is below the main diagonal.
- Args:
- input (Tensor): the input tensor.
- diagonal (int, optional): the diagonal to consider
- Keyword args:
- out (Tensor, optional): the output tensor.
- .. seealso::
- :func:`torch.diagonal` always returns the diagonal of its input.
- :func:`torch.diagflat` always constructs a tensor with diagonal elements
- specified by the input.
- Examples:
- Get the square matrix where the input vector is the diagonal::
- >>> a = torch.randn(3)
- >>> a
- tensor([ 0.5950,-0.0872, 2.3298])
- >>> torch.diag(a)
- tensor([[ 0.5950, 0.0000, 0.0000],
- [ 0.0000,-0.0872, 0.0000],
- [ 0.0000, 0.0000, 2.3298]])
- >>> torch.diag(a, 1)
- tensor([[ 0.0000, 0.5950, 0.0000, 0.0000],
- [ 0.0000, 0.0000,-0.0872, 0.0000],
- [ 0.0000, 0.0000, 0.0000, 2.3298],
- [ 0.0000, 0.0000, 0.0000, 0.0000]])
- Get the k-th diagonal of a given matrix::
- >>> a = torch.randn(3, 3)
- >>> a
- tensor([[-0.4264, 0.0255,-0.1064],
- [ 0.8795,-0.2429, 0.1374],
- [ 0.1029,-0.6482,-1.6300]])
- >>> torch.diag(a, 0)
- tensor([-0.4264,-0.2429,-1.6300])
- >>> torch.diag(a, 1)
- tensor([ 0.0255, 0.1374])
- """
- def diag_embed(
- input: Tensor,
- offset: _int = 0,
- dim1: _int = -2,
- dim2: _int = -1,
- ) -> Tensor:
- r"""
- diag_embed(input, offset=0, dim1=-2, dim2=-1) -> Tensor
- Creates a tensor whose diagonals of certain 2D planes (specified by
- :attr:`dim1` and :attr:`dim2`) are filled by :attr:`input`.
- To facilitate creating batched diagonal matrices, the 2D planes formed by
- the last two dimensions of the returned tensor are chosen by default.
- The argument :attr:`offset` controls which diagonal to consider:
- - If :attr:`offset` = 0, it is the main diagonal.
- - If :attr:`offset` > 0, it is above the main diagonal.
- - If :attr:`offset` < 0, it is below the main diagonal.
- The size of the new matrix will be calculated to make the specified diagonal
- of the size of the last input dimension.
- Note that for :attr:`offset` other than :math:`0`, the order of :attr:`dim1`
- and :attr:`dim2` matters. Exchanging them is equivalent to changing the
- sign of :attr:`offset`.
- Applying :meth:`torch.diagonal` to the output of this function with
- the same arguments yields a matrix identical to input. However,
- :meth:`torch.diagonal` has different default dimensions, so those
- need to be explicitly specified.
- Args:
- input (Tensor): the input tensor. Must be at least 1-dimensional.
- offset (int, optional): which diagonal to consider. Default: 0
- (main diagonal).
- dim1 (int, optional): first dimension with respect to which to
- take diagonal. Default: -2.
- dim2 (int, optional): second dimension with respect to which to
- take diagonal. Default: -1.
- Example::
- >>> a = torch.randn(2, 3)
- >>> torch.diag_embed(a)
- tensor([[[ 1.5410, 0.0000, 0.0000],
- [ 0.0000, -0.2934, 0.0000],
- [ 0.0000, 0.0000, -2.1788]],
- [[ 0.5684, 0.0000, 0.0000],
- [ 0.0000, -1.0845, 0.0000],
- [ 0.0000, 0.0000, -1.3986]]])
- >>> torch.diag_embed(a, offset=1, dim1=0, dim2=2)
- tensor([[[ 0.0000, 1.5410, 0.0000, 0.0000],
- [ 0.0000, 0.5684, 0.0000, 0.0000]],
- [[ 0.0000, 0.0000, -0.2934, 0.0000],
- [ 0.0000, 0.0000, -1.0845, 0.0000]],
- [[ 0.0000, 0.0000, 0.0000, -2.1788],
- [ 0.0000, 0.0000, 0.0000, -1.3986]],
- [[ 0.0000, 0.0000, 0.0000, 0.0000],
- [ 0.0000, 0.0000, 0.0000, 0.0000]]])
- """
- def diagflat(input: Tensor, offset: _int = 0) -> Tensor:
- r"""
- diagflat(input, offset=0) -> Tensor
- - If :attr:`input` is a vector (1-D tensor), then returns a 2-D square tensor
- with the elements of :attr:`input` as the diagonal.
- - If :attr:`input` is a tensor with more than one dimension, then returns a
- 2-D tensor with diagonal elements equal to a flattened :attr:`input`.
- The argument :attr:`offset` controls which diagonal to consider:
- - If :attr:`offset` = 0, it is the main diagonal.
- - If :attr:`offset` > 0, it is above the main diagonal.
- - If :attr:`offset` < 0, it is below the main diagonal.
- Args:
- input (Tensor): the input tensor.
- offset (int, optional): the diagonal to consider. Default: 0 (main
- diagonal).
- Examples::
- >>> a = torch.randn(3)
- >>> a
- tensor([-0.2956, -0.9068, 0.1695])
- >>> torch.diagflat(a)
- tensor([[-0.2956, 0.0000, 0.0000],
- [ 0.0000, -0.9068, 0.0000],
- [ 0.0000, 0.0000, 0.1695]])
- >>> torch.diagflat(a, 1)
- tensor([[ 0.0000, -0.2956, 0.0000, 0.0000],
- [ 0.0000, 0.0000, -0.9068, 0.0000],
- [ 0.0000, 0.0000, 0.0000, 0.1695],
- [ 0.0000, 0.0000, 0.0000, 0.0000]])
- >>> a = torch.randn(2, 2)
- >>> a
- tensor([[ 0.2094, -0.3018],
- [-0.1516, 1.9342]])
- >>> torch.diagflat(a)
- tensor([[ 0.2094, 0.0000, 0.0000, 0.0000],
- [ 0.0000, -0.3018, 0.0000, 0.0000],
- [ 0.0000, 0.0000, -0.1516, 0.0000],
- [ 0.0000, 0.0000, 0.0000, 1.9342]])
- """
- @overload
- def diagonal(
- input: Tensor,
- offset: _int = 0,
- dim1: _int = 0,
- dim2: _int = 1,
- ) -> Tensor:
- r"""
- diagonal(input, offset=0, dim1=0, dim2=1) -> Tensor
- Returns a partial view of :attr:`input` with the its diagonal elements
- with respect to :attr:`dim1` and :attr:`dim2` appended as a dimension
- at the end of the shape.
- The argument :attr:`offset` controls which diagonal to consider:
- - If :attr:`offset` = 0, it is the main diagonal.
- - If :attr:`offset` > 0, it is above the main diagonal.
- - If :attr:`offset` < 0, it is below the main diagonal.
- Applying :meth:`torch.diag_embed` to the output of this function with
- the same arguments yields a diagonal matrix with the diagonal entries
- of the input. However, :meth:`torch.diag_embed` has different default
- dimensions, so those need to be explicitly specified.
- Args:
- input (Tensor): the input tensor. Must be at least 2-dimensional.
- offset (int, optional): which diagonal to consider. Default: 0
- (main diagonal).
- dim1 (int, optional): first dimension with respect to which to
- take diagonal. Default: 0.
- dim2 (int, optional): second dimension with respect to which to
- take diagonal. Default: 1.
- .. note:: To take a batch diagonal, pass in dim1=-2, dim2=-1.
- Examples::
- >>> a = torch.randn(3, 3)
- >>> a
- tensor([[-1.0854, 1.1431, -0.1752],
- [ 0.8536, -0.0905, 0.0360],
- [ 0.6927, -0.3735, -0.4945]])
- >>> torch.diagonal(a)
- tensor([-1.0854, -0.0905, -0.4945])
- >>> torch.diagonal(a, 1)
- tensor([ 1.1431, 0.0360])
- >>> b = torch.randn(2, 5)
- >>> b
- tensor([[-1.7948, -1.2731, -0.3181, 2.0200, -1.6745],
- [ 1.8262, -1.5049, 0.4114, 1.0704, -1.2607]])
- >>> torch.diagonal(b, 1, 1, 0)
- tensor([1.8262])
- >>> x = torch.randn(2, 5, 4, 2)
- >>> torch.diagonal(x, offset=-1, dim1=1, dim2=2)
- tensor([[[-1.2631, 0.3755, -1.5977, -1.8172],
- [-1.1065, 1.0401, -0.2235, -0.7938]],
- [[-1.7325, -0.3081, 0.6166, 0.2335],
- [ 1.0500, 0.7336, -0.3836, -1.1015]]])
- """
- @overload
- def diagonal(
- input: Tensor,
- *,
- outdim: str | EllipsisType | None,
- dim1: str | EllipsisType | None,
- dim2: str | EllipsisType | None,
- offset: _int = 0,
- ) -> Tensor:
- r"""
- diagonal(input, offset=0, dim1=0, dim2=1) -> Tensor
- Returns a partial view of :attr:`input` with the its diagonal elements
- with respect to :attr:`dim1` and :attr:`dim2` appended as a dimension
- at the end of the shape.
- The argument :attr:`offset` controls which diagonal to consider:
- - If :attr:`offset` = 0, it is the main diagonal.
- - If :attr:`offset` > 0, it is above the main diagonal.
- - If :attr:`offset` < 0, it is below the main diagonal.
- Applying :meth:`torch.diag_embed` to the output of this function with
- the same arguments yields a diagonal matrix with the diagonal entries
- of the input. However, :meth:`torch.diag_embed` has different default
- dimensions, so those need to be explicitly specified.
- Args:
- input (Tensor): the input tensor. Must be at least 2-dimensional.
- offset (int, optional): which diagonal to consider. Default: 0
- (main diagonal).
- dim1 (int, optional): first dimension with respect to which to
- take diagonal. Default: 0.
- dim2 (int, optional): second dimension with respect to which to
- take diagonal. Default: 1.
- .. note:: To take a batch diagonal, pass in dim1=-2, dim2=-1.
- Examples::
- >>> a = torch.randn(3, 3)
- >>> a
- tensor([[-1.0854, 1.1431, -0.1752],
- [ 0.8536, -0.0905, 0.0360],
- [ 0.6927, -0.3735, -0.4945]])
- >>> torch.diagonal(a)
- tensor([-1.0854, -0.0905, -0.4945])
- >>> torch.diagonal(a, 1)
- tensor([ 1.1431, 0.0360])
- >>> b = torch.randn(2, 5)
- >>> b
- tensor([[-1.7948, -1.2731, -0.3181, 2.0200, -1.6745],
- [ 1.8262, -1.5049, 0.4114, 1.0704, -1.2607]])
- >>> torch.diagonal(b, 1, 1, 0)
- tensor([1.8262])
- >>> x = torch.randn(2, 5, 4, 2)
- >>> torch.diagonal(x, offset=-1, dim1=1, dim2=2)
- tensor([[[-1.2631, 0.3755, -1.5977, -1.8172],
- [-1.1065, 1.0401, -0.2235, -0.7938]],
- [[-1.7325, -0.3081, 0.6166, 0.2335],
- [ 1.0500, 0.7336, -0.3836, -1.1015]]])
- """
- def diagonal_copy(
- input: Tensor,
- offset: _int = 0,
- dim1: _int = 0,
- dim2: _int = 1,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- Performs the same operation as :func:`torch.diagonal`, but all output tensors
- are freshly created instead of aliasing the input.
- """
- def diagonal_scatter(
- input: Tensor,
- src: Tensor,
- offset: _int = 0,
- dim1: _int = 0,
- dim2: _int = 1,
- ) -> Tensor:
- r"""
- diagonal_scatter(input, src, offset=0, dim1=0, dim2=1) -> Tensor
- Embeds the values of the :attr:`src` tensor into :attr:`input` along
- the diagonal elements of :attr:`input`, with respect to :attr:`dim1`
- and :attr:`dim2`.
- This function returns a tensor with fresh storage; it does not
- return a view.
- The argument :attr:`offset` controls which diagonal to consider:
- - If :attr:`offset` = 0, it is the main diagonal.
- - If :attr:`offset` > 0, it is above the main diagonal.
- - If :attr:`offset` < 0, it is below the main diagonal.
- Args:
- input (Tensor): the input tensor. Must be at least 2-dimensional.
- src (Tensor): the tensor to embed into :attr:`input`.
- offset (int, optional): which diagonal to consider. Default: 0
- (main diagonal).
- dim1 (int, optional): first dimension with respect to which to
- take diagonal. Default: 0.
- dim2 (int, optional): second dimension with respect to which to
- take diagonal. Default: 1.
- .. note::
- :attr:`src` must be of the proper size in order to be embedded
- into :attr:`input`. Specifically, it should have the same shape as
- ``torch.diagonal(input, offset, dim1, dim2)``
- Examples::
- >>> a = torch.zeros(3, 3)
- >>> a
- tensor([[0., 0., 0.],
- [0., 0., 0.],
- [0., 0., 0.]])
- >>> torch.diagonal_scatter(a, torch.ones(3), 0)
- tensor([[1., 0., 0.],
- [0., 1., 0.],
- [0., 0., 1.]])
- >>> torch.diagonal_scatter(a, torch.ones(2), 1)
- tensor([[0., 1., 0.],
- [0., 0., 1.],
- [0., 0., 0.]])
- """
- def diff(
- input: Tensor,
- n: _int = 1,
- dim: _int = -1,
- prepend: Tensor | None = None,
- append: Tensor | None = None,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- diff(input, n=1, dim=-1, prepend=None, append=None) -> Tensor
- Computes the n-th forward difference along the given dimension.
- The first-order differences are given by `out[i] = input[i + 1] - input[i]`. Higher-order
- differences are calculated by using :func:`torch.diff` recursively.
- Args:
- input (Tensor): the tensor to compute the differences on
- n (int, optional): the number of times to recursively compute the difference
- dim (int, optional): the dimension to compute the difference along.
- Default is the last dimension.
- prepend, append (Tensor, optional): values to prepend or append to
- :attr:`input` along :attr:`dim` before computing the difference.
- Their dimensions must be equivalent to that of input, and their shapes
- must match input's shape except on :attr:`dim`.
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> a = torch.tensor([1, 3, 2])
- >>> torch.diff(a)
- tensor([ 2, -1])
- >>> b = torch.tensor([4, 5])
- >>> torch.diff(a, append=b)
- tensor([ 2, -1, 2, 1])
- >>> c = torch.tensor([[1, 2, 3], [3, 4, 5]])
- >>> torch.diff(c, dim=0)
- tensor([[2, 2, 2]])
- >>> torch.diff(c, dim=1)
- tensor([[1, 1],
- [1, 1]])
- """
- def digamma(input: Tensor, *, out: Tensor | None = None) -> Tensor:
- r"""
- digamma(input, *, out=None) -> Tensor
- Alias for :func:`torch.special.digamma`.
- """
- def dist(input: Tensor, other: Tensor, p: Number | _complex = 2) -> Tensor:
- r"""
- dist(input, other, p=2) -> Tensor
- Returns the p-norm of (:attr:`input` - :attr:`other`)
- The shapes of :attr:`input` and :attr:`other` must be
- :ref:`broadcastable <broadcasting-semantics>`.
- Args:
- input (Tensor): the input tensor.
- other (Tensor): the Right-hand-side input tensor
- p (float, optional): the norm to be computed
- Example::
- >>> x = torch.randn(4)
- >>> x
- tensor([-1.5393, -0.8675, 0.5916, 1.6321])
- >>> y = torch.randn(4)
- >>> y
- tensor([ 0.0967, -1.0511, 0.6295, 0.8360])
- >>> torch.dist(x, y, 3.5)
- tensor(1.6727)
- >>> torch.dist(x, y, 3)
- tensor(1.6973)
- >>> torch.dist(x, y, 0)
- tensor(4.)
- >>> torch.dist(x, y, 1)
- tensor(2.6537)
- """
- def div(
- input: Tensor | Number,
- other: Tensor | Number,
- *,
- rounding_mode: str | None = None,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- div(input, other, *, rounding_mode=None, out=None) -> Tensor
- Divides each element of the input ``input`` by the corresponding element of
- :attr:`other`.
- .. math::
- \text{out}_i = \frac{\text{input}_i}{\text{other}_i}
- .. note::
- By default, this performs a "true" division like Python 3.
- See the :attr:`rounding_mode` argument for floor division.
- Supports :ref:`broadcasting to a common shape <broadcasting-semantics>`,
- :ref:`type promotion <type-promotion-doc>`, and integer, float, and complex inputs.
- Always promotes integer types to the default scalar type.
- Args:
- input (Tensor): the dividend
- other (Tensor or Number): the divisor
- Keyword args:
- rounding_mode (str, optional): Type of rounding applied to the result:
- * None - default behavior. Performs no rounding and, if both :attr:`input` and
- :attr:`other` are integer types, promotes the inputs to the default scalar type.
- Equivalent to true division in Python (the ``/`` operator) and NumPy's ``np.true_divide``.
- * ``"trunc"`` - rounds the results of the division towards zero.
- Equivalent to C-style integer division.
- * ``"floor"`` - rounds the results of the division down.
- Equivalent to floor division in Python (the ``//`` operator) and NumPy's ``np.floor_divide``.
- out (Tensor, optional): the output tensor.
- Examples::
- >>> x = torch.tensor([ 0.3810, 1.2774, -0.2972, -0.3719, 0.4637])
- >>> torch.div(x, 0.5)
- tensor([ 0.7620, 2.5548, -0.5944, -0.7438, 0.9274])
- >>> a = torch.tensor([[-0.3711, -1.9353, -0.4605, -0.2917],
- ... [ 0.1815, -1.0111, 0.9805, -1.5923],
- ... [ 0.1062, 1.4581, 0.7759, -1.2344],
- ... [-0.1830, -0.0313, 1.1908, -1.4757]])
- >>> b = torch.tensor([ 0.8032, 0.2930, -0.8113, -0.2308])
- >>> torch.div(a, b)
- tensor([[-0.4620, -6.6051, 0.5676, 1.2639],
- [ 0.2260, -3.4509, -1.2086, 6.8990],
- [ 0.1322, 4.9764, -0.9564, 5.3484],
- [-0.2278, -0.1068, -1.4678, 6.3938]])
- >>> torch.div(a, b, rounding_mode='trunc')
- tensor([[-0., -6., 0., 1.],
- [ 0., -3., -1., 6.],
- [ 0., 4., -0., 5.],
- [-0., -0., -1., 6.]])
- >>> torch.div(a, b, rounding_mode='floor')
- tensor([[-1., -7., 0., 1.],
- [ 0., -4., -2., 6.],
- [ 0., 4., -1., 5.],
- [-1., -1., -2., 6.]])
- """
- @overload
- def divide(
- input: Tensor,
- other: Tensor,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- divide(input, other, *, rounding_mode=None, out=None) -> Tensor
- Alias for :func:`torch.div`.
- """
- @overload
- def divide(
- input: Tensor,
- other: Tensor,
- *,
- rounding_mode: str | None,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- divide(input, other, *, rounding_mode=None, out=None) -> Tensor
- Alias for :func:`torch.div`.
- """
- @overload
- def divide(
- input: Tensor,
- other: Number | _complex,
- *,
- rounding_mode: str | None,
- ) -> Tensor:
- r"""
- divide(input, other, *, rounding_mode=None, out=None) -> Tensor
- Alias for :func:`torch.div`.
- """
- @overload
- def divide(input: Tensor, other: Number | _complex) -> Tensor:
- r"""
- divide(input, other, *, rounding_mode=None, out=None) -> Tensor
- Alias for :func:`torch.div`.
- """
- def dot(
- input: Tensor,
- tensor: Tensor,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- dot(input, tensor, *, out=None) -> Tensor
- Computes the dot product of two 1D tensors.
- .. note::
- Unlike NumPy's dot, torch.dot intentionally only supports computing the dot product
- of two 1D tensors with the same number of elements.
- Args:
- input (Tensor): first tensor in the dot product, must be 1D.
- tensor (Tensor): second tensor in the dot product, must be 1D.
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> torch.dot(torch.tensor([2, 3]), torch.tensor([2, 1]))
- tensor(7)
- >>> t1, t2 = torch.tensor([0, 1]), torch.tensor([2, 3])
- >>> torch.dot(t1, t2)
- tensor(3)
- """
- def dropout(input: Tensor, p: _float, train: _bool) -> Tensor: ...
- def dropout_(input: Tensor, p: _float, train: _bool) -> Tensor: ...
- def dsmm(input: Tensor, mat2: Tensor) -> Tensor: ...
- @overload
- def dsplit(input: Tensor, sections: _int) -> tuple[Tensor, ...]:
- r"""
- dsplit(input, indices_or_sections) -> List of Tensors
- Splits :attr:`input`, a tensor with three or more dimensions, into multiple tensors
- depthwise according to :attr:`indices_or_sections`. Each split is a view of
- :attr:`input`.
- This is equivalent to calling torch.tensor_split(input, indices_or_sections, dim=2)
- (the split dimension is 2), except that if :attr:`indices_or_sections` is an integer
- it must evenly divide the split dimension or a runtime error will be thrown.
- This function is based on NumPy's :func:`numpy.dsplit`.
- Args:
- input (Tensor): tensor to split.
- indices_or_sections (int or list or tuple of ints): See argument in :func:`torch.tensor_split`.
- Example::
- >>> t = torch.arange(16.0).reshape(2, 2, 4)
- >>> t
- tensor([[[ 0., 1., 2., 3.],
- [ 4., 5., 6., 7.]],
- [[ 8., 9., 10., 11.],
- [12., 13., 14., 15.]]])
- >>> torch.dsplit(t, 2)
- (tensor([[[ 0., 1.],
- [ 4., 5.]],
- [[ 8., 9.],
- [12., 13.]]]),
- tensor([[[ 2., 3.],
- [ 6., 7.]],
- [[10., 11.],
- [14., 15.]]]))
- >>> torch.dsplit(t, [3, 6])
- (tensor([[[ 0., 1., 2.],
- [ 4., 5., 6.]],
- [[ 8., 9., 10.],
- [12., 13., 14.]]]),
- tensor([[[ 3.],
- [ 7.]],
- [[11.],
- [15.]]]),
- tensor([], size=(2, 2, 0)))
- """
- @overload
- def dsplit(input: Tensor, indices: _size) -> tuple[Tensor, ...]:
- r"""
- dsplit(input, indices_or_sections) -> List of Tensors
- Splits :attr:`input`, a tensor with three or more dimensions, into multiple tensors
- depthwise according to :attr:`indices_or_sections`. Each split is a view of
- :attr:`input`.
- This is equivalent to calling torch.tensor_split(input, indices_or_sections, dim=2)
- (the split dimension is 2), except that if :attr:`indices_or_sections` is an integer
- it must evenly divide the split dimension or a runtime error will be thrown.
- This function is based on NumPy's :func:`numpy.dsplit`.
- Args:
- input (Tensor): tensor to split.
- indices_or_sections (int or list or tuple of ints): See argument in :func:`torch.tensor_split`.
- Example::
- >>> t = torch.arange(16.0).reshape(2, 2, 4)
- >>> t
- tensor([[[ 0., 1., 2., 3.],
- [ 4., 5., 6., 7.]],
- [[ 8., 9., 10., 11.],
- [12., 13., 14., 15.]]])
- >>> torch.dsplit(t, 2)
- (tensor([[[ 0., 1.],
- [ 4., 5.]],
- [[ 8., 9.],
- [12., 13.]]]),
- tensor([[[ 2., 3.],
- [ 6., 7.]],
- [[10., 11.],
- [14., 15.]]]))
- >>> torch.dsplit(t, [3, 6])
- (tensor([[[ 0., 1., 2.],
- [ 4., 5., 6.]],
- [[ 8., 9., 10.],
- [12., 13., 14.]]]),
- tensor([[[ 3.],
- [ 7.]],
- [[11.],
- [15.]]]),
- tensor([], size=(2, 2, 0)))
- """
- def dstack(
- tensors: tuple[Tensor, ...] | list[Tensor] | None,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- dstack(tensors, *, out=None) -> Tensor
- Stack tensors in sequence depthwise (along third axis).
- This is equivalent to concatenation along the third axis after 1-D and 2-D tensors have been reshaped by :func:`torch.atleast_3d`.
- Args:
- tensors (sequence of Tensors): sequence of tensors to concatenate
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> a = torch.tensor([1, 2, 3])
- >>> b = torch.tensor([4, 5, 6])
- >>> torch.dstack((a,b))
- tensor([[[1, 4],
- [2, 5],
- [3, 6]]])
- >>> a = torch.tensor([[1],[2],[3]])
- >>> b = torch.tensor([[4],[5],[6]])
- >>> torch.dstack((a,b))
- tensor([[[1, 4]],
- [[2, 5]],
- [[3, 6]]])
- """
- def embedding(
- weight: Tensor,
- indices: Tensor,
- padding_idx: _int | SymInt = -1,
- scale_grad_by_freq: _bool = False,
- sparse: _bool = False,
- ) -> Tensor: ...
- @overload
- def embedding_bag(
- weight: Tensor,
- indices: Tensor,
- offsets: Tensor,
- scale_grad_by_freq: _bool,
- mode: _int,
- sparse: _bool,
- per_sample_weights: Tensor | None,
- include_last_offset: _bool,
- padding_idx: _int | None,
- ) -> tuple[Tensor, Tensor, Tensor, Tensor]: ...
- @overload
- def embedding_bag(
- weight: Tensor,
- indices: Tensor,
- offsets: Tensor,
- scale_grad_by_freq: _bool = False,
- mode: _int = 0,
- sparse: _bool = False,
- per_sample_weights: Tensor | None = None,
- include_last_offset: _bool = False,
- ) -> tuple[Tensor, Tensor, Tensor, Tensor]: ...
- def embedding_renorm_(
- input: Tensor,
- indices: Tensor,
- max_norm: _float,
- norm_type: _float,
- ) -> Tensor: ...
- @overload
- def empty(
- size: Sequence[_int | SymInt],
- *,
- memory_format: memory_format | None = None,
- out: Tensor | None = None,
- dtype: _dtype | None = None,
- layout: _layout | None = None,
- device: DeviceLikeType | None = None,
- pin_memory: _bool | None = False,
- requires_grad: _bool | None = False,
- ) -> Tensor:
- r"""
- empty(*size, *, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False, pin_memory=False, memory_format=torch.contiguous_format) -> Tensor
- Returns a tensor filled with uninitialized data. The shape of the tensor is
- defined by the variable argument :attr:`size`.
- .. note::
- If :func:`torch.use_deterministic_algorithms()` and
- :attr:`torch.utils.deterministic.fill_uninitialized_memory` are both set to
- ``True``, the output tensor is initialized to prevent any possible
- nondeterministic behavior from using the data as an input to an operation.
- Floating point and complex tensors are filled with NaN, and integer tensors
- are filled with the maximum value.
- Args:
- size (int...): a sequence of integers defining the shape of the output tensor.
- Can be a variable number of arguments or a collection like a list or tuple.
- Keyword args:
- out (Tensor, optional): the output tensor.
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor.
- Default: if ``None``, uses a global default (see :func:`torch.set_default_dtype`).
- layout (:class:`torch.layout`, optional): the desired layout of returned Tensor.
- Default: ``torch.strided``.
- device (:class:`torch.device`, optional): the desired device of returned tensor.
- Default: if ``None``, uses the current device for the default tensor type
- (see :func:`torch.set_default_device`). :attr:`device` will be the CPU
- for CPU tensor types and the current CUDA device for CUDA tensor types.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- pin_memory (bool, optional): If set, returned tensor would be allocated in
- the pinned memory. Works only for CPU tensors. Default: ``False``.
- memory_format (:class:`torch.memory_format`, optional): the desired memory format of
- returned Tensor. Default: ``torch.contiguous_format``.
- Example::
- >>> torch.empty((2,3), dtype=torch.int64)
- tensor([[ 9.4064e+13, 2.8000e+01, 9.3493e+13],
- [ 7.5751e+18, 7.1428e+18, 7.5955e+18]])
- """
- @overload
- def empty(
- *size: _int | SymInt,
- memory_format: memory_format | None = None,
- out: Tensor | None = None,
- dtype: _dtype | None = None,
- layout: _layout | None = None,
- device: DeviceLikeType | None = None,
- pin_memory: _bool | None = False,
- requires_grad: _bool | None = False,
- ) -> Tensor:
- r"""
- empty(*size, *, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False, pin_memory=False, memory_format=torch.contiguous_format) -> Tensor
- Returns a tensor filled with uninitialized data. The shape of the tensor is
- defined by the variable argument :attr:`size`.
- .. note::
- If :func:`torch.use_deterministic_algorithms()` and
- :attr:`torch.utils.deterministic.fill_uninitialized_memory` are both set to
- ``True``, the output tensor is initialized to prevent any possible
- nondeterministic behavior from using the data as an input to an operation.
- Floating point and complex tensors are filled with NaN, and integer tensors
- are filled with the maximum value.
- Args:
- size (int...): a sequence of integers defining the shape of the output tensor.
- Can be a variable number of arguments or a collection like a list or tuple.
- Keyword args:
- out (Tensor, optional): the output tensor.
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor.
- Default: if ``None``, uses a global default (see :func:`torch.set_default_dtype`).
- layout (:class:`torch.layout`, optional): the desired layout of returned Tensor.
- Default: ``torch.strided``.
- device (:class:`torch.device`, optional): the desired device of returned tensor.
- Default: if ``None``, uses the current device for the default tensor type
- (see :func:`torch.set_default_device`). :attr:`device` will be the CPU
- for CPU tensor types and the current CUDA device for CUDA tensor types.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- pin_memory (bool, optional): If set, returned tensor would be allocated in
- the pinned memory. Works only for CPU tensors. Default: ``False``.
- memory_format (:class:`torch.memory_format`, optional): the desired memory format of
- returned Tensor. Default: ``torch.contiguous_format``.
- Example::
- >>> torch.empty((2,3), dtype=torch.int64)
- tensor([[ 9.4064e+13, 2.8000e+01, 9.3493e+13],
- [ 7.5751e+18, 7.1428e+18, 7.5955e+18]])
- """
- @overload
- def empty(
- size: _size,
- *,
- names: Sequence[str | EllipsisType | None] | None,
- memory_format: memory_format | None = None,
- dtype: _dtype | None = None,
- layout: _layout | None = None,
- device: DeviceLikeType | None = None,
- pin_memory: _bool | None = False,
- requires_grad: _bool | None = False,
- ) -> Tensor:
- r"""
- empty(*size, *, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False, pin_memory=False, memory_format=torch.contiguous_format) -> Tensor
- Returns a tensor filled with uninitialized data. The shape of the tensor is
- defined by the variable argument :attr:`size`.
- .. note::
- If :func:`torch.use_deterministic_algorithms()` and
- :attr:`torch.utils.deterministic.fill_uninitialized_memory` are both set to
- ``True``, the output tensor is initialized to prevent any possible
- nondeterministic behavior from using the data as an input to an operation.
- Floating point and complex tensors are filled with NaN, and integer tensors
- are filled with the maximum value.
- Args:
- size (int...): a sequence of integers defining the shape of the output tensor.
- Can be a variable number of arguments or a collection like a list or tuple.
- Keyword args:
- out (Tensor, optional): the output tensor.
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor.
- Default: if ``None``, uses a global default (see :func:`torch.set_default_dtype`).
- layout (:class:`torch.layout`, optional): the desired layout of returned Tensor.
- Default: ``torch.strided``.
- device (:class:`torch.device`, optional): the desired device of returned tensor.
- Default: if ``None``, uses the current device for the default tensor type
- (see :func:`torch.set_default_device`). :attr:`device` will be the CPU
- for CPU tensor types and the current CUDA device for CUDA tensor types.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- pin_memory (bool, optional): If set, returned tensor would be allocated in
- the pinned memory. Works only for CPU tensors. Default: ``False``.
- memory_format (:class:`torch.memory_format`, optional): the desired memory format of
- returned Tensor. Default: ``torch.contiguous_format``.
- Example::
- >>> torch.empty((2,3), dtype=torch.int64)
- tensor([[ 9.4064e+13, 2.8000e+01, 9.3493e+13],
- [ 7.5751e+18, 7.1428e+18, 7.5955e+18]])
- """
- @overload
- def empty(
- *size: _int,
- names: Sequence[str | EllipsisType | None] | None,
- memory_format: memory_format | None = None,
- dtype: _dtype | None = None,
- layout: _layout | None = None,
- device: DeviceLikeType | None = None,
- pin_memory: _bool | None = False,
- requires_grad: _bool | None = False,
- ) -> Tensor:
- r"""
- empty(*size, *, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False, pin_memory=False, memory_format=torch.contiguous_format) -> Tensor
- Returns a tensor filled with uninitialized data. The shape of the tensor is
- defined by the variable argument :attr:`size`.
- .. note::
- If :func:`torch.use_deterministic_algorithms()` and
- :attr:`torch.utils.deterministic.fill_uninitialized_memory` are both set to
- ``True``, the output tensor is initialized to prevent any possible
- nondeterministic behavior from using the data as an input to an operation.
- Floating point and complex tensors are filled with NaN, and integer tensors
- are filled with the maximum value.
- Args:
- size (int...): a sequence of integers defining the shape of the output tensor.
- Can be a variable number of arguments or a collection like a list or tuple.
- Keyword args:
- out (Tensor, optional): the output tensor.
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor.
- Default: if ``None``, uses a global default (see :func:`torch.set_default_dtype`).
- layout (:class:`torch.layout`, optional): the desired layout of returned Tensor.
- Default: ``torch.strided``.
- device (:class:`torch.device`, optional): the desired device of returned tensor.
- Default: if ``None``, uses the current device for the default tensor type
- (see :func:`torch.set_default_device`). :attr:`device` will be the CPU
- for CPU tensor types and the current CUDA device for CUDA tensor types.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- pin_memory (bool, optional): If set, returned tensor would be allocated in
- the pinned memory. Works only for CPU tensors. Default: ``False``.
- memory_format (:class:`torch.memory_format`, optional): the desired memory format of
- returned Tensor. Default: ``torch.contiguous_format``.
- Example::
- >>> torch.empty((2,3), dtype=torch.int64)
- tensor([[ 9.4064e+13, 2.8000e+01, 9.3493e+13],
- [ 7.5751e+18, 7.1428e+18, 7.5955e+18]])
- """
- def empty_like(
- input: Tensor,
- *,
- memory_format: memory_format | None = None,
- dtype: _dtype | None = None,
- layout: _layout | None = None,
- device: DeviceLikeType | None = None,
- pin_memory: _bool | None = False,
- requires_grad: _bool | None = False,
- ) -> Tensor:
- r"""
- empty_like(input, *, dtype=None, layout=None, device=None, requires_grad=False, memory_format=torch.preserve_format) -> Tensor
- Returns an uninitialized tensor with the same size as :attr:`input`.
- ``torch.empty_like(input)`` is equivalent to
- ``torch.empty(input.size(), dtype=input.dtype, layout=input.layout, device=input.device)``.
- .. note::
- If :func:`torch.use_deterministic_algorithms()` and
- :attr:`torch.utils.deterministic.fill_uninitialized_memory` are both set to
- ``True``, the output tensor is initialized to prevent any possible
- nondeterministic behavior from using the data as an input to an operation.
- Floating point and complex tensors are filled with NaN, and integer tensors
- are filled with the maximum value.
- When ``torch.preserve_format`` is used:
- If the input tensor is dense (i.e., non-overlapping strided),
- its memory format (including strides) is retained.
- Otherwise (e.g., a non-dense view like a stepped slice),
- the output is converted to the dense format.
- Args:
- input (Tensor): the size of :attr:`input` will determine size of the output tensor.
- Keyword args:
- dtype (:class:`torch.dtype`, optional): the desired data type of returned Tensor.
- Default: if ``None``, defaults to the dtype of :attr:`input`.
- layout (:class:`torch.layout`, optional): the desired layout of returned tensor.
- Default: if ``None``, defaults to the layout of :attr:`input`.
- device (:class:`torch.device`, optional): the desired device of returned tensor.
- Default: if ``None``, defaults to the device of :attr:`input`.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- memory_format (:class:`torch.memory_format`, optional): the desired memory format of
- returned Tensor. Default: ``torch.preserve_format``.
- Example::
- >>> a=torch.empty((2,3), dtype=torch.int32, device = 'cuda')
- >>> torch.empty_like(a)
- tensor([[0, 0, 0],
- [0, 0, 0]], device='cuda:0', dtype=torch.int32)
- """
- def empty_permuted(
- size: Sequence[_int | SymInt],
- physical_layout: _size,
- *,
- dtype: _dtype | None = None,
- layout: _layout | None = None,
- device: DeviceLikeType | None = None,
- pin_memory: _bool | None = False,
- requires_grad: _bool | None = False,
- ) -> Tensor:
- r"""
- empty_permuted(size, physical_layout, *, dtype=None, layout=None, device=None, requires_grad=False, pin_memory=False) -> Tensor
- Creates an uninitialized, non-overlapping and dense tensor with the
- specified :attr:`size`, with :attr:`physical_layout` specifying how the
- dimensions are physically laid out in memory (each logical dimension is listed
- from outermost to innermost). :attr:`physical_layout` is a generalization
- of NCHW/NHWC notation: if each dimension is assigned a number according to
- what order they occur in size (N=0, C=1, H=2, W=3), then NCHW is ``(0, 1, 2, 3)``
- while NHWC is ``(0, 2, 3, 1)``. Equivalently, the strides of the output
- tensor ``t`` are such that ``t.stride(physical_layout[i]) == contiguous_strides[i]``
- (notably, this function is *not* equivalent to ``torch.empty(size).permute(physical_layout)``).
- Unlike :func:`torch.empty_strided`, this is guaranteed to produce a dense
- tensor with no overlaps. If possible, prefer using this function over
- :func:`torch.empty_strided` or manual use of :func:`torch.as_strided`.
- .. note::
- If :func:`torch.use_deterministic_algorithms()` and
- :attr:`torch.utils.deterministic.fill_uninitialized_memory` are both set to
- ``True``, the output tensor is initialized to prevent any possible
- nondeterministic behavior from using the data as an input to an operation.
- Floating point and complex tensors are filled with NaN, and integer tensors
- are filled with the maximum value.
- Args:
- size (tuple of int): the shape of the output tensor
- physical_layout (tuple of int): the ordering of dimensions physically in memory
- Keyword args:
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor.
- Default: if ``None``, uses a global default (see :func:`torch.set_default_dtype`).
- layout (:class:`torch.layout`, optional): the desired layout of returned Tensor.
- Default: ``torch.strided``.
- device (:class:`torch.device`, optional): the desired device of returned tensor.
- Default: if ``None``, uses the current device for the default tensor type
- (see :func:`torch.set_default_device`). :attr:`device` will be the CPU
- for CPU tensor types and the current CUDA device for CUDA tensor types.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- pin_memory (bool, optional): If set, returned tensor would be allocated in
- the pinned memory. Works only for CPU tensors. Default: ``False``.
- Examples:
- >>> torch.empty((2, 3, 5, 7)).stride()
- (105, 35, 7, 1)
- >>> torch.empty_permuted((2, 3, 5, 7), (0, 1, 2, 3)).stride()
- (105, 35, 7, 1)
- >>> torch.empty((2, 3, 5, 7), memory_format=torch.channels_last).stride()
- (105, 1, 21, 3)
- >>> torch.empty_permuted((2, 3, 5, 7), (0, 2, 3, 1)).stride()
- (105, 1, 21, 3)
- >>> torch.empty_permuted((2, 3, 5, 7), (0, 2, 3, 1)).dim_order()
- (0, 2, 3, 1)
- """
- def empty_quantized(
- size: _size,
- qtensor: Tensor,
- *,
- memory_format: memory_format | None = None,
- dtype: _dtype | None = None,
- layout: _layout | None = None,
- device: DeviceLikeType | None = None,
- pin_memory: _bool | None = False,
- requires_grad: _bool | None = False,
- ) -> Tensor: ...
- def empty_strided(
- size: Sequence[_int | SymInt],
- stride: Sequence[_int | SymInt],
- *,
- dtype: _dtype | None = None,
- layout: _layout | None = None,
- device: DeviceLikeType | None = None,
- pin_memory: _bool | None = False,
- requires_grad: _bool | None = False,
- ) -> Tensor:
- r"""
- empty_strided(size, stride, *, dtype=None, layout=None, device=None, requires_grad=False, pin_memory=False) -> Tensor
- Creates a tensor with the specified :attr:`size` and :attr:`stride` and filled with undefined data.
- .. warning::
- If the constructed tensor is "overlapped" (with multiple indices referring to the same element
- in memory) its behavior is undefined.
- .. note::
- If :func:`torch.use_deterministic_algorithms()` and
- :attr:`torch.utils.deterministic.fill_uninitialized_memory` are both set to
- ``True``, the output tensor is initialized to prevent any possible
- nondeterministic behavior from using the data as an input to an operation.
- Floating point and complex tensors are filled with NaN, and integer tensors
- are filled with the maximum value.
- Args:
- size (tuple of int): the shape of the output tensor
- stride (tuple of int): the strides of the output tensor
- Keyword args:
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor.
- Default: if ``None``, uses a global default (see :func:`torch.set_default_dtype`).
- layout (:class:`torch.layout`, optional): the desired layout of returned Tensor.
- Default: ``torch.strided``.
- device (:class:`torch.device`, optional): the desired device of returned tensor.
- Default: if ``None``, uses the current device for the default tensor type
- (see :func:`torch.set_default_device`). :attr:`device` will be the CPU
- for CPU tensor types and the current CUDA device for CUDA tensor types.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- pin_memory (bool, optional): If set, returned tensor would be allocated in
- the pinned memory. Works only for CPU tensors. Default: ``False``.
- Example::
- >>> a = torch.empty_strided((2, 3), (1, 2))
- >>> a
- tensor([[8.9683e-44, 4.4842e-44, 5.1239e+07],
- [0.0000e+00, 0.0000e+00, 3.0705e-41]])
- >>> a.stride()
- (1, 2)
- >>> a.size()
- torch.Size([2, 3])
- """
- @overload
- def eq(
- input: Tensor,
- other: Tensor,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- eq(input, other, *, out=None) -> Tensor
- Computes element-wise equality
- The second argument can be a number or a tensor whose shape is
- :ref:`broadcastable <broadcasting-semantics>` with the first argument.
- Args:
- input (Tensor): the tensor to compare
- other (Tensor or float): the tensor or value to compare
- Keyword args:
- out (Tensor, optional): the output tensor.
- Returns:
- A boolean tensor that is True where :attr:`input` is equal to :attr:`other` and False elsewhere
- Example::
- >>> torch.eq(torch.tensor([[1, 2], [3, 4]]), torch.tensor([[1, 1], [4, 4]]))
- tensor([[ True, False],
- [False, True]])
- """
- @overload
- def eq(
- input: Tensor,
- other: Number | _complex,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- eq(input, other, *, out=None) -> Tensor
- Computes element-wise equality
- The second argument can be a number or a tensor whose shape is
- :ref:`broadcastable <broadcasting-semantics>` with the first argument.
- Args:
- input (Tensor): the tensor to compare
- other (Tensor or float): the tensor or value to compare
- Keyword args:
- out (Tensor, optional): the output tensor.
- Returns:
- A boolean tensor that is True where :attr:`input` is equal to :attr:`other` and False elsewhere
- Example::
- >>> torch.eq(torch.tensor([[1, 2], [3, 4]]), torch.tensor([[1, 1], [4, 4]]))
- tensor([[ True, False],
- [False, True]])
- """
- def equal(input: Tensor, other: Tensor) -> _bool:
- r"""
- equal(input, other) -> bool
- ``True`` if two tensors have the same size and elements, ``False`` otherwise.
- .. note::
- Tensors containing NaNs are never equal to each other. Additionally, this function does not
- differentiate between the data types of the tensors during comparison. For more thorough tensor checks,
- use :meth:`torch.testing.assert_close`.
- Example::
- >>> torch.equal(torch.tensor([1, 2]), torch.tensor([1, 2]))
- True
- >>> torch.equal(torch.tensor([3, torch.nan]), torch.tensor([3, torch.nan]))
- False
- >>> torch.equal(torch.tensor([1, 2, 3], dtype=torch.int32), torch.tensor([1, 2, 3], dtype=torch.float32))
- True
- """
- def erf(input: Tensor, *, out: Tensor | None = None) -> Tensor:
- r"""
- erf(input, *, out=None) -> Tensor
- Alias for :func:`torch.special.erf`.
- """
- def erf_(input: Tensor) -> Tensor: ...
- def erfc(input: Tensor, *, out: Tensor | None = None) -> Tensor:
- r"""
- erfc(input, *, out=None) -> Tensor
- Alias for :func:`torch.special.erfc`.
- """
- def erfc_(input: Tensor) -> Tensor: ...
- def erfinv(input: Tensor, *, out: Tensor | None = None) -> Tensor:
- r"""
- erfinv(input, *, out=None) -> Tensor
- Alias for :func:`torch.special.erfinv`.
- """
- def exp(input: Tensor, *, out: Tensor | None = None) -> Tensor:
- r"""
- exp(input, *, out=None) -> Tensor
- Returns a new tensor with the exponential of the elements
- of the input tensor :attr:`input`.
- .. math::
- y_{i} = e^{x_{i}}
- Args:
- input (Tensor): the input tensor.
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> torch.exp(torch.tensor([0, math.log(2.)]))
- tensor([ 1., 2.])
- """
- def exp2(input: Tensor, *, out: Tensor | None = None) -> Tensor:
- r"""
- exp2(input, *, out=None) -> Tensor
- Alias for :func:`torch.special.exp2`.
- """
- def exp2_(input: Tensor) -> Tensor: ...
- def exp_(input: Tensor) -> Tensor: ...
- def expand_copy(
- input: Tensor,
- size: Sequence[_int | SymInt],
- *,
- implicit: _bool = False,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- Performs the same operation as :func:`torch.Tensor.expand`, but all output tensors
- are freshly created instead of aliasing the input.
- """
- def expm1(input: Tensor, *, out: Tensor | None = None) -> Tensor:
- r"""
- expm1(input, *, out=None) -> Tensor
- Alias for :func:`torch.special.expm1`.
- """
- def expm1_(input: Tensor) -> Tensor: ...
- @overload
- def eye(
- n: _int | SymInt,
- *,
- out: Tensor | None = None,
- dtype: _dtype | None = None,
- layout: _layout | None = None,
- device: DeviceLikeType | None = None,
- pin_memory: _bool | None = False,
- requires_grad: _bool | None = False,
- ) -> Tensor:
- r"""
- eye(n, m=None, *, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False) -> Tensor
- Returns a 2-D tensor with ones on the diagonal and zeros elsewhere.
- Args:
- n (int): the number of rows
- m (int, optional): the number of columns with default being :attr:`n`
- Keyword arguments:
- out (Tensor, optional): the output tensor.
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor.
- Default: if ``None``, uses a global default (see :func:`torch.set_default_dtype`).
- layout (:class:`torch.layout`, optional): the desired layout of returned Tensor.
- Default: ``torch.strided``.
- device (:class:`torch.device`, optional): the desired device of returned tensor.
- Default: if ``None``, uses the current device for the default tensor type
- (see :func:`torch.set_default_device`). :attr:`device` will be the CPU
- for CPU tensor types and the current CUDA device for CUDA tensor types.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- Returns:
- Tensor: A 2-D tensor with ones on the diagonal and zeros elsewhere
- Example::
- >>> torch.eye(3)
- tensor([[ 1., 0., 0.],
- [ 0., 1., 0.],
- [ 0., 0., 1.]])
- """
- @overload
- def eye(
- n: _int | SymInt,
- m: _int | SymInt,
- *,
- out: Tensor | None = None,
- dtype: _dtype | None = None,
- layout: _layout | None = None,
- device: DeviceLikeType | None = None,
- pin_memory: _bool | None = False,
- requires_grad: _bool | None = False,
- ) -> Tensor:
- r"""
- eye(n, m=None, *, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False) -> Tensor
- Returns a 2-D tensor with ones on the diagonal and zeros elsewhere.
- Args:
- n (int): the number of rows
- m (int, optional): the number of columns with default being :attr:`n`
- Keyword arguments:
- out (Tensor, optional): the output tensor.
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor.
- Default: if ``None``, uses a global default (see :func:`torch.set_default_dtype`).
- layout (:class:`torch.layout`, optional): the desired layout of returned Tensor.
- Default: ``torch.strided``.
- device (:class:`torch.device`, optional): the desired device of returned tensor.
- Default: if ``None``, uses the current device for the default tensor type
- (see :func:`torch.set_default_device`). :attr:`device` will be the CPU
- for CPU tensor types and the current CUDA device for CUDA tensor types.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- Returns:
- Tensor: A 2-D tensor with ones on the diagonal and zeros elsewhere
- Example::
- >>> torch.eye(3)
- tensor([[ 1., 0., 0.],
- [ 0., 1., 0.],
- [ 0., 0., 1.]])
- """
- def fake_quantize_per_channel_affine(
- input: Tensor,
- scale: Tensor,
- zero_point: Tensor,
- axis: _int,
- quant_min: _int,
- quant_max: _int,
- ) -> Tensor:
- r"""
- fake_quantize_per_channel_affine(input, scale, zero_point, axis, quant_min, quant_max) -> Tensor
- Returns a new tensor with the data in :attr:`input` fake quantized per channel using :attr:`scale`,
- :attr:`zero_point`, :attr:`quant_min` and :attr:`quant_max`, across the channel specified by :attr:`axis`.
- .. math::
- \text{output} = (
- min(
- \text{quant\_max},
- max(
- \text{quant\_min},
- \text{std::nearby\_int}(\text{input} / \text{scale}) + \text{zero\_point}
- )
- ) - \text{zero\_point}
- ) \times \text{scale}
- Args:
- input (Tensor): the input value(s), in ``torch.float32``
- scale (Tensor): quantization scale, per channel in ``torch.float32``
- zero_point (Tensor): quantization zero_point, per channel in ``torch.int32`` or ``torch.half`` or ``torch.float32``
- axis (int32): channel axis
- quant_min (int64): lower bound of the quantized domain
- quant_max (int64): upper bound of the quantized domain
- Returns:
- Tensor: A newly fake_quantized per channel ``torch.float32`` tensor
- Example::
- >>> x = torch.randn(2, 2, 2)
- >>> x
- tensor([[[-0.2525, -0.0466],
- [ 0.3491, -0.2168]],
- [[-0.5906, 1.6258],
- [ 0.6444, -0.0542]]])
- >>> scales = (torch.randn(2) + 1) * 0.05
- >>> scales
- tensor([0.0475, 0.0486])
- >>> zero_points = torch.zeros(2).to(torch.int32)
- >>> zero_points
- tensor([0, 0])
- >>> torch.fake_quantize_per_channel_affine(x, scales, zero_points, 1, 0, 255)
- tensor([[[0.0000, 0.0000],
- [0.3405, 0.0000]],
- [[0.0000, 1.6134],
- [0.6323, 0.0000]]])
- """
- @overload
- def fake_quantize_per_tensor_affine(
- input: Tensor,
- scale: _float,
- zero_point: _int,
- quant_min: _int,
- quant_max: _int,
- ) -> Tensor:
- r"""
- fake_quantize_per_tensor_affine(input, scale, zero_point, quant_min, quant_max) -> Tensor
- Returns a new tensor with the data in :attr:`input` fake quantized using :attr:`scale`,
- :attr:`zero_point`, :attr:`quant_min` and :attr:`quant_max`.
- .. math::
- \text{output} = (
- min(
- \text{quant\_max},
- max(
- \text{quant\_min},
- \text{std::nearby\_int}(\text{input} / \text{scale}) + \text{zero\_point}
- )
- ) - \text{zero\_point}
- ) \times \text{scale}
- Args:
- input (Tensor): the input value(s), ``torch.float32`` tensor
- scale (double scalar or ``float32`` Tensor): quantization scale
- zero_point (int64 scalar or ``int32`` Tensor): quantization zero_point
- quant_min (int64): lower bound of the quantized domain
- quant_max (int64): upper bound of the quantized domain
- Returns:
- Tensor: A newly fake_quantized ``torch.float32`` tensor
- Example::
- >>> x = torch.randn(4)
- >>> x
- tensor([ 0.0552, 0.9730, 0.3973, -1.0780])
- >>> torch.fake_quantize_per_tensor_affine(x, 0.1, 0, 0, 255)
- tensor([0.1000, 1.0000, 0.4000, 0.0000])
- >>> torch.fake_quantize_per_tensor_affine(x, torch.tensor(0.1), torch.tensor(0), 0, 255)
- tensor([0.1000, 1.0000, 0.4000, 0.0000])
- """
- @overload
- def fake_quantize_per_tensor_affine(
- input: Tensor,
- scale: Tensor,
- zero_point: Tensor,
- quant_min: _int,
- quant_max: _int,
- ) -> Tensor:
- r"""
- fake_quantize_per_tensor_affine(input, scale, zero_point, quant_min, quant_max) -> Tensor
- Returns a new tensor with the data in :attr:`input` fake quantized using :attr:`scale`,
- :attr:`zero_point`, :attr:`quant_min` and :attr:`quant_max`.
- .. math::
- \text{output} = (
- min(
- \text{quant\_max},
- max(
- \text{quant\_min},
- \text{std::nearby\_int}(\text{input} / \text{scale}) + \text{zero\_point}
- )
- ) - \text{zero\_point}
- ) \times \text{scale}
- Args:
- input (Tensor): the input value(s), ``torch.float32`` tensor
- scale (double scalar or ``float32`` Tensor): quantization scale
- zero_point (int64 scalar or ``int32`` Tensor): quantization zero_point
- quant_min (int64): lower bound of the quantized domain
- quant_max (int64): upper bound of the quantized domain
- Returns:
- Tensor: A newly fake_quantized ``torch.float32`` tensor
- Example::
- >>> x = torch.randn(4)
- >>> x
- tensor([ 0.0552, 0.9730, 0.3973, -1.0780])
- >>> torch.fake_quantize_per_tensor_affine(x, 0.1, 0, 0, 255)
- tensor([0.1000, 1.0000, 0.4000, 0.0000])
- >>> torch.fake_quantize_per_tensor_affine(x, torch.tensor(0.1), torch.tensor(0), 0, 255)
- tensor([0.1000, 1.0000, 0.4000, 0.0000])
- """
- @overload
- def fbgemm_linear_fp16_weight(
- input: Tensor,
- packed_weight: Tensor,
- bias: Tensor,
- ) -> Tensor: ...
- @overload
- def fbgemm_linear_fp16_weight(
- input: Tensor,
- packed_weight: Tensor,
- bias: Tensor,
- output: Tensor,
- ) -> Tensor: ...
- @overload
- def fbgemm_linear_fp16_weight_fp32_activation(
- input: Tensor,
- packed_weight: Tensor,
- bias: Tensor | None,
- ) -> Tensor: ...
- @overload
- def fbgemm_linear_fp16_weight_fp32_activation(
- input: Tensor,
- packed_weight: Tensor,
- bias: Tensor | None,
- output: Tensor,
- ) -> Tensor: ...
- def fbgemm_linear_int8_weight(
- input: Tensor,
- weight: Tensor,
- packed: Tensor,
- col_offsets: Tensor,
- weight_scale: Number | _complex,
- weight_zero_point: Number | _complex,
- bias: Tensor,
- ) -> Tensor: ...
- def fbgemm_linear_int8_weight_fp32_activation(
- input: Tensor,
- weight: Tensor,
- packed: Tensor,
- col_offsets: Tensor,
- weight_scale: Number | _complex,
- weight_zero_point: Number | _complex,
- bias: Tensor,
- ) -> Tensor: ...
- def fbgemm_linear_quantize_weight(
- input: Tensor,
- ) -> tuple[Tensor, Tensor, _float, _int]: ...
- def fbgemm_pack_gemm_matrix_fp16(input: Tensor) -> Tensor: ...
- @overload
- def fbgemm_pack_quantized_matrix(input: Tensor) -> Tensor: ...
- @overload
- def fbgemm_pack_quantized_matrix(input: Tensor, K: _int, N: _int) -> Tensor: ...
- def feature_alpha_dropout(input: Tensor, p: _float, train: _bool) -> Tensor: ...
- def feature_alpha_dropout_(
- input: Tensor,
- p: _float,
- train: _bool,
- ) -> Tensor: ...
- def feature_dropout(input: Tensor, p: _float, train: _bool) -> Tensor: ...
- def feature_dropout_(input: Tensor, p: _float, train: _bool) -> Tensor: ...
- @overload
- def fill(input: Tensor, value: Tensor) -> Tensor: ...
- @overload
- def fill(input: Tensor, value: Number | _complex) -> Tensor: ...
- @overload
- def fill_(input: Tensor, value: Tensor) -> Tensor: ...
- @overload
- def fill_(input: Tensor, value: Number | _complex) -> Tensor: ...
- def fix(input: Tensor, *, out: Tensor | None = None) -> Tensor:
- r"""
- fix(input, *, out=None) -> Tensor
- Alias for :func:`torch.trunc`
- """
- def fix_(input: Tensor) -> Tensor: ...
- @overload
- def flatten(
- input: Tensor,
- start_dim: _int = 0,
- end_dim: _int = -1,
- ) -> Tensor:
- r"""
- flatten(input, start_dim=0, end_dim=-1) -> Tensor
- Flattens :attr:`input` by reshaping it into a one-dimensional tensor. If :attr:`start_dim` or :attr:`end_dim`
- are passed, only dimensions starting with :attr:`start_dim` and ending with :attr:`end_dim` are flattened.
- The order of elements in :attr:`input` is unchanged.
- Unlike NumPy's flatten, which always copies input's data, this function may return the original object, a view,
- or copy. If no dimensions are flattened, then the original object :attr:`input` is returned. Otherwise, if input can
- be viewed as the flattened shape, then that view is returned. Finally, only if the input cannot be viewed as the
- flattened shape is input's data copied. See :meth:`torch.Tensor.view` for details on when a view will be returned.
- .. note::
- Flattening a zero-dimensional tensor will return a one-dimensional view.
- Args:
- input (Tensor): the input tensor.
- start_dim (int): the first dim to flatten
- end_dim (int): the last dim to flatten
- Example::
- >>> t = torch.tensor([[[1, 2],
- ... [3, 4]],
- ... [[5, 6],
- ... [7, 8]]])
- >>> torch.flatten(t)
- tensor([1, 2, 3, 4, 5, 6, 7, 8])
- >>> torch.flatten(t, start_dim=1)
- tensor([[1, 2, 3, 4],
- [5, 6, 7, 8]])
- """
- @overload
- def flatten(
- input: Tensor,
- start_dim: _int,
- end_dim: _int,
- out_dim: str | EllipsisType | None,
- ) -> Tensor:
- r"""
- flatten(input, start_dim=0, end_dim=-1) -> Tensor
- Flattens :attr:`input` by reshaping it into a one-dimensional tensor. If :attr:`start_dim` or :attr:`end_dim`
- are passed, only dimensions starting with :attr:`start_dim` and ending with :attr:`end_dim` are flattened.
- The order of elements in :attr:`input` is unchanged.
- Unlike NumPy's flatten, which always copies input's data, this function may return the original object, a view,
- or copy. If no dimensions are flattened, then the original object :attr:`input` is returned. Otherwise, if input can
- be viewed as the flattened shape, then that view is returned. Finally, only if the input cannot be viewed as the
- flattened shape is input's data copied. See :meth:`torch.Tensor.view` for details on when a view will be returned.
- .. note::
- Flattening a zero-dimensional tensor will return a one-dimensional view.
- Args:
- input (Tensor): the input tensor.
- start_dim (int): the first dim to flatten
- end_dim (int): the last dim to flatten
- Example::
- >>> t = torch.tensor([[[1, 2],
- ... [3, 4]],
- ... [[5, 6],
- ... [7, 8]]])
- >>> torch.flatten(t)
- tensor([1, 2, 3, 4, 5, 6, 7, 8])
- >>> torch.flatten(t, start_dim=1)
- tensor([[1, 2, 3, 4],
- [5, 6, 7, 8]])
- """
- @overload
- def flatten(
- input: Tensor,
- start_dim: str | EllipsisType | None,
- end_dim: str | EllipsisType | None,
- out_dim: str | EllipsisType | None,
- ) -> Tensor:
- r"""
- flatten(input, start_dim=0, end_dim=-1) -> Tensor
- Flattens :attr:`input` by reshaping it into a one-dimensional tensor. If :attr:`start_dim` or :attr:`end_dim`
- are passed, only dimensions starting with :attr:`start_dim` and ending with :attr:`end_dim` are flattened.
- The order of elements in :attr:`input` is unchanged.
- Unlike NumPy's flatten, which always copies input's data, this function may return the original object, a view,
- or copy. If no dimensions are flattened, then the original object :attr:`input` is returned. Otherwise, if input can
- be viewed as the flattened shape, then that view is returned. Finally, only if the input cannot be viewed as the
- flattened shape is input's data copied. See :meth:`torch.Tensor.view` for details on when a view will be returned.
- .. note::
- Flattening a zero-dimensional tensor will return a one-dimensional view.
- Args:
- input (Tensor): the input tensor.
- start_dim (int): the first dim to flatten
- end_dim (int): the last dim to flatten
- Example::
- >>> t = torch.tensor([[[1, 2],
- ... [3, 4]],
- ... [[5, 6],
- ... [7, 8]]])
- >>> torch.flatten(t)
- tensor([1, 2, 3, 4, 5, 6, 7, 8])
- >>> torch.flatten(t, start_dim=1)
- tensor([[1, 2, 3, 4],
- [5, 6, 7, 8]])
- """
- @overload
- def flatten(
- input: Tensor,
- dims: Sequence[str | EllipsisType | None],
- out_dim: str | EllipsisType | None,
- ) -> Tensor:
- r"""
- flatten(input, start_dim=0, end_dim=-1) -> Tensor
- Flattens :attr:`input` by reshaping it into a one-dimensional tensor. If :attr:`start_dim` or :attr:`end_dim`
- are passed, only dimensions starting with :attr:`start_dim` and ending with :attr:`end_dim` are flattened.
- The order of elements in :attr:`input` is unchanged.
- Unlike NumPy's flatten, which always copies input's data, this function may return the original object, a view,
- or copy. If no dimensions are flattened, then the original object :attr:`input` is returned. Otherwise, if input can
- be viewed as the flattened shape, then that view is returned. Finally, only if the input cannot be viewed as the
- flattened shape is input's data copied. See :meth:`torch.Tensor.view` for details on when a view will be returned.
- .. note::
- Flattening a zero-dimensional tensor will return a one-dimensional view.
- Args:
- input (Tensor): the input tensor.
- start_dim (int): the first dim to flatten
- end_dim (int): the last dim to flatten
- Example::
- >>> t = torch.tensor([[[1, 2],
- ... [3, 4]],
- ... [[5, 6],
- ... [7, 8]]])
- >>> torch.flatten(t)
- tensor([1, 2, 3, 4, 5, 6, 7, 8])
- >>> torch.flatten(t, start_dim=1)
- tensor([[1, 2, 3, 4],
- [5, 6, 7, 8]])
- """
- def flip(input: Tensor, dims: _size) -> Tensor:
- r"""
- flip(input, dims) -> Tensor
- Reverse the order of an n-D tensor along given axis in dims.
- .. note::
- `torch.flip` makes a copy of :attr:`input`'s data. This is different from NumPy's `np.flip`,
- which returns a view in constant time. Since copying a tensor's data is more work than viewing that data,
- `torch.flip` is expected to be slower than `np.flip`.
- Args:
- input (Tensor): the input tensor.
- dims (a list or tuple): axis to flip on
- Example::
- >>> x = torch.arange(8).view(2, 2, 2)
- >>> x
- tensor([[[ 0, 1],
- [ 2, 3]],
- [[ 4, 5],
- [ 6, 7]]])
- >>> torch.flip(x, [0, 1])
- tensor([[[ 6, 7],
- [ 4, 5]],
- [[ 2, 3],
- [ 0, 1]]])
- """
- def fliplr(input: Tensor) -> Tensor:
- r"""
- fliplr(input) -> Tensor
- Flip tensor in the left/right direction, returning a new tensor.
- Flip the entries in each row in the left/right direction.
- Columns are preserved, but appear in a different order than before.
- Note:
- Requires the tensor to be at least 2-D.
- .. note::
- `torch.fliplr` makes a copy of :attr:`input`'s data. This is different from NumPy's `np.fliplr`,
- which returns a view in constant time. Since copying a tensor's data is more work than viewing that data,
- `torch.fliplr` is expected to be slower than `np.fliplr`.
- Args:
- input (Tensor): Must be at least 2-dimensional.
- Example::
- >>> x = torch.arange(4).view(2, 2)
- >>> x
- tensor([[0, 1],
- [2, 3]])
- >>> torch.fliplr(x)
- tensor([[1, 0],
- [3, 2]])
- """
- def flipud(input: Tensor) -> Tensor:
- r"""
- flipud(input) -> Tensor
- Flip tensor in the up/down direction, returning a new tensor.
- Flip the entries in each column in the up/down direction.
- Rows are preserved, but appear in a different order than before.
- Note:
- Requires the tensor to be at least 1-D.
- .. note::
- `torch.flipud` makes a copy of :attr:`input`'s data. This is different from NumPy's `np.flipud`,
- which returns a view in constant time. Since copying a tensor's data is more work than viewing that data,
- `torch.flipud` is expected to be slower than `np.flipud`.
- Args:
- input (Tensor): Must be at least 1-dimensional.
- Example::
- >>> x = torch.arange(4).view(2, 2)
- >>> x
- tensor([[0, 1],
- [2, 3]])
- >>> torch.flipud(x)
- tensor([[2, 3],
- [0, 1]])
- """
- @overload
- def float_power(
- input: Tensor,
- exponent: Tensor,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- float_power(input, exponent, *, out=None) -> Tensor
- Raises :attr:`input` to the power of :attr:`exponent`, elementwise, in double precision.
- If neither input is complex returns a ``torch.float64`` tensor,
- and if one or more inputs is complex returns a ``torch.complex128`` tensor.
- .. note::
- This function always computes in double precision, unlike :func:`torch.pow`,
- which implements more typical :ref:`type promotion <type-promotion-doc>`.
- This is useful when the computation needs to be performed in a wider or more precise dtype,
- or the results of the computation may contain fractional values not representable in the input dtypes,
- like when an integer base is raised to a negative integer exponent.
- Args:
- input (Tensor or Number): the base value(s)
- exponent (Tensor or Number): the exponent value(s)
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> a = torch.randint(10, (4,))
- >>> a
- tensor([6, 4, 7, 1])
- >>> torch.float_power(a, 2)
- tensor([36., 16., 49., 1.], dtype=torch.float64)
- >>> a = torch.arange(1, 5)
- >>> a
- tensor([ 1, 2, 3, 4])
- >>> exp = torch.tensor([2, -3, 4, -5])
- >>> exp
- tensor([ 2, -3, 4, -5])
- >>> torch.float_power(a, exp)
- tensor([1.0000e+00, 1.2500e-01, 8.1000e+01, 9.7656e-04], dtype=torch.float64)
- """
- @overload
- def float_power(
- self: Number | _complex,
- exponent: Tensor,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- float_power(input, exponent, *, out=None) -> Tensor
- Raises :attr:`input` to the power of :attr:`exponent`, elementwise, in double precision.
- If neither input is complex returns a ``torch.float64`` tensor,
- and if one or more inputs is complex returns a ``torch.complex128`` tensor.
- .. note::
- This function always computes in double precision, unlike :func:`torch.pow`,
- which implements more typical :ref:`type promotion <type-promotion-doc>`.
- This is useful when the computation needs to be performed in a wider or more precise dtype,
- or the results of the computation may contain fractional values not representable in the input dtypes,
- like when an integer base is raised to a negative integer exponent.
- Args:
- input (Tensor or Number): the base value(s)
- exponent (Tensor or Number): the exponent value(s)
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> a = torch.randint(10, (4,))
- >>> a
- tensor([6, 4, 7, 1])
- >>> torch.float_power(a, 2)
- tensor([36., 16., 49., 1.], dtype=torch.float64)
- >>> a = torch.arange(1, 5)
- >>> a
- tensor([ 1, 2, 3, 4])
- >>> exp = torch.tensor([2, -3, 4, -5])
- >>> exp
- tensor([ 2, -3, 4, -5])
- >>> torch.float_power(a, exp)
- tensor([1.0000e+00, 1.2500e-01, 8.1000e+01, 9.7656e-04], dtype=torch.float64)
- """
- @overload
- def float_power(
- input: Tensor,
- exponent: Number | _complex,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- float_power(input, exponent, *, out=None) -> Tensor
- Raises :attr:`input` to the power of :attr:`exponent`, elementwise, in double precision.
- If neither input is complex returns a ``torch.float64`` tensor,
- and if one or more inputs is complex returns a ``torch.complex128`` tensor.
- .. note::
- This function always computes in double precision, unlike :func:`torch.pow`,
- which implements more typical :ref:`type promotion <type-promotion-doc>`.
- This is useful when the computation needs to be performed in a wider or more precise dtype,
- or the results of the computation may contain fractional values not representable in the input dtypes,
- like when an integer base is raised to a negative integer exponent.
- Args:
- input (Tensor or Number): the base value(s)
- exponent (Tensor or Number): the exponent value(s)
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> a = torch.randint(10, (4,))
- >>> a
- tensor([6, 4, 7, 1])
- >>> torch.float_power(a, 2)
- tensor([36., 16., 49., 1.], dtype=torch.float64)
- >>> a = torch.arange(1, 5)
- >>> a
- tensor([ 1, 2, 3, 4])
- >>> exp = torch.tensor([2, -3, 4, -5])
- >>> exp
- tensor([ 2, -3, 4, -5])
- >>> torch.float_power(a, exp)
- tensor([1.0000e+00, 1.2500e-01, 8.1000e+01, 9.7656e-04], dtype=torch.float64)
- """
- def floor(input: Tensor, *, out: Tensor | None = None) -> Tensor:
- r"""
- floor(input, *, out=None) -> Tensor
- Returns a new tensor with the floor of the elements of :attr:`input`,
- the largest integer less than or equal to each element.
- For integer inputs, follows the array-api convention of returning a
- copy of the input tensor.
- .. math::
- \text{out}_{i} = \left\lfloor \text{input}_{i} \right\rfloor
- Args:
- input (Tensor): the input tensor.
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> a = torch.randn(4)
- >>> a
- tensor([-0.8166, 1.5308, -0.2530, -0.2091])
- >>> torch.floor(a)
- tensor([-1., 1., -1., -1.])
- """
- def floor_(input: Tensor) -> Tensor: ...
- def floor_divide(
- input: Tensor | Number,
- other: Tensor | Number,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- floor_divide(input, other, *, out=None) -> Tensor
- .. note::
- Before PyTorch 1.13 :func:`torch.floor_divide` incorrectly performed
- truncation division. To restore the previous behavior use
- :func:`torch.div` with ``rounding_mode='trunc'``.
- Computes :attr:`input` divided by :attr:`other`, elementwise, and floors
- the result.
- .. math::
- \text{{out}}_i = \text{floor} \left( \frac{{\text{{input}}_i}}{{\text{{other}}_i}} \right)
- Supports broadcasting to a common shape, type promotion, and integer and float inputs.
- Args:
- input (Tensor or Number): the dividend
- other (Tensor or Number): the divisor
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> a = torch.tensor([4.0, 3.0])
- >>> b = torch.tensor([2.0, 2.0])
- >>> torch.floor_divide(a, b)
- tensor([2.0, 1.0])
- >>> torch.floor_divide(a, 1.4)
- tensor([2.0, 2.0])
- """
- def fmax(
- input: Tensor,
- other: Tensor,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- fmax(input, other, *, out=None) -> Tensor
- Computes the element-wise maximum of :attr:`input` and :attr:`other`.
- This is like :func:`torch.maximum` except it handles NaNs differently:
- if exactly one of the two elements being compared is a NaN then the non-NaN element is taken as the maximum.
- Only if both elements are NaN is NaN propagated.
- This function is a wrapper around C++'s ``std::fmax`` and is similar to NumPy's ``fmax`` function.
- Supports :ref:`broadcasting to a common shape <broadcasting-semantics>`,
- :ref:`type promotion <type-promotion-doc>`, and integer and floating-point inputs.
- Args:
- input (Tensor): the input tensor.
- other (Tensor): the second input tensor
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> a = torch.tensor([9.7, float('nan'), 3.1, float('nan')])
- >>> b = torch.tensor([-2.2, 0.5, float('nan'), float('nan')])
- >>> torch.fmax(a, b)
- tensor([9.7000, 0.5000, 3.1000, nan])
- """
- def fmin(
- input: Tensor,
- other: Tensor,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- fmin(input, other, *, out=None) -> Tensor
- Computes the element-wise minimum of :attr:`input` and :attr:`other`.
- This is like :func:`torch.minimum` except it handles NaNs differently:
- if exactly one of the two elements being compared is a NaN then the non-NaN element is taken as the minimum.
- Only if both elements are NaN is NaN propagated.
- This function is a wrapper around C++'s ``std::fmin`` and is similar to NumPy's ``fmin`` function.
- Supports :ref:`broadcasting to a common shape <broadcasting-semantics>`,
- :ref:`type promotion <type-promotion-doc>`, and integer and floating-point inputs.
- Args:
- input (Tensor): the input tensor.
- other (Tensor): the second input tensor
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> a = torch.tensor([2.2, float('nan'), 2.1, float('nan')])
- >>> b = torch.tensor([-9.3, 0.1, float('nan'), float('nan')])
- >>> torch.fmin(a, b)
- tensor([-9.3000, 0.1000, 2.1000, nan])
- """
- @overload
- def fmod(
- input: Tensor,
- other: Tensor,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- fmod(input, other, *, out=None) -> Tensor
- Applies C++'s `std::fmod <https://en.cppreference.com/w/cpp/numeric/math/fmod>`_ entrywise.
- The result has the same sign as the dividend :attr:`input` and its absolute value
- is less than that of :attr:`other`.
- This function may be defined in terms of :func:`torch.div` as
- .. code:: python
- torch.fmod(a, b) == a - a.div(b, rounding_mode="trunc") * b
- Supports :ref:`broadcasting to a common shape <broadcasting-semantics>`,
- :ref:`type promotion <type-promotion-doc>`, and integer and float inputs.
- .. note::
- When the divisor is zero, returns ``NaN`` for floating point dtypes
- on both CPU and GPU; raises ``RuntimeError`` for integer division by
- zero on CPU; Integer division by zero on GPU may return any value.
- .. note::
- Complex inputs are not supported. In some cases, it is not mathematically
- possible to satisfy the definition of a modulo operation with complex numbers.
- .. seealso::
- :func:`torch.remainder` which implements Python's modulus operator.
- This one is defined using division rounding down the result.
- Args:
- input (Tensor): the dividend
- other (Tensor or Scalar): the divisor
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> torch.fmod(torch.tensor([-3., -2, -1, 1, 2, 3]), 2)
- tensor([-1., -0., -1., 1., 0., 1.])
- >>> torch.fmod(torch.tensor([1, 2, 3, 4, 5]), -1.5)
- tensor([1.0000, 0.5000, 0.0000, 1.0000, 0.5000])
- """
- @overload
- def fmod(
- input: Tensor,
- other: Number | _complex,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- fmod(input, other, *, out=None) -> Tensor
- Applies C++'s `std::fmod <https://en.cppreference.com/w/cpp/numeric/math/fmod>`_ entrywise.
- The result has the same sign as the dividend :attr:`input` and its absolute value
- is less than that of :attr:`other`.
- This function may be defined in terms of :func:`torch.div` as
- .. code:: python
- torch.fmod(a, b) == a - a.div(b, rounding_mode="trunc") * b
- Supports :ref:`broadcasting to a common shape <broadcasting-semantics>`,
- :ref:`type promotion <type-promotion-doc>`, and integer and float inputs.
- .. note::
- When the divisor is zero, returns ``NaN`` for floating point dtypes
- on both CPU and GPU; raises ``RuntimeError`` for integer division by
- zero on CPU; Integer division by zero on GPU may return any value.
- .. note::
- Complex inputs are not supported. In some cases, it is not mathematically
- possible to satisfy the definition of a modulo operation with complex numbers.
- .. seealso::
- :func:`torch.remainder` which implements Python's modulus operator.
- This one is defined using division rounding down the result.
- Args:
- input (Tensor): the dividend
- other (Tensor or Scalar): the divisor
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> torch.fmod(torch.tensor([-3., -2, -1, 1, 2, 3]), 2)
- tensor([-1., -0., -1., 1., 0., 1.])
- >>> torch.fmod(torch.tensor([1, 2, 3, 4, 5]), -1.5)
- tensor([1.0000, 0.5000, 0.0000, 1.0000, 0.5000])
- """
- def frac(input: Tensor, *, out: Tensor | None = None) -> Tensor:
- r"""
- frac(input, *, out=None) -> Tensor
- Computes the fractional portion of each element in :attr:`input`.
- .. math::
- \text{out}_{i} = \text{input}_{i} - \left\lfloor |\text{input}_{i}| \right\rfloor * \operatorname{sgn}(\text{input}_{i})
- Example::
- >>> torch.frac(torch.tensor([1, 2.5, -3.2]))
- tensor([ 0.0000, 0.5000, -0.2000])
- """
- def frac_(input: Tensor) -> Tensor: ...
- def frexp(
- input: Tensor,
- *,
- out: Tensor | tuple[Tensor, ...] | list[Tensor] | None = None,
- ) -> torch.return_types.frexp:
- r"""
- frexp(input, *, out=None) -> (Tensor mantissa, Tensor exponent)
- Decomposes :attr:`input` into mantissa and exponent tensors
- such that :math:`\text{input} = \text{mantissa} \times 2^{\text{exponent}}`.
- The range of mantissa is the open interval (-1, 1).
- Supports float inputs.
- Args:
- input (Tensor): the input tensor
- Keyword args:
- out (tuple, optional): the output tensors
- Example::
- >>> x = torch.arange(9.)
- >>> mantissa, exponent = torch.frexp(x)
- >>> mantissa
- tensor([0.0000, 0.5000, 0.5000, 0.7500, 0.5000, 0.6250, 0.7500, 0.8750, 0.5000])
- >>> exponent
- tensor([0, 1, 2, 2, 3, 3, 3, 3, 4], dtype=torch.int32)
- >>> torch.ldexp(mantissa, exponent)
- tensor([0., 1., 2., 3., 4., 5., 6., 7., 8.])
- """
- def frobenius_norm(
- input: Tensor,
- dim: _int | _size,
- keepdim: _bool = False,
- *,
- out: Tensor | None = None,
- ) -> Tensor: ...
- def from_file(
- filename: str,
- shared: _bool | None = None,
- size: _int | None = 0,
- *,
- dtype: _dtype | None = None,
- layout: _layout | None = None,
- device: DeviceLikeType | None = None,
- pin_memory: _bool | None = False,
- requires_grad: _bool | None = False,
- ) -> Tensor:
- r"""
- from_file(filename, shared=None, size=0, *, dtype=None, layout=None, device=None, pin_memory=False)
- Creates a CPU tensor with a storage backed by a memory-mapped file.
- If ``shared`` is True, then memory is shared between processes. All changes are written to the file.
- If ``shared`` is False, then changes to the tensor do not affect the file.
- ``size`` is the number of elements in the Tensor. If ``shared`` is ``False``, then the file must contain
- at least ``size * sizeof(dtype)`` bytes. If ``shared`` is ``True`` the file will be created if needed.
- .. note::
- Only CPU tensors can be mapped to files.
- .. note::
- For now, tensors with storages backed by a memory-mapped file cannot be created in pinned memory.
- Args:
- filename (str): file name to map
- shared (bool): whether to share memory (whether ``MAP_SHARED`` or ``MAP_PRIVATE`` is passed to the
- underlying `mmap(2) call <https://man7.org/linux/man-pages/man2/mmap.2.html>`_)
- size (int): number of elements in the tensor
- Keyword args:
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor.
- Default: if ``None``, uses a global default (see :func:`torch.set_default_dtype`).
- layout (:class:`torch.layout`, optional): the desired layout of returned Tensor.
- Default: ``torch.strided``.
- device (:class:`torch.device`, optional): the desired device of returned tensor.
- Default: if ``None``, uses the current device for the default tensor type
- (see :func:`torch.set_default_device`). :attr:`device` will be the CPU
- for CPU tensor types and the current CUDA device for CUDA tensor types.
- pin_memory (bool, optional): If set, returned tensor would be allocated in
- the pinned memory. Works only for CPU tensors. Default: ``False``.
- Example::
- >>> t = torch.randn(2, 5, dtype=torch.float64)
- >>> t.numpy().tofile('storage.pt')
- >>> t_mapped = torch.from_file('storage.pt', shared=False, size=10, dtype=torch.float64)
- """
- def from_numpy(ndarray) -> Tensor:
- r"""
- from_numpy(ndarray) -> Tensor
- Creates a :class:`Tensor` from a :class:`numpy.ndarray`.
- The returned tensor and :attr:`ndarray` share the same memory. Modifications to
- the tensor will be reflected in the :attr:`ndarray` and vice versa. The returned
- tensor is not resizable.
- It currently accepts :attr:`ndarray` with dtypes of ``numpy.float64``,
- ``numpy.float32``, ``numpy.float16``, ``numpy.complex64``, ``numpy.complex128``,
- ``numpy.int64``, ``numpy.int32``, ``numpy.int16``, ``numpy.int8``, ``numpy.uint8``,
- and ``bool``.
- .. warning::
- Writing to a tensor created from a read-only NumPy array is not supported and will result in undefined behavior.
- Example::
- >>> a = numpy.array([1, 2, 3])
- >>> t = torch.from_numpy(a)
- >>> t
- tensor([ 1, 2, 3])
- >>> t[0] = -1
- >>> a
- array([-1, 2, 3])
- """
- def frombuffer(
- buffer: Any,
- *,
- dtype: _dtype,
- count: int = -1,
- offset: int = 0,
- requires_grad: _bool = False,
- ) -> Tensor:
- r"""
- frombuffer(buffer, *, dtype, count=-1, offset=0, requires_grad=False) -> Tensor
- Creates a 1-dimensional :class:`Tensor` from an object that implements
- the Python buffer protocol.
- Skips the first :attr:`offset` bytes in the buffer, and interprets the rest of
- the raw bytes as a 1-dimensional tensor of type :attr:`dtype` with :attr:`count`
- elements.
- Note that either of the following must be true:
- 1. :attr:`count` is a positive non-zero number, and the total number of bytes
- in the buffer is more than :attr:`offset` plus :attr:`count` times the size
- (in bytes) of :attr:`dtype`.
- 2. :attr:`count` is negative, and the length (number of bytes) of the buffer
- subtracted by the :attr:`offset` is a multiple of the size (in bytes) of
- :attr:`dtype`.
- The returned tensor and buffer share the same memory. Modifications to
- the tensor will be reflected in the buffer and vice versa. The returned
- tensor is not resizable.
- .. note::
- This function increments the reference count for the object that
- owns the shared memory. Therefore, such memory will not be deallocated
- before the returned tensor goes out of scope.
- .. warning::
- This function's behavior is undefined when passed an object implementing
- the buffer protocol whose data is not on the CPU. Doing so is likely to
- cause a segmentation fault.
- .. warning::
- This function does not try to infer the :attr:`dtype` (hence, it is not
- optional). Passing a different :attr:`dtype` than its source may result
- in unexpected behavior.
- Args:
- buffer (object): a Python object that exposes the buffer interface.
- Keyword args:
- dtype (:class:`torch.dtype`): the desired data type of returned tensor.
- count (int, optional): the number of desired elements to be read.
- If negative, all the elements (until the end of the buffer) will be
- read. Default: -1.
- offset (int, optional): the number of bytes to skip at the start of
- the buffer. Default: 0.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- Example::
- >>> import array
- >>> a = array.array('i', [1, 2, 3])
- >>> t = torch.frombuffer(a, dtype=torch.int32)
- >>> t
- tensor([ 1, 2, 3])
- >>> t[0] = -1
- >>> a
- array([-1, 2, 3])
- >>> # Interprets the signed char bytes as 32-bit integers.
- >>> # Each 4 signed char elements will be interpreted as
- >>> # 1 signed 32-bit integer.
- >>> import array
- >>> a = array.array('b', [-1, 0, 0, 0])
- >>> torch.frombuffer(a, dtype=torch.int32)
- tensor([255], dtype=torch.int32)
- """
- @overload
- def full(
- size: _size,
- fill_value: Number | _complex,
- *,
- out: Tensor | None = None,
- layout: _layout = strided,
- dtype: _dtype | None = None,
- device: DeviceLikeType | None = None,
- requires_grad: _bool = False,
- pin_memory: _bool = False,
- ) -> Tensor:
- r"""
- full(size, fill_value, *, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False) -> Tensor
- Creates a tensor of size :attr:`size` filled with :attr:`fill_value`. The
- tensor's dtype is inferred from :attr:`fill_value`.
- Args:
- size (int...): a list, tuple, or :class:`torch.Size` of integers defining the
- shape of the output tensor.
- fill_value (Scalar): the value to fill the output tensor with.
- Keyword args:
- out (Tensor, optional): the output tensor.
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor.
- Default: if ``None``, uses a global default (see :func:`torch.set_default_dtype`).
- layout (:class:`torch.layout`, optional): the desired layout of returned Tensor.
- Default: ``torch.strided``.
- device (:class:`torch.device`, optional): the desired device of returned tensor.
- Default: if ``None``, uses the current device for the default tensor type
- (see :func:`torch.set_default_device`). :attr:`device` will be the CPU
- for CPU tensor types and the current CUDA device for CUDA tensor types.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- Example::
- >>> torch.full((2, 3), 3.141592)
- tensor([[ 3.1416, 3.1416, 3.1416],
- [ 3.1416, 3.1416, 3.1416]])
- """
- @overload
- def full(
- size: _size,
- fill_value: Number | _complex,
- *,
- names: list[str | None],
- layout: _layout = strided,
- dtype: _dtype | None = None,
- device: DeviceLikeType | None = None,
- requires_grad: _bool = False,
- pin_memory: _bool = False,
- ) -> Tensor:
- r"""
- full(size, fill_value, *, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False) -> Tensor
- Creates a tensor of size :attr:`size` filled with :attr:`fill_value`. The
- tensor's dtype is inferred from :attr:`fill_value`.
- Args:
- size (int...): a list, tuple, or :class:`torch.Size` of integers defining the
- shape of the output tensor.
- fill_value (Scalar): the value to fill the output tensor with.
- Keyword args:
- out (Tensor, optional): the output tensor.
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor.
- Default: if ``None``, uses a global default (see :func:`torch.set_default_dtype`).
- layout (:class:`torch.layout`, optional): the desired layout of returned Tensor.
- Default: ``torch.strided``.
- device (:class:`torch.device`, optional): the desired device of returned tensor.
- Default: if ``None``, uses the current device for the default tensor type
- (see :func:`torch.set_default_device`). :attr:`device` will be the CPU
- for CPU tensor types and the current CUDA device for CUDA tensor types.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- Example::
- >>> torch.full((2, 3), 3.141592)
- tensor([[ 3.1416, 3.1416, 3.1416],
- [ 3.1416, 3.1416, 3.1416]])
- """
- @overload
- def full(
- size: Sequence[_int | SymInt],
- fill_value: Number | _complex,
- *,
- out: Tensor | None = None,
- dtype: _dtype | None = None,
- layout: _layout | None = None,
- device: DeviceLikeType | None = None,
- pin_memory: _bool | None = False,
- requires_grad: _bool | None = False,
- ) -> Tensor:
- r"""
- full(size, fill_value, *, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False) -> Tensor
- Creates a tensor of size :attr:`size` filled with :attr:`fill_value`. The
- tensor's dtype is inferred from :attr:`fill_value`.
- Args:
- size (int...): a list, tuple, or :class:`torch.Size` of integers defining the
- shape of the output tensor.
- fill_value (Scalar): the value to fill the output tensor with.
- Keyword args:
- out (Tensor, optional): the output tensor.
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor.
- Default: if ``None``, uses a global default (see :func:`torch.set_default_dtype`).
- layout (:class:`torch.layout`, optional): the desired layout of returned Tensor.
- Default: ``torch.strided``.
- device (:class:`torch.device`, optional): the desired device of returned tensor.
- Default: if ``None``, uses the current device for the default tensor type
- (see :func:`torch.set_default_device`). :attr:`device` will be the CPU
- for CPU tensor types and the current CUDA device for CUDA tensor types.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- Example::
- >>> torch.full((2, 3), 3.141592)
- tensor([[ 3.1416, 3.1416, 3.1416],
- [ 3.1416, 3.1416, 3.1416]])
- """
- @overload
- def full(
- size: _size,
- fill_value: Number | _complex,
- *,
- names: Sequence[str | EllipsisType | None] | None,
- dtype: _dtype | None = None,
- layout: _layout | None = None,
- device: DeviceLikeType | None = None,
- pin_memory: _bool | None = False,
- requires_grad: _bool | None = False,
- ) -> Tensor:
- r"""
- full(size, fill_value, *, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False) -> Tensor
- Creates a tensor of size :attr:`size` filled with :attr:`fill_value`. The
- tensor's dtype is inferred from :attr:`fill_value`.
- Args:
- size (int...): a list, tuple, or :class:`torch.Size` of integers defining the
- shape of the output tensor.
- fill_value (Scalar): the value to fill the output tensor with.
- Keyword args:
- out (Tensor, optional): the output tensor.
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor.
- Default: if ``None``, uses a global default (see :func:`torch.set_default_dtype`).
- layout (:class:`torch.layout`, optional): the desired layout of returned Tensor.
- Default: ``torch.strided``.
- device (:class:`torch.device`, optional): the desired device of returned tensor.
- Default: if ``None``, uses the current device for the default tensor type
- (see :func:`torch.set_default_device`). :attr:`device` will be the CPU
- for CPU tensor types and the current CUDA device for CUDA tensor types.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- Example::
- >>> torch.full((2, 3), 3.141592)
- tensor([[ 3.1416, 3.1416, 3.1416],
- [ 3.1416, 3.1416, 3.1416]])
- """
- def full_like(
- input: Tensor,
- fill_value: Number | _complex,
- *,
- memory_format: memory_format | None = None,
- dtype: _dtype | None = None,
- layout: _layout | None = None,
- device: DeviceLikeType | None = None,
- pin_memory: _bool | None = False,
- requires_grad: _bool | None = False,
- ) -> Tensor:
- r"""
- full_like(input, fill_value, \*, dtype=None, layout=torch.strided, device=None, requires_grad=False, memory_format=torch.preserve_format) -> Tensor
- Returns a tensor with the same size as :attr:`input` filled with :attr:`fill_value`.
- ``torch.full_like(input, fill_value)`` is equivalent to
- ``torch.full(input.size(), fill_value, dtype=input.dtype, layout=input.layout, device=input.device)``.
- Args:
- input (Tensor): the size of :attr:`input` will determine size of the output tensor.
- fill_value: the number to fill the output tensor with.
- Keyword args:
- dtype (:class:`torch.dtype`, optional): the desired data type of returned Tensor.
- Default: if ``None``, defaults to the dtype of :attr:`input`.
- layout (:class:`torch.layout`, optional): the desired layout of returned tensor.
- Default: if ``None``, defaults to the layout of :attr:`input`.
- device (:class:`torch.device`, optional): the desired device of returned tensor.
- Default: if ``None``, defaults to the device of :attr:`input`.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- memory_format (:class:`torch.memory_format`, optional): the desired memory format of
- returned Tensor. Default: ``torch.preserve_format``.
- Example::
- >>> x = torch.ones(2, 3)
- >>> torch.full_like(x, 3.141592)
- tensor([[ 3.1416, 3.1416, 3.1416],
- [ 3.1416, 3.1416, 3.1416]])
- >>> torch.full_like(x, 7)
- tensor([[7., 7., 7.],
- [7., 7., 7.]])
- >>> torch.full_like(x, 0.5, dtype=torch.int32)
- tensor([[0, 0, 0],
- [0, 0, 0]], dtype=torch.int32)
- >>> y = torch.randn(3, 4, dtype=torch.float64)
- >>> torch.full_like(y, -1.0)
- tensor([[-1., -1., -1., -1.],
- [-1., -1., -1., -1.],
- [-1., -1., -1., -1.]], dtype=torch.float64)
- """
- def fused_moving_avg_obs_fake_quant(
- input: Tensor,
- observer_on: Tensor,
- fake_quant_on: Tensor,
- running_min: Tensor,
- running_max: Tensor,
- scale: Tensor,
- zero_point: Tensor,
- averaging_const: _float,
- quant_min: _int,
- quant_max: _int,
- ch_axis: _int,
- per_row_fake_quant: _bool = False,
- symmetric_quant: _bool = False,
- ) -> Tensor: ...
- @overload
- def gather(
- input: Tensor,
- dim: _int,
- index: Tensor,
- *,
- sparse_grad: _bool = False,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- gather(input, dim, index, *, sparse_grad=False, out=None) -> Tensor
- Gathers values along an axis specified by `dim`.
- For a 3-D tensor the output is specified by::
- out[i][j][k] = input[index[i][j][k]][j][k] # if dim == 0
- out[i][j][k] = input[i][index[i][j][k]][k] # if dim == 1
- out[i][j][k] = input[i][j][index[i][j][k]] # if dim == 2
- :attr:`input` and :attr:`index` must have the same number of dimensions.
- It is also required that ``index.size(d) <= input.size(d)`` for all
- dimensions ``d != dim``. :attr:`out` will have the same shape as :attr:`index`.
- Note that ``input`` and ``index`` do not broadcast against each other.
- When :attr:`index` is empty, we always return an empty output with the same shape
- without further error checking.
- Args:
- input (Tensor): the source tensor
- dim (int): the axis along which to index
- index (LongTensor): the indices of elements to gather
- Keyword arguments:
- sparse_grad (bool, optional): If ``True``, gradient w.r.t. :attr:`input` will be a sparse tensor.
- out (Tensor, optional): the destination tensor
- Example::
- >>> t = torch.tensor([[1, 2], [3, 4]])
- >>> torch.gather(t, 1, torch.tensor([[0, 0], [1, 0]]))
- tensor([[ 1, 1],
- [ 4, 3]])
- """
- @overload
- def gather(
- input: Tensor,
- dim: str | EllipsisType | None,
- index: Tensor,
- *,
- sparse_grad: _bool = False,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- gather(input, dim, index, *, sparse_grad=False, out=None) -> Tensor
- Gathers values along an axis specified by `dim`.
- For a 3-D tensor the output is specified by::
- out[i][j][k] = input[index[i][j][k]][j][k] # if dim == 0
- out[i][j][k] = input[i][index[i][j][k]][k] # if dim == 1
- out[i][j][k] = input[i][j][index[i][j][k]] # if dim == 2
- :attr:`input` and :attr:`index` must have the same number of dimensions.
- It is also required that ``index.size(d) <= input.size(d)`` for all
- dimensions ``d != dim``. :attr:`out` will have the same shape as :attr:`index`.
- Note that ``input`` and ``index`` do not broadcast against each other.
- When :attr:`index` is empty, we always return an empty output with the same shape
- without further error checking.
- Args:
- input (Tensor): the source tensor
- dim (int): the axis along which to index
- index (LongTensor): the indices of elements to gather
- Keyword arguments:
- sparse_grad (bool, optional): If ``True``, gradient w.r.t. :attr:`input` will be a sparse tensor.
- out (Tensor, optional): the destination tensor
- Example::
- >>> t = torch.tensor([[1, 2], [3, 4]])
- >>> torch.gather(t, 1, torch.tensor([[0, 0], [1, 0]]))
- tensor([[ 1, 1],
- [ 4, 3]])
- """
- def gcd(
- input: Tensor,
- other: Tensor,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- gcd(input, other, *, out=None) -> Tensor
- Computes the element-wise greatest common divisor (GCD) of :attr:`input` and :attr:`other`.
- Both :attr:`input` and :attr:`other` must have integer types.
- .. note::
- This defines :math:`gcd(0, 0) = 0`.
- Args:
- input (Tensor): the input tensor.
- other (Tensor): the second input tensor
- Keyword arguments:
- out (Tensor, optional): the output tensor.
- Example::
- >>> a = torch.tensor([5, 10, 15])
- >>> b = torch.tensor([3, 4, 5])
- >>> torch.gcd(a, b)
- tensor([1, 2, 5])
- >>> c = torch.tensor([3])
- >>> torch.gcd(a, c)
- tensor([1, 1, 3])
- """
- def gcd_(input: Tensor, other: Tensor) -> Tensor: ...
- @overload
- def ge(
- input: Tensor,
- other: Tensor,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- ge(input, other, *, out=None) -> Tensor
- Computes :math:`\text{input} \geq \text{other}` element-wise.
- The second argument can be a number or a tensor whose shape is
- :ref:`broadcastable <broadcasting-semantics>` with the first argument.
- Args:
- input (Tensor): the tensor to compare
- other (Tensor or float): the tensor or value to compare
- Keyword args:
- out (Tensor, optional): the output tensor.
- Returns:
- A boolean tensor that is True where :attr:`input` is greater than or equal to :attr:`other` and False elsewhere
- Example::
- >>> torch.ge(torch.tensor([[1, 2], [3, 4]]), torch.tensor([[1, 1], [4, 4]]))
- tensor([[True, True], [False, True]])
- """
- @overload
- def ge(
- input: Tensor,
- other: Number | _complex,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- ge(input, other, *, out=None) -> Tensor
- Computes :math:`\text{input} \geq \text{other}` element-wise.
- The second argument can be a number or a tensor whose shape is
- :ref:`broadcastable <broadcasting-semantics>` with the first argument.
- Args:
- input (Tensor): the tensor to compare
- other (Tensor or float): the tensor or value to compare
- Keyword args:
- out (Tensor, optional): the output tensor.
- Returns:
- A boolean tensor that is True where :attr:`input` is greater than or equal to :attr:`other` and False elsewhere
- Example::
- >>> torch.ge(torch.tensor([[1, 2], [3, 4]]), torch.tensor([[1, 1], [4, 4]]))
- tensor([[True, True], [False, True]])
- """
- def geqrf(
- input: Tensor,
- *,
- out: Tensor | tuple[Tensor, ...] | list[Tensor] | None = None,
- ) -> torch.return_types.geqrf:
- r"""
- geqrf(input, *, out=None) -> (Tensor, Tensor)
- This is a low-level function for calling LAPACK's geqrf directly. This function
- returns a namedtuple (a, tau) as defined in `LAPACK documentation for geqrf`_ .
- Computes a QR decomposition of :attr:`input`.
- Both `Q` and `R` matrices are stored in the same output tensor `a`.
- The elements of `R` are stored on and above the diagonal.
- Elementary reflectors (or Householder vectors) implicitly defining matrix `Q`
- are stored below the diagonal.
- The results of this function can be used together with :func:`torch.linalg.householder_product`
- to obtain the `Q` matrix or
- with :func:`torch.ormqr`, which uses an implicit representation of the `Q` matrix,
- for an efficient matrix-matrix multiplication.
- See `LAPACK documentation for geqrf`_ for further details.
- .. note::
- See also :func:`torch.linalg.qr`, which computes Q and R matrices, and :func:`torch.linalg.lstsq`
- with the ``driver="gels"`` option for a function that can solve matrix equations using a QR decomposition.
- Args:
- input (Tensor): the input matrix
- Keyword args:
- out (tuple, optional): the output tuple of (Tensor, Tensor). Ignored if `None`. Default: `None`.
- .. _LAPACK documentation for geqrf:
- http://www.netlib.org/lapack/explore-html/df/dc5/group__variants_g_ecomputational_ga3766ea903391b5cf9008132f7440ec7b.html
- """
- def ger(
- input: Tensor,
- vec2: Tensor,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- ger(input, vec2, *, out=None) -> Tensor
- Alias of :func:`torch.outer`.
- .. warning::
- This function is deprecated and will be removed in a future PyTorch release.
- Use :func:`torch.outer` instead.
- """
- def get_default_dtype() -> _dtype:
- r"""
- get_default_dtype() -> torch.dtype
- Get the current default floating point :class:`torch.dtype`.
- Example::
- >>> torch.get_default_dtype() # initial default for floating point is torch.float32
- torch.float32
- >>> torch.set_default_dtype(torch.float64)
- >>> torch.get_default_dtype() # default is now changed to torch.float64
- torch.float64
- """
- def get_num_interop_threads() -> _int:
- r"""
- get_num_interop_threads() -> int
- Returns the number of threads used for inter-op parallelism on CPU
- (e.g. in JIT interpreter)
- """
- def get_num_threads() -> _int:
- r"""
- get_num_threads() -> int
- Returns the number of threads used for parallelizing CPU operations
- """
- @overload
- def gradient(
- input: Tensor,
- *,
- spacing: Number | _complex | None = None,
- dim: _int | None = None,
- edge_order: _int = 1,
- ) -> tuple[Tensor, ...]:
- r"""
- gradient(input, *, spacing=1, dim=None, edge_order=1) -> List of Tensors
- Estimates the gradient of a function :math:`g : \mathbb{R}^n \rightarrow \mathbb{R}` in
- one or more dimensions using the `second-order accurate central differences method
- <https://www.ams.org/journals/mcom/1988-51-184/S0025-5718-1988-0935077-0/S0025-5718-1988-0935077-0.pdf>`_ and
- either first or second order estimates at the boundaries.
- The gradient of :math:`g` is estimated using samples. By default, when :attr:`spacing` is not
- specified, the samples are entirely described by :attr:`input`, and the mapping of input coordinates
- to an output is the same as the tensor's mapping of indices to values. For example, for a three-dimensional
- :attr:`input` the function described is :math:`g : \mathbb{R}^3 \rightarrow \mathbb{R}`, and
- :math:`g(1, 2, 3)\ == input[1, 2, 3]`.
- When :attr:`spacing` is specified, it modifies the relationship between :attr:`input` and input coordinates.
- This is detailed in the "Keyword Arguments" section below.
- The gradient is estimated by estimating each partial derivative of :math:`g` independently. This estimation is
- accurate if :math:`g` is in :math:`C^3` (it has at least 3 continuous derivatives), and the estimation can be
- improved by providing closer samples. Mathematically, the value at each interior point of a partial derivative
- is estimated using `Taylor's theorem with remainder <https://en.wikipedia.org/wiki/Taylor%27s_theorem>`_.
- Letting :math:`x` be an interior point with :math:`x-h_l` and :math:`x+h_r` be points neighboring
- it to the left and right respectively, :math:`f(x+h_r)` and :math:`f(x-h_l)` can be estimated using:
- .. math::
- \begin{aligned}
- f(x+h_r) = f(x) + h_r f'(x) + {h_r}^2 \frac{f''(x)}{2} + {h_r}^3 \frac{f'''(\xi_1)}{6}, \xi_1 \in (x, x+h_r) \\
- f(x-h_l) = f(x) - h_l f'(x) + {h_l}^2 \frac{f''(x)}{2} - {h_l}^3 \frac{f'''(\xi_2)}{6}, \xi_2 \in (x, x-h_l) \\
- \end{aligned}
- Using the fact that :math:`f \in C^3` and solving the linear system, we derive:
- .. math::
- f'(x) \approx \frac{ {h_l}^2 f(x+h_r) - {h_r}^2 f(x-h_l)
- + ({h_r}^2-{h_l}^2 ) f(x) }{ {h_r} {h_l}^2 + {h_r}^2 {h_l} }
- .. note::
- We estimate the gradient of functions in complex domain
- :math:`g : \mathbb{C}^n \rightarrow \mathbb{C}` in the same way.
- The value of each partial derivative at the boundary points is computed differently. See edge_order below.
- Args:
- input (``Tensor``): the tensor that represents the values of the function
- Keyword args:
- spacing (``scalar``, ``list of scalar``, ``list of Tensor``, optional): :attr:`spacing` can be used to modify
- how the :attr:`input` tensor's indices relate to sample coordinates. If :attr:`spacing` is a scalar then
- the indices are multiplied by the scalar to produce the coordinates. For example, if :attr:`spacing=2` the
- indices (1, 2, 3) become coordinates (2, 4, 6). If :attr:`spacing` is a list of scalars then the corresponding
- indices are multiplied. For example, if :attr:`spacing=(2, -1, 3)` the indices (1, 2, 3) become coordinates (2, -2, 9).
- Finally, if :attr:`spacing` is a list of one-dimensional tensors then each tensor specifies the coordinates for
- the corresponding dimension. For example, if the indices are (1, 2, 3) and the tensors are (t0, t1, t2), then
- the coordinates are (t0[1], t1[2], t2[3])
- dim (``int``, ``list of int``, optional): the dimension or dimensions to approximate the gradient over. By default
- the partial gradient in every dimension is computed. Note that when :attr:`dim` is specified the elements of
- the :attr:`spacing` argument must correspond with the specified dims."
- edge_order (``int``, optional): 1 or 2, for `first-order
- <https://www.ams.org/journals/mcom/1988-51-184/S0025-5718-1988-0935077-0/S0025-5718-1988-0935077-0.pdf>`_ or
- `second-order <https://www.ams.org/journals/mcom/1988-51-184/S0025-5718-1988-0935077-0/S0025-5718-1988-0935077-0.pdf>`_
- estimation of the boundary ("edge") values, respectively. Note that when :attr:`edge_order` is specified, each
- dimension size of :attr:`input` should be at least edge_order+1
- Examples::
- >>> # Estimates the gradient of f(x)=x^2 at points [-2, -1, 2, 4]
- >>> coordinates = (torch.tensor([-2., -1., 1., 4.]),)
- >>> values = torch.tensor([4., 1., 1., 16.], )
- >>> torch.gradient(values, spacing = coordinates)
- (tensor([-3., -2., 2., 5.]),)
- >>> # Estimates the gradient of the R^2 -> R function whose samples are
- >>> # described by the tensor t. Implicit coordinates are [0, 1] for the outermost
- >>> # dimension and [0, 1, 2, 3] for the innermost dimension, and function estimates
- >>> # partial derivative for both dimensions.
- >>> t = torch.tensor([[1, 2, 4, 8], [10, 20, 40, 80]])
- >>> torch.gradient(t)
- (tensor([[ 9., 18., 36., 72.],
- [ 9., 18., 36., 72.]]),
- tensor([[ 1.0000, 1.5000, 3.0000, 4.0000],
- [10.0000, 15.0000, 30.0000, 40.0000]]))
- >>> # A scalar value for spacing modifies the relationship between tensor indices
- >>> # and input coordinates by multiplying the indices to find the
- >>> # coordinates. For example, below the indices of the innermost
- >>> # 0, 1, 2, 3 translate to coordinates of [0, 2, 4, 6], and the indices of
- >>> # the outermost dimension 0, 1 translate to coordinates of [0, 2].
- >>> torch.gradient(t, spacing = 2.0) # dim = None (implicitly [0, 1])
- (tensor([[ 4.5000, 9.0000, 18.0000, 36.0000],
- [ 4.5000, 9.0000, 18.0000, 36.0000]]),
- tensor([[ 0.5000, 0.7500, 1.5000, 2.0000],
- [ 5.0000, 7.5000, 15.0000, 20.0000]]))
- >>> # doubling the spacing between samples halves the estimated partial gradients.
- >>>
- >>> # Estimates only the partial derivative for dimension 1
- >>> torch.gradient(t, dim = 1) # spacing = None (implicitly 1.)
- (tensor([[ 1.0000, 1.5000, 3.0000, 4.0000],
- [10.0000, 15.0000, 30.0000, 40.0000]]),)
- >>> # When spacing is a list of scalars, the relationship between the tensor
- >>> # indices and input coordinates changes based on dimension.
- >>> # For example, below, the indices of the innermost dimension 0, 1, 2, 3 translate
- >>> # to coordinates of [0, 3, 6, 9], and the indices of the outermost dimension
- >>> # 0, 1 translate to coordinates of [0, 2].
- >>> torch.gradient(t, spacing = [3., 2.])
- (tensor([[ 4.5000, 9.0000, 18.0000, 36.0000],
- [ 4.5000, 9.0000, 18.0000, 36.0000]]),
- tensor([[ 0.3333, 0.5000, 1.0000, 1.3333],
- [ 3.3333, 5.0000, 10.0000, 13.3333]]))
- >>> # The following example is a replication of the previous one with explicit
- >>> # coordinates.
- >>> coords = (torch.tensor([0, 2]), torch.tensor([0, 3, 6, 9]))
- >>> torch.gradient(t, spacing = coords)
- (tensor([[ 4.5000, 9.0000, 18.0000, 36.0000],
- [ 4.5000, 9.0000, 18.0000, 36.0000]]),
- tensor([[ 0.3333, 0.5000, 1.0000, 1.3333],
- [ 3.3333, 5.0000, 10.0000, 13.3333]]))
- """
- @overload
- def gradient(
- input: Tensor,
- *,
- spacing: Sequence[Number | _complex],
- dim: _int | None = None,
- edge_order: _int = 1,
- ) -> tuple[Tensor, ...]:
- r"""
- gradient(input, *, spacing=1, dim=None, edge_order=1) -> List of Tensors
- Estimates the gradient of a function :math:`g : \mathbb{R}^n \rightarrow \mathbb{R}` in
- one or more dimensions using the `second-order accurate central differences method
- <https://www.ams.org/journals/mcom/1988-51-184/S0025-5718-1988-0935077-0/S0025-5718-1988-0935077-0.pdf>`_ and
- either first or second order estimates at the boundaries.
- The gradient of :math:`g` is estimated using samples. By default, when :attr:`spacing` is not
- specified, the samples are entirely described by :attr:`input`, and the mapping of input coordinates
- to an output is the same as the tensor's mapping of indices to values. For example, for a three-dimensional
- :attr:`input` the function described is :math:`g : \mathbb{R}^3 \rightarrow \mathbb{R}`, and
- :math:`g(1, 2, 3)\ == input[1, 2, 3]`.
- When :attr:`spacing` is specified, it modifies the relationship between :attr:`input` and input coordinates.
- This is detailed in the "Keyword Arguments" section below.
- The gradient is estimated by estimating each partial derivative of :math:`g` independently. This estimation is
- accurate if :math:`g` is in :math:`C^3` (it has at least 3 continuous derivatives), and the estimation can be
- improved by providing closer samples. Mathematically, the value at each interior point of a partial derivative
- is estimated using `Taylor's theorem with remainder <https://en.wikipedia.org/wiki/Taylor%27s_theorem>`_.
- Letting :math:`x` be an interior point with :math:`x-h_l` and :math:`x+h_r` be points neighboring
- it to the left and right respectively, :math:`f(x+h_r)` and :math:`f(x-h_l)` can be estimated using:
- .. math::
- \begin{aligned}
- f(x+h_r) = f(x) + h_r f'(x) + {h_r}^2 \frac{f''(x)}{2} + {h_r}^3 \frac{f'''(\xi_1)}{6}, \xi_1 \in (x, x+h_r) \\
- f(x-h_l) = f(x) - h_l f'(x) + {h_l}^2 \frac{f''(x)}{2} - {h_l}^3 \frac{f'''(\xi_2)}{6}, \xi_2 \in (x, x-h_l) \\
- \end{aligned}
- Using the fact that :math:`f \in C^3` and solving the linear system, we derive:
- .. math::
- f'(x) \approx \frac{ {h_l}^2 f(x+h_r) - {h_r}^2 f(x-h_l)
- + ({h_r}^2-{h_l}^2 ) f(x) }{ {h_r} {h_l}^2 + {h_r}^2 {h_l} }
- .. note::
- We estimate the gradient of functions in complex domain
- :math:`g : \mathbb{C}^n \rightarrow \mathbb{C}` in the same way.
- The value of each partial derivative at the boundary points is computed differently. See edge_order below.
- Args:
- input (``Tensor``): the tensor that represents the values of the function
- Keyword args:
- spacing (``scalar``, ``list of scalar``, ``list of Tensor``, optional): :attr:`spacing` can be used to modify
- how the :attr:`input` tensor's indices relate to sample coordinates. If :attr:`spacing` is a scalar then
- the indices are multiplied by the scalar to produce the coordinates. For example, if :attr:`spacing=2` the
- indices (1, 2, 3) become coordinates (2, 4, 6). If :attr:`spacing` is a list of scalars then the corresponding
- indices are multiplied. For example, if :attr:`spacing=(2, -1, 3)` the indices (1, 2, 3) become coordinates (2, -2, 9).
- Finally, if :attr:`spacing` is a list of one-dimensional tensors then each tensor specifies the coordinates for
- the corresponding dimension. For example, if the indices are (1, 2, 3) and the tensors are (t0, t1, t2), then
- the coordinates are (t0[1], t1[2], t2[3])
- dim (``int``, ``list of int``, optional): the dimension or dimensions to approximate the gradient over. By default
- the partial gradient in every dimension is computed. Note that when :attr:`dim` is specified the elements of
- the :attr:`spacing` argument must correspond with the specified dims."
- edge_order (``int``, optional): 1 or 2, for `first-order
- <https://www.ams.org/journals/mcom/1988-51-184/S0025-5718-1988-0935077-0/S0025-5718-1988-0935077-0.pdf>`_ or
- `second-order <https://www.ams.org/journals/mcom/1988-51-184/S0025-5718-1988-0935077-0/S0025-5718-1988-0935077-0.pdf>`_
- estimation of the boundary ("edge") values, respectively. Note that when :attr:`edge_order` is specified, each
- dimension size of :attr:`input` should be at least edge_order+1
- Examples::
- >>> # Estimates the gradient of f(x)=x^2 at points [-2, -1, 2, 4]
- >>> coordinates = (torch.tensor([-2., -1., 1., 4.]),)
- >>> values = torch.tensor([4., 1., 1., 16.], )
- >>> torch.gradient(values, spacing = coordinates)
- (tensor([-3., -2., 2., 5.]),)
- >>> # Estimates the gradient of the R^2 -> R function whose samples are
- >>> # described by the tensor t. Implicit coordinates are [0, 1] for the outermost
- >>> # dimension and [0, 1, 2, 3] for the innermost dimension, and function estimates
- >>> # partial derivative for both dimensions.
- >>> t = torch.tensor([[1, 2, 4, 8], [10, 20, 40, 80]])
- >>> torch.gradient(t)
- (tensor([[ 9., 18., 36., 72.],
- [ 9., 18., 36., 72.]]),
- tensor([[ 1.0000, 1.5000, 3.0000, 4.0000],
- [10.0000, 15.0000, 30.0000, 40.0000]]))
- >>> # A scalar value for spacing modifies the relationship between tensor indices
- >>> # and input coordinates by multiplying the indices to find the
- >>> # coordinates. For example, below the indices of the innermost
- >>> # 0, 1, 2, 3 translate to coordinates of [0, 2, 4, 6], and the indices of
- >>> # the outermost dimension 0, 1 translate to coordinates of [0, 2].
- >>> torch.gradient(t, spacing = 2.0) # dim = None (implicitly [0, 1])
- (tensor([[ 4.5000, 9.0000, 18.0000, 36.0000],
- [ 4.5000, 9.0000, 18.0000, 36.0000]]),
- tensor([[ 0.5000, 0.7500, 1.5000, 2.0000],
- [ 5.0000, 7.5000, 15.0000, 20.0000]]))
- >>> # doubling the spacing between samples halves the estimated partial gradients.
- >>>
- >>> # Estimates only the partial derivative for dimension 1
- >>> torch.gradient(t, dim = 1) # spacing = None (implicitly 1.)
- (tensor([[ 1.0000, 1.5000, 3.0000, 4.0000],
- [10.0000, 15.0000, 30.0000, 40.0000]]),)
- >>> # When spacing is a list of scalars, the relationship between the tensor
- >>> # indices and input coordinates changes based on dimension.
- >>> # For example, below, the indices of the innermost dimension 0, 1, 2, 3 translate
- >>> # to coordinates of [0, 3, 6, 9], and the indices of the outermost dimension
- >>> # 0, 1 translate to coordinates of [0, 2].
- >>> torch.gradient(t, spacing = [3., 2.])
- (tensor([[ 4.5000, 9.0000, 18.0000, 36.0000],
- [ 4.5000, 9.0000, 18.0000, 36.0000]]),
- tensor([[ 0.3333, 0.5000, 1.0000, 1.3333],
- [ 3.3333, 5.0000, 10.0000, 13.3333]]))
- >>> # The following example is a replication of the previous one with explicit
- >>> # coordinates.
- >>> coords = (torch.tensor([0, 2]), torch.tensor([0, 3, 6, 9]))
- >>> torch.gradient(t, spacing = coords)
- (tensor([[ 4.5000, 9.0000, 18.0000, 36.0000],
- [ 4.5000, 9.0000, 18.0000, 36.0000]]),
- tensor([[ 0.3333, 0.5000, 1.0000, 1.3333],
- [ 3.3333, 5.0000, 10.0000, 13.3333]]))
- """
- @overload
- def gradient(
- input: Tensor,
- *,
- spacing: Sequence[Number | _complex],
- dim: _size,
- edge_order: _int = 1,
- ) -> tuple[Tensor, ...]:
- r"""
- gradient(input, *, spacing=1, dim=None, edge_order=1) -> List of Tensors
- Estimates the gradient of a function :math:`g : \mathbb{R}^n \rightarrow \mathbb{R}` in
- one or more dimensions using the `second-order accurate central differences method
- <https://www.ams.org/journals/mcom/1988-51-184/S0025-5718-1988-0935077-0/S0025-5718-1988-0935077-0.pdf>`_ and
- either first or second order estimates at the boundaries.
- The gradient of :math:`g` is estimated using samples. By default, when :attr:`spacing` is not
- specified, the samples are entirely described by :attr:`input`, and the mapping of input coordinates
- to an output is the same as the tensor's mapping of indices to values. For example, for a three-dimensional
- :attr:`input` the function described is :math:`g : \mathbb{R}^3 \rightarrow \mathbb{R}`, and
- :math:`g(1, 2, 3)\ == input[1, 2, 3]`.
- When :attr:`spacing` is specified, it modifies the relationship between :attr:`input` and input coordinates.
- This is detailed in the "Keyword Arguments" section below.
- The gradient is estimated by estimating each partial derivative of :math:`g` independently. This estimation is
- accurate if :math:`g` is in :math:`C^3` (it has at least 3 continuous derivatives), and the estimation can be
- improved by providing closer samples. Mathematically, the value at each interior point of a partial derivative
- is estimated using `Taylor's theorem with remainder <https://en.wikipedia.org/wiki/Taylor%27s_theorem>`_.
- Letting :math:`x` be an interior point with :math:`x-h_l` and :math:`x+h_r` be points neighboring
- it to the left and right respectively, :math:`f(x+h_r)` and :math:`f(x-h_l)` can be estimated using:
- .. math::
- \begin{aligned}
- f(x+h_r) = f(x) + h_r f'(x) + {h_r}^2 \frac{f''(x)}{2} + {h_r}^3 \frac{f'''(\xi_1)}{6}, \xi_1 \in (x, x+h_r) \\
- f(x-h_l) = f(x) - h_l f'(x) + {h_l}^2 \frac{f''(x)}{2} - {h_l}^3 \frac{f'''(\xi_2)}{6}, \xi_2 \in (x, x-h_l) \\
- \end{aligned}
- Using the fact that :math:`f \in C^3` and solving the linear system, we derive:
- .. math::
- f'(x) \approx \frac{ {h_l}^2 f(x+h_r) - {h_r}^2 f(x-h_l)
- + ({h_r}^2-{h_l}^2 ) f(x) }{ {h_r} {h_l}^2 + {h_r}^2 {h_l} }
- .. note::
- We estimate the gradient of functions in complex domain
- :math:`g : \mathbb{C}^n \rightarrow \mathbb{C}` in the same way.
- The value of each partial derivative at the boundary points is computed differently. See edge_order below.
- Args:
- input (``Tensor``): the tensor that represents the values of the function
- Keyword args:
- spacing (``scalar``, ``list of scalar``, ``list of Tensor``, optional): :attr:`spacing` can be used to modify
- how the :attr:`input` tensor's indices relate to sample coordinates. If :attr:`spacing` is a scalar then
- the indices are multiplied by the scalar to produce the coordinates. For example, if :attr:`spacing=2` the
- indices (1, 2, 3) become coordinates (2, 4, 6). If :attr:`spacing` is a list of scalars then the corresponding
- indices are multiplied. For example, if :attr:`spacing=(2, -1, 3)` the indices (1, 2, 3) become coordinates (2, -2, 9).
- Finally, if :attr:`spacing` is a list of one-dimensional tensors then each tensor specifies the coordinates for
- the corresponding dimension. For example, if the indices are (1, 2, 3) and the tensors are (t0, t1, t2), then
- the coordinates are (t0[1], t1[2], t2[3])
- dim (``int``, ``list of int``, optional): the dimension or dimensions to approximate the gradient over. By default
- the partial gradient in every dimension is computed. Note that when :attr:`dim` is specified the elements of
- the :attr:`spacing` argument must correspond with the specified dims."
- edge_order (``int``, optional): 1 or 2, for `first-order
- <https://www.ams.org/journals/mcom/1988-51-184/S0025-5718-1988-0935077-0/S0025-5718-1988-0935077-0.pdf>`_ or
- `second-order <https://www.ams.org/journals/mcom/1988-51-184/S0025-5718-1988-0935077-0/S0025-5718-1988-0935077-0.pdf>`_
- estimation of the boundary ("edge") values, respectively. Note that when :attr:`edge_order` is specified, each
- dimension size of :attr:`input` should be at least edge_order+1
- Examples::
- >>> # Estimates the gradient of f(x)=x^2 at points [-2, -1, 2, 4]
- >>> coordinates = (torch.tensor([-2., -1., 1., 4.]),)
- >>> values = torch.tensor([4., 1., 1., 16.], )
- >>> torch.gradient(values, spacing = coordinates)
- (tensor([-3., -2., 2., 5.]),)
- >>> # Estimates the gradient of the R^2 -> R function whose samples are
- >>> # described by the tensor t. Implicit coordinates are [0, 1] for the outermost
- >>> # dimension and [0, 1, 2, 3] for the innermost dimension, and function estimates
- >>> # partial derivative for both dimensions.
- >>> t = torch.tensor([[1, 2, 4, 8], [10, 20, 40, 80]])
- >>> torch.gradient(t)
- (tensor([[ 9., 18., 36., 72.],
- [ 9., 18., 36., 72.]]),
- tensor([[ 1.0000, 1.5000, 3.0000, 4.0000],
- [10.0000, 15.0000, 30.0000, 40.0000]]))
- >>> # A scalar value for spacing modifies the relationship between tensor indices
- >>> # and input coordinates by multiplying the indices to find the
- >>> # coordinates. For example, below the indices of the innermost
- >>> # 0, 1, 2, 3 translate to coordinates of [0, 2, 4, 6], and the indices of
- >>> # the outermost dimension 0, 1 translate to coordinates of [0, 2].
- >>> torch.gradient(t, spacing = 2.0) # dim = None (implicitly [0, 1])
- (tensor([[ 4.5000, 9.0000, 18.0000, 36.0000],
- [ 4.5000, 9.0000, 18.0000, 36.0000]]),
- tensor([[ 0.5000, 0.7500, 1.5000, 2.0000],
- [ 5.0000, 7.5000, 15.0000, 20.0000]]))
- >>> # doubling the spacing between samples halves the estimated partial gradients.
- >>>
- >>> # Estimates only the partial derivative for dimension 1
- >>> torch.gradient(t, dim = 1) # spacing = None (implicitly 1.)
- (tensor([[ 1.0000, 1.5000, 3.0000, 4.0000],
- [10.0000, 15.0000, 30.0000, 40.0000]]),)
- >>> # When spacing is a list of scalars, the relationship between the tensor
- >>> # indices and input coordinates changes based on dimension.
- >>> # For example, below, the indices of the innermost dimension 0, 1, 2, 3 translate
- >>> # to coordinates of [0, 3, 6, 9], and the indices of the outermost dimension
- >>> # 0, 1 translate to coordinates of [0, 2].
- >>> torch.gradient(t, spacing = [3., 2.])
- (tensor([[ 4.5000, 9.0000, 18.0000, 36.0000],
- [ 4.5000, 9.0000, 18.0000, 36.0000]]),
- tensor([[ 0.3333, 0.5000, 1.0000, 1.3333],
- [ 3.3333, 5.0000, 10.0000, 13.3333]]))
- >>> # The following example is a replication of the previous one with explicit
- >>> # coordinates.
- >>> coords = (torch.tensor([0, 2]), torch.tensor([0, 3, 6, 9]))
- >>> torch.gradient(t, spacing = coords)
- (tensor([[ 4.5000, 9.0000, 18.0000, 36.0000],
- [ 4.5000, 9.0000, 18.0000, 36.0000]]),
- tensor([[ 0.3333, 0.5000, 1.0000, 1.3333],
- [ 3.3333, 5.0000, 10.0000, 13.3333]]))
- """
- @overload
- def gradient(
- input: Tensor,
- *,
- spacing: tuple[Tensor, ...] | list[Tensor] | None,
- dim: _int | None = None,
- edge_order: _int = 1,
- ) -> tuple[Tensor, ...]:
- r"""
- gradient(input, *, spacing=1, dim=None, edge_order=1) -> List of Tensors
- Estimates the gradient of a function :math:`g : \mathbb{R}^n \rightarrow \mathbb{R}` in
- one or more dimensions using the `second-order accurate central differences method
- <https://www.ams.org/journals/mcom/1988-51-184/S0025-5718-1988-0935077-0/S0025-5718-1988-0935077-0.pdf>`_ and
- either first or second order estimates at the boundaries.
- The gradient of :math:`g` is estimated using samples. By default, when :attr:`spacing` is not
- specified, the samples are entirely described by :attr:`input`, and the mapping of input coordinates
- to an output is the same as the tensor's mapping of indices to values. For example, for a three-dimensional
- :attr:`input` the function described is :math:`g : \mathbb{R}^3 \rightarrow \mathbb{R}`, and
- :math:`g(1, 2, 3)\ == input[1, 2, 3]`.
- When :attr:`spacing` is specified, it modifies the relationship between :attr:`input` and input coordinates.
- This is detailed in the "Keyword Arguments" section below.
- The gradient is estimated by estimating each partial derivative of :math:`g` independently. This estimation is
- accurate if :math:`g` is in :math:`C^3` (it has at least 3 continuous derivatives), and the estimation can be
- improved by providing closer samples. Mathematically, the value at each interior point of a partial derivative
- is estimated using `Taylor's theorem with remainder <https://en.wikipedia.org/wiki/Taylor%27s_theorem>`_.
- Letting :math:`x` be an interior point with :math:`x-h_l` and :math:`x+h_r` be points neighboring
- it to the left and right respectively, :math:`f(x+h_r)` and :math:`f(x-h_l)` can be estimated using:
- .. math::
- \begin{aligned}
- f(x+h_r) = f(x) + h_r f'(x) + {h_r}^2 \frac{f''(x)}{2} + {h_r}^3 \frac{f'''(\xi_1)}{6}, \xi_1 \in (x, x+h_r) \\
- f(x-h_l) = f(x) - h_l f'(x) + {h_l}^2 \frac{f''(x)}{2} - {h_l}^3 \frac{f'''(\xi_2)}{6}, \xi_2 \in (x, x-h_l) \\
- \end{aligned}
- Using the fact that :math:`f \in C^3` and solving the linear system, we derive:
- .. math::
- f'(x) \approx \frac{ {h_l}^2 f(x+h_r) - {h_r}^2 f(x-h_l)
- + ({h_r}^2-{h_l}^2 ) f(x) }{ {h_r} {h_l}^2 + {h_r}^2 {h_l} }
- .. note::
- We estimate the gradient of functions in complex domain
- :math:`g : \mathbb{C}^n \rightarrow \mathbb{C}` in the same way.
- The value of each partial derivative at the boundary points is computed differently. See edge_order below.
- Args:
- input (``Tensor``): the tensor that represents the values of the function
- Keyword args:
- spacing (``scalar``, ``list of scalar``, ``list of Tensor``, optional): :attr:`spacing` can be used to modify
- how the :attr:`input` tensor's indices relate to sample coordinates. If :attr:`spacing` is a scalar then
- the indices are multiplied by the scalar to produce the coordinates. For example, if :attr:`spacing=2` the
- indices (1, 2, 3) become coordinates (2, 4, 6). If :attr:`spacing` is a list of scalars then the corresponding
- indices are multiplied. For example, if :attr:`spacing=(2, -1, 3)` the indices (1, 2, 3) become coordinates (2, -2, 9).
- Finally, if :attr:`spacing` is a list of one-dimensional tensors then each tensor specifies the coordinates for
- the corresponding dimension. For example, if the indices are (1, 2, 3) and the tensors are (t0, t1, t2), then
- the coordinates are (t0[1], t1[2], t2[3])
- dim (``int``, ``list of int``, optional): the dimension or dimensions to approximate the gradient over. By default
- the partial gradient in every dimension is computed. Note that when :attr:`dim` is specified the elements of
- the :attr:`spacing` argument must correspond with the specified dims."
- edge_order (``int``, optional): 1 or 2, for `first-order
- <https://www.ams.org/journals/mcom/1988-51-184/S0025-5718-1988-0935077-0/S0025-5718-1988-0935077-0.pdf>`_ or
- `second-order <https://www.ams.org/journals/mcom/1988-51-184/S0025-5718-1988-0935077-0/S0025-5718-1988-0935077-0.pdf>`_
- estimation of the boundary ("edge") values, respectively. Note that when :attr:`edge_order` is specified, each
- dimension size of :attr:`input` should be at least edge_order+1
- Examples::
- >>> # Estimates the gradient of f(x)=x^2 at points [-2, -1, 2, 4]
- >>> coordinates = (torch.tensor([-2., -1., 1., 4.]),)
- >>> values = torch.tensor([4., 1., 1., 16.], )
- >>> torch.gradient(values, spacing = coordinates)
- (tensor([-3., -2., 2., 5.]),)
- >>> # Estimates the gradient of the R^2 -> R function whose samples are
- >>> # described by the tensor t. Implicit coordinates are [0, 1] for the outermost
- >>> # dimension and [0, 1, 2, 3] for the innermost dimension, and function estimates
- >>> # partial derivative for both dimensions.
- >>> t = torch.tensor([[1, 2, 4, 8], [10, 20, 40, 80]])
- >>> torch.gradient(t)
- (tensor([[ 9., 18., 36., 72.],
- [ 9., 18., 36., 72.]]),
- tensor([[ 1.0000, 1.5000, 3.0000, 4.0000],
- [10.0000, 15.0000, 30.0000, 40.0000]]))
- >>> # A scalar value for spacing modifies the relationship between tensor indices
- >>> # and input coordinates by multiplying the indices to find the
- >>> # coordinates. For example, below the indices of the innermost
- >>> # 0, 1, 2, 3 translate to coordinates of [0, 2, 4, 6], and the indices of
- >>> # the outermost dimension 0, 1 translate to coordinates of [0, 2].
- >>> torch.gradient(t, spacing = 2.0) # dim = None (implicitly [0, 1])
- (tensor([[ 4.5000, 9.0000, 18.0000, 36.0000],
- [ 4.5000, 9.0000, 18.0000, 36.0000]]),
- tensor([[ 0.5000, 0.7500, 1.5000, 2.0000],
- [ 5.0000, 7.5000, 15.0000, 20.0000]]))
- >>> # doubling the spacing between samples halves the estimated partial gradients.
- >>>
- >>> # Estimates only the partial derivative for dimension 1
- >>> torch.gradient(t, dim = 1) # spacing = None (implicitly 1.)
- (tensor([[ 1.0000, 1.5000, 3.0000, 4.0000],
- [10.0000, 15.0000, 30.0000, 40.0000]]),)
- >>> # When spacing is a list of scalars, the relationship between the tensor
- >>> # indices and input coordinates changes based on dimension.
- >>> # For example, below, the indices of the innermost dimension 0, 1, 2, 3 translate
- >>> # to coordinates of [0, 3, 6, 9], and the indices of the outermost dimension
- >>> # 0, 1 translate to coordinates of [0, 2].
- >>> torch.gradient(t, spacing = [3., 2.])
- (tensor([[ 4.5000, 9.0000, 18.0000, 36.0000],
- [ 4.5000, 9.0000, 18.0000, 36.0000]]),
- tensor([[ 0.3333, 0.5000, 1.0000, 1.3333],
- [ 3.3333, 5.0000, 10.0000, 13.3333]]))
- >>> # The following example is a replication of the previous one with explicit
- >>> # coordinates.
- >>> coords = (torch.tensor([0, 2]), torch.tensor([0, 3, 6, 9]))
- >>> torch.gradient(t, spacing = coords)
- (tensor([[ 4.5000, 9.0000, 18.0000, 36.0000],
- [ 4.5000, 9.0000, 18.0000, 36.0000]]),
- tensor([[ 0.3333, 0.5000, 1.0000, 1.3333],
- [ 3.3333, 5.0000, 10.0000, 13.3333]]))
- """
- @overload
- def gradient(
- input: Tensor,
- *,
- spacing: Number | _complex,
- dim: _size,
- edge_order: _int = 1,
- ) -> tuple[Tensor, ...]:
- r"""
- gradient(input, *, spacing=1, dim=None, edge_order=1) -> List of Tensors
- Estimates the gradient of a function :math:`g : \mathbb{R}^n \rightarrow \mathbb{R}` in
- one or more dimensions using the `second-order accurate central differences method
- <https://www.ams.org/journals/mcom/1988-51-184/S0025-5718-1988-0935077-0/S0025-5718-1988-0935077-0.pdf>`_ and
- either first or second order estimates at the boundaries.
- The gradient of :math:`g` is estimated using samples. By default, when :attr:`spacing` is not
- specified, the samples are entirely described by :attr:`input`, and the mapping of input coordinates
- to an output is the same as the tensor's mapping of indices to values. For example, for a three-dimensional
- :attr:`input` the function described is :math:`g : \mathbb{R}^3 \rightarrow \mathbb{R}`, and
- :math:`g(1, 2, 3)\ == input[1, 2, 3]`.
- When :attr:`spacing` is specified, it modifies the relationship between :attr:`input` and input coordinates.
- This is detailed in the "Keyword Arguments" section below.
- The gradient is estimated by estimating each partial derivative of :math:`g` independently. This estimation is
- accurate if :math:`g` is in :math:`C^3` (it has at least 3 continuous derivatives), and the estimation can be
- improved by providing closer samples. Mathematically, the value at each interior point of a partial derivative
- is estimated using `Taylor's theorem with remainder <https://en.wikipedia.org/wiki/Taylor%27s_theorem>`_.
- Letting :math:`x` be an interior point with :math:`x-h_l` and :math:`x+h_r` be points neighboring
- it to the left and right respectively, :math:`f(x+h_r)` and :math:`f(x-h_l)` can be estimated using:
- .. math::
- \begin{aligned}
- f(x+h_r) = f(x) + h_r f'(x) + {h_r}^2 \frac{f''(x)}{2} + {h_r}^3 \frac{f'''(\xi_1)}{6}, \xi_1 \in (x, x+h_r) \\
- f(x-h_l) = f(x) - h_l f'(x) + {h_l}^2 \frac{f''(x)}{2} - {h_l}^3 \frac{f'''(\xi_2)}{6}, \xi_2 \in (x, x-h_l) \\
- \end{aligned}
- Using the fact that :math:`f \in C^3` and solving the linear system, we derive:
- .. math::
- f'(x) \approx \frac{ {h_l}^2 f(x+h_r) - {h_r}^2 f(x-h_l)
- + ({h_r}^2-{h_l}^2 ) f(x) }{ {h_r} {h_l}^2 + {h_r}^2 {h_l} }
- .. note::
- We estimate the gradient of functions in complex domain
- :math:`g : \mathbb{C}^n \rightarrow \mathbb{C}` in the same way.
- The value of each partial derivative at the boundary points is computed differently. See edge_order below.
- Args:
- input (``Tensor``): the tensor that represents the values of the function
- Keyword args:
- spacing (``scalar``, ``list of scalar``, ``list of Tensor``, optional): :attr:`spacing` can be used to modify
- how the :attr:`input` tensor's indices relate to sample coordinates. If :attr:`spacing` is a scalar then
- the indices are multiplied by the scalar to produce the coordinates. For example, if :attr:`spacing=2` the
- indices (1, 2, 3) become coordinates (2, 4, 6). If :attr:`spacing` is a list of scalars then the corresponding
- indices are multiplied. For example, if :attr:`spacing=(2, -1, 3)` the indices (1, 2, 3) become coordinates (2, -2, 9).
- Finally, if :attr:`spacing` is a list of one-dimensional tensors then each tensor specifies the coordinates for
- the corresponding dimension. For example, if the indices are (1, 2, 3) and the tensors are (t0, t1, t2), then
- the coordinates are (t0[1], t1[2], t2[3])
- dim (``int``, ``list of int``, optional): the dimension or dimensions to approximate the gradient over. By default
- the partial gradient in every dimension is computed. Note that when :attr:`dim` is specified the elements of
- the :attr:`spacing` argument must correspond with the specified dims."
- edge_order (``int``, optional): 1 or 2, for `first-order
- <https://www.ams.org/journals/mcom/1988-51-184/S0025-5718-1988-0935077-0/S0025-5718-1988-0935077-0.pdf>`_ or
- `second-order <https://www.ams.org/journals/mcom/1988-51-184/S0025-5718-1988-0935077-0/S0025-5718-1988-0935077-0.pdf>`_
- estimation of the boundary ("edge") values, respectively. Note that when :attr:`edge_order` is specified, each
- dimension size of :attr:`input` should be at least edge_order+1
- Examples::
- >>> # Estimates the gradient of f(x)=x^2 at points [-2, -1, 2, 4]
- >>> coordinates = (torch.tensor([-2., -1., 1., 4.]),)
- >>> values = torch.tensor([4., 1., 1., 16.], )
- >>> torch.gradient(values, spacing = coordinates)
- (tensor([-3., -2., 2., 5.]),)
- >>> # Estimates the gradient of the R^2 -> R function whose samples are
- >>> # described by the tensor t. Implicit coordinates are [0, 1] for the outermost
- >>> # dimension and [0, 1, 2, 3] for the innermost dimension, and function estimates
- >>> # partial derivative for both dimensions.
- >>> t = torch.tensor([[1, 2, 4, 8], [10, 20, 40, 80]])
- >>> torch.gradient(t)
- (tensor([[ 9., 18., 36., 72.],
- [ 9., 18., 36., 72.]]),
- tensor([[ 1.0000, 1.5000, 3.0000, 4.0000],
- [10.0000, 15.0000, 30.0000, 40.0000]]))
- >>> # A scalar value for spacing modifies the relationship between tensor indices
- >>> # and input coordinates by multiplying the indices to find the
- >>> # coordinates. For example, below the indices of the innermost
- >>> # 0, 1, 2, 3 translate to coordinates of [0, 2, 4, 6], and the indices of
- >>> # the outermost dimension 0, 1 translate to coordinates of [0, 2].
- >>> torch.gradient(t, spacing = 2.0) # dim = None (implicitly [0, 1])
- (tensor([[ 4.5000, 9.0000, 18.0000, 36.0000],
- [ 4.5000, 9.0000, 18.0000, 36.0000]]),
- tensor([[ 0.5000, 0.7500, 1.5000, 2.0000],
- [ 5.0000, 7.5000, 15.0000, 20.0000]]))
- >>> # doubling the spacing between samples halves the estimated partial gradients.
- >>>
- >>> # Estimates only the partial derivative for dimension 1
- >>> torch.gradient(t, dim = 1) # spacing = None (implicitly 1.)
- (tensor([[ 1.0000, 1.5000, 3.0000, 4.0000],
- [10.0000, 15.0000, 30.0000, 40.0000]]),)
- >>> # When spacing is a list of scalars, the relationship between the tensor
- >>> # indices and input coordinates changes based on dimension.
- >>> # For example, below, the indices of the innermost dimension 0, 1, 2, 3 translate
- >>> # to coordinates of [0, 3, 6, 9], and the indices of the outermost dimension
- >>> # 0, 1 translate to coordinates of [0, 2].
- >>> torch.gradient(t, spacing = [3., 2.])
- (tensor([[ 4.5000, 9.0000, 18.0000, 36.0000],
- [ 4.5000, 9.0000, 18.0000, 36.0000]]),
- tensor([[ 0.3333, 0.5000, 1.0000, 1.3333],
- [ 3.3333, 5.0000, 10.0000, 13.3333]]))
- >>> # The following example is a replication of the previous one with explicit
- >>> # coordinates.
- >>> coords = (torch.tensor([0, 2]), torch.tensor([0, 3, 6, 9]))
- >>> torch.gradient(t, spacing = coords)
- (tensor([[ 4.5000, 9.0000, 18.0000, 36.0000],
- [ 4.5000, 9.0000, 18.0000, 36.0000]]),
- tensor([[ 0.3333, 0.5000, 1.0000, 1.3333],
- [ 3.3333, 5.0000, 10.0000, 13.3333]]))
- """
- @overload
- def gradient(
- input: Tensor,
- *,
- spacing: tuple[Tensor, ...] | list[Tensor] | None,
- dim: _size,
- edge_order: _int = 1,
- ) -> tuple[Tensor, ...]:
- r"""
- gradient(input, *, spacing=1, dim=None, edge_order=1) -> List of Tensors
- Estimates the gradient of a function :math:`g : \mathbb{R}^n \rightarrow \mathbb{R}` in
- one or more dimensions using the `second-order accurate central differences method
- <https://www.ams.org/journals/mcom/1988-51-184/S0025-5718-1988-0935077-0/S0025-5718-1988-0935077-0.pdf>`_ and
- either first or second order estimates at the boundaries.
- The gradient of :math:`g` is estimated using samples. By default, when :attr:`spacing` is not
- specified, the samples are entirely described by :attr:`input`, and the mapping of input coordinates
- to an output is the same as the tensor's mapping of indices to values. For example, for a three-dimensional
- :attr:`input` the function described is :math:`g : \mathbb{R}^3 \rightarrow \mathbb{R}`, and
- :math:`g(1, 2, 3)\ == input[1, 2, 3]`.
- When :attr:`spacing` is specified, it modifies the relationship between :attr:`input` and input coordinates.
- This is detailed in the "Keyword Arguments" section below.
- The gradient is estimated by estimating each partial derivative of :math:`g` independently. This estimation is
- accurate if :math:`g` is in :math:`C^3` (it has at least 3 continuous derivatives), and the estimation can be
- improved by providing closer samples. Mathematically, the value at each interior point of a partial derivative
- is estimated using `Taylor's theorem with remainder <https://en.wikipedia.org/wiki/Taylor%27s_theorem>`_.
- Letting :math:`x` be an interior point with :math:`x-h_l` and :math:`x+h_r` be points neighboring
- it to the left and right respectively, :math:`f(x+h_r)` and :math:`f(x-h_l)` can be estimated using:
- .. math::
- \begin{aligned}
- f(x+h_r) = f(x) + h_r f'(x) + {h_r}^2 \frac{f''(x)}{2} + {h_r}^3 \frac{f'''(\xi_1)}{6}, \xi_1 \in (x, x+h_r) \\
- f(x-h_l) = f(x) - h_l f'(x) + {h_l}^2 \frac{f''(x)}{2} - {h_l}^3 \frac{f'''(\xi_2)}{6}, \xi_2 \in (x, x-h_l) \\
- \end{aligned}
- Using the fact that :math:`f \in C^3` and solving the linear system, we derive:
- .. math::
- f'(x) \approx \frac{ {h_l}^2 f(x+h_r) - {h_r}^2 f(x-h_l)
- + ({h_r}^2-{h_l}^2 ) f(x) }{ {h_r} {h_l}^2 + {h_r}^2 {h_l} }
- .. note::
- We estimate the gradient of functions in complex domain
- :math:`g : \mathbb{C}^n \rightarrow \mathbb{C}` in the same way.
- The value of each partial derivative at the boundary points is computed differently. See edge_order below.
- Args:
- input (``Tensor``): the tensor that represents the values of the function
- Keyword args:
- spacing (``scalar``, ``list of scalar``, ``list of Tensor``, optional): :attr:`spacing` can be used to modify
- how the :attr:`input` tensor's indices relate to sample coordinates. If :attr:`spacing` is a scalar then
- the indices are multiplied by the scalar to produce the coordinates. For example, if :attr:`spacing=2` the
- indices (1, 2, 3) become coordinates (2, 4, 6). If :attr:`spacing` is a list of scalars then the corresponding
- indices are multiplied. For example, if :attr:`spacing=(2, -1, 3)` the indices (1, 2, 3) become coordinates (2, -2, 9).
- Finally, if :attr:`spacing` is a list of one-dimensional tensors then each tensor specifies the coordinates for
- the corresponding dimension. For example, if the indices are (1, 2, 3) and the tensors are (t0, t1, t2), then
- the coordinates are (t0[1], t1[2], t2[3])
- dim (``int``, ``list of int``, optional): the dimension or dimensions to approximate the gradient over. By default
- the partial gradient in every dimension is computed. Note that when :attr:`dim` is specified the elements of
- the :attr:`spacing` argument must correspond with the specified dims."
- edge_order (``int``, optional): 1 or 2, for `first-order
- <https://www.ams.org/journals/mcom/1988-51-184/S0025-5718-1988-0935077-0/S0025-5718-1988-0935077-0.pdf>`_ or
- `second-order <https://www.ams.org/journals/mcom/1988-51-184/S0025-5718-1988-0935077-0/S0025-5718-1988-0935077-0.pdf>`_
- estimation of the boundary ("edge") values, respectively. Note that when :attr:`edge_order` is specified, each
- dimension size of :attr:`input` should be at least edge_order+1
- Examples::
- >>> # Estimates the gradient of f(x)=x^2 at points [-2, -1, 2, 4]
- >>> coordinates = (torch.tensor([-2., -1., 1., 4.]),)
- >>> values = torch.tensor([4., 1., 1., 16.], )
- >>> torch.gradient(values, spacing = coordinates)
- (tensor([-3., -2., 2., 5.]),)
- >>> # Estimates the gradient of the R^2 -> R function whose samples are
- >>> # described by the tensor t. Implicit coordinates are [0, 1] for the outermost
- >>> # dimension and [0, 1, 2, 3] for the innermost dimension, and function estimates
- >>> # partial derivative for both dimensions.
- >>> t = torch.tensor([[1, 2, 4, 8], [10, 20, 40, 80]])
- >>> torch.gradient(t)
- (tensor([[ 9., 18., 36., 72.],
- [ 9., 18., 36., 72.]]),
- tensor([[ 1.0000, 1.5000, 3.0000, 4.0000],
- [10.0000, 15.0000, 30.0000, 40.0000]]))
- >>> # A scalar value for spacing modifies the relationship between tensor indices
- >>> # and input coordinates by multiplying the indices to find the
- >>> # coordinates. For example, below the indices of the innermost
- >>> # 0, 1, 2, 3 translate to coordinates of [0, 2, 4, 6], and the indices of
- >>> # the outermost dimension 0, 1 translate to coordinates of [0, 2].
- >>> torch.gradient(t, spacing = 2.0) # dim = None (implicitly [0, 1])
- (tensor([[ 4.5000, 9.0000, 18.0000, 36.0000],
- [ 4.5000, 9.0000, 18.0000, 36.0000]]),
- tensor([[ 0.5000, 0.7500, 1.5000, 2.0000],
- [ 5.0000, 7.5000, 15.0000, 20.0000]]))
- >>> # doubling the spacing between samples halves the estimated partial gradients.
- >>>
- >>> # Estimates only the partial derivative for dimension 1
- >>> torch.gradient(t, dim = 1) # spacing = None (implicitly 1.)
- (tensor([[ 1.0000, 1.5000, 3.0000, 4.0000],
- [10.0000, 15.0000, 30.0000, 40.0000]]),)
- >>> # When spacing is a list of scalars, the relationship between the tensor
- >>> # indices and input coordinates changes based on dimension.
- >>> # For example, below, the indices of the innermost dimension 0, 1, 2, 3 translate
- >>> # to coordinates of [0, 3, 6, 9], and the indices of the outermost dimension
- >>> # 0, 1 translate to coordinates of [0, 2].
- >>> torch.gradient(t, spacing = [3., 2.])
- (tensor([[ 4.5000, 9.0000, 18.0000, 36.0000],
- [ 4.5000, 9.0000, 18.0000, 36.0000]]),
- tensor([[ 0.3333, 0.5000, 1.0000, 1.3333],
- [ 3.3333, 5.0000, 10.0000, 13.3333]]))
- >>> # The following example is a replication of the previous one with explicit
- >>> # coordinates.
- >>> coords = (torch.tensor([0, 2]), torch.tensor([0, 3, 6, 9]))
- >>> torch.gradient(t, spacing = coords)
- (tensor([[ 4.5000, 9.0000, 18.0000, 36.0000],
- [ 4.5000, 9.0000, 18.0000, 36.0000]]),
- tensor([[ 0.3333, 0.5000, 1.0000, 1.3333],
- [ 3.3333, 5.0000, 10.0000, 13.3333]]))
- """
- @overload
- def gradient(
- input: Tensor,
- *,
- dim: _size,
- edge_order: _int = 1,
- ) -> tuple[Tensor, ...]:
- r"""
- gradient(input, *, spacing=1, dim=None, edge_order=1) -> List of Tensors
- Estimates the gradient of a function :math:`g : \mathbb{R}^n \rightarrow \mathbb{R}` in
- one or more dimensions using the `second-order accurate central differences method
- <https://www.ams.org/journals/mcom/1988-51-184/S0025-5718-1988-0935077-0/S0025-5718-1988-0935077-0.pdf>`_ and
- either first or second order estimates at the boundaries.
- The gradient of :math:`g` is estimated using samples. By default, when :attr:`spacing` is not
- specified, the samples are entirely described by :attr:`input`, and the mapping of input coordinates
- to an output is the same as the tensor's mapping of indices to values. For example, for a three-dimensional
- :attr:`input` the function described is :math:`g : \mathbb{R}^3 \rightarrow \mathbb{R}`, and
- :math:`g(1, 2, 3)\ == input[1, 2, 3]`.
- When :attr:`spacing` is specified, it modifies the relationship between :attr:`input` and input coordinates.
- This is detailed in the "Keyword Arguments" section below.
- The gradient is estimated by estimating each partial derivative of :math:`g` independently. This estimation is
- accurate if :math:`g` is in :math:`C^3` (it has at least 3 continuous derivatives), and the estimation can be
- improved by providing closer samples. Mathematically, the value at each interior point of a partial derivative
- is estimated using `Taylor's theorem with remainder <https://en.wikipedia.org/wiki/Taylor%27s_theorem>`_.
- Letting :math:`x` be an interior point with :math:`x-h_l` and :math:`x+h_r` be points neighboring
- it to the left and right respectively, :math:`f(x+h_r)` and :math:`f(x-h_l)` can be estimated using:
- .. math::
- \begin{aligned}
- f(x+h_r) = f(x) + h_r f'(x) + {h_r}^2 \frac{f''(x)}{2} + {h_r}^3 \frac{f'''(\xi_1)}{6}, \xi_1 \in (x, x+h_r) \\
- f(x-h_l) = f(x) - h_l f'(x) + {h_l}^2 \frac{f''(x)}{2} - {h_l}^3 \frac{f'''(\xi_2)}{6}, \xi_2 \in (x, x-h_l) \\
- \end{aligned}
- Using the fact that :math:`f \in C^3` and solving the linear system, we derive:
- .. math::
- f'(x) \approx \frac{ {h_l}^2 f(x+h_r) - {h_r}^2 f(x-h_l)
- + ({h_r}^2-{h_l}^2 ) f(x) }{ {h_r} {h_l}^2 + {h_r}^2 {h_l} }
- .. note::
- We estimate the gradient of functions in complex domain
- :math:`g : \mathbb{C}^n \rightarrow \mathbb{C}` in the same way.
- The value of each partial derivative at the boundary points is computed differently. See edge_order below.
- Args:
- input (``Tensor``): the tensor that represents the values of the function
- Keyword args:
- spacing (``scalar``, ``list of scalar``, ``list of Tensor``, optional): :attr:`spacing` can be used to modify
- how the :attr:`input` tensor's indices relate to sample coordinates. If :attr:`spacing` is a scalar then
- the indices are multiplied by the scalar to produce the coordinates. For example, if :attr:`spacing=2` the
- indices (1, 2, 3) become coordinates (2, 4, 6). If :attr:`spacing` is a list of scalars then the corresponding
- indices are multiplied. For example, if :attr:`spacing=(2, -1, 3)` the indices (1, 2, 3) become coordinates (2, -2, 9).
- Finally, if :attr:`spacing` is a list of one-dimensional tensors then each tensor specifies the coordinates for
- the corresponding dimension. For example, if the indices are (1, 2, 3) and the tensors are (t0, t1, t2), then
- the coordinates are (t0[1], t1[2], t2[3])
- dim (``int``, ``list of int``, optional): the dimension or dimensions to approximate the gradient over. By default
- the partial gradient in every dimension is computed. Note that when :attr:`dim` is specified the elements of
- the :attr:`spacing` argument must correspond with the specified dims."
- edge_order (``int``, optional): 1 or 2, for `first-order
- <https://www.ams.org/journals/mcom/1988-51-184/S0025-5718-1988-0935077-0/S0025-5718-1988-0935077-0.pdf>`_ or
- `second-order <https://www.ams.org/journals/mcom/1988-51-184/S0025-5718-1988-0935077-0/S0025-5718-1988-0935077-0.pdf>`_
- estimation of the boundary ("edge") values, respectively. Note that when :attr:`edge_order` is specified, each
- dimension size of :attr:`input` should be at least edge_order+1
- Examples::
- >>> # Estimates the gradient of f(x)=x^2 at points [-2, -1, 2, 4]
- >>> coordinates = (torch.tensor([-2., -1., 1., 4.]),)
- >>> values = torch.tensor([4., 1., 1., 16.], )
- >>> torch.gradient(values, spacing = coordinates)
- (tensor([-3., -2., 2., 5.]),)
- >>> # Estimates the gradient of the R^2 -> R function whose samples are
- >>> # described by the tensor t. Implicit coordinates are [0, 1] for the outermost
- >>> # dimension and [0, 1, 2, 3] for the innermost dimension, and function estimates
- >>> # partial derivative for both dimensions.
- >>> t = torch.tensor([[1, 2, 4, 8], [10, 20, 40, 80]])
- >>> torch.gradient(t)
- (tensor([[ 9., 18., 36., 72.],
- [ 9., 18., 36., 72.]]),
- tensor([[ 1.0000, 1.5000, 3.0000, 4.0000],
- [10.0000, 15.0000, 30.0000, 40.0000]]))
- >>> # A scalar value for spacing modifies the relationship between tensor indices
- >>> # and input coordinates by multiplying the indices to find the
- >>> # coordinates. For example, below the indices of the innermost
- >>> # 0, 1, 2, 3 translate to coordinates of [0, 2, 4, 6], and the indices of
- >>> # the outermost dimension 0, 1 translate to coordinates of [0, 2].
- >>> torch.gradient(t, spacing = 2.0) # dim = None (implicitly [0, 1])
- (tensor([[ 4.5000, 9.0000, 18.0000, 36.0000],
- [ 4.5000, 9.0000, 18.0000, 36.0000]]),
- tensor([[ 0.5000, 0.7500, 1.5000, 2.0000],
- [ 5.0000, 7.5000, 15.0000, 20.0000]]))
- >>> # doubling the spacing between samples halves the estimated partial gradients.
- >>>
- >>> # Estimates only the partial derivative for dimension 1
- >>> torch.gradient(t, dim = 1) # spacing = None (implicitly 1.)
- (tensor([[ 1.0000, 1.5000, 3.0000, 4.0000],
- [10.0000, 15.0000, 30.0000, 40.0000]]),)
- >>> # When spacing is a list of scalars, the relationship between the tensor
- >>> # indices and input coordinates changes based on dimension.
- >>> # For example, below, the indices of the innermost dimension 0, 1, 2, 3 translate
- >>> # to coordinates of [0, 3, 6, 9], and the indices of the outermost dimension
- >>> # 0, 1 translate to coordinates of [0, 2].
- >>> torch.gradient(t, spacing = [3., 2.])
- (tensor([[ 4.5000, 9.0000, 18.0000, 36.0000],
- [ 4.5000, 9.0000, 18.0000, 36.0000]]),
- tensor([[ 0.3333, 0.5000, 1.0000, 1.3333],
- [ 3.3333, 5.0000, 10.0000, 13.3333]]))
- >>> # The following example is a replication of the previous one with explicit
- >>> # coordinates.
- >>> coords = (torch.tensor([0, 2]), torch.tensor([0, 3, 6, 9]))
- >>> torch.gradient(t, spacing = coords)
- (tensor([[ 4.5000, 9.0000, 18.0000, 36.0000],
- [ 4.5000, 9.0000, 18.0000, 36.0000]]),
- tensor([[ 0.3333, 0.5000, 1.0000, 1.3333],
- [ 3.3333, 5.0000, 10.0000, 13.3333]]))
- """
- @overload
- def greater(
- input: Tensor,
- other: Tensor,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- greater(input, other, *, out=None) -> Tensor
- Alias for :func:`torch.gt`.
- """
- @overload
- def greater(
- input: Tensor,
- other: Number | _complex,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- greater(input, other, *, out=None) -> Tensor
- Alias for :func:`torch.gt`.
- """
- @overload
- def greater_equal(
- input: Tensor,
- other: Tensor,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- greater_equal(input, other, *, out=None) -> Tensor
- Alias for :func:`torch.ge`.
- """
- @overload
- def greater_equal(
- input: Tensor,
- other: Number | _complex,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- greater_equal(input, other, *, out=None) -> Tensor
- Alias for :func:`torch.ge`.
- """
- def grid_sampler(
- input: Tensor,
- grid: Tensor,
- interpolation_mode: _int,
- padding_mode: _int,
- align_corners: _bool,
- ) -> Tensor: ...
- def grid_sampler_2d(
- input: Tensor,
- grid: Tensor,
- interpolation_mode: _int,
- padding_mode: _int,
- align_corners: _bool,
- ) -> Tensor: ...
- def grid_sampler_3d(
- input: Tensor,
- grid: Tensor,
- interpolation_mode: _int,
- padding_mode: _int,
- align_corners: _bool,
- ) -> Tensor: ...
- def group_norm(
- input: Tensor,
- num_groups: _int,
- weight: Tensor | None = None,
- bias: Tensor | None = None,
- eps: _float = 1e-05,
- cudnn_enabled: _bool = True,
- ) -> Tensor: ...
- @overload
- def gru(
- data: Tensor,
- batch_sizes: Tensor,
- hx: Tensor,
- params: tuple[Tensor, ...] | list[Tensor] | None,
- has_biases: _bool,
- num_layers: _int,
- dropout: _float,
- train: _bool,
- bidirectional: _bool,
- ) -> tuple[Tensor, Tensor]: ...
- @overload
- def gru(
- input: Tensor,
- hx: Tensor,
- params: tuple[Tensor, ...] | list[Tensor] | None,
- has_biases: _bool,
- num_layers: _int,
- dropout: _float,
- train: _bool,
- bidirectional: _bool,
- batch_first: _bool,
- ) -> tuple[Tensor, Tensor]: ...
- def gru_cell(
- input: Tensor,
- hx: Tensor,
- w_ih: Tensor,
- w_hh: Tensor,
- b_ih: Tensor | None = None,
- b_hh: Tensor | None = None,
- ) -> Tensor: ...
- @overload
- def gt(
- input: Tensor,
- other: Tensor,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- gt(input, other, *, out=None) -> Tensor
- Computes :math:`\text{input} > \text{other}` element-wise.
- The second argument can be a number or a tensor whose shape is
- :ref:`broadcastable <broadcasting-semantics>` with the first argument.
- Args:
- input (Tensor): the tensor to compare
- other (Tensor or float): the tensor or value to compare
- Keyword args:
- out (Tensor, optional): the output tensor.
- Returns:
- A boolean tensor that is True where :attr:`input` is greater than :attr:`other` and False elsewhere
- Example::
- >>> torch.gt(torch.tensor([[1, 2], [3, 4]]), torch.tensor([[1, 1], [4, 4]]))
- tensor([[False, True], [False, False]])
- """
- @overload
- def gt(
- input: Tensor,
- other: Number | _complex,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- gt(input, other, *, out=None) -> Tensor
- Computes :math:`\text{input} > \text{other}` element-wise.
- The second argument can be a number or a tensor whose shape is
- :ref:`broadcastable <broadcasting-semantics>` with the first argument.
- Args:
- input (Tensor): the tensor to compare
- other (Tensor or float): the tensor or value to compare
- Keyword args:
- out (Tensor, optional): the output tensor.
- Returns:
- A boolean tensor that is True where :attr:`input` is greater than :attr:`other` and False elsewhere
- Example::
- >>> torch.gt(torch.tensor([[1, 2], [3, 4]]), torch.tensor([[1, 1], [4, 4]]))
- tensor([[False, True], [False, False]])
- """
- @overload
- def hamming_window(
- window_length: _int,
- *,
- dtype: _dtype | None = None,
- layout: _layout | None = None,
- device: DeviceLikeType | None = None,
- pin_memory: _bool | None = False,
- requires_grad: _bool | None = False,
- ) -> Tensor:
- r"""
- hamming_window(window_length, *, dtype=None, layout=None, device=None, pin_memory=False, requires_grad=False) -> Tensor
- Hamming window function.
- .. math::
- w[n] = \alpha - \beta\ \cos \left( \frac{2 \pi n}{N - 1} \right),
- where :math:`N` is the full window size.
- The input :attr:`window_length` is a positive integer controlling the
- returned window size. :attr:`periodic` flag determines whether the returned
- window trims off the last duplicate value from the symmetric window and is
- ready to be used as a periodic window with functions like
- :meth:`torch.stft`. Therefore, if :attr:`periodic` is true, the :math:`N` in
- above formula is in fact :math:`\text{window\_length} + 1`. Also, we always have
- ``torch.hamming_window(L, periodic=True)`` equal to
- ``torch.hamming_window(L + 1, periodic=False)[:-1])``.
- .. note::
- If :attr:`window_length` :math:`=1`, the returned window contains a single value 1.
- .. note::
- This is a generalized version of :meth:`torch.hann_window`.
- Arguments:
- window_length (int): the size of returned window
- Keyword args:
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor.
- Default: if ``None``, uses a global default (see :func:`torch.set_default_dtype`). Only floating point types are supported.
- layout (:class:`torch.layout`, optional): the desired layout of returned window tensor. Only
- ``torch.strided`` (dense layout) is supported.
- device (:class:`torch.device`, optional): the desired device of returned tensor.
- Default: if ``None``, uses the current device for the default tensor type
- (see :func:`torch.set_default_device`). :attr:`device` will be the CPU
- for CPU tensor types and the current CUDA device for CUDA tensor types.
- pin_memory (bool, optional): If set, returned tensor would be allocated in
- the pinned memory. Works only for CPU tensors. Default: ``False``.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- Returns:
- Tensor: A 1-D tensor of size :math:`(\text{window\_length},)` containing the window.
- .. function:: hamming_window(window_length, periodic, *, dtype=None, layout=None, device=None, \
- pin_memory=False, requires_grad=False) -> Tensor
- :noindex:
- Hamming window function with periodic specified.
- Arguments:
- window_length (int): the size of returned window
- periodic (bool): If True, returns a window to be used as periodic
- function. If False, return a symmetric window.
- Keyword args:
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor.
- Default: if ``None``, uses a global default (see :func:`torch.set_default_dtype`). Only floating point types are supported.
- layout (:class:`torch.layout`, optional): the desired layout of returned window tensor. Only
- ``torch.strided`` (dense layout) is supported.
- device (:class:`torch.device`, optional): the desired device of returned tensor.
- Default: if ``None``, uses the current device for the default tensor type
- (see :func:`torch.set_default_device`). :attr:`device` will be the CPU
- for CPU tensor types and the current CUDA device for CUDA tensor types.
- pin_memory (bool, optional): If set, returned tensor would be allocated in
- the pinned memory. Works only for CPU tensors. Default: ``False``.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- Returns:
- Tensor: A 1-D tensor of size :math:`(\text{window\_length},)` containing the window.
- .. function:: hamming_window(window_length, periodic, float alpha, *, dtype=None, layout=None, device=None, \
- pin_memory=False, requires_grad=False) -> Tensor
- :noindex:
- Hamming window function with periodic and alpha specified.
- Arguments:
- window_length (int): the size of returned window
- periodic (bool): If True, returns a window to be used as periodic
- function. If False, return a symmetric window.
- alpha (float): The coefficient :math:`\alpha` in the equation above
- Keyword args:
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor.
- Default: if ``None``, uses a global default (see :func:`torch.set_default_dtype`). Only floating point types are supported.
- layout (:class:`torch.layout`, optional): the desired layout of returned window tensor. Only
- ``torch.strided`` (dense layout) is supported.
- device (:class:`torch.device`, optional): the desired device of returned tensor.
- Default: if ``None``, uses the current device for the default tensor type
- (see :func:`torch.set_default_device`). :attr:`device` will be the CPU
- for CPU tensor types and the current CUDA device for CUDA tensor types.
- pin_memory (bool, optional): If set, returned tensor would be allocated in
- the pinned memory. Works only for CPU tensors. Default: ``False``.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- Returns:
- Tensor: A 1-D tensor of size :math:`(\text{window\_length},)` containing the window.
- .. function:: hamming_window(window_length, periodic, float alpha, float beta, *, dtype=None, layout=None, \
- device=None, pin_memory=False, requires_grad=False) -> Tensor
- :noindex:
- Hamming window function with periodic, alpha and beta specified.
- Arguments:
- window_length (int): the size of returned window
- periodic (bool): If True, returns a window to be used as periodic
- function. If False, return a symmetric window.
- alpha (float): The coefficient :math:`\alpha` in the equation above
- beta (float): The coefficient :math:`\beta` in the equation above
- Keyword args:
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor.
- Default: if ``None``, uses a global default (see :func:`torch.set_default_dtype`). Only floating point types are supported.
- layout (:class:`torch.layout`, optional): the desired layout of returned window tensor. Only
- ``torch.strided`` (dense layout) is supported.
- device (:class:`torch.device`, optional): the desired device of returned tensor.
- Default: if ``None``, uses the current device for the default tensor type
- (see :func:`torch.set_default_device`). :attr:`device` will be the CPU
- for CPU tensor types and the current CUDA device for CUDA tensor types.
- pin_memory (bool, optional): If set, returned tensor would be allocated in
- the pinned memory. Works only for CPU tensors. Default: ``False``.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- Returns:
- Tensor: A 1-D tensor of size :math:`(\text{window\_length},)` containing the window.
- """
- @overload
- def hamming_window(
- window_length: _int,
- periodic: _bool,
- *,
- dtype: _dtype | None = None,
- layout: _layout | None = None,
- device: DeviceLikeType | None = None,
- pin_memory: _bool | None = False,
- requires_grad: _bool | None = False,
- ) -> Tensor:
- r"""
- hamming_window(window_length, *, dtype=None, layout=None, device=None, pin_memory=False, requires_grad=False) -> Tensor
- Hamming window function.
- .. math::
- w[n] = \alpha - \beta\ \cos \left( \frac{2 \pi n}{N - 1} \right),
- where :math:`N` is the full window size.
- The input :attr:`window_length` is a positive integer controlling the
- returned window size. :attr:`periodic` flag determines whether the returned
- window trims off the last duplicate value from the symmetric window and is
- ready to be used as a periodic window with functions like
- :meth:`torch.stft`. Therefore, if :attr:`periodic` is true, the :math:`N` in
- above formula is in fact :math:`\text{window\_length} + 1`. Also, we always have
- ``torch.hamming_window(L, periodic=True)`` equal to
- ``torch.hamming_window(L + 1, periodic=False)[:-1])``.
- .. note::
- If :attr:`window_length` :math:`=1`, the returned window contains a single value 1.
- .. note::
- This is a generalized version of :meth:`torch.hann_window`.
- Arguments:
- window_length (int): the size of returned window
- Keyword args:
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor.
- Default: if ``None``, uses a global default (see :func:`torch.set_default_dtype`). Only floating point types are supported.
- layout (:class:`torch.layout`, optional): the desired layout of returned window tensor. Only
- ``torch.strided`` (dense layout) is supported.
- device (:class:`torch.device`, optional): the desired device of returned tensor.
- Default: if ``None``, uses the current device for the default tensor type
- (see :func:`torch.set_default_device`). :attr:`device` will be the CPU
- for CPU tensor types and the current CUDA device for CUDA tensor types.
- pin_memory (bool, optional): If set, returned tensor would be allocated in
- the pinned memory. Works only for CPU tensors. Default: ``False``.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- Returns:
- Tensor: A 1-D tensor of size :math:`(\text{window\_length},)` containing the window.
- .. function:: hamming_window(window_length, periodic, *, dtype=None, layout=None, device=None, \
- pin_memory=False, requires_grad=False) -> Tensor
- :noindex:
- Hamming window function with periodic specified.
- Arguments:
- window_length (int): the size of returned window
- periodic (bool): If True, returns a window to be used as periodic
- function. If False, return a symmetric window.
- Keyword args:
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor.
- Default: if ``None``, uses a global default (see :func:`torch.set_default_dtype`). Only floating point types are supported.
- layout (:class:`torch.layout`, optional): the desired layout of returned window tensor. Only
- ``torch.strided`` (dense layout) is supported.
- device (:class:`torch.device`, optional): the desired device of returned tensor.
- Default: if ``None``, uses the current device for the default tensor type
- (see :func:`torch.set_default_device`). :attr:`device` will be the CPU
- for CPU tensor types and the current CUDA device for CUDA tensor types.
- pin_memory (bool, optional): If set, returned tensor would be allocated in
- the pinned memory. Works only for CPU tensors. Default: ``False``.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- Returns:
- Tensor: A 1-D tensor of size :math:`(\text{window\_length},)` containing the window.
- .. function:: hamming_window(window_length, periodic, float alpha, *, dtype=None, layout=None, device=None, \
- pin_memory=False, requires_grad=False) -> Tensor
- :noindex:
- Hamming window function with periodic and alpha specified.
- Arguments:
- window_length (int): the size of returned window
- periodic (bool): If True, returns a window to be used as periodic
- function. If False, return a symmetric window.
- alpha (float): The coefficient :math:`\alpha` in the equation above
- Keyword args:
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor.
- Default: if ``None``, uses a global default (see :func:`torch.set_default_dtype`). Only floating point types are supported.
- layout (:class:`torch.layout`, optional): the desired layout of returned window tensor. Only
- ``torch.strided`` (dense layout) is supported.
- device (:class:`torch.device`, optional): the desired device of returned tensor.
- Default: if ``None``, uses the current device for the default tensor type
- (see :func:`torch.set_default_device`). :attr:`device` will be the CPU
- for CPU tensor types and the current CUDA device for CUDA tensor types.
- pin_memory (bool, optional): If set, returned tensor would be allocated in
- the pinned memory. Works only for CPU tensors. Default: ``False``.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- Returns:
- Tensor: A 1-D tensor of size :math:`(\text{window\_length},)` containing the window.
- .. function:: hamming_window(window_length, periodic, float alpha, float beta, *, dtype=None, layout=None, \
- device=None, pin_memory=False, requires_grad=False) -> Tensor
- :noindex:
- Hamming window function with periodic, alpha and beta specified.
- Arguments:
- window_length (int): the size of returned window
- periodic (bool): If True, returns a window to be used as periodic
- function. If False, return a symmetric window.
- alpha (float): The coefficient :math:`\alpha` in the equation above
- beta (float): The coefficient :math:`\beta` in the equation above
- Keyword args:
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor.
- Default: if ``None``, uses a global default (see :func:`torch.set_default_dtype`). Only floating point types are supported.
- layout (:class:`torch.layout`, optional): the desired layout of returned window tensor. Only
- ``torch.strided`` (dense layout) is supported.
- device (:class:`torch.device`, optional): the desired device of returned tensor.
- Default: if ``None``, uses the current device for the default tensor type
- (see :func:`torch.set_default_device`). :attr:`device` will be the CPU
- for CPU tensor types and the current CUDA device for CUDA tensor types.
- pin_memory (bool, optional): If set, returned tensor would be allocated in
- the pinned memory. Works only for CPU tensors. Default: ``False``.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- Returns:
- Tensor: A 1-D tensor of size :math:`(\text{window\_length},)` containing the window.
- """
- @overload
- def hamming_window(
- window_length: _int,
- periodic: _bool,
- alpha: _float,
- *,
- dtype: _dtype | None = None,
- layout: _layout | None = None,
- device: DeviceLikeType | None = None,
- pin_memory: _bool | None = False,
- requires_grad: _bool | None = False,
- ) -> Tensor:
- r"""
- hamming_window(window_length, *, dtype=None, layout=None, device=None, pin_memory=False, requires_grad=False) -> Tensor
- Hamming window function.
- .. math::
- w[n] = \alpha - \beta\ \cos \left( \frac{2 \pi n}{N - 1} \right),
- where :math:`N` is the full window size.
- The input :attr:`window_length` is a positive integer controlling the
- returned window size. :attr:`periodic` flag determines whether the returned
- window trims off the last duplicate value from the symmetric window and is
- ready to be used as a periodic window with functions like
- :meth:`torch.stft`. Therefore, if :attr:`periodic` is true, the :math:`N` in
- above formula is in fact :math:`\text{window\_length} + 1`. Also, we always have
- ``torch.hamming_window(L, periodic=True)`` equal to
- ``torch.hamming_window(L + 1, periodic=False)[:-1])``.
- .. note::
- If :attr:`window_length` :math:`=1`, the returned window contains a single value 1.
- .. note::
- This is a generalized version of :meth:`torch.hann_window`.
- Arguments:
- window_length (int): the size of returned window
- Keyword args:
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor.
- Default: if ``None``, uses a global default (see :func:`torch.set_default_dtype`). Only floating point types are supported.
- layout (:class:`torch.layout`, optional): the desired layout of returned window tensor. Only
- ``torch.strided`` (dense layout) is supported.
- device (:class:`torch.device`, optional): the desired device of returned tensor.
- Default: if ``None``, uses the current device for the default tensor type
- (see :func:`torch.set_default_device`). :attr:`device` will be the CPU
- for CPU tensor types and the current CUDA device for CUDA tensor types.
- pin_memory (bool, optional): If set, returned tensor would be allocated in
- the pinned memory. Works only for CPU tensors. Default: ``False``.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- Returns:
- Tensor: A 1-D tensor of size :math:`(\text{window\_length},)` containing the window.
- .. function:: hamming_window(window_length, periodic, *, dtype=None, layout=None, device=None, \
- pin_memory=False, requires_grad=False) -> Tensor
- :noindex:
- Hamming window function with periodic specified.
- Arguments:
- window_length (int): the size of returned window
- periodic (bool): If True, returns a window to be used as periodic
- function. If False, return a symmetric window.
- Keyword args:
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor.
- Default: if ``None``, uses a global default (see :func:`torch.set_default_dtype`). Only floating point types are supported.
- layout (:class:`torch.layout`, optional): the desired layout of returned window tensor. Only
- ``torch.strided`` (dense layout) is supported.
- device (:class:`torch.device`, optional): the desired device of returned tensor.
- Default: if ``None``, uses the current device for the default tensor type
- (see :func:`torch.set_default_device`). :attr:`device` will be the CPU
- for CPU tensor types and the current CUDA device for CUDA tensor types.
- pin_memory (bool, optional): If set, returned tensor would be allocated in
- the pinned memory. Works only for CPU tensors. Default: ``False``.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- Returns:
- Tensor: A 1-D tensor of size :math:`(\text{window\_length},)` containing the window.
- .. function:: hamming_window(window_length, periodic, float alpha, *, dtype=None, layout=None, device=None, \
- pin_memory=False, requires_grad=False) -> Tensor
- :noindex:
- Hamming window function with periodic and alpha specified.
- Arguments:
- window_length (int): the size of returned window
- periodic (bool): If True, returns a window to be used as periodic
- function. If False, return a symmetric window.
- alpha (float): The coefficient :math:`\alpha` in the equation above
- Keyword args:
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor.
- Default: if ``None``, uses a global default (see :func:`torch.set_default_dtype`). Only floating point types are supported.
- layout (:class:`torch.layout`, optional): the desired layout of returned window tensor. Only
- ``torch.strided`` (dense layout) is supported.
- device (:class:`torch.device`, optional): the desired device of returned tensor.
- Default: if ``None``, uses the current device for the default tensor type
- (see :func:`torch.set_default_device`). :attr:`device` will be the CPU
- for CPU tensor types and the current CUDA device for CUDA tensor types.
- pin_memory (bool, optional): If set, returned tensor would be allocated in
- the pinned memory. Works only for CPU tensors. Default: ``False``.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- Returns:
- Tensor: A 1-D tensor of size :math:`(\text{window\_length},)` containing the window.
- .. function:: hamming_window(window_length, periodic, float alpha, float beta, *, dtype=None, layout=None, \
- device=None, pin_memory=False, requires_grad=False) -> Tensor
- :noindex:
- Hamming window function with periodic, alpha and beta specified.
- Arguments:
- window_length (int): the size of returned window
- periodic (bool): If True, returns a window to be used as periodic
- function. If False, return a symmetric window.
- alpha (float): The coefficient :math:`\alpha` in the equation above
- beta (float): The coefficient :math:`\beta` in the equation above
- Keyword args:
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor.
- Default: if ``None``, uses a global default (see :func:`torch.set_default_dtype`). Only floating point types are supported.
- layout (:class:`torch.layout`, optional): the desired layout of returned window tensor. Only
- ``torch.strided`` (dense layout) is supported.
- device (:class:`torch.device`, optional): the desired device of returned tensor.
- Default: if ``None``, uses the current device for the default tensor type
- (see :func:`torch.set_default_device`). :attr:`device` will be the CPU
- for CPU tensor types and the current CUDA device for CUDA tensor types.
- pin_memory (bool, optional): If set, returned tensor would be allocated in
- the pinned memory. Works only for CPU tensors. Default: ``False``.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- Returns:
- Tensor: A 1-D tensor of size :math:`(\text{window\_length},)` containing the window.
- """
- @overload
- def hamming_window(
- window_length: _int,
- periodic: _bool,
- alpha: _float,
- beta: _float,
- *,
- dtype: _dtype | None = None,
- layout: _layout | None = None,
- device: DeviceLikeType | None = None,
- pin_memory: _bool | None = False,
- requires_grad: _bool | None = False,
- ) -> Tensor:
- r"""
- hamming_window(window_length, *, dtype=None, layout=None, device=None, pin_memory=False, requires_grad=False) -> Tensor
- Hamming window function.
- .. math::
- w[n] = \alpha - \beta\ \cos \left( \frac{2 \pi n}{N - 1} \right),
- where :math:`N` is the full window size.
- The input :attr:`window_length` is a positive integer controlling the
- returned window size. :attr:`periodic` flag determines whether the returned
- window trims off the last duplicate value from the symmetric window and is
- ready to be used as a periodic window with functions like
- :meth:`torch.stft`. Therefore, if :attr:`periodic` is true, the :math:`N` in
- above formula is in fact :math:`\text{window\_length} + 1`. Also, we always have
- ``torch.hamming_window(L, periodic=True)`` equal to
- ``torch.hamming_window(L + 1, periodic=False)[:-1])``.
- .. note::
- If :attr:`window_length` :math:`=1`, the returned window contains a single value 1.
- .. note::
- This is a generalized version of :meth:`torch.hann_window`.
- Arguments:
- window_length (int): the size of returned window
- Keyword args:
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor.
- Default: if ``None``, uses a global default (see :func:`torch.set_default_dtype`). Only floating point types are supported.
- layout (:class:`torch.layout`, optional): the desired layout of returned window tensor. Only
- ``torch.strided`` (dense layout) is supported.
- device (:class:`torch.device`, optional): the desired device of returned tensor.
- Default: if ``None``, uses the current device for the default tensor type
- (see :func:`torch.set_default_device`). :attr:`device` will be the CPU
- for CPU tensor types and the current CUDA device for CUDA tensor types.
- pin_memory (bool, optional): If set, returned tensor would be allocated in
- the pinned memory. Works only for CPU tensors. Default: ``False``.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- Returns:
- Tensor: A 1-D tensor of size :math:`(\text{window\_length},)` containing the window.
- .. function:: hamming_window(window_length, periodic, *, dtype=None, layout=None, device=None, \
- pin_memory=False, requires_grad=False) -> Tensor
- :noindex:
- Hamming window function with periodic specified.
- Arguments:
- window_length (int): the size of returned window
- periodic (bool): If True, returns a window to be used as periodic
- function. If False, return a symmetric window.
- Keyword args:
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor.
- Default: if ``None``, uses a global default (see :func:`torch.set_default_dtype`). Only floating point types are supported.
- layout (:class:`torch.layout`, optional): the desired layout of returned window tensor. Only
- ``torch.strided`` (dense layout) is supported.
- device (:class:`torch.device`, optional): the desired device of returned tensor.
- Default: if ``None``, uses the current device for the default tensor type
- (see :func:`torch.set_default_device`). :attr:`device` will be the CPU
- for CPU tensor types and the current CUDA device for CUDA tensor types.
- pin_memory (bool, optional): If set, returned tensor would be allocated in
- the pinned memory. Works only for CPU tensors. Default: ``False``.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- Returns:
- Tensor: A 1-D tensor of size :math:`(\text{window\_length},)` containing the window.
- .. function:: hamming_window(window_length, periodic, float alpha, *, dtype=None, layout=None, device=None, \
- pin_memory=False, requires_grad=False) -> Tensor
- :noindex:
- Hamming window function with periodic and alpha specified.
- Arguments:
- window_length (int): the size of returned window
- periodic (bool): If True, returns a window to be used as periodic
- function. If False, return a symmetric window.
- alpha (float): The coefficient :math:`\alpha` in the equation above
- Keyword args:
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor.
- Default: if ``None``, uses a global default (see :func:`torch.set_default_dtype`). Only floating point types are supported.
- layout (:class:`torch.layout`, optional): the desired layout of returned window tensor. Only
- ``torch.strided`` (dense layout) is supported.
- device (:class:`torch.device`, optional): the desired device of returned tensor.
- Default: if ``None``, uses the current device for the default tensor type
- (see :func:`torch.set_default_device`). :attr:`device` will be the CPU
- for CPU tensor types and the current CUDA device for CUDA tensor types.
- pin_memory (bool, optional): If set, returned tensor would be allocated in
- the pinned memory. Works only for CPU tensors. Default: ``False``.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- Returns:
- Tensor: A 1-D tensor of size :math:`(\text{window\_length},)` containing the window.
- .. function:: hamming_window(window_length, periodic, float alpha, float beta, *, dtype=None, layout=None, \
- device=None, pin_memory=False, requires_grad=False) -> Tensor
- :noindex:
- Hamming window function with periodic, alpha and beta specified.
- Arguments:
- window_length (int): the size of returned window
- periodic (bool): If True, returns a window to be used as periodic
- function. If False, return a symmetric window.
- alpha (float): The coefficient :math:`\alpha` in the equation above
- beta (float): The coefficient :math:`\beta` in the equation above
- Keyword args:
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor.
- Default: if ``None``, uses a global default (see :func:`torch.set_default_dtype`). Only floating point types are supported.
- layout (:class:`torch.layout`, optional): the desired layout of returned window tensor. Only
- ``torch.strided`` (dense layout) is supported.
- device (:class:`torch.device`, optional): the desired device of returned tensor.
- Default: if ``None``, uses the current device for the default tensor type
- (see :func:`torch.set_default_device`). :attr:`device` will be the CPU
- for CPU tensor types and the current CUDA device for CUDA tensor types.
- pin_memory (bool, optional): If set, returned tensor would be allocated in
- the pinned memory. Works only for CPU tensors. Default: ``False``.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- Returns:
- Tensor: A 1-D tensor of size :math:`(\text{window\_length},)` containing the window.
- """
- @overload
- def hann_window(
- window_length: _int,
- *,
- dtype: _dtype | None = None,
- layout: _layout | None = None,
- device: DeviceLikeType | None = None,
- pin_memory: _bool | None = False,
- requires_grad: _bool | None = False,
- ) -> Tensor:
- r"""
- hann_window(window_length, periodic=True, *, dtype=None, layout=torch.strided, device=None, requires_grad=False) -> Tensor
- Hann window function.
- .. math::
- w[n] = \frac{1}{2}\ \left[1 - \cos \left( \frac{2 \pi n}{N - 1} \right)\right] =
- \sin^2 \left( \frac{\pi n}{N - 1} \right),
- where :math:`N` is the full window size.
- The input :attr:`window_length` is a positive integer controlling the
- returned window size. :attr:`periodic` flag determines whether the returned
- window trims off the last duplicate value from the symmetric window and is
- ready to be used as a periodic window with functions like
- :meth:`torch.stft`. Therefore, if :attr:`periodic` is true, the :math:`N` in
- above formula is in fact :math:`\text{window\_length} + 1`. Also, we always have
- ``torch.hann_window(L, periodic=True)`` equal to
- ``torch.hann_window(L + 1, periodic=False)[:-1])``.
- .. note::
- If :attr:`window_length` :math:`=1`, the returned window contains a single value 1.
- Arguments:
- window_length (int): the size of returned window
- periodic (bool, optional): If True, returns a window to be used as periodic
- function. If False, return a symmetric window.
- Keyword args:
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor.
- Default: if ``None``, uses a global default (see :func:`torch.set_default_dtype`). Only floating point types are supported.
- layout (:class:`torch.layout`, optional): the desired layout of returned window tensor. Only
- ``torch.strided`` (dense layout) is supported.
- device (:class:`torch.device`, optional): the desired device of returned tensor.
- Default: if ``None``, uses the current device for the default tensor type
- (see :func:`torch.set_default_device`). :attr:`device` will be the CPU
- for CPU tensor types and the current CUDA device for CUDA tensor types.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- Returns:
- Tensor: A 1-D tensor of size :math:`(\text{window\_length},)` containing the window
- """
- @overload
- def hann_window(
- window_length: _int,
- periodic: _bool,
- *,
- dtype: _dtype | None = None,
- layout: _layout | None = None,
- device: DeviceLikeType | None = None,
- pin_memory: _bool | None = False,
- requires_grad: _bool | None = False,
- ) -> Tensor:
- r"""
- hann_window(window_length, periodic=True, *, dtype=None, layout=torch.strided, device=None, requires_grad=False) -> Tensor
- Hann window function.
- .. math::
- w[n] = \frac{1}{2}\ \left[1 - \cos \left( \frac{2 \pi n}{N - 1} \right)\right] =
- \sin^2 \left( \frac{\pi n}{N - 1} \right),
- where :math:`N` is the full window size.
- The input :attr:`window_length` is a positive integer controlling the
- returned window size. :attr:`periodic` flag determines whether the returned
- window trims off the last duplicate value from the symmetric window and is
- ready to be used as a periodic window with functions like
- :meth:`torch.stft`. Therefore, if :attr:`periodic` is true, the :math:`N` in
- above formula is in fact :math:`\text{window\_length} + 1`. Also, we always have
- ``torch.hann_window(L, periodic=True)`` equal to
- ``torch.hann_window(L + 1, periodic=False)[:-1])``.
- .. note::
- If :attr:`window_length` :math:`=1`, the returned window contains a single value 1.
- Arguments:
- window_length (int): the size of returned window
- periodic (bool, optional): If True, returns a window to be used as periodic
- function. If False, return a symmetric window.
- Keyword args:
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor.
- Default: if ``None``, uses a global default (see :func:`torch.set_default_dtype`). Only floating point types are supported.
- layout (:class:`torch.layout`, optional): the desired layout of returned window tensor. Only
- ``torch.strided`` (dense layout) is supported.
- device (:class:`torch.device`, optional): the desired device of returned tensor.
- Default: if ``None``, uses the current device for the default tensor type
- (see :func:`torch.set_default_device`). :attr:`device` will be the CPU
- for CPU tensor types and the current CUDA device for CUDA tensor types.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- Returns:
- Tensor: A 1-D tensor of size :math:`(\text{window\_length},)` containing the window
- """
- def hardshrink(
- input: Tensor,
- lambd: Number | _complex = 0.5,
- *,
- out: Tensor | None = None,
- ) -> Tensor: ...
- def hash_tensor(
- input: Tensor,
- dim: _int | _size = (),
- *,
- keepdim: _bool = False,
- mode: _int = 0,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- hash_tensor(input, *, mode=0) -> Tensor
- Returns a hash of all elements in the :attr:`input` tensor.
- Currently only mode=0 (reduction via xor) is supported. The output will always
- be of type ``torch.uint64``. The elements of ``input`` are upcasted to their
- 64 bit float / integer equivalent and bitcasted to ``torch.uint64`` before
- reduction via xor.
- Args:
- input (Tensor): the input tensor.
- Keyword Args:
- mode (int) : The hash to use. Default: 0 (xor_reduction)
- Example::
- >>> a = torch.randn(1, 3)
- >>> a
- tensor([[ 1.1918, -1.1813, 0.3373]])
- >>> torch.hash_tensor(a)
- tensor(13822780554648485888, dtype=torch.uint64)
- .. function:: hash_tensor(input, dim, *, keepdim=False, mode=0) -> Tensor
- :noindex:
- Returns the hash of each row of the :attr:`input` tensor in the given
- dimension :attr:`dim` given by mode. If :attr:`dim` is a list of dimensions,
- reduce over all of them.
- If :attr:`keepdim` is ``True``, the output tensor is of the same size
- as :attr:`input` except in the dimension(s) :attr:`dim` where it is of size 1.
- Otherwise, :attr:`dim` is squeezed (see :func:`torch.squeeze`), resulting in the
- output tensor having 1 (or ``len(dim)``) fewer dimension(s).
- Args:
- input (Tensor): the input tensor.
- dim (int or tuple of ints, optional): the dimension or dimensions to reduce.
- If ``None``, all dimensions are reduced.
- keepdim (bool, optional): whether the output tensor has :attr:`dim` retained or not. Default: ``False``.
- Keyword Args:
- mode (int) : The hash to use. Default: 0 (xor_reduction)
- Example::
- >>> a = torch.randn(2, 4)
- >>> a
- tensor([[ 0.1317, -0.5554, -1.4724, -1.1391],
- [ 0.0778, -0.6070, 0.6375, 0.1798]])
- >>> torch.hash_tensor(a, 1)
- tensor([9233691267014066176, 9255993250844508160], dtype=torch.uint64)
- """
- def heaviside(
- input: Tensor,
- values: Tensor,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- heaviside(input, values, *, out=None) -> Tensor
- Computes the Heaviside step function for each element in :attr:`input`.
- The Heaviside step function is defined as:
- .. math::
- \text{{heaviside}}(input, values) = \begin{cases}
- 0, & \text{if input < 0}\\
- values, & \text{if input == 0}\\
- 1, & \text{if input > 0}
- \end{cases}
- Args:
- input (Tensor): the input tensor.
- values (Tensor): The values to use where :attr:`input` is zero.
- Keyword arguments:
- out (Tensor, optional): the output tensor.
- Example::
- >>> input = torch.tensor([-1.5, 0, 2.0])
- >>> values = torch.tensor([0.5])
- >>> torch.heaviside(input, values)
- tensor([0.0000, 0.5000, 1.0000])
- >>> values = torch.tensor([1.2, -2.0, 3.5])
- >>> torch.heaviside(input, values)
- tensor([0., -2., 1.])
- """
- def hinge_embedding_loss(
- input: Tensor,
- target: Tensor,
- margin: _float = 1.0,
- reduction: _int = 1,
- ) -> Tensor: ...
- def histc(
- input: Tensor,
- bins: _int = 100,
- min: Number | _complex = 0,
- max: Number | _complex = 0,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- histc(input, bins=100, min=0, max=0, *, out=None) -> Tensor
- Computes the histogram of a tensor.
- The elements are sorted into equal width bins between :attr:`min` and
- :attr:`max`. If :attr:`min` and :attr:`max` are both zero, the minimum and
- maximum values of the data are used.
- Elements lower than min and higher than max and ``NaN`` elements are ignored.
- Args:
- input (Tensor): the input tensor.
- bins (int): number of histogram bins
- min (Scalar): lower end of the range (inclusive)
- max (Scalar): upper end of the range (inclusive)
- Keyword args:
- out (Tensor, optional): the output tensor.
- Returns:
- Tensor: Histogram represented as a tensor
- Example::
- >>> torch.histc(torch.tensor([1., 2, 1]), bins=4, min=0, max=3)
- tensor([ 0., 2., 1., 0.])
- """
- @overload
- def histogram(
- input: Tensor,
- bins: Tensor,
- *,
- weight: Tensor | None = None,
- density: _bool = False,
- out: Tensor | tuple[Tensor, ...] | list[Tensor] | None = None,
- ) -> torch.return_types.histogram:
- r"""
- histogram(input, bins, *, range=None, weight=None, density=False, out=None) -> (Tensor, Tensor)
- Computes a histogram of the values in a tensor.
- :attr:`bins` can be an integer or a 1D tensor.
- If :attr:`bins` is an int, it specifies the number of equal-width bins.
- By default, the lower and upper range of the bins is determined by the
- minimum and maximum elements of the input tensor. The :attr:`range`
- argument can be provided to specify a range for the bins.
- If :attr:`bins` is a 1D tensor, it specifies the sequence of bin edges
- including the rightmost edge. It should contain at least 2 elements
- and its elements should be increasing.
- Args:
- input (Tensor): the input tensor.
- bins: int or 1D Tensor. If int, defines the number of equal-width bins. If tensor,
- defines the sequence of bin edges including the rightmost edge.
- Keyword args:
- range (tuple of float): Defines the range of the bins.
- weight (Tensor): If provided, weight should have the same shape as input. Each value in
- input contributes its associated weight towards its bin's result.
- density (bool): If False, the result will contain the count (or total weight) in each bin.
- If True, the result is the value of the probability density function over the bins,
- normalized such that the integral over the range of the bins is 1.
- out (Tensor, optional): the output tensor. (tuple, optional): The result tuple of two output tensors (hist, bin_edges).
- Returns:
- hist (Tensor): 1D Tensor containing the values of the histogram.
- bin_edges(Tensor): 1D Tensor containing the edges of the histogram bins.
- Example::
- >>> torch.histogram(torch.tensor([1., 2, 1]), bins=4, range=(0., 3.), weight=torch.tensor([1., 2., 4.]))
- (tensor([ 0., 5., 2., 0.]), tensor([0., 0.75, 1.5, 2.25, 3.]))
- >>> torch.histogram(torch.tensor([1., 2, 1]), bins=4, range=(0., 3.), weight=torch.tensor([1., 2., 4.]), density=True)
- (tensor([ 0., 0.9524, 0.3810, 0.]), tensor([0., 0.75, 1.5, 2.25, 3.]))
- """
- @overload
- def histogram(
- input: Tensor,
- bins: _int = 100,
- *,
- range: Sequence[_float] | None = None,
- weight: Tensor | None = None,
- density: _bool = False,
- out: Tensor | tuple[Tensor, ...] | list[Tensor] | None = None,
- ) -> torch.return_types.histogram:
- r"""
- histogram(input, bins, *, range=None, weight=None, density=False, out=None) -> (Tensor, Tensor)
- Computes a histogram of the values in a tensor.
- :attr:`bins` can be an integer or a 1D tensor.
- If :attr:`bins` is an int, it specifies the number of equal-width bins.
- By default, the lower and upper range of the bins is determined by the
- minimum and maximum elements of the input tensor. The :attr:`range`
- argument can be provided to specify a range for the bins.
- If :attr:`bins` is a 1D tensor, it specifies the sequence of bin edges
- including the rightmost edge. It should contain at least 2 elements
- and its elements should be increasing.
- Args:
- input (Tensor): the input tensor.
- bins: int or 1D Tensor. If int, defines the number of equal-width bins. If tensor,
- defines the sequence of bin edges including the rightmost edge.
- Keyword args:
- range (tuple of float): Defines the range of the bins.
- weight (Tensor): If provided, weight should have the same shape as input. Each value in
- input contributes its associated weight towards its bin's result.
- density (bool): If False, the result will contain the count (or total weight) in each bin.
- If True, the result is the value of the probability density function over the bins,
- normalized such that the integral over the range of the bins is 1.
- out (Tensor, optional): the output tensor. (tuple, optional): The result tuple of two output tensors (hist, bin_edges).
- Returns:
- hist (Tensor): 1D Tensor containing the values of the histogram.
- bin_edges(Tensor): 1D Tensor containing the edges of the histogram bins.
- Example::
- >>> torch.histogram(torch.tensor([1., 2, 1]), bins=4, range=(0., 3.), weight=torch.tensor([1., 2., 4.]))
- (tensor([ 0., 5., 2., 0.]), tensor([0., 0.75, 1.5, 2.25, 3.]))
- >>> torch.histogram(torch.tensor([1., 2, 1]), bins=4, range=(0., 3.), weight=torch.tensor([1., 2., 4.]), density=True)
- (tensor([ 0., 0.9524, 0.3810, 0.]), tensor([0., 0.75, 1.5, 2.25, 3.]))
- """
- @overload
- def histogramdd(
- input: Tensor,
- bins: _int,
- range: Sequence[_float] | None = None,
- weight: Tensor | None = None,
- density: _bool = False,
- ) -> torch.return_types.histogramdd:
- r"""
- histogramdd(input, bins, *, range=None, weight=None, density=False, out=None) -> (Tensor, Tensor[])
- Computes a multi-dimensional histogram of the values in a tensor.
- Interprets the elements of an input tensor whose innermost dimension has size N
- as a collection of N-dimensional points. Maps each of the points into a set of
- N-dimensional bins and returns the number of points (or total weight) in each bin.
- :attr:`input` must be a tensor with at least 2 dimensions.
- If input has shape (M, N), each of its M rows defines a point in N-dimensional space.
- If input has three or more dimensions, all but the last dimension are flattened.
- Each dimension is independently associated with its own strictly increasing sequence
- of bin edges. Bin edges may be specified explicitly by passing a sequence of 1D
- tensors. Alternatively, bin edges may be constructed automatically by passing a
- sequence of integers specifying the number of equal-width bins in each dimension.
- For each N-dimensional point in input:
- - Each of its coordinates is binned independently among the bin edges
- corresponding to its dimension
- - Binning results are combined to identify the N-dimensional bin (if any)
- into which the point falls
- - If the point falls into a bin, the bin's count (or total weight) is incremented
- - Points which do not fall into any bin do not contribute to the output
- :attr:`bins` can be a sequence of N 1D tensors, a sequence of N ints, or a single int.
- If :attr:`bins` is a sequence of N 1D tensors, it explicitly specifies the N sequences
- of bin edges. Each 1D tensor should contain a strictly increasing sequence with at
- least one element. A sequence of K bin edges defines K-1 bins, explicitly specifying
- the left and right edges of all bins. Every bin is inclusive of its left edge. Only
- the rightmost bin is inclusive of its right edge.
- If :attr:`bins` is a sequence of N ints, it specifies the number of equal-width bins
- in each dimension. By default, the leftmost and rightmost bin edges in each dimension
- are determined by the minimum and maximum elements of the input tensor in the
- corresponding dimension. The :attr:`range` argument can be provided to manually
- specify the leftmost and rightmost bin edges in each dimension.
- If :attr:`bins` is an int, it specifies the number of equal-width bins for all dimensions.
- .. note::
- See also :func:`torch.histogram`, which specifically computes 1D histograms.
- While :func:`torch.histogramdd` infers the dimensionality of its bins and
- binned values from the shape of :attr:`input`, :func:`torch.histogram`
- accepts and flattens :attr:`input` of any shape.
- Args:
- input (Tensor): the input tensor.
- bins: Tensor[], int[], or int.
- If Tensor[], defines the sequences of bin edges.
- If int[], defines the number of equal-width bins in each dimension.
- If int, defines the number of equal-width bins for all dimensions.
- Keyword args:
- range (sequence of float): Defines the leftmost and rightmost bin edges
- in each dimension.
- weight (Tensor): By default, each value in the input has weight 1. If a weight
- tensor is passed, each N-dimensional coordinate in input
- contributes its associated weight towards its bin's result.
- The weight tensor should have the same shape as the :attr:`input`
- tensor excluding its innermost dimension N.
- density (bool): If False (default), the result will contain the count (or total weight)
- in each bin. If True, each count (weight) is divided by the total count
- (total weight), then divided by the volume of its associated bin.
- Returns:
- hist (Tensor): N-dimensional Tensor containing the values of the histogram.
- bin_edges(Tensor[]): sequence of N 1D Tensors containing the bin edges.
- Example::
- >>> torch.histogramdd(torch.tensor([[0., 1.], [1., 0.], [2., 0.], [2., 2.]]), bins=[3, 3],
- ... weight=torch.tensor([1., 2., 4., 8.]))
- torch.return_types.histogramdd(
- hist=tensor([[0., 1., 0.],
- [2., 0., 0.],
- [4., 0., 8.]]),
- bin_edges=(tensor([0.0000, 0.6667, 1.3333, 2.0000]),
- tensor([0.0000, 0.6667, 1.3333, 2.0000])))
- >>> torch.histogramdd(torch.tensor([[0., 0.], [1., 1.], [2., 2.]]), bins=[2, 2],
- ... range=[0., 1., 0., 1.], density=True)
- torch.return_types.histogramdd(
- hist=tensor([[2., 0.],
- [0., 2.]]),
- bin_edges=(tensor([0.0000, 0.5000, 1.0000]),
- tensor([0.0000, 0.5000, 1.0000])))
- """
- @overload
- def histogramdd(
- input: Tensor,
- bins: _size,
- range: Sequence[_float] | None = None,
- weight: Tensor | None = None,
- density: _bool = False,
- ) -> torch.return_types.histogramdd:
- r"""
- histogramdd(input, bins, *, range=None, weight=None, density=False, out=None) -> (Tensor, Tensor[])
- Computes a multi-dimensional histogram of the values in a tensor.
- Interprets the elements of an input tensor whose innermost dimension has size N
- as a collection of N-dimensional points. Maps each of the points into a set of
- N-dimensional bins and returns the number of points (or total weight) in each bin.
- :attr:`input` must be a tensor with at least 2 dimensions.
- If input has shape (M, N), each of its M rows defines a point in N-dimensional space.
- If input has three or more dimensions, all but the last dimension are flattened.
- Each dimension is independently associated with its own strictly increasing sequence
- of bin edges. Bin edges may be specified explicitly by passing a sequence of 1D
- tensors. Alternatively, bin edges may be constructed automatically by passing a
- sequence of integers specifying the number of equal-width bins in each dimension.
- For each N-dimensional point in input:
- - Each of its coordinates is binned independently among the bin edges
- corresponding to its dimension
- - Binning results are combined to identify the N-dimensional bin (if any)
- into which the point falls
- - If the point falls into a bin, the bin's count (or total weight) is incremented
- - Points which do not fall into any bin do not contribute to the output
- :attr:`bins` can be a sequence of N 1D tensors, a sequence of N ints, or a single int.
- If :attr:`bins` is a sequence of N 1D tensors, it explicitly specifies the N sequences
- of bin edges. Each 1D tensor should contain a strictly increasing sequence with at
- least one element. A sequence of K bin edges defines K-1 bins, explicitly specifying
- the left and right edges of all bins. Every bin is inclusive of its left edge. Only
- the rightmost bin is inclusive of its right edge.
- If :attr:`bins` is a sequence of N ints, it specifies the number of equal-width bins
- in each dimension. By default, the leftmost and rightmost bin edges in each dimension
- are determined by the minimum and maximum elements of the input tensor in the
- corresponding dimension. The :attr:`range` argument can be provided to manually
- specify the leftmost and rightmost bin edges in each dimension.
- If :attr:`bins` is an int, it specifies the number of equal-width bins for all dimensions.
- .. note::
- See also :func:`torch.histogram`, which specifically computes 1D histograms.
- While :func:`torch.histogramdd` infers the dimensionality of its bins and
- binned values from the shape of :attr:`input`, :func:`torch.histogram`
- accepts and flattens :attr:`input` of any shape.
- Args:
- input (Tensor): the input tensor.
- bins: Tensor[], int[], or int.
- If Tensor[], defines the sequences of bin edges.
- If int[], defines the number of equal-width bins in each dimension.
- If int, defines the number of equal-width bins for all dimensions.
- Keyword args:
- range (sequence of float): Defines the leftmost and rightmost bin edges
- in each dimension.
- weight (Tensor): By default, each value in the input has weight 1. If a weight
- tensor is passed, each N-dimensional coordinate in input
- contributes its associated weight towards its bin's result.
- The weight tensor should have the same shape as the :attr:`input`
- tensor excluding its innermost dimension N.
- density (bool): If False (default), the result will contain the count (or total weight)
- in each bin. If True, each count (weight) is divided by the total count
- (total weight), then divided by the volume of its associated bin.
- Returns:
- hist (Tensor): N-dimensional Tensor containing the values of the histogram.
- bin_edges(Tensor[]): sequence of N 1D Tensors containing the bin edges.
- Example::
- >>> torch.histogramdd(torch.tensor([[0., 1.], [1., 0.], [2., 0.], [2., 2.]]), bins=[3, 3],
- ... weight=torch.tensor([1., 2., 4., 8.]))
- torch.return_types.histogramdd(
- hist=tensor([[0., 1., 0.],
- [2., 0., 0.],
- [4., 0., 8.]]),
- bin_edges=(tensor([0.0000, 0.6667, 1.3333, 2.0000]),
- tensor([0.0000, 0.6667, 1.3333, 2.0000])))
- >>> torch.histogramdd(torch.tensor([[0., 0.], [1., 1.], [2., 2.]]), bins=[2, 2],
- ... range=[0., 1., 0., 1.], density=True)
- torch.return_types.histogramdd(
- hist=tensor([[2., 0.],
- [0., 2.]]),
- bin_edges=(tensor([0.0000, 0.5000, 1.0000]),
- tensor([0.0000, 0.5000, 1.0000])))
- """
- @overload
- def histogramdd(
- input: Tensor,
- bins: tuple[Tensor, ...] | list[Tensor] | None,
- range: Sequence[_float] | None = None,
- weight: Tensor | None = None,
- density: _bool = False,
- ) -> torch.return_types.histogramdd:
- r"""
- histogramdd(input, bins, *, range=None, weight=None, density=False, out=None) -> (Tensor, Tensor[])
- Computes a multi-dimensional histogram of the values in a tensor.
- Interprets the elements of an input tensor whose innermost dimension has size N
- as a collection of N-dimensional points. Maps each of the points into a set of
- N-dimensional bins and returns the number of points (or total weight) in each bin.
- :attr:`input` must be a tensor with at least 2 dimensions.
- If input has shape (M, N), each of its M rows defines a point in N-dimensional space.
- If input has three or more dimensions, all but the last dimension are flattened.
- Each dimension is independently associated with its own strictly increasing sequence
- of bin edges. Bin edges may be specified explicitly by passing a sequence of 1D
- tensors. Alternatively, bin edges may be constructed automatically by passing a
- sequence of integers specifying the number of equal-width bins in each dimension.
- For each N-dimensional point in input:
- - Each of its coordinates is binned independently among the bin edges
- corresponding to its dimension
- - Binning results are combined to identify the N-dimensional bin (if any)
- into which the point falls
- - If the point falls into a bin, the bin's count (or total weight) is incremented
- - Points which do not fall into any bin do not contribute to the output
- :attr:`bins` can be a sequence of N 1D tensors, a sequence of N ints, or a single int.
- If :attr:`bins` is a sequence of N 1D tensors, it explicitly specifies the N sequences
- of bin edges. Each 1D tensor should contain a strictly increasing sequence with at
- least one element. A sequence of K bin edges defines K-1 bins, explicitly specifying
- the left and right edges of all bins. Every bin is inclusive of its left edge. Only
- the rightmost bin is inclusive of its right edge.
- If :attr:`bins` is a sequence of N ints, it specifies the number of equal-width bins
- in each dimension. By default, the leftmost and rightmost bin edges in each dimension
- are determined by the minimum and maximum elements of the input tensor in the
- corresponding dimension. The :attr:`range` argument can be provided to manually
- specify the leftmost and rightmost bin edges in each dimension.
- If :attr:`bins` is an int, it specifies the number of equal-width bins for all dimensions.
- .. note::
- See also :func:`torch.histogram`, which specifically computes 1D histograms.
- While :func:`torch.histogramdd` infers the dimensionality of its bins and
- binned values from the shape of :attr:`input`, :func:`torch.histogram`
- accepts and flattens :attr:`input` of any shape.
- Args:
- input (Tensor): the input tensor.
- bins: Tensor[], int[], or int.
- If Tensor[], defines the sequences of bin edges.
- If int[], defines the number of equal-width bins in each dimension.
- If int, defines the number of equal-width bins for all dimensions.
- Keyword args:
- range (sequence of float): Defines the leftmost and rightmost bin edges
- in each dimension.
- weight (Tensor): By default, each value in the input has weight 1. If a weight
- tensor is passed, each N-dimensional coordinate in input
- contributes its associated weight towards its bin's result.
- The weight tensor should have the same shape as the :attr:`input`
- tensor excluding its innermost dimension N.
- density (bool): If False (default), the result will contain the count (or total weight)
- in each bin. If True, each count (weight) is divided by the total count
- (total weight), then divided by the volume of its associated bin.
- Returns:
- hist (Tensor): N-dimensional Tensor containing the values of the histogram.
- bin_edges(Tensor[]): sequence of N 1D Tensors containing the bin edges.
- Example::
- >>> torch.histogramdd(torch.tensor([[0., 1.], [1., 0.], [2., 0.], [2., 2.]]), bins=[3, 3],
- ... weight=torch.tensor([1., 2., 4., 8.]))
- torch.return_types.histogramdd(
- hist=tensor([[0., 1., 0.],
- [2., 0., 0.],
- [4., 0., 8.]]),
- bin_edges=(tensor([0.0000, 0.6667, 1.3333, 2.0000]),
- tensor([0.0000, 0.6667, 1.3333, 2.0000])))
- >>> torch.histogramdd(torch.tensor([[0., 0.], [1., 1.], [2., 2.]]), bins=[2, 2],
- ... range=[0., 1., 0., 1.], density=True)
- torch.return_types.histogramdd(
- hist=tensor([[2., 0.],
- [0., 2.]]),
- bin_edges=(tensor([0.0000, 0.5000, 1.0000]),
- tensor([0.0000, 0.5000, 1.0000])))
- """
- def hsmm(input: Tensor, mat2: Tensor) -> Tensor: ...
- @overload
- def hsplit(input: Tensor, sections: _int) -> tuple[Tensor, ...]:
- r"""
- hsplit(input, indices_or_sections) -> List of Tensors
- Splits :attr:`input`, a tensor with one or more dimensions, into multiple tensors
- horizontally according to :attr:`indices_or_sections`. Each split is a view of
- :attr:`input`.
- If :attr:`input` is one dimensional this is equivalent to calling
- torch.tensor_split(input, indices_or_sections, dim=0) (the split dimension is
- zero), and if :attr:`input` has two or more dimensions it's equivalent to calling
- torch.tensor_split(input, indices_or_sections, dim=1) (the split dimension is 1),
- except that if :attr:`indices_or_sections` is an integer it must evenly divide
- the split dimension or a runtime error will be thrown.
- This function is based on NumPy's :func:`numpy.hsplit`.
- Args:
- input (Tensor): tensor to split.
- indices_or_sections (int or list or tuple of ints): See argument in :func:`torch.tensor_split`.
- Example::
- >>> t = torch.arange(16.0).reshape(4,4)
- >>> t
- tensor([[ 0., 1., 2., 3.],
- [ 4., 5., 6., 7.],
- [ 8., 9., 10., 11.],
- [12., 13., 14., 15.]])
- >>> torch.hsplit(t, 2)
- (tensor([[ 0., 1.],
- [ 4., 5.],
- [ 8., 9.],
- [12., 13.]]),
- tensor([[ 2., 3.],
- [ 6., 7.],
- [10., 11.],
- [14., 15.]]))
- >>> torch.hsplit(t, [3, 6])
- (tensor([[ 0., 1., 2.],
- [ 4., 5., 6.],
- [ 8., 9., 10.],
- [12., 13., 14.]]),
- tensor([[ 3.],
- [ 7.],
- [11.],
- [15.]]),
- tensor([], size=(4, 0)))
- """
- @overload
- def hsplit(input: Tensor, indices: _size) -> tuple[Tensor, ...]:
- r"""
- hsplit(input, indices_or_sections) -> List of Tensors
- Splits :attr:`input`, a tensor with one or more dimensions, into multiple tensors
- horizontally according to :attr:`indices_or_sections`. Each split is a view of
- :attr:`input`.
- If :attr:`input` is one dimensional this is equivalent to calling
- torch.tensor_split(input, indices_or_sections, dim=0) (the split dimension is
- zero), and if :attr:`input` has two or more dimensions it's equivalent to calling
- torch.tensor_split(input, indices_or_sections, dim=1) (the split dimension is 1),
- except that if :attr:`indices_or_sections` is an integer it must evenly divide
- the split dimension or a runtime error will be thrown.
- This function is based on NumPy's :func:`numpy.hsplit`.
- Args:
- input (Tensor): tensor to split.
- indices_or_sections (int or list or tuple of ints): See argument in :func:`torch.tensor_split`.
- Example::
- >>> t = torch.arange(16.0).reshape(4,4)
- >>> t
- tensor([[ 0., 1., 2., 3.],
- [ 4., 5., 6., 7.],
- [ 8., 9., 10., 11.],
- [12., 13., 14., 15.]])
- >>> torch.hsplit(t, 2)
- (tensor([[ 0., 1.],
- [ 4., 5.],
- [ 8., 9.],
- [12., 13.]]),
- tensor([[ 2., 3.],
- [ 6., 7.],
- [10., 11.],
- [14., 15.]]))
- >>> torch.hsplit(t, [3, 6])
- (tensor([[ 0., 1., 2.],
- [ 4., 5., 6.],
- [ 8., 9., 10.],
- [12., 13., 14.]]),
- tensor([[ 3.],
- [ 7.],
- [11.],
- [15.]]),
- tensor([], size=(4, 0)))
- """
- def hspmm(
- mat1: Tensor,
- mat2: Tensor,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- hspmm(mat1, mat2, *, out=None) -> Tensor
- Performs a matrix multiplication of a :ref:`sparse COO matrix
- <sparse-coo-docs>` :attr:`mat1` and a strided matrix :attr:`mat2`. The
- result is a (1 + 1)-dimensional :ref:`hybrid COO matrix
- <sparse-hybrid-coo-docs>`.
- Args:
- mat1 (Tensor): the first sparse matrix to be matrix multiplied
- mat2 (Tensor): the second strided matrix to be matrix multiplied
- Keyword args:
- out (Tensor, optional): the output tensor.
- """
- def hstack(
- tensors: tuple[Tensor, ...] | list[Tensor] | None,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- hstack(tensors, *, out=None) -> Tensor
- Stack tensors in sequence horizontally (column wise).
- This is equivalent to concatenation along the first axis for 1-D tensors, and along the second axis for all other tensors.
- Args:
- tensors (sequence of Tensors): sequence of tensors to concatenate
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> a = torch.tensor([1, 2, 3])
- >>> b = torch.tensor([4, 5, 6])
- >>> torch.hstack((a,b))
- tensor([1, 2, 3, 4, 5, 6])
- >>> a = torch.tensor([[1],[2],[3]])
- >>> b = torch.tensor([[4],[5],[6]])
- >>> torch.hstack((a,b))
- tensor([[1, 4],
- [2, 5],
- [3, 6]])
- """
- def hypot(
- input: Tensor,
- other: Tensor,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- hypot(input, other, *, out=None) -> Tensor
- Given the legs of a right triangle, return its hypotenuse.
- .. math::
- \text{out}_{i} = \sqrt{\text{input}_{i}^{2} + \text{other}_{i}^{2}}
- The shapes of ``input`` and ``other`` must be
- :ref:`broadcastable <broadcasting-semantics>`.
- Args:
- input (Tensor): the first input tensor
- other (Tensor): the second input tensor
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> a = torch.hypot(torch.tensor([4.0]), torch.tensor([3.0, 4.0, 5.0]))
- tensor([5.0000, 5.6569, 6.4031])
- """
- def i0(input: Tensor, *, out: Tensor | None = None) -> Tensor:
- r"""
- i0(input, *, out=None) -> Tensor
- Alias for :func:`torch.special.i0`.
- """
- def i0_(input: Tensor) -> Tensor: ...
- def igamma(
- input: Tensor,
- other: Tensor,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- igamma(input, other, *, out=None) -> Tensor
- Alias for :func:`torch.special.gammainc`.
- """
- def igammac(
- input: Tensor,
- other: Tensor,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- igammac(input, other, *, out=None) -> Tensor
- Alias for :func:`torch.special.gammaincc`.
- """
- def imag(input: Tensor) -> Tensor:
- r"""
- imag(input) -> Tensor
- Returns a new tensor containing imaginary values of the :attr:`self` tensor.
- The returned tensor and :attr:`self` share the same underlying storage.
- .. warning::
- :func:`imag` is only supported for tensors with complex dtypes.
- Args:
- input (Tensor): the input tensor.
- Example::
- >>> x=torch.randn(4, dtype=torch.cfloat)
- >>> x
- tensor([(0.3100+0.3553j), (-0.5445-0.7896j), (-1.6492-0.0633j), (-0.0638-0.8119j)])
- >>> x.imag
- tensor([ 0.3553, -0.7896, -0.0633, -0.8119])
- """
- @overload
- def index_add(
- input: Tensor,
- dim: _int,
- index: Tensor,
- source: Tensor,
- *,
- alpha: Number | _complex = 1,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- index_add(input: Tensor, dim: int, index: Tensor, source: Tensor, *, alpha: Union[Number, _complex] = 1, out: Optional[Tensor]) -> Tensor # noqa: B950
- See :meth:`~Tensor.index_add_` for function description.
- """
- @overload
- def index_add(
- input: Tensor,
- dim: str | EllipsisType | None,
- index: Tensor,
- source: Tensor,
- *,
- alpha: Number | _complex = 1,
- ) -> Tensor:
- r"""
- index_add(input: Tensor, dim: int, index: Tensor, source: Tensor, *, alpha: Union[Number, _complex] = 1, out: Optional[Tensor]) -> Tensor # noqa: B950
- See :meth:`~Tensor.index_add_` for function description.
- """
- @overload
- def index_copy(
- input: Tensor,
- dim: _int,
- index: Tensor,
- source: Tensor,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- index_copy(input: Tensor, dim: int, index: Tensor, source: Tensor, *, out: Optional[Tensor]) -> Tensor
- See :meth:`~Tensor.index_add_` for function description.
- """
- @overload
- def index_copy(
- input: Tensor,
- dim: str | EllipsisType | None,
- index: Tensor,
- source: Tensor,
- ) -> Tensor:
- r"""
- index_copy(input: Tensor, dim: int, index: Tensor, source: Tensor, *, out: Optional[Tensor]) -> Tensor
- See :meth:`~Tensor.index_add_` for function description.
- """
- @overload
- def index_fill(
- input: Tensor,
- dim: _int,
- index: Tensor,
- value: Tensor,
- ) -> Tensor: ...
- @overload
- def index_fill(
- input: Tensor,
- dim: str | EllipsisType | None,
- index: Tensor,
- value: Tensor,
- ) -> Tensor: ...
- @overload
- def index_fill(
- input: Tensor,
- dim: _int,
- index: Tensor,
- value: Number | _complex,
- ) -> Tensor: ...
- @overload
- def index_fill(
- input: Tensor,
- dim: str | EllipsisType | None,
- index: Tensor,
- value: Number | _complex,
- ) -> Tensor: ...
- def index_put(
- input: Tensor,
- indices: tuple[Tensor, ...] | list[Tensor] | None,
- values: Tensor,
- accumulate: _bool = False,
- ) -> Tensor: ...
- def index_put_(
- input: Tensor,
- indices: tuple[Tensor, ...] | list[Tensor] | None,
- values: Tensor,
- accumulate: _bool = False,
- ) -> Tensor: ...
- def index_reduce(
- input: Tensor,
- dim: _int,
- index: Tensor,
- source: Tensor,
- reduce: str,
- *,
- include_self: _bool = True,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- index_reduce(input: Tensor, dim: int, index: Tensor, source: Tensor, reduce: str, *, include_self: bool = True, out: Optional[Tensor]) -> Tensor # noqa: B950
- See :meth:`~Tensor.index_reduce_` for function description.
- """
- @overload
- def index_select(
- input: Tensor,
- dim: _int,
- index: Tensor,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- index_select(input, dim, index, *, out=None) -> Tensor
- Returns a new tensor which indexes the :attr:`input` tensor along dimension
- :attr:`dim` using the entries in :attr:`index` which is a `LongTensor`.
- The returned tensor has the same number of dimensions as the original tensor
- (:attr:`input`). The :attr:`dim`\ th dimension has the same size as the length
- of :attr:`index`; other dimensions have the same size as in the original tensor.
- .. note:: The returned tensor does **not** use the same storage as the original
- tensor. If :attr:`out` has a different shape than expected, we
- silently change it to the correct shape, reallocating the underlying
- storage if necessary.
- Args:
- input (Tensor): the input tensor.
- dim (int): the dimension in which we index
- index (IntTensor or LongTensor): the 1-D tensor containing the indices to index
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> x = torch.randn(3, 4)
- >>> x
- tensor([[ 0.1427, 0.0231, -0.5414, -1.0009],
- [-0.4664, 0.2647, -0.1228, -1.1068],
- [-1.1734, -0.6571, 0.7230, -0.6004]])
- >>> indices = torch.tensor([0, 2])
- >>> torch.index_select(x, 0, indices)
- tensor([[ 0.1427, 0.0231, -0.5414, -1.0009],
- [-1.1734, -0.6571, 0.7230, -0.6004]])
- >>> torch.index_select(x, 1, indices)
- tensor([[ 0.1427, -0.5414],
- [-0.4664, -0.1228],
- [-1.1734, 0.7230]])
- """
- @overload
- def index_select(
- input: Tensor,
- dim: str | EllipsisType | None,
- index: Tensor,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- index_select(input, dim, index, *, out=None) -> Tensor
- Returns a new tensor which indexes the :attr:`input` tensor along dimension
- :attr:`dim` using the entries in :attr:`index` which is a `LongTensor`.
- The returned tensor has the same number of dimensions as the original tensor
- (:attr:`input`). The :attr:`dim`\ th dimension has the same size as the length
- of :attr:`index`; other dimensions have the same size as in the original tensor.
- .. note:: The returned tensor does **not** use the same storage as the original
- tensor. If :attr:`out` has a different shape than expected, we
- silently change it to the correct shape, reallocating the underlying
- storage if necessary.
- Args:
- input (Tensor): the input tensor.
- dim (int): the dimension in which we index
- index (IntTensor or LongTensor): the 1-D tensor containing the indices to index
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> x = torch.randn(3, 4)
- >>> x
- tensor([[ 0.1427, 0.0231, -0.5414, -1.0009],
- [-0.4664, 0.2647, -0.1228, -1.1068],
- [-1.1734, -0.6571, 0.7230, -0.6004]])
- >>> indices = torch.tensor([0, 2])
- >>> torch.index_select(x, 0, indices)
- tensor([[ 0.1427, 0.0231, -0.5414, -1.0009],
- [-1.1734, -0.6571, 0.7230, -0.6004]])
- >>> torch.index_select(x, 1, indices)
- tensor([[ 0.1427, -0.5414],
- [-0.4664, -0.1228],
- [-1.1734, 0.7230]])
- """
- def indices_copy(input: Tensor, *, out: Tensor | None = None) -> Tensor:
- r"""
- Performs the same operation as :func:`torch.indices`, but all output tensors
- are freshly created instead of aliasing the input.
- """
- def init_num_threads() -> None: ...
- def inner(
- input: Tensor,
- other: Tensor,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- inner(input, other, *, out=None) -> Tensor
- Computes the dot product for 1D tensors. For higher dimensions, sums the product
- of elements from :attr:`input` and :attr:`other` along their last dimension.
- .. note::
- If either :attr:`input` or :attr:`other` is a scalar, the result is equivalent
- to `torch.mul(input, other)`.
- If both :attr:`input` and :attr:`other` are non-scalars, the size of their last
- dimension must match and the result is equivalent to `torch.tensordot(input,
- other, dims=([-1], [-1]))`
- Args:
- input (Tensor): First input tensor
- other (Tensor): Second input tensor
- Keyword args:
- out (Tensor, optional): Optional output tensor to write result into. The output
- shape is `input.shape[:-1] + other.shape[:-1]`.
- Example::
- # Dot product
- >>> torch.inner(torch.tensor([1, 2, 3]), torch.tensor([0, 2, 1]))
- tensor(7)
- # Multidimensional input tensors
- >>> a = torch.randn(2, 3)
- >>> a
- tensor([[0.8173, 1.0874, 1.1784],
- [0.3279, 0.1234, 2.7894]])
- >>> b = torch.randn(2, 4, 3)
- >>> b
- tensor([[[-0.4682, -0.7159, 0.1506],
- [ 0.4034, -0.3657, 1.0387],
- [ 0.9892, -0.6684, 0.1774],
- [ 0.9482, 1.3261, 0.3917]],
- [[ 0.4537, 0.7493, 1.1724],
- [ 0.2291, 0.5749, -0.2267],
- [-0.7920, 0.3607, -0.3701],
- [ 1.3666, -0.5850, -1.7242]]])
- >>> torch.inner(a, b)
- tensor([[[-0.9837, 1.1560, 0.2907, 2.6785],
- [ 2.5671, 0.5452, -0.6912, -1.5509]],
- [[ 0.1782, 2.9843, 0.7366, 1.5672],
- [ 3.5115, -0.4864, -1.2476, -4.4337]]])
- # Scalar input
- >>> torch.inner(a, torch.tensor(2))
- tensor([[1.6347, 2.1748, 2.3567],
- [0.6558, 0.2469, 5.5787]])
- """
- def instance_norm(
- input: Tensor,
- weight: Tensor | None,
- bias: Tensor | None,
- running_mean: Tensor | None,
- running_var: Tensor | None,
- use_input_stats: _bool,
- momentum: _float,
- eps: _float,
- cudnn_enabled: _bool,
- ) -> Tensor: ...
- def int_repr(input: Tensor) -> Tensor: ...
- def inverse(input: Tensor, *, out: Tensor | None = None) -> Tensor:
- r"""
- inverse(input, *, out=None) -> Tensor
- Alias for :func:`torch.linalg.inv`
- """
- def is_complex(input: Tensor) -> _bool:
- r"""
- is_complex(input: Tensor) -> bool
- Returns True if the data type of :attr:`input` is a complex data type i.e.,
- one of ``torch.complex64``, and ``torch.complex128``.
- Args:
- input (Tensor): the input tensor.
- Example::
- >>> torch.is_complex(torch.tensor([1, 2, 3], dtype=torch.complex64))
- True
- >>> torch.is_complex(torch.tensor([1, 2, 3], dtype=torch.complex128))
- True
- >>> torch.is_complex(torch.tensor([1, 2, 3], dtype=torch.int32))
- False
- >>> torch.is_complex(torch.tensor([1.0, 2.0, 3.0], dtype=torch.float16))
- False
- """
- def is_conj(input: Tensor) -> _bool:
- r"""
- is_conj(input) -> (bool)
- Returns True if the :attr:`input` is a conjugated tensor, i.e. its conjugate bit is set to `True`.
- Args:
- input (Tensor): the input tensor.
- """
- def is_distributed(input: Tensor) -> _bool: ...
- def is_floating_point(input: Tensor) -> _bool:
- r"""
- is_floating_point(input: Tensor) -> bool
- Returns True if the data type of :attr:`input` is a floating point data type i.e.,
- one of ``torch.float64``, ``torch.float32``, ``torch.float16``, and ``torch.bfloat16``.
- Args:
- input (Tensor): the input tensor.
- Example::
- >>> torch.is_floating_point(torch.tensor([1.0, 2.0, 3.0]))
- True
- >>> torch.is_floating_point(torch.tensor([1, 2, 3], dtype=torch.int32))
- False
- >>> torch.is_floating_point(torch.tensor([1.0, 2.0, 3.0], dtype=torch.float16))
- True
- >>> torch.is_floating_point(torch.tensor([1, 2, 3], dtype=torch.complex64))
- False
- """
- def is_grad_enabled() -> _bool:
- r"""
- is_grad_enabled() -> (bool)
- Returns True if grad mode is currently enabled.
- """
- def is_inference(input: Tensor) -> _bool:
- r"""
- is_inference(input) -> (bool)
- Returns True if :attr:`input` is an inference tensor.
- A non-view tensor is an inference tensor if and only if it was
- allocated during inference mode. A view tensor is an inference
- tensor if and only if the tensor it is a view of is an inference tensor.
- For details on inference mode please see
- `Inference Mode <https://pytorch.org/cppdocs/notes/inference_mode.html>`_.
- Args:
- input (Tensor): the input tensor.
- """
- def is_inference_mode_enabled() -> _bool:
- r"""
- is_inference_mode_enabled() -> (bool)
- Returns True if inference mode is currently enabled.
- """
- def is_neg(input: Tensor) -> _bool: ...
- def is_nonzero(input: Tensor) -> _bool:
- r"""
- is_nonzero(input) -> (bool)
- Returns True if the :attr:`input` is a single element tensor which is not equal to zero
- after type conversions.
- i.e. not equal to ``torch.tensor([0.])`` or ``torch.tensor([0])`` or
- ``torch.tensor([False])``.
- Throws a ``RuntimeError`` if ``torch.numel() != 1`` (even in case
- of sparse tensors).
- Args:
- input (Tensor): the input tensor.
- Examples::
- >>> torch.is_nonzero(torch.tensor([0.]))
- False
- >>> torch.is_nonzero(torch.tensor([1.5]))
- True
- >>> torch.is_nonzero(torch.tensor([False]))
- False
- >>> torch.is_nonzero(torch.tensor([3]))
- True
- >>> torch.is_nonzero(torch.tensor([1, 3, 5]))
- Traceback (most recent call last):
- ...
- RuntimeError: Boolean value of Tensor with more than one value is ambiguous
- >>> torch.is_nonzero(torch.tensor([]))
- Traceback (most recent call last):
- ...
- RuntimeError: Boolean value of Tensor with no values is ambiguous
- """
- def is_same_size(input: Tensor, other: Tensor) -> _bool: ...
- def is_signed(input: Tensor) -> _bool: ...
- def is_vulkan_available() -> _bool: ...
- def isclose(
- input: Tensor,
- other: Tensor,
- rtol: _float = 1e-05,
- atol: _float = 1e-08,
- equal_nan: _bool = False,
- ) -> Tensor:
- r"""
- isclose(input, other, rtol=1e-05, atol=1e-08, equal_nan=False) -> Tensor
- Returns a new tensor with boolean elements representing if each element of
- :attr:`input` is "close" to the corresponding element of :attr:`other`.
- Closeness is defined as:
- .. math::
- \lvert \text{input}_i - \text{other}_i \rvert \leq \texttt{rtol} \times \lvert \text{other}_i \rvert + \texttt{atol}
- where :attr:`input` and :attr:`other` are finite. Where :attr:`input`
- and/or :attr:`other` are nonfinite they are close if and only if
- they are equal, with NaNs being considered equal to each other when
- :attr:`equal_nan` is True.
- Args:
- input (Tensor): first tensor to compare
- other (Tensor): second tensor to compare
- rtol (float, optional): relative tolerance. Default: 1e-05
- atol (float, optional): absolute tolerance. Default: 1e-08
- equal_nan (bool, optional): if ``True``, then two ``NaN`` s will be considered equal. Default: ``False``
- Examples::
- >>> torch.isclose(torch.tensor((1., 2, 3)), torch.tensor((1 + 1e-10, 3, 4)))
- tensor([ True, False, False])
- >>> torch.isclose(torch.tensor((float('inf'), 4)), torch.tensor((float('inf'), 6)), rtol=.5)
- tensor([True, True])
- """
- def isfinite(input: Tensor) -> Tensor:
- r"""
- isfinite(input) -> Tensor
- Returns a new tensor with boolean elements representing if each element is `finite` or not.
- Real values are finite when they are not NaN, negative infinity, or infinity.
- Complex values are finite when both their real and imaginary parts are finite.
- Args:
- input (Tensor): the input tensor.
- Returns:
- A boolean tensor that is True where :attr:`input` is finite and False elsewhere
- Example::
- >>> torch.isfinite(torch.tensor([1, float('inf'), 2, float('-inf'), float('nan')]))
- tensor([True, False, True, False, False])
- """
- @overload
- def isin(
- elements: Tensor,
- test_elements: Tensor,
- *,
- assume_unique: _bool = False,
- invert: _bool = False,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- isin(elements, test_elements, *, assume_unique=False, invert=False) -> Tensor
- Tests if each element of :attr:`elements` is in :attr:`test_elements`. Returns
- a boolean tensor of the same shape as :attr:`elements` that is True for elements
- in :attr:`test_elements` and False otherwise.
- .. note::
- One of :attr:`elements` or :attr:`test_elements` can be a scalar, but not both.
- Args:
- elements (Tensor or Scalar): Input elements
- test_elements (Tensor or Scalar): Values against which to test for each input element
- assume_unique (bool, optional): If True, assumes both :attr:`elements` and
- :attr:`test_elements` contain unique elements, which can speed up the
- calculation. Default: False
- invert (bool, optional): If True, inverts the boolean return tensor, resulting in True
- values for elements *not* in :attr:`test_elements`. Default: False
- Returns:
- A boolean tensor of the same shape as :attr:`elements` that is True for elements in
- :attr:`test_elements` and False otherwise
- Example:
- >>> torch.isin(torch.tensor([[1, 2], [3, 4]]), torch.tensor([2, 3]))
- tensor([[False, True],
- [ True, False]])
- """
- @overload
- def isin(
- element: Number | _complex,
- test_elements: Tensor,
- *,
- assume_unique: _bool = False,
- invert: _bool = False,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- isin(elements, test_elements, *, assume_unique=False, invert=False) -> Tensor
- Tests if each element of :attr:`elements` is in :attr:`test_elements`. Returns
- a boolean tensor of the same shape as :attr:`elements` that is True for elements
- in :attr:`test_elements` and False otherwise.
- .. note::
- One of :attr:`elements` or :attr:`test_elements` can be a scalar, but not both.
- Args:
- elements (Tensor or Scalar): Input elements
- test_elements (Tensor or Scalar): Values against which to test for each input element
- assume_unique (bool, optional): If True, assumes both :attr:`elements` and
- :attr:`test_elements` contain unique elements, which can speed up the
- calculation. Default: False
- invert (bool, optional): If True, inverts the boolean return tensor, resulting in True
- values for elements *not* in :attr:`test_elements`. Default: False
- Returns:
- A boolean tensor of the same shape as :attr:`elements` that is True for elements in
- :attr:`test_elements` and False otherwise
- Example:
- >>> torch.isin(torch.tensor([[1, 2], [3, 4]]), torch.tensor([2, 3]))
- tensor([[False, True],
- [ True, False]])
- """
- @overload
- def isin(
- elements: Tensor,
- test_element: Number | _complex,
- *,
- assume_unique: _bool = False,
- invert: _bool = False,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- isin(elements, test_elements, *, assume_unique=False, invert=False) -> Tensor
- Tests if each element of :attr:`elements` is in :attr:`test_elements`. Returns
- a boolean tensor of the same shape as :attr:`elements` that is True for elements
- in :attr:`test_elements` and False otherwise.
- .. note::
- One of :attr:`elements` or :attr:`test_elements` can be a scalar, but not both.
- Args:
- elements (Tensor or Scalar): Input elements
- test_elements (Tensor or Scalar): Values against which to test for each input element
- assume_unique (bool, optional): If True, assumes both :attr:`elements` and
- :attr:`test_elements` contain unique elements, which can speed up the
- calculation. Default: False
- invert (bool, optional): If True, inverts the boolean return tensor, resulting in True
- values for elements *not* in :attr:`test_elements`. Default: False
- Returns:
- A boolean tensor of the same shape as :attr:`elements` that is True for elements in
- :attr:`test_elements` and False otherwise
- Example:
- >>> torch.isin(torch.tensor([[1, 2], [3, 4]]), torch.tensor([2, 3]))
- tensor([[False, True],
- [ True, False]])
- """
- def isinf(input: Tensor) -> Tensor:
- r"""
- isinf(input) -> Tensor
- Tests if each element of :attr:`input` is infinite
- (positive or negative infinity) or not.
- .. note::
- Complex values are infinite when their real or imaginary part is
- infinite.
- Args:
- input (Tensor): the input tensor.
- Returns:
- A boolean tensor that is True where :attr:`input` is infinite and False elsewhere
- Example::
- >>> torch.isinf(torch.tensor([1, float('inf'), 2, float('-inf'), float('nan')]))
- tensor([False, True, False, True, False])
- """
- def isnan(input: Tensor) -> Tensor:
- r"""
- isnan(input) -> Tensor
- Returns a new tensor with boolean elements representing if each element of :attr:`input`
- is NaN or not. Complex values are considered NaN when either their real
- and/or imaginary part is NaN.
- Arguments:
- input (Tensor): the input tensor.
- Returns:
- A boolean tensor that is True where :attr:`input` is NaN and False elsewhere
- Example::
- >>> torch.isnan(torch.tensor([1, float('nan'), 2]))
- tensor([False, True, False])
- """
- def isneginf(input: Tensor, *, out: Tensor | None = None) -> Tensor:
- r"""
- isneginf(input, *, out=None) -> Tensor
- Tests if each element of :attr:`input` is negative infinity or not.
- Args:
- input (Tensor): the input tensor.
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> a = torch.tensor([-float('inf'), float('inf'), 1.2])
- >>> torch.isneginf(a)
- tensor([ True, False, False])
- """
- def isposinf(input: Tensor, *, out: Tensor | None = None) -> Tensor:
- r"""
- isposinf(input, *, out=None) -> Tensor
- Tests if each element of :attr:`input` is positive infinity or not.
- Args:
- input (Tensor): the input tensor.
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> a = torch.tensor([-float('inf'), float('inf'), 1.2])
- >>> torch.isposinf(a)
- tensor([False, True, False])
- """
- def isreal(input: Tensor) -> Tensor:
- r"""
- isreal(input) -> Tensor
- Returns a new tensor with boolean elements representing if each element of :attr:`input` is real-valued or not.
- All real-valued types are considered real. Complex values are considered real when their imaginary part is 0.
- Arguments:
- input (Tensor): the input tensor.
- Returns:
- A boolean tensor that is True where :attr:`input` is real and False elsewhere
- Example::
- >>> torch.isreal(torch.tensor([1, 1+1j, 2+0j]))
- tensor([True, False, True])
- """
- def istft(
- input: Tensor,
- n_fft: _int,
- hop_length: _int | None = None,
- win_length: _int | None = None,
- window: Tensor | None = None,
- center: _bool = True,
- normalized: _bool = False,
- onesided: _bool | None = None,
- length: _int | None = None,
- return_complex: _bool = False,
- ) -> Tensor: ...
- @overload
- def kaiser_window(
- window_length: _int,
- *,
- dtype: _dtype | None = None,
- layout: _layout | None = None,
- device: DeviceLikeType | None = None,
- pin_memory: _bool | None = False,
- requires_grad: _bool | None = False,
- ) -> Tensor:
- r"""
- kaiser_window(window_length, periodic=True, beta=12.0, *, dtype=None, layout=torch.strided, device=None, requires_grad=False) -> Tensor
- Computes the Kaiser window with window length :attr:`window_length` and shape parameter :attr:`beta`.
- Let I_0 be the zeroth order modified Bessel function of the first kind (see :func:`torch.i0`) and
- ``N = L - 1`` if :attr:`periodic` is False and ``L`` if :attr:`periodic` is True,
- where ``L`` is the :attr:`window_length`. This function computes:
- .. math::
- out_i = I_0 \left( \beta \sqrt{1 - \left( {\frac{i - N/2}{N/2}} \right) ^2 } \right) / I_0( \beta )
- Calling ``torch.kaiser_window(L, B, periodic=True)`` is equivalent to calling
- ``torch.kaiser_window(L + 1, B, periodic=False)[:-1])``.
- The :attr:`periodic` argument is intended as a helpful shorthand
- to produce a periodic window as input to functions like :func:`torch.stft`.
- .. note::
- If :attr:`window_length` is one, then the returned window is a single element tensor containing a one.
- Args:
- window_length (int): length of the window.
- periodic (bool, optional): If True, returns a periodic window suitable for use in spectral analysis.
- If False, returns a symmetric window suitable for use in filter design.
- beta (float, optional): shape parameter for the window.
- Keyword args:
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor.
- Default: if ``None``, uses a global default (see :func:`torch.set_default_dtype`).
- layout (:class:`torch.layout`, optional): the desired layout of returned window tensor. Only
- ``torch.strided`` (dense layout) is supported.
- device (:class:`torch.device`, optional): the desired device of returned tensor.
- Default: if ``None``, uses the current device for the default tensor type
- (see :func:`torch.set_default_device`). :attr:`device` will be the CPU
- for CPU tensor types and the current CUDA device for CUDA tensor types.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- """
- @overload
- def kaiser_window(
- window_length: _int,
- periodic: _bool,
- *,
- dtype: _dtype | None = None,
- layout: _layout | None = None,
- device: DeviceLikeType | None = None,
- pin_memory: _bool | None = False,
- requires_grad: _bool | None = False,
- ) -> Tensor:
- r"""
- kaiser_window(window_length, periodic=True, beta=12.0, *, dtype=None, layout=torch.strided, device=None, requires_grad=False) -> Tensor
- Computes the Kaiser window with window length :attr:`window_length` and shape parameter :attr:`beta`.
- Let I_0 be the zeroth order modified Bessel function of the first kind (see :func:`torch.i0`) and
- ``N = L - 1`` if :attr:`periodic` is False and ``L`` if :attr:`periodic` is True,
- where ``L`` is the :attr:`window_length`. This function computes:
- .. math::
- out_i = I_0 \left( \beta \sqrt{1 - \left( {\frac{i - N/2}{N/2}} \right) ^2 } \right) / I_0( \beta )
- Calling ``torch.kaiser_window(L, B, periodic=True)`` is equivalent to calling
- ``torch.kaiser_window(L + 1, B, periodic=False)[:-1])``.
- The :attr:`periodic` argument is intended as a helpful shorthand
- to produce a periodic window as input to functions like :func:`torch.stft`.
- .. note::
- If :attr:`window_length` is one, then the returned window is a single element tensor containing a one.
- Args:
- window_length (int): length of the window.
- periodic (bool, optional): If True, returns a periodic window suitable for use in spectral analysis.
- If False, returns a symmetric window suitable for use in filter design.
- beta (float, optional): shape parameter for the window.
- Keyword args:
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor.
- Default: if ``None``, uses a global default (see :func:`torch.set_default_dtype`).
- layout (:class:`torch.layout`, optional): the desired layout of returned window tensor. Only
- ``torch.strided`` (dense layout) is supported.
- device (:class:`torch.device`, optional): the desired device of returned tensor.
- Default: if ``None``, uses the current device for the default tensor type
- (see :func:`torch.set_default_device`). :attr:`device` will be the CPU
- for CPU tensor types and the current CUDA device for CUDA tensor types.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- """
- @overload
- def kaiser_window(
- window_length: _int,
- periodic: _bool,
- beta: _float,
- *,
- dtype: _dtype | None = None,
- layout: _layout | None = None,
- device: DeviceLikeType | None = None,
- pin_memory: _bool | None = False,
- requires_grad: _bool | None = False,
- ) -> Tensor:
- r"""
- kaiser_window(window_length, periodic=True, beta=12.0, *, dtype=None, layout=torch.strided, device=None, requires_grad=False) -> Tensor
- Computes the Kaiser window with window length :attr:`window_length` and shape parameter :attr:`beta`.
- Let I_0 be the zeroth order modified Bessel function of the first kind (see :func:`torch.i0`) and
- ``N = L - 1`` if :attr:`periodic` is False and ``L`` if :attr:`periodic` is True,
- where ``L`` is the :attr:`window_length`. This function computes:
- .. math::
- out_i = I_0 \left( \beta \sqrt{1 - \left( {\frac{i - N/2}{N/2}} \right) ^2 } \right) / I_0( \beta )
- Calling ``torch.kaiser_window(L, B, periodic=True)`` is equivalent to calling
- ``torch.kaiser_window(L + 1, B, periodic=False)[:-1])``.
- The :attr:`periodic` argument is intended as a helpful shorthand
- to produce a periodic window as input to functions like :func:`torch.stft`.
- .. note::
- If :attr:`window_length` is one, then the returned window is a single element tensor containing a one.
- Args:
- window_length (int): length of the window.
- periodic (bool, optional): If True, returns a periodic window suitable for use in spectral analysis.
- If False, returns a symmetric window suitable for use in filter design.
- beta (float, optional): shape parameter for the window.
- Keyword args:
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor.
- Default: if ``None``, uses a global default (see :func:`torch.set_default_dtype`).
- layout (:class:`torch.layout`, optional): the desired layout of returned window tensor. Only
- ``torch.strided`` (dense layout) is supported.
- device (:class:`torch.device`, optional): the desired device of returned tensor.
- Default: if ``None``, uses the current device for the default tensor type
- (see :func:`torch.set_default_device`). :attr:`device` will be the CPU
- for CPU tensor types and the current CUDA device for CUDA tensor types.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- """
- def kl_div(
- input: Tensor,
- target: Tensor,
- reduction: _int = 1,
- *,
- log_target: _bool = False,
- ) -> Tensor: ...
- def kron(
- input: Tensor,
- other: Tensor,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- kron(input, other, *, out=None) -> Tensor
- Computes the Kronecker product, denoted by :math:`\otimes`, of :attr:`input` and :attr:`other`.
- If :attr:`input` is a :math:`(a_0 \times a_1 \times \dots \times a_n)` tensor and :attr:`other` is a
- :math:`(b_0 \times b_1 \times \dots \times b_n)` tensor, the result will be a
- :math:`(a_0*b_0 \times a_1*b_1 \times \dots \times a_n*b_n)` tensor with the following entries:
- .. math::
- (\text{input} \otimes \text{other})_{k_0, k_1, \dots, k_n} =
- \text{input}_{i_0, i_1, \dots, i_n} * \text{other}_{j_0, j_1, \dots, j_n},
- where :math:`k_t = i_t * b_t + j_t` for :math:`0 \leq t \leq n`.
- If one tensor has fewer dimensions than the other it is unsqueezed until it has the same number of dimensions.
- Supports real-valued and complex-valued inputs.
- .. note::
- This function generalizes the typical definition of the Kronecker product for two matrices to two tensors,
- as described above. When :attr:`input` is a :math:`(m \times n)` matrix and :attr:`other` is a
- :math:`(p \times q)` matrix, the result will be a :math:`(p*m \times q*n)` block matrix:
- .. math::
- \mathbf{A} \otimes \mathbf{B}=\begin{bmatrix}
- a_{11} \mathbf{B} & \cdots & a_{1 n} \mathbf{B} \\
- \vdots & \ddots & \vdots \\
- a_{m 1} \mathbf{B} & \cdots & a_{m n} \mathbf{B} \end{bmatrix}
- where :attr:`input` is :math:`\mathbf{A}` and :attr:`other` is :math:`\mathbf{B}`.
- Arguments:
- input (Tensor)
- other (Tensor)
- Keyword args:
- out (Tensor, optional): The output tensor. Ignored if ``None``. Default: ``None``
- Examples::
- >>> mat1 = torch.eye(2)
- >>> mat2 = torch.ones(2, 2)
- >>> torch.kron(mat1, mat2)
- tensor([[1., 1., 0., 0.],
- [1., 1., 0., 0.],
- [0., 0., 1., 1.],
- [0., 0., 1., 1.]])
- >>> mat1 = torch.eye(2)
- >>> mat2 = torch.arange(1, 5).reshape(2, 2)
- >>> torch.kron(mat1, mat2)
- tensor([[1., 2., 0., 0.],
- [3., 4., 0., 0.],
- [0., 0., 1., 2.],
- [0., 0., 3., 4.]])
- """
- @overload
- def kthvalue(
- input: Tensor,
- k: _int | SymInt,
- dim: _int = -1,
- keepdim: _bool = False,
- *,
- out: Tensor | tuple[Tensor, ...] | list[Tensor] | None = None,
- ) -> torch.return_types.kthvalue:
- r"""
- kthvalue(input, k, dim=None, keepdim=False, *, out=None) -> (Tensor, LongTensor)
- Returns a namedtuple ``(values, indices)`` where ``values`` is the :attr:`k` th
- smallest element of each row of the :attr:`input` tensor in the given dimension
- :attr:`dim`. And ``indices`` is the index location of each element found.
- If :attr:`dim` is not given, the last dimension of the `input` is chosen.
- If :attr:`keepdim` is ``True``, both the :attr:`values` and :attr:`indices` tensors
- are the same size as :attr:`input`, except in the dimension :attr:`dim` where
- they are of size 1. Otherwise, :attr:`dim` is squeezed
- (see :func:`torch.squeeze`), resulting in both the :attr:`values` and
- :attr:`indices` tensors having 1 fewer dimension than the :attr:`input` tensor.
- .. note::
- When :attr:`input` is a CUDA tensor and there are multiple valid
- :attr:`k` th values, this function may nondeterministically return
- :attr:`indices` for any of them.
- Args:
- input (Tensor): the input tensor.
- k (int): k for the k-th smallest element
- dim (int, optional): the dimension to find the kth value along
- keepdim (bool, optional): whether the output tensor has :attr:`dim` retained or not. Default: ``False``.
- Keyword args:
- out (tuple, optional): the output tuple of (Tensor, LongTensor)
- can be optionally given to be used as output buffers
- Example::
- >>> x = torch.arange(1., 6.)
- >>> x
- tensor([ 1., 2., 3., 4., 5.])
- >>> torch.kthvalue(x, 4)
- torch.return_types.kthvalue(values=tensor(4.), indices=tensor(3))
- >>> x=torch.arange(1.,7.).resize_(2,3)
- >>> x
- tensor([[ 1., 2., 3.],
- [ 4., 5., 6.]])
- >>> torch.kthvalue(x, 2, 0, True)
- torch.return_types.kthvalue(values=tensor([[4., 5., 6.]]), indices=tensor([[1, 1, 1]]))
- """
- @overload
- def kthvalue(
- input: Tensor,
- k: _int | SymInt,
- dim: str | EllipsisType | None,
- keepdim: _bool = False,
- *,
- out: Tensor | tuple[Tensor, ...] | list[Tensor] | None = None,
- ) -> torch.return_types.kthvalue:
- r"""
- kthvalue(input, k, dim=None, keepdim=False, *, out=None) -> (Tensor, LongTensor)
- Returns a namedtuple ``(values, indices)`` where ``values`` is the :attr:`k` th
- smallest element of each row of the :attr:`input` tensor in the given dimension
- :attr:`dim`. And ``indices`` is the index location of each element found.
- If :attr:`dim` is not given, the last dimension of the `input` is chosen.
- If :attr:`keepdim` is ``True``, both the :attr:`values` and :attr:`indices` tensors
- are the same size as :attr:`input`, except in the dimension :attr:`dim` where
- they are of size 1. Otherwise, :attr:`dim` is squeezed
- (see :func:`torch.squeeze`), resulting in both the :attr:`values` and
- :attr:`indices` tensors having 1 fewer dimension than the :attr:`input` tensor.
- .. note::
- When :attr:`input` is a CUDA tensor and there are multiple valid
- :attr:`k` th values, this function may nondeterministically return
- :attr:`indices` for any of them.
- Args:
- input (Tensor): the input tensor.
- k (int): k for the k-th smallest element
- dim (int, optional): the dimension to find the kth value along
- keepdim (bool, optional): whether the output tensor has :attr:`dim` retained or not. Default: ``False``.
- Keyword args:
- out (tuple, optional): the output tuple of (Tensor, LongTensor)
- can be optionally given to be used as output buffers
- Example::
- >>> x = torch.arange(1., 6.)
- >>> x
- tensor([ 1., 2., 3., 4., 5.])
- >>> torch.kthvalue(x, 4)
- torch.return_types.kthvalue(values=tensor(4.), indices=tensor(3))
- >>> x=torch.arange(1.,7.).resize_(2,3)
- >>> x
- tensor([[ 1., 2., 3.],
- [ 4., 5., 6.]])
- >>> torch.kthvalue(x, 2, 0, True)
- torch.return_types.kthvalue(values=tensor([[4., 5., 6.]]), indices=tensor([[1, 1, 1]]))
- """
- def layer_norm(
- input: Tensor,
- normalized_shape: Sequence[_int | SymInt],
- weight: Tensor | None = None,
- bias: Tensor | None = None,
- eps: _float = 1e-05,
- cudnn_enable: _bool = True,
- ) -> Tensor: ...
- def lcm(
- input: Tensor,
- other: Tensor,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- lcm(input, other, *, out=None) -> Tensor
- Computes the element-wise least common multiple (LCM) of :attr:`input` and :attr:`other`.
- Both :attr:`input` and :attr:`other` must have integer types.
- .. note::
- This defines :math:`lcm(0, 0) = 0` and :math:`lcm(0, a) = 0`.
- Args:
- input (Tensor): the input tensor.
- other (Tensor): the second input tensor
- Keyword arguments:
- out (Tensor, optional): the output tensor.
- Example::
- >>> a = torch.tensor([5, 10, 15])
- >>> b = torch.tensor([3, 4, 5])
- >>> torch.lcm(a, b)
- tensor([15, 20, 15])
- >>> c = torch.tensor([3])
- >>> torch.lcm(a, c)
- tensor([15, 30, 15])
- """
- def lcm_(input: Tensor, other: Tensor) -> Tensor: ...
- def ldexp(
- input: Tensor,
- other: Tensor,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- ldexp(input, other, *, out=None) -> Tensor
- Multiplies :attr:`input` by 2 ** :attr:`other`.
- .. math::
- \text{{out}}_i = \text{{input}}_i * 2^\text{{other}}_i
- Typically this function is used to construct floating point numbers by multiplying
- mantissas in :attr:`input` with integral powers of two created from the exponents
- in :attr:`other`.
- Args:
- input (Tensor): the input tensor.
- other (Tensor): a tensor of exponents, typically integers.
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> torch.ldexp(torch.tensor([1.]), torch.tensor([1]))
- tensor([2.])
- >>> torch.ldexp(torch.tensor([1.0]), torch.tensor([1, 2, 3, 4]))
- tensor([ 2., 4., 8., 16.])
- """
- def ldexp_(input: Tensor, other: Tensor) -> Tensor: ...
- @overload
- def le(
- input: Tensor,
- other: Tensor,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- le(input, other, *, out=None) -> Tensor
- Computes :math:`\text{input} \leq \text{other}` element-wise.
- The second argument can be a number or a tensor whose shape is
- :ref:`broadcastable <broadcasting-semantics>` with the first argument.
- Args:
- input (Tensor): the tensor to compare
- other (Tensor or Scalar): the tensor or value to compare
- Keyword args:
- out (Tensor, optional): the output tensor.
- Returns:
- A boolean tensor that is True where :attr:`input` is less than or equal to
- :attr:`other` and False elsewhere
- Example::
- >>> torch.le(torch.tensor([[1, 2], [3, 4]]), torch.tensor([[1, 1], [4, 4]]))
- tensor([[True, False], [True, True]])
- """
- @overload
- def le(
- input: Tensor,
- other: Number | _complex,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- le(input, other, *, out=None) -> Tensor
- Computes :math:`\text{input} \leq \text{other}` element-wise.
- The second argument can be a number or a tensor whose shape is
- :ref:`broadcastable <broadcasting-semantics>` with the first argument.
- Args:
- input (Tensor): the tensor to compare
- other (Tensor or Scalar): the tensor or value to compare
- Keyword args:
- out (Tensor, optional): the output tensor.
- Returns:
- A boolean tensor that is True where :attr:`input` is less than or equal to
- :attr:`other` and False elsewhere
- Example::
- >>> torch.le(torch.tensor([[1, 2], [3, 4]]), torch.tensor([[1, 1], [4, 4]]))
- tensor([[True, False], [True, True]])
- """
- @overload
- def lerp(
- input: Tensor,
- end: Tensor,
- weight: Tensor,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- lerp(input, end, weight, *, out=None)
- Does a linear interpolation of two tensors :attr:`start` (given by :attr:`input`) and :attr:`end` based
- on a scalar or tensor :attr:`weight` and returns the resulting :attr:`out` tensor.
- .. math::
- \text{out}_i = \text{start}_i + \text{weight}_i \times (\text{end}_i - \text{start}_i)
- The shapes of :attr:`start` and :attr:`end` must be
- :ref:`broadcastable <broadcasting-semantics>`. If :attr:`weight` is a tensor, then
- the shapes of :attr:`weight`, :attr:`start`, and :attr:`end` must be :ref:`broadcastable <broadcasting-semantics>`.
- Args:
- input (Tensor): the tensor with the starting points
- end (Tensor): the tensor with the ending points
- weight (float or tensor): the weight for the interpolation formula
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> start = torch.arange(1., 5.)
- >>> end = torch.empty(4).fill_(10)
- >>> start
- tensor([ 1., 2., 3., 4.])
- >>> end
- tensor([ 10., 10., 10., 10.])
- >>> torch.lerp(start, end, 0.5)
- tensor([ 5.5000, 6.0000, 6.5000, 7.0000])
- >>> torch.lerp(start, end, torch.full_like(start, 0.5))
- tensor([ 5.5000, 6.0000, 6.5000, 7.0000])
- """
- @overload
- def lerp(
- input: Tensor,
- end: Tensor,
- weight: Number | _complex,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- lerp(input, end, weight, *, out=None)
- Does a linear interpolation of two tensors :attr:`start` (given by :attr:`input`) and :attr:`end` based
- on a scalar or tensor :attr:`weight` and returns the resulting :attr:`out` tensor.
- .. math::
- \text{out}_i = \text{start}_i + \text{weight}_i \times (\text{end}_i - \text{start}_i)
- The shapes of :attr:`start` and :attr:`end` must be
- :ref:`broadcastable <broadcasting-semantics>`. If :attr:`weight` is a tensor, then
- the shapes of :attr:`weight`, :attr:`start`, and :attr:`end` must be :ref:`broadcastable <broadcasting-semantics>`.
- Args:
- input (Tensor): the tensor with the starting points
- end (Tensor): the tensor with the ending points
- weight (float or tensor): the weight for the interpolation formula
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> start = torch.arange(1., 5.)
- >>> end = torch.empty(4).fill_(10)
- >>> start
- tensor([ 1., 2., 3., 4.])
- >>> end
- tensor([ 10., 10., 10., 10.])
- >>> torch.lerp(start, end, 0.5)
- tensor([ 5.5000, 6.0000, 6.5000, 7.0000])
- >>> torch.lerp(start, end, torch.full_like(start, 0.5))
- tensor([ 5.5000, 6.0000, 6.5000, 7.0000])
- """
- @overload
- def less(
- input: Tensor,
- other: Tensor,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- less(input, other, *, out=None) -> Tensor
- Alias for :func:`torch.lt`.
- """
- @overload
- def less(
- input: Tensor,
- other: Number | _complex,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- less(input, other, *, out=None) -> Tensor
- Alias for :func:`torch.lt`.
- """
- @overload
- def less_equal(
- input: Tensor,
- other: Tensor,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- less_equal(input, other, *, out=None) -> Tensor
- Alias for :func:`torch.le`.
- """
- @overload
- def less_equal(
- input: Tensor,
- other: Number | _complex,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- less_equal(input, other, *, out=None) -> Tensor
- Alias for :func:`torch.le`.
- """
- def lgamma(input: Tensor, *, out: Tensor | None = None) -> Tensor:
- r"""
- lgamma(input, *, out=None) -> Tensor
- Computes the natural logarithm of the absolute value of the gamma function on :attr:`input`.
- .. math::
- \text{out}_{i} = \ln |\Gamma(\text{input}_{i})|
- Args:
- input (Tensor): the input tensor.
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> a = torch.arange(0.5, 2, 0.5)
- >>> torch.lgamma(a)
- tensor([ 0.5724, 0.0000, -0.1208])
- """
- @overload
- def linspace(
- start: Number,
- end: Number,
- steps: _int | None = None,
- *,
- out: Tensor | None = None,
- dtype: _dtype | None = None,
- device: DeviceLikeType | None = None,
- requires_grad: _bool = False,
- pin_memory: _bool = False,
- ) -> Tensor:
- r"""
- linspace(start, end, steps, *, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False) -> Tensor
- Creates a one-dimensional tensor of size :attr:`steps` whose values are evenly
- spaced from :attr:`start` to :attr:`end`, inclusive. That is, the value are:
- .. math::
- (\text{start},
- \text{start} + \frac{\text{end} - \text{start}}{\text{steps} - 1},
- \ldots,
- \text{start} + (\text{steps} - 2) * \frac{\text{end} - \text{start}}{\text{steps} - 1},
- \text{end})
- From PyTorch 1.11 linspace requires the steps argument. Use steps=100 to restore the previous behavior.
- Args:
- start (float or Tensor): the starting value for the set of points. If `Tensor`, it must be 0-dimensional
- end (float or Tensor): the ending value for the set of points. If `Tensor`, it must be 0-dimensional
- steps (int): size of the constructed tensor
- Keyword arguments:
- out (Tensor, optional): the output tensor.
- dtype (torch.dtype, optional): the data type to perform the computation in.
- Default: if None, uses the global default dtype (see torch.get_default_dtype())
- when both :attr:`start` and :attr:`end` are real,
- and corresponding complex dtype when either is complex.
- layout (:class:`torch.layout`, optional): the desired layout of returned Tensor.
- Default: ``torch.strided``.
- device (:class:`torch.device`, optional): the desired device of returned tensor.
- Default: if ``None``, uses the current device for the default tensor type
- (see :func:`torch.set_default_device`). :attr:`device` will be the CPU
- for CPU tensor types and the current CUDA device for CUDA tensor types.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- Example::
- >>> torch.linspace(3, 10, steps=5)
- tensor([ 3.0000, 4.7500, 6.5000, 8.2500, 10.0000])
- >>> torch.linspace(-10, 10, steps=5)
- tensor([-10., -5., 0., 5., 10.])
- >>> torch.linspace(start=-10, end=10, steps=5)
- tensor([-10., -5., 0., 5., 10.])
- >>> torch.linspace(start=-10, end=10, steps=1)
- tensor([-10.])
- """
- @overload
- def linspace(
- start: Tensor,
- end: Tensor,
- steps: _int,
- *,
- out: Tensor | None = None,
- dtype: _dtype | None = None,
- layout: _layout | None = None,
- device: DeviceLikeType | None = None,
- pin_memory: _bool | None = False,
- requires_grad: _bool | None = False,
- ) -> Tensor:
- r"""
- linspace(start, end, steps, *, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False) -> Tensor
- Creates a one-dimensional tensor of size :attr:`steps` whose values are evenly
- spaced from :attr:`start` to :attr:`end`, inclusive. That is, the value are:
- .. math::
- (\text{start},
- \text{start} + \frac{\text{end} - \text{start}}{\text{steps} - 1},
- \ldots,
- \text{start} + (\text{steps} - 2) * \frac{\text{end} - \text{start}}{\text{steps} - 1},
- \text{end})
- From PyTorch 1.11 linspace requires the steps argument. Use steps=100 to restore the previous behavior.
- Args:
- start (float or Tensor): the starting value for the set of points. If `Tensor`, it must be 0-dimensional
- end (float or Tensor): the ending value for the set of points. If `Tensor`, it must be 0-dimensional
- steps (int): size of the constructed tensor
- Keyword arguments:
- out (Tensor, optional): the output tensor.
- dtype (torch.dtype, optional): the data type to perform the computation in.
- Default: if None, uses the global default dtype (see torch.get_default_dtype())
- when both :attr:`start` and :attr:`end` are real,
- and corresponding complex dtype when either is complex.
- layout (:class:`torch.layout`, optional): the desired layout of returned Tensor.
- Default: ``torch.strided``.
- device (:class:`torch.device`, optional): the desired device of returned tensor.
- Default: if ``None``, uses the current device for the default tensor type
- (see :func:`torch.set_default_device`). :attr:`device` will be the CPU
- for CPU tensor types and the current CUDA device for CUDA tensor types.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- Example::
- >>> torch.linspace(3, 10, steps=5)
- tensor([ 3.0000, 4.7500, 6.5000, 8.2500, 10.0000])
- >>> torch.linspace(-10, 10, steps=5)
- tensor([-10., -5., 0., 5., 10.])
- >>> torch.linspace(start=-10, end=10, steps=5)
- tensor([-10., -5., 0., 5., 10.])
- >>> torch.linspace(start=-10, end=10, steps=1)
- tensor([-10.])
- """
- @overload
- def linspace(
- start: Number | _complex,
- end: Tensor,
- steps: _int,
- *,
- out: Tensor | None = None,
- dtype: _dtype | None = None,
- layout: _layout | None = None,
- device: DeviceLikeType | None = None,
- pin_memory: _bool | None = False,
- requires_grad: _bool | None = False,
- ) -> Tensor:
- r"""
- linspace(start, end, steps, *, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False) -> Tensor
- Creates a one-dimensional tensor of size :attr:`steps` whose values are evenly
- spaced from :attr:`start` to :attr:`end`, inclusive. That is, the value are:
- .. math::
- (\text{start},
- \text{start} + \frac{\text{end} - \text{start}}{\text{steps} - 1},
- \ldots,
- \text{start} + (\text{steps} - 2) * \frac{\text{end} - \text{start}}{\text{steps} - 1},
- \text{end})
- From PyTorch 1.11 linspace requires the steps argument. Use steps=100 to restore the previous behavior.
- Args:
- start (float or Tensor): the starting value for the set of points. If `Tensor`, it must be 0-dimensional
- end (float or Tensor): the ending value for the set of points. If `Tensor`, it must be 0-dimensional
- steps (int): size of the constructed tensor
- Keyword arguments:
- out (Tensor, optional): the output tensor.
- dtype (torch.dtype, optional): the data type to perform the computation in.
- Default: if None, uses the global default dtype (see torch.get_default_dtype())
- when both :attr:`start` and :attr:`end` are real,
- and corresponding complex dtype when either is complex.
- layout (:class:`torch.layout`, optional): the desired layout of returned Tensor.
- Default: ``torch.strided``.
- device (:class:`torch.device`, optional): the desired device of returned tensor.
- Default: if ``None``, uses the current device for the default tensor type
- (see :func:`torch.set_default_device`). :attr:`device` will be the CPU
- for CPU tensor types and the current CUDA device for CUDA tensor types.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- Example::
- >>> torch.linspace(3, 10, steps=5)
- tensor([ 3.0000, 4.7500, 6.5000, 8.2500, 10.0000])
- >>> torch.linspace(-10, 10, steps=5)
- tensor([-10., -5., 0., 5., 10.])
- >>> torch.linspace(start=-10, end=10, steps=5)
- tensor([-10., -5., 0., 5., 10.])
- >>> torch.linspace(start=-10, end=10, steps=1)
- tensor([-10.])
- """
- @overload
- def linspace(
- start: Tensor,
- end: Number | _complex,
- steps: _int,
- *,
- out: Tensor | None = None,
- dtype: _dtype | None = None,
- layout: _layout | None = None,
- device: DeviceLikeType | None = None,
- pin_memory: _bool | None = False,
- requires_grad: _bool | None = False,
- ) -> Tensor:
- r"""
- linspace(start, end, steps, *, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False) -> Tensor
- Creates a one-dimensional tensor of size :attr:`steps` whose values are evenly
- spaced from :attr:`start` to :attr:`end`, inclusive. That is, the value are:
- .. math::
- (\text{start},
- \text{start} + \frac{\text{end} - \text{start}}{\text{steps} - 1},
- \ldots,
- \text{start} + (\text{steps} - 2) * \frac{\text{end} - \text{start}}{\text{steps} - 1},
- \text{end})
- From PyTorch 1.11 linspace requires the steps argument. Use steps=100 to restore the previous behavior.
- Args:
- start (float or Tensor): the starting value for the set of points. If `Tensor`, it must be 0-dimensional
- end (float or Tensor): the ending value for the set of points. If `Tensor`, it must be 0-dimensional
- steps (int): size of the constructed tensor
- Keyword arguments:
- out (Tensor, optional): the output tensor.
- dtype (torch.dtype, optional): the data type to perform the computation in.
- Default: if None, uses the global default dtype (see torch.get_default_dtype())
- when both :attr:`start` and :attr:`end` are real,
- and corresponding complex dtype when either is complex.
- layout (:class:`torch.layout`, optional): the desired layout of returned Tensor.
- Default: ``torch.strided``.
- device (:class:`torch.device`, optional): the desired device of returned tensor.
- Default: if ``None``, uses the current device for the default tensor type
- (see :func:`torch.set_default_device`). :attr:`device` will be the CPU
- for CPU tensor types and the current CUDA device for CUDA tensor types.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- Example::
- >>> torch.linspace(3, 10, steps=5)
- tensor([ 3.0000, 4.7500, 6.5000, 8.2500, 10.0000])
- >>> torch.linspace(-10, 10, steps=5)
- tensor([-10., -5., 0., 5., 10.])
- >>> torch.linspace(start=-10, end=10, steps=5)
- tensor([-10., -5., 0., 5., 10.])
- >>> torch.linspace(start=-10, end=10, steps=1)
- tensor([-10.])
- """
- @overload
- def linspace(
- start: Number | _complex,
- end: Number | _complex,
- steps: _int,
- *,
- out: Tensor | None = None,
- dtype: _dtype | None = None,
- layout: _layout | None = None,
- device: DeviceLikeType | None = None,
- pin_memory: _bool | None = False,
- requires_grad: _bool | None = False,
- ) -> Tensor:
- r"""
- linspace(start, end, steps, *, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False) -> Tensor
- Creates a one-dimensional tensor of size :attr:`steps` whose values are evenly
- spaced from :attr:`start` to :attr:`end`, inclusive. That is, the value are:
- .. math::
- (\text{start},
- \text{start} + \frac{\text{end} - \text{start}}{\text{steps} - 1},
- \ldots,
- \text{start} + (\text{steps} - 2) * \frac{\text{end} - \text{start}}{\text{steps} - 1},
- \text{end})
- From PyTorch 1.11 linspace requires the steps argument. Use steps=100 to restore the previous behavior.
- Args:
- start (float or Tensor): the starting value for the set of points. If `Tensor`, it must be 0-dimensional
- end (float or Tensor): the ending value for the set of points. If `Tensor`, it must be 0-dimensional
- steps (int): size of the constructed tensor
- Keyword arguments:
- out (Tensor, optional): the output tensor.
- dtype (torch.dtype, optional): the data type to perform the computation in.
- Default: if None, uses the global default dtype (see torch.get_default_dtype())
- when both :attr:`start` and :attr:`end` are real,
- and corresponding complex dtype when either is complex.
- layout (:class:`torch.layout`, optional): the desired layout of returned Tensor.
- Default: ``torch.strided``.
- device (:class:`torch.device`, optional): the desired device of returned tensor.
- Default: if ``None``, uses the current device for the default tensor type
- (see :func:`torch.set_default_device`). :attr:`device` will be the CPU
- for CPU tensor types and the current CUDA device for CUDA tensor types.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- Example::
- >>> torch.linspace(3, 10, steps=5)
- tensor([ 3.0000, 4.7500, 6.5000, 8.2500, 10.0000])
- >>> torch.linspace(-10, 10, steps=5)
- tensor([-10., -5., 0., 5., 10.])
- >>> torch.linspace(start=-10, end=10, steps=5)
- tensor([-10., -5., 0., 5., 10.])
- >>> torch.linspace(start=-10, end=10, steps=1)
- tensor([-10.])
- """
- def log(input: Tensor, *, out: Tensor | None = None) -> Tensor:
- r"""
- log(input, *, out=None) -> Tensor
- Returns a new tensor with the natural logarithm of the elements
- of :attr:`input`.
- .. math::
- y_{i} = \log_{e} (x_{i})
- Args:
- input (Tensor): the input tensor.
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> a = torch.rand(5) * 5
- >>> a
- tensor([4.7767, 4.3234, 1.2156, 0.2411, 4.5739])
- >>> torch.log(a)
- tensor([ 1.5637, 1.4640, 0.1952, -1.4226, 1.5204])
- """
- def log10(input: Tensor, *, out: Tensor | None = None) -> Tensor:
- r"""
- log10(input: Tensor, *, out: Optional[Tensor]) -> Tensor
- Returns a new tensor with the logarithm to the base 10 of the elements
- of :attr:`input`.
- .. math::
- y_{i} = \log_{10} (x_{i})
- Args:
- input (Tensor): the input tensor.
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> a = torch.rand(5)
- >>> a
- tensor([ 0.5224, 0.9354, 0.7257, 0.1301, 0.2251])
- >>> torch.log10(a)
- tensor([-0.2820, -0.0290, -0.1392, -0.8857, -0.6476])
- """
- def log10_(input: Tensor) -> Tensor: ...
- def log1p(input: Tensor, *, out: Tensor | None = None) -> Tensor:
- r"""
- log1p(input, *, out=None) -> Tensor
- Returns a new tensor with the natural logarithm of (1 + :attr:`input`).
- .. math::
- y_i = \log_{e} (x_i + 1)
- .. note:: This function is more accurate than :func:`torch.log` for small
- values of :attr:`input`
- Args:
- input (Tensor): the input tensor.
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> a = torch.randn(5)
- >>> a
- tensor([-1.0090, -0.9923, 1.0249, -0.5372, 0.2492])
- >>> torch.log1p(a)
- tensor([ nan, -4.8653, 0.7055, -0.7705, 0.2225])
- """
- def log1p_(input: Tensor) -> Tensor: ...
- def log2(input: Tensor, *, out: Tensor | None = None) -> Tensor:
- r"""
- log2(input: Tensor, *, out: Optional[Tensor]) -> Tensor
- Returns a new tensor with the logarithm to the base 2 of the elements
- of :attr:`input`.
- .. math::
- y_{i} = \log_{2} (x_{i})
- Args:
- input (Tensor): the input tensor.
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> a = torch.rand(5)
- >>> a
- tensor([ 0.8419, 0.8003, 0.9971, 0.5287, 0.0490])
- >>> torch.log2(a)
- tensor([-0.2483, -0.3213, -0.0042, -0.9196, -4.3504])
- """
- def log2_(input: Tensor) -> Tensor: ...
- def log_(input: Tensor) -> Tensor: ...
- @overload
- def log_softmax(
- input: Tensor,
- dim: _int,
- dtype: _dtype | None = None,
- *,
- out: Tensor | None = None,
- ) -> Tensor: ...
- @overload
- def log_softmax(
- input: Tensor,
- dim: str | EllipsisType | None,
- *,
- dtype: _dtype | None = None,
- ) -> Tensor: ...
- def logaddexp(
- input: Tensor,
- other: Tensor,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- logaddexp(input, other, *, out=None) -> Tensor
- Logarithm of the sum of exponentiations of the inputs.
- Calculates pointwise :math:`\log\left(e^x + e^y\right)`. This function is useful
- in statistics where the calculated probabilities of events may be so small as to
- exceed the range of normal floating point numbers. In such cases the logarithm
- of the calculated probability is stored. This function allows adding
- probabilities stored in such a fashion.
- This op should be disambiguated with :func:`torch.logsumexp` which performs a
- reduction on a single tensor.
- Args:
- input (Tensor): the input tensor.
- other (Tensor): the second input tensor
- Keyword arguments:
- out (Tensor, optional): the output tensor.
- Example::
- >>> torch.logaddexp(torch.tensor([-1.0]), torch.tensor([-1.0, -2, -3]))
- tensor([-0.3069, -0.6867, -0.8731])
- >>> torch.logaddexp(torch.tensor([-100.0, -200, -300]), torch.tensor([-1.0, -2, -3]))
- tensor([-1., -2., -3.])
- >>> torch.logaddexp(torch.tensor([1.0, 2000, 30000]), torch.tensor([-1.0, -2, -3]))
- tensor([1.1269e+00, 2.0000e+03, 3.0000e+04])
- """
- def logaddexp2(
- input: Tensor,
- other: Tensor,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- logaddexp2(input, other, *, out=None) -> Tensor
- Logarithm of the sum of exponentiations of the inputs in base-2.
- Calculates pointwise :math:`\log_2\left(2^x + 2^y\right)`. See
- :func:`torch.logaddexp` for more details.
- Args:
- input (Tensor): the input tensor.
- other (Tensor): the second input tensor
- Keyword arguments:
- out (Tensor, optional): the output tensor.
- """
- @overload
- def logcumsumexp(
- input: Tensor,
- dim: _int,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- logcumsumexp(input, dim, *, out=None) -> Tensor
- Returns the logarithm of the cumulative summation of the exponentiation of
- elements of :attr:`input` in the dimension :attr:`dim`.
- For summation index :math:`j` given by `dim` and other indices :math:`i`, the result is
- .. math::
- \text{logcumsumexp}(x)_{ij} = \log \sum\limits_{k=0}^{j} \exp(x_{ik})
- Args:
- input (Tensor): the input tensor.
- dim (int): the dimension to do the operation over
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> a = torch.randn(10)
- >>> torch.logcumsumexp(a, dim=0)
- tensor([-0.42296738, -0.04462666, 0.86278635, 0.94622083, 1.05277811,
- 1.39202815, 1.83525007, 1.84492621, 2.06084887, 2.06844475]))
- """
- @overload
- def logcumsumexp(
- input: Tensor,
- dim: str | EllipsisType | None,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- logcumsumexp(input, dim, *, out=None) -> Tensor
- Returns the logarithm of the cumulative summation of the exponentiation of
- elements of :attr:`input` in the dimension :attr:`dim`.
- For summation index :math:`j` given by `dim` and other indices :math:`i`, the result is
- .. math::
- \text{logcumsumexp}(x)_{ij} = \log \sum\limits_{k=0}^{j} \exp(x_{ik})
- Args:
- input (Tensor): the input tensor.
- dim (int): the dimension to do the operation over
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> a = torch.randn(10)
- >>> torch.logcumsumexp(a, dim=0)
- tensor([-0.42296738, -0.04462666, 0.86278635, 0.94622083, 1.05277811,
- 1.39202815, 1.83525007, 1.84492621, 2.06084887, 2.06844475]))
- """
- def logdet(input: Tensor) -> Tensor:
- r"""
- logdet(input) -> Tensor
- Calculates log determinant of a square matrix or batches of square matrices.
- It returns ``-inf`` if the input has a determinant of zero, and ``NaN`` if it has
- a negative determinant.
- .. note::
- Backward through :meth:`logdet` internally uses SVD results when :attr:`input`
- is not invertible. In this case, double backward through :meth:`logdet` will
- be unstable in when :attr:`input` doesn't have distinct singular values. See
- :func:`torch.linalg.svd` for details.
- .. seealso::
- :func:`torch.linalg.slogdet` computes the sign (resp. angle) and natural logarithm of the
- absolute value of the determinant of real-valued (resp. complex) square matrices.
- Arguments:
- input (Tensor): the input tensor of size ``(*, n, n)`` where ``*`` is zero or more
- batch dimensions.
- Example::
- >>> A = torch.randn(3, 3)
- >>> torch.det(A)
- tensor(0.2611)
- >>> torch.logdet(A)
- tensor(-1.3430)
- >>> A
- tensor([[[ 0.9254, -0.6213],
- [-0.5787, 1.6843]],
- [[ 0.3242, -0.9665],
- [ 0.4539, -0.0887]],
- [[ 1.1336, -0.4025],
- [-0.7089, 0.9032]]])
- >>> A.det()
- tensor([1.1990, 0.4099, 0.7386])
- >>> A.det().log()
- tensor([ 0.1815, -0.8917, -0.3031])
- """
- def logical_and(
- input: Tensor,
- other: Tensor,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- logical_and(input, other, *, out=None) -> Tensor
- Computes the element-wise logical AND of the given input tensors. Zeros are treated as ``False`` and nonzeros are
- treated as ``True``.
- Args:
- input (Tensor): the input tensor.
- other (Tensor): the tensor to compute AND with
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> torch.logical_and(torch.tensor([True, False, True]), torch.tensor([True, False, False]))
- tensor([ True, False, False])
- >>> a = torch.tensor([0, 1, 10, 0], dtype=torch.int8)
- >>> b = torch.tensor([4, 0, 1, 0], dtype=torch.int8)
- >>> torch.logical_and(a, b)
- tensor([False, False, True, False])
- >>> torch.logical_and(a.double(), b.double())
- tensor([False, False, True, False])
- >>> torch.logical_and(a.double(), b)
- tensor([False, False, True, False])
- >>> torch.logical_and(a, b, out=torch.empty(4, dtype=torch.bool))
- tensor([False, False, True, False])
- """
- def logical_not(input: Tensor, *, out: Tensor | None = None) -> Tensor:
- r"""
- logical_not(input, *, out=None) -> Tensor
- Computes the element-wise logical NOT of the given input tensor. If not specified, the output tensor will have the bool
- dtype. If the input tensor is not a bool tensor, zeros are treated as ``False`` and non-zeros are treated as ``True``.
- Args:
- input (Tensor): the input tensor.
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> torch.logical_not(torch.tensor([True, False]))
- tensor([False, True])
- >>> torch.logical_not(torch.tensor([0, 1, -10], dtype=torch.int8))
- tensor([ True, False, False])
- >>> torch.logical_not(torch.tensor([0., 1.5, -10.], dtype=torch.double))
- tensor([ True, False, False])
- >>> torch.logical_not(torch.tensor([0., 1., -10.], dtype=torch.double), out=torch.empty(3, dtype=torch.int16))
- tensor([1, 0, 0], dtype=torch.int16)
- """
- def logical_or(
- input: Tensor,
- other: Tensor,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- logical_or(input, other, *, out=None) -> Tensor
- Computes the element-wise logical OR of the given input tensors. Zeros are treated as ``False`` and nonzeros are
- treated as ``True``.
- Args:
- input (Tensor): the input tensor.
- other (Tensor): the tensor to compute OR with
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> torch.logical_or(torch.tensor([True, False, True]), torch.tensor([True, False, False]))
- tensor([ True, False, True])
- >>> a = torch.tensor([0, 1, 10, 0], dtype=torch.int8)
- >>> b = torch.tensor([4, 0, 1, 0], dtype=torch.int8)
- >>> torch.logical_or(a, b)
- tensor([ True, True, True, False])
- >>> torch.logical_or(a.double(), b.double())
- tensor([ True, True, True, False])
- >>> torch.logical_or(a.double(), b)
- tensor([ True, True, True, False])
- >>> torch.logical_or(a, b, out=torch.empty(4, dtype=torch.bool))
- tensor([ True, True, True, False])
- """
- def logical_xor(
- input: Tensor,
- other: Tensor,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- logical_xor(input: Tensor, other: Tensor, *, out: Optional[Tensor]) -> Tensor
- Computes the element-wise logical XOR of the given input tensors. Zeros are treated as ``False`` and nonzeros are
- treated as ``True``.
- Args:
- input (Tensor): the input tensor.
- other (Tensor): the tensor to compute XOR with
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> torch.logical_xor(torch.tensor([True, False, True]), torch.tensor([True, False, False]))
- tensor([False, False, True])
- >>> a = torch.tensor([0, 1, 10, 0], dtype=torch.int8)
- >>> b = torch.tensor([4, 0, 1, 0], dtype=torch.int8)
- >>> torch.logical_xor(a, b)
- tensor([ True, True, False, False])
- >>> torch.logical_xor(a.double(), b.double())
- tensor([ True, True, False, False])
- >>> torch.logical_xor(a.double(), b)
- tensor([ True, True, False, False])
- >>> torch.logical_xor(a, b, out=torch.empty(4, dtype=torch.bool))
- tensor([ True, True, False, False])
- """
- def logit(
- input: Tensor,
- eps: _float | None = None,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- logit(input, eps=None, *, out=None) -> Tensor
- Alias for :func:`torch.special.logit`.
- """
- def logit_(input: Tensor, eps: _float | None = None) -> Tensor: ...
- @overload
- def logspace(
- start: Number,
- end: Number,
- steps: _int | None = None,
- base: _float = 10.0,
- *,
- out: Tensor | None = None,
- dtype: _dtype | None = None,
- device: DeviceLikeType | None = None,
- requires_grad: _bool = False,
- pin_memory: _bool = False,
- ) -> Tensor:
- r"""
- logspace(start, end, steps, base=10.0, *, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False) -> Tensor
- Creates a one-dimensional tensor of size :attr:`steps` whose values are evenly
- spaced from :math:`{{\text{{base}}}}^{{\text{{start}}}}` to
- :math:`{{\text{{base}}}}^{{\text{{end}}}}`, inclusive, on a logarithmic scale
- with base :attr:`base`. That is, the values are:
- .. math::
- (\text{base}^{\text{start}},
- \text{base}^{(\text{start} + \frac{\text{end} - \text{start}}{ \text{steps} - 1})},
- \ldots,
- \text{base}^{(\text{start} + (\text{steps} - 2) * \frac{\text{end} - \text{start}}{ \text{steps} - 1})},
- \text{base}^{\text{end}})
- From PyTorch 1.11 logspace requires the steps argument. Use steps=100 to restore the previous behavior.
- Args:
- start (float or Tensor): the starting value for the set of points. If `Tensor`, it must be 0-dimensional
- end (float or Tensor): the ending value for the set of points. If `Tensor`, it must be 0-dimensional
- steps (int): size of the constructed tensor
- base (float, optional): base of the logarithm function. Default: ``10.0``.
- Keyword arguments:
- out (Tensor, optional): the output tensor.
- dtype (torch.dtype, optional): the data type to perform the computation in.
- Default: if None, uses the global default dtype (see torch.get_default_dtype())
- when both :attr:`start` and :attr:`end` are real,
- and corresponding complex dtype when either is complex.
- layout (:class:`torch.layout`, optional): the desired layout of returned Tensor.
- Default: ``torch.strided``.
- device (:class:`torch.device`, optional): the desired device of returned tensor.
- Default: if ``None``, uses the current device for the default tensor type
- (see :func:`torch.set_default_device`). :attr:`device` will be the CPU
- for CPU tensor types and the current CUDA device for CUDA tensor types.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- Example::
- >>> torch.logspace(start=-10, end=10, steps=5)
- tensor([ 1.0000e-10, 1.0000e-05, 1.0000e+00, 1.0000e+05, 1.0000e+10])
- >>> torch.logspace(start=0.1, end=1.0, steps=5)
- tensor([ 1.2589, 2.1135, 3.5481, 5.9566, 10.0000])
- >>> torch.logspace(start=0.1, end=1.0, steps=1)
- tensor([1.2589])
- >>> torch.logspace(start=2, end=2, steps=1, base=2)
- tensor([4.0])
- """
- @overload
- def logspace(
- start: Tensor,
- end: Tensor,
- steps: _int,
- base: _float = 10.0,
- *,
- out: Tensor | None = None,
- dtype: _dtype | None = None,
- layout: _layout | None = None,
- device: DeviceLikeType | None = None,
- pin_memory: _bool | None = False,
- requires_grad: _bool | None = False,
- ) -> Tensor:
- r"""
- logspace(start, end, steps, base=10.0, *, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False) -> Tensor
- Creates a one-dimensional tensor of size :attr:`steps` whose values are evenly
- spaced from :math:`{{\text{{base}}}}^{{\text{{start}}}}` to
- :math:`{{\text{{base}}}}^{{\text{{end}}}}`, inclusive, on a logarithmic scale
- with base :attr:`base`. That is, the values are:
- .. math::
- (\text{base}^{\text{start}},
- \text{base}^{(\text{start} + \frac{\text{end} - \text{start}}{ \text{steps} - 1})},
- \ldots,
- \text{base}^{(\text{start} + (\text{steps} - 2) * \frac{\text{end} - \text{start}}{ \text{steps} - 1})},
- \text{base}^{\text{end}})
- From PyTorch 1.11 logspace requires the steps argument. Use steps=100 to restore the previous behavior.
- Args:
- start (float or Tensor): the starting value for the set of points. If `Tensor`, it must be 0-dimensional
- end (float or Tensor): the ending value for the set of points. If `Tensor`, it must be 0-dimensional
- steps (int): size of the constructed tensor
- base (float, optional): base of the logarithm function. Default: ``10.0``.
- Keyword arguments:
- out (Tensor, optional): the output tensor.
- dtype (torch.dtype, optional): the data type to perform the computation in.
- Default: if None, uses the global default dtype (see torch.get_default_dtype())
- when both :attr:`start` and :attr:`end` are real,
- and corresponding complex dtype when either is complex.
- layout (:class:`torch.layout`, optional): the desired layout of returned Tensor.
- Default: ``torch.strided``.
- device (:class:`torch.device`, optional): the desired device of returned tensor.
- Default: if ``None``, uses the current device for the default tensor type
- (see :func:`torch.set_default_device`). :attr:`device` will be the CPU
- for CPU tensor types and the current CUDA device for CUDA tensor types.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- Example::
- >>> torch.logspace(start=-10, end=10, steps=5)
- tensor([ 1.0000e-10, 1.0000e-05, 1.0000e+00, 1.0000e+05, 1.0000e+10])
- >>> torch.logspace(start=0.1, end=1.0, steps=5)
- tensor([ 1.2589, 2.1135, 3.5481, 5.9566, 10.0000])
- >>> torch.logspace(start=0.1, end=1.0, steps=1)
- tensor([1.2589])
- >>> torch.logspace(start=2, end=2, steps=1, base=2)
- tensor([4.0])
- """
- @overload
- def logspace(
- start: Number | _complex,
- end: Tensor,
- steps: _int,
- base: _float = 10.0,
- *,
- out: Tensor | None = None,
- dtype: _dtype | None = None,
- layout: _layout | None = None,
- device: DeviceLikeType | None = None,
- pin_memory: _bool | None = False,
- requires_grad: _bool | None = False,
- ) -> Tensor:
- r"""
- logspace(start, end, steps, base=10.0, *, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False) -> Tensor
- Creates a one-dimensional tensor of size :attr:`steps` whose values are evenly
- spaced from :math:`{{\text{{base}}}}^{{\text{{start}}}}` to
- :math:`{{\text{{base}}}}^{{\text{{end}}}}`, inclusive, on a logarithmic scale
- with base :attr:`base`. That is, the values are:
- .. math::
- (\text{base}^{\text{start}},
- \text{base}^{(\text{start} + \frac{\text{end} - \text{start}}{ \text{steps} - 1})},
- \ldots,
- \text{base}^{(\text{start} + (\text{steps} - 2) * \frac{\text{end} - \text{start}}{ \text{steps} - 1})},
- \text{base}^{\text{end}})
- From PyTorch 1.11 logspace requires the steps argument. Use steps=100 to restore the previous behavior.
- Args:
- start (float or Tensor): the starting value for the set of points. If `Tensor`, it must be 0-dimensional
- end (float or Tensor): the ending value for the set of points. If `Tensor`, it must be 0-dimensional
- steps (int): size of the constructed tensor
- base (float, optional): base of the logarithm function. Default: ``10.0``.
- Keyword arguments:
- out (Tensor, optional): the output tensor.
- dtype (torch.dtype, optional): the data type to perform the computation in.
- Default: if None, uses the global default dtype (see torch.get_default_dtype())
- when both :attr:`start` and :attr:`end` are real,
- and corresponding complex dtype when either is complex.
- layout (:class:`torch.layout`, optional): the desired layout of returned Tensor.
- Default: ``torch.strided``.
- device (:class:`torch.device`, optional): the desired device of returned tensor.
- Default: if ``None``, uses the current device for the default tensor type
- (see :func:`torch.set_default_device`). :attr:`device` will be the CPU
- for CPU tensor types and the current CUDA device for CUDA tensor types.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- Example::
- >>> torch.logspace(start=-10, end=10, steps=5)
- tensor([ 1.0000e-10, 1.0000e-05, 1.0000e+00, 1.0000e+05, 1.0000e+10])
- >>> torch.logspace(start=0.1, end=1.0, steps=5)
- tensor([ 1.2589, 2.1135, 3.5481, 5.9566, 10.0000])
- >>> torch.logspace(start=0.1, end=1.0, steps=1)
- tensor([1.2589])
- >>> torch.logspace(start=2, end=2, steps=1, base=2)
- tensor([4.0])
- """
- @overload
- def logspace(
- start: Tensor,
- end: Number | _complex,
- steps: _int,
- base: _float = 10.0,
- *,
- out: Tensor | None = None,
- dtype: _dtype | None = None,
- layout: _layout | None = None,
- device: DeviceLikeType | None = None,
- pin_memory: _bool | None = False,
- requires_grad: _bool | None = False,
- ) -> Tensor:
- r"""
- logspace(start, end, steps, base=10.0, *, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False) -> Tensor
- Creates a one-dimensional tensor of size :attr:`steps` whose values are evenly
- spaced from :math:`{{\text{{base}}}}^{{\text{{start}}}}` to
- :math:`{{\text{{base}}}}^{{\text{{end}}}}`, inclusive, on a logarithmic scale
- with base :attr:`base`. That is, the values are:
- .. math::
- (\text{base}^{\text{start}},
- \text{base}^{(\text{start} + \frac{\text{end} - \text{start}}{ \text{steps} - 1})},
- \ldots,
- \text{base}^{(\text{start} + (\text{steps} - 2) * \frac{\text{end} - \text{start}}{ \text{steps} - 1})},
- \text{base}^{\text{end}})
- From PyTorch 1.11 logspace requires the steps argument. Use steps=100 to restore the previous behavior.
- Args:
- start (float or Tensor): the starting value for the set of points. If `Tensor`, it must be 0-dimensional
- end (float or Tensor): the ending value for the set of points. If `Tensor`, it must be 0-dimensional
- steps (int): size of the constructed tensor
- base (float, optional): base of the logarithm function. Default: ``10.0``.
- Keyword arguments:
- out (Tensor, optional): the output tensor.
- dtype (torch.dtype, optional): the data type to perform the computation in.
- Default: if None, uses the global default dtype (see torch.get_default_dtype())
- when both :attr:`start` and :attr:`end` are real,
- and corresponding complex dtype when either is complex.
- layout (:class:`torch.layout`, optional): the desired layout of returned Tensor.
- Default: ``torch.strided``.
- device (:class:`torch.device`, optional): the desired device of returned tensor.
- Default: if ``None``, uses the current device for the default tensor type
- (see :func:`torch.set_default_device`). :attr:`device` will be the CPU
- for CPU tensor types and the current CUDA device for CUDA tensor types.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- Example::
- >>> torch.logspace(start=-10, end=10, steps=5)
- tensor([ 1.0000e-10, 1.0000e-05, 1.0000e+00, 1.0000e+05, 1.0000e+10])
- >>> torch.logspace(start=0.1, end=1.0, steps=5)
- tensor([ 1.2589, 2.1135, 3.5481, 5.9566, 10.0000])
- >>> torch.logspace(start=0.1, end=1.0, steps=1)
- tensor([1.2589])
- >>> torch.logspace(start=2, end=2, steps=1, base=2)
- tensor([4.0])
- """
- @overload
- def logspace(
- start: Number | _complex,
- end: Number | _complex,
- steps: _int,
- base: _float = 10.0,
- *,
- out: Tensor | None = None,
- dtype: _dtype | None = None,
- layout: _layout | None = None,
- device: DeviceLikeType | None = None,
- pin_memory: _bool | None = False,
- requires_grad: _bool | None = False,
- ) -> Tensor:
- r"""
- logspace(start, end, steps, base=10.0, *, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False) -> Tensor
- Creates a one-dimensional tensor of size :attr:`steps` whose values are evenly
- spaced from :math:`{{\text{{base}}}}^{{\text{{start}}}}` to
- :math:`{{\text{{base}}}}^{{\text{{end}}}}`, inclusive, on a logarithmic scale
- with base :attr:`base`. That is, the values are:
- .. math::
- (\text{base}^{\text{start}},
- \text{base}^{(\text{start} + \frac{\text{end} - \text{start}}{ \text{steps} - 1})},
- \ldots,
- \text{base}^{(\text{start} + (\text{steps} - 2) * \frac{\text{end} - \text{start}}{ \text{steps} - 1})},
- \text{base}^{\text{end}})
- From PyTorch 1.11 logspace requires the steps argument. Use steps=100 to restore the previous behavior.
- Args:
- start (float or Tensor): the starting value for the set of points. If `Tensor`, it must be 0-dimensional
- end (float or Tensor): the ending value for the set of points. If `Tensor`, it must be 0-dimensional
- steps (int): size of the constructed tensor
- base (float, optional): base of the logarithm function. Default: ``10.0``.
- Keyword arguments:
- out (Tensor, optional): the output tensor.
- dtype (torch.dtype, optional): the data type to perform the computation in.
- Default: if None, uses the global default dtype (see torch.get_default_dtype())
- when both :attr:`start` and :attr:`end` are real,
- and corresponding complex dtype when either is complex.
- layout (:class:`torch.layout`, optional): the desired layout of returned Tensor.
- Default: ``torch.strided``.
- device (:class:`torch.device`, optional): the desired device of returned tensor.
- Default: if ``None``, uses the current device for the default tensor type
- (see :func:`torch.set_default_device`). :attr:`device` will be the CPU
- for CPU tensor types and the current CUDA device for CUDA tensor types.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- Example::
- >>> torch.logspace(start=-10, end=10, steps=5)
- tensor([ 1.0000e-10, 1.0000e-05, 1.0000e+00, 1.0000e+05, 1.0000e+10])
- >>> torch.logspace(start=0.1, end=1.0, steps=5)
- tensor([ 1.2589, 2.1135, 3.5481, 5.9566, 10.0000])
- >>> torch.logspace(start=0.1, end=1.0, steps=1)
- tensor([1.2589])
- >>> torch.logspace(start=2, end=2, steps=1, base=2)
- tensor([4.0])
- """
- @overload
- def logsumexp(
- input: Tensor,
- dim: _int | _size,
- keepdim: _bool = False,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- logsumexp(input, dim, keepdim=False, *, out=None)
- Returns the log of summed exponentials of each row of the :attr:`input`
- tensor in the given dimension :attr:`dim`. The computation is numerically
- stabilized.
- For summation index :math:`j` given by `dim` and other indices :math:`i`, the result is
- .. math::
- \text{logsumexp}(x)_{i} = \log \sum_j \exp(x_{ij})
- If :attr:`keepdim` is ``True``, the output tensor is of the same size
- as :attr:`input` except in the dimension(s) :attr:`dim` where it is of size 1.
- Otherwise, :attr:`dim` is squeezed (see :func:`torch.squeeze`), resulting in the
- output tensor having 1 (or ``len(dim)``) fewer dimension(s).
- Args:
- input (Tensor): the input tensor.
- dim (int or tuple of ints): the dimension or dimensions to reduce.
- keepdim (bool, optional): whether the output tensor has :attr:`dim` retained or not. Default: ``False``.
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> a = torch.randn(3, 3)
- >>> torch.logsumexp(a, 1)
- tensor([1.4907, 1.0593, 1.5696])
- >>> torch.dist(torch.logsumexp(a, 1), torch.log(torch.sum(torch.exp(a), 1)))
- tensor(1.6859e-07)
- """
- @overload
- def logsumexp(
- input: Tensor,
- dim: Sequence[str | EllipsisType | None],
- keepdim: _bool = False,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- logsumexp(input, dim, keepdim=False, *, out=None)
- Returns the log of summed exponentials of each row of the :attr:`input`
- tensor in the given dimension :attr:`dim`. The computation is numerically
- stabilized.
- For summation index :math:`j` given by `dim` and other indices :math:`i`, the result is
- .. math::
- \text{logsumexp}(x)_{i} = \log \sum_j \exp(x_{ij})
- If :attr:`keepdim` is ``True``, the output tensor is of the same size
- as :attr:`input` except in the dimension(s) :attr:`dim` where it is of size 1.
- Otherwise, :attr:`dim` is squeezed (see :func:`torch.squeeze`), resulting in the
- output tensor having 1 (or ``len(dim)``) fewer dimension(s).
- Args:
- input (Tensor): the input tensor.
- dim (int or tuple of ints): the dimension or dimensions to reduce.
- keepdim (bool, optional): whether the output tensor has :attr:`dim` retained or not. Default: ``False``.
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> a = torch.randn(3, 3)
- >>> torch.logsumexp(a, 1)
- tensor([1.4907, 1.0593, 1.5696])
- >>> torch.dist(torch.logsumexp(a, 1), torch.log(torch.sum(torch.exp(a), 1)))
- tensor(1.6859e-07)
- """
- @overload
- def lstm(
- data: Tensor,
- batch_sizes: Tensor,
- hx: tuple[Tensor, ...] | list[Tensor] | None,
- params: tuple[Tensor, ...] | list[Tensor] | None,
- has_biases: _bool,
- num_layers: _int,
- dropout: _float,
- train: _bool,
- bidirectional: _bool,
- ) -> tuple[Tensor, Tensor, Tensor]: ...
- @overload
- def lstm(
- input: Tensor,
- hx: tuple[Tensor, ...] | list[Tensor] | None,
- params: tuple[Tensor, ...] | list[Tensor] | None,
- has_biases: _bool,
- num_layers: _int,
- dropout: _float,
- train: _bool,
- bidirectional: _bool,
- batch_first: _bool,
- ) -> tuple[Tensor, Tensor, Tensor]: ...
- def lstm_cell(
- input: Tensor,
- hx: tuple[Tensor, ...] | list[Tensor] | None,
- w_ih: Tensor,
- w_hh: Tensor,
- b_ih: Tensor | None = None,
- b_hh: Tensor | None = None,
- ) -> tuple[Tensor, Tensor]: ...
- @overload
- def lt(
- input: Tensor,
- other: Tensor,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- lt(input, other, *, out=None) -> Tensor
- Computes :math:`\text{input} < \text{other}` element-wise.
- The second argument can be a number or a tensor whose shape is
- :ref:`broadcastable <broadcasting-semantics>` with the first argument.
- Args:
- input (Tensor): the tensor to compare
- other (Tensor or float): the tensor or value to compare
- Keyword args:
- out (Tensor, optional): the output tensor.
- Returns:
- A boolean tensor that is True where :attr:`input` is less than :attr:`other` and False elsewhere
- Example::
- >>> torch.lt(torch.tensor([[1, 2], [3, 4]]), torch.tensor([[1, 1], [4, 4]]))
- tensor([[False, False], [True, False]])
- """
- @overload
- def lt(
- input: Tensor,
- other: Number | _complex,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- lt(input, other, *, out=None) -> Tensor
- Computes :math:`\text{input} < \text{other}` element-wise.
- The second argument can be a number or a tensor whose shape is
- :ref:`broadcastable <broadcasting-semantics>` with the first argument.
- Args:
- input (Tensor): the tensor to compare
- other (Tensor or float): the tensor or value to compare
- Keyword args:
- out (Tensor, optional): the output tensor.
- Returns:
- A boolean tensor that is True where :attr:`input` is less than :attr:`other` and False elsewhere
- Example::
- >>> torch.lt(torch.tensor([[1, 2], [3, 4]]), torch.tensor([[1, 1], [4, 4]]))
- tensor([[False, False], [True, False]])
- """
- def lu_solve(
- input: Tensor,
- LU_data: Tensor,
- LU_pivots: Tensor,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- lu_solve(b, LU_data, LU_pivots, *, out=None) -> Tensor
- Returns the LU solve of the linear system :math:`Ax = b` using the partially pivoted
- LU factorization of A from :func:`~linalg.lu_factor`.
- This function supports ``float``, ``double``, ``cfloat`` and ``cdouble`` dtypes for :attr:`input`.
- .. warning::
- :func:`torch.lu_solve` is deprecated in favor of :func:`torch.linalg.lu_solve`.
- :func:`torch.lu_solve` will be removed in a future PyTorch release.
- ``X = torch.lu_solve(B, LU, pivots)`` should be replaced with
- .. code:: python
- X = linalg.lu_solve(LU, pivots, B)
- Arguments:
- b (Tensor): the RHS tensor of size :math:`(*, m, k)`, where :math:`*`
- is zero or more batch dimensions.
- LU_data (Tensor): the pivoted LU factorization of A from :meth:`~linalg.lu_factor` of size :math:`(*, m, m)`,
- where :math:`*` is zero or more batch dimensions.
- LU_pivots (IntTensor): the pivots of the LU factorization from :meth:`~linalg.lu_factor` of size :math:`(*, m)`,
- where :math:`*` is zero or more batch dimensions.
- The batch dimensions of :attr:`LU_pivots` must be equal to the batch dimensions of
- :attr:`LU_data`.
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> A = torch.randn(2, 3, 3)
- >>> b = torch.randn(2, 3, 1)
- >>> LU, pivots = torch.linalg.lu_factor(A)
- >>> x = torch.lu_solve(b, LU, pivots)
- >>> torch.dist(A @ x, b)
- tensor(1.00000e-07 *
- 2.8312)
- """
- def lu_unpack(
- LU_data: Tensor,
- LU_pivots: Tensor,
- unpack_data: _bool = True,
- unpack_pivots: _bool = True,
- *,
- out: Tensor | tuple[Tensor, ...] | list[Tensor] | None = None,
- ) -> torch.return_types.lu_unpack:
- r"""
- lu_unpack(LU_data, LU_pivots, unpack_data=True, unpack_pivots=True, *, out=None) -> (Tensor, Tensor, Tensor)
- Unpacks the LU decomposition returned by :func:`~linalg.lu_factor` into the `P, L, U` matrices.
- .. seealso::
- :func:`~linalg.lu` returns the matrices from the LU decomposition. Its gradient formula is more efficient
- than that of doing :func:`~linalg.lu_factor` followed by :func:`~linalg.lu_unpack`.
- Args:
- LU_data (Tensor): the packed LU factorization data
- LU_pivots (Tensor): the packed LU factorization pivots
- unpack_data (bool): flag indicating if the data should be unpacked.
- If ``False``, then the returned ``L`` and ``U`` are empty tensors.
- Default: ``True``
- unpack_pivots (bool): flag indicating if the pivots should be unpacked into a permutation matrix ``P``.
- If ``False``, then the returned ``P`` is an empty tensor.
- Default: ``True``
- Keyword args:
- out (tuple, optional): output tuple of three tensors. Ignored if `None`.
- Returns:
- A namedtuple ``(P, L, U)``
- Examples::
- >>> A = torch.randn(2, 3, 3)
- >>> LU, pivots = torch.linalg.lu_factor(A)
- >>> P, L, U = torch.lu_unpack(LU, pivots)
- >>> # We can recover A from the factorization
- >>> A_ = P @ L @ U
- >>> torch.allclose(A, A_)
- True
- >>> # LU factorization of a rectangular matrix:
- >>> A = torch.randn(2, 3, 2)
- >>> LU, pivots = torch.linalg.lu_factor(A)
- >>> P, L, U = torch.lu_unpack(LU, pivots)
- >>> # P, L, U are the same as returned by linalg.lu
- >>> P_, L_, U_ = torch.linalg.lu(A)
- >>> torch.allclose(P, P_) and torch.allclose(L, L_) and torch.allclose(U, U_)
- True
- """
- def margin_ranking_loss(
- input1: Tensor,
- input2: Tensor,
- target: Tensor,
- margin: _float = 0.0,
- reduction: _int = 1,
- ) -> Tensor: ...
- @overload
- def masked_fill(input: Tensor, mask: Tensor, value: Tensor) -> Tensor: ...
- @overload
- def masked_fill(
- input: Tensor,
- mask: Tensor,
- value: Number | _complex,
- ) -> Tensor: ...
- def masked_scatter(input: Tensor, mask: Tensor, source: Tensor) -> Tensor: ...
- def masked_select(
- input: Tensor,
- mask: Tensor,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- masked_select(input, mask, *, out=None) -> Tensor
- Returns a new 1-D tensor which indexes the :attr:`input` tensor according to
- the boolean mask :attr:`mask` which is a `BoolTensor`.
- The shapes of the :attr:`mask` tensor and the :attr:`input` tensor don't need
- to match, but they must be :ref:`broadcastable <broadcasting-semantics>`.
- .. note:: The returned tensor does **not** use the same storage
- as the original tensor
- Args:
- input (Tensor): the input tensor.
- mask (BoolTensor): the tensor containing the binary mask to index with
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> x = torch.randn(3, 4)
- >>> x
- tensor([[ 0.3552, -2.3825, -0.8297, 0.3477],
- [-1.2035, 1.2252, 0.5002, 0.6248],
- [ 0.1307, -2.0608, 0.1244, 2.0139]])
- >>> mask = x.ge(0.5)
- >>> mask
- tensor([[False, False, False, False],
- [False, True, True, True],
- [False, False, False, True]])
- >>> torch.masked_select(x, mask)
- tensor([ 1.2252, 0.5002, 0.6248, 2.0139])
- """
- def matmul(
- input: Tensor,
- other: Tensor,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- matmul(input, other, *, out=None) -> Tensor
- Matrix product of two tensors.
- The behavior depends on the dimensionality of the tensors as follows:
- - If both tensors are 1-dimensional, the dot product (scalar) is returned.
- - If both arguments are 2-dimensional, the matrix-matrix product is returned.
- - If the first argument is 1-dimensional and the second argument is 2-dimensional,
- a 1 is prepended to its dimension for the purpose of the matrix multiply.
- After the matrix multiply, the prepended dimension is removed.
- - If the first argument is 2-dimensional and the second argument is 1-dimensional,
- the matrix-vector product is returned.
- - If both arguments are at least 1-dimensional and at least one argument is
- N-dimensional (where N > 2), then a batched matrix multiply is returned. If the first
- argument is 1-dimensional, a 1 is prepended to its dimension for the purpose of the
- batched matrix multiply and removed after. If the second argument is 1-dimensional, a
- 1 is appended to its dimension for the purpose of the batched matrix multiply and removed after.
- The first N-2 dimensions of each argument, the batch dimensions, are
- :ref:`broadcast <broadcasting-semantics>` (and thus must be broadcastable).
- The last 2, the matrix dimensions, are handled as in the matrix-matrix product.
- For example, if :attr:`input` is a
- :math:`(j \times 1 \times n \times m)` tensor and :attr:`other` is a :math:`(k \times m \times p)`
- tensor, the batch dimensions are :math:`(j \times 1)` and :math:`(k)`,
- and the matrix dimensions are :math:`(n \times m)` and :math:`(m \times p)`.
- :attr:`out` will be a :math:`(j \times k \times n \times p)` tensor.
- This operation has support for arguments with :ref:`sparse layouts<sparse-docs>`. In particular the
- matrix-matrix (both arguments 2-dimensional) supports sparse arguments with the same restrictions
- as :func:`torch.mm`
- .. warning::
- Sparse support is a beta feature and some layout(s)/dtype/device combinations may not be supported,
- or may not have autograd support. If you notice missing functionality please
- open a feature request.
- This operator supports :ref:`TensorFloat32<tf32_on_ampere>`.
- On certain ROCm devices, when using float16 inputs this module will use :ref:`different precision<fp16_on_mi200>` for backward.
- .. note::
- The 1-dimensional dot product version of this function does not support an :attr:`out` parameter.
- Arguments:
- input (Tensor): the first tensor to be multiplied
- other (Tensor): the second tensor to be multiplied
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> # vector x vector
- >>> tensor1 = torch.randn(3)
- >>> tensor2 = torch.randn(3)
- >>> torch.matmul(tensor1, tensor2).size()
- torch.Size([])
- >>> # matrix x vector
- >>> tensor1 = torch.randn(3, 4)
- >>> tensor2 = torch.randn(4)
- >>> torch.matmul(tensor1, tensor2).size()
- torch.Size([3])
- >>> # batched matrix x broadcasted vector
- >>> tensor1 = torch.randn(10, 3, 4)
- >>> tensor2 = torch.randn(4)
- >>> torch.matmul(tensor1, tensor2).size()
- torch.Size([10, 3])
- >>> # batched matrix x batched matrix
- >>> tensor1 = torch.randn(10, 3, 4)
- >>> tensor2 = torch.randn(10, 4, 5)
- >>> torch.matmul(tensor1, tensor2).size()
- torch.Size([10, 3, 5])
- >>> # batched matrix x broadcasted matrix
- >>> tensor1 = torch.randn(10, 3, 4)
- >>> tensor2 = torch.randn(4, 5)
- >>> torch.matmul(tensor1, tensor2).size()
- torch.Size([10, 3, 5])
- """
- def matrix_exp(input: Tensor) -> Tensor:
- r"""
- matrix_exp(A) -> Tensor
- Alias for :func:`torch.linalg.matrix_exp`.
- """
- def matrix_power(
- input: Tensor,
- n: _int,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- matrix_power(input, n, *, out=None) -> Tensor
- Alias for :func:`torch.linalg.matrix_power`
- """
- @overload
- def max(input: Tensor, *, out: Tensor | None = None) -> Tensor:
- r"""
- max(input, *, out=None) -> Tensor
- Returns the maximum value of all elements in the ``input`` tensor.
- .. note::
- The difference between ``max``/``min`` and ``amax``/``amin`` is:
- - ``amax``/``amin`` supports reducing on multiple dimensions,
- - ``amax``/``amin`` does not return indices.
- Both ``amax``/``amin`` evenly distribute gradients between equal values
- when there are multiple input elements with the same minimum or maximum value.
- For ``max``/``min``:
- - If reduce over all dimensions(no dim specified), gradients evenly distribute between equally ``max``/``min`` values.
- - If reduce over one specified axis, only propagate to the indexed element.
- Args:
- input (Tensor): the input tensor.
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> a = torch.randn(1, 3)
- >>> a
- tensor([[ 0.6763, 0.7445, -2.2369]])
- >>> torch.max(a)
- tensor(0.7445)
- .. function:: max(input, dim, keepdim=False, *, out=None) -> (Tensor, LongTensor)
- :noindex:
- Returns a namedtuple ``(values, indices)`` where ``values`` is the maximum
- value of each row of the :attr:`input` tensor in the given dimension
- :attr:`dim`. And ``indices`` is the index location of each maximum value found
- (argmax).
- If ``keepdim`` is ``True``, the output tensors are of the same size
- as ``input`` except in the dimension ``dim`` where they are of size 1.
- Otherwise, ``dim`` is squeezed (see :func:`torch.squeeze`), resulting
- in the output tensors having 1 fewer dimension than ``input``.
- .. note:: If there are multiple maximal values in a reduced row then
- the indices of the first maximal value are returned.
- Args:
- input (Tensor): the input tensor.
- dim (int, optional): the dimension to reduce. If omitted, all dimensions are reduced. Explicit ``None`` is not supported.
- keepdim (bool, optional): whether the output tensor has :attr:`dim` retained or not. Default: ``False``.
- Keyword args:
- out (tuple, optional): the result tuple of two output tensors (max, max_indices)
- Example::
- >>> a = torch.randn(4, 4)
- >>> a
- tensor([[-1.2360, -0.2942, -0.1222, 0.8475],
- [ 1.1949, -1.1127, -2.2379, -0.6702],
- [ 1.5717, -0.9207, 0.1297, -1.8768],
- [-0.6172, 1.0036, -0.6060, -0.2432]])
- >>> torch.max(a, 1)
- torch.return_types.max(values=tensor([0.8475, 1.1949, 1.5717, 1.0036]), indices=tensor([3, 0, 0, 1]))
- >>> a = torch.tensor([[1.0, 2.0], [3.0, 4.0]])
- >>> a.max(dim=1, keepdim=True)
- torch.return_types.max(
- values=tensor([[2.], [4.]]),
- indices=tensor([[1], [1]]))
- >>> a.max(dim=1, keepdim=False)
- torch.return_types.max(
- values=tensor([2., 4.]),
- indices=tensor([1, 1]))
- .. function:: max(input, other, *, out=None) -> Tensor
- :noindex:
- See :func:`torch.maximum`.
- """
- @overload
- def max(
- input: Tensor,
- other: Tensor,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- max(input, *, out=None) -> Tensor
- Returns the maximum value of all elements in the ``input`` tensor.
- .. note::
- The difference between ``max``/``min`` and ``amax``/``amin`` is:
- - ``amax``/``amin`` supports reducing on multiple dimensions,
- - ``amax``/``amin`` does not return indices.
- Both ``amax``/``amin`` evenly distribute gradients between equal values
- when there are multiple input elements with the same minimum or maximum value.
- For ``max``/``min``:
- - If reduce over all dimensions(no dim specified), gradients evenly distribute between equally ``max``/``min`` values.
- - If reduce over one specified axis, only propagate to the indexed element.
- Args:
- input (Tensor): the input tensor.
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> a = torch.randn(1, 3)
- >>> a
- tensor([[ 0.6763, 0.7445, -2.2369]])
- >>> torch.max(a)
- tensor(0.7445)
- .. function:: max(input, dim, keepdim=False, *, out=None) -> (Tensor, LongTensor)
- :noindex:
- Returns a namedtuple ``(values, indices)`` where ``values`` is the maximum
- value of each row of the :attr:`input` tensor in the given dimension
- :attr:`dim`. And ``indices`` is the index location of each maximum value found
- (argmax).
- If ``keepdim`` is ``True``, the output tensors are of the same size
- as ``input`` except in the dimension ``dim`` where they are of size 1.
- Otherwise, ``dim`` is squeezed (see :func:`torch.squeeze`), resulting
- in the output tensors having 1 fewer dimension than ``input``.
- .. note:: If there are multiple maximal values in a reduced row then
- the indices of the first maximal value are returned.
- Args:
- input (Tensor): the input tensor.
- dim (int, optional): the dimension to reduce. If omitted, all dimensions are reduced. Explicit ``None`` is not supported.
- keepdim (bool, optional): whether the output tensor has :attr:`dim` retained or not. Default: ``False``.
- Keyword args:
- out (tuple, optional): the result tuple of two output tensors (max, max_indices)
- Example::
- >>> a = torch.randn(4, 4)
- >>> a
- tensor([[-1.2360, -0.2942, -0.1222, 0.8475],
- [ 1.1949, -1.1127, -2.2379, -0.6702],
- [ 1.5717, -0.9207, 0.1297, -1.8768],
- [-0.6172, 1.0036, -0.6060, -0.2432]])
- >>> torch.max(a, 1)
- torch.return_types.max(values=tensor([0.8475, 1.1949, 1.5717, 1.0036]), indices=tensor([3, 0, 0, 1]))
- >>> a = torch.tensor([[1.0, 2.0], [3.0, 4.0]])
- >>> a.max(dim=1, keepdim=True)
- torch.return_types.max(
- values=tensor([[2.], [4.]]),
- indices=tensor([[1], [1]]))
- >>> a.max(dim=1, keepdim=False)
- torch.return_types.max(
- values=tensor([2., 4.]),
- indices=tensor([1, 1]))
- .. function:: max(input, other, *, out=None) -> Tensor
- :noindex:
- See :func:`torch.maximum`.
- """
- @overload
- def max(
- input: Tensor,
- dim: _int,
- keepdim: _bool = False,
- *,
- out: Tensor | tuple[Tensor, ...] | list[Tensor] | None = None,
- ) -> torch.return_types.max:
- r"""
- max(input, *, out=None) -> Tensor
- Returns the maximum value of all elements in the ``input`` tensor.
- .. note::
- The difference between ``max``/``min`` and ``amax``/``amin`` is:
- - ``amax``/``amin`` supports reducing on multiple dimensions,
- - ``amax``/``amin`` does not return indices.
- Both ``amax``/``amin`` evenly distribute gradients between equal values
- when there are multiple input elements with the same minimum or maximum value.
- For ``max``/``min``:
- - If reduce over all dimensions(no dim specified), gradients evenly distribute between equally ``max``/``min`` values.
- - If reduce over one specified axis, only propagate to the indexed element.
- Args:
- input (Tensor): the input tensor.
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> a = torch.randn(1, 3)
- >>> a
- tensor([[ 0.6763, 0.7445, -2.2369]])
- >>> torch.max(a)
- tensor(0.7445)
- .. function:: max(input, dim, keepdim=False, *, out=None) -> (Tensor, LongTensor)
- :noindex:
- Returns a namedtuple ``(values, indices)`` where ``values`` is the maximum
- value of each row of the :attr:`input` tensor in the given dimension
- :attr:`dim`. And ``indices`` is the index location of each maximum value found
- (argmax).
- If ``keepdim`` is ``True``, the output tensors are of the same size
- as ``input`` except in the dimension ``dim`` where they are of size 1.
- Otherwise, ``dim`` is squeezed (see :func:`torch.squeeze`), resulting
- in the output tensors having 1 fewer dimension than ``input``.
- .. note:: If there are multiple maximal values in a reduced row then
- the indices of the first maximal value are returned.
- Args:
- input (Tensor): the input tensor.
- dim (int, optional): the dimension to reduce. If omitted, all dimensions are reduced. Explicit ``None`` is not supported.
- keepdim (bool, optional): whether the output tensor has :attr:`dim` retained or not. Default: ``False``.
- Keyword args:
- out (tuple, optional): the result tuple of two output tensors (max, max_indices)
- Example::
- >>> a = torch.randn(4, 4)
- >>> a
- tensor([[-1.2360, -0.2942, -0.1222, 0.8475],
- [ 1.1949, -1.1127, -2.2379, -0.6702],
- [ 1.5717, -0.9207, 0.1297, -1.8768],
- [-0.6172, 1.0036, -0.6060, -0.2432]])
- >>> torch.max(a, 1)
- torch.return_types.max(values=tensor([0.8475, 1.1949, 1.5717, 1.0036]), indices=tensor([3, 0, 0, 1]))
- >>> a = torch.tensor([[1.0, 2.0], [3.0, 4.0]])
- >>> a.max(dim=1, keepdim=True)
- torch.return_types.max(
- values=tensor([[2.], [4.]]),
- indices=tensor([[1], [1]]))
- >>> a.max(dim=1, keepdim=False)
- torch.return_types.max(
- values=tensor([2., 4.]),
- indices=tensor([1, 1]))
- .. function:: max(input, other, *, out=None) -> Tensor
- :noindex:
- See :func:`torch.maximum`.
- """
- @overload
- def max(
- input: Tensor,
- dim: str | EllipsisType | None,
- keepdim: _bool = False,
- *,
- out: Tensor | tuple[Tensor, ...] | list[Tensor] | None = None,
- ) -> torch.return_types.max:
- r"""
- max(input, *, out=None) -> Tensor
- Returns the maximum value of all elements in the ``input`` tensor.
- .. note::
- The difference between ``max``/``min`` and ``amax``/``amin`` is:
- - ``amax``/``amin`` supports reducing on multiple dimensions,
- - ``amax``/``amin`` does not return indices.
- Both ``amax``/``amin`` evenly distribute gradients between equal values
- when there are multiple input elements with the same minimum or maximum value.
- For ``max``/``min``:
- - If reduce over all dimensions(no dim specified), gradients evenly distribute between equally ``max``/``min`` values.
- - If reduce over one specified axis, only propagate to the indexed element.
- Args:
- input (Tensor): the input tensor.
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> a = torch.randn(1, 3)
- >>> a
- tensor([[ 0.6763, 0.7445, -2.2369]])
- >>> torch.max(a)
- tensor(0.7445)
- .. function:: max(input, dim, keepdim=False, *, out=None) -> (Tensor, LongTensor)
- :noindex:
- Returns a namedtuple ``(values, indices)`` where ``values`` is the maximum
- value of each row of the :attr:`input` tensor in the given dimension
- :attr:`dim`. And ``indices`` is the index location of each maximum value found
- (argmax).
- If ``keepdim`` is ``True``, the output tensors are of the same size
- as ``input`` except in the dimension ``dim`` where they are of size 1.
- Otherwise, ``dim`` is squeezed (see :func:`torch.squeeze`), resulting
- in the output tensors having 1 fewer dimension than ``input``.
- .. note:: If there are multiple maximal values in a reduced row then
- the indices of the first maximal value are returned.
- Args:
- input (Tensor): the input tensor.
- dim (int, optional): the dimension to reduce. If omitted, all dimensions are reduced. Explicit ``None`` is not supported.
- keepdim (bool, optional): whether the output tensor has :attr:`dim` retained or not. Default: ``False``.
- Keyword args:
- out (tuple, optional): the result tuple of two output tensors (max, max_indices)
- Example::
- >>> a = torch.randn(4, 4)
- >>> a
- tensor([[-1.2360, -0.2942, -0.1222, 0.8475],
- [ 1.1949, -1.1127, -2.2379, -0.6702],
- [ 1.5717, -0.9207, 0.1297, -1.8768],
- [-0.6172, 1.0036, -0.6060, -0.2432]])
- >>> torch.max(a, 1)
- torch.return_types.max(values=tensor([0.8475, 1.1949, 1.5717, 1.0036]), indices=tensor([3, 0, 0, 1]))
- >>> a = torch.tensor([[1.0, 2.0], [3.0, 4.0]])
- >>> a.max(dim=1, keepdim=True)
- torch.return_types.max(
- values=tensor([[2.], [4.]]),
- indices=tensor([[1], [1]]))
- >>> a.max(dim=1, keepdim=False)
- torch.return_types.max(
- values=tensor([2., 4.]),
- indices=tensor([1, 1]))
- .. function:: max(input, other, *, out=None) -> Tensor
- :noindex:
- See :func:`torch.maximum`.
- """
- def max_pool1d(
- input: Tensor,
- kernel_size: _int | _size,
- stride: _int | _size = (),
- padding: _int | _size = 0,
- dilation: _int | _size = 1,
- ceil_mode: _bool = False,
- ) -> Tensor: ...
- def max_pool1d_with_indices(
- input: Tensor,
- kernel_size: _int | _size,
- stride: _int | _size = (),
- padding: _int | _size = 0,
- dilation: _int | _size = 1,
- ceil_mode: _bool = False,
- ) -> tuple[Tensor, Tensor]: ...
- def max_pool2d(
- input: Tensor,
- kernel_size: _int | _size,
- stride: _int | _size = (),
- padding: _int | _size = 0,
- dilation: _int | _size = 1,
- ceil_mode: _bool = False,
- ) -> Tensor: ...
- def max_pool3d(
- input: Tensor,
- kernel_size: _int | _size,
- stride: _int | _size = (),
- padding: _int | _size = 0,
- dilation: _int | _size = 1,
- ceil_mode: _bool = False,
- ) -> Tensor: ...
- def maximum(
- input: Tensor,
- other: Tensor,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- maximum(input, other, *, out=None) -> Tensor
- Computes the element-wise maximum of :attr:`input` and :attr:`other`.
- .. note::
- If one of the elements being compared is a NaN, then that element is returned.
- :func:`maximum` is not supported for tensors with complex dtypes.
- Args:
- input (Tensor): the input tensor.
- other (Tensor): the second input tensor
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> a = torch.tensor((1, 2, -1))
- >>> b = torch.tensor((3, 0, 4))
- >>> torch.maximum(a, b)
- tensor([3, 2, 4])
- """
- @overload
- def mean(
- input: Tensor,
- *,
- dtype: _dtype | None = None,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- mean(input, *, dtype=None) -> Tensor
- .. note::
- If the `input` tensor is empty, ``torch.mean()`` returns ``nan``.
- This behavior is consistent with NumPy and follows the definition
- that the mean over an empty set is undefined.
- Returns the mean value of all elements in the :attr:`input` tensor. Input must be floating point or complex.
- Args:
- input (Tensor):
- the input tensor, either of floating point or complex dtype
- Keyword args:
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor.
- If specified, the input tensor is casted to :attr:`dtype` before the operation
- is performed. This is useful for preventing data type overflows. Default: None.
- Example::
- >>> a = torch.randn(1, 3)
- >>> a
- tensor([[ 0.2294, -0.5481, 1.3288]])
- >>> torch.mean(a)
- tensor(0.3367)
- .. function:: mean(input, dim, keepdim=False, *, dtype=None, out=None) -> Tensor
- :noindex:
- Returns the mean value of each row of the :attr:`input` tensor in the given
- dimension :attr:`dim`. If :attr:`dim` is a list of dimensions,
- reduce over all of them.
- If :attr:`keepdim` is ``True``, the output tensor is of the same size
- as :attr:`input` except in the dimension(s) :attr:`dim` where it is of size 1.
- Otherwise, :attr:`dim` is squeezed (see :func:`torch.squeeze`), resulting in the
- output tensor having 1 (or ``len(dim)``) fewer dimension(s).
- Args:
- input (Tensor): the input tensor.
- dim (int or tuple of ints, optional): the dimension or dimensions to reduce.
- If ``None``, all dimensions are reduced.
- keepdim (bool, optional): whether the output tensor has :attr:`dim` retained or not. Default: ``False``.
- Keyword args:
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor.
- If specified, the input tensor is casted to :attr:`dtype` before the operation
- is performed. This is useful for preventing data type overflows. Default: None.
- out (Tensor, optional): the output tensor.
- .. seealso::
- :func:`torch.nanmean` computes the mean value of `non-NaN` elements.
- Example::
- >>> a = torch.randn(4, 4)
- >>> a
- tensor([[-0.3841, 0.6320, 0.4254, -0.7384],
- [-0.9644, 1.0131, -0.6549, -1.4279],
- [-0.2951, -1.3350, -0.7694, 0.5600],
- [ 1.0842, -0.9580, 0.3623, 0.2343]])
- >>> torch.mean(a, 1)
- tensor([-0.0163, -0.5085, -0.4599, 0.1807])
- >>> torch.mean(a, 1, True)
- tensor([[-0.0163],
- [-0.5085],
- [-0.4599],
- [ 0.1807]])
- """
- @overload
- def mean(
- input: Tensor,
- dim: _int | _size | None,
- keepdim: _bool = False,
- *,
- dtype: _dtype | None = None,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- mean(input, *, dtype=None) -> Tensor
- .. note::
- If the `input` tensor is empty, ``torch.mean()`` returns ``nan``.
- This behavior is consistent with NumPy and follows the definition
- that the mean over an empty set is undefined.
- Returns the mean value of all elements in the :attr:`input` tensor. Input must be floating point or complex.
- Args:
- input (Tensor):
- the input tensor, either of floating point or complex dtype
- Keyword args:
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor.
- If specified, the input tensor is casted to :attr:`dtype` before the operation
- is performed. This is useful for preventing data type overflows. Default: None.
- Example::
- >>> a = torch.randn(1, 3)
- >>> a
- tensor([[ 0.2294, -0.5481, 1.3288]])
- >>> torch.mean(a)
- tensor(0.3367)
- .. function:: mean(input, dim, keepdim=False, *, dtype=None, out=None) -> Tensor
- :noindex:
- Returns the mean value of each row of the :attr:`input` tensor in the given
- dimension :attr:`dim`. If :attr:`dim` is a list of dimensions,
- reduce over all of them.
- If :attr:`keepdim` is ``True``, the output tensor is of the same size
- as :attr:`input` except in the dimension(s) :attr:`dim` where it is of size 1.
- Otherwise, :attr:`dim` is squeezed (see :func:`torch.squeeze`), resulting in the
- output tensor having 1 (or ``len(dim)``) fewer dimension(s).
- Args:
- input (Tensor): the input tensor.
- dim (int or tuple of ints, optional): the dimension or dimensions to reduce.
- If ``None``, all dimensions are reduced.
- keepdim (bool, optional): whether the output tensor has :attr:`dim` retained or not. Default: ``False``.
- Keyword args:
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor.
- If specified, the input tensor is casted to :attr:`dtype` before the operation
- is performed. This is useful for preventing data type overflows. Default: None.
- out (Tensor, optional): the output tensor.
- .. seealso::
- :func:`torch.nanmean` computes the mean value of `non-NaN` elements.
- Example::
- >>> a = torch.randn(4, 4)
- >>> a
- tensor([[-0.3841, 0.6320, 0.4254, -0.7384],
- [-0.9644, 1.0131, -0.6549, -1.4279],
- [-0.2951, -1.3350, -0.7694, 0.5600],
- [ 1.0842, -0.9580, 0.3623, 0.2343]])
- >>> torch.mean(a, 1)
- tensor([-0.0163, -0.5085, -0.4599, 0.1807])
- >>> torch.mean(a, 1, True)
- tensor([[-0.0163],
- [-0.5085],
- [-0.4599],
- [ 0.1807]])
- """
- @overload
- def mean(
- input: Tensor,
- dim: Sequence[str | EllipsisType | None],
- keepdim: _bool = False,
- *,
- dtype: _dtype | None = None,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- mean(input, *, dtype=None) -> Tensor
- .. note::
- If the `input` tensor is empty, ``torch.mean()`` returns ``nan``.
- This behavior is consistent with NumPy and follows the definition
- that the mean over an empty set is undefined.
- Returns the mean value of all elements in the :attr:`input` tensor. Input must be floating point or complex.
- Args:
- input (Tensor):
- the input tensor, either of floating point or complex dtype
- Keyword args:
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor.
- If specified, the input tensor is casted to :attr:`dtype` before the operation
- is performed. This is useful for preventing data type overflows. Default: None.
- Example::
- >>> a = torch.randn(1, 3)
- >>> a
- tensor([[ 0.2294, -0.5481, 1.3288]])
- >>> torch.mean(a)
- tensor(0.3367)
- .. function:: mean(input, dim, keepdim=False, *, dtype=None, out=None) -> Tensor
- :noindex:
- Returns the mean value of each row of the :attr:`input` tensor in the given
- dimension :attr:`dim`. If :attr:`dim` is a list of dimensions,
- reduce over all of them.
- If :attr:`keepdim` is ``True``, the output tensor is of the same size
- as :attr:`input` except in the dimension(s) :attr:`dim` where it is of size 1.
- Otherwise, :attr:`dim` is squeezed (see :func:`torch.squeeze`), resulting in the
- output tensor having 1 (or ``len(dim)``) fewer dimension(s).
- Args:
- input (Tensor): the input tensor.
- dim (int or tuple of ints, optional): the dimension or dimensions to reduce.
- If ``None``, all dimensions are reduced.
- keepdim (bool, optional): whether the output tensor has :attr:`dim` retained or not. Default: ``False``.
- Keyword args:
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor.
- If specified, the input tensor is casted to :attr:`dtype` before the operation
- is performed. This is useful for preventing data type overflows. Default: None.
- out (Tensor, optional): the output tensor.
- .. seealso::
- :func:`torch.nanmean` computes the mean value of `non-NaN` elements.
- Example::
- >>> a = torch.randn(4, 4)
- >>> a
- tensor([[-0.3841, 0.6320, 0.4254, -0.7384],
- [-0.9644, 1.0131, -0.6549, -1.4279],
- [-0.2951, -1.3350, -0.7694, 0.5600],
- [ 1.0842, -0.9580, 0.3623, 0.2343]])
- >>> torch.mean(a, 1)
- tensor([-0.0163, -0.5085, -0.4599, 0.1807])
- >>> torch.mean(a, 1, True)
- tensor([[-0.0163],
- [-0.5085],
- [-0.4599],
- [ 0.1807]])
- """
- @overload
- def median(input: Tensor) -> Tensor:
- r"""
- median(input) -> Tensor
- Returns the median of the values in :attr:`input`.
- .. note::
- The median is not unique for :attr:`input` tensors with an even number
- of elements. In this case the lower of the two medians is returned. To
- compute the mean of both medians, use :func:`torch.quantile` with ``q=0.5`` instead.
- .. warning::
- This function produces deterministic (sub)gradients unlike ``median(dim=0)``
- Args:
- input (Tensor): the input tensor.
- Example::
- >>> a = torch.randn(1, 3)
- >>> a
- tensor([[ 1.5219, -1.5212, 0.2202]])
- >>> torch.median(a)
- tensor(0.2202)
- .. function:: median(input, dim=-1, keepdim=False, *, out=None) -> (Tensor, LongTensor)
- :noindex:
- Returns a namedtuple ``(values, indices)`` where ``values`` contains the median of each row of :attr:`input`
- in the dimension :attr:`dim`, and ``indices`` contains the index of the median values found in the dimension :attr:`dim`.
- By default, :attr:`dim` is the last dimension of the :attr:`input` tensor.
- If :attr:`keepdim` is ``True``, the output tensors are of the same size
- as :attr:`input` except in the dimension :attr:`dim` where they are of size 1.
- Otherwise, :attr:`dim` is squeezed (see :func:`torch.squeeze`), resulting in
- the outputs tensor having 1 fewer dimension than :attr:`input`.
- .. note::
- The median is not unique for :attr:`input` tensors with an even number
- of elements in the dimension :attr:`dim`. In this case the lower of the
- two medians is returned. To compute the mean of both medians in
- :attr:`input`, use :func:`torch.quantile` with ``q=0.5`` instead.
- .. warning::
- ``indices`` does not necessarily contain the first occurrence of each
- median value found, unless it is unique.
- The exact implementation details are device-specific.
- Do not expect the same result when run on CPU and GPU in general.
- For the same reason do not expect the gradients to be deterministic.
- Args:
- input (Tensor): the input tensor.
- dim (int, optional): the dimension to reduce.
- If ``None``, all dimensions are reduced.
- keepdim (bool, optional): whether the output tensor has :attr:`dim` retained or not. Default: ``False``.
- Keyword args:
- out ((Tensor, Tensor), optional): The first tensor will be populated with the median values and the second
- tensor, which must have dtype long, with their indices in the dimension
- :attr:`dim` of :attr:`input`.
- Example::
- >>> a = torch.randn(4, 5)
- >>> a
- tensor([[ 0.2505, -0.3982, -0.9948, 0.3518, -1.3131],
- [ 0.3180, -0.6993, 1.0436, 0.0438, 0.2270],
- [-0.2751, 0.7303, 0.2192, 0.3321, 0.2488],
- [ 1.0778, -1.9510, 0.7048, 0.4742, -0.7125]])
- >>> torch.median(a, 1)
- torch.return_types.median(values=tensor([-0.3982, 0.2270, 0.2488, 0.4742]), indices=tensor([1, 4, 4, 3]))
- """
- @overload
- def median(
- input: Tensor,
- dim: _int,
- keepdim: _bool = False,
- *,
- out: Tensor | tuple[Tensor, ...] | list[Tensor] | None = None,
- ) -> torch.return_types.median:
- r"""
- median(input) -> Tensor
- Returns the median of the values in :attr:`input`.
- .. note::
- The median is not unique for :attr:`input` tensors with an even number
- of elements. In this case the lower of the two medians is returned. To
- compute the mean of both medians, use :func:`torch.quantile` with ``q=0.5`` instead.
- .. warning::
- This function produces deterministic (sub)gradients unlike ``median(dim=0)``
- Args:
- input (Tensor): the input tensor.
- Example::
- >>> a = torch.randn(1, 3)
- >>> a
- tensor([[ 1.5219, -1.5212, 0.2202]])
- >>> torch.median(a)
- tensor(0.2202)
- .. function:: median(input, dim=-1, keepdim=False, *, out=None) -> (Tensor, LongTensor)
- :noindex:
- Returns a namedtuple ``(values, indices)`` where ``values`` contains the median of each row of :attr:`input`
- in the dimension :attr:`dim`, and ``indices`` contains the index of the median values found in the dimension :attr:`dim`.
- By default, :attr:`dim` is the last dimension of the :attr:`input` tensor.
- If :attr:`keepdim` is ``True``, the output tensors are of the same size
- as :attr:`input` except in the dimension :attr:`dim` where they are of size 1.
- Otherwise, :attr:`dim` is squeezed (see :func:`torch.squeeze`), resulting in
- the outputs tensor having 1 fewer dimension than :attr:`input`.
- .. note::
- The median is not unique for :attr:`input` tensors with an even number
- of elements in the dimension :attr:`dim`. In this case the lower of the
- two medians is returned. To compute the mean of both medians in
- :attr:`input`, use :func:`torch.quantile` with ``q=0.5`` instead.
- .. warning::
- ``indices`` does not necessarily contain the first occurrence of each
- median value found, unless it is unique.
- The exact implementation details are device-specific.
- Do not expect the same result when run on CPU and GPU in general.
- For the same reason do not expect the gradients to be deterministic.
- Args:
- input (Tensor): the input tensor.
- dim (int, optional): the dimension to reduce.
- If ``None``, all dimensions are reduced.
- keepdim (bool, optional): whether the output tensor has :attr:`dim` retained or not. Default: ``False``.
- Keyword args:
- out ((Tensor, Tensor), optional): The first tensor will be populated with the median values and the second
- tensor, which must have dtype long, with their indices in the dimension
- :attr:`dim` of :attr:`input`.
- Example::
- >>> a = torch.randn(4, 5)
- >>> a
- tensor([[ 0.2505, -0.3982, -0.9948, 0.3518, -1.3131],
- [ 0.3180, -0.6993, 1.0436, 0.0438, 0.2270],
- [-0.2751, 0.7303, 0.2192, 0.3321, 0.2488],
- [ 1.0778, -1.9510, 0.7048, 0.4742, -0.7125]])
- >>> torch.median(a, 1)
- torch.return_types.median(values=tensor([-0.3982, 0.2270, 0.2488, 0.4742]), indices=tensor([1, 4, 4, 3]))
- """
- @overload
- def median(
- input: Tensor,
- dim: str | EllipsisType | None,
- keepdim: _bool = False,
- *,
- out: Tensor | tuple[Tensor, ...] | list[Tensor] | None = None,
- ) -> torch.return_types.median:
- r"""
- median(input) -> Tensor
- Returns the median of the values in :attr:`input`.
- .. note::
- The median is not unique for :attr:`input` tensors with an even number
- of elements. In this case the lower of the two medians is returned. To
- compute the mean of both medians, use :func:`torch.quantile` with ``q=0.5`` instead.
- .. warning::
- This function produces deterministic (sub)gradients unlike ``median(dim=0)``
- Args:
- input (Tensor): the input tensor.
- Example::
- >>> a = torch.randn(1, 3)
- >>> a
- tensor([[ 1.5219, -1.5212, 0.2202]])
- >>> torch.median(a)
- tensor(0.2202)
- .. function:: median(input, dim=-1, keepdim=False, *, out=None) -> (Tensor, LongTensor)
- :noindex:
- Returns a namedtuple ``(values, indices)`` where ``values`` contains the median of each row of :attr:`input`
- in the dimension :attr:`dim`, and ``indices`` contains the index of the median values found in the dimension :attr:`dim`.
- By default, :attr:`dim` is the last dimension of the :attr:`input` tensor.
- If :attr:`keepdim` is ``True``, the output tensors are of the same size
- as :attr:`input` except in the dimension :attr:`dim` where they are of size 1.
- Otherwise, :attr:`dim` is squeezed (see :func:`torch.squeeze`), resulting in
- the outputs tensor having 1 fewer dimension than :attr:`input`.
- .. note::
- The median is not unique for :attr:`input` tensors with an even number
- of elements in the dimension :attr:`dim`. In this case the lower of the
- two medians is returned. To compute the mean of both medians in
- :attr:`input`, use :func:`torch.quantile` with ``q=0.5`` instead.
- .. warning::
- ``indices`` does not necessarily contain the first occurrence of each
- median value found, unless it is unique.
- The exact implementation details are device-specific.
- Do not expect the same result when run on CPU and GPU in general.
- For the same reason do not expect the gradients to be deterministic.
- Args:
- input (Tensor): the input tensor.
- dim (int, optional): the dimension to reduce.
- If ``None``, all dimensions are reduced.
- keepdim (bool, optional): whether the output tensor has :attr:`dim` retained or not. Default: ``False``.
- Keyword args:
- out ((Tensor, Tensor), optional): The first tensor will be populated with the median values and the second
- tensor, which must have dtype long, with their indices in the dimension
- :attr:`dim` of :attr:`input`.
- Example::
- >>> a = torch.randn(4, 5)
- >>> a
- tensor([[ 0.2505, -0.3982, -0.9948, 0.3518, -1.3131],
- [ 0.3180, -0.6993, 1.0436, 0.0438, 0.2270],
- [-0.2751, 0.7303, 0.2192, 0.3321, 0.2488],
- [ 1.0778, -1.9510, 0.7048, 0.4742, -0.7125]])
- >>> torch.median(a, 1)
- torch.return_types.median(values=tensor([-0.3982, 0.2270, 0.2488, 0.4742]), indices=tensor([1, 4, 4, 3]))
- """
- @overload
- def min(input: Tensor, *, out: Tensor | None = None) -> Tensor:
- r"""
- min(input, *, out=None) -> Tensor
- Returns the minimum value of all elements in the :attr:`input` tensor.
- .. note::
- The difference between ``max``/``min`` and ``amax``/``amin`` is:
- - ``amax``/``amin`` supports reducing on multiple dimensions,
- - ``amax``/``amin`` does not return indices.
- Both ``amax``/``amin`` evenly distribute gradients between equal values
- when there are multiple input elements with the same minimum or maximum value.
- For ``max``/``min``:
- - If reduce over all dimensions(no dim specified), gradients evenly distribute between equally ``max``/``min`` values.
- - If reduce over one specified axis, only propagate to the indexed element.
- Args:
- input (Tensor): the input tensor.
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> a = torch.randn(1, 3)
- >>> a
- tensor([[ 0.6750, 1.0857, 1.7197]])
- >>> torch.min(a)
- tensor(0.6750)
- .. function:: min(input, dim, keepdim=False, *, out=None) -> (Tensor, LongTensor)
- :noindex:
- Returns a namedtuple ``(values, indices)`` where ``values`` is the minimum
- value of each row of the :attr:`input` tensor in the given dimension
- :attr:`dim`. And ``indices`` is the index location of each minimum value found
- (argmin).
- If :attr:`keepdim` is ``True``, the output tensors are of the same size as
- :attr:`input` except in the dimension :attr:`dim` where they are of size 1.
- Otherwise, :attr:`dim` is squeezed (see :func:`torch.squeeze`), resulting in
- the output tensors having 1 fewer dimension than :attr:`input`.
- .. note:: If there are multiple minimal values in a reduced row then
- the indices of the first minimal value are returned.
- Args:
- input (Tensor): the input tensor.
- dim (int, optional): the dimension to reduce. If omitted, all dimensions are reduced. Explicit ``None`` is not supported.
- keepdim (bool, optional): whether the output tensor has :attr:`dim` retained or not. Default: ``False``.
- Keyword args:
- out (tuple, optional): the tuple of two output tensors (min, min_indices)
- Example::
- >>> a = torch.randn(4, 4)
- >>> a
- tensor([[-0.6248, 1.1334, -1.1899, -0.2803],
- [-1.4644, -0.2635, -0.3651, 0.6134],
- [ 0.2457, 0.0384, 1.0128, 0.7015],
- [-0.1153, 2.9849, 2.1458, 0.5788]])
- >>> torch.min(a, 1)
- torch.return_types.min(values=tensor([-1.1899, -1.4644, 0.0384, -0.1153]), indices=tensor([2, 0, 1, 0]))
- .. function:: min(input, other, *, out=None) -> Tensor
- :noindex:
- See :func:`torch.minimum`.
- """
- @overload
- def min(
- input: Tensor,
- other: Tensor,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- min(input, *, out=None) -> Tensor
- Returns the minimum value of all elements in the :attr:`input` tensor.
- .. note::
- The difference between ``max``/``min`` and ``amax``/``amin`` is:
- - ``amax``/``amin`` supports reducing on multiple dimensions,
- - ``amax``/``amin`` does not return indices.
- Both ``amax``/``amin`` evenly distribute gradients between equal values
- when there are multiple input elements with the same minimum or maximum value.
- For ``max``/``min``:
- - If reduce over all dimensions(no dim specified), gradients evenly distribute between equally ``max``/``min`` values.
- - If reduce over one specified axis, only propagate to the indexed element.
- Args:
- input (Tensor): the input tensor.
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> a = torch.randn(1, 3)
- >>> a
- tensor([[ 0.6750, 1.0857, 1.7197]])
- >>> torch.min(a)
- tensor(0.6750)
- .. function:: min(input, dim, keepdim=False, *, out=None) -> (Tensor, LongTensor)
- :noindex:
- Returns a namedtuple ``(values, indices)`` where ``values`` is the minimum
- value of each row of the :attr:`input` tensor in the given dimension
- :attr:`dim`. And ``indices`` is the index location of each minimum value found
- (argmin).
- If :attr:`keepdim` is ``True``, the output tensors are of the same size as
- :attr:`input` except in the dimension :attr:`dim` where they are of size 1.
- Otherwise, :attr:`dim` is squeezed (see :func:`torch.squeeze`), resulting in
- the output tensors having 1 fewer dimension than :attr:`input`.
- .. note:: If there are multiple minimal values in a reduced row then
- the indices of the first minimal value are returned.
- Args:
- input (Tensor): the input tensor.
- dim (int, optional): the dimension to reduce. If omitted, all dimensions are reduced. Explicit ``None`` is not supported.
- keepdim (bool, optional): whether the output tensor has :attr:`dim` retained or not. Default: ``False``.
- Keyword args:
- out (tuple, optional): the tuple of two output tensors (min, min_indices)
- Example::
- >>> a = torch.randn(4, 4)
- >>> a
- tensor([[-0.6248, 1.1334, -1.1899, -0.2803],
- [-1.4644, -0.2635, -0.3651, 0.6134],
- [ 0.2457, 0.0384, 1.0128, 0.7015],
- [-0.1153, 2.9849, 2.1458, 0.5788]])
- >>> torch.min(a, 1)
- torch.return_types.min(values=tensor([-1.1899, -1.4644, 0.0384, -0.1153]), indices=tensor([2, 0, 1, 0]))
- .. function:: min(input, other, *, out=None) -> Tensor
- :noindex:
- See :func:`torch.minimum`.
- """
- @overload
- def min(
- input: Tensor,
- dim: _int,
- keepdim: _bool = False,
- *,
- out: Tensor | tuple[Tensor, ...] | list[Tensor] | None = None,
- ) -> torch.return_types.min:
- r"""
- min(input, *, out=None) -> Tensor
- Returns the minimum value of all elements in the :attr:`input` tensor.
- .. note::
- The difference between ``max``/``min`` and ``amax``/``amin`` is:
- - ``amax``/``amin`` supports reducing on multiple dimensions,
- - ``amax``/``amin`` does not return indices.
- Both ``amax``/``amin`` evenly distribute gradients between equal values
- when there are multiple input elements with the same minimum or maximum value.
- For ``max``/``min``:
- - If reduce over all dimensions(no dim specified), gradients evenly distribute between equally ``max``/``min`` values.
- - If reduce over one specified axis, only propagate to the indexed element.
- Args:
- input (Tensor): the input tensor.
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> a = torch.randn(1, 3)
- >>> a
- tensor([[ 0.6750, 1.0857, 1.7197]])
- >>> torch.min(a)
- tensor(0.6750)
- .. function:: min(input, dim, keepdim=False, *, out=None) -> (Tensor, LongTensor)
- :noindex:
- Returns a namedtuple ``(values, indices)`` where ``values`` is the minimum
- value of each row of the :attr:`input` tensor in the given dimension
- :attr:`dim`. And ``indices`` is the index location of each minimum value found
- (argmin).
- If :attr:`keepdim` is ``True``, the output tensors are of the same size as
- :attr:`input` except in the dimension :attr:`dim` where they are of size 1.
- Otherwise, :attr:`dim` is squeezed (see :func:`torch.squeeze`), resulting in
- the output tensors having 1 fewer dimension than :attr:`input`.
- .. note:: If there are multiple minimal values in a reduced row then
- the indices of the first minimal value are returned.
- Args:
- input (Tensor): the input tensor.
- dim (int, optional): the dimension to reduce. If omitted, all dimensions are reduced. Explicit ``None`` is not supported.
- keepdim (bool, optional): whether the output tensor has :attr:`dim` retained or not. Default: ``False``.
- Keyword args:
- out (tuple, optional): the tuple of two output tensors (min, min_indices)
- Example::
- >>> a = torch.randn(4, 4)
- >>> a
- tensor([[-0.6248, 1.1334, -1.1899, -0.2803],
- [-1.4644, -0.2635, -0.3651, 0.6134],
- [ 0.2457, 0.0384, 1.0128, 0.7015],
- [-0.1153, 2.9849, 2.1458, 0.5788]])
- >>> torch.min(a, 1)
- torch.return_types.min(values=tensor([-1.1899, -1.4644, 0.0384, -0.1153]), indices=tensor([2, 0, 1, 0]))
- .. function:: min(input, other, *, out=None) -> Tensor
- :noindex:
- See :func:`torch.minimum`.
- """
- @overload
- def min(
- input: Tensor,
- dim: str | EllipsisType | None,
- keepdim: _bool = False,
- *,
- out: Tensor | tuple[Tensor, ...] | list[Tensor] | None = None,
- ) -> torch.return_types.min:
- r"""
- min(input, *, out=None) -> Tensor
- Returns the minimum value of all elements in the :attr:`input` tensor.
- .. note::
- The difference between ``max``/``min`` and ``amax``/``amin`` is:
- - ``amax``/``amin`` supports reducing on multiple dimensions,
- - ``amax``/``amin`` does not return indices.
- Both ``amax``/``amin`` evenly distribute gradients between equal values
- when there are multiple input elements with the same minimum or maximum value.
- For ``max``/``min``:
- - If reduce over all dimensions(no dim specified), gradients evenly distribute between equally ``max``/``min`` values.
- - If reduce over one specified axis, only propagate to the indexed element.
- Args:
- input (Tensor): the input tensor.
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> a = torch.randn(1, 3)
- >>> a
- tensor([[ 0.6750, 1.0857, 1.7197]])
- >>> torch.min(a)
- tensor(0.6750)
- .. function:: min(input, dim, keepdim=False, *, out=None) -> (Tensor, LongTensor)
- :noindex:
- Returns a namedtuple ``(values, indices)`` where ``values`` is the minimum
- value of each row of the :attr:`input` tensor in the given dimension
- :attr:`dim`. And ``indices`` is the index location of each minimum value found
- (argmin).
- If :attr:`keepdim` is ``True``, the output tensors are of the same size as
- :attr:`input` except in the dimension :attr:`dim` where they are of size 1.
- Otherwise, :attr:`dim` is squeezed (see :func:`torch.squeeze`), resulting in
- the output tensors having 1 fewer dimension than :attr:`input`.
- .. note:: If there are multiple minimal values in a reduced row then
- the indices of the first minimal value are returned.
- Args:
- input (Tensor): the input tensor.
- dim (int, optional): the dimension to reduce. If omitted, all dimensions are reduced. Explicit ``None`` is not supported.
- keepdim (bool, optional): whether the output tensor has :attr:`dim` retained or not. Default: ``False``.
- Keyword args:
- out (tuple, optional): the tuple of two output tensors (min, min_indices)
- Example::
- >>> a = torch.randn(4, 4)
- >>> a
- tensor([[-0.6248, 1.1334, -1.1899, -0.2803],
- [-1.4644, -0.2635, -0.3651, 0.6134],
- [ 0.2457, 0.0384, 1.0128, 0.7015],
- [-0.1153, 2.9849, 2.1458, 0.5788]])
- >>> torch.min(a, 1)
- torch.return_types.min(values=tensor([-1.1899, -1.4644, 0.0384, -0.1153]), indices=tensor([2, 0, 1, 0]))
- .. function:: min(input, other, *, out=None) -> Tensor
- :noindex:
- See :func:`torch.minimum`.
- """
- def minimum(
- input: Tensor,
- other: Tensor,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- minimum(input, other, *, out=None) -> Tensor
- Computes the element-wise minimum of :attr:`input` and :attr:`other`.
- .. note::
- If one of the elements being compared is a NaN, then that element is returned.
- :func:`minimum` is not supported for tensors with complex dtypes.
- Args:
- input (Tensor): the input tensor.
- other (Tensor): the second input tensor
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> a = torch.tensor((1, 2, -1))
- >>> b = torch.tensor((3, 0, 4))
- >>> torch.minimum(a, b)
- tensor([1, 0, -1])
- """
- def miopen_batch_norm(
- input: Tensor,
- weight: Tensor,
- bias: Tensor | None,
- running_mean: Tensor | None,
- running_var: Tensor | None,
- training: _bool,
- exponential_average_factor: _float,
- epsilon: _float,
- ) -> tuple[Tensor, Tensor, Tensor]: ...
- def miopen_convolution(
- input: Tensor,
- weight: Tensor,
- bias: Tensor | None,
- padding: Sequence[_int | SymInt],
- stride: Sequence[_int | SymInt],
- dilation: Sequence[_int | SymInt],
- groups: _int | SymInt,
- benchmark: _bool,
- deterministic: _bool,
- ) -> Tensor: ...
- def miopen_convolution_add_relu(
- input: Tensor,
- weight: Tensor,
- z: Tensor,
- alpha: Number | _complex | None,
- bias: Tensor | None,
- stride: Sequence[_int | SymInt],
- padding: Sequence[_int | SymInt],
- dilation: Sequence[_int | SymInt],
- groups: _int | SymInt,
- ) -> Tensor: ...
- def miopen_convolution_relu(
- input: Tensor,
- weight: Tensor,
- bias: Tensor | None,
- stride: Sequence[_int | SymInt],
- padding: Sequence[_int | SymInt],
- dilation: Sequence[_int | SymInt],
- groups: _int | SymInt,
- ) -> Tensor: ...
- def miopen_convolution_transpose(
- input: Tensor,
- weight: Tensor,
- bias: Tensor | None,
- padding: Sequence[_int | SymInt],
- output_padding: Sequence[_int | SymInt],
- stride: Sequence[_int | SymInt],
- dilation: Sequence[_int | SymInt],
- groups: _int | SymInt,
- benchmark: _bool,
- deterministic: _bool,
- ) -> Tensor: ...
- def miopen_depthwise_convolution(
- input: Tensor,
- weight: Tensor,
- bias: Tensor | None,
- padding: Sequence[_int | SymInt],
- stride: Sequence[_int | SymInt],
- dilation: Sequence[_int | SymInt],
- groups: _int | SymInt,
- benchmark: _bool,
- deterministic: _bool,
- ) -> Tensor: ...
- def miopen_rnn(
- input: Tensor,
- weight: tuple[Tensor, ...] | list[Tensor] | None,
- weight_stride0: _int,
- hx: Tensor,
- cx: Tensor | None,
- mode: _int,
- hidden_size: _int,
- num_layers: _int,
- batch_first: _bool,
- dropout: _float,
- train: _bool,
- bidirectional: _bool,
- batch_sizes: _size,
- dropout_state: Tensor | None,
- ) -> tuple[Tensor, Tensor, Tensor, Tensor, Tensor]: ...
- def mkldnn_adaptive_avg_pool2d(
- input: Tensor,
- output_size: _int | _size,
- *,
- out: Tensor | None = None,
- ) -> Tensor: ...
- def mkldnn_convolution(
- input: Tensor,
- weight: Tensor,
- bias: Tensor | None,
- padding: Sequence[_int | SymInt],
- stride: Sequence[_int | SymInt],
- dilation: Sequence[_int | SymInt],
- groups: _int | SymInt,
- ) -> Tensor: ...
- def mkldnn_linear_backward_weights(
- grad_output: Tensor,
- input: Tensor,
- weight: Tensor,
- bias_defined: _bool,
- ) -> tuple[Tensor, Tensor]: ...
- def mkldnn_max_pool2d(
- input: Tensor,
- kernel_size: _int | _size,
- stride: _int | _size = (),
- padding: _int | _size = 0,
- dilation: _int | _size = 1,
- ceil_mode: _bool = False,
- ) -> Tensor: ...
- def mkldnn_max_pool3d(
- input: Tensor,
- kernel_size: _int | _size,
- stride: _int | _size = (),
- padding: _int | _size = 0,
- dilation: _int | _size = 1,
- ceil_mode: _bool = False,
- ) -> Tensor: ...
- def mkldnn_rnn_layer(
- input: Tensor,
- weight0: Tensor,
- weight1: Tensor,
- weight2: Tensor,
- weight3: Tensor,
- hx_: Tensor,
- cx_: Tensor,
- reverse: _bool,
- batch_sizes: _size,
- mode: _int,
- hidden_size: _int,
- num_layers: _int,
- has_biases: _bool,
- bidirectional: _bool,
- batch_first: _bool,
- train: _bool,
- ) -> tuple[Tensor, Tensor, Tensor, Tensor]: ...
- @overload
- def mm(input: Tensor, mat2: Tensor, *, out: Tensor | None = None) -> Tensor:
- r"""
- mm(input, mat2, out_dtype=None, *, out=None) -> Tensor
- Performs a matrix multiplication of the matrices :attr:`input` and :attr:`mat2`.
- If :attr:`input` is a :math:`(n \times m)` tensor, :attr:`mat2` is a
- :math:`(m \times p)` tensor, :attr:`out` will be a :math:`(n \times p)` tensor.
- .. note:: This function does not :ref:`broadcast <broadcasting-semantics>`.
- For broadcasting matrix products, see :func:`torch.matmul`.
- Supports strided and sparse 2-D tensors as inputs, autograd with
- respect to strided inputs.
- This operation has support for arguments with :ref:`sparse layouts<sparse-docs>`.
- If :attr:`out` is provided its layout will be used. Otherwise, the result
- layout will be deduced from that of :attr:`input`.
- .. warning::
- Sparse support is a beta feature and some layout(s)/dtype/device combinations may not be supported,
- or may not have autograd support. If you notice missing functionality please
- open a feature request.
- This operator supports :ref:`TensorFloat32<tf32_on_ampere>`.
- On certain ROCm devices, when using float16 inputs this module will use :ref:`different precision<fp16_on_mi200>` for backward.
- Args:
- input (Tensor): the first matrix to be matrix multiplied
- mat2 (Tensor): the second matrix to be matrix multiplied
- out_dtype (dtype, optional): the dtype of the output tensor,
- Supported only on CUDA and for torch.float32 given
- torch.float16/torch.bfloat16 input dtypes
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> mat1 = torch.randn(2, 3)
- >>> mat2 = torch.randn(3, 3)
- >>> torch.mm(mat1, mat2)
- tensor([[ 0.4851, 0.5037, -0.3633],
- [-0.0760, -3.6705, 2.4784]])
- """
- @overload
- def mm(
- input: Tensor,
- mat2: Tensor,
- out_dtype: _dtype,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- mm(input, mat2, out_dtype=None, *, out=None) -> Tensor
- Performs a matrix multiplication of the matrices :attr:`input` and :attr:`mat2`.
- If :attr:`input` is a :math:`(n \times m)` tensor, :attr:`mat2` is a
- :math:`(m \times p)` tensor, :attr:`out` will be a :math:`(n \times p)` tensor.
- .. note:: This function does not :ref:`broadcast <broadcasting-semantics>`.
- For broadcasting matrix products, see :func:`torch.matmul`.
- Supports strided and sparse 2-D tensors as inputs, autograd with
- respect to strided inputs.
- This operation has support for arguments with :ref:`sparse layouts<sparse-docs>`.
- If :attr:`out` is provided its layout will be used. Otherwise, the result
- layout will be deduced from that of :attr:`input`.
- .. warning::
- Sparse support is a beta feature and some layout(s)/dtype/device combinations may not be supported,
- or may not have autograd support. If you notice missing functionality please
- open a feature request.
- This operator supports :ref:`TensorFloat32<tf32_on_ampere>`.
- On certain ROCm devices, when using float16 inputs this module will use :ref:`different precision<fp16_on_mi200>` for backward.
- Args:
- input (Tensor): the first matrix to be matrix multiplied
- mat2 (Tensor): the second matrix to be matrix multiplied
- out_dtype (dtype, optional): the dtype of the output tensor,
- Supported only on CUDA and for torch.float32 given
- torch.float16/torch.bfloat16 input dtypes
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> mat1 = torch.randn(2, 3)
- >>> mat2 = torch.randn(3, 3)
- >>> torch.mm(mat1, mat2)
- tensor([[ 0.4851, 0.5037, -0.3633],
- [-0.0760, -3.6705, 2.4784]])
- """
- @overload
- def mode(
- input: Tensor,
- dim: _int = -1,
- keepdim: _bool = False,
- *,
- out: Tensor | tuple[Tensor, ...] | list[Tensor] | None = None,
- ) -> torch.return_types.mode:
- r"""
- mode(input, dim=-1, keepdim=False, *, out=None) -> (Tensor, LongTensor)
- Returns a namedtuple ``(values, indices)`` where ``values`` is the mode
- value of each row of the :attr:`input` tensor in the given dimension
- :attr:`dim`, i.e. a value which appears most often
- in that row, and ``indices`` is the index location of each mode value found.
- By default, :attr:`dim` is the last dimension of the :attr:`input` tensor.
- If :attr:`keepdim` is ``True``, the output tensors are of the same size as
- :attr:`input` except in the dimension :attr:`dim` where they are of size 1.
- Otherwise, :attr:`dim` is squeezed (see :func:`torch.squeeze`), resulting
- in the output tensors having 1 fewer dimension than :attr:`input`.
- .. note:: This function is not defined for ``torch.cuda.Tensor`` yet.
- Args:
- input (Tensor): the input tensor.
- dim (int, optional): the dimension to reduce.
- keepdim (bool, optional): whether the output tensor has :attr:`dim` retained or not. Default: ``False``.
- Keyword args:
- out (tuple, optional): the result tuple of two output tensors (values, indices)
- Example::
- >>> b = torch.tensor([[0, 0, 0, 2, 0, 0, 2],
- ... [0, 3, 0, 0, 2, 0, 1],
- ... [2, 2, 2, 0, 0, 0, 3],
- ... [2, 2, 3, 0, 1, 1, 0],
- ... [1, 1, 0, 0, 2, 0, 2]])
- >>> torch.mode(b, 0)
- torch.return_types.mode(
- values=tensor([0, 2, 0, 0, 0, 0, 2]),
- indices=tensor([1, 3, 4, 4, 2, 4, 4]))
- """
- @overload
- def mode(
- input: Tensor,
- dim: str | EllipsisType | None,
- keepdim: _bool = False,
- *,
- out: Tensor | tuple[Tensor, ...] | list[Tensor] | None = None,
- ) -> torch.return_types.mode:
- r"""
- mode(input, dim=-1, keepdim=False, *, out=None) -> (Tensor, LongTensor)
- Returns a namedtuple ``(values, indices)`` where ``values`` is the mode
- value of each row of the :attr:`input` tensor in the given dimension
- :attr:`dim`, i.e. a value which appears most often
- in that row, and ``indices`` is the index location of each mode value found.
- By default, :attr:`dim` is the last dimension of the :attr:`input` tensor.
- If :attr:`keepdim` is ``True``, the output tensors are of the same size as
- :attr:`input` except in the dimension :attr:`dim` where they are of size 1.
- Otherwise, :attr:`dim` is squeezed (see :func:`torch.squeeze`), resulting
- in the output tensors having 1 fewer dimension than :attr:`input`.
- .. note:: This function is not defined for ``torch.cuda.Tensor`` yet.
- Args:
- input (Tensor): the input tensor.
- dim (int, optional): the dimension to reduce.
- keepdim (bool, optional): whether the output tensor has :attr:`dim` retained or not. Default: ``False``.
- Keyword args:
- out (tuple, optional): the result tuple of two output tensors (values, indices)
- Example::
- >>> b = torch.tensor([[0, 0, 0, 2, 0, 0, 2],
- ... [0, 3, 0, 0, 2, 0, 1],
- ... [2, 2, 2, 0, 0, 0, 3],
- ... [2, 2, 3, 0, 1, 1, 0],
- ... [1, 1, 0, 0, 2, 0, 2]])
- >>> torch.mode(b, 0)
- torch.return_types.mode(
- values=tensor([0, 2, 0, 0, 0, 0, 2]),
- indices=tensor([1, 3, 4, 4, 2, 4, 4]))
- """
- @overload
- def moveaxis(input: Tensor, source: _int, destination: _int) -> Tensor:
- r"""
- moveaxis(input, source, destination) -> Tensor
- Alias for :func:`torch.movedim`.
- This function is equivalent to NumPy's moveaxis function.
- Examples::
- >>> t = torch.randn(3,2,1)
- >>> t
- tensor([[[-0.3362],
- [-0.8437]],
- [[-0.9627],
- [ 0.1727]],
- [[ 0.5173],
- [-0.1398]]])
- >>> torch.moveaxis(t, 1, 0).shape
- torch.Size([2, 3, 1])
- >>> torch.moveaxis(t, 1, 0)
- tensor([[[-0.3362],
- [-0.9627],
- [ 0.5173]],
- [[-0.8437],
- [ 0.1727],
- [-0.1398]]])
- >>> torch.moveaxis(t, (1, 2), (0, 1)).shape
- torch.Size([2, 1, 3])
- >>> torch.moveaxis(t, (1, 2), (0, 1))
- tensor([[[-0.3362, -0.9627, 0.5173]],
- [[-0.8437, 0.1727, -0.1398]]])
- """
- @overload
- def moveaxis(input: Tensor, source: _size, destination: _size) -> Tensor:
- r"""
- moveaxis(input, source, destination) -> Tensor
- Alias for :func:`torch.movedim`.
- This function is equivalent to NumPy's moveaxis function.
- Examples::
- >>> t = torch.randn(3,2,1)
- >>> t
- tensor([[[-0.3362],
- [-0.8437]],
- [[-0.9627],
- [ 0.1727]],
- [[ 0.5173],
- [-0.1398]]])
- >>> torch.moveaxis(t, 1, 0).shape
- torch.Size([2, 3, 1])
- >>> torch.moveaxis(t, 1, 0)
- tensor([[[-0.3362],
- [-0.9627],
- [ 0.5173]],
- [[-0.8437],
- [ 0.1727],
- [-0.1398]]])
- >>> torch.moveaxis(t, (1, 2), (0, 1)).shape
- torch.Size([2, 1, 3])
- >>> torch.moveaxis(t, (1, 2), (0, 1))
- tensor([[[-0.3362, -0.9627, 0.5173]],
- [[-0.8437, 0.1727, -0.1398]]])
- """
- @overload
- def movedim(input: Tensor, source: _int, destination: _int) -> Tensor:
- r"""
- movedim(input, source, destination) -> Tensor
- Moves the dimension(s) of :attr:`input` at the position(s) in :attr:`source`
- to the position(s) in :attr:`destination`.
- Other dimensions of :attr:`input` that are not explicitly moved remain in
- their original order and appear at the positions not specified in :attr:`destination`.
- Args:
- input (Tensor): the input tensor.
- source (int or tuple of ints): Original positions of the dims to move. These must be unique.
- destination (int or tuple of ints): Destination positions for each of the original dims. These must also be unique.
- Examples::
- >>> t = torch.randn(3,2,1)
- >>> t
- tensor([[[-0.3362],
- [-0.8437]],
- [[-0.9627],
- [ 0.1727]],
- [[ 0.5173],
- [-0.1398]]])
- >>> torch.movedim(t, 1, 0).shape
- torch.Size([2, 3, 1])
- >>> torch.movedim(t, 1, 0)
- tensor([[[-0.3362],
- [-0.9627],
- [ 0.5173]],
- [[-0.8437],
- [ 0.1727],
- [-0.1398]]])
- >>> torch.movedim(t, (1, 2), (0, 1)).shape
- torch.Size([2, 1, 3])
- >>> torch.movedim(t, (1, 2), (0, 1))
- tensor([[[-0.3362, -0.9627, 0.5173]],
- [[-0.8437, 0.1727, -0.1398]]])
- """
- @overload
- def movedim(input: Tensor, source: _size, destination: _size) -> Tensor:
- r"""
- movedim(input, source, destination) -> Tensor
- Moves the dimension(s) of :attr:`input` at the position(s) in :attr:`source`
- to the position(s) in :attr:`destination`.
- Other dimensions of :attr:`input` that are not explicitly moved remain in
- their original order and appear at the positions not specified in :attr:`destination`.
- Args:
- input (Tensor): the input tensor.
- source (int or tuple of ints): Original positions of the dims to move. These must be unique.
- destination (int or tuple of ints): Destination positions for each of the original dims. These must also be unique.
- Examples::
- >>> t = torch.randn(3,2,1)
- >>> t
- tensor([[[-0.3362],
- [-0.8437]],
- [[-0.9627],
- [ 0.1727]],
- [[ 0.5173],
- [-0.1398]]])
- >>> torch.movedim(t, 1, 0).shape
- torch.Size([2, 3, 1])
- >>> torch.movedim(t, 1, 0)
- tensor([[[-0.3362],
- [-0.9627],
- [ 0.5173]],
- [[-0.8437],
- [ 0.1727],
- [-0.1398]]])
- >>> torch.movedim(t, (1, 2), (0, 1)).shape
- torch.Size([2, 1, 3])
- >>> torch.movedim(t, (1, 2), (0, 1))
- tensor([[[-0.3362, -0.9627, 0.5173]],
- [[-0.8437, 0.1727, -0.1398]]])
- """
- def msort(input: Tensor, *, out: Tensor | None = None) -> Tensor:
- r"""
- msort(input: Tensor, *, out: Optional[Tensor]) -> Tensor
- Sorts the elements of the :attr:`input` tensor along its first dimension
- in ascending order by value.
- .. note:: `torch.msort(t)` is equivalent to `torch.sort(t, dim=0)[0]`.
- See also :func:`torch.sort`.
- Args:
- input (Tensor): the input tensor.
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> t = torch.randn(3, 4)
- >>> t
- tensor([[-0.1321, 0.4370, -1.2631, -1.1289],
- [-2.0527, -1.1250, 0.2275, 0.3077],
- [-0.0881, -0.1259, -0.5495, 1.0284]])
- >>> torch.msort(t)
- tensor([[-2.0527, -1.1250, -1.2631, -1.1289],
- [-0.1321, -0.1259, -0.5495, 0.3077],
- [-0.0881, 0.4370, 0.2275, 1.0284]])
- """
- def mul(
- input: Tensor | Number | _complex,
- other: Tensor | Number | _complex,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- mul(input, other, *, out=None) -> Tensor
- Multiplies :attr:`input` by :attr:`other`.
- .. math::
- \text{out}_i = \text{input}_i \times \text{other}_i
- Supports :ref:`broadcasting to a common shape <broadcasting-semantics>`,
- :ref:`type promotion <type-promotion-doc>`, and integer, float, and complex inputs.
- Args:
- input (Tensor): the input tensor.
- other (Tensor or Number): the tensor or number to multiply input by.
- Keyword args:
- out (Tensor, optional): the output tensor.
- Examples::
- >>> a = torch.randn(3)
- >>> a
- tensor([ 0.2015, -0.4255, 2.6087])
- >>> torch.mul(a, 100)
- tensor([ 20.1494, -42.5491, 260.8663])
- >>> b = torch.randn(4, 1)
- >>> b
- tensor([[ 1.1207],
- [-0.3137],
- [ 0.0700],
- [ 0.8378]])
- >>> c = torch.randn(1, 4)
- >>> c
- tensor([[ 0.5146, 0.1216, -0.5244, 2.2382]])
- >>> torch.mul(b, c)
- tensor([[ 0.5767, 0.1363, -0.5877, 2.5083],
- [-0.1614, -0.0382, 0.1645, -0.7021],
- [ 0.0360, 0.0085, -0.0367, 0.1567],
- [ 0.4312, 0.1019, -0.4394, 1.8753]])
- """
- def multinomial(
- input: Tensor,
- num_samples: _int | SymInt,
- replacement: _bool = False,
- *,
- generator: Generator | None = None,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- multinomial(input, num_samples, replacement=False, *, generator=None, out=None) -> LongTensor
- Returns a tensor where each row contains :attr:`num_samples` indices sampled
- from the multinomial (a stricter definition would be multivariate,
- refer to :class:`torch.distributions.multinomial.Multinomial` for more details)
- probability distribution located in the corresponding row
- of tensor :attr:`input`.
- .. note::
- The rows of :attr:`input` do not need to sum to one (in which case we use
- the values as weights), but must be non-negative, finite and have
- a non-zero sum.
- Indices are ordered from left to right according to when each was sampled
- (first samples are placed in first column).
- If :attr:`input` is a vector, :attr:`out` is a vector of size :attr:`num_samples`.
- If :attr:`input` is a matrix with `m` rows, :attr:`out` is an matrix of shape
- :math:`(m \times \text{num\_samples})`.
- If replacement is ``True``, samples are drawn with replacement.
- If not, they are drawn without replacement, which means that when a
- sample index is drawn for a row, it cannot be drawn again for that row.
- .. note::
- When drawn without replacement, :attr:`num_samples` must be lower than
- number of non-zero elements in :attr:`input` (or the min number of non-zero
- elements in each row of :attr:`input` if it is a matrix).
- Args:
- input (Tensor): the input tensor containing probabilities
- num_samples (int): number of samples to draw
- replacement (bool, optional): whether to draw with replacement or not
- Keyword args:
- generator (:class:`torch.Generator`, optional): a pseudorandom number generator for sampling
- out (Tensor, optional): the output tensor.
- Example::
- >>> weights = torch.tensor([0, 10, 3, 0], dtype=torch.float) # create a tensor of weights
- >>> torch.multinomial(weights, 2)
- tensor([1, 2])
- >>> torch.multinomial(weights, 5) # ERROR!
- RuntimeError: cannot sample n_sample > prob_dist.size(-1) samples without replacement
- >>> torch.multinomial(weights, 4, replacement=True)
- tensor([ 2, 1, 1, 1])
- """
- @overload
- def multiply(
- input: Tensor,
- other: Tensor,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- multiply(input, other, *, out=None)
- Alias for :func:`torch.mul`.
- """
- @overload
- def multiply(input: Tensor, other: Number | _complex) -> Tensor:
- r"""
- multiply(input, other, *, out=None)
- Alias for :func:`torch.mul`.
- """
- def mv(input: Tensor, vec: Tensor, *, out: Tensor | None = None) -> Tensor:
- r"""
- mv(input, vec, *, out=None) -> Tensor
- Performs a matrix-vector product of the matrix :attr:`input` and the vector
- :attr:`vec`.
- If :attr:`input` is a :math:`(n \times m)` tensor, :attr:`vec` is a 1-D tensor of
- size :math:`m`, :attr:`out` will be 1-D of size :math:`n`.
- .. note:: This function does not :ref:`broadcast <broadcasting-semantics>`.
- Args:
- input (Tensor): matrix to be multiplied
- vec (Tensor): vector to be multiplied
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> mat = torch.randn(2, 3)
- >>> vec = torch.randn(3)
- >>> torch.mv(mat, vec)
- tensor([ 1.0404, -0.6361])
- """
- def mvlgamma(
- input: Tensor,
- p: _int,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- mvlgamma(input, p, *, out=None) -> Tensor
- Alias for :func:`torch.special.multigammaln`.
- """
- def nan_to_num(
- input: Tensor,
- nan: _float | None = None,
- posinf: _float | None = None,
- neginf: _float | None = None,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- nan_to_num(input, nan=0.0, posinf=None, neginf=None, *, out=None) -> Tensor
- Replaces :literal:`NaN`, positive infinity, and negative infinity values in :attr:`input`
- with the values specified by :attr:`nan`, :attr:`posinf`, and :attr:`neginf`, respectively.
- By default, :literal:`NaN`\ s are replaced with zero, positive infinity is replaced with the
- greatest finite value representable by :attr:`input`'s dtype, and negative infinity
- is replaced with the least finite value representable by :attr:`input`'s dtype.
- Args:
- input (Tensor): the input tensor.
- nan (Number, optional): the value to replace :literal:`NaN`\s with. Default is zero.
- posinf (Number, optional): if a Number, the value to replace positive infinity values with.
- If None, positive infinity values are replaced with the greatest finite value representable by :attr:`input`'s dtype.
- Default is None.
- neginf (Number, optional): if a Number, the value to replace negative infinity values with.
- If None, negative infinity values are replaced with the lowest finite value representable by :attr:`input`'s dtype.
- Default is None.
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> x = torch.tensor([float('nan'), float('inf'), -float('inf'), 3.14])
- >>> torch.nan_to_num(x)
- tensor([ 0.0000e+00, 3.4028e+38, -3.4028e+38, 3.1400e+00])
- >>> torch.nan_to_num(x, nan=2.0)
- tensor([ 2.0000e+00, 3.4028e+38, -3.4028e+38, 3.1400e+00])
- >>> torch.nan_to_num(x, nan=2.0, posinf=1.0)
- tensor([ 2.0000e+00, 1.0000e+00, -3.4028e+38, 3.1400e+00])
- """
- def nan_to_num_(
- input: Tensor,
- nan: _float | None = None,
- posinf: _float | None = None,
- neginf: _float | None = None,
- ) -> Tensor: ...
- def nanmean(
- input: Tensor,
- dim: _int | _size | None = None,
- keepdim: _bool = False,
- *,
- dtype: _dtype | None = None,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- nanmean(input, dim=None, keepdim=False, *, dtype=None, out=None) -> Tensor
- Computes the mean of all `non-NaN` elements along the specified dimensions.
- Input must be floating point or complex.
- This function is identical to :func:`torch.mean` when there are no `NaN` values
- in the :attr:`input` tensor. In the presence of `NaN`, :func:`torch.mean` will
- propagate the `NaN` to the output whereas :func:`torch.nanmean` will ignore the
- `NaN` values (`torch.nanmean(a)` is equivalent to `torch.mean(a[~a.isnan()])`).
- If :attr:`keepdim` is ``True``, the output tensor is of the same size
- as :attr:`input` except in the dimension(s) :attr:`dim` where it is of size 1.
- Otherwise, :attr:`dim` is squeezed (see :func:`torch.squeeze`), resulting in the
- output tensor having 1 (or ``len(dim)``) fewer dimension(s).
- Args:
- input (Tensor): the input tensor, either of floating point or complex dtype
- dim (int or tuple of ints, optional): the dimension or dimensions to reduce.
- If ``None``, all dimensions are reduced.
- keepdim (bool, optional): whether the output tensor has :attr:`dim` retained or not. Default: ``False``.
- Keyword args:
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor.
- If specified, the input tensor is casted to :attr:`dtype` before the operation
- is performed. This is useful for preventing data type overflows. Default: None.
- out (Tensor, optional): the output tensor.
- .. seealso::
- :func:`torch.mean` computes the mean value, propagating `NaN`.
- Example::
- >>> x = torch.tensor([[torch.nan, 1, 2], [1, 2, 3]])
- >>> x.mean()
- tensor(nan)
- >>> x.nanmean()
- tensor(1.8000)
- >>> x.mean(dim=0)
- tensor([ nan, 1.5000, 2.5000])
- >>> x.nanmean(dim=0)
- tensor([1.0000, 1.5000, 2.5000])
- # If all elements in the reduced dimensions are NaN then the result is NaN
- >>> torch.tensor([torch.nan]).nanmean()
- tensor(nan)
- """
- @overload
- def nanmedian(input: Tensor) -> Tensor:
- r"""
- nanmedian(input) -> Tensor
- Returns the median of the values in :attr:`input`, ignoring ``NaN`` values.
- This function is identical to :func:`torch.median` when there are no ``NaN`` values in :attr:`input`.
- When :attr:`input` has one or more ``NaN`` values, :func:`torch.median` will always return ``NaN``,
- while this function will return the median of the non-``NaN`` elements in :attr:`input`.
- If all the elements in :attr:`input` are ``NaN`` it will also return ``NaN``.
- Args:
- input (Tensor): the input tensor.
- Example::
- >>> a = torch.tensor([1, float('nan'), 3, 2])
- >>> a.median()
- tensor(nan)
- >>> a.nanmedian()
- tensor(2.)
- .. function:: nanmedian(input, dim=-1, keepdim=False, *, out=None) -> (Tensor, LongTensor)
- :noindex:
- Returns a namedtuple ``(values, indices)`` where ``values`` contains the median of each row of :attr:`input`
- in the dimension :attr:`dim`, ignoring ``NaN`` values, and ``indices`` contains the index of the median values
- found in the dimension :attr:`dim`.
- This function is identical to :func:`torch.median` when there are no ``NaN`` values in a reduced row. When a reduced row has
- one or more ``NaN`` values, :func:`torch.median` will always reduce it to ``NaN``, while this function will reduce it to the
- median of the non-``NaN`` elements. If all the elements in a reduced row are ``NaN`` then it will be reduced to ``NaN``, too.
- Args:
- input (Tensor): the input tensor.
- dim (int, optional): the dimension to reduce.
- If ``None``, all dimensions are reduced.
- keepdim (bool, optional): whether the output tensor has :attr:`dim` retained or not. Default: ``False``.
- Keyword args:
- out ((Tensor, Tensor), optional): The first tensor will be populated with the median values and the second
- tensor, which must have dtype long, with their indices in the dimension
- :attr:`dim` of :attr:`input`.
- Example::
- >>> a = torch.tensor([[2, 3, 1], [float('nan'), 1, float('nan')]])
- >>> a
- tensor([[2., 3., 1.],
- [nan, 1., nan]])
- >>> a.median(0)
- torch.return_types.median(values=tensor([nan, 1., nan]), indices=tensor([1, 1, 1]))
- >>> a.nanmedian(0)
- torch.return_types.nanmedian(values=tensor([2., 1., 1.]), indices=tensor([0, 1, 0]))
- """
- @overload
- def nanmedian(
- input: Tensor,
- dim: _int,
- keepdim: _bool = False,
- *,
- out: Tensor | tuple[Tensor, ...] | list[Tensor] | None = None,
- ) -> torch.return_types.nanmedian:
- r"""
- nanmedian(input) -> Tensor
- Returns the median of the values in :attr:`input`, ignoring ``NaN`` values.
- This function is identical to :func:`torch.median` when there are no ``NaN`` values in :attr:`input`.
- When :attr:`input` has one or more ``NaN`` values, :func:`torch.median` will always return ``NaN``,
- while this function will return the median of the non-``NaN`` elements in :attr:`input`.
- If all the elements in :attr:`input` are ``NaN`` it will also return ``NaN``.
- Args:
- input (Tensor): the input tensor.
- Example::
- >>> a = torch.tensor([1, float('nan'), 3, 2])
- >>> a.median()
- tensor(nan)
- >>> a.nanmedian()
- tensor(2.)
- .. function:: nanmedian(input, dim=-1, keepdim=False, *, out=None) -> (Tensor, LongTensor)
- :noindex:
- Returns a namedtuple ``(values, indices)`` where ``values`` contains the median of each row of :attr:`input`
- in the dimension :attr:`dim`, ignoring ``NaN`` values, and ``indices`` contains the index of the median values
- found in the dimension :attr:`dim`.
- This function is identical to :func:`torch.median` when there are no ``NaN`` values in a reduced row. When a reduced row has
- one or more ``NaN`` values, :func:`torch.median` will always reduce it to ``NaN``, while this function will reduce it to the
- median of the non-``NaN`` elements. If all the elements in a reduced row are ``NaN`` then it will be reduced to ``NaN``, too.
- Args:
- input (Tensor): the input tensor.
- dim (int, optional): the dimension to reduce.
- If ``None``, all dimensions are reduced.
- keepdim (bool, optional): whether the output tensor has :attr:`dim` retained or not. Default: ``False``.
- Keyword args:
- out ((Tensor, Tensor), optional): The first tensor will be populated with the median values and the second
- tensor, which must have dtype long, with their indices in the dimension
- :attr:`dim` of :attr:`input`.
- Example::
- >>> a = torch.tensor([[2, 3, 1], [float('nan'), 1, float('nan')]])
- >>> a
- tensor([[2., 3., 1.],
- [nan, 1., nan]])
- >>> a.median(0)
- torch.return_types.median(values=tensor([nan, 1., nan]), indices=tensor([1, 1, 1]))
- >>> a.nanmedian(0)
- torch.return_types.nanmedian(values=tensor([2., 1., 1.]), indices=tensor([0, 1, 0]))
- """
- @overload
- def nanmedian(
- input: Tensor,
- dim: str | EllipsisType | None,
- keepdim: _bool = False,
- *,
- out: Tensor | tuple[Tensor, ...] | list[Tensor] | None = None,
- ) -> torch.return_types.nanmedian:
- r"""
- nanmedian(input) -> Tensor
- Returns the median of the values in :attr:`input`, ignoring ``NaN`` values.
- This function is identical to :func:`torch.median` when there are no ``NaN`` values in :attr:`input`.
- When :attr:`input` has one or more ``NaN`` values, :func:`torch.median` will always return ``NaN``,
- while this function will return the median of the non-``NaN`` elements in :attr:`input`.
- If all the elements in :attr:`input` are ``NaN`` it will also return ``NaN``.
- Args:
- input (Tensor): the input tensor.
- Example::
- >>> a = torch.tensor([1, float('nan'), 3, 2])
- >>> a.median()
- tensor(nan)
- >>> a.nanmedian()
- tensor(2.)
- .. function:: nanmedian(input, dim=-1, keepdim=False, *, out=None) -> (Tensor, LongTensor)
- :noindex:
- Returns a namedtuple ``(values, indices)`` where ``values`` contains the median of each row of :attr:`input`
- in the dimension :attr:`dim`, ignoring ``NaN`` values, and ``indices`` contains the index of the median values
- found in the dimension :attr:`dim`.
- This function is identical to :func:`torch.median` when there are no ``NaN`` values in a reduced row. When a reduced row has
- one or more ``NaN`` values, :func:`torch.median` will always reduce it to ``NaN``, while this function will reduce it to the
- median of the non-``NaN`` elements. If all the elements in a reduced row are ``NaN`` then it will be reduced to ``NaN``, too.
- Args:
- input (Tensor): the input tensor.
- dim (int, optional): the dimension to reduce.
- If ``None``, all dimensions are reduced.
- keepdim (bool, optional): whether the output tensor has :attr:`dim` retained or not. Default: ``False``.
- Keyword args:
- out ((Tensor, Tensor), optional): The first tensor will be populated with the median values and the second
- tensor, which must have dtype long, with their indices in the dimension
- :attr:`dim` of :attr:`input`.
- Example::
- >>> a = torch.tensor([[2, 3, 1], [float('nan'), 1, float('nan')]])
- >>> a
- tensor([[2., 3., 1.],
- [nan, 1., nan]])
- >>> a.median(0)
- torch.return_types.median(values=tensor([nan, 1., nan]), indices=tensor([1, 1, 1]))
- >>> a.nanmedian(0)
- torch.return_types.nanmedian(values=tensor([2., 1., 1.]), indices=tensor([0, 1, 0]))
- """
- @overload
- def nanquantile(
- input: Tensor,
- q: Tensor,
- dim: _int | None = None,
- keepdim: _bool = False,
- *,
- interpolation: str = "linear",
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- nanquantile(input, q, dim=None, keepdim=False, *, interpolation='linear', out=None) -> Tensor
- This is a variant of :func:`torch.quantile` that "ignores" ``NaN`` values,
- computing the quantiles :attr:`q` as if ``NaN`` values in :attr:`input` did
- not exist. If all values in a reduced row are ``NaN`` then the quantiles for
- that reduction will be ``NaN``. See the documentation for :func:`torch.quantile`.
- Args:
- input (Tensor): the input tensor.
- q (float or Tensor): a scalar or 1D tensor of quantile values in the range [0, 1]
- dim (int, optional): the dimension to reduce.
- If ``None``, all dimensions are reduced.
- keepdim (bool, optional): whether the output tensor has :attr:`dim` retained or not. Default: ``False``.
- Keyword arguments:
- interpolation (str): interpolation method to use when the desired quantile lies between two data points.
- Can be ``linear``, ``lower``, ``higher``, ``midpoint`` and ``nearest``.
- Default is ``linear``.
- out (Tensor, optional): the output tensor.
- Example::
- >>> t = torch.tensor([float('nan'), 1, 2])
- >>> t.quantile(0.5)
- tensor(nan)
- >>> t.nanquantile(0.5)
- tensor(1.5000)
- >>> t = torch.tensor([[float('nan'), float('nan')], [1, 2]])
- >>> t
- tensor([[nan, nan],
- [1., 2.]])
- >>> t.nanquantile(0.5, dim=0)
- tensor([1., 2.])
- >>> t.nanquantile(0.5, dim=1)
- tensor([ nan, 1.5000])
- """
- @overload
- def nanquantile(
- input: Tensor,
- q: _float,
- dim: _int | None = None,
- keepdim: _bool = False,
- *,
- interpolation: str = "linear",
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- nanquantile(input, q, dim=None, keepdim=False, *, interpolation='linear', out=None) -> Tensor
- This is a variant of :func:`torch.quantile` that "ignores" ``NaN`` values,
- computing the quantiles :attr:`q` as if ``NaN`` values in :attr:`input` did
- not exist. If all values in a reduced row are ``NaN`` then the quantiles for
- that reduction will be ``NaN``. See the documentation for :func:`torch.quantile`.
- Args:
- input (Tensor): the input tensor.
- q (float or Tensor): a scalar or 1D tensor of quantile values in the range [0, 1]
- dim (int, optional): the dimension to reduce.
- If ``None``, all dimensions are reduced.
- keepdim (bool, optional): whether the output tensor has :attr:`dim` retained or not. Default: ``False``.
- Keyword arguments:
- interpolation (str): interpolation method to use when the desired quantile lies between two data points.
- Can be ``linear``, ``lower``, ``higher``, ``midpoint`` and ``nearest``.
- Default is ``linear``.
- out (Tensor, optional): the output tensor.
- Example::
- >>> t = torch.tensor([float('nan'), 1, 2])
- >>> t.quantile(0.5)
- tensor(nan)
- >>> t.nanquantile(0.5)
- tensor(1.5000)
- >>> t = torch.tensor([[float('nan'), float('nan')], [1, 2]])
- >>> t
- tensor([[nan, nan],
- [1., 2.]])
- >>> t.nanquantile(0.5, dim=0)
- tensor([1., 2.])
- >>> t.nanquantile(0.5, dim=1)
- tensor([ nan, 1.5000])
- """
- def nansum(
- input: Tensor,
- dim: _int | _size | None = None,
- keepdim: _bool = False,
- *,
- dtype: _dtype | None = None,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- nansum(input, *, dtype=None) -> Tensor
- Returns the sum of all elements, treating Not a Numbers (NaNs) as zero.
- Args:
- input (Tensor): the input tensor.
- Keyword args:
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor.
- If specified, the input tensor is casted to :attr:`dtype` before the operation
- is performed. This is useful for preventing data type overflows. Default: None.
- Example::
- >>> a = torch.tensor([1., 2., float('nan'), 4.])
- >>> torch.nansum(a)
- tensor(7.)
- .. function:: nansum(input, dim, keepdim=False, *, dtype=None) -> Tensor
- :noindex:
- Returns the sum of each row of the :attr:`input` tensor in the given
- dimension :attr:`dim`, treating Not a Numbers (NaNs) as zero.
- If :attr:`dim` is a list of dimensions, reduce over all of them.
- If :attr:`keepdim` is ``True``, the output tensor is of the same size
- as :attr:`input` except in the dimension(s) :attr:`dim` where it is of size 1.
- Otherwise, :attr:`dim` is squeezed (see :func:`torch.squeeze`), resulting in the
- output tensor having 1 (or ``len(dim)``) fewer dimension(s).
- Args:
- input (Tensor): the input tensor.
- dim (int or tuple of ints, optional): the dimension or dimensions to reduce.
- If ``None``, all dimensions are reduced.
- keepdim (bool, optional): whether the output tensor has :attr:`dim` retained or not. Default: ``False``.
- Keyword args:
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor.
- If specified, the input tensor is casted to :attr:`dtype` before the operation
- is performed. This is useful for preventing data type overflows. Default: None.
- Example::
- >>> torch.nansum(torch.tensor([1., float("nan")]))
- tensor(1.)
- >>> a = torch.tensor([[1, 2], [3., float("nan")]])
- >>> torch.nansum(a)
- tensor(6.)
- >>> torch.nansum(a, dim=0)
- tensor([4., 2.])
- >>> torch.nansum(a, dim=1)
- tensor([3., 3.])
- """
- @overload
- def narrow(
- input: Tensor,
- dim: _int,
- start: Tensor,
- length: _int | SymInt,
- ) -> Tensor:
- r"""
- narrow(input, dim, start, length) -> Tensor
- Returns a new tensor that is a narrowed version of :attr:`input` tensor. The
- dimension :attr:`dim` is input from :attr:`start` to ``start + length``. The
- returned tensor and :attr:`input` tensor share the same underlying storage.
- Args:
- input (Tensor): the tensor to narrow
- dim (int): the dimension along which to narrow
- start (int or Tensor): index of the element to start the narrowed dimension
- from. Can be negative, which means indexing from the end of `dim`. If
- `Tensor`, it must be an 0-dim integral `Tensor` (bools not allowed)
- length (int): length of the narrowed dimension, must be weakly positive
- Example::
- >>> x = torch.tensor([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
- >>> torch.narrow(x, 0, 0, 2)
- tensor([[ 1, 2, 3],
- [ 4, 5, 6]])
- >>> torch.narrow(x, 1, 1, 2)
- tensor([[ 2, 3],
- [ 5, 6],
- [ 8, 9]])
- >>> torch.narrow(x, -1, torch.tensor(-1), 1)
- tensor([[3],
- [6],
- [9]])
- """
- @overload
- def narrow(
- input: Tensor,
- dim: _int,
- start: _int | SymInt,
- length: _int | SymInt,
- ) -> Tensor:
- r"""
- narrow(input, dim, start, length) -> Tensor
- Returns a new tensor that is a narrowed version of :attr:`input` tensor. The
- dimension :attr:`dim` is input from :attr:`start` to ``start + length``. The
- returned tensor and :attr:`input` tensor share the same underlying storage.
- Args:
- input (Tensor): the tensor to narrow
- dim (int): the dimension along which to narrow
- start (int or Tensor): index of the element to start the narrowed dimension
- from. Can be negative, which means indexing from the end of `dim`. If
- `Tensor`, it must be an 0-dim integral `Tensor` (bools not allowed)
- length (int): length of the narrowed dimension, must be weakly positive
- Example::
- >>> x = torch.tensor([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
- >>> torch.narrow(x, 0, 0, 2)
- tensor([[ 1, 2, 3],
- [ 4, 5, 6]])
- >>> torch.narrow(x, 1, 1, 2)
- tensor([[ 2, 3],
- [ 5, 6],
- [ 8, 9]])
- >>> torch.narrow(x, -1, torch.tensor(-1), 1)
- tensor([[3],
- [6],
- [9]])
- """
- def narrow_copy(
- input: Tensor,
- dim: _int,
- start: _int | SymInt,
- length: _int | SymInt,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- narrow_copy(input, dim, start, length, *, out=None) -> Tensor
- Same as :meth:`Tensor.narrow` except this returns a copy rather
- than shared storage. This is primarily for sparse tensors, which
- do not have a shared-storage narrow method.
- Args:
- input (Tensor): the tensor to narrow
- dim (int): the dimension along which to narrow
- start (int): index of the element to start the narrowed dimension from. Can
- be negative, which means indexing from the end of `dim`
- length (int): length of the narrowed dimension, must be weakly positive
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> x = torch.tensor([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
- >>> torch.narrow_copy(x, 0, 0, 2)
- tensor([[ 1, 2, 3],
- [ 4, 5, 6]])
- >>> torch.narrow_copy(x, 1, 1, 2)
- tensor([[ 2, 3],
- [ 5, 6],
- [ 8, 9]])
- >>> s = torch.arange(16).reshape(2, 2, 2, 2).to_sparse(2)
- >>> torch.narrow_copy(s, 0, 0, 1)
- tensor(indices=tensor([[0, 0],
- [0, 1]]),
- values=tensor([[[0, 1],
- [2, 3]],
- [[4, 5],
- [6, 7]]]),
- size=(1, 2, 2, 2), nnz=2, layout=torch.sparse_coo)
- .. seealso::
- :func:`torch.narrow` for a non copy variant
- """
- def native_batch_norm(
- input: Tensor,
- weight: Tensor | None,
- bias: Tensor | None,
- running_mean: Tensor | None,
- running_var: Tensor | None,
- training: _bool,
- momentum: _float,
- eps: _float,
- *,
- out: Tensor | tuple[Tensor, ...] | list[Tensor] | None = None,
- ) -> tuple[Tensor, Tensor, Tensor]: ...
- def native_channel_shuffle(input: Tensor, groups: _int | SymInt) -> Tensor: ...
- def native_dropout(
- input: Tensor,
- p: _float,
- train: _bool | None,
- ) -> tuple[Tensor, Tensor]: ...
- def native_group_norm(
- input: Tensor,
- weight: Tensor | None,
- bias: Tensor | None,
- N: _int | SymInt,
- C: _int | SymInt,
- HxW: _int | SymInt,
- group: _int,
- eps: _float,
- ) -> tuple[Tensor, Tensor, Tensor]: ...
- def native_layer_norm(
- input: Tensor,
- normalized_shape: Sequence[_int | SymInt],
- weight: Tensor | None,
- bias: Tensor | None,
- eps: _float,
- ) -> tuple[Tensor, Tensor, Tensor]: ...
- @overload
- def native_norm(
- input: Tensor,
- p: Number | _complex | None,
- dim: _int | _size,
- keepdim: _bool,
- dtype: _dtype | None,
- ) -> Tensor: ...
- @overload
- def native_norm(input: Tensor, p: Number | _complex = 2) -> Tensor: ...
- @overload
- def ne(
- input: Tensor,
- other: Tensor,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- ne(input, other, *, out=None) -> Tensor
- Computes :math:`\text{input} \neq \text{other}` element-wise.
- The second argument can be a number or a tensor whose shape is
- :ref:`broadcastable <broadcasting-semantics>` with the first argument.
- Args:
- input (Tensor): the tensor to compare
- other (Tensor or float): the tensor or value to compare
- Keyword args:
- out (Tensor, optional): the output tensor.
- Returns:
- A boolean tensor that is True where :attr:`input` is not equal to :attr:`other` and False elsewhere
- Example::
- >>> torch.ne(torch.tensor([[1, 2], [3, 4]]), torch.tensor([[1, 1], [4, 4]]))
- tensor([[False, True], [True, False]])
- """
- @overload
- def ne(
- input: Tensor,
- other: Number | _complex,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- ne(input, other, *, out=None) -> Tensor
- Computes :math:`\text{input} \neq \text{other}` element-wise.
- The second argument can be a number or a tensor whose shape is
- :ref:`broadcastable <broadcasting-semantics>` with the first argument.
- Args:
- input (Tensor): the tensor to compare
- other (Tensor or float): the tensor or value to compare
- Keyword args:
- out (Tensor, optional): the output tensor.
- Returns:
- A boolean tensor that is True where :attr:`input` is not equal to :attr:`other` and False elsewhere
- Example::
- >>> torch.ne(torch.tensor([[1, 2], [3, 4]]), torch.tensor([[1, 1], [4, 4]]))
- tensor([[False, True], [True, False]])
- """
- def neg(input: Tensor, *, out: Tensor | None = None) -> Tensor:
- r"""
- neg(input, *, out=None) -> Tensor
- Returns a new tensor with the negative of the elements of :attr:`input`.
- .. math::
- \text{out} = -1 \times \text{input}
- Args:
- input (Tensor): the input tensor.
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> a = torch.randn(5)
- >>> a
- tensor([ 0.0090, -0.2262, -0.0682, -0.2866, 0.3940])
- >>> torch.neg(a)
- tensor([-0.0090, 0.2262, 0.0682, 0.2866, -0.3940])
- """
- def neg_(input: Tensor) -> Tensor: ...
- def negative(input: Tensor, *, out: Tensor | None = None) -> Tensor:
- r"""
- negative(input, *, out=None) -> Tensor
- Alias for :func:`torch.neg`
- """
- def negative_(input: Tensor) -> Tensor: ...
- def nextafter(
- input: Tensor,
- other: Tensor,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- nextafter(input, other, *, out=None) -> Tensor
- Return the next floating-point value after :attr:`input` towards :attr:`other`, elementwise.
- The shapes of ``input`` and ``other`` must be
- :ref:`broadcastable <broadcasting-semantics>`.
- Args:
- input (Tensor): the first input tensor
- other (Tensor): the second input tensor
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> eps = torch.finfo(torch.float32).eps
- >>> torch.nextafter(torch.tensor([1.0, 2.0]), torch.tensor([2.0, 1.0])) == torch.tensor([eps + 1, 2 - eps])
- tensor([True, True])
- """
- @overload
- def nonzero(
- input: Tensor,
- *,
- as_tuple: Literal[False] = False,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- nonzero(input, *, out=None, as_tuple=False) -> LongTensor or tuple of LongTensors
- .. note::
- :func:`torch.nonzero(..., as_tuple=False) <torch.nonzero>` (default) returns a
- 2-D tensor where each row is the index for a nonzero value.
- :func:`torch.nonzero(..., as_tuple=True) <torch.nonzero>` returns a tuple of 1-D
- index tensors, allowing for advanced indexing, so ``x[x.nonzero(as_tuple=True)]``
- gives all nonzero values of tensor ``x``. Of the returned tuple, each index tensor
- contains nonzero indices for a certain dimension.
- See below for more details on the two behaviors.
- When :attr:`input` is on CUDA, :func:`torch.nonzero() <torch.nonzero>` causes
- host-device synchronization.
- **When** :attr:`as_tuple` **is** ``False`` **(default)**:
- Returns a tensor containing the indices of all non-zero elements of
- :attr:`input`. Each row in the result contains the indices of a non-zero
- element in :attr:`input`. The result is sorted lexicographically, with
- the last index changing the fastest (C-style).
- If :attr:`input` has :math:`n` dimensions, then the resulting indices tensor
- :attr:`out` is of size :math:`(z \times n)`, where :math:`z` is the total number of
- non-zero elements in the :attr:`input` tensor.
- **When** :attr:`as_tuple` **is** ``True``:
- Returns a tuple of 1-D tensors, one for each dimension in :attr:`input`,
- each containing the indices (in that dimension) of all non-zero elements of
- :attr:`input` .
- If :attr:`input` has :math:`n` dimensions, then the resulting tuple contains :math:`n`
- tensors of size :math:`z`, where :math:`z` is the total number of
- non-zero elements in the :attr:`input` tensor.
- As a special case, when :attr:`input` has zero dimensions and a nonzero scalar
- value, it is treated as a one-dimensional tensor with one element.
- Args:
- input (Tensor): the input tensor.
- Keyword args:
- out (LongTensor, optional): the output tensor containing indices
- Returns:
- LongTensor or tuple of LongTensor: If :attr:`as_tuple` is ``False``, the output
- tensor containing indices. If :attr:`as_tuple` is ``True``, one 1-D tensor for
- each dimension, containing the indices of each nonzero element along that
- dimension.
- Example::
- >>> torch.nonzero(torch.tensor([1, 1, 1, 0, 1]))
- tensor([[ 0],
- [ 1],
- [ 2],
- [ 4]])
- >>> torch.nonzero(torch.tensor([[0.6, 0.0, 0.0, 0.0],
- ... [0.0, 0.4, 0.0, 0.0],
- ... [0.0, 0.0, 1.2, 0.0],
- ... [0.0, 0.0, 0.0,-0.4]]))
- tensor([[ 0, 0],
- [ 1, 1],
- [ 2, 2],
- [ 3, 3]])
- >>> torch.nonzero(torch.tensor([1, 1, 1, 0, 1]), as_tuple=True)
- (tensor([0, 1, 2, 4]),)
- >>> torch.nonzero(torch.tensor([[0.6, 0.0, 0.0, 0.0],
- ... [0.0, 0.4, 0.0, 0.0],
- ... [0.0, 0.0, 1.2, 0.0],
- ... [0.0, 0.0, 0.0,-0.4]]), as_tuple=True)
- (tensor([0, 1, 2, 3]), tensor([0, 1, 2, 3]))
- >>> torch.nonzero(torch.tensor(5), as_tuple=True)
- (tensor([0]),)
- """
- @overload
- def nonzero(
- input: Tensor,
- *,
- as_tuple: Literal[True],
- ) -> tuple[Tensor, ...]:
- r"""
- nonzero(input, *, out=None, as_tuple=False) -> LongTensor or tuple of LongTensors
- .. note::
- :func:`torch.nonzero(..., as_tuple=False) <torch.nonzero>` (default) returns a
- 2-D tensor where each row is the index for a nonzero value.
- :func:`torch.nonzero(..., as_tuple=True) <torch.nonzero>` returns a tuple of 1-D
- index tensors, allowing for advanced indexing, so ``x[x.nonzero(as_tuple=True)]``
- gives all nonzero values of tensor ``x``. Of the returned tuple, each index tensor
- contains nonzero indices for a certain dimension.
- See below for more details on the two behaviors.
- When :attr:`input` is on CUDA, :func:`torch.nonzero() <torch.nonzero>` causes
- host-device synchronization.
- **When** :attr:`as_tuple` **is** ``False`` **(default)**:
- Returns a tensor containing the indices of all non-zero elements of
- :attr:`input`. Each row in the result contains the indices of a non-zero
- element in :attr:`input`. The result is sorted lexicographically, with
- the last index changing the fastest (C-style).
- If :attr:`input` has :math:`n` dimensions, then the resulting indices tensor
- :attr:`out` is of size :math:`(z \times n)`, where :math:`z` is the total number of
- non-zero elements in the :attr:`input` tensor.
- **When** :attr:`as_tuple` **is** ``True``:
- Returns a tuple of 1-D tensors, one for each dimension in :attr:`input`,
- each containing the indices (in that dimension) of all non-zero elements of
- :attr:`input` .
- If :attr:`input` has :math:`n` dimensions, then the resulting tuple contains :math:`n`
- tensors of size :math:`z`, where :math:`z` is the total number of
- non-zero elements in the :attr:`input` tensor.
- As a special case, when :attr:`input` has zero dimensions and a nonzero scalar
- value, it is treated as a one-dimensional tensor with one element.
- Args:
- input (Tensor): the input tensor.
- Keyword args:
- out (LongTensor, optional): the output tensor containing indices
- Returns:
- LongTensor or tuple of LongTensor: If :attr:`as_tuple` is ``False``, the output
- tensor containing indices. If :attr:`as_tuple` is ``True``, one 1-D tensor for
- each dimension, containing the indices of each nonzero element along that
- dimension.
- Example::
- >>> torch.nonzero(torch.tensor([1, 1, 1, 0, 1]))
- tensor([[ 0],
- [ 1],
- [ 2],
- [ 4]])
- >>> torch.nonzero(torch.tensor([[0.6, 0.0, 0.0, 0.0],
- ... [0.0, 0.4, 0.0, 0.0],
- ... [0.0, 0.0, 1.2, 0.0],
- ... [0.0, 0.0, 0.0,-0.4]]))
- tensor([[ 0, 0],
- [ 1, 1],
- [ 2, 2],
- [ 3, 3]])
- >>> torch.nonzero(torch.tensor([1, 1, 1, 0, 1]), as_tuple=True)
- (tensor([0, 1, 2, 4]),)
- >>> torch.nonzero(torch.tensor([[0.6, 0.0, 0.0, 0.0],
- ... [0.0, 0.4, 0.0, 0.0],
- ... [0.0, 0.0, 1.2, 0.0],
- ... [0.0, 0.0, 0.0,-0.4]]), as_tuple=True)
- (tensor([0, 1, 2, 3]), tensor([0, 1, 2, 3]))
- >>> torch.nonzero(torch.tensor(5), as_tuple=True)
- (tensor([0]),)
- """
- def nonzero_static(
- input: Tensor,
- *,
- size: _int | SymInt,
- fill_value: _int = -1,
- out: Tensor | None = None,
- ) -> Tensor: ...
- def norm_except_dim(v: Tensor, pow: _int = 2, dim: _int = 0) -> Tensor: ...
- @overload
- def normal(
- mean: Tensor,
- std: Tensor,
- *,
- generator: Generator | None = None,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- normal(mean, std, *, generator=None, out=None) -> Tensor
- Returns a tensor of random numbers drawn from separate normal distributions
- whose mean and standard deviation are given.
- The :attr:`mean` is a tensor with the mean of
- each output element's normal distribution
- The :attr:`std` is a tensor with the standard deviation of
- each output element's normal distribution
- The shapes of :attr:`mean` and :attr:`std` don't need to match, but the
- total number of elements in each tensor need to be the same.
- .. note:: When the shapes do not match, the shape of :attr:`mean`
- is used as the shape for the returned output tensor
- .. note:: When :attr:`std` is a CUDA tensor, this function synchronizes
- its device with the CPU.
- Args:
- mean (Tensor): the tensor of per-element means
- std (Tensor): the tensor of per-element standard deviations
- Keyword args:
- generator (:class:`torch.Generator`, optional): a pseudorandom number generator for sampling
- out (Tensor, optional): the output tensor.
- Example::
- >>> torch.normal(mean=torch.arange(1., 11.), std=torch.arange(1, 0, -0.1))
- tensor([ 1.0425, 3.5672, 2.7969, 4.2925, 4.7229, 6.2134,
- 8.0505, 8.1408, 9.0563, 10.0566])
- .. function:: normal(mean=0.0, std, *, out=None) -> Tensor
- :noindex:
- Similar to the function above, but the means are shared among all drawn
- elements.
- Args:
- mean (float, optional): the mean for all distributions
- std (Tensor): the tensor of per-element standard deviations
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> torch.normal(mean=0.5, std=torch.arange(1., 6.))
- tensor([-1.2793, -1.0732, -2.0687, 5.1177, -1.2303])
- .. function:: normal(mean, std=1.0, *, out=None) -> Tensor
- :noindex:
- Similar to the function above, but the standard deviations are shared among
- all drawn elements.
- Args:
- mean (Tensor): the tensor of per-element means
- std (float, optional): the standard deviation for all distributions
- Keyword args:
- out (Tensor, optional): the output tensor
- Example::
- >>> torch.normal(mean=torch.arange(1., 6.))
- tensor([ 1.1552, 2.6148, 2.6535, 5.8318, 4.2361])
- .. function:: normal(mean, std, size, *, out=None) -> Tensor
- :noindex:
- Similar to the function above, but the means and standard deviations are shared
- among all drawn elements. The resulting tensor has size given by :attr:`size`.
- Args:
- mean (float): the mean for all distributions
- std (float): the standard deviation for all distributions
- size (int...): a sequence of integers defining the shape of the output tensor.
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> torch.normal(2, 3, size=(1, 4))
- tensor([[-1.3987, -1.9544, 3.6048, 0.7909]])
- """
- @overload
- def normal(
- mean: Tensor,
- std: _float = 1,
- *,
- generator: Generator | None = None,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- normal(mean, std, *, generator=None, out=None) -> Tensor
- Returns a tensor of random numbers drawn from separate normal distributions
- whose mean and standard deviation are given.
- The :attr:`mean` is a tensor with the mean of
- each output element's normal distribution
- The :attr:`std` is a tensor with the standard deviation of
- each output element's normal distribution
- The shapes of :attr:`mean` and :attr:`std` don't need to match, but the
- total number of elements in each tensor need to be the same.
- .. note:: When the shapes do not match, the shape of :attr:`mean`
- is used as the shape for the returned output tensor
- .. note:: When :attr:`std` is a CUDA tensor, this function synchronizes
- its device with the CPU.
- Args:
- mean (Tensor): the tensor of per-element means
- std (Tensor): the tensor of per-element standard deviations
- Keyword args:
- generator (:class:`torch.Generator`, optional): a pseudorandom number generator for sampling
- out (Tensor, optional): the output tensor.
- Example::
- >>> torch.normal(mean=torch.arange(1., 11.), std=torch.arange(1, 0, -0.1))
- tensor([ 1.0425, 3.5672, 2.7969, 4.2925, 4.7229, 6.2134,
- 8.0505, 8.1408, 9.0563, 10.0566])
- .. function:: normal(mean=0.0, std, *, out=None) -> Tensor
- :noindex:
- Similar to the function above, but the means are shared among all drawn
- elements.
- Args:
- mean (float, optional): the mean for all distributions
- std (Tensor): the tensor of per-element standard deviations
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> torch.normal(mean=0.5, std=torch.arange(1., 6.))
- tensor([-1.2793, -1.0732, -2.0687, 5.1177, -1.2303])
- .. function:: normal(mean, std=1.0, *, out=None) -> Tensor
- :noindex:
- Similar to the function above, but the standard deviations are shared among
- all drawn elements.
- Args:
- mean (Tensor): the tensor of per-element means
- std (float, optional): the standard deviation for all distributions
- Keyword args:
- out (Tensor, optional): the output tensor
- Example::
- >>> torch.normal(mean=torch.arange(1., 6.))
- tensor([ 1.1552, 2.6148, 2.6535, 5.8318, 4.2361])
- .. function:: normal(mean, std, size, *, out=None) -> Tensor
- :noindex:
- Similar to the function above, but the means and standard deviations are shared
- among all drawn elements. The resulting tensor has size given by :attr:`size`.
- Args:
- mean (float): the mean for all distributions
- std (float): the standard deviation for all distributions
- size (int...): a sequence of integers defining the shape of the output tensor.
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> torch.normal(2, 3, size=(1, 4))
- tensor([[-1.3987, -1.9544, 3.6048, 0.7909]])
- """
- @overload
- def normal(
- mean: _float,
- std: Tensor,
- *,
- generator: Generator | None = None,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- normal(mean, std, *, generator=None, out=None) -> Tensor
- Returns a tensor of random numbers drawn from separate normal distributions
- whose mean and standard deviation are given.
- The :attr:`mean` is a tensor with the mean of
- each output element's normal distribution
- The :attr:`std` is a tensor with the standard deviation of
- each output element's normal distribution
- The shapes of :attr:`mean` and :attr:`std` don't need to match, but the
- total number of elements in each tensor need to be the same.
- .. note:: When the shapes do not match, the shape of :attr:`mean`
- is used as the shape for the returned output tensor
- .. note:: When :attr:`std` is a CUDA tensor, this function synchronizes
- its device with the CPU.
- Args:
- mean (Tensor): the tensor of per-element means
- std (Tensor): the tensor of per-element standard deviations
- Keyword args:
- generator (:class:`torch.Generator`, optional): a pseudorandom number generator for sampling
- out (Tensor, optional): the output tensor.
- Example::
- >>> torch.normal(mean=torch.arange(1., 11.), std=torch.arange(1, 0, -0.1))
- tensor([ 1.0425, 3.5672, 2.7969, 4.2925, 4.7229, 6.2134,
- 8.0505, 8.1408, 9.0563, 10.0566])
- .. function:: normal(mean=0.0, std, *, out=None) -> Tensor
- :noindex:
- Similar to the function above, but the means are shared among all drawn
- elements.
- Args:
- mean (float, optional): the mean for all distributions
- std (Tensor): the tensor of per-element standard deviations
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> torch.normal(mean=0.5, std=torch.arange(1., 6.))
- tensor([-1.2793, -1.0732, -2.0687, 5.1177, -1.2303])
- .. function:: normal(mean, std=1.0, *, out=None) -> Tensor
- :noindex:
- Similar to the function above, but the standard deviations are shared among
- all drawn elements.
- Args:
- mean (Tensor): the tensor of per-element means
- std (float, optional): the standard deviation for all distributions
- Keyword args:
- out (Tensor, optional): the output tensor
- Example::
- >>> torch.normal(mean=torch.arange(1., 6.))
- tensor([ 1.1552, 2.6148, 2.6535, 5.8318, 4.2361])
- .. function:: normal(mean, std, size, *, out=None) -> Tensor
- :noindex:
- Similar to the function above, but the means and standard deviations are shared
- among all drawn elements. The resulting tensor has size given by :attr:`size`.
- Args:
- mean (float): the mean for all distributions
- std (float): the standard deviation for all distributions
- size (int...): a sequence of integers defining the shape of the output tensor.
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> torch.normal(2, 3, size=(1, 4))
- tensor([[-1.3987, -1.9544, 3.6048, 0.7909]])
- """
- @overload
- def normal(
- mean: _float,
- std: _float,
- size: Sequence[_int | SymInt],
- *,
- generator: Generator | None = None,
- out: Tensor | None = None,
- dtype: _dtype | None = None,
- layout: _layout | None = None,
- device: DeviceLikeType | None = None,
- pin_memory: _bool | None = False,
- requires_grad: _bool | None = False,
- ) -> Tensor:
- r"""
- normal(mean, std, *, generator=None, out=None) -> Tensor
- Returns a tensor of random numbers drawn from separate normal distributions
- whose mean and standard deviation are given.
- The :attr:`mean` is a tensor with the mean of
- each output element's normal distribution
- The :attr:`std` is a tensor with the standard deviation of
- each output element's normal distribution
- The shapes of :attr:`mean` and :attr:`std` don't need to match, but the
- total number of elements in each tensor need to be the same.
- .. note:: When the shapes do not match, the shape of :attr:`mean`
- is used as the shape for the returned output tensor
- .. note:: When :attr:`std` is a CUDA tensor, this function synchronizes
- its device with the CPU.
- Args:
- mean (Tensor): the tensor of per-element means
- std (Tensor): the tensor of per-element standard deviations
- Keyword args:
- generator (:class:`torch.Generator`, optional): a pseudorandom number generator for sampling
- out (Tensor, optional): the output tensor.
- Example::
- >>> torch.normal(mean=torch.arange(1., 11.), std=torch.arange(1, 0, -0.1))
- tensor([ 1.0425, 3.5672, 2.7969, 4.2925, 4.7229, 6.2134,
- 8.0505, 8.1408, 9.0563, 10.0566])
- .. function:: normal(mean=0.0, std, *, out=None) -> Tensor
- :noindex:
- Similar to the function above, but the means are shared among all drawn
- elements.
- Args:
- mean (float, optional): the mean for all distributions
- std (Tensor): the tensor of per-element standard deviations
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> torch.normal(mean=0.5, std=torch.arange(1., 6.))
- tensor([-1.2793, -1.0732, -2.0687, 5.1177, -1.2303])
- .. function:: normal(mean, std=1.0, *, out=None) -> Tensor
- :noindex:
- Similar to the function above, but the standard deviations are shared among
- all drawn elements.
- Args:
- mean (Tensor): the tensor of per-element means
- std (float, optional): the standard deviation for all distributions
- Keyword args:
- out (Tensor, optional): the output tensor
- Example::
- >>> torch.normal(mean=torch.arange(1., 6.))
- tensor([ 1.1552, 2.6148, 2.6535, 5.8318, 4.2361])
- .. function:: normal(mean, std, size, *, out=None) -> Tensor
- :noindex:
- Similar to the function above, but the means and standard deviations are shared
- among all drawn elements. The resulting tensor has size given by :attr:`size`.
- Args:
- mean (float): the mean for all distributions
- std (float): the standard deviation for all distributions
- size (int...): a sequence of integers defining the shape of the output tensor.
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> torch.normal(2, 3, size=(1, 4))
- tensor([[-1.3987, -1.9544, 3.6048, 0.7909]])
- """
- @overload
- def not_equal(
- input: Tensor,
- other: Tensor,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- not_equal(input, other, *, out=None) -> Tensor
- Alias for :func:`torch.ne`.
- """
- @overload
- def not_equal(
- input: Tensor,
- other: Number | _complex,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- not_equal(input, other, *, out=None) -> Tensor
- Alias for :func:`torch.ne`.
- """
- @overload
- def nuclear_norm(
- input: Tensor,
- dim: _int | _size,
- keepdim: _bool = False,
- *,
- out: Tensor | None = None,
- ) -> Tensor: ...
- @overload
- def nuclear_norm(
- input: Tensor,
- keepdim: _bool = False,
- *,
- out: Tensor | None = None,
- ) -> Tensor: ...
- def numel(self: Tensor) -> _int:
- r"""
- numel(input: Tensor) -> int
- Returns the total number of elements in the :attr:`input` tensor.
- Args:
- input (Tensor): the input tensor.
- Example::
- >>> a = torch.randn(1, 2, 3, 4, 5)
- >>> torch.numel(a)
- 120
- >>> a = torch.zeros(4,4)
- >>> torch.numel(a)
- 16
- """
- @overload
- def ones(
- size: Sequence[_int | SymInt],
- *,
- out: Tensor | None = None,
- dtype: _dtype | None = None,
- layout: _layout | None = None,
- device: DeviceLikeType | None = None,
- pin_memory: _bool | None = False,
- requires_grad: _bool | None = False,
- ) -> Tensor:
- r"""
- ones(*size, *, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False) -> Tensor
- Returns a tensor filled with the scalar value `1`, with the shape defined
- by the variable argument :attr:`size`.
- Args:
- size (int...): a sequence of integers defining the shape of the output tensor.
- Can be a variable number of arguments or a collection like a list or tuple.
- Keyword arguments:
- out (Tensor, optional): the output tensor.
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor.
- Default: if ``None``, uses a global default (see :func:`torch.set_default_dtype`).
- layout (:class:`torch.layout`, optional): the desired layout of returned Tensor.
- Default: ``torch.strided``.
- device (:class:`torch.device`, optional): the desired device of returned tensor.
- Default: if ``None``, uses the current device for the default tensor type
- (see :func:`torch.set_default_device`). :attr:`device` will be the CPU
- for CPU tensor types and the current CUDA device for CUDA tensor types.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- Example::
- >>> torch.ones(2, 3)
- tensor([[ 1., 1., 1.],
- [ 1., 1., 1.]])
- >>> torch.ones(5)
- tensor([ 1., 1., 1., 1., 1.])
- """
- @overload
- def ones(
- *size: _int | SymInt,
- out: Tensor | None = None,
- dtype: _dtype | None = None,
- layout: _layout | None = None,
- device: DeviceLikeType | None = None,
- pin_memory: _bool | None = False,
- requires_grad: _bool | None = False,
- ) -> Tensor:
- r"""
- ones(*size, *, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False) -> Tensor
- Returns a tensor filled with the scalar value `1`, with the shape defined
- by the variable argument :attr:`size`.
- Args:
- size (int...): a sequence of integers defining the shape of the output tensor.
- Can be a variable number of arguments or a collection like a list or tuple.
- Keyword arguments:
- out (Tensor, optional): the output tensor.
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor.
- Default: if ``None``, uses a global default (see :func:`torch.set_default_dtype`).
- layout (:class:`torch.layout`, optional): the desired layout of returned Tensor.
- Default: ``torch.strided``.
- device (:class:`torch.device`, optional): the desired device of returned tensor.
- Default: if ``None``, uses the current device for the default tensor type
- (see :func:`torch.set_default_device`). :attr:`device` will be the CPU
- for CPU tensor types and the current CUDA device for CUDA tensor types.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- Example::
- >>> torch.ones(2, 3)
- tensor([[ 1., 1., 1.],
- [ 1., 1., 1.]])
- >>> torch.ones(5)
- tensor([ 1., 1., 1., 1., 1.])
- """
- @overload
- def ones(
- size: _size,
- *,
- names: Sequence[str | EllipsisType | None] | None,
- dtype: _dtype | None = None,
- layout: _layout | None = None,
- device: DeviceLikeType | None = None,
- pin_memory: _bool | None = False,
- requires_grad: _bool | None = False,
- ) -> Tensor:
- r"""
- ones(*size, *, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False) -> Tensor
- Returns a tensor filled with the scalar value `1`, with the shape defined
- by the variable argument :attr:`size`.
- Args:
- size (int...): a sequence of integers defining the shape of the output tensor.
- Can be a variable number of arguments or a collection like a list or tuple.
- Keyword arguments:
- out (Tensor, optional): the output tensor.
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor.
- Default: if ``None``, uses a global default (see :func:`torch.set_default_dtype`).
- layout (:class:`torch.layout`, optional): the desired layout of returned Tensor.
- Default: ``torch.strided``.
- device (:class:`torch.device`, optional): the desired device of returned tensor.
- Default: if ``None``, uses the current device for the default tensor type
- (see :func:`torch.set_default_device`). :attr:`device` will be the CPU
- for CPU tensor types and the current CUDA device for CUDA tensor types.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- Example::
- >>> torch.ones(2, 3)
- tensor([[ 1., 1., 1.],
- [ 1., 1., 1.]])
- >>> torch.ones(5)
- tensor([ 1., 1., 1., 1., 1.])
- """
- @overload
- def ones(
- *size: _int,
- names: Sequence[str | EllipsisType | None] | None,
- dtype: _dtype | None = None,
- layout: _layout | None = None,
- device: DeviceLikeType | None = None,
- pin_memory: _bool | None = False,
- requires_grad: _bool | None = False,
- ) -> Tensor:
- r"""
- ones(*size, *, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False) -> Tensor
- Returns a tensor filled with the scalar value `1`, with the shape defined
- by the variable argument :attr:`size`.
- Args:
- size (int...): a sequence of integers defining the shape of the output tensor.
- Can be a variable number of arguments or a collection like a list or tuple.
- Keyword arguments:
- out (Tensor, optional): the output tensor.
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor.
- Default: if ``None``, uses a global default (see :func:`torch.set_default_dtype`).
- layout (:class:`torch.layout`, optional): the desired layout of returned Tensor.
- Default: ``torch.strided``.
- device (:class:`torch.device`, optional): the desired device of returned tensor.
- Default: if ``None``, uses the current device for the default tensor type
- (see :func:`torch.set_default_device`). :attr:`device` will be the CPU
- for CPU tensor types and the current CUDA device for CUDA tensor types.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- Example::
- >>> torch.ones(2, 3)
- tensor([[ 1., 1., 1.],
- [ 1., 1., 1.]])
- >>> torch.ones(5)
- tensor([ 1., 1., 1., 1., 1.])
- """
- def ones_like(
- input: Tensor,
- *,
- memory_format: memory_format | None = None,
- dtype: _dtype | None = None,
- layout: _layout | None = None,
- device: DeviceLikeType | None = None,
- pin_memory: _bool | None = False,
- requires_grad: _bool | None = False,
- ) -> Tensor:
- r"""
- ones_like(input, *, dtype=None, layout=None, device=None, requires_grad=False, memory_format=torch.preserve_format) -> Tensor
- Returns a tensor filled with the scalar value `1`, with the same size as
- :attr:`input`. ``torch.ones_like(input)`` is equivalent to
- ``torch.ones(input.size(), dtype=input.dtype, layout=input.layout, device=input.device)``.
- .. warning::
- As of 0.4, this function does not support an :attr:`out` keyword. As an alternative,
- the old ``torch.ones_like(input, out=output)`` is equivalent to
- ``torch.ones(input.size(), out=output)``.
- Args:
- input (Tensor): the size of :attr:`input` will determine size of the output tensor.
- Keyword arguments:
- dtype (:class:`torch.dtype`, optional): the desired data type of returned Tensor.
- Default: if ``None``, defaults to the dtype of :attr:`input`.
- layout (:class:`torch.layout`, optional): the desired layout of returned tensor.
- Default: if ``None``, defaults to the layout of :attr:`input`.
- device (:class:`torch.device`, optional): the desired device of returned tensor.
- Default: if ``None``, defaults to the device of :attr:`input`.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- memory_format (:class:`torch.memory_format`, optional): the desired memory format of
- returned Tensor. Default: ``torch.preserve_format``.
- Example::
- >>> input = torch.empty(2, 3)
- >>> torch.ones_like(input)
- tensor([[ 1., 1., 1.],
- [ 1., 1., 1.]])
- """
- def orgqr(
- input: Tensor,
- input2: Tensor,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- orgqr(input, tau) -> Tensor
- Alias for :func:`torch.linalg.householder_product`.
- """
- def ormqr(
- input: Tensor,
- input2: Tensor,
- input3: Tensor,
- left: _bool = True,
- transpose: _bool = False,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- ormqr(input, tau, other, left=True, transpose=False, *, out=None) -> Tensor
- Computes the matrix-matrix multiplication of a product of Householder matrices with a general matrix.
- Multiplies a :math:`m \times n` matrix `C` (given by :attr:`other`) with a matrix `Q`,
- where `Q` is represented using Householder reflectors `(input, tau)`.
- See `Representation of Orthogonal or Unitary Matrices`_ for further details.
- If :attr:`left` is `True` then `op(Q)` times `C` is computed, otherwise the result is `C` times `op(Q)`.
- When :attr:`left` is `True`, the implicit matrix `Q` has size :math:`m \times m`.
- It has size :math:`n \times n` otherwise.
- If :attr:`transpose` is `True` then `op` is the conjugate transpose operation, otherwise it's a no-op.
- Supports inputs of float, double, cfloat and cdouble dtypes.
- Also supports batched inputs, and, if the input is batched, the output is batched with the same dimensions.
- .. seealso::
- :func:`torch.geqrf` can be used to form the Householder representation `(input, tau)` of matrix `Q`
- from the QR decomposition.
- .. note::
- This function supports backward but it is only fast when ``(input, tau)`` do not require gradients
- and/or ``tau.size(-1)`` is very small.
- ``
- Args:
- input (Tensor): tensor of shape `(*, mn, k)` where `*` is zero or more batch dimensions
- and `mn` equals to `m` or `n` depending on the :attr:`left`.
- tau (Tensor): tensor of shape `(*, min(mn, k))` where `*` is zero or more batch dimensions.
- other (Tensor): tensor of shape `(*, m, n)` where `*` is zero or more batch dimensions.
- left (bool): controls the order of multiplication.
- transpose (bool): controls whether the matrix `Q` is conjugate transposed or not.
- Keyword args:
- out (Tensor, optional): the output Tensor. Ignored if `None`. Default: `None`.
- .. _Representation of Orthogonal or Unitary Matrices:
- https://www.netlib.org/lapack/lug/node128.html
- """
- def outer(
- input: Tensor,
- vec2: Tensor,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- outer(input, vec2, *, out=None) -> Tensor
- Outer product of :attr:`input` and :attr:`vec2`.
- If :attr:`input` is a vector of size :math:`n` and :attr:`vec2` is a vector of
- size :math:`m`, then :attr:`out` must be a matrix of size :math:`(n \times m)`.
- .. note:: This function does not :ref:`broadcast <broadcasting-semantics>`.
- Args:
- input (Tensor): 1-D input vector
- vec2 (Tensor): 1-D input vector
- Keyword args:
- out (Tensor, optional): optional output matrix
- Example::
- >>> v1 = torch.arange(1., 5.)
- >>> v2 = torch.arange(1., 4.)
- >>> torch.outer(v1, v2)
- tensor([[ 1., 2., 3.],
- [ 2., 4., 6.],
- [ 3., 6., 9.],
- [ 4., 8., 12.]])
- """
- def pairwise_distance(
- x1: Tensor,
- x2: Tensor,
- p: _float = 2,
- eps: _float = 1e-06,
- keepdim: _bool = False,
- ) -> Tensor: ...
- def pdist(input: Tensor, p: _float = 2) -> Tensor: ...
- def permute(input: Tensor, dims: _size) -> Tensor:
- r"""
- permute(input, dims) -> Tensor
- Returns a view of the original tensor :attr:`input` with its dimensions permuted.
- Args:
- input (Tensor): the input tensor.
- dims (tuple of int): The desired ordering of dimensions
- Example:
- >>> x = torch.randn(2, 3, 5)
- >>> x.size()
- torch.Size([2, 3, 5])
- >>> torch.permute(x, (2, 0, 1)).size()
- torch.Size([5, 2, 3])
- """
- def permute_copy(
- input: Tensor,
- dims: _size,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- Performs the same operation as :func:`torch.permute`, but all output tensors
- are freshly created instead of aliasing the input.
- """
- def pinverse(input: Tensor, rcond: _float = 1e-15) -> Tensor:
- r"""
- pinverse(input, rcond=1e-15) -> Tensor
- Alias for :func:`torch.linalg.pinv`
- """
- def pixel_shuffle(input: Tensor, upscale_factor: _int) -> Tensor: ...
- def pixel_unshuffle(input: Tensor, downscale_factor: _int) -> Tensor: ...
- def poisson(input: Tensor, generator: Generator | None = None) -> Tensor:
- r"""
- poisson(input, generator=None) -> Tensor
- Returns a tensor of the same size as :attr:`input` with each element
- sampled from a Poisson distribution with rate parameter given by the corresponding
- element in :attr:`input` i.e.,
- .. math::
- \text{out}_i \sim \text{Poisson}(\text{input}_i)
- :attr:`input` must be non-negative.
- Args:
- input (Tensor): the input tensor containing the rates of the Poisson distribution
- Keyword args:
- generator (:class:`torch.Generator`, optional): a pseudorandom number generator for sampling
- Example::
- >>> rates = torch.rand(4, 4) * 5 # rate parameter between 0 and 5
- >>> torch.poisson(rates)
- tensor([[9., 1., 3., 5.],
- [8., 6., 6., 0.],
- [0., 4., 5., 3.],
- [2., 1., 4., 2.]])
- """
- def poisson_nll_loss(
- input: Tensor,
- target: Tensor,
- log_input: _bool,
- full: _bool,
- eps: _float,
- reduction: _int,
- ) -> Tensor: ...
- def polar(
- abs: Tensor,
- angle: Tensor,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- polar(abs, angle, *, out=None) -> Tensor
- Constructs a complex tensor whose elements are Cartesian coordinates
- corresponding to the polar coordinates with absolute value :attr:`abs` and angle
- :attr:`angle`.
- .. math::
- \text{out} = \text{abs} \cdot \cos(\text{angle}) + \text{abs} \cdot \sin(\text{angle}) \cdot j
- .. note::
- `torch.polar` is similar to
- `std::polar <https://en.cppreference.com/w/cpp/numeric/complex/polar>`_
- and does not compute the polar decomposition
- of a complex tensor like Python's `cmath.polar` and SciPy's `linalg.polar` do.
- The behavior of this function is undefined if `abs` is negative or NaN, or if `angle` is
- infinite.
- Args:
- abs (Tensor): The absolute value the complex tensor. Must be float or double.
- angle (Tensor): The angle of the complex tensor. Must be same dtype as
- :attr:`abs`.
- Keyword args:
- out (Tensor): If the inputs are ``torch.float32``, must be
- ``torch.complex64``. If the inputs are ``torch.float64``, must be
- ``torch.complex128``.
- Example::
- >>> import numpy as np
- >>> abs = torch.tensor([1, 2], dtype=torch.float64)
- >>> angle = torch.tensor([np.pi / 2, 5 * np.pi / 4], dtype=torch.float64)
- >>> z = torch.polar(abs, angle)
- >>> z
- tensor([(0.0000+1.0000j), (-1.4142-1.4142j)], dtype=torch.complex128)
- """
- def polygamma(
- n: _int,
- input: Tensor,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- polygamma(n, input, *, out=None) -> Tensor
- Alias for :func:`torch.special.polygamma`.
- """
- def positive(input: Tensor) -> Tensor:
- r"""
- positive(input) -> Tensor
- Returns :attr:`input`.
- Throws a runtime error if :attr:`input` is a bool tensor.
- Args:
- input (Tensor): the input tensor.
- Example::
- >>> t = torch.randn(5)
- >>> t
- tensor([ 0.0090, -0.2262, -0.0682, -0.2866, 0.3940])
- >>> torch.positive(t)
- tensor([ 0.0090, -0.2262, -0.0682, -0.2866, 0.3940])
- """
- @overload
- def pow(
- input: Tensor,
- exponent: Tensor,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- pow(input, exponent, *, out=None) -> Tensor
- Takes the power of each element in :attr:`input` with :attr:`exponent` and
- returns a tensor with the result.
- :attr:`exponent` can be either a single ``float`` number or a `Tensor`
- with the same number of elements as :attr:`input`.
- When :attr:`exponent` is a scalar value, the operation applied is:
- .. math::
- \text{out}_i = x_i ^ \text{exponent}
- When :attr:`exponent` is a tensor, the operation applied is:
- .. math::
- \text{out}_i = x_i ^ {\text{exponent}_i}
- When :attr:`exponent` is a tensor, the shapes of :attr:`input`
- and :attr:`exponent` must be :ref:`broadcastable <broadcasting-semantics>`.
- Args:
- input (Tensor): the input tensor.
- exponent (float or tensor): the exponent value
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> a = torch.randn(4)
- >>> a
- tensor([ 0.4331, 1.2475, 0.6834, -0.2791])
- >>> torch.pow(a, 2)
- tensor([ 0.1875, 1.5561, 0.4670, 0.0779])
- >>> exp = torch.arange(1., 5.)
- >>> a = torch.arange(1., 5.)
- >>> a
- tensor([ 1., 2., 3., 4.])
- >>> exp
- tensor([ 1., 2., 3., 4.])
- >>> torch.pow(a, exp)
- tensor([ 1., 4., 27., 256.])
- .. function:: pow(self, exponent, *, out=None) -> Tensor
- :noindex:
- :attr:`self` is a scalar ``float`` value, and :attr:`exponent` is a tensor.
- The returned tensor :attr:`out` is of the same shape as :attr:`exponent`
- The operation applied is:
- .. math::
- \text{out}_i = \text{self} ^ {\text{exponent}_i}
- Args:
- self (float): the scalar base value for the power operation
- exponent (Tensor): the exponent tensor
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> exp = torch.arange(1., 5.)
- >>> base = 2
- >>> torch.pow(base, exp)
- tensor([ 2., 4., 8., 16.])
- """
- @overload
- def pow(
- self: Number | _complex,
- exponent: Tensor,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- pow(input, exponent, *, out=None) -> Tensor
- Takes the power of each element in :attr:`input` with :attr:`exponent` and
- returns a tensor with the result.
- :attr:`exponent` can be either a single ``float`` number or a `Tensor`
- with the same number of elements as :attr:`input`.
- When :attr:`exponent` is a scalar value, the operation applied is:
- .. math::
- \text{out}_i = x_i ^ \text{exponent}
- When :attr:`exponent` is a tensor, the operation applied is:
- .. math::
- \text{out}_i = x_i ^ {\text{exponent}_i}
- When :attr:`exponent` is a tensor, the shapes of :attr:`input`
- and :attr:`exponent` must be :ref:`broadcastable <broadcasting-semantics>`.
- Args:
- input (Tensor): the input tensor.
- exponent (float or tensor): the exponent value
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> a = torch.randn(4)
- >>> a
- tensor([ 0.4331, 1.2475, 0.6834, -0.2791])
- >>> torch.pow(a, 2)
- tensor([ 0.1875, 1.5561, 0.4670, 0.0779])
- >>> exp = torch.arange(1., 5.)
- >>> a = torch.arange(1., 5.)
- >>> a
- tensor([ 1., 2., 3., 4.])
- >>> exp
- tensor([ 1., 2., 3., 4.])
- >>> torch.pow(a, exp)
- tensor([ 1., 4., 27., 256.])
- .. function:: pow(self, exponent, *, out=None) -> Tensor
- :noindex:
- :attr:`self` is a scalar ``float`` value, and :attr:`exponent` is a tensor.
- The returned tensor :attr:`out` is of the same shape as :attr:`exponent`
- The operation applied is:
- .. math::
- \text{out}_i = \text{self} ^ {\text{exponent}_i}
- Args:
- self (float): the scalar base value for the power operation
- exponent (Tensor): the exponent tensor
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> exp = torch.arange(1., 5.)
- >>> base = 2
- >>> torch.pow(base, exp)
- tensor([ 2., 4., 8., 16.])
- """
- @overload
- def pow(
- input: Tensor,
- exponent: Number | _complex,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- pow(input, exponent, *, out=None) -> Tensor
- Takes the power of each element in :attr:`input` with :attr:`exponent` and
- returns a tensor with the result.
- :attr:`exponent` can be either a single ``float`` number or a `Tensor`
- with the same number of elements as :attr:`input`.
- When :attr:`exponent` is a scalar value, the operation applied is:
- .. math::
- \text{out}_i = x_i ^ \text{exponent}
- When :attr:`exponent` is a tensor, the operation applied is:
- .. math::
- \text{out}_i = x_i ^ {\text{exponent}_i}
- When :attr:`exponent` is a tensor, the shapes of :attr:`input`
- and :attr:`exponent` must be :ref:`broadcastable <broadcasting-semantics>`.
- Args:
- input (Tensor): the input tensor.
- exponent (float or tensor): the exponent value
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> a = torch.randn(4)
- >>> a
- tensor([ 0.4331, 1.2475, 0.6834, -0.2791])
- >>> torch.pow(a, 2)
- tensor([ 0.1875, 1.5561, 0.4670, 0.0779])
- >>> exp = torch.arange(1., 5.)
- >>> a = torch.arange(1., 5.)
- >>> a
- tensor([ 1., 2., 3., 4.])
- >>> exp
- tensor([ 1., 2., 3., 4.])
- >>> torch.pow(a, exp)
- tensor([ 1., 4., 27., 256.])
- .. function:: pow(self, exponent, *, out=None) -> Tensor
- :noindex:
- :attr:`self` is a scalar ``float`` value, and :attr:`exponent` is a tensor.
- The returned tensor :attr:`out` is of the same shape as :attr:`exponent`
- The operation applied is:
- .. math::
- \text{out}_i = \text{self} ^ {\text{exponent}_i}
- Args:
- self (float): the scalar base value for the power operation
- exponent (Tensor): the exponent tensor
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> exp = torch.arange(1., 5.)
- >>> base = 2
- >>> torch.pow(base, exp)
- tensor([ 2., 4., 8., 16.])
- """
- def prelu(input: Tensor, weight: Tensor) -> Tensor: ...
- @overload
- def prod(input: Tensor, *, dtype: _dtype | None = None) -> Tensor:
- r"""
- prod(input: Tensor, *, dtype: Optional[_dtype]) -> Tensor
- Returns the product of all elements in the :attr:`input` tensor.
- Args:
- input (Tensor): the input tensor.
- Keyword args:
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor.
- If specified, the input tensor is casted to :attr:`dtype` before the operation
- is performed. This is useful for preventing data type overflows. Default: None.
- Example::
- >>> a = torch.randn(1, 3)
- >>> a
- tensor([[-0.8020, 0.5428, -1.5854]])
- >>> torch.prod(a)
- tensor(0.6902)
- .. function:: prod(input, dim, keepdim=False, *, dtype=None) -> Tensor
- :noindex:
- Returns the product of each row of the :attr:`input` tensor in the given
- dimension :attr:`dim`.
- If :attr:`keepdim` is ``True``, the output tensor is of the same size
- as :attr:`input` except in the dimension :attr:`dim` where it is of size 1.
- Otherwise, :attr:`dim` is squeezed (see :func:`torch.squeeze`), resulting in
- the output tensor having 1 fewer dimension than :attr:`input`.
- Args:
- input (Tensor): the input tensor.
- dim (int, optional): the dimension to reduce.
- If ``None``, all dimensions are reduced.
- keepdim (bool, optional): whether the output tensor has :attr:`dim` retained or not. Default: ``False``.
- Keyword args:
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor.
- If specified, the input tensor is casted to :attr:`dtype` before the operation
- is performed. This is useful for preventing data type overflows. Default: None.
- Example::
- >>> a = torch.randn(4, 2)
- >>> a
- tensor([[ 0.5261, -0.3837],
- [ 1.1857, -0.2498],
- [-1.1646, 0.0705],
- [ 1.1131, -1.0629]])
- >>> torch.prod(a, 1)
- tensor([-0.2018, -0.2962, -0.0821, -1.1831])
- """
- @overload
- def prod(
- input: Tensor,
- dim: _int,
- keepdim: _bool = False,
- *,
- dtype: _dtype | None = None,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- prod(input: Tensor, *, dtype: Optional[_dtype]) -> Tensor
- Returns the product of all elements in the :attr:`input` tensor.
- Args:
- input (Tensor): the input tensor.
- Keyword args:
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor.
- If specified, the input tensor is casted to :attr:`dtype` before the operation
- is performed. This is useful for preventing data type overflows. Default: None.
- Example::
- >>> a = torch.randn(1, 3)
- >>> a
- tensor([[-0.8020, 0.5428, -1.5854]])
- >>> torch.prod(a)
- tensor(0.6902)
- .. function:: prod(input, dim, keepdim=False, *, dtype=None) -> Tensor
- :noindex:
- Returns the product of each row of the :attr:`input` tensor in the given
- dimension :attr:`dim`.
- If :attr:`keepdim` is ``True``, the output tensor is of the same size
- as :attr:`input` except in the dimension :attr:`dim` where it is of size 1.
- Otherwise, :attr:`dim` is squeezed (see :func:`torch.squeeze`), resulting in
- the output tensor having 1 fewer dimension than :attr:`input`.
- Args:
- input (Tensor): the input tensor.
- dim (int, optional): the dimension to reduce.
- If ``None``, all dimensions are reduced.
- keepdim (bool, optional): whether the output tensor has :attr:`dim` retained or not. Default: ``False``.
- Keyword args:
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor.
- If specified, the input tensor is casted to :attr:`dtype` before the operation
- is performed. This is useful for preventing data type overflows. Default: None.
- Example::
- >>> a = torch.randn(4, 2)
- >>> a
- tensor([[ 0.5261, -0.3837],
- [ 1.1857, -0.2498],
- [-1.1646, 0.0705],
- [ 1.1131, -1.0629]])
- >>> torch.prod(a, 1)
- tensor([-0.2018, -0.2962, -0.0821, -1.1831])
- """
- @overload
- def prod(
- input: Tensor,
- dim: str | EllipsisType | None,
- keepdim: _bool = False,
- *,
- dtype: _dtype | None = None,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- prod(input: Tensor, *, dtype: Optional[_dtype]) -> Tensor
- Returns the product of all elements in the :attr:`input` tensor.
- Args:
- input (Tensor): the input tensor.
- Keyword args:
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor.
- If specified, the input tensor is casted to :attr:`dtype` before the operation
- is performed. This is useful for preventing data type overflows. Default: None.
- Example::
- >>> a = torch.randn(1, 3)
- >>> a
- tensor([[-0.8020, 0.5428, -1.5854]])
- >>> torch.prod(a)
- tensor(0.6902)
- .. function:: prod(input, dim, keepdim=False, *, dtype=None) -> Tensor
- :noindex:
- Returns the product of each row of the :attr:`input` tensor in the given
- dimension :attr:`dim`.
- If :attr:`keepdim` is ``True``, the output tensor is of the same size
- as :attr:`input` except in the dimension :attr:`dim` where it is of size 1.
- Otherwise, :attr:`dim` is squeezed (see :func:`torch.squeeze`), resulting in
- the output tensor having 1 fewer dimension than :attr:`input`.
- Args:
- input (Tensor): the input tensor.
- dim (int, optional): the dimension to reduce.
- If ``None``, all dimensions are reduced.
- keepdim (bool, optional): whether the output tensor has :attr:`dim` retained or not. Default: ``False``.
- Keyword args:
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor.
- If specified, the input tensor is casted to :attr:`dtype` before the operation
- is performed. This is useful for preventing data type overflows. Default: None.
- Example::
- >>> a = torch.randn(4, 2)
- >>> a
- tensor([[ 0.5261, -0.3837],
- [ 1.1857, -0.2498],
- [-1.1646, 0.0705],
- [ 1.1131, -1.0629]])
- >>> torch.prod(a, 1)
- tensor([-0.2018, -0.2962, -0.0821, -1.1831])
- """
- def promote_types(type1: _dtype, type2: _dtype) -> _dtype:
- r"""
- promote_types(type1, type2) -> dtype
- Returns the :class:`torch.dtype` with the smallest size and scalar kind that is
- not smaller nor of lower kind than either `type1` or `type2`. See type promotion
- :ref:`documentation <type-promotion-doc>` for more information on the type
- promotion logic.
- Args:
- type1 (:class:`torch.dtype`)
- type2 (:class:`torch.dtype`)
- Example::
- >>> torch.promote_types(torch.int32, torch.float32)
- torch.float32
- >>> torch.promote_types(torch.uint8, torch.long)
- torch.long
- """
- def put(
- input: Tensor,
- index: Tensor,
- source: Tensor,
- accumulate: _bool = False,
- ) -> Tensor: ...
- def q_per_channel_axis(input: Tensor) -> _int: ...
- def q_per_channel_scales(input: Tensor) -> Tensor: ...
- def q_per_channel_zero_points(input: Tensor) -> Tensor: ...
- def q_scale(input: Tensor) -> _float: ...
- def q_zero_point(input: Tensor) -> _int: ...
- def qr(
- input: Tensor,
- some: _bool = True,
- *,
- out: Tensor | tuple[Tensor, ...] | list[Tensor] | None = None,
- ) -> torch.return_types.qr:
- r"""
- qr(input: Tensor, some: bool = True, *, out: Union[Tensor, Tuple[Tensor, ...], List[Tensor], None]) -> (Tensor, Tensor)
- Computes the QR decomposition of a matrix or a batch of matrices :attr:`input`,
- and returns a namedtuple (Q, R) of tensors such that :math:`\text{input} = Q R`
- with :math:`Q` being an orthogonal matrix or batch of orthogonal matrices and
- :math:`R` being an upper triangular matrix or batch of upper triangular matrices.
- If :attr:`some` is ``True``, then this function returns the thin (reduced) QR factorization.
- Otherwise, if :attr:`some` is ``False``, this function returns the complete QR factorization.
- .. warning::
- :func:`torch.qr` is deprecated in favor of :func:`torch.linalg.qr`
- and will be removed in a future PyTorch release. The boolean parameter :attr:`some` has been
- replaced with a string parameter :attr:`mode`.
- ``Q, R = torch.qr(A)`` should be replaced with
- .. code:: python
- Q, R = torch.linalg.qr(A)
- ``Q, R = torch.qr(A, some=False)`` should be replaced with
- .. code:: python
- Q, R = torch.linalg.qr(A, mode="complete")
- .. warning::
- If you plan to backpropagate through QR, note that the current backward implementation
- is only well-defined when the first :math:`\min(input.size(-1), input.size(-2))`
- columns of :attr:`input` are linearly independent.
- This behavior will probably change once QR supports pivoting.
- .. note:: This function uses LAPACK for CPU inputs and MAGMA for CUDA inputs,
- and may produce different (valid) decompositions on different device types
- or different platforms.
- Args:
- input (Tensor): the input tensor of size :math:`(*, m, n)` where `*` is zero or more
- batch dimensions consisting of matrices of dimension :math:`m \times n`.
- some (bool, optional): Set to ``True`` for reduced QR decomposition and ``False`` for
- complete QR decomposition. If `k = min(m, n)` then:
- * ``some=True`` : returns `(Q, R)` with dimensions (m, k), (k, n) (default)
- * ``'some=False'``: returns `(Q, R)` with dimensions (m, m), (m, n)
- Keyword args:
- out (tuple, optional): tuple of `Q` and `R` tensors.
- The dimensions of `Q` and `R` are detailed in the description of :attr:`some` above.
- Example::
- >>> a = torch.tensor([[12., -51, 4], [6, 167, -68], [-4, 24, -41]])
- >>> q, r = torch.qr(a)
- >>> q
- tensor([[-0.8571, 0.3943, 0.3314],
- [-0.4286, -0.9029, -0.0343],
- [ 0.2857, -0.1714, 0.9429]])
- >>> r
- tensor([[ -14.0000, -21.0000, 14.0000],
- [ 0.0000, -175.0000, 70.0000],
- [ 0.0000, 0.0000, -35.0000]])
- >>> torch.mm(q, r).round()
- tensor([[ 12., -51., 4.],
- [ 6., 167., -68.],
- [ -4., 24., -41.]])
- >>> torch.mm(q.t(), q).round()
- tensor([[ 1., 0., 0.],
- [ 0., 1., -0.],
- [ 0., -0., 1.]])
- >>> a = torch.randn(3, 4, 5)
- >>> q, r = torch.qr(a, some=False)
- >>> torch.allclose(torch.matmul(q, r), a)
- True
- >>> torch.allclose(torch.matmul(q.mT, q), torch.eye(5))
- True
- """
- @overload
- def quantile(
- input: Tensor,
- q: Tensor,
- dim: _int | None = None,
- keepdim: _bool = False,
- *,
- interpolation: str = "linear",
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- quantile(input, q, dim=None, keepdim=False, *, interpolation='linear', out=None) -> Tensor
- Computes the q-th quantiles of each row of the :attr:`input` tensor along the dimension :attr:`dim`.
- To compute the quantile, we map q in [0, 1] to the range of indices [0, n] to find the location
- of the quantile in the sorted input. If the quantile lies between two data points ``a < b`` with
- indices ``i`` and ``j`` in the sorted order, result is computed according to the given
- :attr:`interpolation` method as follows:
- - ``linear``: ``a + (b - a) * fraction``, where ``fraction`` is the fractional part of the computed quantile index.
- - ``lower``: ``a``.
- - ``higher``: ``b``.
- - ``nearest``: ``a`` or ``b``, whichever's index is closer to the computed quantile index (rounding down for .5 fractions).
- - ``midpoint``: ``(a + b) / 2``.
- If :attr:`q` is a 1D tensor, the first dimension of the output represents the quantiles and has size
- equal to the size of :attr:`q`, the remaining dimensions are what remains from the reduction.
- .. note::
- By default :attr:`dim` is ``None`` resulting in the :attr:`input` tensor being flattened before computation.
- Args:
- input (Tensor): the input tensor.
- q (float or Tensor): a scalar or 1D tensor of values in the range [0, 1].
- dim (int, optional): the dimension to reduce.
- keepdim (bool, optional): whether the output tensor has :attr:`dim` retained or not. Default: ``False``.
- Keyword arguments:
- interpolation (str, optional): interpolation method to use when the desired quantile lies between two data points.
- Can be ``linear``, ``lower``, ``higher``, ``midpoint`` and ``nearest``.
- Default is ``linear``.
- out (Tensor, optional): the output tensor.
- Example::
- >>> a = torch.randn(2, 3)
- >>> a
- tensor([[ 0.0795, -1.2117, 0.9765],
- [ 1.1707, 0.6706, 0.4884]])
- >>> q = torch.tensor([0.25, 0.5, 0.75])
- >>> torch.quantile(a, q, dim=1, keepdim=True)
- tensor([[[-0.5661],
- [ 0.5795]],
- [[ 0.0795],
- [ 0.6706]],
- [[ 0.5280],
- [ 0.9206]]])
- >>> torch.quantile(a, q, dim=1, keepdim=True).shape
- torch.Size([3, 2, 1])
- >>> a = torch.arange(4.)
- >>> a
- tensor([0., 1., 2., 3.])
- >>> torch.quantile(a, 0.6, interpolation='linear')
- tensor(1.8000)
- >>> torch.quantile(a, 0.6, interpolation='lower')
- tensor(1.)
- >>> torch.quantile(a, 0.6, interpolation='higher')
- tensor(2.)
- >>> torch.quantile(a, 0.6, interpolation='midpoint')
- tensor(1.5000)
- >>> torch.quantile(a, 0.6, interpolation='nearest')
- tensor(2.)
- >>> torch.quantile(a, 0.4, interpolation='nearest')
- tensor(1.)
- """
- @overload
- def quantile(
- input: Tensor,
- q: _float,
- dim: _int | None = None,
- keepdim: _bool = False,
- *,
- interpolation: str = "linear",
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- quantile(input, q, dim=None, keepdim=False, *, interpolation='linear', out=None) -> Tensor
- Computes the q-th quantiles of each row of the :attr:`input` tensor along the dimension :attr:`dim`.
- To compute the quantile, we map q in [0, 1] to the range of indices [0, n] to find the location
- of the quantile in the sorted input. If the quantile lies between two data points ``a < b`` with
- indices ``i`` and ``j`` in the sorted order, result is computed according to the given
- :attr:`interpolation` method as follows:
- - ``linear``: ``a + (b - a) * fraction``, where ``fraction`` is the fractional part of the computed quantile index.
- - ``lower``: ``a``.
- - ``higher``: ``b``.
- - ``nearest``: ``a`` or ``b``, whichever's index is closer to the computed quantile index (rounding down for .5 fractions).
- - ``midpoint``: ``(a + b) / 2``.
- If :attr:`q` is a 1D tensor, the first dimension of the output represents the quantiles and has size
- equal to the size of :attr:`q`, the remaining dimensions are what remains from the reduction.
- .. note::
- By default :attr:`dim` is ``None`` resulting in the :attr:`input` tensor being flattened before computation.
- Args:
- input (Tensor): the input tensor.
- q (float or Tensor): a scalar or 1D tensor of values in the range [0, 1].
- dim (int, optional): the dimension to reduce.
- keepdim (bool, optional): whether the output tensor has :attr:`dim` retained or not. Default: ``False``.
- Keyword arguments:
- interpolation (str, optional): interpolation method to use when the desired quantile lies between two data points.
- Can be ``linear``, ``lower``, ``higher``, ``midpoint`` and ``nearest``.
- Default is ``linear``.
- out (Tensor, optional): the output tensor.
- Example::
- >>> a = torch.randn(2, 3)
- >>> a
- tensor([[ 0.0795, -1.2117, 0.9765],
- [ 1.1707, 0.6706, 0.4884]])
- >>> q = torch.tensor([0.25, 0.5, 0.75])
- >>> torch.quantile(a, q, dim=1, keepdim=True)
- tensor([[[-0.5661],
- [ 0.5795]],
- [[ 0.0795],
- [ 0.6706]],
- [[ 0.5280],
- [ 0.9206]]])
- >>> torch.quantile(a, q, dim=1, keepdim=True).shape
- torch.Size([3, 2, 1])
- >>> a = torch.arange(4.)
- >>> a
- tensor([0., 1., 2., 3.])
- >>> torch.quantile(a, 0.6, interpolation='linear')
- tensor(1.8000)
- >>> torch.quantile(a, 0.6, interpolation='lower')
- tensor(1.)
- >>> torch.quantile(a, 0.6, interpolation='higher')
- tensor(2.)
- >>> torch.quantile(a, 0.6, interpolation='midpoint')
- tensor(1.5000)
- >>> torch.quantile(a, 0.6, interpolation='nearest')
- tensor(2.)
- >>> torch.quantile(a, 0.4, interpolation='nearest')
- tensor(1.)
- """
- def quantize_per_channel(
- input: Tensor,
- scales: Tensor,
- zero_points: Tensor,
- axis: _int,
- dtype: _dtype,
- ) -> Tensor:
- r"""
- quantize_per_channel(input, scales, zero_points, axis, dtype) -> Tensor
- Converts a float tensor to a per-channel quantized tensor with given scales and zero points.
- Arguments:
- input (Tensor): float tensor to quantize
- scales (Tensor): float 1D tensor of scales to use, size should match ``input.size(axis)``
- zero_points (int): integer 1D tensor of offset to use, size should match ``input.size(axis)``
- axis (int): dimension on which apply per-channel quantization
- dtype (:class:`torch.dtype`): the desired data type of returned tensor.
- Has to be one of the quantized dtypes: ``torch.quint8``, ``torch.qint8``, ``torch.qint32``
- Returns:
- Tensor: A newly quantized tensor
- Example::
- >>> x = torch.tensor([[-1.0, 0.0], [1.0, 2.0]])
- >>> torch.quantize_per_channel(x, torch.tensor([0.1, 0.01]), torch.tensor([10, 0]), 0, torch.quint8)
- tensor([[-1., 0.],
- [ 1., 2.]], size=(2, 2), dtype=torch.quint8,
- quantization_scheme=torch.per_channel_affine,
- scale=tensor([0.1000, 0.0100], dtype=torch.float64),
- zero_point=tensor([10, 0]), axis=0)
- >>> torch.quantize_per_channel(x, torch.tensor([0.1, 0.01]), torch.tensor([10, 0]), 0, torch.quint8).int_repr()
- tensor([[ 0, 10],
- [100, 200]], dtype=torch.uint8)
- """
- @overload
- def quantize_per_tensor(
- input: Tensor,
- scale: Tensor,
- zero_point: Tensor,
- dtype: _dtype,
- ) -> Tensor:
- r"""
- quantize_per_tensor(input, scale, zero_point, dtype) -> Tensor
- Converts a float tensor to a quantized tensor with given scale and zero point.
- Arguments:
- input (Tensor): float tensor or list of tensors to quantize
- scale (float or Tensor): scale to apply in quantization formula
- zero_point (int or Tensor): offset in integer value that maps to float zero
- dtype (:class:`torch.dtype`): the desired data type of returned tensor.
- Has to be one of the quantized dtypes: ``torch.quint8``, ``torch.qint8``, ``torch.qint32``
- Returns:
- Tensor: A newly quantized tensor or list of quantized tensors.
- Example::
- >>> torch.quantize_per_tensor(torch.tensor([-1.0, 0.0, 1.0, 2.0]), 0.1, 10, torch.quint8)
- tensor([-1., 0., 1., 2.], size=(4,), dtype=torch.quint8,
- quantization_scheme=torch.per_tensor_affine, scale=0.1, zero_point=10)
- >>> torch.quantize_per_tensor(torch.tensor([-1.0, 0.0, 1.0, 2.0]), 0.1, 10, torch.quint8).int_repr()
- tensor([ 0, 10, 20, 30], dtype=torch.uint8)
- >>> torch.quantize_per_tensor([torch.tensor([-1.0, 0.0]), torch.tensor([-2.0, 2.0])],
- >>> torch.tensor([0.1, 0.2]), torch.tensor([10, 20]), torch.quint8)
- (tensor([-1., 0.], size=(2,), dtype=torch.quint8,
- quantization_scheme=torch.per_tensor_affine, scale=0.1, zero_point=10),
- tensor([-2., 2.], size=(2,), dtype=torch.quint8,
- quantization_scheme=torch.per_tensor_affine, scale=0.2, zero_point=20))
- >>> torch.quantize_per_tensor(torch.tensor([-1.0, 0.0, 1.0, 2.0]), torch.tensor(0.1), torch.tensor(10), torch.quint8)
- tensor([-1., 0., 1., 2.], size=(4,), dtype=torch.quint8,
- quantization_scheme=torch.per_tensor_affine, scale=0.10, zero_point=10)
- """
- @overload
- def quantize_per_tensor(
- input: Tensor,
- scale: _float,
- zero_point: _int,
- dtype: _dtype,
- ) -> Tensor:
- r"""
- quantize_per_tensor(input, scale, zero_point, dtype) -> Tensor
- Converts a float tensor to a quantized tensor with given scale and zero point.
- Arguments:
- input (Tensor): float tensor or list of tensors to quantize
- scale (float or Tensor): scale to apply in quantization formula
- zero_point (int or Tensor): offset in integer value that maps to float zero
- dtype (:class:`torch.dtype`): the desired data type of returned tensor.
- Has to be one of the quantized dtypes: ``torch.quint8``, ``torch.qint8``, ``torch.qint32``
- Returns:
- Tensor: A newly quantized tensor or list of quantized tensors.
- Example::
- >>> torch.quantize_per_tensor(torch.tensor([-1.0, 0.0, 1.0, 2.0]), 0.1, 10, torch.quint8)
- tensor([-1., 0., 1., 2.], size=(4,), dtype=torch.quint8,
- quantization_scheme=torch.per_tensor_affine, scale=0.1, zero_point=10)
- >>> torch.quantize_per_tensor(torch.tensor([-1.0, 0.0, 1.0, 2.0]), 0.1, 10, torch.quint8).int_repr()
- tensor([ 0, 10, 20, 30], dtype=torch.uint8)
- >>> torch.quantize_per_tensor([torch.tensor([-1.0, 0.0]), torch.tensor([-2.0, 2.0])],
- >>> torch.tensor([0.1, 0.2]), torch.tensor([10, 20]), torch.quint8)
- (tensor([-1., 0.], size=(2,), dtype=torch.quint8,
- quantization_scheme=torch.per_tensor_affine, scale=0.1, zero_point=10),
- tensor([-2., 2.], size=(2,), dtype=torch.quint8,
- quantization_scheme=torch.per_tensor_affine, scale=0.2, zero_point=20))
- >>> torch.quantize_per_tensor(torch.tensor([-1.0, 0.0, 1.0, 2.0]), torch.tensor(0.1), torch.tensor(10), torch.quint8)
- tensor([-1., 0., 1., 2.], size=(4,), dtype=torch.quint8,
- quantization_scheme=torch.per_tensor_affine, scale=0.10, zero_point=10)
- """
- @overload
- def quantize_per_tensor(
- tensors: tuple[Tensor, ...] | list[Tensor] | None,
- scales: Tensor,
- zero_points: Tensor,
- dtype: _dtype,
- ) -> tuple[Tensor, ...]:
- r"""
- quantize_per_tensor(input, scale, zero_point, dtype) -> Tensor
- Converts a float tensor to a quantized tensor with given scale and zero point.
- Arguments:
- input (Tensor): float tensor or list of tensors to quantize
- scale (float or Tensor): scale to apply in quantization formula
- zero_point (int or Tensor): offset in integer value that maps to float zero
- dtype (:class:`torch.dtype`): the desired data type of returned tensor.
- Has to be one of the quantized dtypes: ``torch.quint8``, ``torch.qint8``, ``torch.qint32``
- Returns:
- Tensor: A newly quantized tensor or list of quantized tensors.
- Example::
- >>> torch.quantize_per_tensor(torch.tensor([-1.0, 0.0, 1.0, 2.0]), 0.1, 10, torch.quint8)
- tensor([-1., 0., 1., 2.], size=(4,), dtype=torch.quint8,
- quantization_scheme=torch.per_tensor_affine, scale=0.1, zero_point=10)
- >>> torch.quantize_per_tensor(torch.tensor([-1.0, 0.0, 1.0, 2.0]), 0.1, 10, torch.quint8).int_repr()
- tensor([ 0, 10, 20, 30], dtype=torch.uint8)
- >>> torch.quantize_per_tensor([torch.tensor([-1.0, 0.0]), torch.tensor([-2.0, 2.0])],
- >>> torch.tensor([0.1, 0.2]), torch.tensor([10, 20]), torch.quint8)
- (tensor([-1., 0.], size=(2,), dtype=torch.quint8,
- quantization_scheme=torch.per_tensor_affine, scale=0.1, zero_point=10),
- tensor([-2., 2.], size=(2,), dtype=torch.quint8,
- quantization_scheme=torch.per_tensor_affine, scale=0.2, zero_point=20))
- >>> torch.quantize_per_tensor(torch.tensor([-1.0, 0.0, 1.0, 2.0]), torch.tensor(0.1), torch.tensor(10), torch.quint8)
- tensor([-1., 0., 1., 2.], size=(4,), dtype=torch.quint8,
- quantization_scheme=torch.per_tensor_affine, scale=0.10, zero_point=10)
- """
- def quantize_per_tensor_dynamic(
- input: Tensor,
- dtype: _dtype,
- reduce_range: _bool,
- ) -> Tensor:
- r"""
- quantize_per_tensor_dynamic(input, dtype, reduce_range) -> Tensor
- Converts a float tensor to a quantized tensor with scale and zero_point calculated
- dynamically based on the input.
- Arguments:
- input (Tensor): float tensor or list of tensors to quantize
- dtype (:class:`torch.dtype`): the desired data type of returned tensor.
- Has to be one of the quantized dtypes: ``torch.quint8``, ``torch.qint8``
- reduce_range (bool): a flag to indicate whether to reduce the range of quantized
- data by 1 bit, it's required to avoid instruction overflow for some hardwares
- Returns:
- Tensor: A newly (dynamically) quantized tensor
- Example::
- >>> t = torch.quantize_per_tensor_dynamic(torch.tensor([-1.0, 0.0, 1.0, 2.0]), torch.quint8, False)
- >>> print(t)
- tensor([-1., 0., 1., 2.], size=(4,), dtype=torch.quint8,
- quantization_scheme=torch.per_tensor_affine, scale=0.011764705882352941,
- zero_point=85)
- >>> t.int_repr()
- tensor([ 0, 85, 170, 255], dtype=torch.uint8)
- """
- def quantized_batch_norm(
- input: Tensor,
- weight: Tensor | None,
- bias: Tensor | None,
- mean: Tensor,
- var: Tensor,
- eps: _float,
- output_scale: _float,
- output_zero_point: _int,
- ) -> Tensor:
- r"""
- quantized_batch_norm(input, weight=None, bias=None, mean, var, eps, output_scale, output_zero_point) -> Tensor
- Applies batch normalization on a 4D (NCHW) quantized tensor.
- .. math::
- y = \frac{x - \mathrm{E}[x]}{\sqrt{\mathrm{Var}[x] + \epsilon}} * \gamma + \beta
- Arguments:
- input (Tensor): quantized tensor
- weight (Tensor): float tensor that corresponds to the gamma, size C
- bias (Tensor): float tensor that corresponds to the beta, size C
- mean (Tensor): float mean value in batch normalization, size C
- var (Tensor): float tensor for variance, size C
- eps (float): a value added to the denominator for numerical stability.
- output_scale (float): output quantized tensor scale
- output_zero_point (int): output quantized tensor zero_point
- Returns:
- Tensor: A quantized tensor with batch normalization applied.
- Example::
- >>> qx = torch.quantize_per_tensor(torch.rand(2, 2, 2, 2), 1.5, 3, torch.quint8)
- >>> torch.quantized_batch_norm(qx, torch.ones(2), torch.zeros(2), torch.rand(2), torch.rand(2), 0.00001, 0.2, 2)
- tensor([[[[-0.2000, -0.2000],
- [ 1.6000, -0.2000]],
- [[-0.4000, -0.4000],
- [-0.4000, 0.6000]]],
- [[[-0.2000, -0.2000],
- [-0.2000, -0.2000]],
- [[ 0.6000, -0.4000],
- [ 0.6000, -0.4000]]]], size=(2, 2, 2, 2), dtype=torch.quint8,
- quantization_scheme=torch.per_tensor_affine, scale=0.2, zero_point=2)
- """
- def quantized_gru_cell(
- input: Tensor,
- hx: Tensor,
- w_ih: Tensor,
- w_hh: Tensor,
- b_ih: Tensor,
- b_hh: Tensor,
- packed_ih: Tensor,
- packed_hh: Tensor,
- col_offsets_ih: Tensor,
- col_offsets_hh: Tensor,
- scale_ih: Number | _complex,
- scale_hh: Number | _complex,
- zero_point_ih: Number | _complex,
- zero_point_hh: Number | _complex,
- ) -> Tensor: ...
- def quantized_lstm_cell(
- input: Tensor,
- hx: tuple[Tensor, ...] | list[Tensor] | None,
- w_ih: Tensor,
- w_hh: Tensor,
- b_ih: Tensor,
- b_hh: Tensor,
- packed_ih: Tensor,
- packed_hh: Tensor,
- col_offsets_ih: Tensor,
- col_offsets_hh: Tensor,
- scale_ih: Number | _complex,
- scale_hh: Number | _complex,
- zero_point_ih: Number | _complex,
- zero_point_hh: Number | _complex,
- ) -> tuple[Tensor, Tensor]: ...
- def quantized_max_pool1d(
- input: Tensor,
- kernel_size: _int | _size,
- stride: _int | _size = (),
- padding: _int | _size = 0,
- dilation: _int | _size = 1,
- ceil_mode: _bool = False,
- ) -> Tensor:
- r"""
- quantized_max_pool1d(input, kernel_size, stride=[], padding=0, dilation=1, ceil_mode=False) -> Tensor
- Applies a 1D max pooling over an input quantized tensor composed of several input planes.
- Arguments:
- input (Tensor): quantized tensor
- kernel_size (list of int): the size of the sliding window
- stride (``list of int``, optional): the stride of the sliding window
- padding (``list of int``, optional): padding to be added on both sides, must be >= 0 and <= kernel_size / 2
- dilation (``list of int``, optional): The stride between elements within a sliding window, must be > 0. Default 1
- ceil_mode (bool, optional): If True, will use ceil instead of floor to compute the output shape.
- Defaults to False.
- Returns:
- Tensor: A quantized tensor with max_pool1d applied.
- Example::
- >>> qx = torch.quantize_per_tensor(torch.rand(2, 2), 1.5, 3, torch.quint8)
- >>> torch.quantized_max_pool1d(qx, [2])
- tensor([[0.0000],
- [1.5000]], size=(2, 1), dtype=torch.quint8,
- quantization_scheme=torch.per_tensor_affine, scale=1.5, zero_point=3)
- """
- def quantized_max_pool2d(
- input: Tensor,
- kernel_size: _int | _size,
- stride: _int | _size = (),
- padding: _int | _size = 0,
- dilation: _int | _size = 1,
- ceil_mode: _bool = False,
- ) -> Tensor:
- r"""
- quantized_max_pool2d(input, kernel_size, stride=[], padding=0, dilation=1, ceil_mode=False) -> Tensor
- Applies a 2D max pooling over an input quantized tensor composed of several input planes.
- Arguments:
- input (Tensor): quantized tensor
- kernel_size (``list of int``): the size of the sliding window
- stride (``list of int``, optional): the stride of the sliding window
- padding (``list of int``, optional): padding to be added on both sides, must be >= 0 and <= kernel_size / 2
- dilation (``list of int``, optional): The stride between elements within a sliding window, must be > 0. Default 1
- ceil_mode (bool, optional): If True, will use ceil instead of floor to compute the output shape.
- Defaults to False.
- Returns:
- Tensor: A quantized tensor with max_pool2d applied.
- Example::
- >>> qx = torch.quantize_per_tensor(torch.rand(2, 2, 2, 2), 1.5, 3, torch.quint8)
- >>> torch.quantized_max_pool2d(qx, [2,2])
- tensor([[[[1.5000]],
- [[1.5000]]],
- [[[0.0000]],
- [[0.0000]]]], size=(2, 2, 1, 1), dtype=torch.quint8,
- quantization_scheme=torch.per_tensor_affine, scale=1.5, zero_point=3)
- """
- def quantized_max_pool3d(
- input: Tensor,
- kernel_size: _int | _size,
- stride: _int | _size = (),
- padding: _int | _size = 0,
- dilation: _int | _size = 1,
- ceil_mode: _bool = False,
- ) -> Tensor: ...
- def quantized_rnn_relu_cell(
- input: Tensor,
- hx: Tensor,
- w_ih: Tensor,
- w_hh: Tensor,
- b_ih: Tensor,
- b_hh: Tensor,
- packed_ih: Tensor,
- packed_hh: Tensor,
- col_offsets_ih: Tensor,
- col_offsets_hh: Tensor,
- scale_ih: Number | _complex,
- scale_hh: Number | _complex,
- zero_point_ih: Number | _complex,
- zero_point_hh: Number | _complex,
- ) -> Tensor: ...
- def quantized_rnn_tanh_cell(
- input: Tensor,
- hx: Tensor,
- w_ih: Tensor,
- w_hh: Tensor,
- b_ih: Tensor,
- b_hh: Tensor,
- packed_ih: Tensor,
- packed_hh: Tensor,
- col_offsets_ih: Tensor,
- col_offsets_hh: Tensor,
- scale_ih: Number | _complex,
- scale_hh: Number | _complex,
- zero_point_ih: Number | _complex,
- zero_point_hh: Number | _complex,
- ) -> Tensor: ...
- def rad2deg(input: Tensor, *, out: Tensor | None = None) -> Tensor:
- r"""
- rad2deg(input: Tensor, *, out: Optional[Tensor]) -> Tensor
- Returns a new tensor with each of the elements of :attr:`input`
- converted from angles in radians to degrees.
- Args:
- input (Tensor): the input tensor.
- Keyword arguments:
- out (Tensor, optional): the output tensor.
- Example::
- >>> a = torch.tensor([[3.142, -3.142], [6.283, -6.283], [1.570, -1.570]])
- >>> torch.rad2deg(a)
- tensor([[ 180.0233, -180.0233],
- [ 359.9894, -359.9894],
- [ 89.9544, -89.9544]])
- """
- def rad2deg_(input: Tensor) -> Tensor: ...
- @overload
- def rand(
- size: Sequence[_int | SymInt],
- *,
- generator: Generator | None,
- names: Sequence[str | EllipsisType | None] | None,
- dtype: _dtype | None = None,
- layout: _layout | None = None,
- device: DeviceLikeType | None = None,
- pin_memory: _bool | None = False,
- requires_grad: _bool | None = False,
- ) -> Tensor:
- r"""
- rand(*size, *, generator=None, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False, pin_memory=False) -> Tensor
- Returns a tensor filled with random numbers from a uniform distribution
- on the interval :math:`[0, 1)`
- The shape of the tensor is defined by the variable argument :attr:`size`.
- Args:
- size (int...): a sequence of integers defining the shape of the output tensor.
- Can be a variable number of arguments or a collection like a list or tuple.
- Keyword args:
- generator (:class:`torch.Generator`, optional): a pseudorandom number generator for sampling
- out (Tensor, optional): the output tensor.
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor.
- Default: if ``None``, uses a global default (see :func:`torch.set_default_dtype`).
- layout (:class:`torch.layout`, optional): the desired layout of returned Tensor.
- Default: ``torch.strided``.
- device (:class:`torch.device`, optional): the desired device of returned tensor.
- Default: if ``None``, uses the current device for the default tensor type
- (see :func:`torch.set_default_device`). :attr:`device` will be the CPU
- for CPU tensor types and the current CUDA device for CUDA tensor types.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- pin_memory (bool, optional): If set, returned tensor would be allocated in
- the pinned memory. Works only for CPU tensors. Default: ``False``.
- Example::
- >>> torch.rand(4)
- tensor([ 0.5204, 0.2503, 0.3525, 0.5673])
- >>> torch.rand(2, 3)
- tensor([[ 0.8237, 0.5781, 0.6879],
- [ 0.3816, 0.7249, 0.0998]])
- """
- @overload
- def rand(
- *size: _int | SymInt,
- generator: Generator | None,
- names: Sequence[str | EllipsisType | None] | None,
- dtype: _dtype | None = None,
- layout: _layout | None = None,
- device: DeviceLikeType | None = None,
- pin_memory: _bool | None = False,
- requires_grad: _bool | None = False,
- ) -> Tensor:
- r"""
- rand(*size, *, generator=None, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False, pin_memory=False) -> Tensor
- Returns a tensor filled with random numbers from a uniform distribution
- on the interval :math:`[0, 1)`
- The shape of the tensor is defined by the variable argument :attr:`size`.
- Args:
- size (int...): a sequence of integers defining the shape of the output tensor.
- Can be a variable number of arguments or a collection like a list or tuple.
- Keyword args:
- generator (:class:`torch.Generator`, optional): a pseudorandom number generator for sampling
- out (Tensor, optional): the output tensor.
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor.
- Default: if ``None``, uses a global default (see :func:`torch.set_default_dtype`).
- layout (:class:`torch.layout`, optional): the desired layout of returned Tensor.
- Default: ``torch.strided``.
- device (:class:`torch.device`, optional): the desired device of returned tensor.
- Default: if ``None``, uses the current device for the default tensor type
- (see :func:`torch.set_default_device`). :attr:`device` will be the CPU
- for CPU tensor types and the current CUDA device for CUDA tensor types.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- pin_memory (bool, optional): If set, returned tensor would be allocated in
- the pinned memory. Works only for CPU tensors. Default: ``False``.
- Example::
- >>> torch.rand(4)
- tensor([ 0.5204, 0.2503, 0.3525, 0.5673])
- >>> torch.rand(2, 3)
- tensor([[ 0.8237, 0.5781, 0.6879],
- [ 0.3816, 0.7249, 0.0998]])
- """
- @overload
- def rand(
- size: Sequence[_int | SymInt],
- *,
- generator: Generator | None,
- out: Tensor | None = None,
- dtype: _dtype | None = None,
- layout: _layout | None = None,
- device: DeviceLikeType | None = None,
- pin_memory: _bool | None = False,
- requires_grad: _bool | None = False,
- ) -> Tensor:
- r"""
- rand(*size, *, generator=None, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False, pin_memory=False) -> Tensor
- Returns a tensor filled with random numbers from a uniform distribution
- on the interval :math:`[0, 1)`
- The shape of the tensor is defined by the variable argument :attr:`size`.
- Args:
- size (int...): a sequence of integers defining the shape of the output tensor.
- Can be a variable number of arguments or a collection like a list or tuple.
- Keyword args:
- generator (:class:`torch.Generator`, optional): a pseudorandom number generator for sampling
- out (Tensor, optional): the output tensor.
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor.
- Default: if ``None``, uses a global default (see :func:`torch.set_default_dtype`).
- layout (:class:`torch.layout`, optional): the desired layout of returned Tensor.
- Default: ``torch.strided``.
- device (:class:`torch.device`, optional): the desired device of returned tensor.
- Default: if ``None``, uses the current device for the default tensor type
- (see :func:`torch.set_default_device`). :attr:`device` will be the CPU
- for CPU tensor types and the current CUDA device for CUDA tensor types.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- pin_memory (bool, optional): If set, returned tensor would be allocated in
- the pinned memory. Works only for CPU tensors. Default: ``False``.
- Example::
- >>> torch.rand(4)
- tensor([ 0.5204, 0.2503, 0.3525, 0.5673])
- >>> torch.rand(2, 3)
- tensor([[ 0.8237, 0.5781, 0.6879],
- [ 0.3816, 0.7249, 0.0998]])
- """
- @overload
- def rand(
- *size: _int | SymInt,
- generator: Generator | None,
- out: Tensor | None = None,
- dtype: _dtype | None = None,
- layout: _layout | None = None,
- device: DeviceLikeType | None = None,
- pin_memory: _bool | None = False,
- requires_grad: _bool | None = False,
- ) -> Tensor:
- r"""
- rand(*size, *, generator=None, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False, pin_memory=False) -> Tensor
- Returns a tensor filled with random numbers from a uniform distribution
- on the interval :math:`[0, 1)`
- The shape of the tensor is defined by the variable argument :attr:`size`.
- Args:
- size (int...): a sequence of integers defining the shape of the output tensor.
- Can be a variable number of arguments or a collection like a list or tuple.
- Keyword args:
- generator (:class:`torch.Generator`, optional): a pseudorandom number generator for sampling
- out (Tensor, optional): the output tensor.
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor.
- Default: if ``None``, uses a global default (see :func:`torch.set_default_dtype`).
- layout (:class:`torch.layout`, optional): the desired layout of returned Tensor.
- Default: ``torch.strided``.
- device (:class:`torch.device`, optional): the desired device of returned tensor.
- Default: if ``None``, uses the current device for the default tensor type
- (see :func:`torch.set_default_device`). :attr:`device` will be the CPU
- for CPU tensor types and the current CUDA device for CUDA tensor types.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- pin_memory (bool, optional): If set, returned tensor would be allocated in
- the pinned memory. Works only for CPU tensors. Default: ``False``.
- Example::
- >>> torch.rand(4)
- tensor([ 0.5204, 0.2503, 0.3525, 0.5673])
- >>> torch.rand(2, 3)
- tensor([[ 0.8237, 0.5781, 0.6879],
- [ 0.3816, 0.7249, 0.0998]])
- """
- @overload
- def rand(
- size: Sequence[_int | SymInt],
- *,
- out: Tensor | None = None,
- dtype: _dtype | None = None,
- layout: _layout | None = None,
- device: DeviceLikeType | None = None,
- pin_memory: _bool | None = False,
- requires_grad: _bool | None = False,
- ) -> Tensor:
- r"""
- rand(*size, *, generator=None, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False, pin_memory=False) -> Tensor
- Returns a tensor filled with random numbers from a uniform distribution
- on the interval :math:`[0, 1)`
- The shape of the tensor is defined by the variable argument :attr:`size`.
- Args:
- size (int...): a sequence of integers defining the shape of the output tensor.
- Can be a variable number of arguments or a collection like a list or tuple.
- Keyword args:
- generator (:class:`torch.Generator`, optional): a pseudorandom number generator for sampling
- out (Tensor, optional): the output tensor.
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor.
- Default: if ``None``, uses a global default (see :func:`torch.set_default_dtype`).
- layout (:class:`torch.layout`, optional): the desired layout of returned Tensor.
- Default: ``torch.strided``.
- device (:class:`torch.device`, optional): the desired device of returned tensor.
- Default: if ``None``, uses the current device for the default tensor type
- (see :func:`torch.set_default_device`). :attr:`device` will be the CPU
- for CPU tensor types and the current CUDA device for CUDA tensor types.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- pin_memory (bool, optional): If set, returned tensor would be allocated in
- the pinned memory. Works only for CPU tensors. Default: ``False``.
- Example::
- >>> torch.rand(4)
- tensor([ 0.5204, 0.2503, 0.3525, 0.5673])
- >>> torch.rand(2, 3)
- tensor([[ 0.8237, 0.5781, 0.6879],
- [ 0.3816, 0.7249, 0.0998]])
- """
- @overload
- def rand(
- *size: _int | SymInt,
- out: Tensor | None = None,
- dtype: _dtype | None = None,
- layout: _layout | None = None,
- device: DeviceLikeType | None = None,
- pin_memory: _bool | None = False,
- requires_grad: _bool | None = False,
- ) -> Tensor:
- r"""
- rand(*size, *, generator=None, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False, pin_memory=False) -> Tensor
- Returns a tensor filled with random numbers from a uniform distribution
- on the interval :math:`[0, 1)`
- The shape of the tensor is defined by the variable argument :attr:`size`.
- Args:
- size (int...): a sequence of integers defining the shape of the output tensor.
- Can be a variable number of arguments or a collection like a list or tuple.
- Keyword args:
- generator (:class:`torch.Generator`, optional): a pseudorandom number generator for sampling
- out (Tensor, optional): the output tensor.
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor.
- Default: if ``None``, uses a global default (see :func:`torch.set_default_dtype`).
- layout (:class:`torch.layout`, optional): the desired layout of returned Tensor.
- Default: ``torch.strided``.
- device (:class:`torch.device`, optional): the desired device of returned tensor.
- Default: if ``None``, uses the current device for the default tensor type
- (see :func:`torch.set_default_device`). :attr:`device` will be the CPU
- for CPU tensor types and the current CUDA device for CUDA tensor types.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- pin_memory (bool, optional): If set, returned tensor would be allocated in
- the pinned memory. Works only for CPU tensors. Default: ``False``.
- Example::
- >>> torch.rand(4)
- tensor([ 0.5204, 0.2503, 0.3525, 0.5673])
- >>> torch.rand(2, 3)
- tensor([[ 0.8237, 0.5781, 0.6879],
- [ 0.3816, 0.7249, 0.0998]])
- """
- @overload
- def rand(
- size: Sequence[_int | SymInt],
- *,
- names: Sequence[str | EllipsisType | None] | None,
- dtype: _dtype | None = None,
- layout: _layout | None = None,
- device: DeviceLikeType | None = None,
- pin_memory: _bool | None = False,
- requires_grad: _bool | None = False,
- ) -> Tensor:
- r"""
- rand(*size, *, generator=None, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False, pin_memory=False) -> Tensor
- Returns a tensor filled with random numbers from a uniform distribution
- on the interval :math:`[0, 1)`
- The shape of the tensor is defined by the variable argument :attr:`size`.
- Args:
- size (int...): a sequence of integers defining the shape of the output tensor.
- Can be a variable number of arguments or a collection like a list or tuple.
- Keyword args:
- generator (:class:`torch.Generator`, optional): a pseudorandom number generator for sampling
- out (Tensor, optional): the output tensor.
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor.
- Default: if ``None``, uses a global default (see :func:`torch.set_default_dtype`).
- layout (:class:`torch.layout`, optional): the desired layout of returned Tensor.
- Default: ``torch.strided``.
- device (:class:`torch.device`, optional): the desired device of returned tensor.
- Default: if ``None``, uses the current device for the default tensor type
- (see :func:`torch.set_default_device`). :attr:`device` will be the CPU
- for CPU tensor types and the current CUDA device for CUDA tensor types.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- pin_memory (bool, optional): If set, returned tensor would be allocated in
- the pinned memory. Works only for CPU tensors. Default: ``False``.
- Example::
- >>> torch.rand(4)
- tensor([ 0.5204, 0.2503, 0.3525, 0.5673])
- >>> torch.rand(2, 3)
- tensor([[ 0.8237, 0.5781, 0.6879],
- [ 0.3816, 0.7249, 0.0998]])
- """
- @overload
- def rand(
- *size: _int | SymInt,
- names: Sequence[str | EllipsisType | None] | None,
- dtype: _dtype | None = None,
- layout: _layout | None = None,
- device: DeviceLikeType | None = None,
- pin_memory: _bool | None = False,
- requires_grad: _bool | None = False,
- ) -> Tensor:
- r"""
- rand(*size, *, generator=None, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False, pin_memory=False) -> Tensor
- Returns a tensor filled with random numbers from a uniform distribution
- on the interval :math:`[0, 1)`
- The shape of the tensor is defined by the variable argument :attr:`size`.
- Args:
- size (int...): a sequence of integers defining the shape of the output tensor.
- Can be a variable number of arguments or a collection like a list or tuple.
- Keyword args:
- generator (:class:`torch.Generator`, optional): a pseudorandom number generator for sampling
- out (Tensor, optional): the output tensor.
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor.
- Default: if ``None``, uses a global default (see :func:`torch.set_default_dtype`).
- layout (:class:`torch.layout`, optional): the desired layout of returned Tensor.
- Default: ``torch.strided``.
- device (:class:`torch.device`, optional): the desired device of returned tensor.
- Default: if ``None``, uses the current device for the default tensor type
- (see :func:`torch.set_default_device`). :attr:`device` will be the CPU
- for CPU tensor types and the current CUDA device for CUDA tensor types.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- pin_memory (bool, optional): If set, returned tensor would be allocated in
- the pinned memory. Works only for CPU tensors. Default: ``False``.
- Example::
- >>> torch.rand(4)
- tensor([ 0.5204, 0.2503, 0.3525, 0.5673])
- >>> torch.rand(2, 3)
- tensor([[ 0.8237, 0.5781, 0.6879],
- [ 0.3816, 0.7249, 0.0998]])
- """
- def rand_like(
- input: Tensor,
- *,
- memory_format: memory_format | None = None,
- dtype: _dtype | None = None,
- layout: _layout | None = None,
- device: DeviceLikeType | None = None,
- pin_memory: _bool | None = False,
- requires_grad: _bool | None = False,
- ) -> Tensor:
- r"""
- rand_like(input, *, dtype=None, layout=None, device=None, requires_grad=False, memory_format=torch.preserve_format) -> Tensor
- Returns a tensor with the same size as :attr:`input` that is filled with
- random numbers from a uniform distribution on the interval :math:`[0, 1)`.
- ``torch.rand_like(input)`` is equivalent to
- ``torch.rand(input.size(), dtype=input.dtype, layout=input.layout, device=input.device)``.
- Args:
- input (Tensor): the size of :attr:`input` will determine size of the output tensor.
- Keyword args:
- dtype (:class:`torch.dtype`, optional): the desired data type of returned Tensor.
- Default: if ``None``, defaults to the dtype of :attr:`input`.
- layout (:class:`torch.layout`, optional): the desired layout of returned tensor.
- Default: if ``None``, defaults to the layout of :attr:`input`.
- device (:class:`torch.device`, optional): the desired device of returned tensor.
- Default: if ``None``, defaults to the device of :attr:`input`.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- memory_format (:class:`torch.memory_format`, optional): the desired memory format of
- returned Tensor. Default: ``torch.preserve_format``.
- """
- @overload
- def randint(
- low: _int,
- high: _int,
- size: _size,
- *,
- generator: Generator | None = None,
- dtype: _dtype | None = None,
- device: DeviceLikeType | None = None,
- requires_grad: _bool = False,
- pin_memory: _bool = False,
- ) -> Tensor:
- r"""
- randint(low=0, high, size, \*, generator=None, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False) -> Tensor
- Returns a tensor filled with random integers generated uniformly
- between :attr:`low` (inclusive) and :attr:`high` (exclusive).
- The shape of the tensor is defined by the variable argument :attr:`size`.
- .. note::
- With the global dtype default (``torch.float32``), this function returns
- a tensor with dtype ``torch.int64``.
- Args:
- low (int, optional): Lowest integer to be drawn from the distribution. Default: 0.
- high (int): One above the highest integer to be drawn from the distribution.
- size (tuple): a tuple defining the shape of the output tensor.
- Keyword args:
- generator (:class:`torch.Generator`, optional): a pseudorandom number generator for sampling
- out (Tensor, optional): the output tensor.
- dtype (torch.dtype, optional): the desired data type of returned tensor. Default: if ``None``,
- this function returns a tensor with dtype ``torch.int64``.
- layout (:class:`torch.layout`, optional): the desired layout of returned Tensor.
- Default: ``torch.strided``.
- device (:class:`torch.device`, optional): the desired device of returned tensor.
- Default: if ``None``, uses the current device for the default tensor type
- (see :func:`torch.set_default_device`). :attr:`device` will be the CPU
- for CPU tensor types and the current CUDA device for CUDA tensor types.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- Example::
- >>> torch.randint(3, 5, (3,))
- tensor([4, 3, 4])
- >>> torch.randint(10, (2, 2))
- tensor([[0, 2],
- [5, 5]])
- >>> torch.randint(3, 10, (2, 2))
- tensor([[4, 5],
- [6, 7]])
- """
- @overload
- def randint(
- high: _int,
- size: _size,
- *,
- generator: Generator | None = None,
- dtype: _dtype | None = None,
- device: DeviceLikeType | None = None,
- requires_grad: _bool = False,
- pin_memory: _bool = False,
- ) -> Tensor:
- r"""
- randint(low=0, high, size, \*, generator=None, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False) -> Tensor
- Returns a tensor filled with random integers generated uniformly
- between :attr:`low` (inclusive) and :attr:`high` (exclusive).
- The shape of the tensor is defined by the variable argument :attr:`size`.
- .. note::
- With the global dtype default (``torch.float32``), this function returns
- a tensor with dtype ``torch.int64``.
- Args:
- low (int, optional): Lowest integer to be drawn from the distribution. Default: 0.
- high (int): One above the highest integer to be drawn from the distribution.
- size (tuple): a tuple defining the shape of the output tensor.
- Keyword args:
- generator (:class:`torch.Generator`, optional): a pseudorandom number generator for sampling
- out (Tensor, optional): the output tensor.
- dtype (torch.dtype, optional): the desired data type of returned tensor. Default: if ``None``,
- this function returns a tensor with dtype ``torch.int64``.
- layout (:class:`torch.layout`, optional): the desired layout of returned Tensor.
- Default: ``torch.strided``.
- device (:class:`torch.device`, optional): the desired device of returned tensor.
- Default: if ``None``, uses the current device for the default tensor type
- (see :func:`torch.set_default_device`). :attr:`device` will be the CPU
- for CPU tensor types and the current CUDA device for CUDA tensor types.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- Example::
- >>> torch.randint(3, 5, (3,))
- tensor([4, 3, 4])
- >>> torch.randint(10, (2, 2))
- tensor([[0, 2],
- [5, 5]])
- >>> torch.randint(3, 10, (2, 2))
- tensor([[4, 5],
- [6, 7]])
- """
- @overload
- def randint(
- high: _int | SymInt,
- size: Sequence[_int | SymInt],
- *,
- generator: Generator | None,
- out: Tensor | None = None,
- dtype: _dtype | None = None,
- layout: _layout | None = None,
- device: DeviceLikeType | None = None,
- pin_memory: _bool | None = False,
- requires_grad: _bool | None = False,
- ) -> Tensor:
- r"""
- randint(low=0, high, size, \*, generator=None, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False) -> Tensor
- Returns a tensor filled with random integers generated uniformly
- between :attr:`low` (inclusive) and :attr:`high` (exclusive).
- The shape of the tensor is defined by the variable argument :attr:`size`.
- .. note::
- With the global dtype default (``torch.float32``), this function returns
- a tensor with dtype ``torch.int64``.
- Args:
- low (int, optional): Lowest integer to be drawn from the distribution. Default: 0.
- high (int): One above the highest integer to be drawn from the distribution.
- size (tuple): a tuple defining the shape of the output tensor.
- Keyword args:
- generator (:class:`torch.Generator`, optional): a pseudorandom number generator for sampling
- out (Tensor, optional): the output tensor.
- dtype (torch.dtype, optional): the desired data type of returned tensor. Default: if ``None``,
- this function returns a tensor with dtype ``torch.int64``.
- layout (:class:`torch.layout`, optional): the desired layout of returned Tensor.
- Default: ``torch.strided``.
- device (:class:`torch.device`, optional): the desired device of returned tensor.
- Default: if ``None``, uses the current device for the default tensor type
- (see :func:`torch.set_default_device`). :attr:`device` will be the CPU
- for CPU tensor types and the current CUDA device for CUDA tensor types.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- Example::
- >>> torch.randint(3, 5, (3,))
- tensor([4, 3, 4])
- >>> torch.randint(10, (2, 2))
- tensor([[0, 2],
- [5, 5]])
- >>> torch.randint(3, 10, (2, 2))
- tensor([[4, 5],
- [6, 7]])
- """
- @overload
- def randint(
- high: _int | SymInt,
- size: Sequence[_int | SymInt],
- *,
- out: Tensor | None = None,
- dtype: _dtype | None = None,
- layout: _layout | None = None,
- device: DeviceLikeType | None = None,
- pin_memory: _bool | None = False,
- requires_grad: _bool | None = False,
- ) -> Tensor:
- r"""
- randint(low=0, high, size, \*, generator=None, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False) -> Tensor
- Returns a tensor filled with random integers generated uniformly
- between :attr:`low` (inclusive) and :attr:`high` (exclusive).
- The shape of the tensor is defined by the variable argument :attr:`size`.
- .. note::
- With the global dtype default (``torch.float32``), this function returns
- a tensor with dtype ``torch.int64``.
- Args:
- low (int, optional): Lowest integer to be drawn from the distribution. Default: 0.
- high (int): One above the highest integer to be drawn from the distribution.
- size (tuple): a tuple defining the shape of the output tensor.
- Keyword args:
- generator (:class:`torch.Generator`, optional): a pseudorandom number generator for sampling
- out (Tensor, optional): the output tensor.
- dtype (torch.dtype, optional): the desired data type of returned tensor. Default: if ``None``,
- this function returns a tensor with dtype ``torch.int64``.
- layout (:class:`torch.layout`, optional): the desired layout of returned Tensor.
- Default: ``torch.strided``.
- device (:class:`torch.device`, optional): the desired device of returned tensor.
- Default: if ``None``, uses the current device for the default tensor type
- (see :func:`torch.set_default_device`). :attr:`device` will be the CPU
- for CPU tensor types and the current CUDA device for CUDA tensor types.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- Example::
- >>> torch.randint(3, 5, (3,))
- tensor([4, 3, 4])
- >>> torch.randint(10, (2, 2))
- tensor([[0, 2],
- [5, 5]])
- >>> torch.randint(3, 10, (2, 2))
- tensor([[4, 5],
- [6, 7]])
- """
- @overload
- def randint(
- low: _int | SymInt,
- high: _int | SymInt,
- size: Sequence[_int | SymInt],
- *,
- generator: Generator | None,
- out: Tensor | None = None,
- dtype: _dtype | None = None,
- layout: _layout | None = None,
- device: DeviceLikeType | None = None,
- pin_memory: _bool | None = False,
- requires_grad: _bool | None = False,
- ) -> Tensor:
- r"""
- randint(low=0, high, size, \*, generator=None, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False) -> Tensor
- Returns a tensor filled with random integers generated uniformly
- between :attr:`low` (inclusive) and :attr:`high` (exclusive).
- The shape of the tensor is defined by the variable argument :attr:`size`.
- .. note::
- With the global dtype default (``torch.float32``), this function returns
- a tensor with dtype ``torch.int64``.
- Args:
- low (int, optional): Lowest integer to be drawn from the distribution. Default: 0.
- high (int): One above the highest integer to be drawn from the distribution.
- size (tuple): a tuple defining the shape of the output tensor.
- Keyword args:
- generator (:class:`torch.Generator`, optional): a pseudorandom number generator for sampling
- out (Tensor, optional): the output tensor.
- dtype (torch.dtype, optional): the desired data type of returned tensor. Default: if ``None``,
- this function returns a tensor with dtype ``torch.int64``.
- layout (:class:`torch.layout`, optional): the desired layout of returned Tensor.
- Default: ``torch.strided``.
- device (:class:`torch.device`, optional): the desired device of returned tensor.
- Default: if ``None``, uses the current device for the default tensor type
- (see :func:`torch.set_default_device`). :attr:`device` will be the CPU
- for CPU tensor types and the current CUDA device for CUDA tensor types.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- Example::
- >>> torch.randint(3, 5, (3,))
- tensor([4, 3, 4])
- >>> torch.randint(10, (2, 2))
- tensor([[0, 2],
- [5, 5]])
- >>> torch.randint(3, 10, (2, 2))
- tensor([[4, 5],
- [6, 7]])
- """
- @overload
- def randint(
- low: _int | SymInt,
- high: _int | SymInt,
- size: Sequence[_int | SymInt],
- *,
- out: Tensor | None = None,
- dtype: _dtype | None = None,
- layout: _layout | None = None,
- device: DeviceLikeType | None = None,
- pin_memory: _bool | None = False,
- requires_grad: _bool | None = False,
- ) -> Tensor:
- r"""
- randint(low=0, high, size, \*, generator=None, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False) -> Tensor
- Returns a tensor filled with random integers generated uniformly
- between :attr:`low` (inclusive) and :attr:`high` (exclusive).
- The shape of the tensor is defined by the variable argument :attr:`size`.
- .. note::
- With the global dtype default (``torch.float32``), this function returns
- a tensor with dtype ``torch.int64``.
- Args:
- low (int, optional): Lowest integer to be drawn from the distribution. Default: 0.
- high (int): One above the highest integer to be drawn from the distribution.
- size (tuple): a tuple defining the shape of the output tensor.
- Keyword args:
- generator (:class:`torch.Generator`, optional): a pseudorandom number generator for sampling
- out (Tensor, optional): the output tensor.
- dtype (torch.dtype, optional): the desired data type of returned tensor. Default: if ``None``,
- this function returns a tensor with dtype ``torch.int64``.
- layout (:class:`torch.layout`, optional): the desired layout of returned Tensor.
- Default: ``torch.strided``.
- device (:class:`torch.device`, optional): the desired device of returned tensor.
- Default: if ``None``, uses the current device for the default tensor type
- (see :func:`torch.set_default_device`). :attr:`device` will be the CPU
- for CPU tensor types and the current CUDA device for CUDA tensor types.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- Example::
- >>> torch.randint(3, 5, (3,))
- tensor([4, 3, 4])
- >>> torch.randint(10, (2, 2))
- tensor([[0, 2],
- [5, 5]])
- >>> torch.randint(3, 10, (2, 2))
- tensor([[4, 5],
- [6, 7]])
- """
- @overload
- def randint_like(
- input: Tensor,
- low: _int | SymInt,
- high: _int | SymInt,
- *,
- memory_format: memory_format | None = None,
- dtype: _dtype | None = None,
- layout: _layout | None = None,
- device: DeviceLikeType | None = None,
- pin_memory: _bool | None = False,
- requires_grad: _bool | None = False,
- ) -> Tensor:
- r"""
- randint_like(input, low=0, high, \*, dtype=None, layout=torch.strided, device=None, requires_grad=False, memory_format=torch.preserve_format) -> Tensor
- Returns a tensor with the same shape as Tensor :attr:`input` filled with
- random integers generated uniformly between :attr:`low` (inclusive) and
- :attr:`high` (exclusive).
- .. note:
- With the global dtype default (``torch.float32``), this function returns
- a tensor with dtype ``torch.int64``.
- Args:
- input (Tensor): the size of :attr:`input` will determine size of the output tensor.
- low (int, optional): Lowest integer to be drawn from the distribution. Default: 0.
- high (int): One above the highest integer to be drawn from the distribution.
- Keyword args:
- dtype (:class:`torch.dtype`, optional): the desired data type of returned Tensor.
- Default: if ``None``, defaults to the dtype of :attr:`input`.
- layout (:class:`torch.layout`, optional): the desired layout of returned tensor.
- Default: if ``None``, defaults to the layout of :attr:`input`.
- device (:class:`torch.device`, optional): the desired device of returned tensor.
- Default: if ``None``, defaults to the device of :attr:`input`.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- memory_format (:class:`torch.memory_format`, optional): the desired memory format of
- returned Tensor. Default: ``torch.preserve_format``.
- """
- @overload
- def randint_like(
- input: Tensor,
- high: Tensor,
- *,
- memory_format: memory_format | None = None,
- dtype: _dtype | None = None,
- layout: _layout | None = None,
- device: DeviceLikeType | None = None,
- pin_memory: _bool | None = False,
- requires_grad: _bool | None = False,
- ) -> Tensor:
- r"""
- randint_like(input, low=0, high, \*, dtype=None, layout=torch.strided, device=None, requires_grad=False, memory_format=torch.preserve_format) -> Tensor
- Returns a tensor with the same shape as Tensor :attr:`input` filled with
- random integers generated uniformly between :attr:`low` (inclusive) and
- :attr:`high` (exclusive).
- .. note:
- With the global dtype default (``torch.float32``), this function returns
- a tensor with dtype ``torch.int64``.
- Args:
- input (Tensor): the size of :attr:`input` will determine size of the output tensor.
- low (int, optional): Lowest integer to be drawn from the distribution. Default: 0.
- high (int): One above the highest integer to be drawn from the distribution.
- Keyword args:
- dtype (:class:`torch.dtype`, optional): the desired data type of returned Tensor.
- Default: if ``None``, defaults to the dtype of :attr:`input`.
- layout (:class:`torch.layout`, optional): the desired layout of returned tensor.
- Default: if ``None``, defaults to the layout of :attr:`input`.
- device (:class:`torch.device`, optional): the desired device of returned tensor.
- Default: if ``None``, defaults to the device of :attr:`input`.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- memory_format (:class:`torch.memory_format`, optional): the desired memory format of
- returned Tensor. Default: ``torch.preserve_format``.
- """
- @overload
- def randint_like(
- input: Tensor,
- high: _int | SymInt,
- *,
- memory_format: memory_format | None = None,
- dtype: _dtype | None = None,
- layout: _layout | None = None,
- device: DeviceLikeType | None = None,
- pin_memory: _bool | None = False,
- requires_grad: _bool | None = False,
- ) -> Tensor:
- r"""
- randint_like(input, low=0, high, \*, dtype=None, layout=torch.strided, device=None, requires_grad=False, memory_format=torch.preserve_format) -> Tensor
- Returns a tensor with the same shape as Tensor :attr:`input` filled with
- random integers generated uniformly between :attr:`low` (inclusive) and
- :attr:`high` (exclusive).
- .. note:
- With the global dtype default (``torch.float32``), this function returns
- a tensor with dtype ``torch.int64``.
- Args:
- input (Tensor): the size of :attr:`input` will determine size of the output tensor.
- low (int, optional): Lowest integer to be drawn from the distribution. Default: 0.
- high (int): One above the highest integer to be drawn from the distribution.
- Keyword args:
- dtype (:class:`torch.dtype`, optional): the desired data type of returned Tensor.
- Default: if ``None``, defaults to the dtype of :attr:`input`.
- layout (:class:`torch.layout`, optional): the desired layout of returned tensor.
- Default: if ``None``, defaults to the layout of :attr:`input`.
- device (:class:`torch.device`, optional): the desired device of returned tensor.
- Default: if ``None``, defaults to the device of :attr:`input`.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- memory_format (:class:`torch.memory_format`, optional): the desired memory format of
- returned Tensor. Default: ``torch.preserve_format``.
- """
- @overload
- def randn(
- size: Sequence[_int | SymInt],
- *,
- generator: Generator | None,
- names: Sequence[str | EllipsisType | None] | None,
- dtype: _dtype | None = None,
- layout: _layout | None = None,
- device: DeviceLikeType | None = None,
- pin_memory: _bool | None = False,
- requires_grad: _bool | None = False,
- ) -> Tensor:
- r"""
- randn(*size, *, generator=None, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False, pin_memory=False) -> Tensor
- Returns a tensor filled with random numbers from a normal distribution
- with mean `0` and variance `1` (also called the standard normal
- distribution).
- .. math::
- \text{out}_{i} \sim \mathcal{N}(0, 1)
- For complex dtypes, the tensor is i.i.d. sampled from a `complex normal distribution`_ with zero mean and
- unit variance as
- .. math::
- \text{out}_{i} \sim \mathcal{CN}(0, 1)
- This is equivalent to separately sampling the real :math:`(\operatorname{Re})` and imaginary
- :math:`(\operatorname{Im})` part of :math:`\text{out}_i` as
- .. math::
- \operatorname{Re}(\text{out}_{i}) \sim \mathcal{N}(0, \frac{1}{2}),\quad
- \operatorname{Im}(\text{out}_{i}) \sim \mathcal{N}(0, \frac{1}{2})
- The shape of the tensor is defined by the variable argument :attr:`size`.
- Args:
- size (int...): a sequence of integers defining the shape of the output tensor.
- Can be a variable number of arguments or a collection like a list or tuple.
- Keyword args:
- generator (:class:`torch.Generator`, optional): a pseudorandom number generator for sampling
- out (Tensor, optional): the output tensor.
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor.
- Default: if ``None``, uses a global default (see :func:`torch.set_default_dtype`).
- layout (:class:`torch.layout`, optional): the desired layout of returned Tensor.
- Default: ``torch.strided``.
- device (:class:`torch.device`, optional): the desired device of returned tensor.
- Default: if ``None``, uses the current device for the default tensor type
- (see :func:`torch.set_default_device`). :attr:`device` will be the CPU
- for CPU tensor types and the current CUDA device for CUDA tensor types.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- pin_memory (bool, optional): If set, returned tensor would be allocated in
- the pinned memory. Works only for CPU tensors. Default: ``False``.
- Example::
- >>> torch.randn(4)
- tensor([-2.1436, 0.9966, 2.3426, -0.6366])
- >>> torch.randn(2, 3)
- tensor([[ 1.5954, 2.8929, -1.0923],
- [ 1.1719, -0.4709, -0.1996]])
- .. _complex normal distribution: https://en.wikipedia.org/wiki/Complex_normal_distribution
- """
- @overload
- def randn(
- *size: _int | SymInt,
- generator: Generator | None,
- names: Sequence[str | EllipsisType | None] | None,
- dtype: _dtype | None = None,
- layout: _layout | None = None,
- device: DeviceLikeType | None = None,
- pin_memory: _bool | None = False,
- requires_grad: _bool | None = False,
- ) -> Tensor:
- r"""
- randn(*size, *, generator=None, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False, pin_memory=False) -> Tensor
- Returns a tensor filled with random numbers from a normal distribution
- with mean `0` and variance `1` (also called the standard normal
- distribution).
- .. math::
- \text{out}_{i} \sim \mathcal{N}(0, 1)
- For complex dtypes, the tensor is i.i.d. sampled from a `complex normal distribution`_ with zero mean and
- unit variance as
- .. math::
- \text{out}_{i} \sim \mathcal{CN}(0, 1)
- This is equivalent to separately sampling the real :math:`(\operatorname{Re})` and imaginary
- :math:`(\operatorname{Im})` part of :math:`\text{out}_i` as
- .. math::
- \operatorname{Re}(\text{out}_{i}) \sim \mathcal{N}(0, \frac{1}{2}),\quad
- \operatorname{Im}(\text{out}_{i}) \sim \mathcal{N}(0, \frac{1}{2})
- The shape of the tensor is defined by the variable argument :attr:`size`.
- Args:
- size (int...): a sequence of integers defining the shape of the output tensor.
- Can be a variable number of arguments or a collection like a list or tuple.
- Keyword args:
- generator (:class:`torch.Generator`, optional): a pseudorandom number generator for sampling
- out (Tensor, optional): the output tensor.
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor.
- Default: if ``None``, uses a global default (see :func:`torch.set_default_dtype`).
- layout (:class:`torch.layout`, optional): the desired layout of returned Tensor.
- Default: ``torch.strided``.
- device (:class:`torch.device`, optional): the desired device of returned tensor.
- Default: if ``None``, uses the current device for the default tensor type
- (see :func:`torch.set_default_device`). :attr:`device` will be the CPU
- for CPU tensor types and the current CUDA device for CUDA tensor types.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- pin_memory (bool, optional): If set, returned tensor would be allocated in
- the pinned memory. Works only for CPU tensors. Default: ``False``.
- Example::
- >>> torch.randn(4)
- tensor([-2.1436, 0.9966, 2.3426, -0.6366])
- >>> torch.randn(2, 3)
- tensor([[ 1.5954, 2.8929, -1.0923],
- [ 1.1719, -0.4709, -0.1996]])
- .. _complex normal distribution: https://en.wikipedia.org/wiki/Complex_normal_distribution
- """
- @overload
- def randn(
- size: Sequence[_int | SymInt],
- *,
- generator: Generator | None,
- out: Tensor | None = None,
- dtype: _dtype | None = None,
- layout: _layout | None = None,
- device: DeviceLikeType | None = None,
- pin_memory: _bool | None = False,
- requires_grad: _bool | None = False,
- ) -> Tensor:
- r"""
- randn(*size, *, generator=None, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False, pin_memory=False) -> Tensor
- Returns a tensor filled with random numbers from a normal distribution
- with mean `0` and variance `1` (also called the standard normal
- distribution).
- .. math::
- \text{out}_{i} \sim \mathcal{N}(0, 1)
- For complex dtypes, the tensor is i.i.d. sampled from a `complex normal distribution`_ with zero mean and
- unit variance as
- .. math::
- \text{out}_{i} \sim \mathcal{CN}(0, 1)
- This is equivalent to separately sampling the real :math:`(\operatorname{Re})` and imaginary
- :math:`(\operatorname{Im})` part of :math:`\text{out}_i` as
- .. math::
- \operatorname{Re}(\text{out}_{i}) \sim \mathcal{N}(0, \frac{1}{2}),\quad
- \operatorname{Im}(\text{out}_{i}) \sim \mathcal{N}(0, \frac{1}{2})
- The shape of the tensor is defined by the variable argument :attr:`size`.
- Args:
- size (int...): a sequence of integers defining the shape of the output tensor.
- Can be a variable number of arguments or a collection like a list or tuple.
- Keyword args:
- generator (:class:`torch.Generator`, optional): a pseudorandom number generator for sampling
- out (Tensor, optional): the output tensor.
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor.
- Default: if ``None``, uses a global default (see :func:`torch.set_default_dtype`).
- layout (:class:`torch.layout`, optional): the desired layout of returned Tensor.
- Default: ``torch.strided``.
- device (:class:`torch.device`, optional): the desired device of returned tensor.
- Default: if ``None``, uses the current device for the default tensor type
- (see :func:`torch.set_default_device`). :attr:`device` will be the CPU
- for CPU tensor types and the current CUDA device for CUDA tensor types.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- pin_memory (bool, optional): If set, returned tensor would be allocated in
- the pinned memory. Works only for CPU tensors. Default: ``False``.
- Example::
- >>> torch.randn(4)
- tensor([-2.1436, 0.9966, 2.3426, -0.6366])
- >>> torch.randn(2, 3)
- tensor([[ 1.5954, 2.8929, -1.0923],
- [ 1.1719, -0.4709, -0.1996]])
- .. _complex normal distribution: https://en.wikipedia.org/wiki/Complex_normal_distribution
- """
- @overload
- def randn(
- *size: _int | SymInt,
- generator: Generator | None,
- out: Tensor | None = None,
- dtype: _dtype | None = None,
- layout: _layout | None = None,
- device: DeviceLikeType | None = None,
- pin_memory: _bool | None = False,
- requires_grad: _bool | None = False,
- ) -> Tensor:
- r"""
- randn(*size, *, generator=None, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False, pin_memory=False) -> Tensor
- Returns a tensor filled with random numbers from a normal distribution
- with mean `0` and variance `1` (also called the standard normal
- distribution).
- .. math::
- \text{out}_{i} \sim \mathcal{N}(0, 1)
- For complex dtypes, the tensor is i.i.d. sampled from a `complex normal distribution`_ with zero mean and
- unit variance as
- .. math::
- \text{out}_{i} \sim \mathcal{CN}(0, 1)
- This is equivalent to separately sampling the real :math:`(\operatorname{Re})` and imaginary
- :math:`(\operatorname{Im})` part of :math:`\text{out}_i` as
- .. math::
- \operatorname{Re}(\text{out}_{i}) \sim \mathcal{N}(0, \frac{1}{2}),\quad
- \operatorname{Im}(\text{out}_{i}) \sim \mathcal{N}(0, \frac{1}{2})
- The shape of the tensor is defined by the variable argument :attr:`size`.
- Args:
- size (int...): a sequence of integers defining the shape of the output tensor.
- Can be a variable number of arguments or a collection like a list or tuple.
- Keyword args:
- generator (:class:`torch.Generator`, optional): a pseudorandom number generator for sampling
- out (Tensor, optional): the output tensor.
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor.
- Default: if ``None``, uses a global default (see :func:`torch.set_default_dtype`).
- layout (:class:`torch.layout`, optional): the desired layout of returned Tensor.
- Default: ``torch.strided``.
- device (:class:`torch.device`, optional): the desired device of returned tensor.
- Default: if ``None``, uses the current device for the default tensor type
- (see :func:`torch.set_default_device`). :attr:`device` will be the CPU
- for CPU tensor types and the current CUDA device for CUDA tensor types.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- pin_memory (bool, optional): If set, returned tensor would be allocated in
- the pinned memory. Works only for CPU tensors. Default: ``False``.
- Example::
- >>> torch.randn(4)
- tensor([-2.1436, 0.9966, 2.3426, -0.6366])
- >>> torch.randn(2, 3)
- tensor([[ 1.5954, 2.8929, -1.0923],
- [ 1.1719, -0.4709, -0.1996]])
- .. _complex normal distribution: https://en.wikipedia.org/wiki/Complex_normal_distribution
- """
- @overload
- def randn(
- size: Sequence[_int | SymInt],
- *,
- out: Tensor | None = None,
- dtype: _dtype | None = None,
- layout: _layout | None = None,
- device: DeviceLikeType | None = None,
- pin_memory: _bool | None = False,
- requires_grad: _bool | None = False,
- ) -> Tensor:
- r"""
- randn(*size, *, generator=None, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False, pin_memory=False) -> Tensor
- Returns a tensor filled with random numbers from a normal distribution
- with mean `0` and variance `1` (also called the standard normal
- distribution).
- .. math::
- \text{out}_{i} \sim \mathcal{N}(0, 1)
- For complex dtypes, the tensor is i.i.d. sampled from a `complex normal distribution`_ with zero mean and
- unit variance as
- .. math::
- \text{out}_{i} \sim \mathcal{CN}(0, 1)
- This is equivalent to separately sampling the real :math:`(\operatorname{Re})` and imaginary
- :math:`(\operatorname{Im})` part of :math:`\text{out}_i` as
- .. math::
- \operatorname{Re}(\text{out}_{i}) \sim \mathcal{N}(0, \frac{1}{2}),\quad
- \operatorname{Im}(\text{out}_{i}) \sim \mathcal{N}(0, \frac{1}{2})
- The shape of the tensor is defined by the variable argument :attr:`size`.
- Args:
- size (int...): a sequence of integers defining the shape of the output tensor.
- Can be a variable number of arguments or a collection like a list or tuple.
- Keyword args:
- generator (:class:`torch.Generator`, optional): a pseudorandom number generator for sampling
- out (Tensor, optional): the output tensor.
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor.
- Default: if ``None``, uses a global default (see :func:`torch.set_default_dtype`).
- layout (:class:`torch.layout`, optional): the desired layout of returned Tensor.
- Default: ``torch.strided``.
- device (:class:`torch.device`, optional): the desired device of returned tensor.
- Default: if ``None``, uses the current device for the default tensor type
- (see :func:`torch.set_default_device`). :attr:`device` will be the CPU
- for CPU tensor types and the current CUDA device for CUDA tensor types.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- pin_memory (bool, optional): If set, returned tensor would be allocated in
- the pinned memory. Works only for CPU tensors. Default: ``False``.
- Example::
- >>> torch.randn(4)
- tensor([-2.1436, 0.9966, 2.3426, -0.6366])
- >>> torch.randn(2, 3)
- tensor([[ 1.5954, 2.8929, -1.0923],
- [ 1.1719, -0.4709, -0.1996]])
- .. _complex normal distribution: https://en.wikipedia.org/wiki/Complex_normal_distribution
- """
- @overload
- def randn(
- *size: _int | SymInt,
- out: Tensor | None = None,
- dtype: _dtype | None = None,
- layout: _layout | None = None,
- device: DeviceLikeType | None = None,
- pin_memory: _bool | None = False,
- requires_grad: _bool | None = False,
- ) -> Tensor:
- r"""
- randn(*size, *, generator=None, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False, pin_memory=False) -> Tensor
- Returns a tensor filled with random numbers from a normal distribution
- with mean `0` and variance `1` (also called the standard normal
- distribution).
- .. math::
- \text{out}_{i} \sim \mathcal{N}(0, 1)
- For complex dtypes, the tensor is i.i.d. sampled from a `complex normal distribution`_ with zero mean and
- unit variance as
- .. math::
- \text{out}_{i} \sim \mathcal{CN}(0, 1)
- This is equivalent to separately sampling the real :math:`(\operatorname{Re})` and imaginary
- :math:`(\operatorname{Im})` part of :math:`\text{out}_i` as
- .. math::
- \operatorname{Re}(\text{out}_{i}) \sim \mathcal{N}(0, \frac{1}{2}),\quad
- \operatorname{Im}(\text{out}_{i}) \sim \mathcal{N}(0, \frac{1}{2})
- The shape of the tensor is defined by the variable argument :attr:`size`.
- Args:
- size (int...): a sequence of integers defining the shape of the output tensor.
- Can be a variable number of arguments or a collection like a list or tuple.
- Keyword args:
- generator (:class:`torch.Generator`, optional): a pseudorandom number generator for sampling
- out (Tensor, optional): the output tensor.
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor.
- Default: if ``None``, uses a global default (see :func:`torch.set_default_dtype`).
- layout (:class:`torch.layout`, optional): the desired layout of returned Tensor.
- Default: ``torch.strided``.
- device (:class:`torch.device`, optional): the desired device of returned tensor.
- Default: if ``None``, uses the current device for the default tensor type
- (see :func:`torch.set_default_device`). :attr:`device` will be the CPU
- for CPU tensor types and the current CUDA device for CUDA tensor types.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- pin_memory (bool, optional): If set, returned tensor would be allocated in
- the pinned memory. Works only for CPU tensors. Default: ``False``.
- Example::
- >>> torch.randn(4)
- tensor([-2.1436, 0.9966, 2.3426, -0.6366])
- >>> torch.randn(2, 3)
- tensor([[ 1.5954, 2.8929, -1.0923],
- [ 1.1719, -0.4709, -0.1996]])
- .. _complex normal distribution: https://en.wikipedia.org/wiki/Complex_normal_distribution
- """
- @overload
- def randn(
- size: Sequence[_int | SymInt],
- *,
- names: Sequence[str | EllipsisType | None] | None,
- dtype: _dtype | None = None,
- layout: _layout | None = None,
- device: DeviceLikeType | None = None,
- pin_memory: _bool | None = False,
- requires_grad: _bool | None = False,
- ) -> Tensor:
- r"""
- randn(*size, *, generator=None, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False, pin_memory=False) -> Tensor
- Returns a tensor filled with random numbers from a normal distribution
- with mean `0` and variance `1` (also called the standard normal
- distribution).
- .. math::
- \text{out}_{i} \sim \mathcal{N}(0, 1)
- For complex dtypes, the tensor is i.i.d. sampled from a `complex normal distribution`_ with zero mean and
- unit variance as
- .. math::
- \text{out}_{i} \sim \mathcal{CN}(0, 1)
- This is equivalent to separately sampling the real :math:`(\operatorname{Re})` and imaginary
- :math:`(\operatorname{Im})` part of :math:`\text{out}_i` as
- .. math::
- \operatorname{Re}(\text{out}_{i}) \sim \mathcal{N}(0, \frac{1}{2}),\quad
- \operatorname{Im}(\text{out}_{i}) \sim \mathcal{N}(0, \frac{1}{2})
- The shape of the tensor is defined by the variable argument :attr:`size`.
- Args:
- size (int...): a sequence of integers defining the shape of the output tensor.
- Can be a variable number of arguments or a collection like a list or tuple.
- Keyword args:
- generator (:class:`torch.Generator`, optional): a pseudorandom number generator for sampling
- out (Tensor, optional): the output tensor.
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor.
- Default: if ``None``, uses a global default (see :func:`torch.set_default_dtype`).
- layout (:class:`torch.layout`, optional): the desired layout of returned Tensor.
- Default: ``torch.strided``.
- device (:class:`torch.device`, optional): the desired device of returned tensor.
- Default: if ``None``, uses the current device for the default tensor type
- (see :func:`torch.set_default_device`). :attr:`device` will be the CPU
- for CPU tensor types and the current CUDA device for CUDA tensor types.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- pin_memory (bool, optional): If set, returned tensor would be allocated in
- the pinned memory. Works only for CPU tensors. Default: ``False``.
- Example::
- >>> torch.randn(4)
- tensor([-2.1436, 0.9966, 2.3426, -0.6366])
- >>> torch.randn(2, 3)
- tensor([[ 1.5954, 2.8929, -1.0923],
- [ 1.1719, -0.4709, -0.1996]])
- .. _complex normal distribution: https://en.wikipedia.org/wiki/Complex_normal_distribution
- """
- @overload
- def randn(
- *size: _int | SymInt,
- names: Sequence[str | EllipsisType | None] | None,
- dtype: _dtype | None = None,
- layout: _layout | None = None,
- device: DeviceLikeType | None = None,
- pin_memory: _bool | None = False,
- requires_grad: _bool | None = False,
- ) -> Tensor:
- r"""
- randn(*size, *, generator=None, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False, pin_memory=False) -> Tensor
- Returns a tensor filled with random numbers from a normal distribution
- with mean `0` and variance `1` (also called the standard normal
- distribution).
- .. math::
- \text{out}_{i} \sim \mathcal{N}(0, 1)
- For complex dtypes, the tensor is i.i.d. sampled from a `complex normal distribution`_ with zero mean and
- unit variance as
- .. math::
- \text{out}_{i} \sim \mathcal{CN}(0, 1)
- This is equivalent to separately sampling the real :math:`(\operatorname{Re})` and imaginary
- :math:`(\operatorname{Im})` part of :math:`\text{out}_i` as
- .. math::
- \operatorname{Re}(\text{out}_{i}) \sim \mathcal{N}(0, \frac{1}{2}),\quad
- \operatorname{Im}(\text{out}_{i}) \sim \mathcal{N}(0, \frac{1}{2})
- The shape of the tensor is defined by the variable argument :attr:`size`.
- Args:
- size (int...): a sequence of integers defining the shape of the output tensor.
- Can be a variable number of arguments or a collection like a list or tuple.
- Keyword args:
- generator (:class:`torch.Generator`, optional): a pseudorandom number generator for sampling
- out (Tensor, optional): the output tensor.
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor.
- Default: if ``None``, uses a global default (see :func:`torch.set_default_dtype`).
- layout (:class:`torch.layout`, optional): the desired layout of returned Tensor.
- Default: ``torch.strided``.
- device (:class:`torch.device`, optional): the desired device of returned tensor.
- Default: if ``None``, uses the current device for the default tensor type
- (see :func:`torch.set_default_device`). :attr:`device` will be the CPU
- for CPU tensor types and the current CUDA device for CUDA tensor types.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- pin_memory (bool, optional): If set, returned tensor would be allocated in
- the pinned memory. Works only for CPU tensors. Default: ``False``.
- Example::
- >>> torch.randn(4)
- tensor([-2.1436, 0.9966, 2.3426, -0.6366])
- >>> torch.randn(2, 3)
- tensor([[ 1.5954, 2.8929, -1.0923],
- [ 1.1719, -0.4709, -0.1996]])
- .. _complex normal distribution: https://en.wikipedia.org/wiki/Complex_normal_distribution
- """
- def randn_like(
- input: Tensor,
- *,
- memory_format: memory_format | None = None,
- dtype: _dtype | None = None,
- layout: _layout | None = None,
- device: DeviceLikeType | None = None,
- pin_memory: _bool | None = False,
- requires_grad: _bool | None = False,
- ) -> Tensor:
- r"""
- randn_like(input, *, dtype=None, layout=None, device=None, requires_grad=False, memory_format=torch.preserve_format) -> Tensor
- Returns a tensor with the same size as :attr:`input` that is filled with
- random numbers from a normal distribution with mean 0 and variance 1. Please refer to :func:`torch.randn` for the
- sampling process of complex dtypes. ``torch.randn_like(input)`` is equivalent to
- ``torch.randn(input.size(), dtype=input.dtype, layout=input.layout, device=input.device)``.
- Args:
- input (Tensor): the size of :attr:`input` will determine size of the output tensor.
- Keyword args:
- dtype (:class:`torch.dtype`, optional): the desired data type of returned Tensor.
- Default: if ``None``, defaults to the dtype of :attr:`input`.
- layout (:class:`torch.layout`, optional): the desired layout of returned tensor.
- Default: if ``None``, defaults to the layout of :attr:`input`.
- device (:class:`torch.device`, optional): the desired device of returned tensor.
- Default: if ``None``, defaults to the device of :attr:`input`.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- memory_format (:class:`torch.memory_format`, optional): the desired memory format of
- returned Tensor. Default: ``torch.preserve_format``.
- """
- @overload
- def randperm(
- n: _int | SymInt,
- *,
- generator: Generator | None,
- out: Tensor | None = None,
- dtype: _dtype | None = None,
- layout: _layout | None = None,
- device: DeviceLikeType | None = None,
- pin_memory: _bool | None = False,
- requires_grad: _bool | None = False,
- ) -> Tensor:
- r"""
- randperm(n, *, generator=None, out=None, dtype=torch.int64,layout=torch.strided, device=None, requires_grad=False, pin_memory=False) -> Tensor
- Returns a random permutation of integers from ``0`` to ``n - 1``.
- Args:
- n (int): the upper bound (exclusive)
- Keyword args:
- generator (:class:`torch.Generator`, optional): a pseudorandom number generator for sampling
- out (Tensor, optional): the output tensor.
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor.
- Default: ``torch.int64``.
- layout (:class:`torch.layout`, optional): the desired layout of returned Tensor.
- Default: ``torch.strided``.
- device (:class:`torch.device`, optional): the desired device of returned tensor.
- Default: if ``None``, uses the current device for the default tensor type
- (see :func:`torch.set_default_device`). :attr:`device` will be the CPU
- for CPU tensor types and the current CUDA device for CUDA tensor types.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- pin_memory (bool, optional): If set, returned tensor would be allocated in
- the pinned memory. Works only for CPU tensors. Default: ``False``.
- Example::
- >>> torch.randperm(4)
- tensor([2, 1, 0, 3])
- """
- @overload
- def randperm(
- n: _int | SymInt,
- *,
- out: Tensor | None = None,
- dtype: _dtype | None = None,
- layout: _layout | None = None,
- device: DeviceLikeType | None = None,
- pin_memory: _bool | None = False,
- requires_grad: _bool | None = False,
- ) -> Tensor:
- r"""
- randperm(n, *, generator=None, out=None, dtype=torch.int64,layout=torch.strided, device=None, requires_grad=False, pin_memory=False) -> Tensor
- Returns a random permutation of integers from ``0`` to ``n - 1``.
- Args:
- n (int): the upper bound (exclusive)
- Keyword args:
- generator (:class:`torch.Generator`, optional): a pseudorandom number generator for sampling
- out (Tensor, optional): the output tensor.
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor.
- Default: ``torch.int64``.
- layout (:class:`torch.layout`, optional): the desired layout of returned Tensor.
- Default: ``torch.strided``.
- device (:class:`torch.device`, optional): the desired device of returned tensor.
- Default: if ``None``, uses the current device for the default tensor type
- (see :func:`torch.set_default_device`). :attr:`device` will be the CPU
- for CPU tensor types and the current CUDA device for CUDA tensor types.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- pin_memory (bool, optional): If set, returned tensor would be allocated in
- the pinned memory. Works only for CPU tensors. Default: ``False``.
- Example::
- >>> torch.randperm(4)
- tensor([2, 1, 0, 3])
- """
- def range(
- start: Number,
- end: Number,
- step: Number = 1,
- *,
- out: Tensor | None = None,
- dtype: _dtype | None = None,
- device: DeviceLikeType | None = None,
- requires_grad: _bool = False,
- pin_memory: _bool = False,
- ) -> Tensor:
- r"""
- range(start=0, end, step=1, *, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False) -> Tensor
- Returns a 1-D tensor of size :math:`\left\lfloor \frac{\text{end} - \text{start}}{\text{step}} \right\rfloor + 1`
- with values from :attr:`start` to :attr:`end` with step :attr:`step`. Step is
- the gap between two values in the tensor.
- .. math::
- \text{out}_{i+1} = \text{out}_i + \text{step}.
- .. warning::
- This function is deprecated and will be removed in a future release because its behavior is inconsistent with
- Python's range builtin. Instead, use :func:`torch.arange`, which produces values in [start, end).
- Args:
- start (float, optional): the starting value for the set of points. Default: ``0``.
- end (float): the ending value for the set of points
- step (float, optional): the gap between each pair of adjacent points. Default: ``1``.
- Keyword args:
- out (Tensor, optional): the output tensor.
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor.
- Default: if ``None``, uses a global default (see :func:`torch.set_default_dtype`). If `dtype` is not given, infer the data type from the other input
- arguments. If any of `start`, `end`, or `step` are floating-point, the
- `dtype` is inferred to be the default dtype, see
- :meth:`~torch.get_default_dtype`. Otherwise, the `dtype` is inferred to
- be `torch.int64`.
- layout (:class:`torch.layout`, optional): the desired layout of returned Tensor.
- Default: ``torch.strided``.
- device (:class:`torch.device`, optional): the desired device of returned tensor.
- Default: if ``None``, uses the current device for the default tensor type
- (see :func:`torch.set_default_device`). :attr:`device` will be the CPU
- for CPU tensor types and the current CUDA device for CUDA tensor types.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- Example::
- >>> torch.range(1, 4)
- tensor([ 1., 2., 3., 4.])
- >>> torch.range(1, 4, 0.5)
- tensor([ 1.0000, 1.5000, 2.0000, 2.5000, 3.0000, 3.5000, 4.0000])
- """
- def ravel(input: Tensor) -> Tensor:
- r"""
- ravel(input) -> Tensor
- Return a contiguous flattened tensor. A copy is made only if needed.
- Args:
- input (Tensor): the input tensor.
- Example::
- >>> t = torch.tensor([[[1, 2],
- ... [3, 4]],
- ... [[5, 6],
- ... [7, 8]]])
- >>> torch.ravel(t)
- tensor([1, 2, 3, 4, 5, 6, 7, 8])
- """
- def real(input: Tensor) -> Tensor:
- r"""
- real(input) -> Tensor
- Returns a new tensor containing real values of the :attr:`self` tensor.
- The returned tensor and :attr:`self` share the same underlying storage.
- Args:
- input (Tensor): the input tensor.
- Example::
- >>> x=torch.randn(4, dtype=torch.cfloat)
- >>> x
- tensor([(0.3100+0.3553j), (-0.5445-0.7896j), (-1.6492-0.0633j), (-0.0638-0.8119j)])
- >>> x.real
- tensor([ 0.3100, -0.5445, -1.6492, -0.0638])
- """
- def reciprocal(input: Tensor, *, out: Tensor | None = None) -> Tensor:
- r"""
- reciprocal(input, *, out=None) -> Tensor
- Returns a new tensor with the reciprocal of the elements of :attr:`input`
- .. math::
- \text{out}_{i} = \frac{1}{\text{input}_{i}}
- .. note::
- Unlike NumPy's reciprocal, torch.reciprocal supports integral inputs. Integral
- inputs to reciprocal are automatically :ref:`promoted <type-promotion-doc>` to
- the default scalar type.
- Args:
- input (Tensor): the input tensor.
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> a = torch.randn(4)
- >>> a
- tensor([-0.4595, -2.1219, -1.4314, 0.7298])
- >>> torch.reciprocal(a)
- tensor([-2.1763, -0.4713, -0.6986, 1.3702])
- """
- def reciprocal_(input: Tensor) -> Tensor: ...
- def relu(input: Tensor) -> Tensor: ...
- def relu_(input: Tensor) -> Tensor: ...
- @overload
- def remainder(
- input: Tensor,
- other: Tensor,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- remainder(input, other, *, out=None) -> Tensor
- Computes
- `Python's modulus operation <https://docs.python.org/3/reference/expressions.html#binary-arithmetic-operations>`_
- entrywise. The result has the same sign as the divisor :attr:`other` and its absolute value
- is less than that of :attr:`other`.
- It may also be defined in terms of :func:`torch.div` as
- .. code:: python
- torch.remainder(a, b) == a - a.div(b, rounding_mode="floor") * b
- Supports :ref:`broadcasting to a common shape <broadcasting-semantics>`,
- :ref:`type promotion <type-promotion-doc>`, and integer and float inputs.
- .. note::
- Complex inputs are not supported. In some cases, it is not mathematically
- possible to satisfy the definition of a modulo operation with complex numbers.
- See :func:`torch.fmod` for how division by zero is handled.
- .. seealso::
- :func:`torch.fmod` which implements C++'s `std::fmod <https://en.cppreference.com/w/cpp/numeric/math/fmod>`_.
- This one is defined in terms of division rounding towards zero.
- Args:
- input (Tensor or Scalar): the dividend
- other (Tensor or Scalar): the divisor
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> torch.remainder(torch.tensor([-3., -2, -1, 1, 2, 3]), 2)
- tensor([ 1., 0., 1., 1., 0., 1.])
- >>> torch.remainder(torch.tensor([1, 2, 3, 4, 5]), -1.5)
- tensor([ -0.5000, -1.0000, 0.0000, -0.5000, -1.0000 ])
- """
- @overload
- def remainder(self: Number | _complex, other: Tensor) -> Tensor:
- r"""
- remainder(input, other, *, out=None) -> Tensor
- Computes
- `Python's modulus operation <https://docs.python.org/3/reference/expressions.html#binary-arithmetic-operations>`_
- entrywise. The result has the same sign as the divisor :attr:`other` and its absolute value
- is less than that of :attr:`other`.
- It may also be defined in terms of :func:`torch.div` as
- .. code:: python
- torch.remainder(a, b) == a - a.div(b, rounding_mode="floor") * b
- Supports :ref:`broadcasting to a common shape <broadcasting-semantics>`,
- :ref:`type promotion <type-promotion-doc>`, and integer and float inputs.
- .. note::
- Complex inputs are not supported. In some cases, it is not mathematically
- possible to satisfy the definition of a modulo operation with complex numbers.
- See :func:`torch.fmod` for how division by zero is handled.
- .. seealso::
- :func:`torch.fmod` which implements C++'s `std::fmod <https://en.cppreference.com/w/cpp/numeric/math/fmod>`_.
- This one is defined in terms of division rounding towards zero.
- Args:
- input (Tensor or Scalar): the dividend
- other (Tensor or Scalar): the divisor
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> torch.remainder(torch.tensor([-3., -2, -1, 1, 2, 3]), 2)
- tensor([ 1., 0., 1., 1., 0., 1.])
- >>> torch.remainder(torch.tensor([1, 2, 3, 4, 5]), -1.5)
- tensor([ -0.5000, -1.0000, 0.0000, -0.5000, -1.0000 ])
- """
- @overload
- def remainder(
- input: Tensor,
- other: Number | _complex,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- remainder(input, other, *, out=None) -> Tensor
- Computes
- `Python's modulus operation <https://docs.python.org/3/reference/expressions.html#binary-arithmetic-operations>`_
- entrywise. The result has the same sign as the divisor :attr:`other` and its absolute value
- is less than that of :attr:`other`.
- It may also be defined in terms of :func:`torch.div` as
- .. code:: python
- torch.remainder(a, b) == a - a.div(b, rounding_mode="floor") * b
- Supports :ref:`broadcasting to a common shape <broadcasting-semantics>`,
- :ref:`type promotion <type-promotion-doc>`, and integer and float inputs.
- .. note::
- Complex inputs are not supported. In some cases, it is not mathematically
- possible to satisfy the definition of a modulo operation with complex numbers.
- See :func:`torch.fmod` for how division by zero is handled.
- .. seealso::
- :func:`torch.fmod` which implements C++'s `std::fmod <https://en.cppreference.com/w/cpp/numeric/math/fmod>`_.
- This one is defined in terms of division rounding towards zero.
- Args:
- input (Tensor or Scalar): the dividend
- other (Tensor or Scalar): the divisor
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> torch.remainder(torch.tensor([-3., -2, -1, 1, 2, 3]), 2)
- tensor([ 1., 0., 1., 1., 0., 1.])
- >>> torch.remainder(torch.tensor([1, 2, 3, 4, 5]), -1.5)
- tensor([ -0.5000, -1.0000, 0.0000, -0.5000, -1.0000 ])
- """
- def renorm(
- input: Tensor,
- p: Number | _complex,
- dim: _int,
- maxnorm: Number | _complex,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- renorm(input, p, dim, maxnorm, *, out=None) -> Tensor
- Returns a tensor where each sub-tensor of :attr:`input` along dimension
- :attr:`dim` is normalized such that the `p`-norm of the sub-tensor is lower
- than the value :attr:`maxnorm`
- .. note:: If the norm of a row is lower than `maxnorm`, the row is unchanged
- Args:
- input (Tensor): the input tensor.
- p (float): the power for the norm computation
- dim (int): the dimension to slice over to get the sub-tensors
- maxnorm (float): the maximum norm to keep each sub-tensor under
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> x = torch.ones(3, 3)
- >>> x[1].fill_(2)
- tensor([ 2., 2., 2.])
- >>> x[2].fill_(3)
- tensor([ 3., 3., 3.])
- >>> x
- tensor([[ 1., 1., 1.],
- [ 2., 2., 2.],
- [ 3., 3., 3.]])
- >>> torch.renorm(x, 1, 0, 5)
- tensor([[ 1.0000, 1.0000, 1.0000],
- [ 1.6667, 1.6667, 1.6667],
- [ 1.6667, 1.6667, 1.6667]])
- """
- @overload
- def repeat_interleave(
- input: Tensor,
- repeats: Tensor,
- dim: _int | None = None,
- *,
- output_size: _int | SymInt | None = None,
- ) -> Tensor:
- r"""
- repeat_interleave(input, repeats, dim=None, *, output_size=None) -> Tensor
- Repeat elements of a tensor.
- .. warning::
- This is different from :meth:`torch.Tensor.repeat` but similar to ``numpy.repeat``.
- Args:
- input (Tensor): the input tensor.
- repeats (Tensor or int): The number of repetitions for each element.
- repeats is broadcasted to fit the shape of the given axis.
- dim (int, optional): The dimension along which to repeat values.
- By default, use the flattened input array, and return a flat output
- array.
- Keyword args:
- output_size (int, optional): Total output size for the given axis
- ( e.g. sum of repeats). If given, it will avoid stream synchronization
- needed to calculate output shape of the tensor.
- Returns:
- Tensor: Repeated tensor which has the same shape as input, except along the given axis.
- Example::
- >>> x = torch.tensor([1, 2, 3])
- >>> x.repeat_interleave(2)
- tensor([1, 1, 2, 2, 3, 3])
- >>> y = torch.tensor([[1, 2], [3, 4]])
- >>> torch.repeat_interleave(y, 2)
- tensor([1, 1, 2, 2, 3, 3, 4, 4])
- >>> torch.repeat_interleave(y, 3, dim=1)
- tensor([[1, 1, 1, 2, 2, 2],
- [3, 3, 3, 4, 4, 4]])
- >>> torch.repeat_interleave(y, torch.tensor([1, 2]), dim=0)
- tensor([[1, 2],
- [3, 4],
- [3, 4]])
- >>> torch.repeat_interleave(y, torch.tensor([1, 2]), dim=0, output_size=3)
- tensor([[1, 2],
- [3, 4],
- [3, 4]])
- If the `repeats` is `tensor([n1, n2, n3, ...])`, then the output will be
- `tensor([0, 0, ..., 1, 1, ..., 2, 2, ..., ...])` where `0` appears `n1` times,
- `1` appears `n2` times, `2` appears `n3` times, etc.
- .. function:: repeat_interleave(repeats, *) -> Tensor
- :noindex:
- Repeats 0 repeats[0] times, 1 repeats[1] times, 2 repeats[2] times, etc.
- Args:
- repeats (Tensor): The number of repetitions for each element.
- Returns:
- Tensor: Repeated tensor of size `sum(repeats)`.
- Example::
- >>> torch.repeat_interleave(torch.tensor([1, 2, 3]))
- tensor([0, 1, 1, 2, 2, 2])
- """
- @overload
- def repeat_interleave(
- repeats: Tensor,
- *,
- output_size: _int | SymInt | None = None,
- ) -> Tensor:
- r"""
- repeat_interleave(input, repeats, dim=None, *, output_size=None) -> Tensor
- Repeat elements of a tensor.
- .. warning::
- This is different from :meth:`torch.Tensor.repeat` but similar to ``numpy.repeat``.
- Args:
- input (Tensor): the input tensor.
- repeats (Tensor or int): The number of repetitions for each element.
- repeats is broadcasted to fit the shape of the given axis.
- dim (int, optional): The dimension along which to repeat values.
- By default, use the flattened input array, and return a flat output
- array.
- Keyword args:
- output_size (int, optional): Total output size for the given axis
- ( e.g. sum of repeats). If given, it will avoid stream synchronization
- needed to calculate output shape of the tensor.
- Returns:
- Tensor: Repeated tensor which has the same shape as input, except along the given axis.
- Example::
- >>> x = torch.tensor([1, 2, 3])
- >>> x.repeat_interleave(2)
- tensor([1, 1, 2, 2, 3, 3])
- >>> y = torch.tensor([[1, 2], [3, 4]])
- >>> torch.repeat_interleave(y, 2)
- tensor([1, 1, 2, 2, 3, 3, 4, 4])
- >>> torch.repeat_interleave(y, 3, dim=1)
- tensor([[1, 1, 1, 2, 2, 2],
- [3, 3, 3, 4, 4, 4]])
- >>> torch.repeat_interleave(y, torch.tensor([1, 2]), dim=0)
- tensor([[1, 2],
- [3, 4],
- [3, 4]])
- >>> torch.repeat_interleave(y, torch.tensor([1, 2]), dim=0, output_size=3)
- tensor([[1, 2],
- [3, 4],
- [3, 4]])
- If the `repeats` is `tensor([n1, n2, n3, ...])`, then the output will be
- `tensor([0, 0, ..., 1, 1, ..., 2, 2, ..., ...])` where `0` appears `n1` times,
- `1` appears `n2` times, `2` appears `n3` times, etc.
- .. function:: repeat_interleave(repeats, *) -> Tensor
- :noindex:
- Repeats 0 repeats[0] times, 1 repeats[1] times, 2 repeats[2] times, etc.
- Args:
- repeats (Tensor): The number of repetitions for each element.
- Returns:
- Tensor: Repeated tensor of size `sum(repeats)`.
- Example::
- >>> torch.repeat_interleave(torch.tensor([1, 2, 3]))
- tensor([0, 1, 1, 2, 2, 2])
- """
- @overload
- def repeat_interleave(
- input: Tensor,
- repeats: _int | SymInt,
- dim: _int | None = None,
- *,
- output_size: _int | SymInt | None = None,
- ) -> Tensor:
- r"""
- repeat_interleave(input, repeats, dim=None, *, output_size=None) -> Tensor
- Repeat elements of a tensor.
- .. warning::
- This is different from :meth:`torch.Tensor.repeat` but similar to ``numpy.repeat``.
- Args:
- input (Tensor): the input tensor.
- repeats (Tensor or int): The number of repetitions for each element.
- repeats is broadcasted to fit the shape of the given axis.
- dim (int, optional): The dimension along which to repeat values.
- By default, use the flattened input array, and return a flat output
- array.
- Keyword args:
- output_size (int, optional): Total output size for the given axis
- ( e.g. sum of repeats). If given, it will avoid stream synchronization
- needed to calculate output shape of the tensor.
- Returns:
- Tensor: Repeated tensor which has the same shape as input, except along the given axis.
- Example::
- >>> x = torch.tensor([1, 2, 3])
- >>> x.repeat_interleave(2)
- tensor([1, 1, 2, 2, 3, 3])
- >>> y = torch.tensor([[1, 2], [3, 4]])
- >>> torch.repeat_interleave(y, 2)
- tensor([1, 1, 2, 2, 3, 3, 4, 4])
- >>> torch.repeat_interleave(y, 3, dim=1)
- tensor([[1, 1, 1, 2, 2, 2],
- [3, 3, 3, 4, 4, 4]])
- >>> torch.repeat_interleave(y, torch.tensor([1, 2]), dim=0)
- tensor([[1, 2],
- [3, 4],
- [3, 4]])
- >>> torch.repeat_interleave(y, torch.tensor([1, 2]), dim=0, output_size=3)
- tensor([[1, 2],
- [3, 4],
- [3, 4]])
- If the `repeats` is `tensor([n1, n2, n3, ...])`, then the output will be
- `tensor([0, 0, ..., 1, 1, ..., 2, 2, ..., ...])` where `0` appears `n1` times,
- `1` appears `n2` times, `2` appears `n3` times, etc.
- .. function:: repeat_interleave(repeats, *) -> Tensor
- :noindex:
- Repeats 0 repeats[0] times, 1 repeats[1] times, 2 repeats[2] times, etc.
- Args:
- repeats (Tensor): The number of repetitions for each element.
- Returns:
- Tensor: Repeated tensor of size `sum(repeats)`.
- Example::
- >>> torch.repeat_interleave(torch.tensor([1, 2, 3]))
- tensor([0, 1, 1, 2, 2, 2])
- """
- def reshape(input: Tensor, shape: Sequence[_int | SymInt]) -> Tensor:
- r"""
- reshape(input, shape) -> Tensor
- Returns a tensor with the same data and number of elements as :attr:`input`,
- but with the specified shape. When possible, the returned tensor will be a view
- of :attr:`input`. Otherwise, it will be a copy. Contiguous inputs and inputs
- with compatible strides can be reshaped without copying, but you should not
- depend on the copying vs. viewing behavior.
- See :meth:`torch.Tensor.view` on when it is possible to return a view.
- A single dimension may be -1, in which case it's inferred from the remaining
- dimensions and the number of elements in :attr:`input`.
- Args:
- input (Tensor): the tensor to be reshaped
- shape (tuple of int): the new shape
- Example::
- >>> a = torch.arange(4.)
- >>> torch.reshape(a, (2, 2))
- tensor([[ 0., 1.],
- [ 2., 3.]])
- >>> b = torch.tensor([[0, 1], [2, 3]])
- >>> torch.reshape(b, (-1,))
- tensor([ 0, 1, 2, 3])
- """
- def resize_as_(
- input: Tensor,
- the_template: Tensor,
- *,
- memory_format: memory_format | None = None,
- ) -> Tensor: ...
- def resize_as_sparse_(input: Tensor, the_template: Tensor) -> Tensor: ...
- def resolve_conj(input: Tensor) -> Tensor:
- r"""
- resolve_conj(input) -> Tensor
- Returns a new tensor with materialized conjugation if :attr:`input`'s conjugate bit is set to `True`,
- else returns :attr:`input`. The output tensor will always have its conjugate bit set to `False`.
- Args:
- input (Tensor): the input tensor.
- Example::
- >>> x = torch.tensor([-1 + 1j, -2 + 2j, 3 - 3j])
- >>> y = x.conj()
- >>> y.is_conj()
- True
- >>> z = y.resolve_conj()
- >>> z
- tensor([-1 - 1j, -2 - 2j, 3 + 3j])
- >>> z.is_conj()
- False
- """
- def resolve_neg(input: Tensor) -> Tensor:
- r"""
- resolve_neg(input) -> Tensor
- Returns a new tensor with materialized negation if :attr:`input`'s negative bit is set to `True`,
- else returns :attr:`input`. The output tensor will always have its negative bit set to `False`.
- Args:
- input (Tensor): the input tensor.
- Example::
- >>> x = torch.tensor([-1 + 1j, -2 + 2j, 3 - 3j])
- >>> y = x.conj()
- >>> z = y.imag
- >>> z.is_neg()
- True
- >>> out = z.resolve_neg()
- >>> out
- tensor([-1., -2., 3.])
- >>> out.is_neg()
- False
- """
- @overload
- def result_type(tensor: Tensor, other: Tensor) -> _dtype:
- r"""
- result_type(tensor1, tensor2) -> dtype
- Returns the :class:`torch.dtype` that would result from performing an arithmetic
- operation on the provided input tensors. See type promotion :ref:`documentation <type-promotion-doc>`
- for more information on the type promotion logic.
- Args:
- tensor1 (Tensor or Number): an input tensor or number
- tensor2 (Tensor or Number): an input tensor or number
- Example::
- >>> torch.result_type(torch.tensor([1, 2], dtype=torch.int), 1.0)
- torch.float32
- >>> torch.result_type(torch.tensor([1, 2], dtype=torch.uint8), torch.tensor(1))
- torch.uint8
- """
- @overload
- def result_type(scalar: Number | _complex, tensor: Tensor) -> _dtype:
- r"""
- result_type(tensor1, tensor2) -> dtype
- Returns the :class:`torch.dtype` that would result from performing an arithmetic
- operation on the provided input tensors. See type promotion :ref:`documentation <type-promotion-doc>`
- for more information on the type promotion logic.
- Args:
- tensor1 (Tensor or Number): an input tensor or number
- tensor2 (Tensor or Number): an input tensor or number
- Example::
- >>> torch.result_type(torch.tensor([1, 2], dtype=torch.int), 1.0)
- torch.float32
- >>> torch.result_type(torch.tensor([1, 2], dtype=torch.uint8), torch.tensor(1))
- torch.uint8
- """
- @overload
- def result_type(tensor: Tensor, other: Number | _complex) -> _dtype:
- r"""
- result_type(tensor1, tensor2) -> dtype
- Returns the :class:`torch.dtype` that would result from performing an arithmetic
- operation on the provided input tensors. See type promotion :ref:`documentation <type-promotion-doc>`
- for more information on the type promotion logic.
- Args:
- tensor1 (Tensor or Number): an input tensor or number
- tensor2 (Tensor or Number): an input tensor or number
- Example::
- >>> torch.result_type(torch.tensor([1, 2], dtype=torch.int), 1.0)
- torch.float32
- >>> torch.result_type(torch.tensor([1, 2], dtype=torch.uint8), torch.tensor(1))
- torch.uint8
- """
- @overload
- def result_type(
- scalar1: Number | _complex,
- scalar2: Number | _complex,
- ) -> _dtype:
- r"""
- result_type(tensor1, tensor2) -> dtype
- Returns the :class:`torch.dtype` that would result from performing an arithmetic
- operation on the provided input tensors. See type promotion :ref:`documentation <type-promotion-doc>`
- for more information on the type promotion logic.
- Args:
- tensor1 (Tensor or Number): an input tensor or number
- tensor2 (Tensor or Number): an input tensor or number
- Example::
- >>> torch.result_type(torch.tensor([1, 2], dtype=torch.int), 1.0)
- torch.float32
- >>> torch.result_type(torch.tensor([1, 2], dtype=torch.uint8), torch.tensor(1))
- torch.uint8
- """
- def rms_norm(
- input: Tensor,
- normalized_shape: Sequence[_int | SymInt],
- weight: Tensor | None = None,
- eps: _float | None = None,
- ) -> Tensor: ...
- @overload
- def rnn_relu(
- data: Tensor,
- batch_sizes: Tensor,
- hx: Tensor,
- params: tuple[Tensor, ...] | list[Tensor] | None,
- has_biases: _bool,
- num_layers: _int,
- dropout: _float,
- train: _bool,
- bidirectional: _bool,
- ) -> tuple[Tensor, Tensor]: ...
- @overload
- def rnn_relu(
- input: Tensor,
- hx: Tensor,
- params: tuple[Tensor, ...] | list[Tensor] | None,
- has_biases: _bool,
- num_layers: _int,
- dropout: _float,
- train: _bool,
- bidirectional: _bool,
- batch_first: _bool,
- ) -> tuple[Tensor, Tensor]: ...
- def rnn_relu_cell(
- input: Tensor,
- hx: Tensor,
- w_ih: Tensor,
- w_hh: Tensor,
- b_ih: Tensor | None = None,
- b_hh: Tensor | None = None,
- ) -> Tensor: ...
- @overload
- def rnn_tanh(
- data: Tensor,
- batch_sizes: Tensor,
- hx: Tensor,
- params: tuple[Tensor, ...] | list[Tensor] | None,
- has_biases: _bool,
- num_layers: _int,
- dropout: _float,
- train: _bool,
- bidirectional: _bool,
- ) -> tuple[Tensor, Tensor]: ...
- @overload
- def rnn_tanh(
- input: Tensor,
- hx: Tensor,
- params: tuple[Tensor, ...] | list[Tensor] | None,
- has_biases: _bool,
- num_layers: _int,
- dropout: _float,
- train: _bool,
- bidirectional: _bool,
- batch_first: _bool,
- ) -> tuple[Tensor, Tensor]: ...
- def rnn_tanh_cell(
- input: Tensor,
- hx: Tensor,
- w_ih: Tensor,
- w_hh: Tensor,
- b_ih: Tensor | None = None,
- b_hh: Tensor | None = None,
- ) -> Tensor: ...
- def roll(
- input: Tensor,
- shifts: _int | SymInt | Sequence[_int | SymInt],
- dims: _int | _size = (),
- ) -> Tensor:
- r"""
- roll(input, shifts, dims=None) -> Tensor
- Roll the tensor :attr:`input` along the given dimension(s). Elements that are
- shifted beyond the last position are re-introduced at the first position. If
- :attr:`dims` is `None`, the tensor will be flattened before rolling and then
- restored to the original shape.
- Args:
- input (Tensor): the input tensor.
- shifts (int or tuple of ints): The number of places by which the elements
- of the tensor are shifted. If shifts is a tuple, dims must be a tuple of
- the same size, and each dimension will be rolled by the corresponding
- value
- dims (int or tuple of ints): Axis along which to roll
- Example::
- >>> x = torch.tensor([1, 2, 3, 4, 5, 6, 7, 8]).view(4, 2)
- >>> x
- tensor([[1, 2],
- [3, 4],
- [5, 6],
- [7, 8]])
- >>> torch.roll(x, 1)
- tensor([[8, 1],
- [2, 3],
- [4, 5],
- [6, 7]])
- >>> torch.roll(x, 1, 0)
- tensor([[7, 8],
- [1, 2],
- [3, 4],
- [5, 6]])
- >>> torch.roll(x, -1, 0)
- tensor([[3, 4],
- [5, 6],
- [7, 8],
- [1, 2]])
- >>> torch.roll(x, shifts=(2, 1), dims=(0, 1))
- tensor([[6, 5],
- [8, 7],
- [2, 1],
- [4, 3]])
- """
- def rot90(input: Tensor, k: _int = 1, dims: _size = (0, 1)) -> Tensor:
- r"""
- rot90(input, k=1, dims=(0, 1)) -> Tensor
- Rotate an n-D tensor by 90 degrees in the plane specified by dims axis.
- Rotation direction is from the first towards the second axis if k > 0, and from the second towards the first for k < 0.
- Args:
- input (Tensor): the input tensor.
- k (int): number of times to rotate. Default value is 1
- dims (a list or tuple): axis to rotate. Default value is [0, 1]
- Example::
- >>> x = torch.arange(4).view(2, 2)
- >>> x
- tensor([[0, 1],
- [2, 3]])
- >>> torch.rot90(x, 1, [0, 1])
- tensor([[1, 3],
- [0, 2]])
- >>> x = torch.arange(8).view(2, 2, 2)
- >>> x
- tensor([[[0, 1],
- [2, 3]],
- [[4, 5],
- [6, 7]]])
- >>> torch.rot90(x, 1, [1, 2])
- tensor([[[1, 3],
- [0, 2]],
- [[5, 7],
- [4, 6]]])
- """
- @overload
- def round(input: Tensor, *, out: Tensor | None = None) -> Tensor:
- r"""
- round(input, *, decimals=0, out=None) -> Tensor
- Rounds elements of :attr:`input` to the nearest integer.
- For integer inputs, follows the array-api convention of returning a
- copy of the input tensor.
- The return type of output is same as that of input's dtype.
- .. note::
- This function implements the "round half to even" to
- break ties when a number is equidistant from two
- integers (e.g. `round(2.5)` is 2).
- When the :attr:\`decimals\` argument is specified the
- algorithm used is similar to NumPy's `around`. This
- algorithm is fast but inexact and it can easily
- overflow for low precision dtypes.
- Eg. `round(tensor([10000], dtype=torch.float16), decimals=3)` is `inf`.
- .. seealso::
- :func:`torch.ceil`, which rounds up.
- :func:`torch.floor`, which rounds down.
- :func:`torch.trunc`, which rounds towards zero.
- Args:
- input (Tensor): the input tensor.
- decimals (int): Number of decimal places to round to (default: 0).
- If decimals is negative, it specifies the number of positions
- to the left of the decimal point.
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> torch.round(torch.tensor((4.7, -2.3, 9.1, -7.7)))
- tensor([ 5., -2., 9., -8.])
- >>> # Values equidistant from two integers are rounded towards the
- >>> # the nearest even value (zero is treated as even)
- >>> torch.round(torch.tensor([-0.5, 0.5, 1.5, 2.5]))
- tensor([-0., 0., 2., 2.])
- >>> # A positive decimals argument rounds to the to that decimal place
- >>> torch.round(torch.tensor([0.1234567]), decimals=3)
- tensor([0.1230])
- >>> # A negative decimals argument rounds to the left of the decimal
- >>> torch.round(torch.tensor([1200.1234567]), decimals=-3)
- tensor([1000.])
- """
- @overload
- def round(
- input: Tensor,
- *,
- decimals: _int,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- round(input, *, decimals=0, out=None) -> Tensor
- Rounds elements of :attr:`input` to the nearest integer.
- For integer inputs, follows the array-api convention of returning a
- copy of the input tensor.
- The return type of output is same as that of input's dtype.
- .. note::
- This function implements the "round half to even" to
- break ties when a number is equidistant from two
- integers (e.g. `round(2.5)` is 2).
- When the :attr:\`decimals\` argument is specified the
- algorithm used is similar to NumPy's `around`. This
- algorithm is fast but inexact and it can easily
- overflow for low precision dtypes.
- Eg. `round(tensor([10000], dtype=torch.float16), decimals=3)` is `inf`.
- .. seealso::
- :func:`torch.ceil`, which rounds up.
- :func:`torch.floor`, which rounds down.
- :func:`torch.trunc`, which rounds towards zero.
- Args:
- input (Tensor): the input tensor.
- decimals (int): Number of decimal places to round to (default: 0).
- If decimals is negative, it specifies the number of positions
- to the left of the decimal point.
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> torch.round(torch.tensor((4.7, -2.3, 9.1, -7.7)))
- tensor([ 5., -2., 9., -8.])
- >>> # Values equidistant from two integers are rounded towards the
- >>> # the nearest even value (zero is treated as even)
- >>> torch.round(torch.tensor([-0.5, 0.5, 1.5, 2.5]))
- tensor([-0., 0., 2., 2.])
- >>> # A positive decimals argument rounds to the to that decimal place
- >>> torch.round(torch.tensor([0.1234567]), decimals=3)
- tensor([0.1230])
- >>> # A negative decimals argument rounds to the left of the decimal
- >>> torch.round(torch.tensor([1200.1234567]), decimals=-3)
- tensor([1000.])
- """
- @overload
- def round_(input: Tensor) -> Tensor: ...
- @overload
- def round_(input: Tensor, *, decimals: _int) -> Tensor: ...
- def row_indices_copy(input: Tensor, *, out: Tensor | None = None) -> Tensor: ...
- def row_stack(
- tensors: tuple[Tensor, ...] | list[Tensor] | None,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- row_stack(tensors, *, out=None) -> Tensor
- Alias of :func:`torch.vstack`.
- """
- def rrelu(
- input: Tensor,
- lower: Number | _complex = 0.125,
- upper: Number | _complex = 0.3333333333333333,
- training: _bool = False,
- generator: Generator | None = None,
- ) -> Tensor: ...
- def rrelu_(
- input: Tensor,
- lower: Number | _complex = 0.125,
- upper: Number | _complex = 0.3333333333333333,
- training: _bool = False,
- generator: Generator | None = None,
- ) -> Tensor: ...
- def rsqrt(input: Tensor, *, out: Tensor | None = None) -> Tensor:
- r"""
- rsqrt(input, *, out=None) -> Tensor
- Returns a new tensor with the reciprocal of the square-root of each of
- the elements of :attr:`input`.
- .. math::
- \text{out}_{i} = \frac{1}{\sqrt{\text{input}_{i}}}
- Args:
- input (Tensor): the input tensor.
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> a = torch.randn(4)
- >>> a
- tensor([-0.0370, 0.2970, 1.5420, -0.9105])
- >>> torch.rsqrt(a)
- tensor([ nan, 1.8351, 0.8053, nan])
- """
- def rsqrt_(input: Tensor) -> Tensor: ...
- @overload
- def rsub(
- input: Tensor,
- other: Tensor,
- *,
- alpha: Number | _complex = 1,
- ) -> Tensor: ...
- @overload
- def rsub(
- input: Tensor,
- other: Number | _complex,
- alpha: Number | _complex = 1,
- ) -> Tensor: ...
- def saddmm(
- input: Tensor,
- mat1: Tensor,
- mat2: Tensor,
- *,
- beta: Number = 1,
- alpha: Number = 1,
- out: Tensor | None = None,
- ) -> Tensor: ...
- def scalar_tensor(
- s: Number | _complex,
- *,
- dtype: _dtype | None = None,
- layout: _layout | None = None,
- device: DeviceLikeType | None = None,
- pin_memory: _bool | None = False,
- requires_grad: _bool | None = False,
- ) -> Tensor: ...
- @overload
- def scatter(
- input: Tensor,
- dim: _int,
- index: Tensor,
- src: Tensor,
- *,
- reduce: str,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- scatter(input, dim, index, src) -> Tensor
- Out-of-place version of :meth:`torch.Tensor.scatter_`
- """
- @overload
- def scatter(
- input: Tensor,
- dim: _int,
- index: Tensor,
- src: Tensor,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- scatter(input, dim, index, src) -> Tensor
- Out-of-place version of :meth:`torch.Tensor.scatter_`
- """
- @overload
- def scatter(
- input: Tensor,
- dim: _int,
- index: Tensor,
- value: Number | _complex,
- *,
- reduce: str,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- scatter(input, dim, index, src) -> Tensor
- Out-of-place version of :meth:`torch.Tensor.scatter_`
- """
- @overload
- def scatter(
- input: Tensor,
- dim: str | EllipsisType | None,
- index: Tensor,
- src: Tensor,
- ) -> Tensor:
- r"""
- scatter(input, dim, index, src) -> Tensor
- Out-of-place version of :meth:`torch.Tensor.scatter_`
- """
- @overload
- def scatter(
- input: Tensor,
- dim: _int,
- index: Tensor,
- value: Number | _complex,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- scatter(input, dim, index, src) -> Tensor
- Out-of-place version of :meth:`torch.Tensor.scatter_`
- """
- @overload
- def scatter(
- input: Tensor,
- dim: str | EllipsisType | None,
- index: Tensor,
- value: Number | _complex,
- ) -> Tensor:
- r"""
- scatter(input, dim, index, src) -> Tensor
- Out-of-place version of :meth:`torch.Tensor.scatter_`
- """
- @overload
- def scatter_add(
- input: Tensor,
- dim: _int,
- index: Tensor,
- src: Tensor,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- scatter_add(input, dim, index, src) -> Tensor
- Out-of-place version of :meth:`torch.Tensor.scatter_add_`
- """
- @overload
- def scatter_add(
- input: Tensor,
- dim: str | EllipsisType | None,
- index: Tensor,
- src: Tensor,
- ) -> Tensor:
- r"""
- scatter_add(input, dim, index, src) -> Tensor
- Out-of-place version of :meth:`torch.Tensor.scatter_add_`
- """
- def scatter_reduce(
- input: Tensor,
- dim: _int,
- index: Tensor,
- src: Tensor,
- reduce: str,
- *,
- include_self: _bool = True,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- scatter_reduce(input, dim, index, src, reduce, *, include_self=True) -> Tensor
- Out-of-place version of :meth:`torch.Tensor.scatter_reduce_`
- """
- @overload
- def searchsorted(
- sorted_sequence: Tensor,
- input: Tensor,
- *,
- out_int32: _bool = False,
- right: _bool = False,
- side: str | None = None,
- sorter: Tensor | None = None,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- searchsorted(sorted_sequence, values, *, out_int32=False, right=False, side=None, out=None, sorter=None) -> Tensor
- Find the indices from the *innermost* dimension of :attr:`sorted_sequence` such that, if the
- corresponding values in :attr:`values` were inserted before the indices, when sorted, the order
- of the corresponding *innermost* dimension within :attr:`sorted_sequence` would be preserved.
- Return a new tensor with the same size as :attr:`values`. More formally,
- the returned index satisfies the following rules:
- .. list-table::
- :widths: 12 10 78
- :header-rows: 1
- * - :attr:`sorted_sequence`
- - :attr:`right`
- - *returned index satisfies*
- * - 1-D
- - False
- - ``sorted_sequence[i-1] < values[m][n]...[l][x] <= sorted_sequence[i]``
- * - 1-D
- - True
- - ``sorted_sequence[i-1] <= values[m][n]...[l][x] < sorted_sequence[i]``
- * - N-D
- - False
- - ``sorted_sequence[m][n]...[l][i-1] < values[m][n]...[l][x] <= sorted_sequence[m][n]...[l][i]``
- * - N-D
- - True
- - ``sorted_sequence[m][n]...[l][i-1] <= values[m][n]...[l][x] < sorted_sequence[m][n]...[l][i]``
- Args:
- sorted_sequence (Tensor): N-D or 1-D tensor, containing monotonically increasing sequence on the *innermost*
- dimension unless :attr:`sorter` is provided, in which case the sequence does not
- need to be sorted
- values (Tensor or Scalar): N-D tensor or a Scalar containing the search value(s).
- Keyword args:
- out_int32 (bool, optional): indicate the output data type. torch.int32 if True, torch.int64 otherwise.
- Default value is False, i.e. default output data type is torch.int64.
- right (bool, optional): if False, return the first suitable location that is found. If True, return the
- last such index. If no suitable index found, return 0 for non-numerical value
- (eg. nan, inf) or the size of *innermost* dimension within :attr:`sorted_sequence`
- (one pass the last index of the *innermost* dimension). In other words, if False,
- gets the lower bound index for each value in :attr:`values` on the corresponding
- *innermost* dimension of the :attr:`sorted_sequence`. If True, gets the upper
- bound index instead. Default value is False. :attr:`side` does the same and is
- preferred. It will error if :attr:`side` is set to "left" while this is True.
- side (str, optional): the same as :attr:`right` but preferred. "left" corresponds to False for :attr:`right`
- and "right" corresponds to True for :attr:`right`. It will error if this is set to
- "left" while :attr:`right` is True. Default value is None.
- out (Tensor, optional): the output tensor, must be the same size as :attr:`values` if provided.
- sorter (LongTensor, optional): if provided, a tensor matching the shape of the unsorted
- :attr:`sorted_sequence` containing a sequence of indices that sort it in the
- ascending order on the innermost dimension
- Example::
- >>> sorted_sequence = torch.tensor([[1, 3, 5, 7, 9], [2, 4, 6, 8, 10]])
- >>> sorted_sequence
- tensor([[ 1, 3, 5, 7, 9],
- [ 2, 4, 6, 8, 10]])
- >>> values = torch.tensor([[3, 6, 9], [3, 6, 9]])
- >>> values
- tensor([[3, 6, 9],
- [3, 6, 9]])
- >>> torch.searchsorted(sorted_sequence, values)
- tensor([[1, 3, 4],
- [1, 2, 4]])
- >>> torch.searchsorted(sorted_sequence, values, side='right')
- tensor([[2, 3, 5],
- [1, 3, 4]])
- >>> sorted_sequence_1d = torch.tensor([1, 3, 5, 7, 9])
- >>> sorted_sequence_1d
- tensor([1, 3, 5, 7, 9])
- >>> torch.searchsorted(sorted_sequence_1d, values)
- tensor([[1, 3, 4],
- [1, 3, 4]])
- """
- @overload
- def searchsorted(
- sorted_sequence: Tensor,
- self: Number | _complex,
- *,
- out_int32: _bool = False,
- right: _bool = False,
- side: str | None = None,
- sorter: Tensor | None = None,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- searchsorted(sorted_sequence, values, *, out_int32=False, right=False, side=None, out=None, sorter=None) -> Tensor
- Find the indices from the *innermost* dimension of :attr:`sorted_sequence` such that, if the
- corresponding values in :attr:`values` were inserted before the indices, when sorted, the order
- of the corresponding *innermost* dimension within :attr:`sorted_sequence` would be preserved.
- Return a new tensor with the same size as :attr:`values`. More formally,
- the returned index satisfies the following rules:
- .. list-table::
- :widths: 12 10 78
- :header-rows: 1
- * - :attr:`sorted_sequence`
- - :attr:`right`
- - *returned index satisfies*
- * - 1-D
- - False
- - ``sorted_sequence[i-1] < values[m][n]...[l][x] <= sorted_sequence[i]``
- * - 1-D
- - True
- - ``sorted_sequence[i-1] <= values[m][n]...[l][x] < sorted_sequence[i]``
- * - N-D
- - False
- - ``sorted_sequence[m][n]...[l][i-1] < values[m][n]...[l][x] <= sorted_sequence[m][n]...[l][i]``
- * - N-D
- - True
- - ``sorted_sequence[m][n]...[l][i-1] <= values[m][n]...[l][x] < sorted_sequence[m][n]...[l][i]``
- Args:
- sorted_sequence (Tensor): N-D or 1-D tensor, containing monotonically increasing sequence on the *innermost*
- dimension unless :attr:`sorter` is provided, in which case the sequence does not
- need to be sorted
- values (Tensor or Scalar): N-D tensor or a Scalar containing the search value(s).
- Keyword args:
- out_int32 (bool, optional): indicate the output data type. torch.int32 if True, torch.int64 otherwise.
- Default value is False, i.e. default output data type is torch.int64.
- right (bool, optional): if False, return the first suitable location that is found. If True, return the
- last such index. If no suitable index found, return 0 for non-numerical value
- (eg. nan, inf) or the size of *innermost* dimension within :attr:`sorted_sequence`
- (one pass the last index of the *innermost* dimension). In other words, if False,
- gets the lower bound index for each value in :attr:`values` on the corresponding
- *innermost* dimension of the :attr:`sorted_sequence`. If True, gets the upper
- bound index instead. Default value is False. :attr:`side` does the same and is
- preferred. It will error if :attr:`side` is set to "left" while this is True.
- side (str, optional): the same as :attr:`right` but preferred. "left" corresponds to False for :attr:`right`
- and "right" corresponds to True for :attr:`right`. It will error if this is set to
- "left" while :attr:`right` is True. Default value is None.
- out (Tensor, optional): the output tensor, must be the same size as :attr:`values` if provided.
- sorter (LongTensor, optional): if provided, a tensor matching the shape of the unsorted
- :attr:`sorted_sequence` containing a sequence of indices that sort it in the
- ascending order on the innermost dimension
- Example::
- >>> sorted_sequence = torch.tensor([[1, 3, 5, 7, 9], [2, 4, 6, 8, 10]])
- >>> sorted_sequence
- tensor([[ 1, 3, 5, 7, 9],
- [ 2, 4, 6, 8, 10]])
- >>> values = torch.tensor([[3, 6, 9], [3, 6, 9]])
- >>> values
- tensor([[3, 6, 9],
- [3, 6, 9]])
- >>> torch.searchsorted(sorted_sequence, values)
- tensor([[1, 3, 4],
- [1, 2, 4]])
- >>> torch.searchsorted(sorted_sequence, values, side='right')
- tensor([[2, 3, 5],
- [1, 3, 4]])
- >>> sorted_sequence_1d = torch.tensor([1, 3, 5, 7, 9])
- >>> sorted_sequence_1d
- tensor([1, 3, 5, 7, 9])
- >>> torch.searchsorted(sorted_sequence_1d, values)
- tensor([[1, 3, 4],
- [1, 3, 4]])
- """
- def segment_reduce(
- data: Tensor,
- reduce: str,
- *,
- lengths: Tensor | None = None,
- indices: Tensor | None = None,
- offsets: Tensor | None = None,
- axis: _int = 0,
- unsafe: _bool = False,
- initial: Number | _complex | None = None,
- ) -> Tensor:
- r"""
- segment_reduce(data: Tensor, reduce: str, *, lengths: Tensor | None = None, indices: Tensor | None = None, offsets: Tensor | None = None, axis: _int = 0, unsafe: _bool = False, initial: Number | _complex | None = None) -> Tensor # noqa: B950
- Perform a segment reduction operation on the input tensor along the specified axis.
- Args:
- data (Tensor): The input tensor on which the segment reduction operation will be performed.
- reduce (str): The type of reduction operation. Supported values are ``sum``, ``mean``, ``max``, ``min``, ``prod``.
- Keyword args:
- lengths (Tensor, optional): Length of each segment. Default: ``None``.
- offsets (Tensor, optional): Offset of each segment. Default: ``None``.
- axis (int, optional): The axis perform reduction. Default: ``0``.
- unsafe (bool, optional): Skip validation If `True`. Default: ``False``.
- initial (Number, optional): The initial value for the reduction operation. Default: ``None``.
- Example::
- >>> data = torch.tensor([[1, 2, 3, 4],[5, 6, 7, 8],[9, 10, 11, 12]], dtype=torch.float32, device='cuda')
- >>> lengths = torch.tensor([2, 1], device='cuda')
- >>> torch.segment_reduce(data, 'max', lengths=lengths)
- tensor([[ 5., 6., 7., 8.],
- [ 9., 10., 11., 12.]], device='cuda:0')
- """
- @overload
- def select(input: Tensor, dim: _int, index: _int | SymInt) -> Tensor:
- r"""
- select(input, dim, index) -> Tensor
- Slices the :attr:`input` tensor along the selected dimension at the given index.
- This function returns a view of the original tensor with the given dimension removed.
- .. note:: If :attr:`input` is a sparse tensor and returning a view of
- the tensor is not possible, a RuntimeError exception is
- raised. In this is the case, consider using
- :func:`torch.select_copy` function.
- Args:
- input (Tensor): the input tensor.
- dim (int): the dimension to slice
- index (int): the index to select with
- .. note::
- :meth:`select` is equivalent to slicing. For example,
- ``tensor.select(0, index)`` is equivalent to ``tensor[index]`` and
- ``tensor.select(2, index)`` is equivalent to ``tensor[:,:,index]``.
- """
- @overload
- def select(
- input: Tensor,
- dim: str | EllipsisType | None,
- index: _int,
- ) -> Tensor:
- r"""
- select(input, dim, index) -> Tensor
- Slices the :attr:`input` tensor along the selected dimension at the given index.
- This function returns a view of the original tensor with the given dimension removed.
- .. note:: If :attr:`input` is a sparse tensor and returning a view of
- the tensor is not possible, a RuntimeError exception is
- raised. In this is the case, consider using
- :func:`torch.select_copy` function.
- Args:
- input (Tensor): the input tensor.
- dim (int): the dimension to slice
- index (int): the index to select with
- .. note::
- :meth:`select` is equivalent to slicing. For example,
- ``tensor.select(0, index)`` is equivalent to ``tensor[index]`` and
- ``tensor.select(2, index)`` is equivalent to ``tensor[:,:,index]``.
- """
- def select_copy(
- input: Tensor,
- dim: _int,
- index: _int | SymInt,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- Performs the same operation as :func:`torch.select`, but all output tensors
- are freshly created instead of aliasing the input.
- """
- def select_scatter(
- input: Tensor,
- src: Tensor,
- dim: _int,
- index: _int | SymInt,
- ) -> Tensor:
- r"""
- select_scatter(input, src, dim, index) -> Tensor
- Embeds the values of the :attr:`src` tensor into :attr:`input` at the given index.
- This function returns a tensor with fresh storage; it does not create a view.
- Args:
- input (Tensor): the input tensor.
- src (Tensor): The tensor to embed into :attr:`input`
- dim (int): the dimension to insert the slice into.
- index (int): the index to select with
- .. note::
- :attr:`src` must be of the proper size in order to be embedded
- into :attr:`input`. Specifically, it should have the same shape as
- ``torch.select(input, dim, index)``
- Example::
- >>> a = torch.zeros(2, 2)
- >>> b = torch.ones(2)
- >>> a.select_scatter(b, 0, 0)
- tensor([[1., 1.],
- [0., 0.]])
- """
- def selu(input: Tensor) -> Tensor: ...
- def selu_(input: Tensor) -> Tensor: ...
- def set_flush_denormal(mode: _bool) -> _bool:
- r"""
- set_flush_denormal(mode) -> bool
- Disables denormal floating numbers on CPU.
- Returns ``True`` if your system supports flushing denormal numbers and it
- successfully configures flush denormal mode. :meth:`~torch.set_flush_denormal`
- is supported on x86 architectures supporting SSE3 and AArch64 architecture.
- Args:
- mode (bool): Controls whether to enable flush denormal mode or not
- Example::
- >>> torch.set_flush_denormal(True)
- True
- >>> torch.tensor([1e-323], dtype=torch.float64)
- tensor([ 0.], dtype=torch.float64)
- >>> torch.set_flush_denormal(False)
- True
- >>> torch.tensor([1e-323], dtype=torch.float64)
- tensor(9.88131e-324 *
- [ 1.0000], dtype=torch.float64)
- """
- def set_num_interop_threads(num: _int) -> None:
- r"""
- set_num_interop_threads(int)
- Sets the number of threads used for interop parallelism
- (e.g. in JIT interpreter) on CPU.
- .. warning::
- Can only be called once and before any inter-op parallel work
- is started (e.g. JIT execution).
- """
- def set_num_threads(num: _int) -> None:
- r"""
- set_num_threads(int)
- Sets the number of threads used for intraop parallelism on CPU.
- .. warning::
- To ensure that the correct number of threads is used, set_num_threads
- must be called before running eager, JIT or autograd code.
- """
- def sgn(input: Tensor, *, out: Tensor | None = None) -> Tensor:
- r"""
- sgn(input, *, out=None) -> Tensor
- This function is an extension of torch.sign() to complex tensors.
- It computes a new tensor whose elements have
- the same angles as the corresponding elements of :attr:`input` and
- absolute values (i.e. magnitudes) of one for complex tensors and
- is equivalent to torch.sign() for non-complex tensors.
- .. math::
- \text{out}_{i} = \begin{cases}
- 0 & |\text{{input}}_i| == 0 \\
- \frac{{\text{{input}}_i}}{|{\text{{input}}_i}|} & \text{otherwise}
- \end{cases}
- Args:
- input (Tensor): the input tensor.
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> t = torch.tensor([3+4j, 7-24j, 0, 1+2j])
- >>> t.sgn()
- tensor([0.6000+0.8000j, 0.2800-0.9600j, 0.0000+0.0000j, 0.4472+0.8944j])
- """
- def sigmoid(input: Tensor, *, out: Tensor | None = None) -> Tensor:
- r"""
- sigmoid(input, *, out=None) -> Tensor
- Alias for :func:`torch.special.expit`.
- """
- def sigmoid_(input: Tensor) -> Tensor: ...
- def sign(input: Tensor, *, out: Tensor | None = None) -> Tensor:
- r"""
- sign(input, *, out=None) -> Tensor
- Returns a new tensor with the signs of the elements of :attr:`input`.
- .. math::
- \text{out}_{i} = \operatorname{sgn}(\text{input}_{i})
- Args:
- input (Tensor): the input tensor.
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> a = torch.tensor([0.7, -1.2, 0., 2.3])
- >>> a
- tensor([ 0.7000, -1.2000, 0.0000, 2.3000])
- >>> torch.sign(a)
- tensor([ 1., -1., 0., 1.])
- """
- def signbit(input: Tensor, *, out: Tensor | None = None) -> Tensor:
- r"""
- signbit(input, *, out=None) -> Tensor
- Tests if each element of :attr:`input` has its sign bit set or not.
- Args:
- input (Tensor): the input tensor.
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> a = torch.tensor([0.7, -1.2, 0., 2.3])
- >>> torch.signbit(a)
- tensor([ False, True, False, False])
- >>> a = torch.tensor([-0.0, 0.0])
- >>> torch.signbit(a)
- tensor([ True, False])
- .. note::
- signbit handles signed zeros, so negative zero (-0) returns True.
- """
- def sin(input: Tensor, *, out: Tensor | None = None) -> Tensor:
- r"""
- sin(input, *, out=None) -> Tensor
- Returns a new tensor with the sine of the elements of :attr:`input`.
- .. math::
- \text{out}_{i} = \sin(\text{input}_{i})
- Args:
- input (Tensor): the input tensor.
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> a = torch.randn(4)
- >>> a
- tensor([-0.5461, 0.1347, -2.7266, -0.2746])
- >>> torch.sin(a)
- tensor([-0.5194, 0.1343, -0.4032, -0.2711])
- """
- def sin_(input: Tensor) -> Tensor: ...
- def sinc(input: Tensor, *, out: Tensor | None = None) -> Tensor:
- r"""
- sinc(input, *, out=None) -> Tensor
- Alias for :func:`torch.special.sinc`.
- """
- def sinc_(input: Tensor) -> Tensor: ...
- def sinh(input: Tensor, *, out: Tensor | None = None) -> Tensor:
- r"""
- sinh(input, *, out=None) -> Tensor
- Returns a new tensor with the hyperbolic sine of the elements of
- :attr:`input`.
- .. math::
- \text{out}_{i} = \sinh(\text{input}_{i})
- Args:
- input (Tensor): the input tensor.
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> a = torch.randn(4)
- >>> a
- tensor([ 0.5380, -0.8632, -0.1265, 0.9399])
- >>> torch.sinh(a)
- tensor([ 0.5644, -0.9744, -0.1268, 1.0845])
- .. note::
- When :attr:`input` is on the CPU, the implementation of torch.sinh may use
- the Sleef library, which rounds very large results to infinity or negative
- infinity. See `here <https://sleef.org/purec.xhtml>`_ for details.
- """
- def sinh_(input: Tensor) -> Tensor: ...
- def slice_copy(
- input: Tensor,
- dim: _int = 0,
- start: _int | SymInt | None = None,
- end: _int | SymInt | None = None,
- step: _int | SymInt = 1,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- Performs the same operation as :func:`torch.slice`, but all output tensors
- are freshly created instead of aliasing the input.
- """
- def slice_inverse(
- input: Tensor,
- src: Tensor,
- dim: _int = 0,
- start: _int | SymInt | None = None,
- end: _int | SymInt | None = None,
- step: _int | SymInt = 1,
- ) -> Tensor: ...
- def slice_scatter(
- input: Tensor,
- src: Tensor,
- dim: _int = 0,
- start: _int | SymInt | None = None,
- end: _int | SymInt | None = None,
- step: _int | SymInt = 1,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- slice_scatter(input, src, dim=0, start=None, end=None, step=1) -> Tensor
- Embeds the values of the :attr:`src` tensor into :attr:`input` at the given
- dimension.
- This function returns a tensor with fresh storage; it does not create a view.
- Args:
- input (Tensor): the input tensor.
- src (Tensor): The tensor to embed into :attr:`input`
- dim (int): the dimension to insert the slice into
- start (Optional[int]): the start index of where to insert the slice
- end (Optional[int]): the end index of where to insert the slice
- step (int): the how many elements to skip in
- Example::
- >>> a = torch.zeros(8, 8)
- >>> b = torch.ones(2, 8)
- >>> a.slice_scatter(b, start=6)
- tensor([[0., 0., 0., 0., 0., 0., 0., 0.],
- [0., 0., 0., 0., 0., 0., 0., 0.],
- [0., 0., 0., 0., 0., 0., 0., 0.],
- [0., 0., 0., 0., 0., 0., 0., 0.],
- [0., 0., 0., 0., 0., 0., 0., 0.],
- [0., 0., 0., 0., 0., 0., 0., 0.],
- [1., 1., 1., 1., 1., 1., 1., 1.],
- [1., 1., 1., 1., 1., 1., 1., 1.]])
- >>> b = torch.ones(8, 2)
- >>> a.slice_scatter(b, dim=1, start=2, end=6, step=2)
- tensor([[0., 0., 1., 0., 1., 0., 0., 0.],
- [0., 0., 1., 0., 1., 0., 0., 0.],
- [0., 0., 1., 0., 1., 0., 0., 0.],
- [0., 0., 1., 0., 1., 0., 0., 0.],
- [0., 0., 1., 0., 1., 0., 0., 0.],
- [0., 0., 1., 0., 1., 0., 0., 0.],
- [0., 0., 1., 0., 1., 0., 0., 0.],
- [0., 0., 1., 0., 1., 0., 0., 0.]])
- """
- def slogdet(
- input: Tensor,
- *,
- out: Tensor | tuple[Tensor, ...] | list[Tensor] | None = None,
- ) -> torch.return_types.slogdet:
- r"""
- slogdet(input) -> (Tensor, Tensor)
- Alias for :func:`torch.linalg.slogdet`
- """
- def smm(input: Tensor, mat2: Tensor) -> Tensor:
- r"""
- smm(input, mat) -> Tensor
- Performs a matrix multiplication of the sparse matrix :attr:`input`
- with the dense matrix :attr:`mat`.
- Args:
- input (Tensor): a sparse matrix to be matrix multiplied
- mat (Tensor): a dense matrix to be matrix multiplied
- """
- @overload
- def softmax(
- input: Tensor,
- dim: _int,
- dtype: _dtype | None = None,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- softmax(input, dim, *, dtype=None) -> Tensor
- Alias for :func:`torch.nn.functional.softmax`.
- """
- @overload
- def softmax(
- input: Tensor,
- dim: str | EllipsisType | None,
- *,
- dtype: _dtype | None = None,
- ) -> Tensor:
- r"""
- softmax(input, dim, *, dtype=None) -> Tensor
- Alias for :func:`torch.nn.functional.softmax`.
- """
- @overload
- def sort(
- input: Tensor,
- *,
- stable: _bool | None,
- dim: _int = -1,
- descending: _bool = False,
- out: Tensor | tuple[Tensor, ...] | list[Tensor] | None = None,
- ) -> torch.return_types.sort:
- r"""
- sort(input, dim=-1, descending=False, *, stable=False, out=None) -> (Tensor, LongTensor)
- Sorts the elements of the :attr:`input` tensor along a given dimension
- in ascending order by value.
- If :attr:`dim` is not given, the last dimension of the `input` is chosen.
- If :attr:`descending` is ``True`` then the elements are sorted in descending
- order by value.
- If :attr:`stable` is ``True`` then the sorting routine becomes stable, preserving
- the order of equivalent elements.
- A namedtuple of (values, indices) is returned, where the `values` are the
- sorted values and `indices` are the indices of the elements in the original
- `input` tensor.
- Args:
- input (Tensor): the input tensor.
- dim (int, optional): the dimension to sort along
- descending (bool, optional): controls the sorting order (ascending or descending)
- Keyword args:
- stable (bool, optional): makes the sorting routine stable, which guarantees that the order
- of equivalent elements is preserved.
- out (tuple, optional): the output tuple of (`Tensor`, `LongTensor`) that can
- be optionally given to be used as output buffers
- Example::
- >>> x = torch.randn(3, 4)
- >>> sorted, indices = torch.sort(x)
- >>> sorted
- tensor([[-0.2162, 0.0608, 0.6719, 2.3332],
- [-0.5793, 0.0061, 0.6058, 0.9497],
- [-0.5071, 0.3343, 0.9553, 1.0960]])
- >>> indices
- tensor([[ 1, 0, 2, 3],
- [ 3, 1, 0, 2],
- [ 0, 3, 1, 2]])
- >>> sorted, indices = torch.sort(x, 0)
- >>> sorted
- tensor([[-0.5071, -0.2162, 0.6719, -0.5793],
- [ 0.0608, 0.0061, 0.9497, 0.3343],
- [ 0.6058, 0.9553, 1.0960, 2.3332]])
- >>> indices
- tensor([[ 2, 0, 0, 1],
- [ 0, 1, 1, 2],
- [ 1, 2, 2, 0]])
- >>> x = torch.tensor([0, 1] * 9)
- >>> x.sort()
- torch.return_types.sort(
- values=tensor([0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1]),
- indices=tensor([ 2, 16, 4, 6, 14, 8, 0, 10, 12, 9, 17, 15, 13, 11, 7, 5, 3, 1]))
- >>> x.sort(stable=True)
- torch.return_types.sort(
- values=tensor([0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1]),
- indices=tensor([ 0, 2, 4, 6, 8, 10, 12, 14, 16, 1, 3, 5, 7, 9, 11, 13, 15, 17]))
- """
- @overload
- def sort(
- input: Tensor,
- dim: _int = -1,
- descending: _bool = False,
- *,
- out: Tensor | tuple[Tensor, ...] | list[Tensor] | None = None,
- ) -> torch.return_types.sort:
- r"""
- sort(input, dim=-1, descending=False, *, stable=False, out=None) -> (Tensor, LongTensor)
- Sorts the elements of the :attr:`input` tensor along a given dimension
- in ascending order by value.
- If :attr:`dim` is not given, the last dimension of the `input` is chosen.
- If :attr:`descending` is ``True`` then the elements are sorted in descending
- order by value.
- If :attr:`stable` is ``True`` then the sorting routine becomes stable, preserving
- the order of equivalent elements.
- A namedtuple of (values, indices) is returned, where the `values` are the
- sorted values and `indices` are the indices of the elements in the original
- `input` tensor.
- Args:
- input (Tensor): the input tensor.
- dim (int, optional): the dimension to sort along
- descending (bool, optional): controls the sorting order (ascending or descending)
- Keyword args:
- stable (bool, optional): makes the sorting routine stable, which guarantees that the order
- of equivalent elements is preserved.
- out (tuple, optional): the output tuple of (`Tensor`, `LongTensor`) that can
- be optionally given to be used as output buffers
- Example::
- >>> x = torch.randn(3, 4)
- >>> sorted, indices = torch.sort(x)
- >>> sorted
- tensor([[-0.2162, 0.0608, 0.6719, 2.3332],
- [-0.5793, 0.0061, 0.6058, 0.9497],
- [-0.5071, 0.3343, 0.9553, 1.0960]])
- >>> indices
- tensor([[ 1, 0, 2, 3],
- [ 3, 1, 0, 2],
- [ 0, 3, 1, 2]])
- >>> sorted, indices = torch.sort(x, 0)
- >>> sorted
- tensor([[-0.5071, -0.2162, 0.6719, -0.5793],
- [ 0.0608, 0.0061, 0.9497, 0.3343],
- [ 0.6058, 0.9553, 1.0960, 2.3332]])
- >>> indices
- tensor([[ 2, 0, 0, 1],
- [ 0, 1, 1, 2],
- [ 1, 2, 2, 0]])
- >>> x = torch.tensor([0, 1] * 9)
- >>> x.sort()
- torch.return_types.sort(
- values=tensor([0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1]),
- indices=tensor([ 2, 16, 4, 6, 14, 8, 0, 10, 12, 9, 17, 15, 13, 11, 7, 5, 3, 1]))
- >>> x.sort(stable=True)
- torch.return_types.sort(
- values=tensor([0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1]),
- indices=tensor([ 0, 2, 4, 6, 8, 10, 12, 14, 16, 1, 3, 5, 7, 9, 11, 13, 15, 17]))
- """
- @overload
- def sort(
- input: Tensor,
- *,
- stable: _bool | None,
- dim: str | EllipsisType | None,
- descending: _bool = False,
- out: Tensor | tuple[Tensor, ...] | list[Tensor] | None = None,
- ) -> torch.return_types.sort:
- r"""
- sort(input, dim=-1, descending=False, *, stable=False, out=None) -> (Tensor, LongTensor)
- Sorts the elements of the :attr:`input` tensor along a given dimension
- in ascending order by value.
- If :attr:`dim` is not given, the last dimension of the `input` is chosen.
- If :attr:`descending` is ``True`` then the elements are sorted in descending
- order by value.
- If :attr:`stable` is ``True`` then the sorting routine becomes stable, preserving
- the order of equivalent elements.
- A namedtuple of (values, indices) is returned, where the `values` are the
- sorted values and `indices` are the indices of the elements in the original
- `input` tensor.
- Args:
- input (Tensor): the input tensor.
- dim (int, optional): the dimension to sort along
- descending (bool, optional): controls the sorting order (ascending or descending)
- Keyword args:
- stable (bool, optional): makes the sorting routine stable, which guarantees that the order
- of equivalent elements is preserved.
- out (tuple, optional): the output tuple of (`Tensor`, `LongTensor`) that can
- be optionally given to be used as output buffers
- Example::
- >>> x = torch.randn(3, 4)
- >>> sorted, indices = torch.sort(x)
- >>> sorted
- tensor([[-0.2162, 0.0608, 0.6719, 2.3332],
- [-0.5793, 0.0061, 0.6058, 0.9497],
- [-0.5071, 0.3343, 0.9553, 1.0960]])
- >>> indices
- tensor([[ 1, 0, 2, 3],
- [ 3, 1, 0, 2],
- [ 0, 3, 1, 2]])
- >>> sorted, indices = torch.sort(x, 0)
- >>> sorted
- tensor([[-0.5071, -0.2162, 0.6719, -0.5793],
- [ 0.0608, 0.0061, 0.9497, 0.3343],
- [ 0.6058, 0.9553, 1.0960, 2.3332]])
- >>> indices
- tensor([[ 2, 0, 0, 1],
- [ 0, 1, 1, 2],
- [ 1, 2, 2, 0]])
- >>> x = torch.tensor([0, 1] * 9)
- >>> x.sort()
- torch.return_types.sort(
- values=tensor([0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1]),
- indices=tensor([ 2, 16, 4, 6, 14, 8, 0, 10, 12, 9, 17, 15, 13, 11, 7, 5, 3, 1]))
- >>> x.sort(stable=True)
- torch.return_types.sort(
- values=tensor([0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1]),
- indices=tensor([ 0, 2, 4, 6, 8, 10, 12, 14, 16, 1, 3, 5, 7, 9, 11, 13, 15, 17]))
- """
- @overload
- def sort(
- input: Tensor,
- dim: str | EllipsisType | None,
- descending: _bool = False,
- *,
- out: Tensor | tuple[Tensor, ...] | list[Tensor] | None = None,
- ) -> torch.return_types.sort:
- r"""
- sort(input, dim=-1, descending=False, *, stable=False, out=None) -> (Tensor, LongTensor)
- Sorts the elements of the :attr:`input` tensor along a given dimension
- in ascending order by value.
- If :attr:`dim` is not given, the last dimension of the `input` is chosen.
- If :attr:`descending` is ``True`` then the elements are sorted in descending
- order by value.
- If :attr:`stable` is ``True`` then the sorting routine becomes stable, preserving
- the order of equivalent elements.
- A namedtuple of (values, indices) is returned, where the `values` are the
- sorted values and `indices` are the indices of the elements in the original
- `input` tensor.
- Args:
- input (Tensor): the input tensor.
- dim (int, optional): the dimension to sort along
- descending (bool, optional): controls the sorting order (ascending or descending)
- Keyword args:
- stable (bool, optional): makes the sorting routine stable, which guarantees that the order
- of equivalent elements is preserved.
- out (tuple, optional): the output tuple of (`Tensor`, `LongTensor`) that can
- be optionally given to be used as output buffers
- Example::
- >>> x = torch.randn(3, 4)
- >>> sorted, indices = torch.sort(x)
- >>> sorted
- tensor([[-0.2162, 0.0608, 0.6719, 2.3332],
- [-0.5793, 0.0061, 0.6058, 0.9497],
- [-0.5071, 0.3343, 0.9553, 1.0960]])
- >>> indices
- tensor([[ 1, 0, 2, 3],
- [ 3, 1, 0, 2],
- [ 0, 3, 1, 2]])
- >>> sorted, indices = torch.sort(x, 0)
- >>> sorted
- tensor([[-0.5071, -0.2162, 0.6719, -0.5793],
- [ 0.0608, 0.0061, 0.9497, 0.3343],
- [ 0.6058, 0.9553, 1.0960, 2.3332]])
- >>> indices
- tensor([[ 2, 0, 0, 1],
- [ 0, 1, 1, 2],
- [ 1, 2, 2, 0]])
- >>> x = torch.tensor([0, 1] * 9)
- >>> x.sort()
- torch.return_types.sort(
- values=tensor([0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1]),
- indices=tensor([ 2, 16, 4, 6, 14, 8, 0, 10, 12, 9, 17, 15, 13, 11, 7, 5, 3, 1]))
- >>> x.sort(stable=True)
- torch.return_types.sort(
- values=tensor([0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1]),
- indices=tensor([ 0, 2, 4, 6, 8, 10, 12, 14, 16, 1, 3, 5, 7, 9, 11, 13, 15, 17]))
- """
- def sparse_bsc_tensor(
- ccol_indices: Tensor | list,
- row_indices: Tensor | list,
- values: Tensor | list,
- size: _size | None = None,
- *,
- dtype: _dtype | None = None,
- device: DeviceLikeType | None = None,
- requires_grad: _bool = False,
- check_invariants: _bool | None = None,
- ) -> Tensor:
- r"""
- sparse_bsc_tensor(ccol_indices, row_indices, values, size=None, *, dtype=None, device=None, pin_memory=False, requires_grad=False, check_invariants=None) -> Tensor
- Constructs a :ref:`sparse tensor in BSC (Block Compressed Sparse
- Column)) <sparse-bsc-docs>` with specified 2-dimensional blocks at the
- given :attr:`ccol_indices` and :attr:`row_indices`. Sparse matrix
- multiplication operations in BSC format are typically faster than that
- for sparse tensors in COO format. Make you have a look at :ref:`the
- note on the data type of the indices <sparse-bsc-docs>`.
- .. note::
- If the ``device`` argument is not specified the device of the given
- :attr:`values` and indices tensor(s) must match. If, however, the
- argument is specified the input Tensors will be converted to the
- given device and in turn determine the device of the constructed
- sparse tensor.
- Args:
- ccol_indices (array_like): (B+1)-dimensional array of size
- ``(*batchsize, ncolblocks + 1)``. The last element of each
- batch is the number of non-zeros. This tensor encodes the
- index in values and row_indices depending on where the given
- column starts. Each successive number in the tensor subtracted
- by the number before it denotes the number of elements in a
- given column.
- row_indices (array_like): Row block coordinates of each block in
- values. (B+1)-dimensional tensor with the same length
- as values.
- values (array_list): Initial blocks for the tensor. Can be a list,
- tuple, NumPy ``ndarray``, and other types that
- represents a (1 + 2 + K)-dimensional tensor where ``K`` is the
- number of dense dimensions.
- size (list, tuple, :class:`torch.Size`, optional): Size of the
- sparse tensor: ``(*batchsize, nrows * blocksize[0], ncols *
- blocksize[1], *densesize)`` If not provided, the size will be
- inferred as the minimum size big enough to hold all non-zero
- blocks.
- Keyword args:
- dtype (:class:`torch.dtype`, optional): the desired data type of
- returned tensor. Default: if None, infers data type from
- :attr:`values`.
- device (:class:`torch.device`, optional): the desired device of
- returned tensor. Default: if None, uses the current device
- for the default tensor type (see
- :func:`torch.set_default_device`). :attr:`device` will be
- the CPU for CPU tensor types and the current CUDA device for
- CUDA tensor types.
- pin_memory (bool, optional): If set, returned tensor would be allocated in
- the pinned memory. Works only for CPU tensors. Default: ``False``.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- check_invariants (bool, optional): If sparse tensor invariants are checked.
- Default: as returned by :func:`torch.sparse.check_sparse_tensor_invariants.is_enabled`,
- initially False.
- Example::
- >>> ccol_indices = [0, 1, 2]
- >>> row_indices = [0, 1]
- >>> values = [[[1, 2], [3, 4]], [[5, 6], [7, 8]]]
- >>> torch.sparse_bsc_tensor(torch.tensor(ccol_indices, dtype=torch.int64),
- ... torch.tensor(row_indices, dtype=torch.int64),
- ... torch.tensor(values), dtype=torch.double)
- tensor(ccol_indices=tensor([0, 1, 2]),
- row_indices=tensor([0, 1]),
- values=tensor([[[1., 2.],
- [3., 4.]],
- [[5., 6.],
- [7., 8.]]]), size=(2, 2), nnz=2, dtype=torch.float64,
- layout=torch.sparse_bsc)
- """
- def sparse_bsr_tensor(
- crow_indices: Tensor | list,
- col_indices: Tensor | list,
- values: Tensor | list,
- size: _size | None = None,
- *,
- dtype: _dtype | None = None,
- device: DeviceLikeType | None = None,
- requires_grad: _bool = False,
- check_invariants: _bool | None = None,
- ) -> Tensor:
- r"""
- sparse_bsr_tensor(crow_indices, col_indices, values, size=None, *, dtype=None, device=None, pin_memory=False, requires_grad=False, check_invariants=None) -> Tensor
- Constructs a :ref:`sparse tensor in BSR (Block Compressed Sparse Row))
- <sparse-bsr-docs>` with specified 2-dimensional blocks at the given
- :attr:`crow_indices` and :attr:`col_indices`. Sparse matrix
- multiplication operations in BSR format are typically faster than that
- for sparse tensors in COO format. Make you have a look at :ref:`the
- note on the data type of the indices <sparse-bsr-docs>`.
- .. note::
- If the ``device`` argument is not specified the device of the given
- :attr:`values` and indices tensor(s) must match. If, however, the
- argument is specified the input Tensors will be converted to the
- given device and in turn determine the device of the constructed
- sparse tensor.
- Args:
- crow_indices (array_like): (B+1)-dimensional array of size
- ``(*batchsize, nrowblocks + 1)``. The last element of each
- batch is the number of non-zeros. This tensor encodes the
- block index in values and col_indices depending on where the
- given row block starts. Each successive number in the tensor
- subtracted by the number before it denotes the number of
- blocks in a given row.
- col_indices (array_like): Column block coordinates of each block
- in values. (B+1)-dimensional tensor with the same length as
- values.
- values (array_list): Initial values for the tensor. Can be a list,
- tuple, NumPy ``ndarray``, scalar, and other types that
- represents a (1 + 2 + K)-dimensional tensor where ``K`` is the
- number of dense dimensions.
- size (list, tuple, :class:`torch.Size`, optional): Size of the
- sparse tensor: ``(*batchsize, nrows * blocksize[0], ncols *
- blocksize[1], *densesize)`` where ``blocksize ==
- values.shape[1:3]``. If not provided, the size will be
- inferred as the minimum size big enough to hold all non-zero
- blocks.
- Keyword args:
- dtype (:class:`torch.dtype`, optional): the desired data type of
- returned tensor. Default: if None, infers data type from
- :attr:`values`.
- device (:class:`torch.device`, optional): the desired device of
- returned tensor. Default: if None, uses the current device
- for the default tensor type (see
- :func:`torch.set_default_device`). :attr:`device` will be
- the CPU for CPU tensor types and the current CUDA device for
- CUDA tensor types.
- pin_memory (bool, optional): If set, returned tensor would be allocated in
- the pinned memory. Works only for CPU tensors. Default: ``False``.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- check_invariants (bool, optional): If sparse tensor invariants are checked.
- Default: as returned by :func:`torch.sparse.check_sparse_tensor_invariants.is_enabled`,
- initially False.
- Example::
- >>> crow_indices = [0, 1, 2]
- >>> col_indices = [0, 1]
- >>> values = [[[1, 2], [3, 4]], [[5, 6], [7, 8]]]
- >>> torch.sparse_bsr_tensor(torch.tensor(crow_indices, dtype=torch.int64),
- ... torch.tensor(col_indices, dtype=torch.int64),
- ... torch.tensor(values), dtype=torch.double)
- tensor(crow_indices=tensor([0, 1, 2]),
- col_indices=tensor([0, 1]),
- values=tensor([[[1., 2.],
- [3., 4.]],
- [[5., 6.],
- [7., 8.]]]), size=(2, 2), nnz=2, dtype=torch.float64,
- layout=torch.sparse_bsr)
- """
- def sparse_compressed_tensor(
- compressed_indices: Tensor | list,
- plain_indices: Tensor | list,
- values: Tensor | list,
- size: _size | None = None,
- *,
- dtype: _dtype | None = None,
- layout: _layout | None = None,
- device: DeviceLikeType | None = None,
- requires_grad: _bool = False,
- check_invariants: _bool | None = None,
- ) -> Tensor:
- r"""
- sparse_compressed_tensor(compressed_indices, plain_indices, values, size=None, *, dtype=None, layout=None, device=None, pin_memory=False, requires_grad=False, check_invariants=None) -> Tensor
- Constructs a :ref:`sparse tensor in Compressed Sparse format - CSR,
- CSC, BSR, or BSC - <sparse-compressed-docs>` with specified values at
- the given :attr:`compressed_indices` and :attr:`plain_indices`. Sparse
- matrix multiplication operations in Compressed Sparse format are
- typically faster than that for sparse tensors in COO format. Make you
- have a look at :ref:`the note on the data type of the indices
- <sparse-compressed-docs>`.
- .. note::
- If the ``device`` argument is not specified the device of the given
- :attr:`values` and indices tensor(s) must match. If, however, the
- argument is specified the input Tensors will be converted to the
- given device and in turn determine the device of the constructed
- sparse tensor.
- Args:
- compressed_indices (array_like): (B+1)-dimensional array of size
- ``(*batchsize, compressed_dim_size + 1)``. The last element of
- each batch is the number of non-zero elements or blocks. This
- tensor encodes the index in ``values`` and ``plain_indices``
- depending on where the given compressed dimension (row or
- column) starts. Each successive number in the tensor
- subtracted by the number before it denotes the number of
- elements or blocks in a given compressed dimension.
- plain_indices (array_like): Plain dimension (column or row)
- coordinates of each element or block in values. (B+1)-dimensional
- tensor with the same length as values.
- values (array_list): Initial values for the tensor. Can be a list,
- tuple, NumPy ``ndarray``, scalar, and other types. that
- represents a (1+K)-dimensional (for CSR and CSC layouts) or
- (1+2+K)-dimensional tensor (for BSR and BSC layouts) where
- ``K`` is the number of dense dimensions.
- size (list, tuple, :class:`torch.Size`, optional): Size of the
- sparse tensor: ``(*batchsize, nrows * blocksize[0], ncols *
- blocksize[1], *densesize)`` where ``blocksize[0] ==
- blocksize[1] == 1`` for CSR and CSC formats. If not provided,
- the size will be inferred as the minimum size big enough to
- hold all non-zero elements or blocks.
- Keyword args:
- dtype (:class:`torch.dtype`, optional): the desired data type of
- returned tensor. Default: if None, infers data type from
- :attr:`values`.
- layout (:class:`torch.layout`, required): the desired layout of
- returned tensor: :attr:`torch.sparse_csr`,
- :attr:`torch.sparse_csc`, :attr:`torch.sparse_bsr`, or
- :attr:`torch.sparse_bsc`.
- device (:class:`torch.device`, optional): the desired device of
- returned tensor. Default: if None, uses the current device
- for the default tensor type (see
- :func:`torch.set_default_device`). :attr:`device` will be
- the CPU for CPU tensor types and the current CUDA device for
- CUDA tensor types.
- pin_memory (bool, optional): If set, returned tensor would be allocated in
- the pinned memory. Works only for CPU tensors. Default: ``False``.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- check_invariants (bool, optional): If sparse tensor invariants are checked.
- Default: as returned by :func:`torch.sparse.check_sparse_tensor_invariants.is_enabled`,
- initially False.
- Example::
- >>> compressed_indices = [0, 2, 4]
- >>> plain_indices = [0, 1, 0, 1]
- >>> values = [1, 2, 3, 4]
- >>> torch.sparse_compressed_tensor(torch.tensor(compressed_indices, dtype=torch.int64),
- ... torch.tensor(plain_indices, dtype=torch.int64),
- ... torch.tensor(values), dtype=torch.double, layout=torch.sparse_csr)
- tensor(crow_indices=tensor([0, 2, 4]),
- col_indices=tensor([0, 1, 0, 1]),
- values=tensor([1., 2., 3., 4.]), size=(2, 2), nnz=4,
- dtype=torch.float64, layout=torch.sparse_csr)
- """
- def sparse_coo_tensor(
- indices: Tensor,
- values: Tensor | list,
- size: _size | None = None,
- *,
- dtype: _dtype | None = None,
- device: DeviceLikeType | None = None,
- requires_grad: _bool = False,
- check_invariants: _bool | None = None,
- is_coalesced: _bool | None = None,
- ) -> Tensor:
- r"""
- sparse_coo_tensor(indices, values, size=None, *, dtype=None, device=None, pin_memory=False, requires_grad=False, check_invariants=None, is_coalesced=None) -> Tensor
- Constructs a :ref:`sparse tensor in COO(rdinate) format
- <sparse-coo-docs>` with specified values at the given
- :attr:`indices`.
- .. note::
- This function returns an :ref:`uncoalesced tensor
- <sparse-uncoalesced-coo-docs>` when :attr:`is_coalesced` is
- unspecified or ``None``.
- .. note::
- If the ``device`` argument is not specified the device of the given
- :attr:`values` and indices tensor(s) must match. If, however, the
- argument is specified the input Tensors will be converted to the
- given device and in turn determine the device of the constructed
- sparse tensor.
- Args:
- indices (array_like): Initial data for the tensor. Can be a list, tuple,
- NumPy ``ndarray``, scalar, and other types. Will be cast to a :class:`torch.LongTensor`
- internally. The indices are the coordinates of the non-zero values in the matrix, and thus
- should be two-dimensional where the first dimension is the number of tensor dimensions and
- the second dimension is the number of non-zero values.
- values (array_like): Initial values for the tensor. Can be a list, tuple,
- NumPy ``ndarray``, scalar, and other types.
- size (list, tuple, or :class:`torch.Size`, optional): Size of the sparse tensor. If not
- provided the size will be inferred as the minimum size big enough to hold all non-zero
- elements.
- Keyword args:
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor.
- Default: if None, infers data type from :attr:`values`.
- device (:class:`torch.device`, optional): the desired device of returned tensor.
- Default: if None, uses the current device for the default tensor type
- (see :func:`torch.set_default_device`). :attr:`device` will be the CPU
- for CPU tensor types and the current CUDA device for CUDA tensor types.
- pin_memory (bool, optional): If set, returned tensor would be allocated in
- the pinned memory. Works only for CPU tensors. Default: ``False``.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- check_invariants (bool, optional): If sparse tensor invariants are checked.
- Default: as returned by :func:`torch.sparse.check_sparse_tensor_invariants.is_enabled`,
- initially False.
- is_coalesced (bool, optional): When``True``, the caller is
- responsible for providing tensor indices that correspond to a
- coalesced tensor. If the :attr:`check_invariants` flag is
- False, no error will be raised if the prerequisites are not
- met and this will lead to silently incorrect results. To force
- coalescion please use :meth:`coalesce` on the resulting
- Tensor.
- Default: None: except for trivial cases (e.g. nnz < 2) the
- resulting Tensor has is_coalesced set to ``False```.
- Example::
- >>> i = torch.tensor([[0, 1, 1],
- ... [2, 0, 2]])
- >>> v = torch.tensor([3, 4, 5], dtype=torch.float32)
- >>> torch.sparse_coo_tensor(i, v, [2, 4])
- tensor(indices=tensor([[0, 1, 1],
- [2, 0, 2]]),
- values=tensor([3., 4., 5.]),
- size=(2, 4), nnz=3, layout=torch.sparse_coo)
- >>> torch.sparse_coo_tensor(i, v) # Shape inference
- tensor(indices=tensor([[0, 1, 1],
- [2, 0, 2]]),
- values=tensor([3., 4., 5.]),
- size=(2, 3), nnz=3, layout=torch.sparse_coo)
- >>> torch.sparse_coo_tensor(i, v, [2, 4],
- ... dtype=torch.float64,
- ... device=torch.device('cuda:0'))
- tensor(indices=tensor([[0, 1, 1],
- [2, 0, 2]]),
- values=tensor([3., 4., 5.]),
- device='cuda:0', size=(2, 4), nnz=3, dtype=torch.float64,
- layout=torch.sparse_coo)
- # Create an empty sparse tensor with the following invariants:
- # 1. sparse_dim + dense_dim = len(SparseTensor.shape)
- # 2. SparseTensor._indices().shape = (sparse_dim, nnz)
- # 3. SparseTensor._values().shape = (nnz, SparseTensor.shape[sparse_dim:])
- #
- # For instance, to create an empty sparse tensor with nnz = 0, dense_dim = 0 and
- # sparse_dim = 1 (hence indices is a 2D tensor of shape = (1, 0))
- >>> S = torch.sparse_coo_tensor(torch.empty([1, 0]), [], [1])
- tensor(indices=tensor([], size=(1, 0)),
- values=tensor([], size=(0,)),
- size=(1,), nnz=0, layout=torch.sparse_coo)
- # and to create an empty sparse tensor with nnz = 0, dense_dim = 1 and
- # sparse_dim = 1
- >>> S = torch.sparse_coo_tensor(torch.empty([1, 0]), torch.empty([0, 2]), [1, 2])
- tensor(indices=tensor([], size=(1, 0)),
- values=tensor([], size=(0, 2)),
- size=(1, 2), nnz=0, layout=torch.sparse_coo)
- .. _torch.sparse: https://pytorch.org/docs/stable/sparse.html
- """
- def sparse_csc_tensor(
- ccol_indices: Tensor | list,
- row_indices: Tensor | list,
- values: Tensor | list,
- size: _size | None = None,
- *,
- dtype: _dtype | None = None,
- device: DeviceLikeType | None = None,
- requires_grad: _bool = False,
- check_invariants: _bool | None = None,
- ) -> Tensor:
- r"""
- sparse_csc_tensor(ccol_indices, row_indices, values, size=None, *, dtype=None, device=None, pin_memory=False, requires_grad=False, check_invariants=None) -> Tensor
- Constructs a :ref:`sparse tensor in CSC (Compressed Sparse Column)
- <sparse-csc-docs>` with specified values at the given
- :attr:`ccol_indices` and :attr:`row_indices`. Sparse matrix
- multiplication operations in CSC format are typically faster than that
- for sparse tensors in COO format. Make you have a look at :ref:`the
- note on the data type of the indices <sparse-csc-docs>`.
- .. note::
- If the ``device`` argument is not specified the device of the given
- :attr:`values` and indices tensor(s) must match. If, however, the
- argument is specified the input Tensors will be converted to the
- given device and in turn determine the device of the constructed
- sparse tensor.
- Args:
- ccol_indices (array_like): (B+1)-dimensional array of size
- ``(*batchsize, ncols + 1)``. The last element of each batch
- is the number of non-zeros. This tensor encodes the index in
- values and row_indices depending on where the given column
- starts. Each successive number in the tensor subtracted by the
- number before it denotes the number of elements in a given
- column.
- row_indices (array_like): Row coordinates of each element in
- values. (B+1)-dimensional tensor with the same length as
- values.
- values (array_list): Initial values for the tensor. Can be a list,
- tuple, NumPy ``ndarray``, scalar, and other types that
- represents a (1+K)-dimensional tensor where ``K`` is the number
- of dense dimensions.
- size (list, tuple, :class:`torch.Size`, optional): Size of the
- sparse tensor: ``(*batchsize, nrows, ncols, *densesize)``. If
- not provided, the size will be inferred as the minimum size
- big enough to hold all non-zero elements.
- Keyword args:
- dtype (:class:`torch.dtype`, optional): the desired data type of
- returned tensor. Default: if None, infers data type from
- :attr:`values`.
- device (:class:`torch.device`, optional): the desired device of
- returned tensor. Default: if None, uses the current device
- for the default tensor type (see
- :func:`torch.set_default_device`). :attr:`device` will be
- the CPU for CPU tensor types and the current CUDA device for
- CUDA tensor types.
- pin_memory (bool, optional): If set, returned tensor would be allocated in
- the pinned memory. Works only for CPU tensors. Default: ``False``.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- check_invariants (bool, optional): If sparse tensor invariants are checked.
- Default: as returned by :func:`torch.sparse.check_sparse_tensor_invariants.is_enabled`,
- initially False.
- Example::
- >>> ccol_indices = [0, 2, 4]
- >>> row_indices = [0, 1, 0, 1]
- >>> values = [1, 2, 3, 4]
- >>> torch.sparse_csc_tensor(torch.tensor(ccol_indices, dtype=torch.int64),
- ... torch.tensor(row_indices, dtype=torch.int64),
- ... torch.tensor(values), dtype=torch.double)
- tensor(ccol_indices=tensor([0, 2, 4]),
- row_indices=tensor([0, 1, 0, 1]),
- values=tensor([1., 2., 3., 4.]), size=(2, 2), nnz=4,
- dtype=torch.float64, layout=torch.sparse_csc)
- """
- def sparse_csr_tensor(
- crow_indices: Tensor | list,
- col_indices: Tensor | list,
- values: Tensor | list,
- size: _size | None = None,
- *,
- dtype: _dtype | None = None,
- device: DeviceLikeType | None = None,
- requires_grad: _bool = False,
- check_invariants: _bool | None = None,
- ) -> Tensor:
- r"""
- sparse_csr_tensor(crow_indices, col_indices, values, size=None, *, dtype=None, device=None, pin_memory=False, requires_grad=False, check_invariants=None) -> Tensor
- Constructs a :ref:`sparse tensor in CSR (Compressed Sparse Row) <sparse-csr-docs>` with specified
- values at the given :attr:`crow_indices` and :attr:`col_indices`. Sparse matrix multiplication operations
- in CSR format are typically faster than that for sparse tensors in COO format. Make you have a look
- at :ref:`the note on the data type of the indices <sparse-csr-docs>`.
- .. note::
- If the ``device`` argument is not specified the device of the given
- :attr:`values` and indices tensor(s) must match. If, however, the
- argument is specified the input Tensors will be converted to the
- given device and in turn determine the device of the constructed
- sparse tensor.
- Args:
- crow_indices (array_like): (B+1)-dimensional array of size
- ``(*batchsize, nrows + 1)``. The last element of each batch
- is the number of non-zeros. This tensor encodes the index in
- values and col_indices depending on where the given row
- starts. Each successive number in the tensor subtracted by the
- number before it denotes the number of elements in a given
- row.
- col_indices (array_like): Column coordinates of each element in
- values. (B+1)-dimensional tensor with the same length
- as values.
- values (array_list): Initial values for the tensor. Can be a list,
- tuple, NumPy ``ndarray``, scalar, and other types that
- represents a (1+K)-dimensional tensor where ``K`` is the number
- of dense dimensions.
- size (list, tuple, :class:`torch.Size`, optional): Size of the
- sparse tensor: ``(*batchsize, nrows, ncols, *densesize)``. If
- not provided, the size will be inferred as the minimum size
- big enough to hold all non-zero elements.
- Keyword args:
- dtype (:class:`torch.dtype`, optional): the desired data type of
- returned tensor. Default: if None, infers data type from
- :attr:`values`.
- device (:class:`torch.device`, optional): the desired device of
- returned tensor. Default: if None, uses the current device
- for the default tensor type (see
- :func:`torch.set_default_device`). :attr:`device` will be
- the CPU for CPU tensor types and the current CUDA device for
- CUDA tensor types.
- pin_memory (bool, optional): If set, returned tensor would be allocated in
- the pinned memory. Works only for CPU tensors. Default: ``False``.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- check_invariants (bool, optional): If sparse tensor invariants are checked.
- Default: as returned by :func:`torch.sparse.check_sparse_tensor_invariants.is_enabled`,
- initially False.
- Example::
- >>> crow_indices = [0, 2, 4]
- >>> col_indices = [0, 1, 0, 1]
- >>> values = [1, 2, 3, 4]
- >>> torch.sparse_csr_tensor(torch.tensor(crow_indices, dtype=torch.int64),
- ... torch.tensor(col_indices, dtype=torch.int64),
- ... torch.tensor(values), dtype=torch.double)
- tensor(crow_indices=tensor([0, 2, 4]),
- col_indices=tensor([0, 1, 0, 1]),
- values=tensor([1., 2., 3., 4.]), size=(2, 2), nnz=4,
- dtype=torch.float64, layout=torch.sparse_csr)
- """
- def split_copy(
- input: Tensor,
- split_size: _int | SymInt,
- dim: _int = 0,
- *,
- out: tuple[Tensor, ...] | list[Tensor] | None = None,
- ) -> None:
- r"""
- Performs the same operation as :func:`torch.split`, but all output tensors
- are freshly created instead of aliasing the input.
- """
- def split_with_sizes(
- input: Tensor,
- split_sizes: Sequence[_int | SymInt],
- dim: _int = 0,
- ) -> tuple[Tensor, ...]: ...
- def split_with_sizes_copy(
- input: Tensor,
- split_sizes: Sequence[_int | SymInt],
- dim: _int = 0,
- *,
- out: tuple[Tensor, ...] | list[Tensor] | None = None,
- ) -> None:
- r"""
- Performs the same operation as :func:`torch.split_with_sizes`, but all output tensors
- are freshly created instead of aliasing the input.
- """
- def spmm(input: Tensor, mat2: Tensor) -> Tensor: ...
- def sqrt(input: Tensor, *, out: Tensor | None = None) -> Tensor:
- r"""
- sqrt(input, *, out=None) -> Tensor
- Returns a new tensor with the square-root of the elements of :attr:`input`.
- .. math::
- \text{out}_{i} = \sqrt{\text{input}_{i}}
- Args:
- input (Tensor): the input tensor.
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> a = torch.randn(4)
- >>> a
- tensor([-2.0755, 1.0226, 0.0831, 0.4806])
- >>> torch.sqrt(a)
- tensor([ nan, 1.0112, 0.2883, 0.6933])
- """
- def sqrt_(input: Tensor) -> Tensor: ...
- def square(input: Tensor, *, out: Tensor | None = None) -> Tensor:
- r"""
- square(input: Tensor, *, out: Optional[Tensor]) -> Tensor
- Returns a new tensor with the square of the elements of :attr:`input`.
- Args:
- input (Tensor): the input tensor.
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> a = torch.randn(4)
- >>> a
- tensor([-2.0755, 1.0226, 0.0831, 0.4806])
- >>> torch.square(a)
- tensor([ 4.3077, 1.0457, 0.0069, 0.2310])
- """
- def square_(input: Tensor) -> Tensor: ...
- @overload
- def squeeze(input: Tensor) -> Tensor:
- r"""
- squeeze(input: Tensor, dim: Optional[Union[int, List[int]]]) -> Tensor
- Returns a tensor with all specified dimensions of :attr:`input` of size `1` removed.
- For example, if `input` is of shape:
- :math:`(A \times 1 \times B \times C \times 1 \times D)` then the `input.squeeze()`
- will be of shape: :math:`(A \times B \times C \times D)`.
- When :attr:`dim` is given, a squeeze operation is done only in the given
- dimension(s). If `input` is of shape: :math:`(A \times 1 \times B)`,
- ``squeeze(input, 0)`` leaves the tensor unchanged, but ``squeeze(input, 1)``
- will squeeze the tensor to the shape :math:`(A \times B)`.
- .. note:: The returned tensor shares the storage with the input tensor,
- so changing the contents of one will change the contents of the other.
- .. warning:: If the tensor has a batch dimension of size 1, then `squeeze(input)`
- will also remove the batch dimension, which can lead to unexpected
- errors. Consider specifying only the dims you wish to be squeezed.
- Args:
- input (Tensor): the input tensor.
- dim (int or tuple of ints, optional): if given, the input will be squeezed
- only in the specified dimensions.
- .. versionchanged:: 2.0
- :attr:`dim` now accepts tuples of dimensions.
- Example::
- >>> x = torch.zeros(2, 1, 2, 1, 2)
- >>> x.size()
- torch.Size([2, 1, 2, 1, 2])
- >>> y = torch.squeeze(x)
- >>> y.size()
- torch.Size([2, 2, 2])
- >>> y = torch.squeeze(x, 0)
- >>> y.size()
- torch.Size([2, 1, 2, 1, 2])
- >>> y = torch.squeeze(x, 1)
- >>> y.size()
- torch.Size([2, 2, 1, 2])
- >>> y = torch.squeeze(x, (1, 2, 3))
- torch.Size([2, 2, 2])
- """
- @overload
- def squeeze(input: Tensor, dim: _int) -> Tensor:
- r"""
- squeeze(input: Tensor, dim: Optional[Union[int, List[int]]]) -> Tensor
- Returns a tensor with all specified dimensions of :attr:`input` of size `1` removed.
- For example, if `input` is of shape:
- :math:`(A \times 1 \times B \times C \times 1 \times D)` then the `input.squeeze()`
- will be of shape: :math:`(A \times B \times C \times D)`.
- When :attr:`dim` is given, a squeeze operation is done only in the given
- dimension(s). If `input` is of shape: :math:`(A \times 1 \times B)`,
- ``squeeze(input, 0)`` leaves the tensor unchanged, but ``squeeze(input, 1)``
- will squeeze the tensor to the shape :math:`(A \times B)`.
- .. note:: The returned tensor shares the storage with the input tensor,
- so changing the contents of one will change the contents of the other.
- .. warning:: If the tensor has a batch dimension of size 1, then `squeeze(input)`
- will also remove the batch dimension, which can lead to unexpected
- errors. Consider specifying only the dims you wish to be squeezed.
- Args:
- input (Tensor): the input tensor.
- dim (int or tuple of ints, optional): if given, the input will be squeezed
- only in the specified dimensions.
- .. versionchanged:: 2.0
- :attr:`dim` now accepts tuples of dimensions.
- Example::
- >>> x = torch.zeros(2, 1, 2, 1, 2)
- >>> x.size()
- torch.Size([2, 1, 2, 1, 2])
- >>> y = torch.squeeze(x)
- >>> y.size()
- torch.Size([2, 2, 2])
- >>> y = torch.squeeze(x, 0)
- >>> y.size()
- torch.Size([2, 1, 2, 1, 2])
- >>> y = torch.squeeze(x, 1)
- >>> y.size()
- torch.Size([2, 2, 1, 2])
- >>> y = torch.squeeze(x, (1, 2, 3))
- torch.Size([2, 2, 2])
- """
- @overload
- def squeeze(input: Tensor, dim: _size) -> Tensor:
- r"""
- squeeze(input: Tensor, dim: Optional[Union[int, List[int]]]) -> Tensor
- Returns a tensor with all specified dimensions of :attr:`input` of size `1` removed.
- For example, if `input` is of shape:
- :math:`(A \times 1 \times B \times C \times 1 \times D)` then the `input.squeeze()`
- will be of shape: :math:`(A \times B \times C \times D)`.
- When :attr:`dim` is given, a squeeze operation is done only in the given
- dimension(s). If `input` is of shape: :math:`(A \times 1 \times B)`,
- ``squeeze(input, 0)`` leaves the tensor unchanged, but ``squeeze(input, 1)``
- will squeeze the tensor to the shape :math:`(A \times B)`.
- .. note:: The returned tensor shares the storage with the input tensor,
- so changing the contents of one will change the contents of the other.
- .. warning:: If the tensor has a batch dimension of size 1, then `squeeze(input)`
- will also remove the batch dimension, which can lead to unexpected
- errors. Consider specifying only the dims you wish to be squeezed.
- Args:
- input (Tensor): the input tensor.
- dim (int or tuple of ints, optional): if given, the input will be squeezed
- only in the specified dimensions.
- .. versionchanged:: 2.0
- :attr:`dim` now accepts tuples of dimensions.
- Example::
- >>> x = torch.zeros(2, 1, 2, 1, 2)
- >>> x.size()
- torch.Size([2, 1, 2, 1, 2])
- >>> y = torch.squeeze(x)
- >>> y.size()
- torch.Size([2, 2, 2])
- >>> y = torch.squeeze(x, 0)
- >>> y.size()
- torch.Size([2, 1, 2, 1, 2])
- >>> y = torch.squeeze(x, 1)
- >>> y.size()
- torch.Size([2, 2, 1, 2])
- >>> y = torch.squeeze(x, (1, 2, 3))
- torch.Size([2, 2, 2])
- """
- @overload
- def squeeze(input: Tensor, dim: str | EllipsisType | None) -> Tensor:
- r"""
- squeeze(input: Tensor, dim: Optional[Union[int, List[int]]]) -> Tensor
- Returns a tensor with all specified dimensions of :attr:`input` of size `1` removed.
- For example, if `input` is of shape:
- :math:`(A \times 1 \times B \times C \times 1 \times D)` then the `input.squeeze()`
- will be of shape: :math:`(A \times B \times C \times D)`.
- When :attr:`dim` is given, a squeeze operation is done only in the given
- dimension(s). If `input` is of shape: :math:`(A \times 1 \times B)`,
- ``squeeze(input, 0)`` leaves the tensor unchanged, but ``squeeze(input, 1)``
- will squeeze the tensor to the shape :math:`(A \times B)`.
- .. note:: The returned tensor shares the storage with the input tensor,
- so changing the contents of one will change the contents of the other.
- .. warning:: If the tensor has a batch dimension of size 1, then `squeeze(input)`
- will also remove the batch dimension, which can lead to unexpected
- errors. Consider specifying only the dims you wish to be squeezed.
- Args:
- input (Tensor): the input tensor.
- dim (int or tuple of ints, optional): if given, the input will be squeezed
- only in the specified dimensions.
- .. versionchanged:: 2.0
- :attr:`dim` now accepts tuples of dimensions.
- Example::
- >>> x = torch.zeros(2, 1, 2, 1, 2)
- >>> x.size()
- torch.Size([2, 1, 2, 1, 2])
- >>> y = torch.squeeze(x)
- >>> y.size()
- torch.Size([2, 2, 2])
- >>> y = torch.squeeze(x, 0)
- >>> y.size()
- torch.Size([2, 1, 2, 1, 2])
- >>> y = torch.squeeze(x, 1)
- >>> y.size()
- torch.Size([2, 2, 1, 2])
- >>> y = torch.squeeze(x, (1, 2, 3))
- torch.Size([2, 2, 2])
- """
- @overload
- def squeeze_copy(input: Tensor, *, out: Tensor | None = None) -> Tensor:
- r"""
- Performs the same operation as :func:`torch.squeeze`, but all output tensors
- are freshly created instead of aliasing the input.
- """
- @overload
- def squeeze_copy(
- input: Tensor,
- dim: _int,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- Performs the same operation as :func:`torch.squeeze`, but all output tensors
- are freshly created instead of aliasing the input.
- """
- @overload
- def squeeze_copy(
- input: Tensor,
- dim: _size,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- Performs the same operation as :func:`torch.squeeze`, but all output tensors
- are freshly created instead of aliasing the input.
- """
- @overload
- def sspaddmm(
- beta: Number | _complex,
- self: Tensor,
- alpha: Number | _complex,
- mat1: Tensor,
- mat2: Tensor,
- ) -> Tensor:
- r"""
- sspaddmm(input, mat1, mat2, *, beta=1, alpha=1, out=None) -> Tensor
- Matrix multiplies a sparse tensor :attr:`mat1` with a dense tensor
- :attr:`mat2`, then adds the sparse tensor :attr:`input` to the result.
- Note: This function is equivalent to :func:`torch.addmm`, except
- :attr:`input` and :attr:`mat1` are sparse.
- Args:
- input (Tensor): a sparse matrix to be added
- mat1 (Tensor): a sparse matrix to be matrix multiplied
- mat2 (Tensor): a dense matrix to be matrix multiplied
- Keyword args:
- beta (Number, optional): multiplier for :attr:`mat` (:math:`\beta`)
- alpha (Number, optional): multiplier for :math:`mat1 @ mat2` (:math:`\alpha`)
- out (Tensor, optional): the output tensor.
- """
- @overload
- def sspaddmm(
- input: Tensor,
- mat1: Tensor,
- mat2: Tensor,
- *,
- beta: Number | _complex = 1,
- alpha: Number | _complex = 1,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- sspaddmm(input, mat1, mat2, *, beta=1, alpha=1, out=None) -> Tensor
- Matrix multiplies a sparse tensor :attr:`mat1` with a dense tensor
- :attr:`mat2`, then adds the sparse tensor :attr:`input` to the result.
- Note: This function is equivalent to :func:`torch.addmm`, except
- :attr:`input` and :attr:`mat1` are sparse.
- Args:
- input (Tensor): a sparse matrix to be added
- mat1 (Tensor): a sparse matrix to be matrix multiplied
- mat2 (Tensor): a dense matrix to be matrix multiplied
- Keyword args:
- beta (Number, optional): multiplier for :attr:`mat` (:math:`\beta`)
- alpha (Number, optional): multiplier for :math:`mat1 @ mat2` (:math:`\alpha`)
- out (Tensor, optional): the output tensor.
- """
- @overload
- def sspaddmm(
- beta: Number | _complex,
- self: Tensor,
- mat1: Tensor,
- mat2: Tensor,
- ) -> Tensor:
- r"""
- sspaddmm(input, mat1, mat2, *, beta=1, alpha=1, out=None) -> Tensor
- Matrix multiplies a sparse tensor :attr:`mat1` with a dense tensor
- :attr:`mat2`, then adds the sparse tensor :attr:`input` to the result.
- Note: This function is equivalent to :func:`torch.addmm`, except
- :attr:`input` and :attr:`mat1` are sparse.
- Args:
- input (Tensor): a sparse matrix to be added
- mat1 (Tensor): a sparse matrix to be matrix multiplied
- mat2 (Tensor): a dense matrix to be matrix multiplied
- Keyword args:
- beta (Number, optional): multiplier for :attr:`mat` (:math:`\beta`)
- alpha (Number, optional): multiplier for :math:`mat1 @ mat2` (:math:`\alpha`)
- out (Tensor, optional): the output tensor.
- """
- def stack(
- tensors: tuple[Tensor, ...] | list[Tensor] | None,
- dim: _int = 0,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- stack(tensors, dim=0, *, out=None) -> Tensor
- Concatenates a sequence of tensors along a new dimension.
- All tensors need to be of the same size.
- .. seealso::
- :func:`torch.cat` concatenates the given sequence along an existing dimension.
- Arguments:
- tensors (sequence of Tensors): sequence of tensors to concatenate
- dim (int, optional): dimension to insert. Has to be between 0 and the number
- of dimensions of concatenated tensors (inclusive). Default: 0
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> x = torch.randn(2, 3)
- >>> x
- tensor([[ 0.3367, 0.1288, 0.2345],
- [ 0.2303, -1.1229, -0.1863]])
- >>> torch.stack((x, x)) # same as torch.stack((x, x), dim=0)
- tensor([[[ 0.3367, 0.1288, 0.2345],
- [ 0.2303, -1.1229, -0.1863]],
- [[ 0.3367, 0.1288, 0.2345],
- [ 0.2303, -1.1229, -0.1863]]])
- >>> torch.stack((x, x)).size()
- torch.Size([2, 2, 3])
- >>> torch.stack((x, x), dim=1)
- tensor([[[ 0.3367, 0.1288, 0.2345],
- [ 0.3367, 0.1288, 0.2345]],
- [[ 0.2303, -1.1229, -0.1863],
- [ 0.2303, -1.1229, -0.1863]]])
- >>> torch.stack((x, x), dim=2)
- tensor([[[ 0.3367, 0.3367],
- [ 0.1288, 0.1288],
- [ 0.2345, 0.2345]],
- [[ 0.2303, 0.2303],
- [-1.1229, -1.1229],
- [-0.1863, -0.1863]]])
- >>> torch.stack((x, x), dim=-1)
- tensor([[[ 0.3367, 0.3367],
- [ 0.1288, 0.1288],
- [ 0.2345, 0.2345]],
- [[ 0.2303, 0.2303],
- [-1.1229, -1.1229],
- [-0.1863, -0.1863]]])
- """
- @overload
- def std(
- input: Tensor,
- dim: _int | _size | None,
- unbiased: _bool = True,
- keepdim: _bool = False,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- std(input, dim=None, *, correction=1, keepdim=False, out=None) -> Tensor
- Calculates the standard deviation over the dimensions specified by :attr:`dim`.
- :attr:`dim` can be a single dimension, list of dimensions, or ``None`` to
- reduce over all dimensions.
- The standard deviation (:math:`\sigma`) is calculated as
- .. math:: \sigma = \sqrt{\frac{1}{\max(0,~N - \delta N)}\sum_{i=0}^{N-1}(x_i-\bar{x})^2}
- where :math:`x` is the sample set of elements, :math:`\bar{x}` is the
- sample mean, :math:`N` is the number of samples and :math:`\delta N` is
- the :attr:`correction`.
- If :attr:`keepdim` is ``True``, the output tensor is of the same size
- as :attr:`input` except in the dimension(s) :attr:`dim` where it is of size 1.
- Otherwise, :attr:`dim` is squeezed (see :func:`torch.squeeze`), resulting in the
- output tensor having 1 (or ``len(dim)``) fewer dimension(s).
- Args:
- input (Tensor): the input tensor.
- dim (int or tuple of ints, optional): the dimension or dimensions to reduce.
- If ``None``, all dimensions are reduced.
- Keyword args:
- correction (int): difference between the sample size and sample degrees of freedom.
- Defaults to `Bessel's correction`_, ``correction=1``.
- .. versionchanged:: 2.0
- Previously this argument was called ``unbiased`` and was a boolean
- with ``True`` corresponding to ``correction=1`` and ``False`` being
- ``correction=0``.
- keepdim (bool, optional): whether the output tensor has :attr:`dim` retained or not. Default: ``False``.
- out (Tensor, optional): the output tensor.
- Example:
- >>> a = torch.tensor(
- ... [[ 0.2035, 1.2959, 1.8101, -0.4644],
- ... [ 1.5027, -0.3270, 0.5905, 0.6538],
- ... [-1.5745, 1.3330, -0.5596, -0.6548],
- ... [ 0.1264, -0.5080, 1.6420, 0.1992]]
- ... ) # fmt: skip
- >>> torch.std(a, dim=1, keepdim=True)
- tensor([[1.0311],
- [0.7477],
- [1.2204],
- [0.9087]])
- .. _Bessel's correction: https://en.wikipedia.org/wiki/Bessel%27s_correction
- """
- @overload
- def std(
- input: Tensor,
- dim: _int | _size | None = None,
- *,
- correction: Number | _complex | None = None,
- keepdim: _bool = False,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- std(input, dim=None, *, correction=1, keepdim=False, out=None) -> Tensor
- Calculates the standard deviation over the dimensions specified by :attr:`dim`.
- :attr:`dim` can be a single dimension, list of dimensions, or ``None`` to
- reduce over all dimensions.
- The standard deviation (:math:`\sigma`) is calculated as
- .. math:: \sigma = \sqrt{\frac{1}{\max(0,~N - \delta N)}\sum_{i=0}^{N-1}(x_i-\bar{x})^2}
- where :math:`x` is the sample set of elements, :math:`\bar{x}` is the
- sample mean, :math:`N` is the number of samples and :math:`\delta N` is
- the :attr:`correction`.
- If :attr:`keepdim` is ``True``, the output tensor is of the same size
- as :attr:`input` except in the dimension(s) :attr:`dim` where it is of size 1.
- Otherwise, :attr:`dim` is squeezed (see :func:`torch.squeeze`), resulting in the
- output tensor having 1 (or ``len(dim)``) fewer dimension(s).
- Args:
- input (Tensor): the input tensor.
- dim (int or tuple of ints, optional): the dimension or dimensions to reduce.
- If ``None``, all dimensions are reduced.
- Keyword args:
- correction (int): difference between the sample size and sample degrees of freedom.
- Defaults to `Bessel's correction`_, ``correction=1``.
- .. versionchanged:: 2.0
- Previously this argument was called ``unbiased`` and was a boolean
- with ``True`` corresponding to ``correction=1`` and ``False`` being
- ``correction=0``.
- keepdim (bool, optional): whether the output tensor has :attr:`dim` retained or not. Default: ``False``.
- out (Tensor, optional): the output tensor.
- Example:
- >>> a = torch.tensor(
- ... [[ 0.2035, 1.2959, 1.8101, -0.4644],
- ... [ 1.5027, -0.3270, 0.5905, 0.6538],
- ... [-1.5745, 1.3330, -0.5596, -0.6548],
- ... [ 0.1264, -0.5080, 1.6420, 0.1992]]
- ... ) # fmt: skip
- >>> torch.std(a, dim=1, keepdim=True)
- tensor([[1.0311],
- [0.7477],
- [1.2204],
- [0.9087]])
- .. _Bessel's correction: https://en.wikipedia.org/wiki/Bessel%27s_correction
- """
- @overload
- def std(input: Tensor, unbiased: _bool = True) -> Tensor:
- r"""
- std(input, dim=None, *, correction=1, keepdim=False, out=None) -> Tensor
- Calculates the standard deviation over the dimensions specified by :attr:`dim`.
- :attr:`dim` can be a single dimension, list of dimensions, or ``None`` to
- reduce over all dimensions.
- The standard deviation (:math:`\sigma`) is calculated as
- .. math:: \sigma = \sqrt{\frac{1}{\max(0,~N - \delta N)}\sum_{i=0}^{N-1}(x_i-\bar{x})^2}
- where :math:`x` is the sample set of elements, :math:`\bar{x}` is the
- sample mean, :math:`N` is the number of samples and :math:`\delta N` is
- the :attr:`correction`.
- If :attr:`keepdim` is ``True``, the output tensor is of the same size
- as :attr:`input` except in the dimension(s) :attr:`dim` where it is of size 1.
- Otherwise, :attr:`dim` is squeezed (see :func:`torch.squeeze`), resulting in the
- output tensor having 1 (or ``len(dim)``) fewer dimension(s).
- Args:
- input (Tensor): the input tensor.
- dim (int or tuple of ints, optional): the dimension or dimensions to reduce.
- If ``None``, all dimensions are reduced.
- Keyword args:
- correction (int): difference between the sample size and sample degrees of freedom.
- Defaults to `Bessel's correction`_, ``correction=1``.
- .. versionchanged:: 2.0
- Previously this argument was called ``unbiased`` and was a boolean
- with ``True`` corresponding to ``correction=1`` and ``False`` being
- ``correction=0``.
- keepdim (bool, optional): whether the output tensor has :attr:`dim` retained or not. Default: ``False``.
- out (Tensor, optional): the output tensor.
- Example:
- >>> a = torch.tensor(
- ... [[ 0.2035, 1.2959, 1.8101, -0.4644],
- ... [ 1.5027, -0.3270, 0.5905, 0.6538],
- ... [-1.5745, 1.3330, -0.5596, -0.6548],
- ... [ 0.1264, -0.5080, 1.6420, 0.1992]]
- ... ) # fmt: skip
- >>> torch.std(a, dim=1, keepdim=True)
- tensor([[1.0311],
- [0.7477],
- [1.2204],
- [0.9087]])
- .. _Bessel's correction: https://en.wikipedia.org/wiki/Bessel%27s_correction
- """
- @overload
- def std(
- input: Tensor,
- dim: Sequence[str | EllipsisType | None],
- *,
- correction: Number | _complex | None = None,
- keepdim: _bool = False,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- std(input, dim=None, *, correction=1, keepdim=False, out=None) -> Tensor
- Calculates the standard deviation over the dimensions specified by :attr:`dim`.
- :attr:`dim` can be a single dimension, list of dimensions, or ``None`` to
- reduce over all dimensions.
- The standard deviation (:math:`\sigma`) is calculated as
- .. math:: \sigma = \sqrt{\frac{1}{\max(0,~N - \delta N)}\sum_{i=0}^{N-1}(x_i-\bar{x})^2}
- where :math:`x` is the sample set of elements, :math:`\bar{x}` is the
- sample mean, :math:`N` is the number of samples and :math:`\delta N` is
- the :attr:`correction`.
- If :attr:`keepdim` is ``True``, the output tensor is of the same size
- as :attr:`input` except in the dimension(s) :attr:`dim` where it is of size 1.
- Otherwise, :attr:`dim` is squeezed (see :func:`torch.squeeze`), resulting in the
- output tensor having 1 (or ``len(dim)``) fewer dimension(s).
- Args:
- input (Tensor): the input tensor.
- dim (int or tuple of ints, optional): the dimension or dimensions to reduce.
- If ``None``, all dimensions are reduced.
- Keyword args:
- correction (int): difference between the sample size and sample degrees of freedom.
- Defaults to `Bessel's correction`_, ``correction=1``.
- .. versionchanged:: 2.0
- Previously this argument was called ``unbiased`` and was a boolean
- with ``True`` corresponding to ``correction=1`` and ``False`` being
- ``correction=0``.
- keepdim (bool, optional): whether the output tensor has :attr:`dim` retained or not. Default: ``False``.
- out (Tensor, optional): the output tensor.
- Example:
- >>> a = torch.tensor(
- ... [[ 0.2035, 1.2959, 1.8101, -0.4644],
- ... [ 1.5027, -0.3270, 0.5905, 0.6538],
- ... [-1.5745, 1.3330, -0.5596, -0.6548],
- ... [ 0.1264, -0.5080, 1.6420, 0.1992]]
- ... ) # fmt: skip
- >>> torch.std(a, dim=1, keepdim=True)
- tensor([[1.0311],
- [0.7477],
- [1.2204],
- [0.9087]])
- .. _Bessel's correction: https://en.wikipedia.org/wiki/Bessel%27s_correction
- """
- @overload
- def std(
- input: Tensor,
- dim: Sequence[str | EllipsisType | None],
- unbiased: _bool = True,
- keepdim: _bool = False,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- std(input, dim=None, *, correction=1, keepdim=False, out=None) -> Tensor
- Calculates the standard deviation over the dimensions specified by :attr:`dim`.
- :attr:`dim` can be a single dimension, list of dimensions, or ``None`` to
- reduce over all dimensions.
- The standard deviation (:math:`\sigma`) is calculated as
- .. math:: \sigma = \sqrt{\frac{1}{\max(0,~N - \delta N)}\sum_{i=0}^{N-1}(x_i-\bar{x})^2}
- where :math:`x` is the sample set of elements, :math:`\bar{x}` is the
- sample mean, :math:`N` is the number of samples and :math:`\delta N` is
- the :attr:`correction`.
- If :attr:`keepdim` is ``True``, the output tensor is of the same size
- as :attr:`input` except in the dimension(s) :attr:`dim` where it is of size 1.
- Otherwise, :attr:`dim` is squeezed (see :func:`torch.squeeze`), resulting in the
- output tensor having 1 (or ``len(dim)``) fewer dimension(s).
- Args:
- input (Tensor): the input tensor.
- dim (int or tuple of ints, optional): the dimension or dimensions to reduce.
- If ``None``, all dimensions are reduced.
- Keyword args:
- correction (int): difference between the sample size and sample degrees of freedom.
- Defaults to `Bessel's correction`_, ``correction=1``.
- .. versionchanged:: 2.0
- Previously this argument was called ``unbiased`` and was a boolean
- with ``True`` corresponding to ``correction=1`` and ``False`` being
- ``correction=0``.
- keepdim (bool, optional): whether the output tensor has :attr:`dim` retained or not. Default: ``False``.
- out (Tensor, optional): the output tensor.
- Example:
- >>> a = torch.tensor(
- ... [[ 0.2035, 1.2959, 1.8101, -0.4644],
- ... [ 1.5027, -0.3270, 0.5905, 0.6538],
- ... [-1.5745, 1.3330, -0.5596, -0.6548],
- ... [ 0.1264, -0.5080, 1.6420, 0.1992]]
- ... ) # fmt: skip
- >>> torch.std(a, dim=1, keepdim=True)
- tensor([[1.0311],
- [0.7477],
- [1.2204],
- [0.9087]])
- .. _Bessel's correction: https://en.wikipedia.org/wiki/Bessel%27s_correction
- """
- @overload
- def std_mean(
- input: Tensor,
- dim: _int | _size | None,
- unbiased: _bool = True,
- keepdim: _bool = False,
- ) -> tuple[Tensor, Tensor]:
- r"""
- std_mean(input, dim=None, *, correction=1, keepdim=False, out=None) -> (Tensor, Tensor)
- Calculates the standard deviation and mean over the dimensions specified by
- :attr:`dim`. :attr:`dim` can be a single dimension, list of dimensions, or
- ``None`` to reduce over all dimensions.
- The standard deviation (:math:`\sigma`) is calculated as
- .. math:: \sigma = \sqrt{\frac{1}{\max(0,~N - \delta N)}\sum_{i=0}^{N-1}(x_i-\bar{x})^2}
- where :math:`x` is the sample set of elements, :math:`\bar{x}` is the
- sample mean, :math:`N` is the number of samples and :math:`\delta N` is
- the :attr:`correction`.
- If :attr:`keepdim` is ``True``, the output tensor is of the same size
- as :attr:`input` except in the dimension(s) :attr:`dim` where it is of size 1.
- Otherwise, :attr:`dim` is squeezed (see :func:`torch.squeeze`), resulting in the
- output tensor having 1 (or ``len(dim)``) fewer dimension(s).
- Args:
- input (Tensor): the input tensor.
- dim (int or tuple of ints, optional): the dimension or dimensions to reduce.
- If ``None``, all dimensions are reduced.
- Keyword args:
- correction (int): difference between the sample size and sample degrees of freedom.
- Defaults to `Bessel's correction`_, ``correction=1``.
- .. versionchanged:: 2.0
- Previously this argument was called ``unbiased`` and was a boolean
- with ``True`` corresponding to ``correction=1`` and ``False`` being
- ``correction=0``.
- keepdim (bool, optional): whether the output tensor has :attr:`dim` retained or not. Default: ``False``.
- out (Tensor, optional): the output tensor.
- Returns:
- A tuple (std, mean) containing the standard deviation and mean.
- Example:
- >>> a = torch.tensor(
- ... [[ 0.2035, 1.2959, 1.8101, -0.4644],
- ... [ 1.5027, -0.3270, 0.5905, 0.6538],
- ... [-1.5745, 1.3330, -0.5596, -0.6548],
- ... [ 0.1264, -0.5080, 1.6420, 0.1992]]
- ... ) # fmt: skip
- >>> torch.std_mean(a, dim=0, keepdim=True)
- (tensor([[1.2620, 1.0028, 1.0957, 0.6038]]),
- tensor([[ 0.0645, 0.4485, 0.8707, -0.0665]]))
- .. _Bessel's correction: https://en.wikipedia.org/wiki/Bessel%27s_correction
- """
- @overload
- def std_mean(
- input: Tensor,
- dim: _int | _size | None = None,
- *,
- correction: Number | _complex | None = None,
- keepdim: _bool = False,
- ) -> tuple[Tensor, Tensor]:
- r"""
- std_mean(input, dim=None, *, correction=1, keepdim=False, out=None) -> (Tensor, Tensor)
- Calculates the standard deviation and mean over the dimensions specified by
- :attr:`dim`. :attr:`dim` can be a single dimension, list of dimensions, or
- ``None`` to reduce over all dimensions.
- The standard deviation (:math:`\sigma`) is calculated as
- .. math:: \sigma = \sqrt{\frac{1}{\max(0,~N - \delta N)}\sum_{i=0}^{N-1}(x_i-\bar{x})^2}
- where :math:`x` is the sample set of elements, :math:`\bar{x}` is the
- sample mean, :math:`N` is the number of samples and :math:`\delta N` is
- the :attr:`correction`.
- If :attr:`keepdim` is ``True``, the output tensor is of the same size
- as :attr:`input` except in the dimension(s) :attr:`dim` where it is of size 1.
- Otherwise, :attr:`dim` is squeezed (see :func:`torch.squeeze`), resulting in the
- output tensor having 1 (or ``len(dim)``) fewer dimension(s).
- Args:
- input (Tensor): the input tensor.
- dim (int or tuple of ints, optional): the dimension or dimensions to reduce.
- If ``None``, all dimensions are reduced.
- Keyword args:
- correction (int): difference between the sample size and sample degrees of freedom.
- Defaults to `Bessel's correction`_, ``correction=1``.
- .. versionchanged:: 2.0
- Previously this argument was called ``unbiased`` and was a boolean
- with ``True`` corresponding to ``correction=1`` and ``False`` being
- ``correction=0``.
- keepdim (bool, optional): whether the output tensor has :attr:`dim` retained or not. Default: ``False``.
- out (Tensor, optional): the output tensor.
- Returns:
- A tuple (std, mean) containing the standard deviation and mean.
- Example:
- >>> a = torch.tensor(
- ... [[ 0.2035, 1.2959, 1.8101, -0.4644],
- ... [ 1.5027, -0.3270, 0.5905, 0.6538],
- ... [-1.5745, 1.3330, -0.5596, -0.6548],
- ... [ 0.1264, -0.5080, 1.6420, 0.1992]]
- ... ) # fmt: skip
- >>> torch.std_mean(a, dim=0, keepdim=True)
- (tensor([[1.2620, 1.0028, 1.0957, 0.6038]]),
- tensor([[ 0.0645, 0.4485, 0.8707, -0.0665]]))
- .. _Bessel's correction: https://en.wikipedia.org/wiki/Bessel%27s_correction
- """
- @overload
- def std_mean(
- input: Tensor,
- unbiased: _bool = True,
- ) -> tuple[Tensor, Tensor]:
- r"""
- std_mean(input, dim=None, *, correction=1, keepdim=False, out=None) -> (Tensor, Tensor)
- Calculates the standard deviation and mean over the dimensions specified by
- :attr:`dim`. :attr:`dim` can be a single dimension, list of dimensions, or
- ``None`` to reduce over all dimensions.
- The standard deviation (:math:`\sigma`) is calculated as
- .. math:: \sigma = \sqrt{\frac{1}{\max(0,~N - \delta N)}\sum_{i=0}^{N-1}(x_i-\bar{x})^2}
- where :math:`x` is the sample set of elements, :math:`\bar{x}` is the
- sample mean, :math:`N` is the number of samples and :math:`\delta N` is
- the :attr:`correction`.
- If :attr:`keepdim` is ``True``, the output tensor is of the same size
- as :attr:`input` except in the dimension(s) :attr:`dim` where it is of size 1.
- Otherwise, :attr:`dim` is squeezed (see :func:`torch.squeeze`), resulting in the
- output tensor having 1 (or ``len(dim)``) fewer dimension(s).
- Args:
- input (Tensor): the input tensor.
- dim (int or tuple of ints, optional): the dimension or dimensions to reduce.
- If ``None``, all dimensions are reduced.
- Keyword args:
- correction (int): difference between the sample size and sample degrees of freedom.
- Defaults to `Bessel's correction`_, ``correction=1``.
- .. versionchanged:: 2.0
- Previously this argument was called ``unbiased`` and was a boolean
- with ``True`` corresponding to ``correction=1`` and ``False`` being
- ``correction=0``.
- keepdim (bool, optional): whether the output tensor has :attr:`dim` retained or not. Default: ``False``.
- out (Tensor, optional): the output tensor.
- Returns:
- A tuple (std, mean) containing the standard deviation and mean.
- Example:
- >>> a = torch.tensor(
- ... [[ 0.2035, 1.2959, 1.8101, -0.4644],
- ... [ 1.5027, -0.3270, 0.5905, 0.6538],
- ... [-1.5745, 1.3330, -0.5596, -0.6548],
- ... [ 0.1264, -0.5080, 1.6420, 0.1992]]
- ... ) # fmt: skip
- >>> torch.std_mean(a, dim=0, keepdim=True)
- (tensor([[1.2620, 1.0028, 1.0957, 0.6038]]),
- tensor([[ 0.0645, 0.4485, 0.8707, -0.0665]]))
- .. _Bessel's correction: https://en.wikipedia.org/wiki/Bessel%27s_correction
- """
- @overload
- def std_mean(
- input: Tensor,
- dim: Sequence[str | EllipsisType | None],
- *,
- correction: Number | _complex | None = None,
- keepdim: _bool = False,
- ) -> tuple[Tensor, Tensor]:
- r"""
- std_mean(input, dim=None, *, correction=1, keepdim=False, out=None) -> (Tensor, Tensor)
- Calculates the standard deviation and mean over the dimensions specified by
- :attr:`dim`. :attr:`dim` can be a single dimension, list of dimensions, or
- ``None`` to reduce over all dimensions.
- The standard deviation (:math:`\sigma`) is calculated as
- .. math:: \sigma = \sqrt{\frac{1}{\max(0,~N - \delta N)}\sum_{i=0}^{N-1}(x_i-\bar{x})^2}
- where :math:`x` is the sample set of elements, :math:`\bar{x}` is the
- sample mean, :math:`N` is the number of samples and :math:`\delta N` is
- the :attr:`correction`.
- If :attr:`keepdim` is ``True``, the output tensor is of the same size
- as :attr:`input` except in the dimension(s) :attr:`dim` where it is of size 1.
- Otherwise, :attr:`dim` is squeezed (see :func:`torch.squeeze`), resulting in the
- output tensor having 1 (or ``len(dim)``) fewer dimension(s).
- Args:
- input (Tensor): the input tensor.
- dim (int or tuple of ints, optional): the dimension or dimensions to reduce.
- If ``None``, all dimensions are reduced.
- Keyword args:
- correction (int): difference between the sample size and sample degrees of freedom.
- Defaults to `Bessel's correction`_, ``correction=1``.
- .. versionchanged:: 2.0
- Previously this argument was called ``unbiased`` and was a boolean
- with ``True`` corresponding to ``correction=1`` and ``False`` being
- ``correction=0``.
- keepdim (bool, optional): whether the output tensor has :attr:`dim` retained or not. Default: ``False``.
- out (Tensor, optional): the output tensor.
- Returns:
- A tuple (std, mean) containing the standard deviation and mean.
- Example:
- >>> a = torch.tensor(
- ... [[ 0.2035, 1.2959, 1.8101, -0.4644],
- ... [ 1.5027, -0.3270, 0.5905, 0.6538],
- ... [-1.5745, 1.3330, -0.5596, -0.6548],
- ... [ 0.1264, -0.5080, 1.6420, 0.1992]]
- ... ) # fmt: skip
- >>> torch.std_mean(a, dim=0, keepdim=True)
- (tensor([[1.2620, 1.0028, 1.0957, 0.6038]]),
- tensor([[ 0.0645, 0.4485, 0.8707, -0.0665]]))
- .. _Bessel's correction: https://en.wikipedia.org/wiki/Bessel%27s_correction
- """
- @overload
- def std_mean(
- input: Tensor,
- dim: Sequence[str | EllipsisType | None],
- unbiased: _bool = True,
- keepdim: _bool = False,
- ) -> tuple[Tensor, Tensor]:
- r"""
- std_mean(input, dim=None, *, correction=1, keepdim=False, out=None) -> (Tensor, Tensor)
- Calculates the standard deviation and mean over the dimensions specified by
- :attr:`dim`. :attr:`dim` can be a single dimension, list of dimensions, or
- ``None`` to reduce over all dimensions.
- The standard deviation (:math:`\sigma`) is calculated as
- .. math:: \sigma = \sqrt{\frac{1}{\max(0,~N - \delta N)}\sum_{i=0}^{N-1}(x_i-\bar{x})^2}
- where :math:`x` is the sample set of elements, :math:`\bar{x}` is the
- sample mean, :math:`N` is the number of samples and :math:`\delta N` is
- the :attr:`correction`.
- If :attr:`keepdim` is ``True``, the output tensor is of the same size
- as :attr:`input` except in the dimension(s) :attr:`dim` where it is of size 1.
- Otherwise, :attr:`dim` is squeezed (see :func:`torch.squeeze`), resulting in the
- output tensor having 1 (or ``len(dim)``) fewer dimension(s).
- Args:
- input (Tensor): the input tensor.
- dim (int or tuple of ints, optional): the dimension or dimensions to reduce.
- If ``None``, all dimensions are reduced.
- Keyword args:
- correction (int): difference between the sample size and sample degrees of freedom.
- Defaults to `Bessel's correction`_, ``correction=1``.
- .. versionchanged:: 2.0
- Previously this argument was called ``unbiased`` and was a boolean
- with ``True`` corresponding to ``correction=1`` and ``False`` being
- ``correction=0``.
- keepdim (bool, optional): whether the output tensor has :attr:`dim` retained or not. Default: ``False``.
- out (Tensor, optional): the output tensor.
- Returns:
- A tuple (std, mean) containing the standard deviation and mean.
- Example:
- >>> a = torch.tensor(
- ... [[ 0.2035, 1.2959, 1.8101, -0.4644],
- ... [ 1.5027, -0.3270, 0.5905, 0.6538],
- ... [-1.5745, 1.3330, -0.5596, -0.6548],
- ... [ 0.1264, -0.5080, 1.6420, 0.1992]]
- ... ) # fmt: skip
- >>> torch.std_mean(a, dim=0, keepdim=True)
- (tensor([[1.2620, 1.0028, 1.0957, 0.6038]]),
- tensor([[ 0.0645, 0.4485, 0.8707, -0.0665]]))
- .. _Bessel's correction: https://en.wikipedia.org/wiki/Bessel%27s_correction
- """
- @overload
- def sub(
- input: Tensor | Number | _complex,
- other: Tensor | Number | _complex,
- *,
- alpha: Number | _complex | None = 1,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- sub(input, other, *, alpha=1, out=None) -> Tensor
- Subtracts :attr:`other`, scaled by :attr:`alpha`, from :attr:`input`.
- .. math::
- \text{{out}}_i = \text{{input}}_i - \text{{alpha}} \times \text{{other}}_i
- Supports :ref:`broadcasting to a common shape <broadcasting-semantics>`,
- :ref:`type promotion <type-promotion-doc>`, and integer, float, and complex inputs.
- Args:
- input (Tensor): the input tensor.
- other (Tensor or Number): the tensor or number to subtract from :attr:`input`.
- Keyword args:
- alpha (Number): the multiplier for :attr:`other`.
- out (Tensor, optional): the output tensor.
- Example::
- >>> a = torch.tensor((1, 2))
- >>> b = torch.tensor((0, 1))
- >>> torch.sub(a, b, alpha=2)
- tensor([1, 0])
- """
- @overload
- def sub(self: Tensor, alpha: Number | _complex, other: Tensor) -> Tensor:
- r"""
- sub(input, other, *, alpha=1, out=None) -> Tensor
- Subtracts :attr:`other`, scaled by :attr:`alpha`, from :attr:`input`.
- .. math::
- \text{{out}}_i = \text{{input}}_i - \text{{alpha}} \times \text{{other}}_i
- Supports :ref:`broadcasting to a common shape <broadcasting-semantics>`,
- :ref:`type promotion <type-promotion-doc>`, and integer, float, and complex inputs.
- Args:
- input (Tensor): the input tensor.
- other (Tensor or Number): the tensor or number to subtract from :attr:`input`.
- Keyword args:
- alpha (Number): the multiplier for :attr:`other`.
- out (Tensor, optional): the output tensor.
- Example::
- >>> a = torch.tensor((1, 2))
- >>> b = torch.tensor((0, 1))
- >>> torch.sub(a, b, alpha=2)
- tensor([1, 0])
- """
- @overload
- def sub(
- self: Tensor,
- alpha: Number | _complex,
- other: Tensor,
- *,
- out: Tensor,
- ) -> Tensor:
- r"""
- sub(input, other, *, alpha=1, out=None) -> Tensor
- Subtracts :attr:`other`, scaled by :attr:`alpha`, from :attr:`input`.
- .. math::
- \text{{out}}_i = \text{{input}}_i - \text{{alpha}} \times \text{{other}}_i
- Supports :ref:`broadcasting to a common shape <broadcasting-semantics>`,
- :ref:`type promotion <type-promotion-doc>`, and integer, float, and complex inputs.
- Args:
- input (Tensor): the input tensor.
- other (Tensor or Number): the tensor or number to subtract from :attr:`input`.
- Keyword args:
- alpha (Number): the multiplier for :attr:`other`.
- out (Tensor, optional): the output tensor.
- Example::
- >>> a = torch.tensor((1, 2))
- >>> b = torch.tensor((0, 1))
- >>> torch.sub(a, b, alpha=2)
- tensor([1, 0])
- """
- @overload
- def subtract(
- input: Tensor,
- other: Tensor,
- *,
- alpha: Number | _complex = 1,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- subtract(input, other, *, alpha=1, out=None) -> Tensor
- Alias for :func:`torch.sub`.
- """
- @overload
- def subtract(
- input: Tensor,
- other: Number | _complex,
- alpha: Number | _complex = 1,
- ) -> Tensor:
- r"""
- subtract(input, other, *, alpha=1, out=None) -> Tensor
- Alias for :func:`torch.sub`.
- """
- @overload
- def sum(input: Tensor, *, dtype: _dtype | None = None) -> Tensor:
- r"""
- sum(input, *, dtype=None) -> Tensor
- Returns the sum of all elements in the :attr:`input` tensor.
- Args:
- input (Tensor): the input tensor.
- Keyword args:
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor.
- If specified, the input tensor is casted to :attr:`dtype` before the operation
- is performed. This is useful for preventing data type overflows. Default: None.
- .. note:: Use the `dtype` argument if you need the result in a specific tensor type.
- Otherwise, the result type may be automatically promoted (e.g., from `torch.int32` to `torch.int64`).
- Example::
- >>> a = torch.randn(1, 3)
- >>> a
- tensor([[ 0.1133, -0.9567, 0.2958]])
- >>> torch.sum(a)
- tensor(-0.5475)
- .. function:: sum(input, dim, keepdim=False, *, dtype=None) -> Tensor
- :noindex:
- Returns the sum of each row of the :attr:`input` tensor in the given
- dimension :attr:`dim`. If :attr:`dim` is a list of dimensions,
- reduce over all of them.
- If :attr:`keepdim` is ``True``, the output tensor is of the same size
- as :attr:`input` except in the dimension(s) :attr:`dim` where it is of size 1.
- Otherwise, :attr:`dim` is squeezed (see :func:`torch.squeeze`), resulting in the
- output tensor having 1 (or ``len(dim)``) fewer dimension(s).
- Args:
- input (Tensor): the input tensor.
- dim (int or tuple of ints, optional): the dimension or dimensions to reduce.
- If ``None``, all dimensions are reduced.
- keepdim (bool, optional): whether the output tensor has :attr:`dim` retained or not. Default: ``False``.
- Keyword args:
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor.
- If specified, the input tensor is casted to :attr:`dtype` before the operation
- is performed. This is useful for preventing data type overflows. Default: None.
- Example::
- >>> a = torch.randn(4, 4)
- >>> a
- tensor([[ 0.0569, -0.2475, 0.0737, -0.3429],
- [-0.2993, 0.9138, 0.9337, -1.6864],
- [ 0.1132, 0.7892, -0.1003, 0.5688],
- [ 0.3637, -0.9906, -0.4752, -1.5197]])
- >>> torch.sum(a, 1)
- tensor([-0.4598, -0.1381, 1.3708, -2.6217])
- >>> b = torch.arange(4 * 5 * 6).view(4, 5, 6)
- >>> torch.sum(b, (2, 1))
- tensor([ 435., 1335., 2235., 3135.])
- """
- @overload
- def sum(
- input: Tensor,
- dim: _int | _size | None,
- keepdim: _bool = False,
- *,
- dtype: _dtype | None = None,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- sum(input, *, dtype=None) -> Tensor
- Returns the sum of all elements in the :attr:`input` tensor.
- Args:
- input (Tensor): the input tensor.
- Keyword args:
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor.
- If specified, the input tensor is casted to :attr:`dtype` before the operation
- is performed. This is useful for preventing data type overflows. Default: None.
- .. note:: Use the `dtype` argument if you need the result in a specific tensor type.
- Otherwise, the result type may be automatically promoted (e.g., from `torch.int32` to `torch.int64`).
- Example::
- >>> a = torch.randn(1, 3)
- >>> a
- tensor([[ 0.1133, -0.9567, 0.2958]])
- >>> torch.sum(a)
- tensor(-0.5475)
- .. function:: sum(input, dim, keepdim=False, *, dtype=None) -> Tensor
- :noindex:
- Returns the sum of each row of the :attr:`input` tensor in the given
- dimension :attr:`dim`. If :attr:`dim` is a list of dimensions,
- reduce over all of them.
- If :attr:`keepdim` is ``True``, the output tensor is of the same size
- as :attr:`input` except in the dimension(s) :attr:`dim` where it is of size 1.
- Otherwise, :attr:`dim` is squeezed (see :func:`torch.squeeze`), resulting in the
- output tensor having 1 (or ``len(dim)``) fewer dimension(s).
- Args:
- input (Tensor): the input tensor.
- dim (int or tuple of ints, optional): the dimension or dimensions to reduce.
- If ``None``, all dimensions are reduced.
- keepdim (bool, optional): whether the output tensor has :attr:`dim` retained or not. Default: ``False``.
- Keyword args:
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor.
- If specified, the input tensor is casted to :attr:`dtype` before the operation
- is performed. This is useful for preventing data type overflows. Default: None.
- Example::
- >>> a = torch.randn(4, 4)
- >>> a
- tensor([[ 0.0569, -0.2475, 0.0737, -0.3429],
- [-0.2993, 0.9138, 0.9337, -1.6864],
- [ 0.1132, 0.7892, -0.1003, 0.5688],
- [ 0.3637, -0.9906, -0.4752, -1.5197]])
- >>> torch.sum(a, 1)
- tensor([-0.4598, -0.1381, 1.3708, -2.6217])
- >>> b = torch.arange(4 * 5 * 6).view(4, 5, 6)
- >>> torch.sum(b, (2, 1))
- tensor([ 435., 1335., 2235., 3135.])
- """
- @overload
- def sum(
- input: Tensor,
- dim: Sequence[str | EllipsisType | None],
- keepdim: _bool = False,
- *,
- dtype: _dtype | None = None,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- sum(input, *, dtype=None) -> Tensor
- Returns the sum of all elements in the :attr:`input` tensor.
- Args:
- input (Tensor): the input tensor.
- Keyword args:
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor.
- If specified, the input tensor is casted to :attr:`dtype` before the operation
- is performed. This is useful for preventing data type overflows. Default: None.
- .. note:: Use the `dtype` argument if you need the result in a specific tensor type.
- Otherwise, the result type may be automatically promoted (e.g., from `torch.int32` to `torch.int64`).
- Example::
- >>> a = torch.randn(1, 3)
- >>> a
- tensor([[ 0.1133, -0.9567, 0.2958]])
- >>> torch.sum(a)
- tensor(-0.5475)
- .. function:: sum(input, dim, keepdim=False, *, dtype=None) -> Tensor
- :noindex:
- Returns the sum of each row of the :attr:`input` tensor in the given
- dimension :attr:`dim`. If :attr:`dim` is a list of dimensions,
- reduce over all of them.
- If :attr:`keepdim` is ``True``, the output tensor is of the same size
- as :attr:`input` except in the dimension(s) :attr:`dim` where it is of size 1.
- Otherwise, :attr:`dim` is squeezed (see :func:`torch.squeeze`), resulting in the
- output tensor having 1 (or ``len(dim)``) fewer dimension(s).
- Args:
- input (Tensor): the input tensor.
- dim (int or tuple of ints, optional): the dimension or dimensions to reduce.
- If ``None``, all dimensions are reduced.
- keepdim (bool, optional): whether the output tensor has :attr:`dim` retained or not. Default: ``False``.
- Keyword args:
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor.
- If specified, the input tensor is casted to :attr:`dtype` before the operation
- is performed. This is useful for preventing data type overflows. Default: None.
- Example::
- >>> a = torch.randn(4, 4)
- >>> a
- tensor([[ 0.0569, -0.2475, 0.0737, -0.3429],
- [-0.2993, 0.9138, 0.9337, -1.6864],
- [ 0.1132, 0.7892, -0.1003, 0.5688],
- [ 0.3637, -0.9906, -0.4752, -1.5197]])
- >>> torch.sum(a, 1)
- tensor([-0.4598, -0.1381, 1.3708, -2.6217])
- >>> b = torch.arange(4 * 5 * 6).view(4, 5, 6)
- >>> torch.sum(b, (2, 1))
- tensor([ 435., 1335., 2235., 3135.])
- """
- def svd(
- input: Tensor,
- some: _bool = True,
- compute_uv: _bool = True,
- *,
- out: Tensor | tuple[Tensor, ...] | list[Tensor] | None = None,
- ) -> torch.return_types.svd:
- r"""
- svd(input, some=True, compute_uv=True, *, out=None) -> (Tensor, Tensor, Tensor)
- Computes the singular value decomposition of either a matrix or batch of
- matrices :attr:`input`. The singular value decomposition is represented as a
- namedtuple `(U, S, V)`, such that :attr:`input` :math:`= U \text{diag}(S) V^{\text{H}}`.
- where :math:`V^{\text{H}}` is the transpose of `V` for real inputs,
- and the conjugate transpose of `V` for complex inputs.
- If :attr:`input` is a batch of matrices, then `U`, `S`, and `V` are also
- batched with the same batch dimensions as :attr:`input`.
- If :attr:`some` is `True` (default), the method returns the reduced singular
- value decomposition. In this case, if the last two dimensions of :attr:`input` are
- `m` and `n`, then the returned `U` and `V` matrices will contain only
- `min(n, m)` orthonormal columns.
- If :attr:`compute_uv` is `False`, the returned `U` and `V` will be
- zero-filled matrices of shape `(m, m)` and `(n, n)`
- respectively, and the same device as :attr:`input`. The argument :attr:`some`
- has no effect when :attr:`compute_uv` is `False`.
- Supports :attr:`input` of float, double, cfloat and cdouble data types.
- The dtypes of `U` and `V` are the same as :attr:`input`'s. `S` will
- always be real-valued, even if :attr:`input` is complex.
- .. warning::
- :func:`torch.svd` is deprecated in favor of :func:`torch.linalg.svd`
- and will be removed in a future PyTorch release.
- ``U, S, V = torch.svd(A, some=some, compute_uv=True)`` (default) should be replaced with
- .. code:: python
- U, S, Vh = torch.linalg.svd(A, full_matrices=not some)
- V = Vh.mH
- ``_, S, _ = torch.svd(A, some=some, compute_uv=False)`` should be replaced with
- .. code:: python
- S = torch.linalg.svdvals(A)
- .. note:: Differences with :func:`torch.linalg.svd`:
- * :attr:`some` is the opposite of
- :func:`torch.linalg.svd`'s :attr:`full_matrices`. Note that
- default value for both is `True`, so the default behavior is
- effectively the opposite.
- * :func:`torch.svd` returns `V`, whereas :func:`torch.linalg.svd` returns
- `Vh`, that is, :math:`V^{\text{H}}`.
- * If :attr:`compute_uv` is `False`, :func:`torch.svd` returns zero-filled
- tensors for `U` and `Vh`, whereas :func:`torch.linalg.svd` returns
- empty tensors.
- .. note:: The singular values are returned in descending order. If :attr:`input` is a batch of matrices,
- then the singular values of each matrix in the batch are returned in descending order.
- .. note:: The `S` tensor can only be used to compute gradients if :attr:`compute_uv` is `True`.
- .. note:: When :attr:`some` is `False`, the gradients on `U[..., :, min(m, n):]`
- and `V[..., :, min(m, n):]` will be ignored in the backward pass, as those vectors
- can be arbitrary bases of the corresponding subspaces.
- .. note:: The implementation of :func:`torch.linalg.svd` on CPU uses LAPACK's routine `?gesdd`
- (a divide-and-conquer algorithm) instead of `?gesvd` for speed. Analogously,
- on GPU, it uses cuSOLVER's routines `gesvdj` and `gesvdjBatched` on CUDA 10.1.243
- and later, and MAGMA's routine `gesdd` on earlier versions of CUDA.
- .. note:: The returned `U` will not be contiguous. The matrix (or batch of matrices) will
- be represented as a column-major matrix (i.e. Fortran-contiguous).
- .. warning:: The gradients with respect to `U` and `V` will only be finite when the input does not
- have zero nor repeated singular values.
- .. warning:: If the distance between any two singular values is close to zero, the gradients with respect to
- `U` and `V` will be numerically unstable, as they depends on
- :math:`\frac{1}{\min_{i \neq j} \sigma_i^2 - \sigma_j^2}`. The same happens when the matrix
- has small singular values, as these gradients also depend on `S^{-1}`.
- .. warning:: For complex-valued :attr:`input` the singular value decomposition is not unique,
- as `U` and `V` may be multiplied by an arbitrary phase factor :math:`e^{i \phi}` on every column.
- The same happens when :attr:`input` has repeated singular values, where one may multiply
- the columns of the spanning subspace in `U` and `V` by a rotation matrix
- and `the resulting vectors will span the same subspace`_.
- Different platforms, like NumPy, or inputs on different device types,
- may produce different `U` and `V` tensors.
- Args:
- input (Tensor): the input tensor of size `(*, m, n)` where `*` is zero or more
- batch dimensions consisting of `(m, n)` matrices.
- some (bool, optional): controls whether to compute the reduced or full decomposition, and
- consequently, the shape of returned `U` and `V`. Default: `True`.
- compute_uv (bool, optional): controls whether to compute `U` and `V`. Default: `True`.
- Keyword args:
- out (tuple, optional): the output tuple of tensors
- Example::
- >>> a = torch.randn(5, 3)
- >>> a
- tensor([[ 0.2364, -0.7752, 0.6372],
- [ 1.7201, 0.7394, -0.0504],
- [-0.3371, -1.0584, 0.5296],
- [ 0.3550, -0.4022, 1.5569],
- [ 0.2445, -0.0158, 1.1414]])
- >>> u, s, v = torch.svd(a)
- >>> u
- tensor([[ 0.4027, 0.0287, 0.5434],
- [-0.1946, 0.8833, 0.3679],
- [ 0.4296, -0.2890, 0.5261],
- [ 0.6604, 0.2717, -0.2618],
- [ 0.4234, 0.2481, -0.4733]])
- >>> s
- tensor([2.3289, 2.0315, 0.7806])
- >>> v
- tensor([[-0.0199, 0.8766, 0.4809],
- [-0.5080, 0.4054, -0.7600],
- [ 0.8611, 0.2594, -0.4373]])
- >>> torch.dist(a, torch.mm(torch.mm(u, torch.diag(s)), v.t()))
- tensor(8.6531e-07)
- >>> a_big = torch.randn(7, 5, 3)
- >>> u, s, v = torch.svd(a_big)
- >>> torch.dist(a_big, torch.matmul(torch.matmul(u, torch.diag_embed(s)), v.mT))
- tensor(2.6503e-06)
- .. _the resulting vectors will span the same subspace:
- (https://en.wikipedia.org/wiki/Singular_value_decomposition#Singular_values,_singular_vectors,_and_their_relation_to_the_SVD)
- """
- def swapaxes(input: Tensor, axis0: _int, axis1: _int) -> Tensor:
- r"""
- swapaxes(input, axis0, axis1) -> Tensor
- Alias for :func:`torch.transpose`.
- This function is equivalent to NumPy's swapaxes function.
- Examples::
- >>> x = torch.tensor([[[0,1],[2,3]],[[4,5],[6,7]]])
- >>> x
- tensor([[[0, 1],
- [2, 3]],
- [[4, 5],
- [6, 7]]])
- >>> torch.swapaxes(x, 0, 1)
- tensor([[[0, 1],
- [4, 5]],
- [[2, 3],
- [6, 7]]])
- >>> torch.swapaxes(x, 0, 2)
- tensor([[[0, 4],
- [2, 6]],
- [[1, 5],
- [3, 7]]])
- """
- def swapdims(input: Tensor, dim0: _int, dim1: _int) -> Tensor:
- r"""
- swapdims(input, dim0, dim1) -> Tensor
- Alias for :func:`torch.transpose`.
- This function is equivalent to NumPy's swapaxes function.
- Examples::
- >>> x = torch.tensor([[[0,1],[2,3]],[[4,5],[6,7]]])
- >>> x
- tensor([[[0, 1],
- [2, 3]],
- [[4, 5],
- [6, 7]]])
- >>> torch.swapdims(x, 0, 1)
- tensor([[[0, 1],
- [4, 5]],
- [[2, 3],
- [6, 7]]])
- >>> torch.swapdims(x, 0, 2)
- tensor([[[0, 4],
- [2, 6]],
- [[1, 5],
- [3, 7]]])
- """
- def sym_constrain_range(
- size: Number | _complex,
- *,
- min: _int | None = None,
- max: _int | None = None,
- ) -> None: ...
- def sym_constrain_range_for_size(
- size: Number | _complex,
- *,
- min: _int | None = None,
- max: _int | None = None,
- ) -> None: ...
- def t(input: Tensor) -> Tensor:
- r"""
- t(input) -> Tensor
- Expects :attr:`input` to be <= 2-D tensor and transposes dimensions 0
- and 1.
- 0-D and 1-D tensors are returned as is. When input is a 2-D tensor this
- is equivalent to ``transpose(input, 0, 1)``.
- Args:
- input (Tensor): the input tensor.
- Example::
- >>> x = torch.randn(())
- >>> x
- tensor(0.1995)
- >>> torch.t(x)
- tensor(0.1995)
- >>> x = torch.randn(3)
- >>> x
- tensor([ 2.4320, -0.4608, 0.7702])
- >>> torch.t(x)
- tensor([ 2.4320, -0.4608, 0.7702])
- >>> x = torch.randn(2, 3)
- >>> x
- tensor([[ 0.4875, 0.9158, -0.5872],
- [ 0.3938, -0.6929, 0.6932]])
- >>> torch.t(x)
- tensor([[ 0.4875, 0.3938],
- [ 0.9158, -0.6929],
- [-0.5872, 0.6932]])
- See also :func:`torch.transpose`.
- """
- def t_copy(input: Tensor, *, out: Tensor | None = None) -> Tensor:
- r"""
- Performs the same operation as :func:`torch.t`, but all output tensors
- are freshly created instead of aliasing the input.
- """
- def take(
- input: Tensor,
- index: Tensor,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- take(input, index) -> Tensor
- Returns a new tensor with the elements of :attr:`input` at the given indices.
- The input tensor is treated as if it were viewed as a 1-D tensor. The result
- takes the same shape as the indices.
- Args:
- input (Tensor): the input tensor.
- index (LongTensor): the indices into tensor
- Example::
- >>> src = torch.tensor([[4, 3, 5],
- ... [6, 7, 8]])
- >>> torch.take(src, torch.tensor([0, 2, 5]))
- tensor([ 4, 5, 8])
- """
- def take_along_dim(
- input: Tensor,
- indices: Tensor,
- dim: _int | None = None,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- take_along_dim(input, indices, dim=None, *, out=None) -> Tensor
- Selects values from :attr:`input` at the 1-dimensional indices from :attr:`indices` along the given :attr:`dim`.
- If :attr:`dim` is None, the input array is treated as if it has been flattened to 1d.
- Functions that return indices along a dimension, like :func:`torch.argmax` and :func:`torch.argsort`,
- are designed to work with this function. See the examples below.
- .. note::
- This function is similar to NumPy's `take_along_axis`.
- See also :func:`torch.gather`.
- Args:
- input (Tensor): the input tensor.
- indices (LongTensor): the indices into :attr:`input`. Must have long dtype.
- dim (int, optional): dimension to select along. Default: 0
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> t = torch.tensor([[10, 30, 20], [60, 40, 50]])
- >>> max_idx = torch.argmax(t)
- >>> torch.take_along_dim(t, max_idx)
- tensor([60])
- >>> sorted_idx = torch.argsort(t, dim=1)
- >>> torch.take_along_dim(t, sorted_idx, dim=1)
- tensor([[10, 20, 30],
- [40, 50, 60]])
- """
- def tan(input: Tensor, *, out: Tensor | None = None) -> Tensor:
- r"""
- tan(input, *, out=None) -> Tensor
- Returns a new tensor with the tangent of the elements of :attr:`input`.
- .. math::
- \text{out}_{i} = \tan(\text{input}_{i})
- Args:
- input (Tensor): the input tensor.
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> a = torch.randn(4)
- >>> a
- tensor([-1.2027, -1.7687, 0.4412, -1.3856])
- >>> torch.tan(a)
- tensor([-2.5930, 4.9859, 0.4722, -5.3366])
- """
- def tan_(input: Tensor) -> Tensor: ...
- def tanh(input: Tensor, *, out: Tensor | None = None) -> Tensor:
- r"""
- tanh(input, *, out=None) -> Tensor
- Returns a new tensor with the hyperbolic tangent of the elements
- of :attr:`input`.
- .. math::
- \text{out}_{i} = \tanh(\text{input}_{i})
- Args:
- input (Tensor): the input tensor.
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> a = torch.randn(4)
- >>> a
- tensor([ 0.8986, -0.7279, 1.1745, 0.2611])
- >>> torch.tanh(a)
- tensor([ 0.7156, -0.6218, 0.8257, 0.2553])
- """
- def tanh_(input: Tensor) -> Tensor: ...
- def tensor(
- data: Any,
- dtype: _dtype | None = None,
- device: DeviceLikeType | None = None,
- requires_grad: _bool = False,
- pin_memory: _bool = False,
- ) -> Tensor:
- r"""
- tensor(data, *, dtype=None, device=None, requires_grad=False, pin_memory=False) -> Tensor
- Constructs a tensor with no autograd history (also known as a "leaf tensor", see :doc:`/notes/autograd`) by copying :attr:`data`.
- .. warning::
- When working with tensors prefer using :func:`torch.Tensor.clone`,
- :func:`torch.Tensor.detach`, and :func:`torch.Tensor.requires_grad_` for
- readability. Letting `t` be a tensor, ``torch.tensor(t)`` is equivalent to
- ``t.detach().clone()``, and ``torch.tensor(t, requires_grad=True)``
- is equivalent to ``t.detach().clone().requires_grad_(True)``.
- .. seealso::
- :func:`torch.as_tensor` preserves autograd history and avoids copies where possible.
- :func:`torch.from_numpy` creates a tensor that shares storage with a NumPy array.
- Args:
- data (array_like): Initial data for the tensor. Can be a list, tuple,
- NumPy ``ndarray``, scalar, and other types.
- Keyword args:
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor.
- Default: if ``None``, infers data type from :attr:`data`.
- device (:class:`torch.device`, optional): the device of the constructed tensor. If None and data is a tensor
- then the device of data is used. If None and data is not a tensor then
- the result tensor is constructed on the current device.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- pin_memory (bool, optional): If set, returned tensor would be allocated in
- the pinned memory. Works only for CPU tensors. Default: ``False``.
- Example::
- >>> torch.tensor([[0.1, 1.2], [2.2, 3.1], [4.9, 5.2]])
- tensor([[ 0.1000, 1.2000],
- [ 2.2000, 3.1000],
- [ 4.9000, 5.2000]])
- >>> torch.tensor([0, 1]) # Type inference on data
- tensor([ 0, 1])
- >>> torch.tensor([[0.11111, 0.222222, 0.3333333]],
- ... dtype=torch.float64,
- ... device=torch.device('cuda:0')) # creates a double tensor on a CUDA device
- tensor([[ 0.1111, 0.2222, 0.3333]], dtype=torch.float64, device='cuda:0')
- >>> torch.tensor(3.14159) # Create a zero-dimensional (scalar) tensor
- tensor(3.1416)
- >>> torch.tensor([]) # Create an empty tensor (of size (0,))
- tensor([])
- """
- @overload
- def tensor_split(
- input: Tensor,
- tensor_indices_or_sections: Tensor,
- dim: _int = 0,
- ) -> tuple[Tensor, ...]:
- r"""
- tensor_split(input, indices_or_sections, dim=0) -> List of Tensors
- Splits a tensor into multiple sub-tensors, all of which are views of :attr:`input`,
- along dimension :attr:`dim` according to the indices or number of sections specified
- by :attr:`indices_or_sections`. This function is based on NumPy's
- :func:`numpy.array_split`.
- Args:
- input (Tensor): the tensor to split
- indices_or_sections (Tensor, int or list or tuple of ints):
- If :attr:`indices_or_sections` is an integer ``n`` or a zero dimensional long tensor
- with value ``n``, :attr:`input` is split into ``n`` sections along dimension :attr:`dim`.
- If :attr:`input` is divisible by ``n`` along dimension :attr:`dim`, each
- section will be of equal size, :code:`input.size(dim) / n`. If :attr:`input`
- is not divisible by ``n``, the sizes of the first :code:`int(input.size(dim) % n)`
- sections will have size :code:`int(input.size(dim) / n) + 1`, and the rest will
- have size :code:`int(input.size(dim) / n)`.
- If :attr:`indices_or_sections` is a list or tuple of ints, or a one-dimensional long
- tensor, then :attr:`input` is split along dimension :attr:`dim` at each of the indices
- in the list, tuple or tensor. For instance, :code:`indices_or_sections=[2, 3]` and :code:`dim=0`
- would result in the tensors :code:`input[:2]`, :code:`input[2:3]`, and :code:`input[3:]`.
- If :attr:`indices_or_sections` is a tensor, it must be a zero-dimensional or one-dimensional
- long tensor on the CPU.
- dim (int, optional): dimension along which to split the tensor. Default: ``0``
- Example::
- >>> x = torch.arange(8)
- >>> torch.tensor_split(x, 3)
- (tensor([0, 1, 2]), tensor([3, 4, 5]), tensor([6, 7]))
- >>> x = torch.arange(7)
- >>> torch.tensor_split(x, 3)
- (tensor([0, 1, 2]), tensor([3, 4]), tensor([5, 6]))
- >>> torch.tensor_split(x, (1, 6))
- (tensor([0]), tensor([1, 2, 3, 4, 5]), tensor([6]))
- >>> x = torch.arange(14).reshape(2, 7)
- >>> x
- tensor([[ 0, 1, 2, 3, 4, 5, 6],
- [ 7, 8, 9, 10, 11, 12, 13]])
- >>> torch.tensor_split(x, 3, dim=1)
- (tensor([[0, 1, 2],
- [7, 8, 9]]),
- tensor([[ 3, 4],
- [10, 11]]),
- tensor([[ 5, 6],
- [12, 13]]))
- >>> torch.tensor_split(x, (1, 6), dim=1)
- (tensor([[0],
- [7]]),
- tensor([[ 1, 2, 3, 4, 5],
- [ 8, 9, 10, 11, 12]]),
- tensor([[ 6],
- [13]]))
- """
- @overload
- def tensor_split(
- input: Tensor,
- sections: _int | SymInt,
- dim: _int = 0,
- ) -> tuple[Tensor, ...]:
- r"""
- tensor_split(input, indices_or_sections, dim=0) -> List of Tensors
- Splits a tensor into multiple sub-tensors, all of which are views of :attr:`input`,
- along dimension :attr:`dim` according to the indices or number of sections specified
- by :attr:`indices_or_sections`. This function is based on NumPy's
- :func:`numpy.array_split`.
- Args:
- input (Tensor): the tensor to split
- indices_or_sections (Tensor, int or list or tuple of ints):
- If :attr:`indices_or_sections` is an integer ``n`` or a zero dimensional long tensor
- with value ``n``, :attr:`input` is split into ``n`` sections along dimension :attr:`dim`.
- If :attr:`input` is divisible by ``n`` along dimension :attr:`dim`, each
- section will be of equal size, :code:`input.size(dim) / n`. If :attr:`input`
- is not divisible by ``n``, the sizes of the first :code:`int(input.size(dim) % n)`
- sections will have size :code:`int(input.size(dim) / n) + 1`, and the rest will
- have size :code:`int(input.size(dim) / n)`.
- If :attr:`indices_or_sections` is a list or tuple of ints, or a one-dimensional long
- tensor, then :attr:`input` is split along dimension :attr:`dim` at each of the indices
- in the list, tuple or tensor. For instance, :code:`indices_or_sections=[2, 3]` and :code:`dim=0`
- would result in the tensors :code:`input[:2]`, :code:`input[2:3]`, and :code:`input[3:]`.
- If :attr:`indices_or_sections` is a tensor, it must be a zero-dimensional or one-dimensional
- long tensor on the CPU.
- dim (int, optional): dimension along which to split the tensor. Default: ``0``
- Example::
- >>> x = torch.arange(8)
- >>> torch.tensor_split(x, 3)
- (tensor([0, 1, 2]), tensor([3, 4, 5]), tensor([6, 7]))
- >>> x = torch.arange(7)
- >>> torch.tensor_split(x, 3)
- (tensor([0, 1, 2]), tensor([3, 4]), tensor([5, 6]))
- >>> torch.tensor_split(x, (1, 6))
- (tensor([0]), tensor([1, 2, 3, 4, 5]), tensor([6]))
- >>> x = torch.arange(14).reshape(2, 7)
- >>> x
- tensor([[ 0, 1, 2, 3, 4, 5, 6],
- [ 7, 8, 9, 10, 11, 12, 13]])
- >>> torch.tensor_split(x, 3, dim=1)
- (tensor([[0, 1, 2],
- [7, 8, 9]]),
- tensor([[ 3, 4],
- [10, 11]]),
- tensor([[ 5, 6],
- [12, 13]]))
- >>> torch.tensor_split(x, (1, 6), dim=1)
- (tensor([[0],
- [7]]),
- tensor([[ 1, 2, 3, 4, 5],
- [ 8, 9, 10, 11, 12]]),
- tensor([[ 6],
- [13]]))
- """
- @overload
- def tensor_split(
- input: Tensor,
- indices: Sequence[_int | SymInt],
- dim: _int = 0,
- ) -> tuple[Tensor, ...]:
- r"""
- tensor_split(input, indices_or_sections, dim=0) -> List of Tensors
- Splits a tensor into multiple sub-tensors, all of which are views of :attr:`input`,
- along dimension :attr:`dim` according to the indices or number of sections specified
- by :attr:`indices_or_sections`. This function is based on NumPy's
- :func:`numpy.array_split`.
- Args:
- input (Tensor): the tensor to split
- indices_or_sections (Tensor, int or list or tuple of ints):
- If :attr:`indices_or_sections` is an integer ``n`` or a zero dimensional long tensor
- with value ``n``, :attr:`input` is split into ``n`` sections along dimension :attr:`dim`.
- If :attr:`input` is divisible by ``n`` along dimension :attr:`dim`, each
- section will be of equal size, :code:`input.size(dim) / n`. If :attr:`input`
- is not divisible by ``n``, the sizes of the first :code:`int(input.size(dim) % n)`
- sections will have size :code:`int(input.size(dim) / n) + 1`, and the rest will
- have size :code:`int(input.size(dim) / n)`.
- If :attr:`indices_or_sections` is a list or tuple of ints, or a one-dimensional long
- tensor, then :attr:`input` is split along dimension :attr:`dim` at each of the indices
- in the list, tuple or tensor. For instance, :code:`indices_or_sections=[2, 3]` and :code:`dim=0`
- would result in the tensors :code:`input[:2]`, :code:`input[2:3]`, and :code:`input[3:]`.
- If :attr:`indices_or_sections` is a tensor, it must be a zero-dimensional or one-dimensional
- long tensor on the CPU.
- dim (int, optional): dimension along which to split the tensor. Default: ``0``
- Example::
- >>> x = torch.arange(8)
- >>> torch.tensor_split(x, 3)
- (tensor([0, 1, 2]), tensor([3, 4, 5]), tensor([6, 7]))
- >>> x = torch.arange(7)
- >>> torch.tensor_split(x, 3)
- (tensor([0, 1, 2]), tensor([3, 4]), tensor([5, 6]))
- >>> torch.tensor_split(x, (1, 6))
- (tensor([0]), tensor([1, 2, 3, 4, 5]), tensor([6]))
- >>> x = torch.arange(14).reshape(2, 7)
- >>> x
- tensor([[ 0, 1, 2, 3, 4, 5, 6],
- [ 7, 8, 9, 10, 11, 12, 13]])
- >>> torch.tensor_split(x, 3, dim=1)
- (tensor([[0, 1, 2],
- [7, 8, 9]]),
- tensor([[ 3, 4],
- [10, 11]]),
- tensor([[ 5, 6],
- [12, 13]]))
- >>> torch.tensor_split(x, (1, 6), dim=1)
- (tensor([[0],
- [7]]),
- tensor([[ 1, 2, 3, 4, 5],
- [ 8, 9, 10, 11, 12]]),
- tensor([[ 6],
- [13]]))
- """
- def threshold(
- input: Tensor,
- threshold: Number | _complex,
- value: Number | _complex,
- *,
- out: Tensor | None = None,
- ) -> Tensor: ...
- def threshold_(
- input: Tensor,
- threshold: Number | _complex,
- value: Number | _complex,
- ) -> Tensor: ...
- def tile(input: Tensor, dims: Sequence[_int | SymInt]) -> Tensor:
- r"""
- tile(input, dims) -> Tensor
- Constructs a tensor by repeating the elements of :attr:`input`.
- The :attr:`dims` argument specifies the number of repetitions
- in each dimension.
- If :attr:`dims` specifies fewer dimensions than :attr:`input` has, then
- ones are prepended to :attr:`dims` until all dimensions are specified.
- For example, if :attr:`input` has shape (8, 6, 4, 2) and :attr:`dims`
- is (2, 2), then :attr:`dims` is treated as (1, 1, 2, 2).
- Analogously, if :attr:`input` has fewer dimensions than :attr:`dims`
- specifies, then :attr:`input` is treated as if it were unsqueezed at
- dimension zero until it has as many dimensions as :attr:`dims` specifies.
- For example, if :attr:`input` has shape (4, 2) and :attr:`dims`
- is (3, 3, 2, 2), then :attr:`input` is treated as if it had the
- shape (1, 1, 4, 2).
- .. note::
- This function is similar to NumPy's tile function.
- Args:
- input (Tensor): the tensor whose elements to repeat.
- dims (tuple): the number of repetitions per dimension.
- Example::
- >>> x = torch.tensor([1, 2, 3])
- >>> x.tile((2,))
- tensor([1, 2, 3, 1, 2, 3])
- >>> y = torch.tensor([[1, 2], [3, 4]])
- >>> torch.tile(y, (2, 2))
- tensor([[1, 2, 1, 2],
- [3, 4, 3, 4],
- [1, 2, 1, 2],
- [3, 4, 3, 4]])
- """
- def topk(
- input: Tensor,
- k: _int | SymInt,
- dim: _int = -1,
- largest: _bool = True,
- sorted: _bool = True,
- *,
- out: Tensor | tuple[Tensor, ...] | list[Tensor] | None = None,
- ) -> torch.return_types.topk:
- r"""
- topk(input, k, dim=None, largest=True, sorted=True, *, out=None) -> (Tensor, LongTensor)
- Returns the :attr:`k` largest elements of the given :attr:`input` tensor along
- a given dimension.
- If :attr:`dim` is not given, the last dimension of the `input` is chosen.
- If :attr:`largest` is ``False`` then the `k` smallest elements are returned.
- A namedtuple of `(values, indices)` is returned with the `values` and
- `indices` of the largest `k` elements of each row of the `input` tensor in the
- given dimension `dim`.
- The boolean option :attr:`sorted` if ``True``, will make sure that the returned
- `k` elements are themselves sorted
- .. note::
- When using `torch.topk`, the indices of tied elements are not guaranteed to be stable
- and may vary across different invocations.
- Args:
- input (Tensor): the input tensor.
- k (int): the k in "top-k"
- dim (int, optional): the dimension to sort along
- largest (bool, optional): controls whether to return largest or
- smallest elements
- sorted (bool, optional): controls whether to return the elements
- in sorted order
- Keyword args:
- out (tuple, optional): the output tuple of (Tensor, LongTensor) that can be
- optionally given to be used as output buffers
- Example::
- >>> x = torch.arange(1., 6.)
- >>> x
- tensor([ 1., 2., 3., 4., 5.])
- >>> torch.topk(x, 3)
- torch.return_types.topk(values=tensor([5., 4., 3.]), indices=tensor([4, 3, 2]))
- """
- def trace(input: Tensor) -> Tensor:
- r"""
- trace(input) -> Tensor
- Returns the sum of the elements of the diagonal of the input 2-D matrix.
- Example::
- >>> x = torch.arange(1., 10.).view(3, 3)
- >>> x
- tensor([[ 1., 2., 3.],
- [ 4., 5., 6.],
- [ 7., 8., 9.]])
- >>> torch.trace(x)
- tensor(15.)
- """
- @overload
- def transpose(input: Tensor, dim0: _int, dim1: _int) -> Tensor:
- r"""
- transpose(input, dim0, dim1) -> Tensor
- Returns a tensor that is a transposed version of :attr:`input`.
- The given dimensions :attr:`dim0` and :attr:`dim1` are swapped.
- If :attr:`input` is a strided tensor then the resulting :attr:`out`
- tensor shares its underlying storage with the :attr:`input` tensor, so
- changing the content of one would change the content of the other.
- If :attr:`input` is a :ref:`sparse tensor <sparse-docs>` then the
- resulting :attr:`out` tensor *does not* share the underlying storage
- with the :attr:`input` tensor.
- If :attr:`input` is a :ref:`sparse tensor <sparse-docs>` with compressed
- layout (SparseCSR, SparseBSR, SparseCSC or SparseBSC) the arguments
- :attr:`dim0` and :attr:`dim1` must be both batch dimensions, or must
- both be sparse dimensions. The batch dimensions of a sparse tensor are the
- dimensions preceding the sparse dimensions.
- .. note::
- Transpositions which interchange the sparse dimensions of a `SparseCSR`
- or `SparseCSC` layout tensor will result in the layout changing between
- the two options. Transposition of the sparse dimensions of a ` SparseBSR`
- or `SparseBSC` layout tensor will likewise generate a result with the
- opposite layout.
- Args:
- input (Tensor): the input tensor.
- dim0 (int): the first dimension to be transposed
- dim1 (int): the second dimension to be transposed
- Example::
- >>> x = torch.randn(2, 3)
- >>> x
- tensor([[ 1.0028, -0.9893, 0.5809],
- [-0.1669, 0.7299, 0.4942]])
- >>> torch.transpose(x, 0, 1)
- tensor([[ 1.0028, -0.1669],
- [-0.9893, 0.7299],
- [ 0.5809, 0.4942]])
- See also :func:`torch.t`.
- """
- @overload
- def transpose(
- input: Tensor,
- dim0: str | EllipsisType | None,
- dim1: str | EllipsisType | None,
- ) -> Tensor:
- r"""
- transpose(input, dim0, dim1) -> Tensor
- Returns a tensor that is a transposed version of :attr:`input`.
- The given dimensions :attr:`dim0` and :attr:`dim1` are swapped.
- If :attr:`input` is a strided tensor then the resulting :attr:`out`
- tensor shares its underlying storage with the :attr:`input` tensor, so
- changing the content of one would change the content of the other.
- If :attr:`input` is a :ref:`sparse tensor <sparse-docs>` then the
- resulting :attr:`out` tensor *does not* share the underlying storage
- with the :attr:`input` tensor.
- If :attr:`input` is a :ref:`sparse tensor <sparse-docs>` with compressed
- layout (SparseCSR, SparseBSR, SparseCSC or SparseBSC) the arguments
- :attr:`dim0` and :attr:`dim1` must be both batch dimensions, or must
- both be sparse dimensions. The batch dimensions of a sparse tensor are the
- dimensions preceding the sparse dimensions.
- .. note::
- Transpositions which interchange the sparse dimensions of a `SparseCSR`
- or `SparseCSC` layout tensor will result in the layout changing between
- the two options. Transposition of the sparse dimensions of a ` SparseBSR`
- or `SparseBSC` layout tensor will likewise generate a result with the
- opposite layout.
- Args:
- input (Tensor): the input tensor.
- dim0 (int): the first dimension to be transposed
- dim1 (int): the second dimension to be transposed
- Example::
- >>> x = torch.randn(2, 3)
- >>> x
- tensor([[ 1.0028, -0.9893, 0.5809],
- [-0.1669, 0.7299, 0.4942]])
- >>> torch.transpose(x, 0, 1)
- tensor([[ 1.0028, -0.1669],
- [-0.9893, 0.7299],
- [ 0.5809, 0.4942]])
- See also :func:`torch.t`.
- """
- def transpose_copy(
- input: Tensor,
- dim0: _int,
- dim1: _int,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- Performs the same operation as :func:`torch.transpose`, but all output tensors
- are freshly created instead of aliasing the input.
- """
- @overload
- def trapezoid(y: Tensor, x: Tensor, *, dim: _int = -1) -> Tensor:
- r"""
- trapezoid(y, x=None, *, dx=None, dim=-1) -> Tensor
- Computes the `trapezoidal rule <https://en.wikipedia.org/wiki/Trapezoidal_rule>`_ along
- :attr:`dim`. By default the spacing between elements is assumed to be 1, but
- :attr:`dx` can be used to specify a different constant spacing, and :attr:`x` can be
- used to specify arbitrary spacing along :attr:`dim`. Only one of :attr:`x` or :attr:`dx` should be specified.
- Assuming :attr:`y` is a one-dimensional tensor with elements :math:`{y_0, y_1, ..., y_n}`,
- the default computation is
- .. math::
- \begin{aligned}
- \sum_{i = 1}^{n} \frac{1}{2} (y_i + y_{i-1})
- \end{aligned}
- When :attr:`dx` is specified the computation becomes
- .. math::
- \begin{aligned}
- \sum_{i = 1}^{n} \frac{\Delta x}{2} (y_i + y_{i-1})
- \end{aligned}
- effectively multiplying the result by :attr:`dx`. When :attr:`x` is specified,
- assuming :attr:`x` is also a one-dimensional tensor with
- elements :math:`{x_0, x_1, ..., x_n}`, the computation becomes
- .. math::
- \begin{aligned}
- \sum_{i = 1}^{n} \frac{(x_i - x_{i-1})}{2} (y_i + y_{i-1})
- \end{aligned}
- When :attr:`x` and :attr:`y` have the same size, the computation is as described above and no broadcasting is needed.
- The broadcasting behavior of this function is as follows when their sizes are different. For both :attr:`x`
- and :attr:`y`, the function computes the difference between consecutive elements along
- dimension :attr:`dim`. This effectively creates two tensors, `x_diff` and `y_diff`, that have
- the same shape as the original tensors except their lengths along the dimension :attr:`dim` is reduced by 1.
- After that, those two tensors are broadcast together to compute final output as part of the trapezoidal rule.
- See the examples below for details.
- .. note::
- The trapezoidal rule is a technique for approximating the definite integral of a function
- by averaging its left and right Riemann sums. The approximation becomes more accurate as
- the resolution of the partition increases.
- Arguments:
- y (Tensor): Values to use when computing the trapezoidal rule.
- x (Tensor): If specified, defines spacing between values as specified above.
- Keyword arguments:
- dx (float): constant spacing between values. If neither :attr:`x` or :attr:`dx`
- are specified then this defaults to 1. Effectively multiplies the result by its value.
- dim (int): The dimension along which to compute the trapezoidal rule.
- The last (inner-most) dimension by default.
- Examples::
- >>> # Computes the trapezoidal rule in 1D, spacing is implicitly 1
- >>> y = torch.tensor([1, 5, 10])
- >>> torch.trapezoid(y)
- tensor(10.5)
- >>> # Computes the same trapezoidal rule directly to verify
- >>> (1 + 10 + 10) / 2
- 10.5
- >>> # Computes the trapezoidal rule in 1D with constant spacing of 2
- >>> # NOTE: the result is the same as before, but multiplied by 2
- >>> torch.trapezoid(y, dx=2)
- 21.0
- >>> # Computes the trapezoidal rule in 1D with arbitrary spacing
- >>> x = torch.tensor([1, 3, 6])
- >>> torch.trapezoid(y, x)
- 28.5
- >>> # Computes the same trapezoidal rule directly to verify
- >>> ((3 - 1) * (1 + 5) + (6 - 3) * (5 + 10)) / 2
- 28.5
- >>> # Computes the trapezoidal rule for each row of a 3x3 matrix
- >>> y = torch.arange(9).reshape(3, 3)
- tensor([[0, 1, 2],
- [3, 4, 5],
- [6, 7, 8]])
- >>> torch.trapezoid(y)
- tensor([ 2., 8., 14.])
- >>> # Computes the trapezoidal rule for each column of the matrix
- >>> torch.trapezoid(y, dim=0)
- tensor([ 6., 8., 10.])
- >>> # Computes the trapezoidal rule for each row of a 3x3 ones matrix
- >>> # with the same arbitrary spacing
- >>> y = torch.ones(3, 3)
- >>> x = torch.tensor([1, 3, 6])
- >>> torch.trapezoid(y, x)
- array([5., 5., 5.])
- >>> # Computes the trapezoidal rule for each row of a 3x3 ones matrix
- >>> # with different arbitrary spacing per row
- >>> y = torch.ones(3, 3)
- >>> x = torch.tensor([[1, 2, 3], [1, 3, 5], [1, 4, 7]])
- >>> torch.trapezoid(y, x)
- array([2., 4., 6.])
- """
- @overload
- def trapezoid(
- y: Tensor,
- *,
- dx: Number | _complex = 1,
- dim: _int = -1,
- ) -> Tensor:
- r"""
- trapezoid(y, x=None, *, dx=None, dim=-1) -> Tensor
- Computes the `trapezoidal rule <https://en.wikipedia.org/wiki/Trapezoidal_rule>`_ along
- :attr:`dim`. By default the spacing between elements is assumed to be 1, but
- :attr:`dx` can be used to specify a different constant spacing, and :attr:`x` can be
- used to specify arbitrary spacing along :attr:`dim`. Only one of :attr:`x` or :attr:`dx` should be specified.
- Assuming :attr:`y` is a one-dimensional tensor with elements :math:`{y_0, y_1, ..., y_n}`,
- the default computation is
- .. math::
- \begin{aligned}
- \sum_{i = 1}^{n} \frac{1}{2} (y_i + y_{i-1})
- \end{aligned}
- When :attr:`dx` is specified the computation becomes
- .. math::
- \begin{aligned}
- \sum_{i = 1}^{n} \frac{\Delta x}{2} (y_i + y_{i-1})
- \end{aligned}
- effectively multiplying the result by :attr:`dx`. When :attr:`x` is specified,
- assuming :attr:`x` is also a one-dimensional tensor with
- elements :math:`{x_0, x_1, ..., x_n}`, the computation becomes
- .. math::
- \begin{aligned}
- \sum_{i = 1}^{n} \frac{(x_i - x_{i-1})}{2} (y_i + y_{i-1})
- \end{aligned}
- When :attr:`x` and :attr:`y` have the same size, the computation is as described above and no broadcasting is needed.
- The broadcasting behavior of this function is as follows when their sizes are different. For both :attr:`x`
- and :attr:`y`, the function computes the difference between consecutive elements along
- dimension :attr:`dim`. This effectively creates two tensors, `x_diff` and `y_diff`, that have
- the same shape as the original tensors except their lengths along the dimension :attr:`dim` is reduced by 1.
- After that, those two tensors are broadcast together to compute final output as part of the trapezoidal rule.
- See the examples below for details.
- .. note::
- The trapezoidal rule is a technique for approximating the definite integral of a function
- by averaging its left and right Riemann sums. The approximation becomes more accurate as
- the resolution of the partition increases.
- Arguments:
- y (Tensor): Values to use when computing the trapezoidal rule.
- x (Tensor): If specified, defines spacing between values as specified above.
- Keyword arguments:
- dx (float): constant spacing between values. If neither :attr:`x` or :attr:`dx`
- are specified then this defaults to 1. Effectively multiplies the result by its value.
- dim (int): The dimension along which to compute the trapezoidal rule.
- The last (inner-most) dimension by default.
- Examples::
- >>> # Computes the trapezoidal rule in 1D, spacing is implicitly 1
- >>> y = torch.tensor([1, 5, 10])
- >>> torch.trapezoid(y)
- tensor(10.5)
- >>> # Computes the same trapezoidal rule directly to verify
- >>> (1 + 10 + 10) / 2
- 10.5
- >>> # Computes the trapezoidal rule in 1D with constant spacing of 2
- >>> # NOTE: the result is the same as before, but multiplied by 2
- >>> torch.trapezoid(y, dx=2)
- 21.0
- >>> # Computes the trapezoidal rule in 1D with arbitrary spacing
- >>> x = torch.tensor([1, 3, 6])
- >>> torch.trapezoid(y, x)
- 28.5
- >>> # Computes the same trapezoidal rule directly to verify
- >>> ((3 - 1) * (1 + 5) + (6 - 3) * (5 + 10)) / 2
- 28.5
- >>> # Computes the trapezoidal rule for each row of a 3x3 matrix
- >>> y = torch.arange(9).reshape(3, 3)
- tensor([[0, 1, 2],
- [3, 4, 5],
- [6, 7, 8]])
- >>> torch.trapezoid(y)
- tensor([ 2., 8., 14.])
- >>> # Computes the trapezoidal rule for each column of the matrix
- >>> torch.trapezoid(y, dim=0)
- tensor([ 6., 8., 10.])
- >>> # Computes the trapezoidal rule for each row of a 3x3 ones matrix
- >>> # with the same arbitrary spacing
- >>> y = torch.ones(3, 3)
- >>> x = torch.tensor([1, 3, 6])
- >>> torch.trapezoid(y, x)
- array([5., 5., 5.])
- >>> # Computes the trapezoidal rule for each row of a 3x3 ones matrix
- >>> # with different arbitrary spacing per row
- >>> y = torch.ones(3, 3)
- >>> x = torch.tensor([[1, 2, 3], [1, 3, 5], [1, 4, 7]])
- >>> torch.trapezoid(y, x)
- array([2., 4., 6.])
- """
- @overload
- def trapz(y: Tensor, *, dx: _float = 1, dim: _int = -1) -> Tensor:
- r"""
- trapz(y, x, *, dim=-1) -> Tensor
- Alias for :func:`torch.trapezoid`.
- """
- @overload
- def trapz(y: Tensor, x: Tensor, *, dim: _int = -1) -> Tensor:
- r"""
- trapz(y, x, *, dim=-1) -> Tensor
- Alias for :func:`torch.trapezoid`.
- """
- def triangular_solve(
- input: Tensor,
- A: Tensor,
- upper: _bool = True,
- transpose: _bool = False,
- unitriangular: _bool = False,
- *,
- out: Tensor | tuple[Tensor, ...] | list[Tensor] | None = None,
- ) -> torch.return_types.triangular_solve:
- r"""
- triangular_solve(b, A, upper=True, transpose=False, unitriangular=False, *, out=None) -> (Tensor, Tensor)
- Solves a system of equations with a square upper or lower triangular invertible matrix :math:`A`
- and multiple right-hand sides :math:`b`.
- In symbols, it solves :math:`AX = b` and assumes :math:`A` is square upper-triangular
- (or lower-triangular if :attr:`upper`\ `= False`) and does not have zeros on the diagonal.
- `torch.triangular_solve(b, A)` can take in 2D inputs `b, A` or inputs that are
- batches of 2D matrices. If the inputs are batches, then returns
- batched outputs `X`
- If the diagonal of :attr:`A` contains zeros or elements that are very close to zero and
- :attr:`unitriangular`\ `= False` (default) or if the input matrix is badly conditioned,
- the result may contain `NaN` s.
- Supports input of float, double, cfloat and cdouble data types.
- .. warning::
- :func:`torch.triangular_solve` is deprecated in favor of :func:`torch.linalg.solve_triangular`
- and will be removed in a future PyTorch release.
- :func:`torch.linalg.solve_triangular` has its arguments reversed and does not return a
- copy of one of the inputs.
- ``X = torch.triangular_solve(B, A).solution`` should be replaced with
- .. code:: python
- X = torch.linalg.solve_triangular(A, B)
- Args:
- b (Tensor): multiple right-hand sides of size :math:`(*, m, k)` where
- :math:`*` is zero of more batch dimensions
- A (Tensor): the input triangular coefficient matrix of size :math:`(*, m, m)`
- where :math:`*` is zero or more batch dimensions
- upper (bool, optional): whether :math:`A` is upper or lower triangular. Default: ``True``.
- transpose (bool, optional): solves `op(A)X = b` where `op(A) = A^T` if this flag is ``True``,
- and `op(A) = A` if it is ``False``. Default: ``False``.
- unitriangular (bool, optional): whether :math:`A` is unit triangular.
- If True, the diagonal elements of :math:`A` are assumed to be
- 1 and not referenced from :math:`A`. Default: ``False``.
- Keyword args:
- out ((Tensor, Tensor), optional): tuple of two tensors to write
- the output to. Ignored if `None`. Default: `None`.
- Returns:
- A namedtuple `(solution, cloned_coefficient)` where `cloned_coefficient`
- is a clone of :math:`A` and `solution` is the solution :math:`X` to :math:`AX = b`
- (or whatever variant of the system of equations, depending on the keyword arguments.)
- Examples::
- >>> A = torch.randn(2, 2).triu()
- >>> A
- tensor([[ 1.1527, -1.0753],
- [ 0.0000, 0.7986]])
- >>> b = torch.randn(2, 3)
- >>> b
- tensor([[-0.0210, 2.3513, -1.5492],
- [ 1.5429, 0.7403, -1.0243]])
- >>> torch.triangular_solve(b, A)
- torch.return_types.triangular_solve(
- solution=tensor([[ 1.7841, 2.9046, -2.5405],
- [ 1.9320, 0.9270, -1.2826]]),
- cloned_coefficient=tensor([[ 1.1527, -1.0753],
- [ 0.0000, 0.7986]]))
- """
- def tril(
- input: Tensor,
- diagonal: _int = 0,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- tril(input, diagonal=0, *, out=None) -> Tensor
- Returns the lower triangular part of the matrix (2-D tensor) or batch of matrices
- :attr:`input`, the other elements of the result tensor :attr:`out` are set to 0.
- The lower triangular part of the matrix is defined as the elements on and
- below the diagonal.
- The argument :attr:`diagonal` controls which diagonal to consider. If
- :attr:`diagonal` = 0, all elements on and below the main diagonal are
- retained. A positive value includes just as many diagonals above the main
- diagonal, and similarly a negative value excludes just as many diagonals below
- the main diagonal. The main diagonal are the set of indices
- :math:`\lbrace (i, i) \rbrace` for :math:`i \in [0, \min\{d_{1}, d_{2}\} - 1]` where
- :math:`d_{1}, d_{2}` are the dimensions of the matrix.
- Args:
- input (Tensor): the input tensor.
- diagonal (int, optional): the diagonal to consider
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> a = torch.randn(3, 3)
- >>> a
- tensor([[-1.0813, -0.8619, 0.7105],
- [ 0.0935, 0.1380, 2.2112],
- [-0.3409, -0.9828, 0.0289]])
- >>> torch.tril(a)
- tensor([[-1.0813, 0.0000, 0.0000],
- [ 0.0935, 0.1380, 0.0000],
- [-0.3409, -0.9828, 0.0289]])
- >>> b = torch.randn(4, 6)
- >>> b
- tensor([[ 1.2219, 0.5653, -0.2521, -0.2345, 1.2544, 0.3461],
- [ 0.4785, -0.4477, 0.6049, 0.6368, 0.8775, 0.7145],
- [ 1.1502, 3.2716, -1.1243, -0.5413, 0.3615, 0.6864],
- [-0.0614, -0.7344, -1.3164, -0.7648, -1.4024, 0.0978]])
- >>> torch.tril(b, diagonal=1)
- tensor([[ 1.2219, 0.5653, 0.0000, 0.0000, 0.0000, 0.0000],
- [ 0.4785, -0.4477, 0.6049, 0.0000, 0.0000, 0.0000],
- [ 1.1502, 3.2716, -1.1243, -0.5413, 0.0000, 0.0000],
- [-0.0614, -0.7344, -1.3164, -0.7648, -1.4024, 0.0000]])
- >>> torch.tril(b, diagonal=-1)
- tensor([[ 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000],
- [ 0.4785, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000],
- [ 1.1502, 3.2716, 0.0000, 0.0000, 0.0000, 0.0000],
- [-0.0614, -0.7344, -1.3164, 0.0000, 0.0000, 0.0000]])
- """
- def tril_indices(
- row: _int,
- col: _int,
- offset: _int = 0,
- *,
- dtype: _dtype | None = None,
- layout: _layout | None = None,
- device: DeviceLikeType | None = None,
- pin_memory: _bool | None = False,
- requires_grad: _bool | None = False,
- ) -> Tensor:
- r"""
- tril_indices(row, col, offset=0, *, dtype=torch.long, device='cpu', layout=torch.strided) -> Tensor
- Returns the indices of the lower triangular part of a :attr:`row`-by-
- :attr:`col` matrix in a 2-by-N Tensor, where the first row contains row
- coordinates of all indices and the second row contains column coordinates.
- Indices are ordered based on rows and then columns.
- The lower triangular part of the matrix is defined as the elements on and
- below the diagonal.
- The argument :attr:`offset` controls which diagonal to consider. If
- :attr:`offset` = 0, all elements on and below the main diagonal are
- retained. A positive value includes just as many diagonals above the main
- diagonal, and similarly a negative value excludes just as many diagonals below
- the main diagonal. The main diagonal are the set of indices
- :math:`\lbrace (i, i) \rbrace` for :math:`i \in [0, \min\{d_{1}, d_{2}\} - 1]`
- where :math:`d_{1}, d_{2}` are the dimensions of the matrix.
- .. note::
- When running on CUDA, ``row * col`` must be less than :math:`2^{59}` to
- prevent overflow during calculation.
- Args:
- row (``int``): number of rows in the 2-D matrix.
- col (``int``): number of columns in the 2-D matrix.
- offset (``int``): diagonal offset from the main diagonal.
- Default: if not provided, 0.
- Keyword args:
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor,
- only support ``torch.int``, ``torch.long``. Default: if ``None``, ``torch.long``.
- device (:class:`torch.device`, optional): the desired device of returned tensor.
- Default: if ``None``, uses the current device for the default tensor type
- (see :func:`torch.set_default_device`). :attr:`device` will be the CPU
- for CPU tensor types and the current CUDA device for CUDA tensor types.
- layout (:class:`torch.layout`, optional): currently only support ``torch.strided``.
- Example::
- >>> a = torch.tril_indices(3, 3)
- >>> a
- tensor([[0, 1, 1, 2, 2, 2],
- [0, 0, 1, 0, 1, 2]])
- >>> a = torch.tril_indices(4, 3, -1)
- >>> a
- tensor([[1, 2, 2, 3, 3, 3],
- [0, 0, 1, 0, 1, 2]])
- >>> a = torch.tril_indices(4, 3, 1)
- >>> a
- tensor([[0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3],
- [0, 1, 0, 1, 2, 0, 1, 2, 0, 1, 2]])
- """
- def triplet_margin_loss(
- anchor: Tensor,
- positive: Tensor,
- negative: Tensor,
- margin: _float = 1.0,
- p: _float = 2,
- eps: _float = 1e-06,
- swap: _bool = False,
- reduction: _int = 1,
- ) -> Tensor: ...
- def triu(
- input: Tensor,
- diagonal: _int = 0,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- triu(input, diagonal=0, *, out=None) -> Tensor
- Returns the upper triangular part of a matrix (2-D tensor) or batch of matrices
- :attr:`input`, the other elements of the result tensor :attr:`out` are set to 0.
- The upper triangular part of the matrix is defined as the elements on and
- above the diagonal.
- The argument :attr:`diagonal` controls which diagonal to consider. If
- :attr:`diagonal` = 0, all elements on and above the main diagonal are
- retained. A positive value excludes just as many diagonals above the main
- diagonal, and similarly a negative value includes just as many diagonals below
- the main diagonal. The main diagonal are the set of indices
- :math:`\lbrace (i, i) \rbrace` for :math:`i \in [0, \min\{d_{1}, d_{2}\} - 1]` where
- :math:`d_{1}, d_{2}` are the dimensions of the matrix.
- Args:
- input (Tensor): the input tensor.
- diagonal (int, optional): the diagonal to consider
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> a = torch.randn(3, 3)
- >>> a
- tensor([[ 0.2309, 0.5207, 2.0049],
- [ 0.2072, -1.0680, 0.6602],
- [ 0.3480, -0.5211, -0.4573]])
- >>> torch.triu(a)
- tensor([[ 0.2309, 0.5207, 2.0049],
- [ 0.0000, -1.0680, 0.6602],
- [ 0.0000, 0.0000, -0.4573]])
- >>> torch.triu(a, diagonal=1)
- tensor([[ 0.0000, 0.5207, 2.0049],
- [ 0.0000, 0.0000, 0.6602],
- [ 0.0000, 0.0000, 0.0000]])
- >>> torch.triu(a, diagonal=-1)
- tensor([[ 0.2309, 0.5207, 2.0049],
- [ 0.2072, -1.0680, 0.6602],
- [ 0.0000, -0.5211, -0.4573]])
- >>> b = torch.randn(4, 6)
- >>> b
- tensor([[ 0.5876, -0.0794, -1.8373, 0.6654, 0.2604, 1.5235],
- [-0.2447, 0.9556, -1.2919, 1.3378, -0.1768, -1.0857],
- [ 0.4333, 0.3146, 0.6576, -1.0432, 0.9348, -0.4410],
- [-0.9888, 1.0679, -1.3337, -1.6556, 0.4798, 0.2830]])
- >>> torch.triu(b, diagonal=1)
- tensor([[ 0.0000, -0.0794, -1.8373, 0.6654, 0.2604, 1.5235],
- [ 0.0000, 0.0000, -1.2919, 1.3378, -0.1768, -1.0857],
- [ 0.0000, 0.0000, 0.0000, -1.0432, 0.9348, -0.4410],
- [ 0.0000, 0.0000, 0.0000, 0.0000, 0.4798, 0.2830]])
- >>> torch.triu(b, diagonal=-1)
- tensor([[ 0.5876, -0.0794, -1.8373, 0.6654, 0.2604, 1.5235],
- [-0.2447, 0.9556, -1.2919, 1.3378, -0.1768, -1.0857],
- [ 0.0000, 0.3146, 0.6576, -1.0432, 0.9348, -0.4410],
- [ 0.0000, 0.0000, -1.3337, -1.6556, 0.4798, 0.2830]])
- """
- def triu_indices(
- row: _int,
- col: _int,
- offset: _int = 0,
- *,
- dtype: _dtype | None = None,
- layout: _layout | None = None,
- device: DeviceLikeType | None = None,
- pin_memory: _bool | None = False,
- requires_grad: _bool | None = False,
- ) -> Tensor:
- r"""
- triu_indices(row, col, offset=0, *, dtype=torch.long, device='cpu', layout=torch.strided) -> Tensor
- Returns the indices of the upper triangular part of a :attr:`row` by
- :attr:`col` matrix in a 2-by-N Tensor, where the first row contains row
- coordinates of all indices and the second row contains column coordinates.
- Indices are ordered based on rows and then columns.
- The upper triangular part of the matrix is defined as the elements on and
- above the diagonal.
- The argument :attr:`offset` controls which diagonal to consider. If
- :attr:`offset` = 0, all elements on and above the main diagonal are
- retained. A positive value excludes just as many diagonals above the main
- diagonal, and similarly a negative value includes just as many diagonals below
- the main diagonal. The main diagonal are the set of indices
- :math:`\lbrace (i, i) \rbrace` for :math:`i \in [0, \min\{d_{1}, d_{2}\} - 1]`
- where :math:`d_{1}, d_{2}` are the dimensions of the matrix.
- .. note::
- When running on CUDA, ``row * col`` must be less than :math:`2^{59}` to
- prevent overflow during calculation.
- Args:
- row (``int``): number of rows in the 2-D matrix.
- col (``int``): number of columns in the 2-D matrix.
- offset (``int``): diagonal offset from the main diagonal.
- Default: if not provided, 0.
- Keyword args:
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor,
- only support ``torch.int``, ``torch.long``. Default: if ``None``, ``torch.long``.
- device (:class:`torch.device`, optional): the desired device of returned tensor.
- Default: if ``None``, uses the current device for the default tensor type
- (see :func:`torch.set_default_device`). :attr:`device` will be the CPU
- for CPU tensor types and the current CUDA device for CUDA tensor types.
- layout (:class:`torch.layout`, optional): currently only support ``torch.strided``.
- Example::
- >>> a = torch.triu_indices(3, 3)
- >>> a
- tensor([[0, 0, 0, 1, 1, 2],
- [0, 1, 2, 1, 2, 2]])
- >>> a = torch.triu_indices(4, 3, -1)
- >>> a
- tensor([[0, 0, 0, 1, 1, 1, 2, 2, 3],
- [0, 1, 2, 0, 1, 2, 1, 2, 2]])
- >>> a = torch.triu_indices(4, 3, 1)
- >>> a
- tensor([[0, 0, 1],
- [1, 2, 2]])
- """
- def true_divide(
- input: Tensor | Number,
- other: Tensor | Number,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- true_divide(dividend, divisor, *, out) -> Tensor
- Alias for :func:`torch.div` with ``rounding_mode=None``.
- """
- def trunc(input: Tensor, *, out: Tensor | None = None) -> Tensor:
- r"""
- trunc(input, *, out=None) -> Tensor
- Returns a new tensor with the truncated integer values of
- the elements of :attr:`input`.
- For integer inputs, follows the array-api convention of returning a
- copy of the input tensor.
- Args:
- input (Tensor): the input tensor.
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> a = torch.randn(4)
- >>> a
- tensor([ 3.4742, 0.5466, -0.8008, -0.9079])
- >>> torch.trunc(a)
- tensor([ 3., 0., -0., -0.])
- """
- def trunc_(input: Tensor) -> Tensor: ...
- @overload
- def unbind(input: Tensor, dim: _int = 0) -> tuple[Tensor, ...]:
- r"""
- unbind(input, dim=0) -> seq
- Removes a tensor dimension.
- Returns a tuple of all slices along a given dimension, already without it.
- Arguments:
- input (Tensor): the tensor to unbind
- dim (int): dimension to remove
- Example::
- >>> torch.unbind(torch.tensor([[1, 2, 3],
- >>> [4, 5, 6],
- >>> [7, 8, 9]]))
- (tensor([1, 2, 3]), tensor([4, 5, 6]), tensor([7, 8, 9]))
- """
- @overload
- def unbind(
- input: Tensor,
- dim: str | EllipsisType | None,
- ) -> tuple[Tensor, ...]:
- r"""
- unbind(input, dim=0) -> seq
- Removes a tensor dimension.
- Returns a tuple of all slices along a given dimension, already without it.
- Arguments:
- input (Tensor): the tensor to unbind
- dim (int): dimension to remove
- Example::
- >>> torch.unbind(torch.tensor([[1, 2, 3],
- >>> [4, 5, 6],
- >>> [7, 8, 9]]))
- (tensor([1, 2, 3]), tensor([4, 5, 6]), tensor([7, 8, 9]))
- """
- def unbind_copy(
- input: Tensor,
- dim: _int = 0,
- *,
- out: tuple[Tensor, ...] | list[Tensor] | None = None,
- ) -> None:
- r"""
- Performs the same operation as :func:`torch.unbind`, but all output tensors
- are freshly created instead of aliasing the input.
- """
- @overload
- def unflatten(
- input: Tensor,
- dim: str | EllipsisType | None,
- sizes: Sequence[_int | SymInt],
- names: Sequence[str | EllipsisType | None],
- ) -> Tensor:
- r"""
- unflatten(input, dim, sizes) -> Tensor
- Expands a dimension of the input tensor over multiple dimensions.
- .. seealso::
- :func:`torch.flatten` the inverse of this function. It coalesces several dimensions into one.
- Args:
- input (Tensor): the input tensor.
- dim (int): Dimension to be unflattened, specified as an index into
- ``input.shape``.
- sizes (Tuple[int]): New shape of the unflattened dimension.
- One of its elements can be `-1` in which case the corresponding output
- dimension is inferred. Otherwise, the product of ``sizes`` *must*
- equal ``input.shape[dim]``.
- Returns:
- A View of input with the specified dimension unflattened.
- Examples::
- >>> torch.unflatten(torch.randn(3, 4, 1), 1, (2, 2)).shape
- torch.Size([3, 2, 2, 1])
- >>> torch.unflatten(torch.randn(3, 4, 1), 1, (-1, 2)).shape
- torch.Size([3, 2, 2, 1])
- >>> torch.unflatten(torch.randn(5, 12, 3), -2, (2, 2, 3, 1, 1)).shape
- torch.Size([5, 2, 2, 3, 1, 1, 3])
- """
- @overload
- def unflatten(
- input: Tensor,
- dim: _int,
- sizes: Sequence[_int | SymInt],
- ) -> Tensor:
- r"""
- unflatten(input, dim, sizes) -> Tensor
- Expands a dimension of the input tensor over multiple dimensions.
- .. seealso::
- :func:`torch.flatten` the inverse of this function. It coalesces several dimensions into one.
- Args:
- input (Tensor): the input tensor.
- dim (int): Dimension to be unflattened, specified as an index into
- ``input.shape``.
- sizes (Tuple[int]): New shape of the unflattened dimension.
- One of its elements can be `-1` in which case the corresponding output
- dimension is inferred. Otherwise, the product of ``sizes`` *must*
- equal ``input.shape[dim]``.
- Returns:
- A View of input with the specified dimension unflattened.
- Examples::
- >>> torch.unflatten(torch.randn(3, 4, 1), 1, (2, 2)).shape
- torch.Size([3, 2, 2, 1])
- >>> torch.unflatten(torch.randn(3, 4, 1), 1, (-1, 2)).shape
- torch.Size([3, 2, 2, 1])
- >>> torch.unflatten(torch.randn(5, 12, 3), -2, (2, 2, 3, 1, 1)).shape
- torch.Size([5, 2, 2, 3, 1, 1, 3])
- """
- def unfold_copy(
- input: Tensor,
- dimension: _int,
- size: _int,
- step: _int,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- Performs the same operation as :func:`torch.unfold`, but all output tensors
- are freshly created instead of aliasing the input.
- """
- def unique_dim(
- input: Tensor,
- dim: _int,
- sorted: _bool = True,
- return_inverse: _bool = False,
- return_counts: _bool = False,
- ) -> tuple[Tensor, Tensor, Tensor]: ...
- def unsafe_chunk(
- input: Tensor,
- chunks: _int,
- dim: _int = 0,
- ) -> tuple[Tensor, ...]:
- r"""
- unsafe_chunk(input, chunks, dim=0) -> List of Tensors
- Works like :func:`torch.chunk` but without enforcing the autograd restrictions
- on inplace modification of the outputs.
- .. warning::
- This function is safe to use as long as only the input, or only the outputs
- are modified inplace after calling this function. It is user's
- responsibility to ensure that is the case. If both the input and one or more
- of the outputs are modified inplace, gradients computed by autograd will be
- silently incorrect.
- """
- def unsafe_split(
- input: Tensor,
- split_size: _int | SymInt,
- dim: _int = 0,
- ) -> tuple[Tensor, ...]:
- r"""
- unsafe_split(tensor, split_size_or_sections, dim=0) -> List of Tensors
- Works like :func:`torch.split` but without enforcing the autograd restrictions
- on inplace modification of the outputs.
- .. warning::
- This function is safe to use as long as only the input, or only the outputs
- are modified inplace after calling this function. It is user's
- responsibility to ensure that is the case. If both the input and one or more
- of the outputs are modified inplace, gradients computed by autograd will be
- silently incorrect.
- """
- def unsafe_split_with_sizes(
- input: Tensor,
- split_sizes: Sequence[_int | SymInt],
- dim: _int = 0,
- ) -> tuple[Tensor, ...]: ...
- def unsqueeze(input: Tensor, dim: _int) -> Tensor:
- r"""
- unsqueeze(input, dim) -> Tensor
- Returns a new tensor with a dimension of size one inserted at the
- specified position.
- The returned tensor shares the same underlying data with this tensor.
- A :attr:`dim` value within the range ``[-input.dim() - 1, input.dim() + 1)``
- can be used. Negative :attr:`dim` will correspond to :meth:`unsqueeze`
- applied at :attr:`dim` = ``dim + input.dim() + 1``.
- Args:
- input (Tensor): the input tensor.
- dim (int): the index at which to insert the singleton dimension
- Example::
- >>> x = torch.tensor([1, 2, 3, 4])
- >>> torch.unsqueeze(x, 0)
- tensor([[ 1, 2, 3, 4]])
- >>> torch.unsqueeze(x, 1)
- tensor([[ 1],
- [ 2],
- [ 3],
- [ 4]])
- """
- def unsqueeze_copy(
- input: Tensor,
- dim: _int,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- Performs the same operation as :func:`torch.unsqueeze`, but all output tensors
- are freshly created instead of aliasing the input.
- """
- def values_copy(input: Tensor, *, out: Tensor | None = None) -> Tensor:
- r"""
- Performs the same operation as :func:`torch.values`, but all output tensors
- are freshly created instead of aliasing the input.
- """
- def vander(
- x: Tensor,
- N: _int | None = None,
- increasing: _bool = False,
- ) -> Tensor:
- r"""
- vander(x, N=None, increasing=False) -> Tensor
- Generates a Vandermonde matrix.
- The columns of the output matrix are elementwise powers of the input vector :math:`x^{(N-1)}, x^{(N-2)}, ..., x^0`.
- If increasing is True, the order of the columns is reversed :math:`x^0, x^1, ..., x^{(N-1)}`. Such a
- matrix with a geometric progression in each row is named for Alexandre-Theophile Vandermonde.
- Arguments:
- x (Tensor): 1-D input tensor.
- N (int, optional): Number of columns in the output. If N is not specified,
- a square array is returned :math:`(N = len(x))`.
- increasing (bool, optional): Order of the powers of the columns. If True,
- the powers increase from left to right, if False (the default) they are reversed.
- Returns:
- Tensor: Vandermonde matrix. If increasing is False, the first column is :math:`x^{(N-1)}`,
- the second :math:`x^{(N-2)}` and so forth. If increasing is True, the columns
- are :math:`x^0, x^1, ..., x^{(N-1)}`.
- Example::
- >>> x = torch.tensor([1, 2, 3, 5])
- >>> torch.vander(x)
- tensor([[ 1, 1, 1, 1],
- [ 8, 4, 2, 1],
- [ 27, 9, 3, 1],
- [125, 25, 5, 1]])
- >>> torch.vander(x, N=3)
- tensor([[ 1, 1, 1],
- [ 4, 2, 1],
- [ 9, 3, 1],
- [25, 5, 1]])
- >>> torch.vander(x, N=3, increasing=True)
- tensor([[ 1, 1, 1],
- [ 1, 2, 4],
- [ 1, 3, 9],
- [ 1, 5, 25]])
- """
- @overload
- def var(
- input: Tensor,
- dim: _int | _size | None,
- unbiased: _bool = True,
- keepdim: _bool = False,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- var(input, dim=None, *, correction=1, keepdim=False, out=None) -> Tensor
- Calculates the variance over the dimensions specified by :attr:`dim`. :attr:`dim`
- can be a single dimension, list of dimensions, or ``None`` to reduce over all
- dimensions.
- The variance (:math:`\sigma^2`) is calculated as
- .. math:: \sigma^2 = \frac{1}{\max(0,~N - \delta N)}\sum_{i=0}^{N-1}(x_i-\bar{x})^2
- where :math:`x` is the sample set of elements, :math:`\bar{x}` is the
- sample mean, :math:`N` is the number of samples and :math:`\delta N` is
- the :attr:`correction`.
- If :attr:`keepdim` is ``True``, the output tensor is of the same size
- as :attr:`input` except in the dimension(s) :attr:`dim` where it is of size 1.
- Otherwise, :attr:`dim` is squeezed (see :func:`torch.squeeze`), resulting in the
- output tensor having 1 (or ``len(dim)``) fewer dimension(s).
- Args:
- input (Tensor): the input tensor.
- dim (int or tuple of ints, optional): the dimension or dimensions to reduce.
- If ``None``, all dimensions are reduced.
- Keyword args:
- correction (int): difference between the sample size and sample degrees of freedom.
- Defaults to `Bessel's correction`_, ``correction=1``.
- .. versionchanged:: 2.0
- Previously this argument was called ``unbiased`` and was a boolean
- with ``True`` corresponding to ``correction=1`` and ``False`` being
- ``correction=0``.
- keepdim (bool, optional): whether the output tensor has :attr:`dim` retained or not. Default: ``False``.
- out (Tensor, optional): the output tensor.
- Example:
- >>> a = torch.tensor(
- ... [[ 0.2035, 1.2959, 1.8101, -0.4644],
- ... [ 1.5027, -0.3270, 0.5905, 0.6538],
- ... [-1.5745, 1.3330, -0.5596, -0.6548],
- ... [ 0.1264, -0.5080, 1.6420, 0.1992]]
- ... ) # fmt: skip
- >>> torch.var(a, dim=1, keepdim=True)
- tensor([[1.0631],
- [0.5590],
- [1.4893],
- [0.8258]])
- .. _Bessel's correction: https://en.wikipedia.org/wiki/Bessel%27s_correction
- """
- @overload
- def var(
- input: Tensor,
- dim: _int | _size | None = None,
- *,
- correction: Number | _complex | None = None,
- keepdim: _bool = False,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- var(input, dim=None, *, correction=1, keepdim=False, out=None) -> Tensor
- Calculates the variance over the dimensions specified by :attr:`dim`. :attr:`dim`
- can be a single dimension, list of dimensions, or ``None`` to reduce over all
- dimensions.
- The variance (:math:`\sigma^2`) is calculated as
- .. math:: \sigma^2 = \frac{1}{\max(0,~N - \delta N)}\sum_{i=0}^{N-1}(x_i-\bar{x})^2
- where :math:`x` is the sample set of elements, :math:`\bar{x}` is the
- sample mean, :math:`N` is the number of samples and :math:`\delta N` is
- the :attr:`correction`.
- If :attr:`keepdim` is ``True``, the output tensor is of the same size
- as :attr:`input` except in the dimension(s) :attr:`dim` where it is of size 1.
- Otherwise, :attr:`dim` is squeezed (see :func:`torch.squeeze`), resulting in the
- output tensor having 1 (or ``len(dim)``) fewer dimension(s).
- Args:
- input (Tensor): the input tensor.
- dim (int or tuple of ints, optional): the dimension or dimensions to reduce.
- If ``None``, all dimensions are reduced.
- Keyword args:
- correction (int): difference between the sample size and sample degrees of freedom.
- Defaults to `Bessel's correction`_, ``correction=1``.
- .. versionchanged:: 2.0
- Previously this argument was called ``unbiased`` and was a boolean
- with ``True`` corresponding to ``correction=1`` and ``False`` being
- ``correction=0``.
- keepdim (bool, optional): whether the output tensor has :attr:`dim` retained or not. Default: ``False``.
- out (Tensor, optional): the output tensor.
- Example:
- >>> a = torch.tensor(
- ... [[ 0.2035, 1.2959, 1.8101, -0.4644],
- ... [ 1.5027, -0.3270, 0.5905, 0.6538],
- ... [-1.5745, 1.3330, -0.5596, -0.6548],
- ... [ 0.1264, -0.5080, 1.6420, 0.1992]]
- ... ) # fmt: skip
- >>> torch.var(a, dim=1, keepdim=True)
- tensor([[1.0631],
- [0.5590],
- [1.4893],
- [0.8258]])
- .. _Bessel's correction: https://en.wikipedia.org/wiki/Bessel%27s_correction
- """
- @overload
- def var(input: Tensor, unbiased: _bool = True) -> Tensor:
- r"""
- var(input, dim=None, *, correction=1, keepdim=False, out=None) -> Tensor
- Calculates the variance over the dimensions specified by :attr:`dim`. :attr:`dim`
- can be a single dimension, list of dimensions, or ``None`` to reduce over all
- dimensions.
- The variance (:math:`\sigma^2`) is calculated as
- .. math:: \sigma^2 = \frac{1}{\max(0,~N - \delta N)}\sum_{i=0}^{N-1}(x_i-\bar{x})^2
- where :math:`x` is the sample set of elements, :math:`\bar{x}` is the
- sample mean, :math:`N` is the number of samples and :math:`\delta N` is
- the :attr:`correction`.
- If :attr:`keepdim` is ``True``, the output tensor is of the same size
- as :attr:`input` except in the dimension(s) :attr:`dim` where it is of size 1.
- Otherwise, :attr:`dim` is squeezed (see :func:`torch.squeeze`), resulting in the
- output tensor having 1 (or ``len(dim)``) fewer dimension(s).
- Args:
- input (Tensor): the input tensor.
- dim (int or tuple of ints, optional): the dimension or dimensions to reduce.
- If ``None``, all dimensions are reduced.
- Keyword args:
- correction (int): difference between the sample size and sample degrees of freedom.
- Defaults to `Bessel's correction`_, ``correction=1``.
- .. versionchanged:: 2.0
- Previously this argument was called ``unbiased`` and was a boolean
- with ``True`` corresponding to ``correction=1`` and ``False`` being
- ``correction=0``.
- keepdim (bool, optional): whether the output tensor has :attr:`dim` retained or not. Default: ``False``.
- out (Tensor, optional): the output tensor.
- Example:
- >>> a = torch.tensor(
- ... [[ 0.2035, 1.2959, 1.8101, -0.4644],
- ... [ 1.5027, -0.3270, 0.5905, 0.6538],
- ... [-1.5745, 1.3330, -0.5596, -0.6548],
- ... [ 0.1264, -0.5080, 1.6420, 0.1992]]
- ... ) # fmt: skip
- >>> torch.var(a, dim=1, keepdim=True)
- tensor([[1.0631],
- [0.5590],
- [1.4893],
- [0.8258]])
- .. _Bessel's correction: https://en.wikipedia.org/wiki/Bessel%27s_correction
- """
- @overload
- def var(
- input: Tensor,
- dim: Sequence[str | EllipsisType | None],
- *,
- correction: Number | _complex | None = None,
- keepdim: _bool = False,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- var(input, dim=None, *, correction=1, keepdim=False, out=None) -> Tensor
- Calculates the variance over the dimensions specified by :attr:`dim`. :attr:`dim`
- can be a single dimension, list of dimensions, or ``None`` to reduce over all
- dimensions.
- The variance (:math:`\sigma^2`) is calculated as
- .. math:: \sigma^2 = \frac{1}{\max(0,~N - \delta N)}\sum_{i=0}^{N-1}(x_i-\bar{x})^2
- where :math:`x` is the sample set of elements, :math:`\bar{x}` is the
- sample mean, :math:`N` is the number of samples and :math:`\delta N` is
- the :attr:`correction`.
- If :attr:`keepdim` is ``True``, the output tensor is of the same size
- as :attr:`input` except in the dimension(s) :attr:`dim` where it is of size 1.
- Otherwise, :attr:`dim` is squeezed (see :func:`torch.squeeze`), resulting in the
- output tensor having 1 (or ``len(dim)``) fewer dimension(s).
- Args:
- input (Tensor): the input tensor.
- dim (int or tuple of ints, optional): the dimension or dimensions to reduce.
- If ``None``, all dimensions are reduced.
- Keyword args:
- correction (int): difference between the sample size and sample degrees of freedom.
- Defaults to `Bessel's correction`_, ``correction=1``.
- .. versionchanged:: 2.0
- Previously this argument was called ``unbiased`` and was a boolean
- with ``True`` corresponding to ``correction=1`` and ``False`` being
- ``correction=0``.
- keepdim (bool, optional): whether the output tensor has :attr:`dim` retained or not. Default: ``False``.
- out (Tensor, optional): the output tensor.
- Example:
- >>> a = torch.tensor(
- ... [[ 0.2035, 1.2959, 1.8101, -0.4644],
- ... [ 1.5027, -0.3270, 0.5905, 0.6538],
- ... [-1.5745, 1.3330, -0.5596, -0.6548],
- ... [ 0.1264, -0.5080, 1.6420, 0.1992]]
- ... ) # fmt: skip
- >>> torch.var(a, dim=1, keepdim=True)
- tensor([[1.0631],
- [0.5590],
- [1.4893],
- [0.8258]])
- .. _Bessel's correction: https://en.wikipedia.org/wiki/Bessel%27s_correction
- """
- @overload
- def var(
- input: Tensor,
- dim: Sequence[str | EllipsisType | None],
- unbiased: _bool = True,
- keepdim: _bool = False,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- var(input, dim=None, *, correction=1, keepdim=False, out=None) -> Tensor
- Calculates the variance over the dimensions specified by :attr:`dim`. :attr:`dim`
- can be a single dimension, list of dimensions, or ``None`` to reduce over all
- dimensions.
- The variance (:math:`\sigma^2`) is calculated as
- .. math:: \sigma^2 = \frac{1}{\max(0,~N - \delta N)}\sum_{i=0}^{N-1}(x_i-\bar{x})^2
- where :math:`x` is the sample set of elements, :math:`\bar{x}` is the
- sample mean, :math:`N` is the number of samples and :math:`\delta N` is
- the :attr:`correction`.
- If :attr:`keepdim` is ``True``, the output tensor is of the same size
- as :attr:`input` except in the dimension(s) :attr:`dim` where it is of size 1.
- Otherwise, :attr:`dim` is squeezed (see :func:`torch.squeeze`), resulting in the
- output tensor having 1 (or ``len(dim)``) fewer dimension(s).
- Args:
- input (Tensor): the input tensor.
- dim (int or tuple of ints, optional): the dimension or dimensions to reduce.
- If ``None``, all dimensions are reduced.
- Keyword args:
- correction (int): difference between the sample size and sample degrees of freedom.
- Defaults to `Bessel's correction`_, ``correction=1``.
- .. versionchanged:: 2.0
- Previously this argument was called ``unbiased`` and was a boolean
- with ``True`` corresponding to ``correction=1`` and ``False`` being
- ``correction=0``.
- keepdim (bool, optional): whether the output tensor has :attr:`dim` retained or not. Default: ``False``.
- out (Tensor, optional): the output tensor.
- Example:
- >>> a = torch.tensor(
- ... [[ 0.2035, 1.2959, 1.8101, -0.4644],
- ... [ 1.5027, -0.3270, 0.5905, 0.6538],
- ... [-1.5745, 1.3330, -0.5596, -0.6548],
- ... [ 0.1264, -0.5080, 1.6420, 0.1992]]
- ... ) # fmt: skip
- >>> torch.var(a, dim=1, keepdim=True)
- tensor([[1.0631],
- [0.5590],
- [1.4893],
- [0.8258]])
- .. _Bessel's correction: https://en.wikipedia.org/wiki/Bessel%27s_correction
- """
- @overload
- def var_mean(
- input: Tensor,
- dim: _int | _size | None,
- unbiased: _bool = True,
- keepdim: _bool = False,
- ) -> tuple[Tensor, Tensor]:
- r"""
- var_mean(input, dim=None, *, correction=1, keepdim=False, out=None) -> (Tensor, Tensor)
- Calculates the variance and mean over the dimensions specified by :attr:`dim`.
- :attr:`dim` can be a single dimension, list of dimensions, or ``None`` to
- reduce over all dimensions.
- The variance (:math:`\sigma^2`) is calculated as
- .. math:: \sigma^2 = \frac{1}{\max(0,~N - \delta N)}\sum_{i=0}^{N-1}(x_i-\bar{x})^2
- where :math:`x` is the sample set of elements, :math:`\bar{x}` is the
- sample mean, :math:`N` is the number of samples and :math:`\delta N` is
- the :attr:`correction`.
- If :attr:`keepdim` is ``True``, the output tensor is of the same size
- as :attr:`input` except in the dimension(s) :attr:`dim` where it is of size 1.
- Otherwise, :attr:`dim` is squeezed (see :func:`torch.squeeze`), resulting in the
- output tensor having 1 (or ``len(dim)``) fewer dimension(s).
- Args:
- input (Tensor): the input tensor.
- dim (int or tuple of ints, optional): the dimension or dimensions to reduce.
- If ``None``, all dimensions are reduced.
- Keyword args:
- correction (int): difference between the sample size and sample degrees of freedom.
- Defaults to `Bessel's correction`_, ``correction=1``.
- .. versionchanged:: 2.0
- Previously this argument was called ``unbiased`` and was a boolean
- with ``True`` corresponding to ``correction=1`` and ``False`` being
- ``correction=0``.
- keepdim (bool, optional): whether the output tensor has :attr:`dim` retained or not. Default: ``False``.
- out (Tensor, optional): the output tensor.
- Returns:
- A tuple (var, mean) containing the variance and mean.
- Example:
- >>> a = torch.tensor(
- ... [[ 0.2035, 1.2959, 1.8101, -0.4644],
- ... [ 1.5027, -0.3270, 0.5905, 0.6538],
- ... [-1.5745, 1.3330, -0.5596, -0.6548],
- ... [ 0.1264, -0.5080, 1.6420, 0.1992]]
- ... ) # fmt: skip
- >>> torch.var_mean(a, dim=0, keepdim=True)
- (tensor([[1.5926, 1.0056, 1.2005, 0.3646]]),
- tensor([[ 0.0645, 0.4485, 0.8707, -0.0665]]))
- .. _Bessel's correction: https://en.wikipedia.org/wiki/Bessel%27s_correction
- """
- @overload
- def var_mean(
- input: Tensor,
- dim: _int | _size | None = None,
- *,
- correction: Number | _complex | None = None,
- keepdim: _bool = False,
- ) -> tuple[Tensor, Tensor]:
- r"""
- var_mean(input, dim=None, *, correction=1, keepdim=False, out=None) -> (Tensor, Tensor)
- Calculates the variance and mean over the dimensions specified by :attr:`dim`.
- :attr:`dim` can be a single dimension, list of dimensions, or ``None`` to
- reduce over all dimensions.
- The variance (:math:`\sigma^2`) is calculated as
- .. math:: \sigma^2 = \frac{1}{\max(0,~N - \delta N)}\sum_{i=0}^{N-1}(x_i-\bar{x})^2
- where :math:`x` is the sample set of elements, :math:`\bar{x}` is the
- sample mean, :math:`N` is the number of samples and :math:`\delta N` is
- the :attr:`correction`.
- If :attr:`keepdim` is ``True``, the output tensor is of the same size
- as :attr:`input` except in the dimension(s) :attr:`dim` where it is of size 1.
- Otherwise, :attr:`dim` is squeezed (see :func:`torch.squeeze`), resulting in the
- output tensor having 1 (or ``len(dim)``) fewer dimension(s).
- Args:
- input (Tensor): the input tensor.
- dim (int or tuple of ints, optional): the dimension or dimensions to reduce.
- If ``None``, all dimensions are reduced.
- Keyword args:
- correction (int): difference between the sample size and sample degrees of freedom.
- Defaults to `Bessel's correction`_, ``correction=1``.
- .. versionchanged:: 2.0
- Previously this argument was called ``unbiased`` and was a boolean
- with ``True`` corresponding to ``correction=1`` and ``False`` being
- ``correction=0``.
- keepdim (bool, optional): whether the output tensor has :attr:`dim` retained or not. Default: ``False``.
- out (Tensor, optional): the output tensor.
- Returns:
- A tuple (var, mean) containing the variance and mean.
- Example:
- >>> a = torch.tensor(
- ... [[ 0.2035, 1.2959, 1.8101, -0.4644],
- ... [ 1.5027, -0.3270, 0.5905, 0.6538],
- ... [-1.5745, 1.3330, -0.5596, -0.6548],
- ... [ 0.1264, -0.5080, 1.6420, 0.1992]]
- ... ) # fmt: skip
- >>> torch.var_mean(a, dim=0, keepdim=True)
- (tensor([[1.5926, 1.0056, 1.2005, 0.3646]]),
- tensor([[ 0.0645, 0.4485, 0.8707, -0.0665]]))
- .. _Bessel's correction: https://en.wikipedia.org/wiki/Bessel%27s_correction
- """
- @overload
- def var_mean(
- input: Tensor,
- unbiased: _bool = True,
- ) -> tuple[Tensor, Tensor]:
- r"""
- var_mean(input, dim=None, *, correction=1, keepdim=False, out=None) -> (Tensor, Tensor)
- Calculates the variance and mean over the dimensions specified by :attr:`dim`.
- :attr:`dim` can be a single dimension, list of dimensions, or ``None`` to
- reduce over all dimensions.
- The variance (:math:`\sigma^2`) is calculated as
- .. math:: \sigma^2 = \frac{1}{\max(0,~N - \delta N)}\sum_{i=0}^{N-1}(x_i-\bar{x})^2
- where :math:`x` is the sample set of elements, :math:`\bar{x}` is the
- sample mean, :math:`N` is the number of samples and :math:`\delta N` is
- the :attr:`correction`.
- If :attr:`keepdim` is ``True``, the output tensor is of the same size
- as :attr:`input` except in the dimension(s) :attr:`dim` where it is of size 1.
- Otherwise, :attr:`dim` is squeezed (see :func:`torch.squeeze`), resulting in the
- output tensor having 1 (or ``len(dim)``) fewer dimension(s).
- Args:
- input (Tensor): the input tensor.
- dim (int or tuple of ints, optional): the dimension or dimensions to reduce.
- If ``None``, all dimensions are reduced.
- Keyword args:
- correction (int): difference between the sample size and sample degrees of freedom.
- Defaults to `Bessel's correction`_, ``correction=1``.
- .. versionchanged:: 2.0
- Previously this argument was called ``unbiased`` and was a boolean
- with ``True`` corresponding to ``correction=1`` and ``False`` being
- ``correction=0``.
- keepdim (bool, optional): whether the output tensor has :attr:`dim` retained or not. Default: ``False``.
- out (Tensor, optional): the output tensor.
- Returns:
- A tuple (var, mean) containing the variance and mean.
- Example:
- >>> a = torch.tensor(
- ... [[ 0.2035, 1.2959, 1.8101, -0.4644],
- ... [ 1.5027, -0.3270, 0.5905, 0.6538],
- ... [-1.5745, 1.3330, -0.5596, -0.6548],
- ... [ 0.1264, -0.5080, 1.6420, 0.1992]]
- ... ) # fmt: skip
- >>> torch.var_mean(a, dim=0, keepdim=True)
- (tensor([[1.5926, 1.0056, 1.2005, 0.3646]]),
- tensor([[ 0.0645, 0.4485, 0.8707, -0.0665]]))
- .. _Bessel's correction: https://en.wikipedia.org/wiki/Bessel%27s_correction
- """
- @overload
- def var_mean(
- input: Tensor,
- dim: Sequence[str | EllipsisType | None],
- *,
- correction: Number | _complex | None = None,
- keepdim: _bool = False,
- ) -> tuple[Tensor, Tensor]:
- r"""
- var_mean(input, dim=None, *, correction=1, keepdim=False, out=None) -> (Tensor, Tensor)
- Calculates the variance and mean over the dimensions specified by :attr:`dim`.
- :attr:`dim` can be a single dimension, list of dimensions, or ``None`` to
- reduce over all dimensions.
- The variance (:math:`\sigma^2`) is calculated as
- .. math:: \sigma^2 = \frac{1}{\max(0,~N - \delta N)}\sum_{i=0}^{N-1}(x_i-\bar{x})^2
- where :math:`x` is the sample set of elements, :math:`\bar{x}` is the
- sample mean, :math:`N` is the number of samples and :math:`\delta N` is
- the :attr:`correction`.
- If :attr:`keepdim` is ``True``, the output tensor is of the same size
- as :attr:`input` except in the dimension(s) :attr:`dim` where it is of size 1.
- Otherwise, :attr:`dim` is squeezed (see :func:`torch.squeeze`), resulting in the
- output tensor having 1 (or ``len(dim)``) fewer dimension(s).
- Args:
- input (Tensor): the input tensor.
- dim (int or tuple of ints, optional): the dimension or dimensions to reduce.
- If ``None``, all dimensions are reduced.
- Keyword args:
- correction (int): difference between the sample size and sample degrees of freedom.
- Defaults to `Bessel's correction`_, ``correction=1``.
- .. versionchanged:: 2.0
- Previously this argument was called ``unbiased`` and was a boolean
- with ``True`` corresponding to ``correction=1`` and ``False`` being
- ``correction=0``.
- keepdim (bool, optional): whether the output tensor has :attr:`dim` retained or not. Default: ``False``.
- out (Tensor, optional): the output tensor.
- Returns:
- A tuple (var, mean) containing the variance and mean.
- Example:
- >>> a = torch.tensor(
- ... [[ 0.2035, 1.2959, 1.8101, -0.4644],
- ... [ 1.5027, -0.3270, 0.5905, 0.6538],
- ... [-1.5745, 1.3330, -0.5596, -0.6548],
- ... [ 0.1264, -0.5080, 1.6420, 0.1992]]
- ... ) # fmt: skip
- >>> torch.var_mean(a, dim=0, keepdim=True)
- (tensor([[1.5926, 1.0056, 1.2005, 0.3646]]),
- tensor([[ 0.0645, 0.4485, 0.8707, -0.0665]]))
- .. _Bessel's correction: https://en.wikipedia.org/wiki/Bessel%27s_correction
- """
- @overload
- def var_mean(
- input: Tensor,
- dim: Sequence[str | EllipsisType | None],
- unbiased: _bool = True,
- keepdim: _bool = False,
- ) -> tuple[Tensor, Tensor]:
- r"""
- var_mean(input, dim=None, *, correction=1, keepdim=False, out=None) -> (Tensor, Tensor)
- Calculates the variance and mean over the dimensions specified by :attr:`dim`.
- :attr:`dim` can be a single dimension, list of dimensions, or ``None`` to
- reduce over all dimensions.
- The variance (:math:`\sigma^2`) is calculated as
- .. math:: \sigma^2 = \frac{1}{\max(0,~N - \delta N)}\sum_{i=0}^{N-1}(x_i-\bar{x})^2
- where :math:`x` is the sample set of elements, :math:`\bar{x}` is the
- sample mean, :math:`N` is the number of samples and :math:`\delta N` is
- the :attr:`correction`.
- If :attr:`keepdim` is ``True``, the output tensor is of the same size
- as :attr:`input` except in the dimension(s) :attr:`dim` where it is of size 1.
- Otherwise, :attr:`dim` is squeezed (see :func:`torch.squeeze`), resulting in the
- output tensor having 1 (or ``len(dim)``) fewer dimension(s).
- Args:
- input (Tensor): the input tensor.
- dim (int or tuple of ints, optional): the dimension or dimensions to reduce.
- If ``None``, all dimensions are reduced.
- Keyword args:
- correction (int): difference between the sample size and sample degrees of freedom.
- Defaults to `Bessel's correction`_, ``correction=1``.
- .. versionchanged:: 2.0
- Previously this argument was called ``unbiased`` and was a boolean
- with ``True`` corresponding to ``correction=1`` and ``False`` being
- ``correction=0``.
- keepdim (bool, optional): whether the output tensor has :attr:`dim` retained or not. Default: ``False``.
- out (Tensor, optional): the output tensor.
- Returns:
- A tuple (var, mean) containing the variance and mean.
- Example:
- >>> a = torch.tensor(
- ... [[ 0.2035, 1.2959, 1.8101, -0.4644],
- ... [ 1.5027, -0.3270, 0.5905, 0.6538],
- ... [-1.5745, 1.3330, -0.5596, -0.6548],
- ... [ 0.1264, -0.5080, 1.6420, 0.1992]]
- ... ) # fmt: skip
- >>> torch.var_mean(a, dim=0, keepdim=True)
- (tensor([[1.5926, 1.0056, 1.2005, 0.3646]]),
- tensor([[ 0.0645, 0.4485, 0.8707, -0.0665]]))
- .. _Bessel's correction: https://en.wikipedia.org/wiki/Bessel%27s_correction
- """
- def vdot(
- input: Tensor,
- other: Tensor,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- vdot(input, other, *, out=None) -> Tensor
- Computes the dot product of two 1D vectors along a dimension.
- In symbols, this function computes
- .. math::
- \sum_{i=1}^n \overline{x_i}y_i.
- where :math:`\overline{x_i}` denotes the conjugate for complex
- vectors, and it is the identity for real vectors.
- .. note::
- Unlike NumPy's vdot, torch.vdot intentionally only supports computing the dot product
- of two 1D tensors with the same number of elements.
- .. seealso::
- :func:`torch.linalg.vecdot` computes the dot product of two batches of vectors along a dimension.
- Args:
- input (Tensor): first tensor in the dot product, must be 1D. Its conjugate is used if it's complex.
- other (Tensor): second tensor in the dot product, must be 1D.
- Keyword args:
- .. note:: out (Tensor, optional): the output tensor.
- Example::
- >>> torch.vdot(torch.tensor([2, 3]), torch.tensor([2, 1]))
- tensor(7)
- >>> a = torch.tensor((1 +2j, 3 - 1j))
- >>> b = torch.tensor((2 +1j, 4 - 0j))
- >>> torch.vdot(a, b)
- tensor([16.+1.j])
- >>> torch.vdot(b, a)
- tensor([16.-1.j])
- """
- def view_as_complex(input: Tensor) -> Tensor:
- r"""
- view_as_complex(input) -> Tensor
- Returns a view of :attr:`input` as a complex tensor. For an input complex
- tensor of :attr:`size` :math:`m1, m2, \dots, mi, 2`, this function returns a
- new complex tensor of :attr:`size` :math:`m1, m2, \dots, mi` where the last
- dimension of the input tensor is expected to represent the real and imaginary
- components of complex numbers.
- .. warning::
- :func:`view_as_complex` is only supported for tensors with
- :class:`torch.dtype` ``torch.float64`` and ``torch.float32``. The input is
- expected to have the last dimension of :attr:`size` 2. In addition, the
- tensor must have a `stride` of 1 for its last dimension. The strides of all
- other dimensions must be even numbers.
- Args:
- input (Tensor): the input tensor.
- Example::
- >>> x=torch.randn(4, 2)
- >>> x
- tensor([[ 1.6116, -0.5772],
- [-1.4606, -0.9120],
- [ 0.0786, -1.7497],
- [-0.6561, -1.6623]])
- >>> torch.view_as_complex(x)
- tensor([(1.6116-0.5772j), (-1.4606-0.9120j), (0.0786-1.7497j), (-0.6561-1.6623j)])
- """
- def view_as_complex_copy(
- input: Tensor,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- Performs the same operation as :func:`torch.view_as_complex`, but all output tensors
- are freshly created instead of aliasing the input.
- """
- def view_as_real(input: Tensor) -> Tensor:
- r"""
- view_as_real(input) -> Tensor
- Returns a view of :attr:`input` as a real tensor. For an input complex tensor of
- :attr:`size` :math:`m1, m2, \dots, mi`, this function returns a new
- real tensor of size :math:`m1, m2, \dots, mi, 2`, where the last dimension of size 2
- represents the real and imaginary components of complex numbers.
- .. warning::
- :func:`view_as_real` is only supported for tensors with ``complex dtypes``.
- Args:
- input (Tensor): the input tensor.
- Example::
- >>> x=torch.randn(4, dtype=torch.cfloat)
- >>> x
- tensor([(0.4737-0.3839j), (-0.2098-0.6699j), (0.3470-0.9451j), (-0.5174-1.3136j)])
- >>> torch.view_as_real(x)
- tensor([[ 0.4737, -0.3839],
- [-0.2098, -0.6699],
- [ 0.3470, -0.9451],
- [-0.5174, -1.3136]])
- """
- def view_as_real_copy(
- input: Tensor,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- Performs the same operation as :func:`torch.view_as_real`, but all output tensors
- are freshly created instead of aliasing the input.
- """
- @overload
- def view_copy(
- input: Tensor,
- dtype: _dtype,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- Performs the same operation as :func:`torch.view`, but all output tensors
- are freshly created instead of aliasing the input.
- """
- @overload
- def view_copy(
- input: Tensor,
- size: Sequence[_int | SymInt],
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- Performs the same operation as :func:`torch.view`, but all output tensors
- are freshly created instead of aliasing the input.
- """
- @overload
- def vsplit(input: Tensor, sections: _int) -> tuple[Tensor, ...]:
- r"""
- vsplit(input, indices_or_sections) -> List of Tensors
- Splits :attr:`input`, a tensor with two or more dimensions, into multiple tensors
- vertically according to :attr:`indices_or_sections`. Each split is a view of
- :attr:`input`.
- This is equivalent to calling torch.tensor_split(input, indices_or_sections, dim=0)
- (the split dimension is 0), except that if :attr:`indices_or_sections` is an integer
- it must evenly divide the split dimension or a runtime error will be thrown.
- This function is based on NumPy's :func:`numpy.vsplit`.
- Args:
- input (Tensor): tensor to split.
- indices_or_sections (int or list or tuple of ints): See argument in :func:`torch.tensor_split`.
- Example::
- >>> t = torch.arange(16.0).reshape(4,4)
- >>> t
- tensor([[ 0., 1., 2., 3.],
- [ 4., 5., 6., 7.],
- [ 8., 9., 10., 11.],
- [12., 13., 14., 15.]])
- >>> torch.vsplit(t, 2)
- (tensor([[0., 1., 2., 3.],
- [4., 5., 6., 7.]]),
- tensor([[ 8., 9., 10., 11.],
- [12., 13., 14., 15.]]))
- >>> torch.vsplit(t, [3, 6])
- (tensor([[ 0., 1., 2., 3.],
- [ 4., 5., 6., 7.],
- [ 8., 9., 10., 11.]]),
- tensor([[12., 13., 14., 15.]]),
- tensor([], size=(0, 4)))
- """
- @overload
- def vsplit(input: Tensor, indices: _size) -> tuple[Tensor, ...]:
- r"""
- vsplit(input, indices_or_sections) -> List of Tensors
- Splits :attr:`input`, a tensor with two or more dimensions, into multiple tensors
- vertically according to :attr:`indices_or_sections`. Each split is a view of
- :attr:`input`.
- This is equivalent to calling torch.tensor_split(input, indices_or_sections, dim=0)
- (the split dimension is 0), except that if :attr:`indices_or_sections` is an integer
- it must evenly divide the split dimension or a runtime error will be thrown.
- This function is based on NumPy's :func:`numpy.vsplit`.
- Args:
- input (Tensor): tensor to split.
- indices_or_sections (int or list or tuple of ints): See argument in :func:`torch.tensor_split`.
- Example::
- >>> t = torch.arange(16.0).reshape(4,4)
- >>> t
- tensor([[ 0., 1., 2., 3.],
- [ 4., 5., 6., 7.],
- [ 8., 9., 10., 11.],
- [12., 13., 14., 15.]])
- >>> torch.vsplit(t, 2)
- (tensor([[0., 1., 2., 3.],
- [4., 5., 6., 7.]]),
- tensor([[ 8., 9., 10., 11.],
- [12., 13., 14., 15.]]))
- >>> torch.vsplit(t, [3, 6])
- (tensor([[ 0., 1., 2., 3.],
- [ 4., 5., 6., 7.],
- [ 8., 9., 10., 11.]]),
- tensor([[12., 13., 14., 15.]]),
- tensor([], size=(0, 4)))
- """
- def vstack(
- tensors: tuple[Tensor, ...] | list[Tensor] | None,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- vstack(tensors, *, out=None) -> Tensor
- Stack tensors in sequence vertically (row wise).
- This is equivalent to concatenation along the first axis after all 1-D tensors have been reshaped by :func:`torch.atleast_2d`.
- Args:
- tensors (sequence of Tensors): sequence of tensors to concatenate
- Keyword args:
- out (Tensor, optional): the output tensor.
- Example::
- >>> a = torch.tensor([1, 2, 3])
- >>> b = torch.tensor([4, 5, 6])
- >>> torch.vstack((a,b))
- tensor([[1, 2, 3],
- [4, 5, 6]])
- >>> a = torch.tensor([[1],[2],[3]])
- >>> b = torch.tensor([[4],[5],[6]])
- >>> torch.vstack((a,b))
- tensor([[1],
- [2],
- [3],
- [4],
- [5],
- [6]])
- """
- @overload
- def where(condition: Tensor) -> tuple[Tensor, ...]:
- r"""
- where(condition, input, other, *, out=None) -> Tensor
- Return a tensor of elements selected from either :attr:`input` or :attr:`other`, depending on :attr:`condition`.
- The operation is defined as:
- .. math::
- \text{out}_i = \begin{cases}
- \text{input}_i & \text{if } \text{condition}_i \\
- \text{other}_i & \text{otherwise} \\
- \end{cases}
- .. note::
- The tensors :attr:`condition`, :attr:`input`, :attr:`other` must be :ref:`broadcastable <broadcasting-semantics>`.
- Arguments:
- condition (BoolTensor): When True (nonzero), yield input, otherwise yield other
- input (Tensor or Scalar): value (if :attr:`input` is a scalar) or values selected at indices
- where :attr:`condition` is ``True``
- other (Tensor or Scalar): value (if :attr:`other` is a scalar) or values selected at indices
- where :attr:`condition` is ``False``
- Keyword args:
- out (Tensor, optional): the output tensor.
- Returns:
- Tensor: A tensor of shape equal to the broadcasted shape of :attr:`condition`, :attr:`input`, :attr:`other`
- Example::
- >>> x = torch.randn(3, 2)
- >>> y = torch.ones(3, 2)
- >>> x
- tensor([[-0.4620, 0.3139],
- [ 0.3898, -0.7197],
- [ 0.0478, -0.1657]])
- >>> torch.where(x > 0, 1.0, 0.0)
- tensor([[0., 1.],
- [1., 0.],
- [1., 0.]])
- >>> torch.where(x > 0, x, y)
- tensor([[ 1.0000, 0.3139],
- [ 0.3898, 1.0000],
- [ 0.0478, 1.0000]])
- >>> x = torch.randn(2, 2, dtype=torch.double)
- >>> x
- tensor([[ 1.0779, 0.0383],
- [-0.8785, -1.1089]], dtype=torch.float64)
- >>> torch.where(x > 0, x, 0.)
- tensor([[1.0779, 0.0383],
- [0.0000, 0.0000]], dtype=torch.float64)
- .. function:: where(condition) -> tuple of LongTensor
- :noindex:
- ``torch.where(condition)`` is identical to
- ``torch.nonzero(condition, as_tuple=True)``.
- .. note::
- See also :func:`torch.nonzero`.
- """
- @overload
- def where(
- condition: Tensor,
- input: Tensor,
- other: Tensor,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- where(condition, input, other, *, out=None) -> Tensor
- Return a tensor of elements selected from either :attr:`input` or :attr:`other`, depending on :attr:`condition`.
- The operation is defined as:
- .. math::
- \text{out}_i = \begin{cases}
- \text{input}_i & \text{if } \text{condition}_i \\
- \text{other}_i & \text{otherwise} \\
- \end{cases}
- .. note::
- The tensors :attr:`condition`, :attr:`input`, :attr:`other` must be :ref:`broadcastable <broadcasting-semantics>`.
- Arguments:
- condition (BoolTensor): When True (nonzero), yield input, otherwise yield other
- input (Tensor or Scalar): value (if :attr:`input` is a scalar) or values selected at indices
- where :attr:`condition` is ``True``
- other (Tensor or Scalar): value (if :attr:`other` is a scalar) or values selected at indices
- where :attr:`condition` is ``False``
- Keyword args:
- out (Tensor, optional): the output tensor.
- Returns:
- Tensor: A tensor of shape equal to the broadcasted shape of :attr:`condition`, :attr:`input`, :attr:`other`
- Example::
- >>> x = torch.randn(3, 2)
- >>> y = torch.ones(3, 2)
- >>> x
- tensor([[-0.4620, 0.3139],
- [ 0.3898, -0.7197],
- [ 0.0478, -0.1657]])
- >>> torch.where(x > 0, 1.0, 0.0)
- tensor([[0., 1.],
- [1., 0.],
- [1., 0.]])
- >>> torch.where(x > 0, x, y)
- tensor([[ 1.0000, 0.3139],
- [ 0.3898, 1.0000],
- [ 0.0478, 1.0000]])
- >>> x = torch.randn(2, 2, dtype=torch.double)
- >>> x
- tensor([[ 1.0779, 0.0383],
- [-0.8785, -1.1089]], dtype=torch.float64)
- >>> torch.where(x > 0, x, 0.)
- tensor([[1.0779, 0.0383],
- [0.0000, 0.0000]], dtype=torch.float64)
- .. function:: where(condition) -> tuple of LongTensor
- :noindex:
- ``torch.where(condition)`` is identical to
- ``torch.nonzero(condition, as_tuple=True)``.
- .. note::
- See also :func:`torch.nonzero`.
- """
- @overload
- def where(
- condition: Tensor,
- self: Number | _complex,
- other: Tensor,
- ) -> Tensor:
- r"""
- where(condition, input, other, *, out=None) -> Tensor
- Return a tensor of elements selected from either :attr:`input` or :attr:`other`, depending on :attr:`condition`.
- The operation is defined as:
- .. math::
- \text{out}_i = \begin{cases}
- \text{input}_i & \text{if } \text{condition}_i \\
- \text{other}_i & \text{otherwise} \\
- \end{cases}
- .. note::
- The tensors :attr:`condition`, :attr:`input`, :attr:`other` must be :ref:`broadcastable <broadcasting-semantics>`.
- Arguments:
- condition (BoolTensor): When True (nonzero), yield input, otherwise yield other
- input (Tensor or Scalar): value (if :attr:`input` is a scalar) or values selected at indices
- where :attr:`condition` is ``True``
- other (Tensor or Scalar): value (if :attr:`other` is a scalar) or values selected at indices
- where :attr:`condition` is ``False``
- Keyword args:
- out (Tensor, optional): the output tensor.
- Returns:
- Tensor: A tensor of shape equal to the broadcasted shape of :attr:`condition`, :attr:`input`, :attr:`other`
- Example::
- >>> x = torch.randn(3, 2)
- >>> y = torch.ones(3, 2)
- >>> x
- tensor([[-0.4620, 0.3139],
- [ 0.3898, -0.7197],
- [ 0.0478, -0.1657]])
- >>> torch.where(x > 0, 1.0, 0.0)
- tensor([[0., 1.],
- [1., 0.],
- [1., 0.]])
- >>> torch.where(x > 0, x, y)
- tensor([[ 1.0000, 0.3139],
- [ 0.3898, 1.0000],
- [ 0.0478, 1.0000]])
- >>> x = torch.randn(2, 2, dtype=torch.double)
- >>> x
- tensor([[ 1.0779, 0.0383],
- [-0.8785, -1.1089]], dtype=torch.float64)
- >>> torch.where(x > 0, x, 0.)
- tensor([[1.0779, 0.0383],
- [0.0000, 0.0000]], dtype=torch.float64)
- .. function:: where(condition) -> tuple of LongTensor
- :noindex:
- ``torch.where(condition)`` is identical to
- ``torch.nonzero(condition, as_tuple=True)``.
- .. note::
- See also :func:`torch.nonzero`.
- """
- @overload
- def where(
- condition: Tensor,
- input: Tensor,
- other: Number | _complex,
- ) -> Tensor:
- r"""
- where(condition, input, other, *, out=None) -> Tensor
- Return a tensor of elements selected from either :attr:`input` or :attr:`other`, depending on :attr:`condition`.
- The operation is defined as:
- .. math::
- \text{out}_i = \begin{cases}
- \text{input}_i & \text{if } \text{condition}_i \\
- \text{other}_i & \text{otherwise} \\
- \end{cases}
- .. note::
- The tensors :attr:`condition`, :attr:`input`, :attr:`other` must be :ref:`broadcastable <broadcasting-semantics>`.
- Arguments:
- condition (BoolTensor): When True (nonzero), yield input, otherwise yield other
- input (Tensor or Scalar): value (if :attr:`input` is a scalar) or values selected at indices
- where :attr:`condition` is ``True``
- other (Tensor or Scalar): value (if :attr:`other` is a scalar) or values selected at indices
- where :attr:`condition` is ``False``
- Keyword args:
- out (Tensor, optional): the output tensor.
- Returns:
- Tensor: A tensor of shape equal to the broadcasted shape of :attr:`condition`, :attr:`input`, :attr:`other`
- Example::
- >>> x = torch.randn(3, 2)
- >>> y = torch.ones(3, 2)
- >>> x
- tensor([[-0.4620, 0.3139],
- [ 0.3898, -0.7197],
- [ 0.0478, -0.1657]])
- >>> torch.where(x > 0, 1.0, 0.0)
- tensor([[0., 1.],
- [1., 0.],
- [1., 0.]])
- >>> torch.where(x > 0, x, y)
- tensor([[ 1.0000, 0.3139],
- [ 0.3898, 1.0000],
- [ 0.0478, 1.0000]])
- >>> x = torch.randn(2, 2, dtype=torch.double)
- >>> x
- tensor([[ 1.0779, 0.0383],
- [-0.8785, -1.1089]], dtype=torch.float64)
- >>> torch.where(x > 0, x, 0.)
- tensor([[1.0779, 0.0383],
- [0.0000, 0.0000]], dtype=torch.float64)
- .. function:: where(condition) -> tuple of LongTensor
- :noindex:
- ``torch.where(condition)`` is identical to
- ``torch.nonzero(condition, as_tuple=True)``.
- .. note::
- See also :func:`torch.nonzero`.
- """
- @overload
- def where(
- condition: Tensor,
- self: Number | _complex,
- other: Number | _complex,
- ) -> Tensor:
- r"""
- where(condition, input, other, *, out=None) -> Tensor
- Return a tensor of elements selected from either :attr:`input` or :attr:`other`, depending on :attr:`condition`.
- The operation is defined as:
- .. math::
- \text{out}_i = \begin{cases}
- \text{input}_i & \text{if } \text{condition}_i \\
- \text{other}_i & \text{otherwise} \\
- \end{cases}
- .. note::
- The tensors :attr:`condition`, :attr:`input`, :attr:`other` must be :ref:`broadcastable <broadcasting-semantics>`.
- Arguments:
- condition (BoolTensor): When True (nonzero), yield input, otherwise yield other
- input (Tensor or Scalar): value (if :attr:`input` is a scalar) or values selected at indices
- where :attr:`condition` is ``True``
- other (Tensor or Scalar): value (if :attr:`other` is a scalar) or values selected at indices
- where :attr:`condition` is ``False``
- Keyword args:
- out (Tensor, optional): the output tensor.
- Returns:
- Tensor: A tensor of shape equal to the broadcasted shape of :attr:`condition`, :attr:`input`, :attr:`other`
- Example::
- >>> x = torch.randn(3, 2)
- >>> y = torch.ones(3, 2)
- >>> x
- tensor([[-0.4620, 0.3139],
- [ 0.3898, -0.7197],
- [ 0.0478, -0.1657]])
- >>> torch.where(x > 0, 1.0, 0.0)
- tensor([[0., 1.],
- [1., 0.],
- [1., 0.]])
- >>> torch.where(x > 0, x, y)
- tensor([[ 1.0000, 0.3139],
- [ 0.3898, 1.0000],
- [ 0.0478, 1.0000]])
- >>> x = torch.randn(2, 2, dtype=torch.double)
- >>> x
- tensor([[ 1.0779, 0.0383],
- [-0.8785, -1.1089]], dtype=torch.float64)
- >>> torch.where(x > 0, x, 0.)
- tensor([[1.0779, 0.0383],
- [0.0000, 0.0000]], dtype=torch.float64)
- .. function:: where(condition) -> tuple of LongTensor
- :noindex:
- ``torch.where(condition)`` is identical to
- ``torch.nonzero(condition, as_tuple=True)``.
- .. note::
- See also :func:`torch.nonzero`.
- """
- @overload
- def xlogy(
- input: Tensor,
- other: Tensor,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- xlogy(input, other, *, out=None) -> Tensor
- Alias for :func:`torch.special.xlogy`.
- """
- @overload
- def xlogy(
- self: Number | _complex,
- other: Tensor,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- xlogy(input, other, *, out=None) -> Tensor
- Alias for :func:`torch.special.xlogy`.
- """
- @overload
- def xlogy(
- input: Tensor,
- other: Number | _complex,
- *,
- out: Tensor | None = None,
- ) -> Tensor:
- r"""
- xlogy(input, other, *, out=None) -> Tensor
- Alias for :func:`torch.special.xlogy`.
- """
- @overload
- def xlogy_(input: Tensor, other: Tensor) -> Tensor: ...
- @overload
- def xlogy_(input: Tensor, other: Number | _complex) -> Tensor: ...
- def zero_(input: Tensor) -> Tensor: ...
- @overload
- def zeros(
- size: Sequence[_int | SymInt],
- *,
- out: Tensor | None = None,
- dtype: _dtype | None = None,
- layout: _layout | None = None,
- device: DeviceLikeType | None = None,
- pin_memory: _bool | None = False,
- requires_grad: _bool | None = False,
- ) -> Tensor:
- r"""
- zeros(*size, *, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False) -> Tensor
- Returns a tensor filled with the scalar value `0`, with the shape defined
- by the variable argument :attr:`size`.
- Args:
- size (int...): a sequence of integers defining the shape of the output tensor.
- Can be a variable number of arguments or a collection like a list or tuple.
- Keyword args:
- out (Tensor, optional): the output tensor.
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor.
- Default: if ``None``, uses a global default (see :func:`torch.set_default_dtype`).
- layout (:class:`torch.layout`, optional): the desired layout of returned Tensor.
- Default: ``torch.strided``.
- device (:class:`torch.device`, optional): the desired device of returned tensor.
- Default: if ``None``, uses the current device for the default tensor type
- (see :func:`torch.set_default_device`). :attr:`device` will be the CPU
- for CPU tensor types and the current CUDA device for CUDA tensor types.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- Example::
- >>> torch.zeros(2, 3)
- tensor([[ 0., 0., 0.],
- [ 0., 0., 0.]])
- >>> torch.zeros(5)
- tensor([ 0., 0., 0., 0., 0.])
- """
- @overload
- def zeros(
- *size: _int | SymInt,
- out: Tensor | None = None,
- dtype: _dtype | None = None,
- layout: _layout | None = None,
- device: DeviceLikeType | None = None,
- pin_memory: _bool | None = False,
- requires_grad: _bool | None = False,
- ) -> Tensor:
- r"""
- zeros(*size, *, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False) -> Tensor
- Returns a tensor filled with the scalar value `0`, with the shape defined
- by the variable argument :attr:`size`.
- Args:
- size (int...): a sequence of integers defining the shape of the output tensor.
- Can be a variable number of arguments or a collection like a list or tuple.
- Keyword args:
- out (Tensor, optional): the output tensor.
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor.
- Default: if ``None``, uses a global default (see :func:`torch.set_default_dtype`).
- layout (:class:`torch.layout`, optional): the desired layout of returned Tensor.
- Default: ``torch.strided``.
- device (:class:`torch.device`, optional): the desired device of returned tensor.
- Default: if ``None``, uses the current device for the default tensor type
- (see :func:`torch.set_default_device`). :attr:`device` will be the CPU
- for CPU tensor types and the current CUDA device for CUDA tensor types.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- Example::
- >>> torch.zeros(2, 3)
- tensor([[ 0., 0., 0.],
- [ 0., 0., 0.]])
- >>> torch.zeros(5)
- tensor([ 0., 0., 0., 0., 0.])
- """
- @overload
- def zeros(
- size: _size,
- *,
- names: Sequence[str | EllipsisType | None] | None,
- dtype: _dtype | None = None,
- layout: _layout | None = None,
- device: DeviceLikeType | None = None,
- pin_memory: _bool | None = False,
- requires_grad: _bool | None = False,
- ) -> Tensor:
- r"""
- zeros(*size, *, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False) -> Tensor
- Returns a tensor filled with the scalar value `0`, with the shape defined
- by the variable argument :attr:`size`.
- Args:
- size (int...): a sequence of integers defining the shape of the output tensor.
- Can be a variable number of arguments or a collection like a list or tuple.
- Keyword args:
- out (Tensor, optional): the output tensor.
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor.
- Default: if ``None``, uses a global default (see :func:`torch.set_default_dtype`).
- layout (:class:`torch.layout`, optional): the desired layout of returned Tensor.
- Default: ``torch.strided``.
- device (:class:`torch.device`, optional): the desired device of returned tensor.
- Default: if ``None``, uses the current device for the default tensor type
- (see :func:`torch.set_default_device`). :attr:`device` will be the CPU
- for CPU tensor types and the current CUDA device for CUDA tensor types.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- Example::
- >>> torch.zeros(2, 3)
- tensor([[ 0., 0., 0.],
- [ 0., 0., 0.]])
- >>> torch.zeros(5)
- tensor([ 0., 0., 0., 0., 0.])
- """
- @overload
- def zeros(
- *size: _int,
- names: Sequence[str | EllipsisType | None] | None,
- dtype: _dtype | None = None,
- layout: _layout | None = None,
- device: DeviceLikeType | None = None,
- pin_memory: _bool | None = False,
- requires_grad: _bool | None = False,
- ) -> Tensor:
- r"""
- zeros(*size, *, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False) -> Tensor
- Returns a tensor filled with the scalar value `0`, with the shape defined
- by the variable argument :attr:`size`.
- Args:
- size (int...): a sequence of integers defining the shape of the output tensor.
- Can be a variable number of arguments or a collection like a list or tuple.
- Keyword args:
- out (Tensor, optional): the output tensor.
- dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor.
- Default: if ``None``, uses a global default (see :func:`torch.set_default_dtype`).
- layout (:class:`torch.layout`, optional): the desired layout of returned Tensor.
- Default: ``torch.strided``.
- device (:class:`torch.device`, optional): the desired device of returned tensor.
- Default: if ``None``, uses the current device for the default tensor type
- (see :func:`torch.set_default_device`). :attr:`device` will be the CPU
- for CPU tensor types and the current CUDA device for CUDA tensor types.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- Example::
- >>> torch.zeros(2, 3)
- tensor([[ 0., 0., 0.],
- [ 0., 0., 0.]])
- >>> torch.zeros(5)
- tensor([ 0., 0., 0., 0., 0.])
- """
- def zeros_like(
- input: Tensor,
- *,
- memory_format: memory_format | None = None,
- dtype: _dtype | None = None,
- layout: _layout | None = None,
- device: DeviceLikeType | None = None,
- pin_memory: _bool | None = False,
- requires_grad: _bool | None = False,
- ) -> Tensor:
- r"""
- zeros_like(input, *, dtype=None, layout=None, device=None, requires_grad=False, memory_format=torch.preserve_format) -> Tensor
- Returns a tensor filled with the scalar value `0`, with the same size as
- :attr:`input`. ``torch.zeros_like(input)`` is equivalent to
- ``torch.zeros(input.size(), dtype=input.dtype, layout=input.layout, device=input.device)``.
- .. warning::
- As of 0.4, this function does not support an :attr:`out` keyword. As an alternative,
- the old ``torch.zeros_like(input, out=output)`` is equivalent to
- ``torch.zeros(input.size(), out=output)``.
- Args:
- input (Tensor): the size of :attr:`input` will determine size of the output tensor.
- Keyword args:
- dtype (:class:`torch.dtype`, optional): the desired data type of returned Tensor.
- Default: if ``None``, defaults to the dtype of :attr:`input`.
- layout (:class:`torch.layout`, optional): the desired layout of returned tensor.
- Default: if ``None``, defaults to the layout of :attr:`input`.
- device (:class:`torch.device`, optional): the desired device of returned tensor.
- Default: if ``None``, defaults to the device of :attr:`input`.
- requires_grad (bool, optional): If autograd should record operations on the
- returned tensor. Default: ``False``.
- memory_format (:class:`torch.memory_format`, optional): the desired memory format of
- returned Tensor. Default: ``torch.preserve_format``.
- Example::
- >>> input = torch.empty(2, 3)
- >>> torch.zeros_like(input)
- tensor([[ 0., 0., 0.],
- [ 0., 0., 0.]])
- """
|