§
    ÐÁ³g‰  ã                   ó0  — d Z ddlZddlZddlZddlZddlZddlZddlZddlZ ej	        e
¦  «        ZdZddhZ G d„ dej        ¦  «        Z G d„ d	¦  «        Z G d
„ de¦  «        Z G d„ de¦  «        Z G d„ d¦  «        Z G d„ d¦  «        Zeddfd„ZdS )zþ
Simplistic RPC implementation.
Exposes all functions of a Server object.

This code is for demonstration purposes only, and does not include certain
security protections. It is not meant to be run on an untrusted network or
in a production environment.
é    Ni /  Únumpyznumpy.core.multiarrayc                   ó   — e Zd Zd„ ZdS )ÚRestrictedUnpicklerc                 óŽ   — |t           v r"t          t          j        |¦  «        |¦  «        S t	          j        d|›d|›d�¦  «        ‚)Nzglobal 'ú.z' is forbidden)Úsafe_modulesÚgetattrÚ	importlibÚimport_moduleÚpickleÚUnpicklingError)ÚselfÚmoduleÚnames      úO/var/www/html/mpstechhub/venv/lib/python3.11/site-packages/faiss/contrib/rpc.pyÚ
find_classzRestrictedUnpickler.find_class%   sR   € à•\Ð!Ð!Ý�9Ô2°6Ñ:Ô:¸DÑAÔAÐAåÔ$Ð$Ø&, f f¨d¨d¨dð&4ñ 5ô 5ð 	5ó    N)Ú__name__Ú
__module__Ú__qualname__r   © r   r   r   r   #   s#   € € € € € ð5ð 5ð 5ð 5ð 5r   r   c                   ó,   — e Zd ZdZd„ Zd„ Zdd„Zd„ ZdS )	ÚFileSockz7 wraps a socket so that it is usable by pickle/cPickle c                 ó"   — || _         d| _        d S )Nr   )ÚsockÚnr)r   r   s     r   Ú__init__zFileSock.__init__1   s   € ØˆŒ	ØˆŒˆˆr   c                 ó²   — d}d}|t          |¦  «        k     r?| j                             ||||z   …         ¦  «        }||z  }|t          |¦  «        k     °=d S d S )Né   r   )Úlenr   Úsend)r   ÚbufÚbsÚnsÚsents        r   ÚwritezFileSock.write5   s^   € ð ˆØˆØ•3�s‘8”8ŠmˆmØ”9—>’> # b¨¨b© j¤/Ñ2Ô2ˆDØ�$‰JˆBð •3�s‘8”8Šmˆmˆmˆmˆmˆmr   r   c                 ó.  — | xj         dz  c_         g }d}t          |¦  «        |k     rZ| j                             ||z
  ¦  «        }|sn:|                     |¦  «         |t          |¦  «        z  }t          |¦  «        |k     °Zd                     |¦  «        S )Né   r   r   )r   r    r   ÚrecvÚappendÚjoin)r   r#   ÚbÚnbÚrbs        r   ÚreadzFileSock.read?   sŠ   € àˆŒ�‰
ˆŒàˆØˆÝ�!‰fŒf�RŠiˆià”—’  R¡Ñ(Ô(ˆBØÐ�uØ�HŠH�R‰LŒLˆLØ•#�b‘'”'‰MˆBõ �!‰fŒf�RŠiˆið �xŠx˜‰{Œ{Ðr   c                 óV   — t          ¦   «         }	 |                      d¦  «        }||z  }Œ)zmay be optimized...Tr(   )Úbytesr/   r    Úchr)r   ÚsÚcs      r   ÚreadlinezFileSock.readlineM   s/   € õ ‰'Œ'ˆð	Ø�iŠi˜‰lŒlˆAØˆq‰DˆAð	r   N)r   )r   r   r   Ú__doc__r   r&   r/   r5   r   r   r   r   r   .   s[   € € € € € Ø=Ð=ðð ð ðð ð ðð ð ð ðð ð ð ð r   r   c                   ó   — e Zd ZdS )Ú
ClientExitN©r   r   r   r   r   r   r8   r8   W   ó   € € € € € Ø€Dr   r8   c                   ó   — e Zd ZdS )ÚServerExceptionNr9   r   r   r   r<   r<   Z   r:   r   r<   c                   óF   — e Zd ZdZej        dfd„Zd„ Zd„ Zd„ Z	d„ Z
d„ Zd	S )
ÚServerzr
    server protocol. Methods from classes that subclass Server can be called
    transparently from a client
    Ú c                 óX   — || _         || _        || _        t          |¦  «        | _        d S ©N)ÚlogfÚ
