
    q&i                     B   S r SSKrSSKrSSKJr  SSKJr  / SQrS r	S r
/ rS	 rS
 r " S S\5      rS r " S S5      r\R$                  R'                  \" 5       5        0 rSS jr\" S5        \" S5        \" S5        \" S5        \" S5        \" S5        \" S5        g)a  
JPype Imports Module
--------------------

Once imported this module will place the standard Top Level Domains (TLD) into
the Python scope. These TLDs are ``java``, ``com``, ``org``, ``gov``, ``mil``,
``net`` and ``edu``. Java symbols from these domains can be imported using the
standard Python syntax.

Forms supported:
   - **import <java_pkg> [ as <name> ]**
   - **import <java_pkg>.<java_class> [ as <name> ]**
   - **from <java_pkg> import <java_class>[,<java_class>*]**
   - **from <java_pkg> import <java_class> [ as <name> ]**
   - **from <java_pkg>.<java_class> import <java_static> [ as <name> ]**
   - **from <java_pkg>.<java_class> import <java_inner> [ as <name> ]**

For further information please read the :doc:`imports` guide.

Example:

.. code-block:: python

   import jpype
   import jpype.imports
   jpype.startJVM()

   # Import java packages as modules
   from java.lang import String

    N)
ModuleSpec   )_pykeywords)registerImportCustomizerregisterDomainJImportCustomizerc                 n    U R                  S5      (       d  U $ U S S [        R                  ;   a  U S S $ U $ )N_)endswithr   	_KEYWORDSnames    M/var/www/html/banglarbhumi/venv/lib/python3.13/site-packages/jpype/imports.py_keywordUnwrapr   ;   s;    ==CRyK)))CRyK    c                 8    U [         R                  ;   a  U S-   $ U $ )Nr
   )r   r   r   s    r   _keywordWrapr   C   s    {$$$czKr   c                 L   [        U 5      S-   U-   n[        U5      R                  nUR                  5         US:X  a  [	        SU-  5      UeUS:X  a  [	        SU-  5      UeUS:X  a0  [        U5      R                  SS5      n[	        SU< S	U< S
35      Ue[	        SU-  5      Ue)N.z%java.lang.ExceptionInInitializerErrorz.Unable to import '%s' due to initializer errorz&java.lang.UnsupportedClassVersionErrorz3Unable to import '%s' due to incorrect Java versionzjava.lang.NoClassDefFoundError/zUnable to import 'z' due to missing dependency ''zUnable to import '%s')strtype__name___expandStacktraceImportErrorreplace)pkgr   exjavanameexnamemissings         r   _JExceptionHandlerr$   M   s    3x#~$H"XF88<xGINP	Q99AHLNSU	V11b'//#s+g  %'	(
-8
9rAr   c                 .    [         R                  U 5        g)zZImport customizers can be used to import python packages
into java modules automatically.
N)_CUSTOMIZERSappend)
customizers    r   r   r   ^   s     
#r   c                   $    \ rS rSrSrS rS rSrg)r   g   a  Base class for Import customizer.

Import customizers should implement canCustomize and getSpec.

Example:

.. code-block:: python

   # Site packages for each java package are stored under $DEVEL/<java_pkg>/py
   class SiteCustomizer(jpype.imports.JImportCustomizer):
       def canCustomize(self, name):
           if name.startswith('org.mysite') and name.endswith('.py'):
               return True
           return False
       def getSpec(self, name):
           pname = name[:-3]
           devel = os.environ.get('DEVEL')
           path = os.path.join(devel, pname,'py','__init__.py')
           return importlib.util.spec_from_file_location(name, path)
c                     g)zjDetermine if this path is to be treated differently

Return:
    True if an alternative spec is required.
F selfr   s     r   canCustomizeJImportCustomizer.canCustomize}   s     r   c                     [         e)z-Get the module spec for this module.
        )NotImplementedErrorr-   s     r   getSpecJImportCustomizer.getSpec   s
     "!r   r,   N)r   
