o
    ni;                     @   s   d Z ddlZddlZddlZddlmZ ddlZddlmZ ddl	m
Z
 ddlmZ ddlmZ G dd	 d	eZG d
d de
ZG dd dZG dd dZdS )zPublic API: reports.    N)gql)public)Attrs)	Paginator)ipythonc                       sf   e Zd ZdZedZd fdd	Zedd Zed	d
 Z	edd Z
dd Zdd Zdd Z  ZS )Reportsz:Reports is an iterable collection of `BetaReport` objects.a
  
        query ProjectViews($project: String!, $entity: String!, $reportCursor: String,
            $reportLimit: Int!, $viewType: String = "runs", $viewName: String) {
            project(name: $project, entityName: $entity) {
                allViews(viewType: $viewType, viewName: $viewName, first:
                    $reportLimit, after: $reportCursor) {
                    edges {
                        node {
                            id
                            name
                            displayName
                            description
                            user {
                                username
                                photoUrl
                            }
                            spec
                            updatedAt
                        }
                        cursor
                    }
                    pageInfo {
                        endCursor
                        hasNextPage
                    }

                }
            }
        }
        N2   c                    s2   || _ || _|j|j| jd}t ||| d S )N)projectentityviewName)r	   namer
   super__init__)selfclientr	   r   r
   per_page	variables	__class__ W/home/ubuntu/SoloSpeech/.venv/lib/python3.10/site-packages/wandb/apis/public/reports.pyr   4   s   zReports.__init__c                 C   s   | j rt| jS d S N)last_responselenobjectsr   r   r   r   length>   s   
zReports.lengthc                 C   s    | j r| j d d d d S dS )Nr	   allViewspageInfohasNextPageTr   r   r   r   r   moreF   s   zReports.morec                 C   s$   | j r| j d d d d d S d S )Nr	   r   edgescursorr    r   r   r   r   r$   M   s   zReports.cursorc                 C   s   | j | j| jd d S )N)reportCursorreportLimit)r   updater$   r   r   r   r   r   update_variablesT   s   zReports.update_variablesc                    sN    j d d u rtd jd  d jd   fdd j d d d D S )	Nr	   zProject z does not exist under entity r
   c                    s*   g | ]}t  j|d   jj jjdqS )node)r
   r	   )
BetaReportr   r	   r
   r   ).0rr   r   r   
<listcomp>^   s    z+Reports.convert_objects.<locals>.<listcomp>r   r"   )r   
ValueErrorr   r   r   r   r   convert_objectsY   s   
zReports.convert_objectsc                 C   s   d d| jjS )Nz<Reports {}>/)formatjoinr	   pathr   r   r   r   __repr__h   s   zReports.__repr__)NNr   )__name__
__module____qualname____doc__r   QUERYr   propertyr   r!   r$   r(   r/   r4   __classcell__r   r   r   r   r      s    !



r   c                       sh   e Zd ZdZd fdd	Zedd Zdd	d
Zedd Zedd Z	dddZ
defddZ  ZS )r*   a  BetaReport is a class associated with reports created in wandb.

    WARNING: this API will likely change in a future release

    Attributes:
        name (string): report name
        description (string): report description;
        user (User): the user that created the report
        spec (dict): the spec off the report;
        updated_at (string): timestamp of last update
    Nc                    sF   || _ || _|| _t | _t t| t	
| jd | jd< d S )Nspec)r   r	   r
   r   QueryGeneratorquery_generatorr   r   dictjsonloads_attrs)r   r   attrsr
   r	   r   r   r   r   y   s   
zBetaReport.__init__c                 C   
   | j d S )NpanelGroups)r<   r   r   r   r   sections      
zBetaReport.sectionsr   Tc                 C   s   | dd}|d | }| j|d d }|d  dr"d| }nd| }| j|d	 }|rC|d
 d d dd|d d ii tj| j| j| j	|||dS )N
openRunSetr   runSetssortkey	ascending+-filters$or$andr   $in
selectionstree)rO   orderr   )
getr>   key_to_server_pathfilter_to_mongoappendr   Runsr   r
   r	   )r   sectionr   only_selectedrun_set_idxrun_setrU   rO   r   r   r   runs   s&   
