o
    #i                     @   s   d dl mZmZmZ d dlmZ d dlmZmZ d dl	m
Z
 g dZe
ddded	efd
dZe
ddd	efddZe
dddefddZe
dddedefddZdd ZdededefddZdS )    )absolute_importdivisionprint_function)Language)CppFunctionDescriptorJavaFunctionDescriptor)	PublicAPI)java_functionjava_actor_classcpp_functionbeta)	stability
class_namefunction_namec                 C   s(   ddl m} |tjdd t| |di S )zwDefine a Java function.

    Args:
        class_name: Java class name.
        function_name: Java function name.
    r   RemoteFunctionc                  _      d S N argskwargsr   r   O/home/ubuntu/veenaModal/venv/lib/python3.10/site-packages/ray/cross_language.py<lambda>       zjava_function.<locals>.<lambda> )ray.remote_functionr   r   JAVAr   )r   r   r   r   r   r   r	      s   
r	   c                 C   s&   ddl m} |tjdd t| di S )zPDefine a Cpp function.

    Args:
        function_name: Cpp function name.
    r   r   c                  _   r   r   r   r   r   r   r   r   +   r   zcpp_function.<locals>.<lambda>PYTHON)r   r   r   CPPr   )r   r   r   r   r   r       s   r   c                 C   s$   ddl m} |tjt| ddi S )zODefine a Java actor class.

    Args:
        class_name: Java class name.
    r   
ActorClassz<init>r   )	ray.actorr!   _ray_from_function_descriptorr   r   r   )r   r!   r   r   r   r
   1   s   
r
   create_function_namec                 C   s2   ddl m} td| d| |tjt| d|i S )zDefine a Cpp actor class.

    Args:
        create_function_name: Create cpp class function name.
        class_name: Cpp class name.
    r   r    zcreate func=zclass_name=r   )r"   r!   printr#   r   r   r   )r$   r   r!   r   r   r   cpp_actor_classA   s   
r&   c                 C   s*   | j std|rtdt| d|S )a  Format args for various languages.

    Args:
        worker: The global worker instance.
        args: The arguments for cross language.
        kwargs: The keyword arguments for cross language.

    Returns:
        List of args and kwargs (if supported).
    z>Cross language feature needs --load-code-from-local to be set.z@Cross language remote functions does not support kwargs, kwargs:.)load_code_from_local
ValueError	TypeErrorstr)workerr   r   r   r   r   _format_argsS   s   r-   languagemethod_name	signaturec                 C   s>   | t jkrt|j||S | t jkrt|d|jS td|  )a  Get function descriptor for cross language actor method call.

    Args:
        language: Target language.
        actor_creation_function_descriptor:
            The function signature for actor creation.
        method_name: The name of actor method.
        signature: The signature for the actor method. When calling Java from Python,
            it should be string in the form of "{length_of_args}".

    Returns:
        Function descriptor for cross language actor method call.
    r   z8Cross language remote actor method not support language )r   r   r   r   r   r   NotImplementedError)r.   "actor_creation_function_descriptorr/   r0   r   r   r   )_get_function_descriptor_for_actor_methodj   s   

r3   N)
__future__r   r   r   rayr   ray._rayletr   r   ray.util.annotationsr   __all__r+   r	   r   r
   r&   r-   r3   r   r   r   r   <module>   s*    