o
    tfVA                     @   s   d dl Z d dlmZ d dlmZmZmZmZmZm	Z	m
Z
mZmZ d dlmZ d dlmZmZ d dlmZ d dlmZ d dlmZmZmZ d	d
lmZmZmZ G dd deZG dd deZe
eef Z G dd deZ!G dd deZ"e
eeef Z#G dd deZ$G dd deZ%G dd deZ&G dd deZ'G dd deZ(G dd deZ)G dd  d eZ*G d!d" d"eZ+G d#d$ d$eZ,G d%d& d&eZ-ed'e.d(Z/ee.ef Z0ee.ef Z1ee.ef Z2G d)d* d*eZ3G d+d, d,eee/ Z4G d-d. d.eZ5ed/ Z6ee6ed0 f Z7G d1d2 d2e4e7 e5Z8G d3d4 d4e4ed5  e5Z9G d6d7 d7e4e6 Z:G d8d9 d9e4ed:  Z;ee8e;e9e:e4f Z<e;=  ed;e<d(Z>ed< Z?G d=d> d>eee> Z@G d?d@ d@eZAG dAdB dBeZBG dCdD dDeee> ZCedEeCd(ZDG dFdG dGeeeD ZEdHdI ZFdJdK ZGdS )L    N)OrderedDict)	AnyDict	GeneratorGenericListOptionalTupleTypeVarUnion)	BaseModel)ExtraField)root_validator)GenericModel)	AnnotatedLiteral	TypedDict   )exclude_properties_titlesget_schema_ofsimplify_enum_schemac                       N   e Zd ZG dd dZdd Zddef fddZddef fd	d
Z  ZS )r   c                   @      e Zd ZdZedd ZdS )zBaseModel.ConfigTc                 C      t | S Nr   s_ r    ^/var/www/html/software/conda/envs/catlas/lib/python3.10/site-packages/higlass_schema/schema.py<lambda>       zBaseModel.Config.<lambda>N__name__
__module____qualname__Zvalidate_assignmentstaticmethodschema_extrar    r    r    r!   Config       r*   c                 C   r   r   iterselfr    r    r!   __rich_repr__!      zBaseModel.__rich_repr__Texclude_nonec                       t  jdd|i|S Nr2   r    superdictr/   r2   kwargs	__class__r    r!   r7   $      zBaseModel.dictc                    r3   r4   r6   jsonr8   r:   r    r!   r>   '   r<   zBaseModel.jsonT	r%   r&   r'   r*   r0   boolr7   r>   __classcell__r    r    r:   r!   r      
    r   c                       r   )r   c                   @   r   )zGenericModel.ConfigTc                 C   r   r   r   r   r    r    r!   r"   1   r#   zGenericModel.Config.<lambda>Nr$   r    r    r    r!   r*   -   r+   r*   c                 C   r   r   r,   r.   r    r    r!   r0   4   r1   zGenericModel.__rich_repr__Tr2   c                    r3   r4   r5   r8   r:   r    r!   r7   7   r<   zGenericModel.dictc                    r3   r4   r=   r8   r:   r    r!   r>   :   r<   zGenericModel.jsonr?   r@   r    r    r:   r!   r   ,   rC   r   c                   @   s   e Zd ZU dZeeee   ed< dZee	 ed< dZ
ee ed< dZee	 ed< dZee ed< dZee	 ed< dZee	 ed< dZeeeee f  ed	< dZee ed
< dZee	 ed< dZee	 ed< dZeeeee f  ed< dS )OverlayOptionsNextentminWidthfillfillOpacitystrokestrokeOpacitystrokeWidth	strokePosoutlineoutlineOpacityoutlineWidth
outlinePos)r%   r&   r'   rE   r   r   int__annotations__rF   floatrG   strrH   rI   rJ   rK   rL   r   rM   rN   rO   rP   r    r    r    r!   rD   E   s   
  rD   c                   @   sb   e Zd ZU dZee ed< dZee ed< dZee ed< dZ	ee
e  ed< dZee ed< dS )OverlayNtypeuidchromInfoPathincludesoptions)r%   r&   r'   rV   r   rT   rR   rW   rX   rY   r   rZ   rD   r    r    r    r!   rU   T   s   
 rU   c                   @      e Zd ZU eed< dS )_LockEntryModel__root__N)r%   r&   r'   	LockEntryrR   r    r    r    r!   r\         
 r\   c                       st   e Zd ZU dZee ed< G dd dZdee	ee
