Ë
    V¨jh  ã            
      ó.  — d Z ddlmZ ddlZddlmZ dddd	d
dddddœ	Zej                  «       D � �ci c]  \  } }|| “Œ
 c}} ZdZ	ddddddddddœ	Z
dddd
dddœZddddddœZd(d „Zd)d!„Zd*d"„Zd+d#„Zd*d$„Z ej$                  d%«      Zd,d&„Zd-d'„Zyc c}} w ).aÎ  Mappings from source vocabularies to the canonical AFP vocabulary.

Drupal 7 / Backdrop `advisory` nodes (Sierra archive, Gulmarg, Chile, the
avalanche-center template) share one field schema:
  field_type_N        1 Storm Slab, 2 Deep Slab, 3 Wind Slab, 4 Wet Slab,
                      5 Persistent Slab, 6 Loose Wet, 7 Loose Dry,
                      8 Normal Caution, 9 Cornice, 10 Glide
  field_likelihood_N  1 Unlikely .. 5 Certain
  field_size_N        1..5 (D1..D5), up to two values = a range
  field_rose_N        danger_rose: columns _0.._23 (0-7 upper, 8-15 middle,
                      16-23 lower; N clockwise); any nonzero = selected
  field_danger_rating_1/2/3   '0'..'5' for lower / middle / upper
é    )ÚannotationsNé   )Úcell_to_locationé   é   é   é   é   é   é   é	   )	r   r   r   r
   r   r   r	   r   é
   z	Dry Loosez
Storm Slabz	Wind SlabzPersistent SlabzDeep Persistent Slabz	Wet LoosezWet SlabÚCorniceÚGlide)	r   r   r   r
   r   r   r	   r   r   )ÚunlikelyÚpossibleÚlikelyúvery likelyzalmost certainÚcertainr   r   r   r   r   )r   r   r   r
   r   c                ó†   — 	 t        | «      }|t        k(  ryt        j                  |«      dfS # t        t        f$ r Y yw xY w)zIReturn (afp_problem_id, is_normal_caution) for a Drupal field_type value.)NF)NTF)ÚintÚ	TypeErrorÚ
ValueErrorÚDRUPAL_NORMAL_CAUTIONÚDRUPAL_PROBLEM_TO_AFPÚget)ÚvalueÚkeys     ú(/var/www/avy-guidance/api/app/mapping.pyÚdrupal_problem_typer    2   sM   € ðÜ�%‹jˆð Ô#Ò#ØÜ ×$Ñ$ SÓ)¨5Ð0Ð0øô	 ”zÐ"ò Ùðús   ‚. ®A ¿A c                ó”   — g }t        d«      D ]7  }| j                  |«      }|dvsŒt        |«      }|sŒ'|j                  |«       Œ9 |S )zHdanger_rose column values {cell_index: value} -> selected AFP locations.é   )Nr   Ú0Ú )Úranger   r   Úappend)ÚvaluesÚoutÚcellÚvÚlocs        r   Úrose_cells_to_locationsr,   =   sP   € à
€CÜ�b“	ò  ˆØ�J‰J�tÓˆØÐ&Ò&Ü" 4Ó(ˆCÚØ—
‘
˜3•ð ð €Jó    c                ó8  — | �| dk(  ry t        | t        t        z  «      s't        | «      j	                  «       j                  «       rt        | «      }d|cxk  rdk  r|S  d S t        j                  t        | «      j	                  «       j                  «       «      S )Nr$   r   r   )	Ú
isinstancer   ÚfloatÚstrÚstripÚisdigitÚLIKELIHOOD_WORDSr   Úlower©r   r*   s     r   Úparse_likelihoodr7   I   s}   € Ø€}˜ šØÜ�%œœu™Ô%¬¨U«×)9Ñ)9Ó);×)CÑ)CÔ)EÜ�‹JˆØ˜”K˜a’KˆqÐ)�K TÐ)Ü×Ñ¤ E£
× 0Ñ 0Ó 2× 8Ñ 8Ó :Ó;Ð;r-   c                óÐ   — g }| xs g D ].  }	 t        |«      }d|cxk  rdk  sŒn Œ|j                  |«       Œ0 |syt	        |«      t        |«      fS # t        t        f$ r Y Œ[w xY w)zTA list of size values (Drupal ints or AFP strings like "1.5") -> (min, max) D-scale.r   r   )NN)r0   r   r   r&   ÚminÚmax)r'   Únumsr*   Úfs       r   Úparse_sizesr=   R   st   € à€DØŠ\�rò ˆð	Ü�a“ˆAð �Œ;�QŽ;Ø�K‰K˜�Nðñ ØÜˆt‹9”c˜$“iÐÐøô œ:Ð&ò 	Ùð	ús   �AÁA%Á$A%c                ód   — 	 t        | «      }d|cxk  rdk  r|S  d S # t        t        f$ r Y y w xY w)Nr   r   )r   r   r   r6   s     r   Úparse_dangerr?   a   sB   € ðÜ�‹Jˆð �Q”˜!’ˆ1Ð%� Ð%øô ”zÐ"ò Ùðús   ‚ �/®/z(\d{4})-(\d{2})-(\d{2})c                óª   — t         j                  | xs d«      }|r7|j                  d«      › d|j                  d«      › d|j                  d«      › �S d S )Nr$   r   ú-r   r   )Ú
TITLE_DATEÚsearchÚgroup)ÚtitleÚms     r   Údate_from_titlerG   l   sL   € Ü×Ñ˜%š+ 2Ó&€AÙ89ˆa�g‰g�a‹jˆ\˜˜1Ÿ7™7 1›:˜, a¨¯©°«
 |Ð4ÐC¸tÐCr-   c                ó~   — t        | dd «      t        | dd «      }}|dk\  r|n|dz
  }|› dt        |dz   «      dd › �S )	zFNorthern-hemisphere winter season label, e.g. 2020-12-01 -> '2020-21'.Nr
   r   r	   r   r   rA   éþÿÿÿ)r   r1   )Údate_isoÚyrF   Ústarts       r   Ú
season_forrM   q   sS   € äˆx˜˜ˆ|Óœc (¨1¨Q -Ó0€q€AØ�a’‰A˜Q ™U€EØˆW�A”c˜% !™)“n R SÐ)Ð*Ð+Ð+r-   )Úreturnztuple[int | None, bool])r'   zdict[int, int | None]rN   z	list[str])rN   z
int | None)rN   z!tuple[float | None, float | None])rE   ú
str | NonerN   rO   )rJ   r1   rN   r1   )Ú__doc__Ú
__future__r   ÚreÚenginer   r   ÚitemsÚAFP_TO_DRUPAL_PROBLEMr   ÚAFP_PROBLEM_NAMESr4   ÚLIKELIHOOD_NAMESr    r,   r7   r=   r?   ÚcompilerB   rG   rM   )Úkr*   s   00r   ú<module>rZ      së   ðñõ #ã 	å $ð  !¨¨a°A¸!ÀÀaÈQÑOÐ Ø*?×*EÑ*EÓ*G×H¡$ ! Q˜˜A™ÓHÐ ØÐ ð ØØØØØØØØñ
Ð ð ØØØØØñÐ ð " j°XÀ-ÐT]Ñ^Ð ó1ó	ó<ó ó&ð ˆR�Z‰ZÐ2Ó3€
óDô
,ùós Is   ²B