log_prefixÚconnr   Úfs)r   r3   rB   rC   s       r   r   zServer.__init__d   s*   € ØˆŒ	Ø$ˆŒð ˆŒ	Ý˜1‘+”+ˆŒˆˆr   c                 óR   — | j                              d| j        ›d|›d�¦  «         d S )Nz
Sever log z: ú
)rB   r&   rC   )r   r3   s     r   Úlogz
Server.logn   s-   € ØŒ	�Šˆ°´°°ÀÀÀÐCÑDÔDÐDÐDÐDr   c                 ót  — 	 t          | j        ¦  «                             ¦   «         \  }}n# t          $ r t	          d¦  «        ‚w xY w|                      d|z  ¦  «         d}d}	 t          | |¦  «        }n7# t          $ r* t          d|z   ¦  «        }|                      d¦  «         Y nw xY w	  ||Ž }n­# t          $ r }d 	                    t          j        t          j        ¦   «         d         ¦  «        ¦  «        t          |¦  «        z   }|                      d¦  «         t          j        d	| j        ¦  «         | j                             ¦   «          Y d}~nd}~ww xY wt$                               d
¦  «         	 t)          j        ||f| j        d¬¦  «         dS # t          $ r t	          d¦  «        ‚w xY w)aÑ  
        Executes a single function with associated I/O.
        Protocol:
        - the arguments and results are serialized with the pickle protocol
        - client sends : (fname,args)
            fname = method name to call
            args = tuple of arguments
        - server sends result: (rid,st,ret)
            rid = request id
            st = None, or exception if there was during execution
            ret = return value or None if st!=None
        z	read argszexecuting method %sNzunknown method zunknown methodr?   é   zexception in methodé2   Úreturné   ©Úprotocolzfunction return)r   rE   ÚloadÚEOFErrorr8   rH   r	   ÚAttributeErrorÚ	Exceptionr+   Ú	tracebackÚ	format_tbÚsysÚexc_infoÚstrÚ	print_excrB   ÚflushÚLOGÚinfor   Údump)r   ÚfnameÚargsÚstÚretÚfÚes          r   Úone_functionzServer.one_functionq   sä  € ð	*Ý/°´Ñ8Ô8×=Ò=Ñ?Ô?‰MˆU�D�DøÝð 	*ð 	*ð 	*Ý˜[Ñ)Ô)Ð)ð	*øøøà�ŠÐ&¨Ñ.Ñ/Ô/Ð/ØˆØˆð	'Ý�d˜5Ñ!Ô!ˆAˆAøÝð 	'ð 	'ð 	'ÝÐ 1°%Ñ 7Ñ8Ô8ˆBØ�HŠHÐ%Ñ&Ô&Ð&Ð&Ð&ð	'øøøð	Ø�!�T�(ˆCˆCøÝð 
	ð 
	ð 
	ð �wŠw•yÔ*­3¬<©>¬>¸!Ô+<Ñ=Ô=Ñ>Ô>½sÀ1¹v¼vÑEˆBØ�HŠHÐ*Ñ+Ô+Ð+ÝÔ  4¤9Ñ-Ô-Ð-ØŒI�OŠOÑÔÐÐÐÐÐÐøøøøð
	øøøõ 	�Š�ÑÔÐð	0ÝŒK˜˜S˜	 4¤7°QÐ7Ñ7Ô7Ð7Ð7Ð7øÝð 	0ð 	0ð 	0ÝÐ.Ñ/Ô/Ð/ð	0øøøs@   ‚), ¬AÁ&A7 Á71B+Â*B+Â/B5 Â5
