L i"4ddlZddlmZddlmZmZmZmZddlmZm Z m Z m Z ddl m Z ddlmZGdd eZejGd d Zd e j$d edefdZdedefdZdZdZe j.Ze j2Ze j6Zy)N) dataclass)AnyCallableOptionalProtocol)_C_opsautogradTensor)_pytree)utilsc.eZdZUeeed<eeed<y) InfoProtocol _backward_fn_setup_context_fnN__name__ __module__ __qualname__rr__annotations__]/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/torch/_library/autograd.pyrr s8$$))rrc.eZdZUeeed<eeed<y)InforrNrrrrrrs8$$))rropinforeturnc djdjdj}tjj  t Gddfd fd}fd}t|tjft|t|dj }td g|j|jDr t fd }|S) NGeneratedBackwardFor__c@eZdZUejed<eeefed<y)$make_autograd_impl..Metadatakeysetkeyword_only_argsN) rrrrDispatchKeySetrdictstrrrrrMetadatar$s!!!S>)rr*c|d}|dd}tj5|j}|j}j|tj zg|i|}|cdddS#1swYyxYw)N)r_AutoDispatchBelowAutogradr%r& redispatch_after_autograd_keyset)argsmetadatar%kwargsresultrs rforward_no_gradz+make_autograd_impl..forward_no_grad!su8CRy  * * , __F//F"R]]6B,E,E#EWWPVWF    s AA++A4c|d}|dd}tj5|j}|j}j|tj zg|i|}j rPtjj||\}}rj ||||nj ||||cdddS#1swYyxYw)Nr,)ctxinputskeyword_only_inputsoutput)r6r7r9) rr-r%r&r.r/rr fill_defaults_schema) r6r0r1r%r2r3has_kwarg_only_argsrrs rforwardz#make_autograd_impl..forward+s8CRy  * * , __F//F"R]]6B,E,E#EWWPVWF%% %222::tVL f&**&QW+**s4*O/   s BCCcjrV |j}|jdd|_j|g|}||_t|trg|dS|dfSt dd#|_wxYw)Nr,zTrying to backward through zQ but no autograd formula was registered. Please use register_autograd to add one.)rneeds_input_grad isinstancetuple RuntimeError)r6gradsprev_needs_input_gradr3rrs rbackwardz$make_autograd_impl..backwardHs    =(+(<(<%'*';';CR'@$***377'<$&%(&&4< )".7 8  (=$s 3A33 A<)r=rEc3ZK|]#}tj|j%ywN)ris_tensorlist_like_typetype).0as r z%make_autograd_impl..cs'   %%aff- s)+ctjr/tj|rjg|||}|Sg|||}|SrG)ris_grad_enabled_any_requires_gradapply)r%r0r&r3 Generatedr*r4s r autograd_implz)make_autograd_impl..autograd_implksd   B$9$94$@$Y__PdPHV=N,OPF %PdPHV=N,OPF r) _namespace_opname _overloadnamerr<r;rrIr Function staticmethodany argumentsreturnssupports_tensorlist) rrnamer=rEschemarRrQr*r4r<s `` @@@@rmake_autograd_implr^s' a |1REUEUDVWD33BJJ?***: "   #G,$X. IZZF  56##5fnn5 ( 2  rclsc|j|j|jtGddfd}fd}fd}||_||_||_|S)a4Allows a given autograd.Function class to support List[Tensor] inputs/outputs. Regular autograd.Function has a constraint that it only directly supports autograd for Tensors. Applying @supports_tensorlist enables an autograd.Function to support autograd for List[Tensor] inputs and outputs. c@eZdZUeed<dZeeed<dZeeed<y)%supports_tensorlist..Metadata input_specN output_specresult_is_tuple) rrrspec_trrdrreboolrrrr*rbs%(, Xf%,*.$.rr*cd|d}|dd}t|s tdtt||j}|g|}t|t |_|j s|f}t|t\}}||_ t|dr td||_ t |S)Nr,zNYI: calling supports_tensorlist autograd.Function.forward directly. You should probably be calling .apply instead. Please file an issue if not. _pt_metadataz@Please don't set ctx._pt_metadata; PyTorch uses it to store info) r@NotImplementedError unflattenlistrcrAreflattennot_list_of_tensorrdhasattrrBri)r6r0r1r3 flat_resultrdr* orig_forwards r new_forwardz(supports_tensorlist..new_forwards8CRy(H-%/  dX%8%89c)D)#-fe#< ''YF#*63E#F [* 3 'R $[!!rct|ds td|j}tt ||j }|j } tt |j dd|j|_|g|}||_t|ts|f}t|t\}}||jk7rtd|d|jdt|dgzS#||_wxYw)NrizNYI: calling supports_tensorlist autograd.Function.backward directly. This will automatically get called by PyTorch autograd. Please file an issue if you need this.r,zRExpected the return from backward to be of the same structure as the inputs. Got: z (return from backward), z (inputs)) rorjrirkrlrdr?rcr@rArmnot_list_of_optional_tensorrB)r6rCr1rD grad_inputsflat_grad_inputsgrad_inputs_spec orig_backwards r new_backwardz)supports_tensorlist..new_backwards!sN+%9  ##$u+x';';<!$ 4 4 9#,S))#2./1D1D$C (4e4K#8C +u-&.K .5 4. ** x22 2''7&88Q&&'y2  %.//%$9C s :C22 C;ct|t\}}|}g||}|jJtt ||j}|j s't |tsJt|dk(sJ|dS|S)N)is_leafr r) rmrnrdrkrlrer@rAlen)r0 flat_argsrcr1r3r* orig_applys r new_applyz&supports_tensorlist..new_applys '6H I :J'1Y11##///4<)=)=>''fe, ,,v;!# ##!9  r)r=rErPr)r_rrryrr*r~rxrqs @@@@rr[r[usc;;LLLMJ/// "2*0X CKCLCI Jrcjt|tryt|trtd|DSy)NFc3>K|]}t|t ywrGr@r rJls rrLz%not_list_of_tensor..s;z!V,,;sTr@rArlrXtrees rrnrns-$$;d;;; rcjt|tryt|trtd|DSy)NFc3JK|]}|duxrt|t ywrGrrs rrLz.not_list_of_optional_tensor..s&M11D=>Av)>%>>Ms!#Trrs rrtrts-$$MMMM r) dataclassesrtypingrrrrtorchrr r r torch.utilsr rrr OpOverloadr^r[rnrt tree_flattenrmtree_unflattenrkTreeSpecrfrrrrs!44,,*8*  *** [4??[,[8[|eSeSeP     " "   r