f ddf f fddZedd	d
eeef fddZ  ZS )LockNrW   c                   @   0   e Zd ZejZedeee	f ddfddZ
dS )zLock.ConfigschemareturnNc                 C      t |  tt| d< d S NZadditionalProperties)r   r   r^   rb   r   r    r    r!   r)         zLock.Config.schema_extrar%   r&   r'   r   Zallowextrar(   r   rT   r   r)   r    r    r    r!   r*           r*   rc   c                 #   .    t   D ]\}}|| jvr||fV  qd S r   r6   __iter__
__fields__r/   keyvalr:   r    r!   rm         

zLock.__iter__Tprevaluesc                 C   0   |D ]}|| j vrt|| }|j||< q|S r   )rn   r\   	parse_objr]   clsru   kmodelr    r    r!   validate_locks      

zLock.validate_locks)r%   r&   r'   rW   r   rT   rR   r*   r   r	   r^   rm   r   r   r   r|   rB   r    r    r:   r!   r`      s   
 $ r`   c                   @   s   e Zd ZU eed< eed< dS )ValueScaleLockEntryviewtrackN)r%   r&   r'   rT   rR   r    r    r    r!   r~      s   
 r~   c                   @   r[   )_ValueScaleLockEntryModelr]   N)r%   r&   r'   r~   rR   r    r    r    r!   r      r_   r   c                       s   e Zd ZU dZee ed< dZee ed< G dd dZ	de
eeef ddf f fddZed	d
deeef fddZ  ZS )ValueScaleLockNrW   ignoreOffScreenValuesc                   @   ra   )zValueScaleLock.Configrb   rc   Nc                 C   rd   re   )r   r   r~   rf   r    r    r!   r)      rg   z"ValueScaleLock.Config.schema_extrarh   r    r    r    r!   r*      rj   r*   rc   c                 #   rk   r   rl   ro   r:   r    r!   rm      rr   zValueScaleLock.__iter__Trs   ru   c                 C   rv   r   )rn   r   rw   r]   rx   r    r    r!   r|      r}   zValueScaleLock.validate_locks)r%   r&   r'   rW   r   rT   rR   r   rA   r*   r   r	   r~   rm   r   r   r   r|   rB   r    r    r:   r!   r      s   
 $ r   c                   @   s0   e Zd ZU G dd dZed ed< eed< dS )AxisSpecificLockc                   @   s.   e Zd Zedeeef deddfddZdS )zAxisSpecificLock.Configrb   r   rc   Nc                 C   s$   t |  t| d d | d d< d S )N
propertiesaxisr   r   rf   r    r    r!   r)      s   
z$AxisSpecificLock.Config.schema_extra)r%   r&   r'   r(   r   rT   r   r)   r    r    r    r!   r*      s    $r*   )xyr   lockN)r%   r&   r'   r*   r   rR   rT   r    r    r    r!   r      s   
 r   c                   @   .   e Zd ZU dZee ed< dZee ed< dS )AxisSpecificLocksNr   r   )r%   r&   r'   r   r   r   rR   r   r    r    r    r!   r         
 r   c                   @   sJ   e Zd ZU eedZeeeee	f f e
d< eedZeeef e
d< dS )LocationLocksdefault_factorylocksByViewUid	locksDictN)r%   r&   r'   r   r7   r   r   rT   r   r   rR   r   r`   r    r    r    r!   r      s
   
 r   c                   @   P   e Zd ZU G dd dZeedZeeef e	d< eedZ
eeef e	d< dS )	ZoomLocksc                   @      e Zd ZejZdS )zZoomLocks.ConfigNr%   r&   r'   r   forbidri   r    r    r    r!   r*          
r*   r   r   r   N)r%   r&   r'   r*   r   r7   r   r   rT   rR   r   r`   r    r    r    r!   r         
 r   c                   @   r   )ValueScaleLocksc                   @   r   )zValueScaleLocks.ConfigNr   r    r    r    r!   r*      r   r*   r   r   r   N)r%   r&   r'   r*   r   r7   r   r   rT   rR   r   r   r    r    r    r!   r      r   r   
TrackTypeT)boundc                   @   s~   e Zd ZU dZee ed< dZee ed< dZee ed< dZ	ee ed< dZ
ee ed< dZee ed< dZee ed< dS )	DataNrV   urlserverfiletypechildrentilesetInfotiles)r%   r&   r'   rV   r   rT   rR   r   r   r   r   r   r   TilesetInfor   Tiler    r    r    r!   r     s   
 r   c                   @   sd   e Zd ZU G dd dZeed< dZee ed< dZ	ee
 ed< dZee
 ed< dZee ed< dS )		BaseTrackc                   @   s4   e Zd ZejZedeee	f de	ddfddZ
