o ?ß}h°#ã@sFddlmZddlZddlZddlmZeeefZGdd„dƒZ dS)é)Ú annotationsN)ÚUnionc @s„eZdZgd¢Ze gd¢gd¢gd¢gd¢gd¢gd¢gd¢g¡ZGdd„dƒZGdd „d ƒZgd ¢Z d ge ¢Z d d ddge ¢Z ge dd…¢d ‘e dd…¢Z dge ¢Z dge ¢Z dEdd„Zedd„ƒZedd„ƒZedd„ƒZdd„Zed d!„ƒZd"d#„Zd$d%„Zd&d'„Zd(d)„ZdFd+d,„Zd-d.„Zd/d0„Zd1d2„ZdGd4d5„Zd6d7„Z d8d9„Z!d:d;„Z"dHd=d>„Z#edId@dA„ƒZ$dJdCdD„Z%dS)KÚ SVGTensor)ÚmÚlÚcÚaÚEOSÚSOSÚz) rrrrrrrrrér ) rrrrrr r r r r r ) r r r r r rrrrr r ) rrrrrrrrrrrc@sNeZdZdZeddƒZdZdZdZeddƒZ eddƒZ edd ƒZ ed d ƒZ d S) zSVGTensor.Indexrr éééééé é éN) Ú__name__Ú __module__Ú __qualname__ÚCOMMANDÚsliceÚRADIUSÚ X_AXIS_ROTÚ LARGE_ARC_FLGÚ SWEEP_FLGZ START_POSÚCONTROL1ÚCONTROL2ÚEND_POS©r!r!ú4/data/cref/OmniSVG-kaiyuan/deepsvg/difflib/tensor.pyÚIndexs    r#c@s@eZdZeddƒZdZdZdZeddƒZeddƒZ eddƒZ d S) zSVGTensor.IndexArgsrér rréé é N) rrrrrrrrrrr r!r!r!r"Ú IndexArgs"s   r()Úcontrol1Úcontrol2Úend_posÚ start_posÚradiusÚ x_axis_rotÚ large_arc_flgÚ sweep_flgNrÚcommandséÿÿÿÿércCsæ| dd¡ ¡|_| ¡|_| dd¡ ¡|_| dd¡ ¡|_| dd¡ ¡|_| ¡|_| ¡|_| ¡|_ | durCt   t |ƒ¡n| |_ | |_| |_| |_t  |j d¡g¡ d¡|_t  |j d¡g¡ d¡|_|_| |_dS)Nr2r r r )ÚreshapeÚfloatr1r-r.r/r0r)r*r+ÚtorchÚtensorÚlenÚseq_lenÚlabelÚPAD_VALÚARGS_DIMÚTensorÚCOMMANDS_SIMPLIFIEDÚindexÚ unsqueezeÚ sos_tokenÚ eos_tokenÚ pad_tokenÚfilling)Úselfr1r-r.r/r0r)r*r+r9r:r;r<rDr!r!r"Ú__init__2s    " zSVGTensor.__init__cCs$|jdd…}t | dd¡|g¡S)Nr2r r$)r+r6ÚcatÚ new_zeros)rEr,r!r!r"r,Ks  þzSVGTensor.start_posc Os¤t|dd…tjjf|dd…tjjf|dd…tjjf|dd…tjjf|dd…tjjf|dd…tjjf|dd…tjjf|dd…tjj fg|¢Ri|¤ŽS©N) rr#rrrrrrrr )ÚdataÚargsÚkwargsr!r!r"Ú from_dataTs86$þþþzSVGTensor.from_datac Os”t||dd…tjjf|dd…tjjf|dd…tjjf|dd…tjjf|dd…tjjf|dd…tjjf|dd…tjjfg|¢Ri|¤ŽSrI) rr(rrrrrrr )r1rKÚnargsrLr!r!r"Ú from_cmd_argsZs(6$þþþzSVGTensor.from_cmd_argscstj‡fdd„|DƒddS)Ncsg|]}ˆ |¡‘qSr!)Ú__getattribute__©Ú.0Úkey©rEr!r"Ú asz&SVGTensor.get_data..r2©Údim)r6rG)rEÚkeysr!rTr"Úget_data`szSVGTensor.get_datacCs | |j¡SrI)rYÚall_keysrTr!r!r"rJcs zSVGTensor.datacs4t‡fdd„ˆjDƒˆj ¡ˆjˆjˆjˆjdœŽS)Ncsg|] }ˆ |¡ ¡‘qSr!)rPÚclonerQrTr!r"rUhsz"SVGTensor.copy..)r9r:r;r<rD)rÚ cmd_arg_keysr9r[r:r;r<rDrTr!rTr"ÚcopygsþzSVGTensor.copyc Csft |j|jg¡|_|jD]}| |¡}| |t | d| d¡f|j ¡|g¡¡q |j d7_ |S©Nr r2) r6rGrAr1Úarg_keysrPÚ __setattr__Únew_fullÚsizer;r9©rErSÚvr!r!r"Úadd_sosls   ,zSVGTensor.add_soscCs8|jD]}| || |¡dd…¡q|jd8_|S)Nr ©r\r`rPr9©rErSr!r!r"Údrop_sosvs zSVGTensor.drop_sosc CsXt |j|jg¡|_|jD]}| |¡}| |t || d| d¡f|j ¡g¡¡q |Sr^) r6rGr1rBr_rPr`rarbr;rcr!r!r"Úadd_eos}s   ,zSVGTensor.add_eosé3c Cstt|t|jƒdƒ}t |j|j |d¡g¡|_|jD]}| |¡}|  |t ||  ||  d¡f|j ¡g¡¡q|S)Nrr r2) Úmaxr8r1r6rGrCÚrepeatr_rPr`rarbr;)rEr9Úpad_lenrSrdr!r!r"Úpad†s   ,z SVGTensor.padcCs,|jD]}| || |¡d|j…¡q|SrIrfrgr!r!r"Úunpad‘s zSVGTensor.unpadcOs$ddlm}| |j¡j|i|¤ŽS)Nr)ÚSVGPath)Údeepsvg.svglib.svgrpÚ from_tensorrJÚdraw)rErKZkwagsrpr!r!r"rs—s zSVGTensor.drawcCs |j d¡S)Nr2)r1r4rTr!r!r"Úcmds›s zSVGTensor.cmdsFcCs|r| |j¡S| |j¡SrI)rYÚ all_arg_keysr_)rEZwith_start_posr!r!r"rKžs  zSVGTensor.argscCs| ¡|j d¡k}|S)Nr )rtr>r?©rEÚmaskr!r!r"Ú_get_real_commands_mask¤sz!SVGTensor._get_real_commands_maskcCstj| ¡ ¡ ¡}|SrI)rÚ CMD_ARGS_MASKrtÚlongÚboolrvr!r!r"Ú_get_args_mask¨szSVGTensor._get_args_maskcCs¾| ¡ ¡}| ¡}||}|dd…tjjf ¡}|dd…tjjf|8<|dd…tjjf|8<|dd…tjjf|8<|||<| ¡}|||j d7<|j ||<|S)Nr2r ) rKr[rxrr(r rrr|r<r;)rErJZ real_commandsZdata_real_commandsr,rwr!r!r"Úget_relative_args¬s  zSVGTensor.get_relative_argsrc Csp|jj}tjdd||d}tjt |¡|| d¡| d¡gdd}tjgd¢gd¢gd¢gd¢ggd¢gd ¢gd¢gd¢ggd¢gd ¢gd ¢gd ¢gt d d ¡t d d ¡t d d ¡t d d ¡g|d}|j  d¡  ¡|  |j ¡  dd d¡}}||j  d¡k||j  d¡kB}||||}}t |||¡} t || ¡} t | dd…dd…f  dd¡| d d¡g¡} | S)Nrr )Údevicer$r rV)çrrr)çð?rrr)r2rrr€)éýÿÿÿç@rr)r‚iúÿÿÿr‚r)r2r‚rr€rr2rr)r2r2)r1r~r6ÚlinspaceÚstackÚ ones_likeÚpowr7Úzerosr4rzrYÚall_position_keysr>r?ÚmatmulrGr@) rEÚnr~r ÚZÚQr1ÚposÚindsZZ_coeffsÚ sample_pointsr!r!r"r¿sB(ýýý    ìë(  0zSVGTensor.sample_pointsTcCs\|dd…|dd…}}tj||ddjdd}t | d¡|g¡}|r,||d}|S)Nr2r rVr)r6ÚnormÚcumsumrGrH)ÚpÚ normalizeÚstartÚendZ length_distrr!r!r"Úget_length_distributionès  z!SVGTensor.get_length_distributionédcCs\|j|d}t dd|¡ |j¡}|j|dd}t | d¡| d¡¡}|jdd}||S)N)rŠrr€T)r“r2rV) rr6rƒÚtor~r–Úcdistr@Úargmin)rErŠr’Z distr_unifÚdistrÚdÚmatchingr!r!r"Úsample_uniform_pointsñs  zSVGTensor.sample_uniform_points)NNr2r3r)rj)F)r)T)r—)&rrrr>r6r7ryr#r(Z position_keysrˆr_rur\rZrFÚpropertyr,Ú staticmethodrMrOrYrJr]rerhrirnrorsrtrKrxr|r}rr–ržr!r!r!r"rsZ ú      ÿ         ) r) Ú __future__rr6Útorch.utils.dataÚtypingrÚintr5ÚNumrr!r!r!r"Ús