o
    xi
                     @  sR   d Z ddlmZ ddlmZ ddlZddlmZ G dd dZ		ddddZ	dS )a&  Feature Flags Module.

This module implements a feature flag system for the wandb library to require experimental features
and notify the user when features have been deprecated.

Example:
    import wandb
    wandb.require("wandb-service@beta")
    wandb.require("incremental-artifacts@beta")
    )annotations)IterableN)UnsupportedErrorc                   @  sL   e Zd ZU dZded< ddd	Zdd
dZdddZdddZdddZ	dS )	_RequireszInternal feature class.ztuple[str, ...]	_featuresfeaturesstr | Iterable[str]returnNonec                 C  s(   t |trt|g| _d S t|| _d S N)
isinstancestrtupler   )selfr    r   K/home/ubuntu/.local/lib/python3.10/site-packages/wandb/sdk/wandb_require.py__init__   s   z_Requires.__init__c                 C  s   d S r   r   r   r   r   r   require_require   s   z_Requires.require_requirec                 C     t d d S )NzH`wandb.require('service')` is a no-op as it is now the default behavior.wandbtermwarnr   r   r   r   require_service!   s   z_Requires.require_servicec                 C  r   )NzE`wandb.require('core')` is a no-op as it is now the default behavior.r   r   r   r   r   require_core)   s   z_Requires.require_corec                 C  s~   d}| j D ]1}|ddd }|ddd }d|dd}t| |d	}|s3d
| }t| q|  q|r=t|d	S )z-Call require_* method for supported features. @   r   :z
require_{}-_Nz#require() unsupported requirement: )r   splitformatreplacegetattrr   r   r   )r   last_messagefeature_itemfull_featurefeaturefunc_strfuncr   r   r   apply0   s   


z_Requires.applyN)r   r   r	   r
   )r	   r
   )
__name__
__module____qualname____doc____annotations__r   r   r   r   r+   r   r   r   r   r      s   
 



r   requirementstr | Iterable[str] | None
experimentr	   r
   c                 C  s&   | p|}|sdS t |d}|  dS )a  Indicate which experimental features are used by the script.

    This should be called before any other `wandb` functions, ideally right
    after importing `wandb`.

    Args:
        requirement: The name of a feature to require or an iterable of
            feature names.
        experiment: An alias for `requirement`.

    Raises:
        wandb.errors.UnsupportedError: If a feature name is unknown.
    N)r   )r   r+   )r1   r3   r   fr   r   r   requireB   s
   
r5   )NN)r1   r2   r3   r2   r	   r
   )
r/   
__future__r   collections.abcr   r   wandb.errorsr   r   r5   r   r   r   r   <module>   s    /