zBetaReport.runsc                 C   rD   )N	updatedAt)rB   r   r   r   r   
updated_at   rG   zBetaReport.updated_atc                 C   sD   | j jd| j| jddtj| j	dd| j
	ddgg S )Nr0   reportsz-- rN   = )r   app_urlr2   r
   r	   urllibparsequotedisplay_namereplaceidr   r   r   r   url   s   
zBetaReport.url   Fc                 C   sF   | j d }d| d}d}|r|d7 }td}|d|d|d	 S )
z:Generate HTML containing an iframe displaying this report.z?jupyter=truezborder:none;width:100%;height:zpx;re   zdisplay:none;reportz<iframe src=z style=z
></iframe>)rm   r   toggle_button)r   heighthiddenrm   styleprefixr   r   r   to_html   s   

zBetaReport.to_htmlreturnc                 C   s   |   S r   )ru   r   r   r   r   _repr_html_   s   zBetaReport._repr_html_)NN)r   T)rn   F)r5   r6   r7   r8   r   r:   rF   r_   ra   rm   ru   strrw   r;   r   r   r   r   r*   l   s    





r*   c                   @   s^  e Zd ZdZdZi ddddddd	d
dddddddddddddddddddddd d!d"d#d$Zd%d& e D Zej	d'ej
d(ejd)ejd*ejd+ejd+ejd,ejd,ejd-ejd.ejd/ejd0ejd1iZejd2ejd3ejd4ejd4iZd5d6 Zd7d8 Zd9d: Zd;d< Zd=d> Z d?d@ Z!dAdB Z"dCdD Z#dEdF Z$dGdH Z%dIdJ Z&dKdL Z'dMS )NPythonMongoishQueryGeneratorz
----------z;;;IDr   NamedisplayNameTagstagsStatestateCreatedTimestamp	createdAtRuntimedurationUserusernameSweepsweepGroupgroupJobTypejobTypeHostnamehostUsingArtifactinputArtifactsOutputtingArtifactoutputArtifactsStep_stepRelative Time (Wall)_absolute_runtimeRelative Time (Process)_runtime	Wall Time
_timestampc                 C      i | ]\}}||qS r   r   r+   kvr   r   r   
<dictcomp>       z'PythonMongoishQueryGenerator.<dictcomp>z$ltz$ltez$gtz$gterd   z$nerR   z$ninrQ   rP   z$notvaluerl   eltsc                 C   s   || _ t | _d S r   )r^   PanelMetricsHelperpanel_metrics_helper)r   r^   r   r   r   r      s   z%PythonMongoishQueryGenerator.__init__c                 C   sN   |  | |j}| |jd }| |jd }|dkr!||iS |||iiS )Nr   rd   )front_to_back_handle_fieldsleft_handle_opsopscomparators)r   r)   r   oprightr   r   r   _handle_compare   s   z,PythonMongoishQueryGenerator._handle_comparec                    sJ   t | jt|}t|tr fdd|D S t|tr# |S |S )Nc                       g | ]}  |qS r   )r   )r+   r)   r   r   r   r-      r   z?PythonMongoishQueryGenerator._handle_fields.<locals>.<listcomp>)getattr
AST_FIELDSrV   type
isinstancelistrx   
_unconvert)r   r)   resultr   r   r   r      s   


z+PythonMongoishQueryGenerator._handle_fieldsc                 C   s   | j t|S r   )AST_OPERATORSrV   r   )r   r)   r   r   r   r     s   z(PythonMongoishQueryGenerator._handle_opsc           
      C   s  g }t t||dd  |dd  dD ](\}\}}}|dkr;| r&| s6| r.|dks6|dkr;| r;|| q|d  rQ|d dkrQ|t|d  dg| t|g }g }t||dd  D ]\}}	|||d |	  || j qf|d d }d|S )N      .rc   r#   re   )	enumeratezipisdigitrY   r   DECIMAL_SPACERr2   )
r   snumeric_dotsir   midr   substrsstartstopr   r   r   _replace_numeric_dots  s0   0

z2PythonMongoishQueryGenerator._replace_numeric_dotsc                 C   s*   |  |d| j| jd}d| d S )Nr   ())r   rk   SPACERr   )r   	filterstr_conversionr   r   r   _convert!  s
   