EÂ?BEÅEÅ=F ÆF7c                 ór  — |                       d¦  «         	 	 |                      ¦   «          Œ# t          $ r"}|                       d|z  ¦  «         Y d}~nÉd}~wt          j        $ r<}|                       d|z  ¦  «         t          j        d| j        ¦  «         Y d}~n€d}~wt          $ r2 |                       d¦  «         t          j        d| j        ¦  «         Y nBt          $ r6 t          j        dt          j        ¦  «         t          j        d¦  «         Y nw xY wt                               d	¦  «         dS )
z3 main execution loop. Loops and handles exit stateszin exec_loopTzClientExit %sNzsocket error %srK   zEOF during communicationr(   z
exit sever)rH   rd   r8   ÚsocketÚerrorrT   rY   rB   rQ   ÚBaseExceptionrV   ÚstderrÚexitr[   r\   )r   rc   s     r   Ú	exec_loopzServer.exec_loop    sb  € ð 	�Š�Ñ Ô Ð ð	ð$Ø×!Ò!Ñ#Ô#Ð#ð$øåð 	(ð 	(ð 	(Ø�HŠH�_ QÑ&Ñ'Ô'Ð'Ð'Ð'Ð'Ð'Ð'øøøøÝŒ|ð 	.ð 	.ð 	.Ø�HŠHÐ& qÑ(Ñ)Ô)Ð)ÝÔ  4¤9Ñ-Ô-Ð-Ð-Ð-Ð-Ð-Ð-øøøøÝð 	.ð 	.ð 	.Ø�HŠHÐ/Ñ0Ô0Ð0ÝÔ  4¤9Ñ-Ô-Ð-Ð-Ð-Ýð 	ð 	ð 	åÔ ¥3¤:Ñ.Ô.Ð.ÝŒH�Q‰KŒKˆKˆKˆKð	øøøõ
 	�Š�ÑÔÐÐÐs,   —- ­
D·AÁDÁ&2BÂ<DÃ<DÄDc                 ó   — d S rA   r   )r   s    r   Úexec_loop_cleanupzServer.exec_loop_cleanup¶   s   € Øˆr   c                 ó€   — d}t          j        ddt          j        ¦   «         z  z   dz   dz   ¦  «        }|D ]}||z  }Œ|S )Nr?   zFecho ============ `hostname` uptime:; uptime;echo ============ self:; z*ps -p %d -o pid,vsize,rss,%%cpu,nlwp,psr; zecho ============ run queue:;z?ps ar -o user,pid,%cpu,%mem,ni,nlwp,psr,vsz,rss,cputime,command)ÚosÚpopenÚgetpid)r   ra   rb   Úls       r   Úget_ps_statszServer.get_ps_stats¼   sj   € ØˆÝ
Œ(ð /à?ÅÄ	ÁÄÑKñLð 3ñ3ð Uñ	Uñ Vô Vˆð
 ð 	ð 	ˆAØ�‰FˆCˆCØˆ
r   N)r   r   r   r6   rV   ri   r   rH   rd   rk   rm   rs   r   r   r   r>   r>   ^   sŠ   € € € € € ðð ð
  #œz°bð ð ð ð ðEð Eð Eð-0ð -0ð -0ð^ð ð ð,ð ð ð	ð 	ð 	ð 	ð 	r   r>   c                   ó0   — e Zd ZdZedfd„Zd„ Zd„ Zd„ ZdS )ÚClientza
    Methods of the server object can be called transparently. Exceptions are
    re-raised.
    Fc                 ó  — |rt           j        nt           j        }t          j         |t           j        ¦  «        }t                               d|||¦  «         |                     ||f¦  «         || _        t          |¦  «        | _	        d S )Nz$connecting to %s:%d, socket type: %s)