dS )zBaseTrack.Configrb   r   rc   Nc                 C   s@   t |  | d }d|d v sd|d v rt|d |d< d S d S )Nr   enumrV   ZallOfr   )rb   r   propsr    r    r!   r)     s
   zBaseTrack.Config.schema_extrarh   r    r    r    r!   r*     s    $r*   rV   NrW   widthheightrZ   )r%   r&   r'   r*   r   rR   rW   r   rT   r   rQ   r   rZ   TrackOptionsr    r    r    r!   r     s   
 
r   c                   @   r   )TilesetN
tilesetUidr   )r%   r&   r'   r   r   rT   rR   r   r    r    r    r!   r   #  r   r   )zviewport-projection-centerzviewport-projection-verticalzviewport-projection-horizontal)AZmultivecz
1d-heatmaplinepointbarzdivergent-barzstacked-intervalzgene-annotationszlinear-2d-rectangle-domainszchromosome-labelszlinear-heatmapz1d-value-intervalz2d-annotationsz2d-chromosome-annotationsz2d-chromosome-gridz2d-chromosome-labelsz2d-rectangle-domainsz2d-tileszarrowhead-domainsZbedlikez
cross-ruledummyzhorizontal-1d-annotationszhorizontal-1d-heatmapzhorizontal-1d-tileszhorizontal-1d-value-intervalzhorizontal-2d-rectangle-domainszhorizontal-barzhorizontal-chromosome-gridzhorizontal-chromosome-labelszhorizontal-divergent-barzhorizontal-gene-annotationszhorizontal-heatmapzhorizontal-linezhorizontal-multiveczhorizontal-pointzhorizontal-rulezhorizontal-vector-heatmapzimage-tilesz	left-axiszleft-stacked-intervalzmapbox-tileszosm-2d-tile-idsz	osm-tileszraster-tilesz
simple-svgzsquare-markersztop-axisztop-stacked-intervalzvertical-1d-annotationszvertical-1d-heatmapzvertical-1d-tileszvertical-1d-value-intervalzvertical-2d-rectangle-domainszvertical-barzvertical-bedlikezvertical-chromosome-gridzvertical-chromosome-labelszvertical-gene-annotationszvertical-heatmapzvertical-linezvertical-multiveczvertical-pointzvertical-rulezvertical-vector-heatmapc                   @   sl   e Zd ZU G dd dZdZee ed< dZee	 ed< dZ
ee	 ed< dZee ed< dZee ed< dS )		EnumTrackc                   @   r   )zEnumTrack.ConfigNr%   r&   r'   r   ignoreri   r    r    r    r!   r*   w  r   r*   NdatarX   fromViewUidr   r   )r%   r&   r'   r*   r   r   r   rR   rX   rT   r   r   rS   r   r    r    r    r!   r   v  s   
 r   c                   @   sL   e Zd ZU G dd dZdZee ed< dZee	 ed< dZ
ee ed< dS )HeatmapTrackc                   @   r   )zHeatmapTrack.ConfigNr   r    r    r    r!   r*     r   r*   Nr   position
transforms)r%   r&   r'   r*   r   r   r   rR   r   rT   r   r   r    r    r    r!   r     s
   
 r   Zheatmapc                   @   sx   e Zd ZU G dd dZdZded< dZee ed< dZ	ee ed< dZ
ee ed< dZee ed< dZee ed	< dS )
"IndependentViewportProjectionTrackc                   @   r   )z)IndependentViewportProjectionTrack.ConfigNr   r    r    r    r!   r*     r   r*   Nr   projectionXDomainprojectionYDomainr   r   r   )r%   r&   r'   r*   r   rR   r   r   Domainr   r   r   r   rS   r   r    r    r    r!   r     s   
 r   c                   @   s8   e Zd ZU G dd dZed ed< dZee ed< dS )CombinedTrackc                   @   r   )zCombinedTrack.ConfigNr   r    r    r    r!   r*     r   r*   TrackcontentsNr   )	r%   r&   r'   r*   r   rR   r   r   rT   r    r    r    r!   r     s   
 r   combinedTrackT)leftrighttopbottomcenterwholegalleryc                       s   e Zd ZU dZG dd dZdZeee  e	d< dZ
eee  e	d< dZeee  e	d< dZeee  e	d< dZeee  e	d	< dZeee  e	d
< dZeee  e	d< deeeef ddf f fddZ  ZS )TrackszTrack layout within a View.c                   @   r   )zTracks.ConfigNr   r    r    r    r!   r*     r   r*   Nr   r   r   r   r   r   r   rc   c                 #   s8    t   D ]\}}|d u rq|D ]}||fV  qqd S r   )r6   rm   )r/   posZtlistr   r:   r    r!   rm     s   zTracks.__iter__)r%   r&   r'   __doc__r*   r   r   r   r   rR   r   r   r   r   r   r   r   r	   TrackPositionrm   rB   r    r    r:   r!   r     s   
 ,r   c                   @   s   e Zd ZU dZG dd dZedddZeed< edddZ	eed	< ed