__module____qualname____firstlineno____doc__r/   r3   __static_attributes__r,   r   r   r   r   g   s    *"r   r   c                     SU ;  a  U $ SR                  U R                  S5       Vs/ s H  n[        U5      PM     sn5      $ s  snf )Nr
   r   )joinsplitr   )r   is     r   unwrapr>      s<    $;88

3@1^A&@AA@s   Ac                   0    \ rS rSrSrSS jr S rS rSrg)	_JImportLoader   z&(internal) Finder hook for importlib. Nc                 ~   [         R                  " 5       (       d-  UR                  S5      S   nU[        ;  a  g [	        SU-  5      eU[        ;   aK  [        U   n[         R
                  " U5      (       d  [	        SU< SU< S35      e[        X5      nXVl        U$ UR                  S5      nUS   (       d1  [         R
                  " US   5      (       a  [        X5      nXl        U$ US   (       d  [         R
                  " US   5      (       d  g [        R                  R                  US   S 5      nU(       a  [        U[         R                  5      (       d  g [        U5      n[         H,  nUR!                  U5      (       d  M  UR#                  U5      s  $    [%        XGS   5      (       dc   [         R&                  R)                  US	[         R*                  5      n	U	R-                  5       S-  S:X  a  [	        S
U-  5      e[	        SU-  5      e[        X5      $ ! [.         a  n
[	        SU-  5      U
eS n
A
ff = f)Nr   r   z/Attempt to create Java package '%s' without jvmzJava package 'z!' not found, requested by alias 'r   r      TzClass `%s` is not publicz)Class `%s` was found but was not expectedzFailed to import '%s')_jpype	isStarted	partition	_JDOMAINSr   	isPackage_ModuleSpec_jname
rpartitionsysmodulesget
isinstance	_JPackager>   r&   r/   r3   hasattr_java_lang_ClassforNameJPypeClassLoadergetModifiers	Exception)r.   r   pathtargetbasejnamemspartsr(   clsr    s              r   	find_spec_JImportLoader.find_spec   s
   !!>>#&q)D9$ADHJ J 9dOE##E**!NSUYZ\ \T(BII $ QxF,,U1X66T(BIIQx 0 0q : :{{uQx.:dF,<,<== d|&J&&t,,!))$// '
 t1X&&J--55$ 7 79 ##%)Q.%&@4&GHH!?$FH H 4&&	  J!"9D"@ArIJs   1A"H 
H<(H77H<c                    UR                   S:X  a   [        R                  " UR                  5      $ UR                  R                  SS5      n[        [        R                  UR                      US   5      n[        Ul
        U$ )N r   r   )parentrD   rP   rJ   r   rsplitgetattrrL   rM   r$   _handler)r.   specr\   rcs       r   create_module_JImportLoader.create_module   sd    ;;"##DKK00		  a(S[[-uQx8 )	r   c                     g Nr,   )r.   fullnames     r   exec_module_JImportLoader.exec_module   s    r   r,   rk   )	r   r5   r6   r7   r8   r^   rh   rm   r9   r,   r   r   r@   r@      s    1='~ 2r   r@   c                 (    U(       d  U nU[         U '   g)a  Add a Java domain to Python as a dynamic module.

This can be used to bind a Java path to a Python path.

Args:
    mod(str): Is the Python module to bind to Java.
    alias(str, optional): Is the name of the Java path if different
      than the Python name.
N)rG   )modaliass     r   r   r      s     IcNr   comgovjavaorgmiledunetrk   )r8   rL   rD   importlib.machineryr   rI   ra   r   __all__r   r   r&   r$   r   objectr   r>   r@   	meta_pathr'   rG   r   r,   r   r   <module>r}      s   $>   9 
M
 B"$!" !"LBO Of   ^% & 	  u  u  v  u  u  u  u r   