rf   ÚAF_INET6ÚAF_INETÚSOCK_STREAMr[   r\   Úconnectr   r   rE   )r   ÚHOSTÚportÚv6Úsocktyper   s         r   r   zClient.__init__Ì   so   € Ø&(Ð<•6”?�?­f¬nˆåŒ}˜X¥vÔ'9Ñ:Ô:ˆÝ�ŠÐ7¸¸tÀXÑNÔNÐNØ�Š�d˜D�\Ñ"Ô"Ð"ØˆŒ	Ý˜4‘.”.ˆŒˆˆr   c                 óf   — t          j        ||f| j        d¬¦  «         |                      ¦   «         S )NrM   rN   )r   r]   rE   Ú
get_result)r   r^   r_   s      r   Úgeneric_funzClient.generic_funÕ   s/   € åŒ�U˜D�M 4¤7°QÐ7Ñ7Ô7Ð7Ø�ŠÑ Ô Ð r   c                 ó‚   — t          | j        ¦  «                             ¦   «         \  }}|d k    rt          |¦  «        ‚|S rA   )r   rE   rP   r<   )r   r`   ra   s      r   r€   zClient.get_resultÚ   s=   € Ý'¨¬Ñ0Ô0×5Ò5Ñ7Ô7‰	ˆˆSØˆtŠ8ˆ8Ý! "Ñ%Ô%Ð%àˆJr   c                 ó   ‡ ‡— ˆˆ fd„S )Nc                  ó0   •— ‰                      ‰| ¦  «        S rA   )r�   )Úxr   r   s    €€r   ú<lambda>z$Client.__getattr__.<locals>.<lambda>â   s   ø€ ˜$×*Ò*¨4°Ñ2Ô2€ r   r   )r   r   s   ``r   Ú__getattr__zClient.__getattr__á   s   øø€ Ø2Ð2Ð2Ð2Ð2Ð2r   N)	r   r   r   r6   ÚPORTr   r�   r€   r‡   r   r   r   ru   ru   Ç   sf   € € € € € ðð ð #'¨5ð !ð !ð !ð !ð!ð !ð !ð
ð ð ð3ð 3ð 3ð 3ð 3r   ru   Fc                 ó|  — d}|rt           j        nt           j        }t          j         |t           j        ¦  «        }|                     t           j        t           j        d¦  «         t                               d||¦  «         | 	                    ||f¦  «         | 
                    d¦  «         t                               d¦  «         |�Tt                               d|¦  «         t          |d¦  «                             dt          j        ¦   «         |fz  ¦  «         	 	 |                     ¦   «         \  }}n)# t           j        $ r}	|	d         d
k    rY d }	~	Œ:‚ d }	~	ww xY wt                               d|¦  «          | |¦  «        }
t!          j        |
j        d¦  «        }t                               d|¦  «         Œž)Nr?   r(   z
bind %s:%dé   zaccepting connectionszstoring host+port in %sÚwz%s:%d TzInterrupted system callzConnected to %sr   zThread ID: %d)rf   rw   rx   ry   Ú
setsockoptÚ
SOL_SOCKETÚSO_REUSEADDRr[   r\   ÚbindÚlistenÚopenr&   ÚgethostnameÚacceptrg   Ú_threadÚstart_new_threadrk   Údebug)Únew_handlerr|   Úreport_to_filer}   r{   r~   r3   rD   Úaddrrc   ÚibsÚtids               r   Ú
run_serverrœ   å   s‘  € à€DØ"$Ð8�vŒˆ­&¬.€HÝŒ�h¥Ô 2Ñ3Ô3€AØ‡L‚L•Ô"¥FÔ$7¸Ñ;Ô;Ð;å‡H‚Hˆ\˜4 Ñ&Ô&Ð&Ø‡F‚FˆD�$ˆ<ÑÔÐØ‡H‚HˆQ�K„K€Kå‡H‚HÐ$Ñ%Ô%Ð%ØÐ!Ý�ŠÐ*¨NÑ;Ô;Ð;Ýˆ^˜SÑ!Ô!×'Ò'¨µFÔ4FÑ4HÔ4HÈ$Ð3OÑ(OÑPÔPÐPð(ð	ØŸš™œ‰JˆD�$�$øÝŒ|ð 	ð 	ð 	Ø�ŒtÐ.Ò.Ð.°°°°°Øøøøøð	øøøõ 	�ŠÐ" DÑ)Ô)Ð)àˆk˜$ÑÔˆåÔ& s¤}°RÑ8Ô8ˆå�	Š	�/ 3Ñ'Ô'Ð'ð(s   Ä!D9 Ä9EÅEÅEÅE)r6   r
   ro   r   rV   r”   rT   rf   ÚloggingÚ	getLoggerr   r[   rˆ   r   Ú	Unpicklerr   r   rS   r8   r<   r>   ru   rœ   r   r   r   ú<module>r       s±  ððð ð Ð Ð Ð Ø 	€	€	€	Ø €€€Ø 
€
€
€
Ø €€€Ø Ð Ð Ð Ø €€€Ø €€€à€gÔ˜Ñ!Ô!€ð €ð Øð€ð5ð 5ð 5ð 5ð 5˜&Ô*ñ 5ô 5ð 5ð'ð 'ð 'ð 'ð 'ñ 'ô 'ð 'ðR	ð 	ð 	ð 	ð 	�ñ 	ô 	ð 	ð	ð 	ð 	ð 	ð 	�iñ 	ô 	ð 	ðgð gð gð gð gñ gô gð gðR3ð 3ð 3ð 3ð 3ñ 3ô 3ð 3ð< "&°d¸uð (ð (ð (ð (ð (ð (r   