ddZ
eed< ed
ddZeed< dZee ed< dZee ed< dS )LayoutzSize and position of a View.c                   @   r   )zLayout.ConfigNr   r    r    r    r!   r*     r   r*   r   zThe X Positiondefaultdescriptionr   zThe Y Positionr      ZWidthwZHeighthNmovedstatic)r%   r&   r'   r   r*   r   r   rQ   rR   r   r   r   r   r   rA   r   r    r    r    r!   r     s   
 r   c                   @   s   e Zd ZU dZeddgddZee ed< eddgddZ	ee ed	< eddgd
dZ
ee ed< eddgddZee ed< edddZee ed< dS )GenomePositionSearchBoxz"Locations to search within a View.Nz//higlass.io/api/v1zThe Autocomplete Server URL)r   Zexamplesr   autocompleteServerZOHJakQICQD6gTD7skx4EWAzThe Autocomplete IDautocompleteIdzThe Chrominfo Server URLchromInfoServerZhg19zThe Chromosome Info IDchromInfoIdzThe Visible Schemar   visible)r%   r&   r'   r   r   r   r   rT   rR   r   r   r   r   rA   r    r    r    r!   r     s4   
 r   c                   @   s   e Zd ZU dZG dd dZeed< ee ed< dZ	e
e ed< dZe
e ed< dZe
e ed	< dZe
e ed
< dZe
e ed< dZe
e ed< dZe
e ed< dZe
ee  ed< dZe
e ed< dZe
e ed< dZeee
e f ed< dS )Viewz9An arrangment of Tracks to display within a given Layout.c                   @   r   )zView.ConfigNr   r    r    r    r!   r*     r   r*   ZlayoutZtracksNrW   autocompleteSourcerX   genomePositionSearchBoxgenomePositionSearchBoxVisibleinitialXDomaininitialYDomainoverlaysselectionView	zoomFixed)r   N
zoomLimits)r%   r&   r'   r   r*   r   rR   r   r   rW   r   rT   r   rX   r   r   r   rA   r   r   r   r   r   rU   r   r   r   r	   rS   r    r    r    r!   r     s    
 r   ViewTc                   @   s   e Zd ZU dZG dd dZdZee ed< dZ	ee ed< dZ
ee ed< dZee ed	< dZee ed
< dZee ed< dZeee  ed< dZeeee eddf  ed< dZee ed< dZee ed< dZee ed< dZee ed< dS )Viewconfz/Root object describing a HiGlass visualization.c                   @   s4   e Zd ZejZdZedee	e
f ddfddZdS )zViewconf.ConfigzHiGlass viewconfrb   rc   Nc                 C   s&   t |  dD ]
}d| d | d< qd S )N)viewsr   r   ZminItemsr   )rb   r   propr    r    r!   r)     s   zViewconf.Config.schema_extra)r%   r&   r'   r   r   ri   titler(   r   rT   r   r)   r    r    r    r!   r*     s
     r*   TeditableviewEditabletracksEditableNr   compactLayoutexportViewUrltrackSourceServersr   )Z	min_itemsr   	zoomLockslocationLocksvalueScaleLocksrX   )r%   r&   r'   r   r*   r   r   rA   rR   r   r   r   r   r   rT   r   r   r   r   r   r   r   r   r   r   r   r   rX   r    r    r    r!   r     s   
 "r   c                  C   sB   t  } | d  D ]}|dd  q
tddg|  }t|S )NZdefinitionsr   )z$schemaz'http://json-schema.org/draft-07/schema#)z$idzhttps://higlass.io/#viewconf)r   rb   ru   popr   itemsr7   )rootdZordered_rootr    r    r!   rb   /  s   rb   c                  K   s   t jt fi | S r   )r>   dumpsrb   )r9   r    r    r!   schema_jsonB  s   r   )Hr>   collectionsr   typingr   r   r   r   r   r   r	   r
   r   Zpydanticr   ZPydanticBaseModelr   r   Zpydantic.class_validatorsr   Zpydantic.genericsr   ZPydanticGenericModelZtyping_extensionsr   r   r   utilsr   r   r   rS   r   rD   rU   r^   r\   r`   r~   r   r   r   r   r   r   r   rT   r   r   r   r   r   r   r   ZViewportProjectionTrackTypeZEnumTrackTyper   r   r   r   r   Zupdate_forward_refsr   r   r   r   r   r   r   r   rb   r   r    r    r    r!   <module>   s    ,4
H		