z%PythonMongoishQueryGenerator._convertc                 C   s   | | jdS )Nr   )rk   r   )r   
field_namer   r   r   r   )  s   z'PythonMongoishQueryGenerator._unconvertc              
      s   zt j |dd}W n ty } ztd|d }~ww t|jd}|r< jt	|jj
} fdd|jjD }n	d} |jg}d||igiS )	Neval)modezIInvalid python comparison expression; form something like `my_col == 123`r   c                    r   r   )r   )r+   r   r   r   r   r-   8  r   z@PythonMongoishQueryGenerator.python_to_mongo.<locals>.<listcomp>rQ   rP   )astrh   r   SyntaxErrorr.   hasattrbodyr   rV   r   r   valuesr   )r   r   rT   emultiple_filtersr   r   r   r   r   python_to_mongo,  s"   z,PythonMongoishQueryGenerator.python_to_mongoc                 C   sp   | d^}}|rdd| nd}|| jv r| j| S || jv r#|S || jjv r1d| d| S d| | S )Nr   re   config..valuesummary_metrics.)splitr2   FRONTEND_NAME_MAPPINGFRONTEND_NAME_MAPPING_REVERSEDr^   _runs_configr   r   restr   r   r   r   >  s   


z*PythonMongoishQueryGenerator.front_to_backc                 C   sr   || j v r
| j | S || jv r|S |dr$d|v r$|ddddS |dr/|ddS td|  |S )Nr   r   re   r   zUnknown token: )r   r   
startswithrk   wandb	termerrorr   r   r   r   r   back_to_frontK  s   



z*PythonMongoishQueryGenerator.back_to_frontc                 C   s   | d^}}|rdd| nd}|d u rd S || jjv r&d| jj|  S || jv r0| j| S || jv r7|S || jjv rEd| d| S d| | S )Nr   re   summary:config:r   )r   r2   r   r   r   r^   r   r   r   r   r   pc_front_to_back[  s   


z-PythonMongoishQueryGenerator.pc_front_to_backc                 C   s   |d u rd S d|v r| dd}| jj||S || jv r"| j| S || jv r)|S |dr<d|v r<| dd ddS |drG| ddS |S )Nr   re   r   r   r   )rk   r   r   rV   r   r   r   r   r   r   pc_back_to_frontk  s    



z-PythonMongoishQueryGenerator.pc_back_to_frontN)(r5   r6   r7   r   r   r   itemsr   r   LtLtEGtGtEEqIsNotEqIsNotInNotInAndOrNotr   Constantr{   ListTupler   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   ry      s    	
ry   c                   @   sh   e Zd ZdddddZdd e D Zdd	d
Zdd e D Zdd Zdd Z	dd Z
dd ZdS )r   r   r   r   r   )r   r   r   r   c                 C   r   r   r   r   r   r   r   r     r   zPanelMetricsHelper.<dictcomp>r   heartbeatAt)zCreated TimestampzLatest Timestampc                 C   r   r   r   r   r   r   r   r     r   c                 C      || j v r
| j | S |S r   )r   r   r   r   r   r        

z PanelMetricsHelper.front_to_backc                 C   r   r   )r   r   r   r   r   r     r   z PanelMetricsHelper.back_to_frontc                 C   s   |d u r|S | d^}}|rdd| nd}|dr+|dd  }d| d| S |dr=|dd  | }d| S || }|| jv rMd	| j|  S || jv rYd| j|  S |d
kr_|S d| S )Nr   re   c::   r   r   s::r   run:Index)r   r2   r   RUN_MAPPINGr   r   r   r   r   special_front_to_back  s$   




z(PanelMetricsHelper.special_front_to_backc                 C   s   |d urT| dd\}}|dkrI| d}t|dkr"td| t|dkr-|d }nt|dkrD|d d |dd   }d|}d	| S |d
krT|}d| S |d u rZ|S d|v rk|dd}| j||S d|v rz|dd}| j| S |S )N:r   configr   zInvalid name: r   r   r   r   summaryr   r   re   r  )r   r   r.   r2   rk   r   rV   RUN_MAPPING_REVERSED)r   r   kindr   piecesr   r   r   special_back_to_front  s0   





z(PanelMetricsHelper.special_back_to_frontN)r5   r6   r7   r   r   r   r  r  r   r   r  r  r   r   r   r   r   ~  s    
r   )r8   r   r@   rg   	wandb_gqlr   r   
wandb.apisr   wandb.apis.attrsr   wandb.apis.paginatorr   wandb.sdk.libr   r   r*   ry   r   r   r   r   r   <module>   s    \R A