§
    ŸjãP ã                   ó  — d dl Z d dlZd dlmZmZ d dlmZ d dlmZ d dl	m
Z
 d dlmZ d dlmZ d dlmZ d d	lmZ d d
l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  G d„ d edd¦  «        ¦  «        Z G d„ d¦  «        Z dS )é    N)ÚdefaultdictÚ
namedtuple)ÚEnum)ÚTopologicalSorter)Úchain)Úsettings)Úmodels)Ú
operations)Ú	Migration)ÚAlterModelOptions)ÚMigrationOptimizer)ÚMigrationQuestioner)ÚCOMPILED_REGEX_TYPEÚRegexObjectÚresolve_relation)Úcached_propertyc                   óV   — e Zd Z G d„ de¦  «        Zed„ ¦   «         Zed„ ¦   «         ZdS )ÚOperationDependencyc                   ó"   — e Zd ZdZdZdZdZdZdS )úOperationDependency.Typer   é   é   é   é   N)Ú__name__Ú
__module__Ú__qualname__ÚCREATEÚREMOVEÚALTERÚREMOVE_ORDER_WRTÚALTER_FOO_TOGETHER© ó    ún/var/www/finuniver-perm.ru/html/student/venv/lib/python3.11/site-packages/django/db/migrations/autodetector.pyÚTyper      s+   € € € € € ØˆØˆØˆØÐØÐÐÐr$   r&   c                 ó4   — | j                              ¦   «         S ©N)Ú
model_nameÚlower©Úselfs    r%   Úmodel_name_lowerz$OperationDependency.model_name_lower!   ó   € àŒ×$Ò$Ñ&Ô&Ð&r$   c                 ó4   — | j                              ¦   «         S r(   )Ú
field_namer*   r+   s    r%   Úfield_name_lowerz$OperationDependency.field_name_lower%   r.   r$   N)r   r   r   r   r&   r   r-   r1   r#   r$   r%   r   r      st   € € € € € ðð ð ð ð ˆtñ ô ð ð ð'ð 'ñ „_ð'ð ð'ð 'ñ „_ð'ð 'ð 'r$   r   z$app_label model_name field_name typec                   ó€  — e Zd ZdZd7d„Zd8d„Zd„ Zd„ Zd9d„Zd„ Z	d	„ Z
ed
„ ¦   «         Zd7d„Zd„ Zd„ Zd„ Zd:d„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z d „ Z!d!„ Z"d"„ Z#d#„ Z$d$„ Z%d%„ Z&d&„ Z'ed'„ ¦   «         Z(d(„ Z)d)„ Z*d*„ Z+d+„ Z,d,„ Z-d-„ Z.d.„ Z/d/„ Z0d0„ Z1d1„ Z2d2„ Z3d3„ Z4d7d4„Z5d5„ Z6e7d6„ ¦   «         Z8dS );ÚMigrationAutodetectora  
    Take a pair of ProjectStates and compare them to see what the first would
    need doing to make it match the second (the second usually being the
    project's current state).

    Note that this naturally operates on entire projects at a time,
    as it's likely that changes interact (for example, you can't
    add a ForeignKey without having a migration to add the table it
    depends on first). A user interface may offer single-app usage
    if it wishes, with the caveat that it may not always be possible.
    Nc                 óx   — || _         || _        |pt          ¦   «         | _        d„ |j        D ¦   «         | _        d S )Nc                 ó   — h | ]\  }}|’ŒS r#   r#   )Ú.0ÚappÚmodels      r%   ú	<setcomp>z1MigrationAutodetector.__init__.<locals>.<setcomp>;   s   € ÐFÐFÐF¡j c¨5˜cÐFÐFÐFr$   )Ú
from_stateÚto_stater   Ú
questionerr	   Úexisting_apps)r,   r:   r;   r<   s       r%   Ú__init__zMigrationAutodetector.__init__7   sB   € Ø$ˆŒØ ˆŒØ$Ð=Õ(;Ñ(=Ô(=ˆŒØFÐF°JÔ4EÐFÑFÔFˆÔÐÐr$   c                 ó�   — |                       ||¦  «        }|                      |||¦  «        }|r|                      ||¦  «        }|S )zÌ
        Main entry point to produce a list of applicable changes.
        Take a graph to base names on and an optional set of apps
        to try and restrict to (restriction is not guaranteed)
        )Ú_detect_changesÚarrange_for_graphÚ_trim_to_apps)r,   ÚgraphÚtrim_to_appsÚconvert_appsÚmigration_nameÚchangess         r%   rG   zMigrationAutodetector.changes=   sS   € ð ×&Ò& |°UÑ;Ô;ˆØ×(Ò(¨°%¸ÑHÔHˆØð 	@Ø×(Ò(¨°,Ñ?Ô?ˆGØˆr$   c                 ó0  ‡ — t          |t          ¦  «        rˆ fd„|D ¦   «         S t          |t          ¦  «        rt          ˆ fd„|D ¦   «         ¦  «        S t          |t          ¦  «        r ˆ fd„|                     ¦   «         D ¦   «         S t          |t
          j        ¦  «        r:|j        ‰                      |j	        ¦  «        ‰                      |j
        ¦  «        fS t          |t          ¦  «        rt          |¦  «        S t          |t          ¦  «        r|S t          |d¦  «        rm|                     ¦   «         }t          |t           j        ¦  «        r
|dd…         }|\  }}}|ˆ fd„|D ¦   «         ˆ fd„|                     ¦   «         D ¦   «         fS |S )	zÈ
        Recursive deconstruction for a field and its arguments.
        Used for full comparison for rename/alter; sometimes a single-level
        deconstruction will not compare correctly.
        c                 ó:   •— g | ]}‰                      |¦  «        ‘ŒS r#   ©Údeep_deconstruct©r6   Úvaluer,   s     €r%   ú
<listcomp>z:MigrationAutodetector.deep_deconstruct.<locals>.<listcomp>P   s'   ø€ ÐBÐBÐB°U�D×)Ò)¨%Ñ0Ô0ÐBÐBÐBr$   c              3   óB   •K  — | ]}‰                      |¦  «        V — Œd S r(   rJ   rL   s     €r%   ú	<genexpr>z9MigrationAutodetector.deep_deconstruct.<locals>.<genexpr>R   s1   øè è € ÐGÐG¸%˜×.Ò.¨uÑ5Ô5ÐGÐGÐGÐGÐGÐGr$   c                 óB   •— i | ]\  }}|‰                      |¦  «        “ŒS r#   rJ   ©r6   ÚkeyrM   r,   s      €r%   ú
<dictcomp>z:MigrationAutodetector.deep_deconstruct.<locals>.<dictcomp>T   s-   ø€ ÐTÐTÐT¹*¸#¸u�C˜×.Ò.¨uÑ5Ô5ÐTÐTÐTr$   Údeconstructr   Nc                 ó:   •— g | ]}‰                      |¦  «        ‘ŒS r#   rJ   rL   s     €r%   rN   z:MigrationAutodetector.deep_deconstruct.<locals>.<listcomp>i   s'   ø€ Ð@Ð@Ð@°%�×&Ò& uÑ-Ô-Ð@Ð@Ð@r$   c                 óB   •— i | ]\  }}|‰                      |¦  «        “ŒS r#   rJ   rR   s      €r%   rT   z:MigrationAutodetector.deep_deconstruct.<locals>.<dictcomp>j   s-   ø€ ÐTÐTÐT±z°s¸E��d×+Ò+¨EÑ2Ô2ÐTÐTÐTr$   )Ú
isinstanceÚlistÚtupleÚdictÚitemsÚ	functoolsÚpartialÚfuncrK   ÚargsÚkeywordsr   r   ÚtypeÚhasattrrU   r	   ÚField)r,   ÚobjÚdeconstructedÚpathr`   Úkwargss   `     r%   rK   z&MigrationAutodetector.deep_deconstructI   s¹  ø€ õ �c�4Ñ Ô ð 	ØBÐBÐBÐB¸cÐBÑBÔBÐBÝ˜�UÑ#Ô#ð 	ÝÐGÐGÐGÐGÀ3ÐGÑGÔGÑGÔGÐGÝ˜�TÑ"Ô"ð 	ØTÐTÐTÐTÈÏ	Ê	ÉÌÐTÑTÔTÐTÝ˜�YÔ.Ñ/Ô/ð 	à”Ø×%Ò% c¤hÑ/Ô/Ø×%Ò% c¤lÑ3Ô3ðð õ
 ˜Õ0Ñ1Ô1ð 	Ý˜sÑ#Ô#Ð#Ý˜�TÑ"Ô"ð 	ð ˆJÝ�S˜-Ñ(Ô(ð 	ØŸOšOÑ-Ô-ˆMÝ˜#�vœ|Ñ,Ô,ð 2à -¨a¨b¨bÔ 1�Ø!.ÑˆD�$˜àØ@Ð@Ð@Ð@¸4Ð@Ñ@Ô@ØTÐTÐTÐTÀVÇ\Â\Á^Ä^ÐTÑTÔTðð ð ˆJr$   c                 ó
  — g }t          |                     ¦   «         ¦  «        D ]^\  }}|                      |¦  «        }|j        r(|j        j        r|d                              dd¦  «         |                     |¦  «         Œ_|S )zÒ
        Return a definition of the fields that ignores field names and
        what related fields actually relate to. Used for detecting renames (as
        the related fields change during renames).
        r   ÚtoN)Úsortedr\   rK   Úremote_fieldr8   ÚpopÚappend)r,   ÚfieldsÚ
fields_defÚnameÚfieldÚdeconstructions         r%   Úonly_relation_agnostic_fieldsz3MigrationAutodetector.only_relation_agnostic_fieldso   s�   € ð ˆ
Ý! &§,¢,¡.¤.Ñ1Ô1ð 	.ð 	.‰KˆD�%Ø!×2Ò2°5Ñ9Ô9ˆNØÔ!ð 2 eÔ&8Ô&>ð 2Ø˜qÔ!×%Ò% d¨DÑ1Ô1Ð1Ø×Ò˜nÑ-Ô-Ð-Ð-ØÐr$   c                 óN	  — i | _         i | _        i | _        i | _        t	          ¦   «         | _        t	          ¦   «         | _        t	          ¦   «         | _        t	          ¦   «         | _        t	          ¦   «         | _	        t	          ¦   «         | _
        | j        j                             ¦   «         D ]¡\  \  }}}|j                             dd¦  «        s| j                             ||f¦  «         Œ@|| j        j        vrS|j                             d¦  «        r| j                             ||f¦  «         Œ…| j                             ||f¦  «         Œ¢| j        j                             ¦   «         D ]§\  \  }}}|j                             dd¦  «        s| j
                             ||f¦  «         Œ@|| j        j        vs|rW||v rS|j                             d¦  «        r| j	                             ||f¦  «         Œ‹| j                             ||f¦  «         Œ¨| j                             ¦   «          | j                             ¦   «          |                      ¦   «          |                      ¦   «          |                      ¦   «          |                      ¦   «          |                      ¦   «          |                      ¦   «          |                      ¦   «          |                      ¦   «          |                      ¦   «          |                      ¦   «          |                      ¦   «          |                      ¦   «          |                       ¦   «          |  !                    ¦   «          |  "                    ¦   «          |  #                    ¦   «          |  $                    ¦   «          |  %                    ¦   «          |  &                    ¦   «          |  '                    ¦   «          |  (                    ¦   «          |  )                    ¦   «          |  *                    ¦   «          |  +                    ¦   «          |  ,                    ¦   «          |  -                    ¦   «          |  .                    ¦   «          |  /                    ¦   «          |  0                    |¦  «         |  1                    ¦   «          | j2        S )aX  
        Return a dict of migration plans which will achieve the
        change from from_state to to_state. The dict has app labels
        as keys and a list of migrations as values.

        The resulting migrations aren't specially named, but the names
        do matter for dependencies inside the set.

        convert_apps is the list of apps to convert to use migrations
        (i.e. to make initial migrations for, in the usual case)

        graph is an optional argument that, if provided, can help improve
        dependency generation and avoid potential circular dependencies.
        ÚmanagedTÚproxy)3Úgenerated_operationsÚaltered_indexesÚaltered_constraintsÚrenamed_fieldsÚsetÚold_model_keysÚold_proxy_keysÚold_unmanaged_keysÚnew_model_keysÚnew_proxy_keysÚnew_unmanaged_keysr:   r	   r\   ÚoptionsÚgetÚaddÚ	real_appsr;   Úresolve_fields_and_relationsÚgenerate_renamed_modelsÚ_prepare_field_listsÚ_generate_through_model_mapÚgenerate_deleted_modelsÚgenerate_created_modelsÚgenerate_deleted_proxiesÚgenerate_created_proxiesÚgenerate_altered_optionsÚgenerate_altered_managersÚ!generate_altered_db_table_commentÚcreate_renamed_fieldsÚcreate_altered_indexesÚcreate_altered_constraintsÚgenerate_removed_constraintsÚgenerate_removed_indexesÚgenerate_renamed_fieldsÚgenerate_renamed_indexesÚ(generate_removed_altered_unique_togetherÚgenerate_removed_fieldsÚgenerate_added_fieldsÚgenerate_altered_fieldsÚ&generate_altered_order_with_respect_toÚ generate_altered_unique_togetherÚgenerate_added_indexesÚgenerate_added_constraintsÚgenerate_altered_constraintsÚgenerate_altered_db_tableÚ_sort_migrationsÚ_build_migration_listÚ_optimize_migrationsÚ
migrations)r,   rE   rC   Ú	app_labelr)   Úmodel_states         r%   r@   z%MigrationAutodetector._detect_changes}   ss  € ð& %'ˆÔ!Ø!ˆÔØ#%ˆÔ Ø ˆÔõ "™eœeˆÔÝ!™eœeˆÔÝ"%¡%¤%ˆÔÝ!™eœeˆÔÝ!™eœeˆÔÝ"%¡%¤%ˆÔØ48´OÔ4J×4PÒ4PÑ4RÔ4Rð 	Eð 	EÑ0Ñ#ˆY˜
 [ØÔ&×*Ò*¨9°dÑ;Ô;ð EØÔ'×+Ò+¨Y¸
Ð,CÑDÔDÐDÐDØ $¤/Ô";Ð;Ð;ØÔ&×*Ò*¨7Ñ3Ô3ð EØÔ'×+Ò+¨Y¸
Ð,CÑDÔDÐDÐDàÔ'×+Ò+¨Y¸
Ð,CÑDÔDÐDøà48´MÔ4H×4NÒ4NÑ4PÔ4Pð 		Eð 		EÑ0Ñ#ˆY˜
 [ØÔ&×*Ò*¨9°dÑ;Ô;ð EØÔ'×+Ò+¨Y¸
Ð,CÑDÔDÐDÐDØ $¤/Ô";Ð;Ð;Øð <Ø!*¨lÐ!:Ð!:àÔ&×*Ò*¨7Ñ3Ô3ð EØÔ'×+Ò+¨Y¸
Ð,CÑDÔDÐDÐDàÔ'×+Ò+¨Y¸
Ð,CÑDÔDÐDøàŒ×4Ò4Ñ6Ô6Ð6ØŒ×2Ò2Ñ4Ô4Ð4ð 	×$Ò$Ñ&Ô&Ð&ð 	×!Ò!Ñ#Ô#Ð#Ø×(Ò(Ñ*Ô*Ð*ð 	×$Ò$Ñ&Ô&Ð&Ø×$Ò$Ñ&Ô&Ð&Ø×%Ò%Ñ'Ô'Ð'Ø×%Ò%Ñ'Ô'Ð'Ø×%Ò%Ñ'Ô'Ð'Ø×&Ò&Ñ(Ô(Ð(Ø×.Ò.Ñ0Ô0Ð0ð 	×"Ò"Ñ$Ô$Ð$ð 	×#Ò#Ñ%Ô%Ð%Ø×'Ò'Ñ)Ô)Ð)à×)Ò)Ñ+Ô+Ð+Ø×%Ò%Ñ'Ô'Ð'à×$Ò$Ñ&Ô&Ð&Ø×%Ò%Ñ'Ô'Ð'à×5Ò5Ñ7Ô7Ð7à×$Ò$Ñ&Ô&Ð&Ø×"Ò"Ñ$Ô$Ð$Ø×$Ò$Ñ&Ô&Ð&Ø×3Ò3Ñ5Ô5Ð5Ø×-Ò-Ñ/Ô/Ð/Ø×#Ò#Ñ%Ô%Ð%Ø×'Ò'Ñ)Ô)Ð)Ø×)Ò)Ñ+Ô+Ð+Ø×&Ò&Ñ(Ô(Ð(à×ÒÑÔÐØ×"Ò" 5Ñ)Ô)Ð)Ø×!Ò!Ñ#Ô#Ð#àŒÐr$   c                 óî   ‡ — ‰ j         ‰ j        z  ‰ _        ‰ j        ‰ j        z  ‰ _        ‰ j        ‰ j        z  ‰ _        i ‰ _	        ˆ fd„‰ j        D ¦   «         ‰ _
        ˆ fd„‰ j        D ¦   «         ‰ _        dS )zÏ
        Prepare field lists and a list of the fields that used through models
        in the old state so dependencies can be made from the through model
        deletion to the field that uses it.
        c                 óŽ   •— h | ]A\  }}‰j         j        |‰j                             ||f|¦  «        f         j        D ]}|||f’ŒŒBS r#   )r:   r	   Úrenamed_modelsr„   ro   ©r6   r§   r)   r0   r,   s       €r%   r9   z=MigrationAutodetector._prepare_field_lists.<locals>.<setcomp>ñ   sx   ø€ ð 
ð 
ð 
á%�	˜:Ø"œoÔ4Ø˜4Ô.×2Ò2°I¸zÐ3JÈJÑWÔWÐWôäð
ð 
ð ð ˜
 JÐ/ð
ð 
ð 
ð 
r$   c                 óX   •— h | ]&\  }}‰j         j        ||f         j        D ]}|||f’ŒŒ'S r#   )r;   r	   ro   r¬   s       €r%   r9   z=MigrationAutodetector._prepare_field_lists.<locals>.<setcomp>ø   s]   ø€ ð 
ð 
ð 
á%�	˜:Ø"œmÔ2°9¸jÐ3HÔIÔPð
ð 
ð ð ˜
 JÐ/ð
ð 
ð 
ð 
r$   N)r}   r€   Úkept_model_keysr~   r�   Úkept_proxy_keysr   r‚   Úkept_unmanaged_keysÚthrough_usersÚold_field_keysÚnew_field_keysr+   s   `r%   r‰   z*MigrationAutodetector._prepare_field_listsç   s¨   ø€ ð  $Ô2°TÔ5HÑHˆÔØ#Ô2°TÔ5HÑHˆÔØ#'Ô#:¸TÔ=TÑ#TˆÔ ØˆÔð
ð 
ð 
ð 
à)-Ô)=ð
ñ 
ô 
ˆÔð
ð 
ð 
ð 
à)-Ô)=ð
ñ 
ô 
ˆÔÐÐr$   c                 óv  — t          | j        ¦  «        D ]£\  }}| j                             ||f|¦  «        }| j        j        ||f         }|j                             ¦   «         D ]S\  }}t          |d¦  «        r>t          |j
        dd¦  «        r(t          |j
        j        ||¦  «        }|||f| j        |<   ŒTŒ¤dS )zThrough model map generation.rl   ÚthroughN)rk   r}   r«   r„   r:   r	   ro   r\   rc   Úgetattrrl   r   rµ   r±   )r,   r§   r)   Úold_model_nameÚold_model_stater0   rr   Úthrough_keys           r%   rŠ   z1MigrationAutodetector._generate_through_model_mapþ   sñ   € å%+¨DÔ,?Ñ%@Ô%@ð 	ð 	Ñ!ˆI�zØ!Ô0×4Ò4Ø˜JÐ'¨ñô ˆNð #œoÔ4°YÀÐ5NÔOˆOØ%4Ô%;×%AÒ%AÑ%CÔ%Cð ð Ñ!�
˜EÝ˜5 .Ñ1Ô1ð 
µgØÔ&¨	°4ñ7ô 7ð 
õ #3ØÔ*Ô2°I¸zñ#ô #�Kð "Ø&Ø"ð7�DÔ& {Ñ3øðð	ð 	r$   c                 óà   — | j         dk    r| dfS t          t          | j        ¦  «                             d¦  «        \  }}t          ||                     ¦   «         | j        | j        ¦  «        dfS )zp
        Return the resolved dependency and a boolean denoting whether or not
        it was swappable.
        Ú__setting__Fú.T)	r§   r¶   r   r)   Úsplitr   r*   r0   rb   )Ú
dependencyÚresolved_app_labelÚresolved_object_names      r%   Ú_resolve_dependencyz)MigrationAutodetector._resolve_dependency  sƒ   € ð Ô =Ò0Ð0Ø˜uÐ$Ð$Ý3:Ý�jÔ+ñ4
ô 4
ç
Š%�‰*Œ*ñ 	1ÐÐ0õ  Ø"Ø$×*Ò*Ñ,Ô,ØÔ%Ø”ñ	ô ð ð
ð 	
r$   c           
      ó¦  — i | _         t          d„ | j                             ¦   «         D ¦   «         ¦  «        }d}|�rt	          | j        ¦  «        D �]¥}g }t          ¦   «         }t          | j        |         ¦  «        D �]ž}d}t          ¦   «         }	|j        D �]G}
|
}|                      |
¦  «        \  }
}|
j	        |k    �r| j         
                    |
j	        g ¦  «        D ]}|                      ||
¦  «        rd} nŒ|s nß|r"|	                     |j	        |j        f¦  «         ŒŽ|
j	        | j         v r8|	                     |
j	        | j         |
j	                 d         j        f¦  «         ŒÔ|ro|rO|                     |
j	        ¦  «        r5|	                     |                     |
j	        ¦  «        d         ¦  «         �Œ'|	                     |
j	        df¦  «         �ŒEd}�ŒI|r:|                     |¦  «         |                     |	¦  «         | j        |         d= �ŒŸ |s|rÔ| j        |         r|r­t%          dt&          fg g dœ¦  «        } |d	t)          | j          
                    |g ¦  «        ¦  «        d
z   z  |¦  «        }t          |¦  «        |_        ||_        || j        v|_        | j                              |g ¦  «                             |¦  «         d}�Œ�|| j        |         z   | j        |<   �Œ§t          d„ | j                             ¦   «         D ¦   «         ¦  «        }||k    r|sd}nt5          d| j        z  ¦  «        ‚|}|�°dS dS )ag  
        Chop the lists of operations up into migrations with dependencies on
        each other. Do this by going through an app's list of operations until
        one is found that has an outgoing dependency that isn't in another
        app's migration yet (hasn't been chopped off its list). Then chop off
        the operations before it into a migration and move onto the next app.
        If the loops completes without doing anything, there's a circular
        dependency (which _should_ be impossible as the operations are
        all split at this point so they can't depend and be depended on).
        c              3   ó4   K  — | ]}t          |¦  «        V — Œd S r(   ©Úlen©r6   Úxs     r%   rP   z>MigrationAutodetector._build_migration_list.<locals>.<genexpr>3  s(   è è € ÐIÐI •c˜!‘f”fÐIÐIÐIÐIÐIÐIr$   FTéÿÿÿÿr   Ú	__first__r   )r
   Údependencieszauto_%ir   c              3   ó4   K  — | ]}t          |¦  «        V — Œd S r(   rÄ   rÆ   s     r%   rP   z>MigrationAutodetector._build_migration_list.<locals>.<genexpr>”  s(   è è € ÐQÐQ¨�c !™fœfÐQÐQÐQÐQÐQÐQr$   z)Cannot resolve operation dependencies: %rN)r¦   Úsumrx   Úvaluesrk   r|   rY   Ú
_auto_depsrÁ   r§   r„   Úcheck_dependencyr…   r)   rq   Ú
leaf_nodesrn   Úupdaterb   r   rÅ   rÊ   r
   r=   ÚinitialÚ
setdefaultÚ
ValueError)r,   rC   Únum_opsÚ	chop_moder§   ÚchoppedrÊ   Ú	operationÚdeps_satisfiedÚoperation_dependenciesÚdepÚoriginal_depÚis_swappable_depÚother_operationÚsubclassÚinstanceÚnew_num_opss                    r%   r¤   z+MigrationAutodetector._build_migration_list'  s)  € ð ˆŒÝÐIÐI dÔ&?×&FÒ&FÑ&HÔ&HÐIÑIÔIÑIÔIˆØˆ	Øñ h	"õ $ DÔ$=Ñ>Ô>ð Wñ W�	Ø�Ý"™uœu�Ý!% dÔ&?À	Ô&JÑ!KÔ!Kð ?ñ ?�IØ%)�NÝ-0©U¬UÐ*Ø(Ô3ð 6?ñ 6?˜ð
 (+˜Ø04×0HÒ0HÈÑ0MÔ0MÑ-˜Ð-Øœ=¨IÒ5Ñ5ð 48Ô3L×3PÒ3PØ #¤¨rñ4ô 4ð *ð * ð $(×#8Ò#8¸È#Ñ#NÔ#Nð !*Ø5: NØ$) Eð!*ð $2ð &?Ø % à#3ð #!?Ø$:×$>Ò$>à,8Ô,BØ,8Ô,Cð)*ñ%&ô %&ð %&ð %&ð &)¤]°d´oÐ%EÐ%EØ$:×$>Ò$>à,/¬MØ,0¬O¸C¼MÔ,JÈ2Ô,NÔ,Sð)*ñ%&ô %&ð %&ð %&ð (1ð %?ð ,1ð ).°U×5EÒ5EÀcÄmÑ5TÔ5Tð ).Ø,B×,FÒ,FØ05×0@Ò0@ÀÄÑ0OÔ0OÐPQÔ0Rñ-.ô -.ð -.ñ -.ð -C×,FÒ,FØ14´ÀÐ0Lñ-.ô -.ð -.ñ -.ð :?¨ùØ%ð ØŸš yÑ1Ô1Ð1Ø$×+Ò+Ð,BÑCÔCÐCØ Ô5°iÔ@ÀÐCÑCààð  7ð ØÔ4°YÔ?ð À9ð Ý#'Ø'Ý&˜LØ+-¸rÐBÐBñ$ô $˜ð
 $, 8Ø%­¨T¬_×-@Ò-@ÀÈBÑ-OÔ-OÑ)PÔ)PÐSTÑ)TÑUØ%ñ$ô $˜õ 15°\Ñ0BÔ0B˜Ô-Ø.5˜Ô+Ø+4¸DÔ<NÐ+N˜Ô(Øœ×2Ò2°9¸bÑAÔA×HÒHÈÑRÔRÐRØ$)˜	™	ð $ dÔ&?À	Ô&JÑJð Ô1°)Ñ<ùõ ÐQÐQ¨dÔ.G×.NÒ.NÑ.PÔ.PÐQÑQÔQÑQÔQˆKØ˜gÒ%Ð%Ø ð Ø $�I�Iå$ØCØÔ3ñ4ñô ð ð "ˆGðQ ñ h	"ð h	"ð h	"ð h	"ð h	"r$   c                 óœ  ‡ ‡— t          ‰ j                             ¦   «         ¦  «        D ]¢\  }}t          ¦   «         }|D ]c}|                     |¦  «         |j        D ]DŠ‰                      ‰¦  «        d         Š‰j        |k    rŒ) |j        |gˆˆ fd„|D ¦   «         ¢R Ž  ŒEŒdt          | 	                    ¦   «         ¦  «        ‰ j        |<   Œ£dS )z{
        Reorder to make things possible. Reordering may be needed so FKs work
        nicely inside the same app.
        r   c              3   óH   •K  — | ]}‰                      |‰¦  «        ¯|V — Œd S r(   )rÏ   )r6   rÇ   rÛ   r,   s     €€r%   rP   z9MigrationAutodetector._sort_migrations.<locals>.<genexpr>®  s8   øè è € Ð QÐ Q q°4×3HÒ3HÈÈCÑ3PÔ3PÐ Q Ð QÐ QÐ QÐ QÐ QÐ Qr$   N)
rk   rx   r\   r   r…   rÎ   rÁ   r§   rY   Ústatic_order)r,   r§   ÚopsÚtsÚoprÛ   s   `    @r%   r£   z&MigrationAutodetector._sort_migrationsŸ  s  øø€ õ
 % TÔ%>×%DÒ%DÑ%FÔ%FÑGÔGð 	Kð 	K‰NˆI�sÝ"Ñ$Ô$ˆBØð Sð S�Ø—’�r‘
”
�
Øœ=ð Sð S�Cð ×2Ò2°3Ñ7Ô7¸Ô:�CØ”}¨	Ò1Ð1Ø Ø�B”F˜2ÐRÐ QÐ QÐ QÐ QÐ Q¨CÐ QÑ QÔ QÐRÐRÐRÐRÐRðSõ 48¸¿ºÑ8IÔ8IÑ3JÔ3JˆDÔ% iÑ0Ð0ð	Kð 	Kr$   c                 óð  — | j                              ¦   «         D ]D\  }}t          ||dd …         ¦  «        D ]&\  }}|j                             ||j        f¦  «         Œ'ŒE| j                              ¦   «         D ]-}|D ](}t          t          |j        ¦  «        ¦  «        |_        Œ)Œ.| j                              ¦   «         D ]6\  }}|D ].}t          ¦   «          
                    |j        |¦  «        |_        Œ/Œ7d S )Nr   )r¦   r\   ÚziprÊ   rn   rq   rÍ   rY   r|   r   Úoptimizer
   )r,   r§   r¦   Úm1Úm2Ú	migrations         r%   r¥   z*MigrationAutodetector._optimize_migrations±  s/  € à%)¤_×%:Ò%:Ñ%<Ô%<ð 	=ð 	=Ñ!ˆI�zÝ˜j¨*°Q°R°R¬.Ñ9Ô9ð =ð =‘��BØ”×&Ò&¨	°2´7Ð';Ñ<Ô<Ð<Ð<ð=ð œ/×0Ò0Ñ2Ô2ð 	Kð 	KˆJØ'ð Kð K�	Ý)-­c°)Ô2HÑ.IÔ.IÑ)JÔ)J�	Ô&Ð&ðKð &*¤_×%:Ò%:Ñ%<Ô%<ð 	ð 	Ñ!ˆI�zØ'ð ð �	Ý'9Ñ';Ô';×'DÒ'DØÔ(¨)ñ(ô (�	Ô$Ð$ðð	ð 	r$   c                 ó–  ‡— ‰j         €D‰j        t          j        j        k    r*t          |t          j        ¦  «        o|j        ‰j	        k    S ‰j         �ž‰j        t          j        j        k    r„t          |t          j        ¦  «        o/|j        ‰j	        k    ot          ˆfd„|j        D ¦   «         ¦  «        p9t          |t          j        ¦  «        o|j	        ‰j	        k    o|j        ‰j        k    S ‰j         �T‰j        t          j        j        k    r:t          |t          j        ¦  «        o|j	        ‰j	        k    o|j        ‰j        k    S ‰j         €D‰j        t          j        j        k    r*t          |t          j        ¦  «        o|j        ‰j	        k    S ‰j         �T‰j        t          j        j        k    r:t          |t          j        ¦  «        o|j	        ‰j	        k    o|j        ‰j        k    S ‰j         �h‰j        t          j        j        k    rNt          |t          j        ¦  «        o3|j        ‰j	        k    o#|j        pd                     ¦   «         ‰j        k    S ‰j         �P‰j        t          j        j        k    r6t          |t          j        t          j        f¦  «        o|j        ‰j	        k    S t5          d‰›�¦  «        ‚)zn
        Return True if the given operation depends on the given dependency,
        False otherwise.
        Nc              3   ó4   •K  — | ]\  }}‰j         |k    V — Œd S r(   )r0   )r6   rÇ   Úyr¾   s      €r%   rP   z9MigrationAutodetector.check_dependency.<locals>.<genexpr>Ù  s/   øè è € ÐPÐP±t°q¸!˜
Ô-°Ò2ÐPÐPÐPÐPÐPÐPr$   Ú zCan't handle dependency )r0   rb   r   r&   r   rX   r
   ÚCreateModelÚ
name_lowerr-   Úanyro   ÚAddFieldr1   r   ÚRemoveFieldÚDeleteModelr    Ú
AlterFieldr!   ÚAlterOrderWithRespectToÚorder_with_respect_tor*   r"   ÚAlterUniqueTogetherÚAlterIndexTogetherrÔ   )r,   rØ   r¾   s     `r%   rÏ   z&MigrationAutodetector.check_dependencyÃ  sæ  ø€ ð Ô!Ð)Ø”Õ#6Ô#;Ô#BÒBÐBõ ˜9¥jÔ&<Ñ=Ô=ð HØÔ(¨JÔ,GÒGðð Ô!Ð-Ø”Õ#6Ô#;Ô#BÒBÐBõ ˜9¥jÔ&<Ñ=Ô=ð QØÔ(¨JÔ,GÒGðQåÐPÐPÐPÐP¸yÔ?OÐPÑPÔPÑPÔPðõ
 ˜9¥jÔ&9Ñ:Ô:ð HØÔ.°*Ô2MÒMðHàÔ(¨JÔ,GÒGðð Ô!Ð-Ø”Õ#6Ô#;Ô#BÒBÐBõ ˜9¥jÔ&<Ñ=Ô=ð HØÔ.°*Ô2MÒMðHàÔ(¨JÔ,GÒGðð Ô!Ð)Ø”Õ#6Ô#;Ô#BÒBÐBõ ˜9¥jÔ&<Ñ=Ô=ð HØÔ(¨JÔ,GÒGðð Ô!Ð-Ø”Õ#6Ô#;Ô#AÒAÐAõ ˜9¥jÔ&;Ñ<Ô<ð HØÔ.°*Ô2MÒMðHàÔ(¨JÔ,GÒGðð Ô!Ð-Ø”Õ#6Ô#;Ô#LÒLÐLõ ˜9¥jÔ&HÑIÔIð /ØÔ(¨JÔ,GÒGð/àÔ4Ð:¸×AÒAÑCÔCØÔ.ò/ðð Ô!Ð-Ø”Õ#6Ô#;Ô#NÒNÐNõ ØÝÔ3µZÔ5RÐSñô ð Hð Ô(¨JÔ,GÒGðõ �*¸Z¸ZÐIÑJÔJÐJr$   Fc                 óÚ   — |pg |_         |r1| j                             |g ¦  «                             d|¦  «         d S | j                             |g ¦  «                             |¦  «         d S )Nr   )rÎ   rx   rÓ   Úinsertrn   )r,   r§   rØ   rÊ   Ú	beginnings        r%   Úadd_operationz#MigrationAutodetector.add_operation  sv   € ð  ,Ð1¨rˆ	ÔØð 	RØÔ%×0Ò0°¸BÑ?Ô?×FÒFÀqÈ)ÑTÔTÐTÐTÐTàÔ%×0Ò0°¸BÑ?Ô?×FÒFÀyÑQÔQÐQÐQÐQr$   c                 ón  — 	 | j         j        |         }d„ |j        D ¦   «         }|d         ›d|d         ›�}|j                             d¦  «        s<d|v s8d|v s4t
          j                             ¦   «         |                     ¦   «         k    rd|d         z   d|d         z   fS n# t          $ r Y nw xY w|S )	z|
        Place potential swappable models first in lists of created models (only
        real way to solve #22783).
        c                 óJ   — h | ] }t          |t          ¦  «        r|n|j        ’Œ!S r#   )rX   Ústrr   )r6   Úbases     r%   r9   z<MigrationAutodetector.swappable_first_key.<locals>.<setcomp>'  s=   € ð ð ð àõ # 4­Ñ-Ô-Ð@��°4´=ðð ð r$   r   r¼   r   Ú	swappableÚAbstractUserÚAbstractBaseUserÚ___)	r;   r	   Úbasesrƒ   r„   r   ÚAUTH_USER_MODELr*   ÚLookupError)r,   Úitemr¨   Ú
base_namesÚstring_versions        r%   Úswappable_first_keyz)MigrationAutodetector.swappable_first_key   sî   € ð
	Øœ-Ô.¨tÔ4ˆKðð à'Ô-ðñ ô ˆJð )-¨Q¬¨¨°°a´°Ð9ˆNàÔ#×'Ò'¨Ñ4Ô4ð:à! ZÐ/Ð/Ø%¨Ð3Ð3ÝÔ+×1Ò1Ñ3Ô3°~×7KÒ7KÑ7MÔ7MÒMÐMà  Q¤™¨°°a´©Ð9Ð9ð Nøõ ð 	ð 	ð 	ØˆDð	øøøàˆs   ‚B!B% Â%
B2Â1B2c                 ó"  — i | _         i | _        | j        | j        z
  }t	          |¦  «        D �]à\  }}| j        j        ||f         }|                      |j        ¦  «        }| j        | j        z
  }|D �]™\  }}||k    �rŒ| j	        j        ||f         }	|                      |	j        ¦  «        }
||
k    �rW| j
                             |	|¦  «        �r;g }t          |j                             ¦   «         ¦  «        d„ | j        j        ||f                              ¦   «         D ¦   «         z   }|D ]9}|j        r0|                     |                      |||| j        ¦  «        ¦  «         Œ:|                      |t'          j        |	j        |j        ¬¦  «        |¬¦  «         || j         ||f<   |	j        ›d|	j        ›�}|j        ›d|j        ›�| j        |<   | j                             ||f¦  «         | j                             ||f¦  «          n�Œ›�ŒâdS )z¼
        Find any renamed models, generate the operations for them, and remove
        the old entry from the model lists. Must be run before other
        model-level generation.
        c                 óJ   — g | ] }|                      ¦   «         D ]	}|j        ‘Œ
Œ!S r#   )rÍ   rl   )r6   Ú	relationsrr   s      r%   rN   zAMigrationAutodetector.generate_renamed_models.<locals>.<listcomp>R  sY   € ð Jð Jð Jà$-ð .7×-=Ò-=Ñ-?Ô-?ðJð Jð
 %*ð	 !&Ô 2ðJð Jð Jð Jr$   )Úold_nameÚnew_name©rÊ   r¼   N)r«   Úrenamed_models_relr€   r}   rk   r;   r	   rt   ro   r:   r<   Úask_rename_modelrY   rÍ   r  Úis_relationÚextendÚ!_get_dependencies_for_foreign_keyr   r
   ÚRenameModelrq   r§   ró   Úremover…   )r,   Úadded_modelsr§   r)   r¨   Úmodel_fields_defÚremoved_modelsÚrem_app_labelÚrem_model_nameÚrem_model_stateÚrem_model_fields_defrÊ   ro   rr   Úrenamed_models_rel_keys                  r%   rˆ   z-MigrationAutodetector.generate_renamed_models7  s§  € ð !ˆÔØ"$ˆÔØÔ*¨TÔ-@Ñ@ˆÝ%+¨LÑ%9Ô%9ð 9	"ñ 9	"Ñ!ˆI�zØœ-Ô.¨y¸*Ð/DÔEˆKØ#×AÒAÀ+ÔBTÑUÔUÐà!Ô0°4Ô3FÑFˆNØ1?ð 4"ñ 4"Ñ-�˜~Ø  IÒ-Ñ-Ø&*¤oÔ&<Ø% ~Ð5ô'�Oð ,0×+MÒ+MØ'Ô.ñ,ô ,Ð(ð (Ð+?Ò?Ñ?Øœ?×;Ò;Ø+¨[ñô ñ +"ð ,.˜LÝ%)¨+Ô*<×*CÒ*CÑ*EÔ*EÑ%FÔ%Fð Jð Jà15´Ô1HØ$-¨zÐ$9ô2"ç"(¢&¡(¤(ð	Jñ Jô Jñ &˜Fð *0ð 	&ð 	& Ø#(Ô#4ð !&Ø$0×$7Ò$7Ø(,×(NÒ(NØ,5Ø,6Ø,1Ø,0¬Mñ	)*ô )*ñ%&ô %&ð %&øð !×.Ò.Ø )Ý *Ô 6Ø-<Ô-AØ-8Ô-=ð!"ñ !"ô !"ð .:ð /ñ ô ð ð JX˜DÔ/°	¸:Ð0EÑFà /Ô 9Ð 9Ð 9Ø /Ô :Ð :ð6Ð2ð %0Ô$9Ð$9Ð$9Ø$/Ô$:Ð$:ð!"ð !Ô3Ð4JÑKð !Ô/×6Ò6¸À~Ð7VÑWÔWÐWØ Ô/×3Ò3°YÀ
Ð4KÑLÔLÐLØ!˜Eùùðs9	"ð 9	"r$   c                 ó”  ‡‡‡ — | j         | j        z  }| j        |z
  }| j        |z
  }t	          t          || j        d¬¦  «        t          || j        d¬¦  «        ¦  «        }|D �]ã\  ŠŠ| j        j        ‰‰f         }i Š d}|j	         
                    ¦   «         D ]X\  }}|j        rL|j        j        r%|j        r|j        j        }n|j        j        s|‰ |<   t          |j        dd¦  «        r|‰ |<   ŒY|j                             d¦  «        }	|j                             d¦  «        }
|j                             dd¦  «        }|j                             dd¦  «        }t%          ‰‰dt$          j        j        ¦  «        g}|j        D �].}t-          |t.          ¦  «        �rd	|v �r|                     d	d
¦  «        \  }}|                     t%          ||dt$          j        j        ¦  «        ¦  «         | j        j                             ||f¦  «        }| j        j                             ||f¦  «        }|r|r}t;          |j	        ¦  «                             |j	        ¦  «                             |j	        ¦  «        }|D ]6}|                     t%          |||t$          j        j        ¦  «        ¦  «         Œ7�Œ0|rA|                     t%          g tA          |‰‰¦  «        ¢d‘t$          j        j        ‘R Ž ¦  «         |  !                    ‰tE          j#        |j$        ˆ fd„|j	         
                    ¦   «         D ¦   «         |j        |j        |j%        ¬¦  «        |d¬¦  «         |j                             dd¦  «        s�Œt          ‰  
                    ¦   «         ¦  «        D ]�\  }}|  &                    ‰‰|| j        ¦  «        }|                     t%          ‰‰dt$          j        j        ¦  «        ¦  «         |  !                    ‰tE          j'        ‰||¬¦  «        tQ          t;          |¦  «        ¦  «        ¬¦  «         Œž|rl|  !                    ‰tE          j)        ‰|¬¦  «        t%          ‰‰|t$          j        j        ¦  «        t%          ‰‰dt$          j        j        ¦  «        g¬¦  «         ˆˆfd„t          ‰ ¦  «        D ¦   «         }|                     t%          ‰‰dt$          j        j        ¦  «        ¦  «         |	D ].}|  !                    ‰tE          j*        ‰|¬¦  «        |¬¦  «         Œ/|
D ].}|  !                    ‰tE          j+        ‰|¬¦  «        |¬¦  «         Œ/|r,|  !                    ‰tE          j,        ‰|¬¦  «        |¬¦  «         | j        j-        }‰‰f| j.        v r¥|‰‰f          
                    ¦   «         D ]ˆ\  }Š | j        j        |         }‰  
                    ¦   «         D ]\\  }}|  !                    |j/        tE          j0        |j$        ||¬¦  «        t%          ‰‰dt$          j        j        ¦  «        g¬¦  «         Œ]Œ‰�ŒådS )ar  
        Find all new models (both managed and unmanaged) and make create
        operations for them as well as separate operations to create any
        foreign key or M2M relationships (these are optimized later, if
        possible).

        Defer any model options that refer to collections of fields that might
        be deferred (e.g. unique_together).
        T)rS   ÚreverseNrµ   ÚindexesÚconstraintsÚunique_togetherrú   r¼   r   c                 ó(   •— g | ]}|d          ‰v¯|‘ŒS )r   r#   )r6   ÚdÚrelated_fieldss     €r%   rN   zAMigrationAutodetector.generate_created_models.<locals>.<listcomp>Û  s2   ø€ ð ð ð àØ˜Qœ4 ~Ð5Ð5ð à5Ð5Ð5r$   ©rq   ro   rƒ   r	  Úmanagers)rÊ   rÿ   rv   ©r)   rq   rr   r  ©rq   rú   c                 óR   •— g | ]#}t          ‰‰|t           j        j        ¦  «        ‘Œ$S r#   )r   r&   r   )r6   rq   r§   r)   s     €€r%   rN   zAMigrationAutodetector.generate_created_models.<locals>.<listcomp>  sE   ø€ ð $ð $ð $ð õ $Ø˜z¨4Õ1DÔ1IÔ1Pñô ð$ð $ð $r$   ©r)   Úindex©r)   Ú
constraint©rq   r)  )1r}   r   r€   r‚   r   rk   r  r;   r	   ro   r\   rl   r8   Úprimary_keyÚparent_linkr¶   rƒ   rm   r   r&   r   r	  rX   r  r½   rn   r   r:   r„   r|   Ú
differenceÚintersectionr   r   r
   rò   rq   r.  r  rõ   rY   rù   ÚAddIndexÚAddConstraintrû   r  r~   r§   rø   )!r,   Úold_keysr  Úadded_unmanaged_modelsÚall_added_modelsr¨   Úprimary_key_relr0   rr   r'  r(  r)  rú   rÊ   r  Úbase_app_labelÚ	base_nameÚold_base_model_stateÚnew_base_model_stateÚremoved_base_fieldsÚremoved_base_fieldrq   Úrelated_dependenciesr3  r5  r  Úrelated_model_keyÚrelated_model_stateÚrelated_field_nameÚrelated_fieldr§   r)   r,  s!                                 @@@r%   rŒ   z-MigrationAutodetector.generate_created_models{  sû  øøø€ ð Ô&¨Ô)@Ñ@ˆØÔ*¨XÑ5ˆØ!%Ô!8¸8Ñ!CÐÝ Ý�< TÔ%=ÀtÐLÑLÔLÝÐ)¨tÔ/GÐQUÐVÑVÔVñ
ô 
Ðð &6ð J	ñ J	Ñ!ˆI�zØœ-Ô.¨y¸*Ð/DÔEˆKàˆNØ"ˆOØ%0Ô%7×%=Ò%=Ñ%?Ô%?ð ;ð ;Ñ!�
˜EØÔ%ð ;ØÔ)Ô/ð ?Ø Ô,ð ?Ø.3Ô.@Ô.F˜O˜OØ!&Ô!3Ô!?ð ?Ø9>˜N¨:Ñ6Ý˜uÔ1°9¸dÑCÔCð ;Ø5:˜ zÑ2øð "Ô)×-Ò-¨iÑ8Ô8ˆGØ%Ô-×1Ò1°-Ñ@Ô@ˆKØ)Ô1×5Ò5Ð6GÈÑNÔNˆOØ$/Ô$7×$;Ò$;Ø'¨ñ%ô %Ð!õ
 $Ø˜z¨4Õ1DÔ1IÔ1Pñô ðˆLð $Ô)ð #ñ #�Ý˜d¥CÑ(Ô(ñ "¨S°D¨[©[Ø04·
²
¸3ÀÑ0BÔ0BÑ-�N IØ ×'Ò'Ý+Ø*Ø%Ø Ý/Ô4Ô;ñ	ô ñô ð ð ,0¬?Ô+A×+EÒ+EØ'¨Ð3ñ,ô ,Ð(ð ,0¬=Ô+?×+CÒ+CØ'¨Ð3ñ,ô ,Ð(ð ,ð Ð0Dð åÐ 4Ô ;Ñ<Ô<ß'šZØ 4Ô ;ñô ÷ *š\¨+Ô*<Ñ=Ô=ð ,ð 3Fð ð Ð.Ø(×/Ò/Ý 3Ø$2Ø$-Ø$6Ý$7Ô$<Ô$Cñ	!"ô !"ñô ð ð ùð ð Ø×#Ò#Ý'ð Ý)¨/¸9ÀjÑQÔQðàðõ ,Ô0Ô7ðð ð ñô ð ð ×ÒØÝÔ&Ø$Ô)ðð ð ð à!,Ô!3×!9Ò!9Ñ!;Ô!;ðñ ô ð
 (Ô/Ø%Ô+Ø(Ô1ð
ñ 
ô 
ð *Øð ñ ô ð ð$ Ô&×*Ò*¨9°dÑ;Ô;ð Ùõ  & n×&:Ò&:Ñ&<Ô&<Ñ=Ô=ð ð ‘��eØ#×EÒEØØØØ”Mñ	 ô  �ð ×#Ò#Ý'Ø! :¨tÕ5HÔ5MÔ5Tñô ñô ð ð ×"Ò"ØÝÔ'Ø#-Ø!Ø#ðñ ô õ
 "&¥c¨,Ñ&7Ô&7Ñ!8Ô!8ð #ñ ô ð ð ð %ð Ø×"Ò"ØÝÔ6Ø'Ø.Cðñ ô õ
 ,Ø%Ø&Ø1Ý/Ô4Ô;ñ	ô õ ,Ø% z°4Õ9LÔ9QÔ9Xñô ð
"ð #ñ ô ð ð$$ð $ð $ð $ð $õ # >Ñ2Ô2ð	$ñ $ô $Ð ð !×'Ò'Ý#Ø˜z¨4Õ1DÔ1IÔ1Pñô ñô ð ð
 !ð ð �Ø×"Ò"ØÝÔ'Ø#-Ø#ðñ ô ð "6ð #ñ ô ð ð ð *ð ð �
Ø×"Ò"ØÝÔ,Ø#-Ø#-ðñ ô ð "6ð #ñ ô ð ð ð ð Ø×"Ò"ØÝÔ2Ø'Ø(7ðñ ô ð "6ð #ñ ô ð ð œÔ/ˆIØ˜:Ð&¨$Ô*=Ð=Ð=Ø9BØ˜zÐ)ô:ç’%‘'”'ðð Ñ5Ð% ~ð +/¬-Ô*>Ð?PÔ*QÐ'Ø=K×=QÒ=QÑ=SÔ=Sð ð Ñ9Ð*¨MØ×*Ò*Ø/Ô9Ý&Ô1Ø+>Ô+CØ%7Ø&3ðñ ô õ !4Ø$-Ø$.Ø$(Ý$7Ô$<Ô$Cñ	!"ô !"ð*ð +ñ ô ð ð ðùðuJ	ð J	r$   c                 ó\  — | j         | j        z
  }t          |¦  «        D �]\  }}| j        j        ||f         }|j                             d¦  «        sJ ‚t          ||dt          j        j	        ¦  «        g}|j
        D ]h}t          |t          ¦  «        rQd|v rM|                     dd¦  «        \  }}|                     t          ||dt          j        j        ¦  «        ¦  «         Œi|                      |t#          j        |j        g |j        |j
        |j        ¬¦  «        |¬¦  «         �ŒdS )zó
        Make CreateModel statements for proxy models. Use the same statements
        as that way there's less code duplication, but for proxy models it's
        safe to skip all the pointless field stuff and chuck out an operation.
        rw   Nr¼   r   r-  r  )r�   r~   rk   r;   r	   rƒ   r„   r   r&   r   r	  rX   r  r½   rn   r   r   r
   rò   rq   r.  )	r,   Úaddedr§   r)   r¨   rÊ   r  rA  rB  s	            r%   rŽ   z.MigrationAutodetector.generate_created_proxiesX  si  € ð Ô# dÔ&9Ñ9ˆÝ%+¨E¡]¤]ð !	ñ !	Ñ!ˆI�zØœ-Ô.¨y¸*Ð/DÔEˆKØÔ&×*Ò*¨7Ñ3Ô3Ð3Ð3Ð3õ $Ø˜z¨4Õ1DÔ1IÔ1Pñô ðˆLð $Ô)ð 
ð 
�Ý˜d¥CÑ(Ô(ð 	¨S°D¨[¨[Ø04·
²
¸3ÀÑ0BÔ0BÑ-�N IØ ×'Ò'Ý+Ø*Ø%Ø Ý/Ô4Ô;ñ	ô ñô ð øð ×ÒØÝÔ&Ø$Ô)ØØ'Ô/Ø%Ô+Ø(Ô1ðñ ô ð *ð ñ ô ð ñ ð-!	ð !	r$   c                 óÈ  — | j         | j        z  }| j        |z
  }| j        |z
  }t	          t          |¦  «        t          |¦  «        ¦  «        }|D �]�\  }}| j        j        ||f         }i }|j         	                    ¦   «         D ]8\  }	}
|
j
        r,|
j
        j        r|
||	<   t          |
j
        dd¦  «        r|
||	<   Œ9|j                             dd¦  «        }|r*|                      |t!          j        |d¬¦  «        ¦  «         t          |¦  «        D ],}|                      |t!          j        ||¬¦  «        ¦  «         Œ-g }| j        j        }|||f          	                    ¦   «         D ]‘\  \  }}}| 	                    ¦   «         D ]t\  }	}
|                     t+          |||	t*          j        j        ¦  «        ¦  «         |
j        s4|                     t+          |||	t*          j        j        ¦  «        ¦  «         ŒuŒ’t          |¦  «        D ]6}|                     t+          |||t*          j        j        ¦  «        ¦  «         Œ7| j                             ||j        f¦  «        }|r0|                     t+          g |¢t*          j        j        ‘R Ž ¦  «         |                      |t!          j        |j        ¬¦  «        t?          tA          |¦  «        ¦  «        ¬¦  «         �Œ’dS )a†  
        Find all deleted models (managed and unmanaged) and make delete
        operations for them as well as separate operations to delete any
        foreign key or M2M relationships (these are optimized later, if
        possible).

        Also bring forward removal of any model options that refer to
        collections of fields - the inverse of generate_created_models().
        rµ   Nr)  r6  ©r)   rq   ©rq   r  )!r€   r‚   r}   r   r   rk   r:   r	   ro   r\   rl   r8   r¶   rƒ   rm   r   r
   rû   rö   r  rn   r   r&   r   Úmany_to_manyr    r±   r„   ró   r÷   rq   rY   r|   )r,   Únew_keysÚdeleted_modelsÚdeleted_unmanaged_modelsÚall_deleted_modelsr§   r)   r¨   r,  r0   rr   r)  rq   rÊ   r  Úrelated_object_app_labelÚobject_nameÚrelation_related_fieldsÚthrough_users                      r%   r‹   z-MigrationAutodetector.generate_deleted_models‚  s—  € ð Ô&¨Ô)@Ñ@ˆØÔ,¨xÑ7ˆØ#'Ô#:¸XÑ#EÐ Ý"Ý�>Ñ"Ô"¥FÐ+CÑ$DÔ$Dñ
ô 
Ðð &8ð M	ñ M	Ñ!ˆI�zØœ/Ô0°¸JÐ1FÔGˆKàˆNØ%0Ô%7×%=Ò%=Ñ%?Ô%?ð ;ð ;Ñ!�
˜EØÔ%ð ;ØÔ)Ô/ð ;Ø5:˜ zÑ2Ý˜uÔ1°9¸dÑCÔCð ;Ø5:˜ zÑ2øà)Ô1×5Ò5Ð6GÈÑNÔNˆOØð Ø×"Ò"ØÝÔ2Ø'Ø(,ðñ ô ñô ð õ ˜~Ñ.Ô.ð ð �Ø×"Ò"ØÝÔ*Ø#-Ø!ðñ ô ñô ð ð ð ˆLØœÔ1ˆIð +4°I¸zÐ4IÔ*J×*PÒ*PÑ*RÔ*Rðð ñ 'ñ Ø(ØØ&Ø)@×)FÒ)FÑ)HÔ)Hð ð Ñ%�J Ø ×'Ò'Ý+Ø4Ø'Ø&Ý/Ô4Ô;ñ	ô ñô ð ð !Ô-ð Ø$×+Ò+Ý/Ø 8Ø +Ø *Ý 3Ô 8Ô >ñ	ô ñô ð øðõ& ˜~Ñ.Ô.ð ð �Ø×#Ò#Ý'Ø! :¨tÕ5HÔ5MÔ5Tñô ñô ð ð ð  Ô-×1Ò1°9¸kÔ>TÐ2UÑVÔVˆLØð Ø×#Ò#Ý'ÐW¨ÐWÕ7JÔ7OÔ7VÐWÐWÐWñô ð ð ×ÒØÝÔ&Ø$Ô)ðñ ô õ "¥# lÑ"3Ô"3Ñ4Ô4ð ñ ô ð ñ ðOM	ð M	r$   c                 ó
  — | j         | j        z
  }t          |¦  «        D ]c\  }}| j        j        ||f         }|j                             d¦  «        sJ ‚|                      |t          j	        |j
        ¬¦  «        ¦  «         ŒddS )z*Make DeleteModel options for proxy models.rw   rP  N)r~   r�   rk   r:   r	   rƒ   r„   r   r
   r÷   rq   )r,   Údeletedr§   r)   r¨   s        r%   r�   z.MigrationAutodetector.generate_deleted_proxiesá  s¢   € àÔ%¨Ô(;Ñ;ˆÝ%+¨G¡_¤_ð 	ð 	Ñ!ˆI�zØœ/Ô0°¸JÐ1FÔGˆKØÔ&×*Ò*¨7Ñ3Ô3Ð3Ð3Ð3Ø×ÒØÝÔ&Ø$Ô)ðñ ô ñô ð ð ð	ð 	r$   c                 ó†  — g | _         | j                             ¦   «         }t          | j        |z
  ¦  «        D �]\  }}}| j                             ||f|¦  «        }| j        j        ||f         }| j	        j        ||f         }| 
                    |¦  «        }|                      |¦  «        }	t          || j        z
  ¦  «        D �]x\  }
}}|
|k    �rj||k    �rc| 
                    |¦  «        }|                      |¦  «        }|j        rC|j        j        r7d|d         v r-|d         d         }|| j        v r| j        |         |d         d<   |                     |¦  «         |                     ¦   «         d         }||	k    s7|dd…         |	dd…         k    r¤t#          |d         |¬¦  «        |	d         k    rƒ| j                             ||||¦  «        rf| j                              |
||j        |||||f¦  «         |                     |
||f¦  «         |                     |||f¦  «         || j        |||f<    n�Œz�Œ	dS )zWork out renamed fields.rj   r   r   r   )Ú	db_columnN)Úrenamed_operationsr²   Úcopyrk   r³   r«   r„   r:   r	   r;   Ú	get_fieldrK   rl   r8   r  Úset_attributes_from_nameÚget_attname_columnr[   r<   Ú
ask_renamern   r]  r  r…   r{   )r,   r²   r§   r)   r0   r·   r¸   Únew_model_staterr   Ú	field_decr   r!  Úrem_field_nameÚ	old_fieldÚold_field_decÚ
old_rel_toÚold_db_columns                    r%   r’   z+MigrationAutodetector.create_renamed_fieldsî  sÏ  € à"$ˆÔØÔ,×1Ò1Ñ3Ô3ˆÝ17ØÔ .Ñ0ñ2
ô 2
ð 8	"ñ 8	"Ñ-ˆI�z :ð "Ô0×4Ò4Ø˜JÐ'¨ñô ˆNð #œoÔ4°YÀÐ5NÔOˆOØ"œmÔ2°9¸jÐ3HÔIˆOØ#×-Ò-¨jÑ9Ô9ˆEà×-Ò-¨eÑ4Ô4ˆIÝAGØ Ô!4Ñ4ñBô Bð -"ñ -"Ñ=�˜~¨~ð ! IÒ-Ñ-°.ÀJÒ2NÑ2NØ /× 9Ò 9¸.Ñ IÔ I�IØ$(×$9Ò$9¸)Ñ$DÔ$D�MàÔ*ðYà!Ô.Ô4ðYð ! M°!Ô$4Ð4Ð4à%2°1Ô%5°dÔ%;˜
Ø%¨Ô)@Ð@Ð@Ø59Ô5LÈZÔ5X˜M¨!Ô,¨TÑ2Ø×6Ò6°~ÑFÔFÐFØ$-×$@Ò$@Ñ$BÔ$BÀ1Ô$E�MØ$¨	Ò1Ð1ð & a¨ cÔ*¨i¸¸!¸¬nÒ<Ð<Ý  ¨qÔ!1¸]ÐKÑKÔKØ$ Qœ<ò(ð (ð  œ?×5Ò5Ø&¨¸
ÀEñô ð "ð !Ô3×:Ò:à$1Ø$2Ø$-Ô$7Ø$2Ø$-Ø$.Ø$)Ø$.ð	!"ñô ð ð +×1Ò1Ø!.°ÀÐ Oñô ð ð +×.Ò.°	¸:ÀzÐ/RÑSÔSÐSà .ð !Ô/°	¸:ÀzÐ0QÑRð "˜Eùùðq8	"ð 8	"r$   c           	      ó˜  — | j         D ]Á\  }}}}}}}}||j        k    rF|                     ¦   «         }	||	_        |                      |t          j        |||	¬¦  «        ¦  «         |                      |t          j        |||¬¦  «        ¦  «         | j         	                    |||f¦  «         | j         
                    |||f¦  «         ŒÂdS )z Generate RenameField operations.r/  )r)   r  r  N)r^  r]  Úclonerq   r   r
   rø   ÚRenameFieldr²   r  r…   )
r,   r   r!  Úrem_db_columnrf  r§   r)   rr   r0   Úaltered_fields
             r%   r—   z-MigrationAutodetector.generate_renamed_fields,  s  € ð Ô$ð!	Ið !	Iñ 	
ØØØØØØØØð
  ¤Ò/Ð/Ø %§¢¡¤�Ø%3�Ô"Ø×"Ò"ØÝÔ)Ø#-Ø+Ø+ðñ ô ñô ð ð ×ÒØÝÔ&Ø)Ø+Ø'ðñ ô ñô ð ð Ô×&Ò&¨°~À~Ð'VÑWÔWÐWØÔ×#Ò# Y°
¸JÐ$GÑHÔHÐHÐHðC!	Ið !	Ir$   c                 óz   — t          | j        | j        z
  ¦  «        D ]\  }}}|                      |||¦  «         ŒdS )zMake AddField operations.N)rk   r³   r²   Ú_generate_added_field©r,   r§   r)   r0   s       r%   r›   z+MigrationAutodetector.generate_added_fieldsQ  s[   € å17ØÔ $Ô"5Ñ5ñ2
ô 2
ð 	Jð 	JÑ-ˆI�z :ð ×&Ò& y°*¸jÑIÔIÐIÐIð	Jð 	Jr$   c           	      óª  — | j         j        ||f                              |¦  «        }t          |||t          j        j        ¦  «        g}|j        r<|j        j        r0|                     |  	                    |||| j         ¦  «        ¦  «         |j
        r(|                     |                      |¦  «        ¦  «         t          j        t          j        t          j        f}t          j        t          j        t          j        f}|j        pc|                     ¦   «         pO|                     ¦   «         p;|j        p4|j        o|j        p&t1          ||¦  «        o|j        pt1          ||¦  «        }|sl|                     ¦   «         }t1          ||¦  «        r(|j        r!| j                             ||¦  «        |_        n | j                             ||¦  «        |_        |j         rC|                     ¦   «         r/tC          |j        ¦  «        r| j         "                    ||¦  «         |  #                    |tI          j%        ||||¬¦  «        |¬¦  «         d S )N©r)   rq   rr   Úpreserve_defaultr  )&r;   r	   r`  r   r&   r   rl   r8   r  r  Ú	generatedÚ%_get_dependencies_for_generated_fieldÚ	DateFieldÚDateTimeFieldÚ	TimeFieldÚ	AutoFieldÚSmallAutoFieldÚBigAutoFieldÚnullÚhas_defaultÚhas_db_defaultrQ  ÚblankÚempty_strings_allowedrX   Úauto_nowrl  Úauto_now_addr<   Úask_auto_now_add_additionÚdefaultÚask_not_null_additionÚuniqueÚcallableÚ$ask_unique_callable_default_additionr   r
   rõ   )	r,   r§   r)   r0   rr   rÊ   Útime_fieldsÚauto_fieldsru  s	            r%   rq  z+MigrationAutodetector._generate_added_fieldX  sˆ  € Ø”Ô$ Y°
Ð%:Ô;×EÒEÀjÑQÔQˆõ  Ø˜: zÕ3FÔ3KÔ3Rñô ð
ˆð Ôð 	 %Ô"4Ô":ð 	Ø×ÒØ×6Ò6ØØØØ”Mñ	ô ñô ð ð Œ?ð 	SØ×Ò × JÒ JÈ5Ñ QÔ QÑRÔRÐRõ Ô'­Ô)=½vÔ?OÐPˆÝÔ'­Ô)>ÅÔ@SÐTˆàŒJð 0Ø× Ò Ñ"Ô"ð0à×#Ò#Ñ%Ô%ð0ð Ô!ð0ð ”Ð; Ô ;ð	0õ
 ˜5 +Ñ.Ô.ÐA°5´>ð0õ ˜5 +Ñ.Ô.ð 	ð  ð 		Ø—K’K‘M”MˆEÝ˜% Ñ-Ô-ð °%Ô2Dð Ø $¤× IÒ IØ 
ñ!ô !�”�ð !%¤× EÒ EØ 
ñ!ô !�”ð Œ<ð 	Y˜E×-Ò-Ñ/Ô/ð 	YµH¸U¼]Ñ4KÔ4Kð 	YØŒO×@Ò@ÀÈZÑXÔXÐXØ×ÒØÝÔØ%ØØØ!1ð	ñ ô ð &ð 	ñ 		
ô 		
ð 		
ð 		
ð 		
r$   c                 óz   — t          | j        | j        z
  ¦  «        D ]\  }}}|                      |||¦  «         ŒdS )zMake RemoveField operations.N)rk   r²   r³   Ú_generate_removed_fieldrr  s       r%   rš   z-MigrationAutodetector.generate_removed_fields�  s[   € å17ØÔ $Ô"5Ñ5ñ2
ô 2
ð 	Lð 	LÑ-ˆI�z :ð ×(Ò(¨°JÀ
ÑKÔKÐKÐKð	Lð 	Lr$   c                 óÞ   — |                       |t          j        ||¬¦  «        t          |||t          j        j        ¦  «        t          |||t          j        j        ¦  «        g¬¦  «         d S )NrO  r  )r   r
   rö   r   r&   r!   r"   rr  s       r%   rŽ  z-MigrationAutodetector._generate_removed_field—  sŽ   € Ø×ÒØÝÔ"Ø%Øðñ ô õ $ØØØÝ'Ô,Ô=ñ	ô õ $ØØØÝ'Ô,Ô?ñ	ô ðð 	ñ 	
ô 	
ð 	
ð 	
ð 	
r$   c           
      ó²  ‡ ‡‡— t          ‰ j        ‰ j        z  ¦  «        D �]µ\  }}}‰ j                             ||f|¦  «        }‰ j                             |||f|¦  «        }‰ j        j        ||f                              |¦  «        }‰ j	        j        ||f                              |¦  «        }g }t          |d¦  «        �rrt          |j        dd¦  «        �r[t          |j        j        ||¦  «        Š‰‰ j        v r|j        j        |j        _        t          |j        dd¦  «        }	|	r;‰|	fz   }
|
‰ j        v r,|j        j        |j        _        |j        j        |j        _        t          |dd¦  «        }|r‹||fŠt!          ˆˆ fd„|D ¦   «         ¦  «        |_        t!          ˆˆ fd„|j        D ¦   «         ¦  «        |_        t          |dd¦  «        x}r-t!          |¦  «        |_        t!          |j        ¦  «        |_        |                     ‰                      |||‰ j	        ¦  «        ¦  «         t          |d¦  «        rPt          |j        dd¦  «        r:t          |j        j        ||¦  «        Š‰‰ j        v r|j        j        |j        _        ‰                      |¦  «        }‰                      |¦  «        }||k    �r||k    �r|j        o|j        }|j         o|j         }|s|r¸d	}|j        r}|j        sv|                     ¦   «         sb|                     ¦   «         sN|j        sG|                     ¦   «         }‰ j                             ||¦  «        }|t          j        ur	||_        d
}n|}‰                       |tC          j"        ||||¬¦  «        |¬¦  «         �Œ‡‰  #                    |||¦  «         ‰  $                    |||¦  «         �Œ·dS )zp
        Make AlterField operations, or possibly RemovedField/AddField if alter
        isn't possible.
        rl   r8   Nr0   Úfrom_fieldsc                 óN   •— g | ]!}‰j                              ‰|fz   |¦  «        ‘Œ"S r#   ©r{   r„   )r6   Ú
from_fieldÚfrom_rename_keyr,   s     €€r%   rN   zAMigrationAutodetector.generate_altered_fields.<locals>.<listcomp>â  sJ   ø€ ð ð ð ð !+ð !Ô/×3Ò3Ø /°:°-Ñ ?Àñô ðð ð r$   c                 óN   •— g | ]!}‰j                              ‰|fz   |¦  «        ‘Œ"S r#   r“  )r6   Úto_fieldÚ
rename_keyr,   s     €€r%   rN   zAMigrationAutodetector.generate_altered_fields.<locals>.<listcomp>ê  sC   ø€ ð ð ð à (ð !Ô/×3Ò3°JÀ(ÀÑ4LÈhÑWÔWðð ð r$   rµ   TFrt  r  )%rk   r²   r³   r«   r„   r{   r:   r	   r`  r;   rc   r¶   rl   r   r8   r0   rZ   r‘  Ú	to_fieldsr  r  rµ   rK   rQ  r~  r  r€  rl  r<   Úask_not_null_alterationÚNOT_PROVIDEDr†  r   r
   rø   rŽ  rq  )r,   r§   r)   r0   r·   Úold_field_namerg  Ú	new_fieldrÊ   Úremote_field_nameÚto_field_rename_keyr‘  Úold_from_fieldsrh  Únew_field_decÚboth_m2mÚneither_m2mru  rr   Únew_defaultr•  r˜  s   `                   @@r%   rœ   z-MigrationAutodetector.generate_altered_fields±  sà  øøø€ õ
 28ØÔ $Ô"5Ñ5ñ2
ô 2
ð t	Rñ t	RÑ-ˆI�z :ð "Ô0×4Ò4Ø˜JÐ'¨ñô ˆNð "Ô0×4Ò4Ø˜J¨
Ð3°Zñô ˆNð œÔ.¨y¸.Ð/HÔI×SÒSØñô ˆIð œÔ,¨Y¸
Ð-BÔC×MÒMØñô ˆIð ˆLõ �y .Ñ1Ô1ñ 0µgØÔ&¨°ñ7ô 7ñ 0õ .ØÔ*Ô0°)¸Zñô �
ð  Ô!4Ð4Ð4Ø3<Ô3IÔ3O�IÔ*Ô0å$+¨IÔ,BÀLÐRVÑ$WÔ$WÐ!Ø$ð 	Ø*4Ð8IÐ7KÑ*KÐ'Ø*¨dÔ.AÐAÐAð 8AÔ7MÔ7S˜	Ô.Ô4à%Ô2Ô=ð "Ô.Ô9õ & i°ÀÑEÔE�Øð IØ'0°*Ð&=�OÝ,1ðð ð ð ð ð /:ð	ñ ô ñ-ô -�IÔ)õ +0ðð ð ð ð à,5Ô,?ðñ ô ñ+ô +�IÔ'õ +2°)¸]ÈDÑ*QÔ*QÐQ�ð IÝ05°oÑ0FÔ0F˜	Ô-Ý.3°IÔ4GÑ.HÔ.H˜	Ô+Ø×#Ò#Ø×:Ò:Ø!Ø"Ø!Øœñ	ô ñô ð õ �y .Ñ1Ô1ð TµgØÔ&¨	°4ñ7ô 7ð Tõ .ØÔ*Ô2°I¸zñô �
ð  Ô!4Ð4Ð4Ø5>Ô5KÔ5S�IÔ*Ô2Ø ×1Ò1°)Ñ<Ô<ˆMØ ×1Ò1°)Ñ<Ô<ˆMð  Ò-Ñ-°.ÀJÒ2NÑ2NØ$Ô1ÐL°iÔ6L�Ø"+Ô"8Ð8ÐWÀÔAWÐ=W�Øð  R˜{ð  Rà'+Ð$à!œð*à )¤ð*ð !*× 5Ò 5Ñ 7Ô 7ð*ð !*× 8Ò 8Ñ :Ô :ð	*ð
 !*Ô 6ð*ð !*§¢Ñ 1Ô 1˜Ø&*¤o×&MÒ&MØ&¨
ñ'ô '˜ð '­fÔ.AÐAÐAØ,7˜EœMØ/4Ð,øà )˜Ø×&Ò&Ø!Ý"Ô-Ø'1Ø!+Ø"'Ø-=ð	ñ ô ð &2ð 'ñ 	ô 	ð 	ñ 	ð ×0Ò0°¸JÈ
ÑSÔSÐSØ×.Ò.¨y¸*ÀjÑQÔQÐQùðit	Rð t	Rr$   c                 óÔ  ‡‡‡‡— t           j        j        }t          t          ¦  «        | _        t          | j        ¦  «        D �]£\  }}| j         	                    ||f|¦  «        }| j
        j        ||f         }| j        j        ||f         }|j        |         Š|j        |         Šˆfd„‰D ¦   «         }ˆfd„‰D ¦   «         }g }	g Šg Š|D ]³}
|
                     ¦   «         }|d                              d¦  «        }|D ]}|                     ¦   «         }|d                              d¦  «        }||k    rH||k    rB|	                     ||d f¦  «         ‰                     |
¦  «         ‰                     |¦  «         Œ€Œ´|                      t           j        j        ¦  «        D �]\  }}}}}||k    s||k    rŒ|                     |¦  «        }|D ]Ô}g }|D ]^}
|
                     ¦   «         \  }}}|sB|
j        t	          |¦  «        k    r*t+          |¦  «        ddhk    r|                     |
¦  «         Œ_t-          |¦  «        dk    r\|d         }‰                     |¦  «         |	                     d |j        |f¦  «         | j        ||f                              |¦  «         ŒÕ�Œˆfd„|D ¦   «         }ˆfd	„|D ¦   «         }| j                             ||f|||	d
œi¦  «         �Œ¥d S )Nc                 ó   •— g | ]}|‰v¯|‘Œ	S r#   r#   )r6   ÚidxÚold_indexess     €r%   rN   z@MigrationAutodetector.create_altered_indexes.<locals>.<listcomp>9  s#   ø€ ÐRÐRÐR S¸3ÀkÐ;QÐ;Q˜SÐ;QÐ;QÐ;Qr$   c                 ó   •— g | ]}|‰v¯|‘Œ	S r#   r#   )r6   r§  Únew_indexess     €r%   rN   z@MigrationAutodetector.create_altered_indexes.<locals>.<listcomp>:  s#   ø€ ÐTÐTÐT s¸SÈÐ=SÐ=S˜sÐ=SÐ=SÐ=Sr$   r   rq   ro   r   r   c                 ó   •— g | ]}|‰v¯|‘Œ	S r#   r#   )r6   r§  Úremove_from_addeds     €r%   rN   z@MigrationAutodetector.create_altered_indexes.<locals>.<listcomp>t  s+   ø€ ð ð ð Ø°Ð;LÐ0LÐ0L�Ð0LÐ0LÐ0Lr$   c                 ó   •— g | ]}|‰v¯|‘Œ	S r#   r#   )r6   r§  Úremove_from_removeds     €r%   rN   z@MigrationAutodetector.create_altered_indexes.<locals>.<listcomp>w  s+   ø€ ð ð ð Ø°#Ð=PÐ2PÐ2P�Ð2PÐ2PÐ2Pr$   )Úadded_indexesÚremoved_indexesÚrenamed_indexes)r
   r;  Úoption_namer   rY   Úrenamed_index_together_valuesrk   r®   r«   r„   r:   r	   r;   rƒ   rU   rm   rn   Ú$_get_altered_foo_together_operationsrü   r9  ro   r|   rÅ   rq   ry   rÑ   ) r,   r²  r§   r)   r·   r¸   rd  r¯  r°  r±  Ú	new_indexÚnew_index_decÚnew_index_nameÚ	old_indexÚold_index_decÚold_index_nameÚ	old_valueÚ	new_valueÚindex_together_app_labelÚindex_together_model_namerÊ   Úremoved_valuesÚremoved_index_togetherÚrenamed_index_together_indexesÚ_r`   rh   Úrenamed_indexrª  r¨  r¬  r®  s                                @@@@r%   r“   z,MigrationAutodetector.create_altered_indexes,  sØ  øøøø€ Ý Ô)Ô5ˆÝ-8½Ñ->Ô->ˆÔ*å%+¨DÔ,@Ñ%AÔ%Að S	ñ S	Ñ!ˆI�zØ!Ô0×4Ò4Ø˜JÐ'¨ñô ˆNð #œoÔ4°YÀÐ5NÔOˆOØ"œmÔ2°9¸jÐ3HÔIˆOà)Ô1°+Ô>ˆKØ)Ô1°+Ô>ˆKØRÐRÐRÐR¨KÐRÑRÔRˆMØTÐTÐTÐT¨kÐTÑTÔTˆOØ ˆOà "ÐØ"$ÐØ*ð >ð >�	Ø )× 5Ò 5Ñ 7Ô 7�Ø!.¨qÔ!1×!5Ò!5°fÑ!=Ô!=�Ø!0ð 
>ð 
>�IØ$-×$9Ò$9Ñ$;Ô$;�MØ%2°1Ô%5×%9Ò%9¸&Ñ%AÔ%A�Nð &¨Ò6Ð6Ø*¨nÒ<Ð<à'×.Ò.°ÀÐPTÐ/UÑVÔVÐVØ)×0Ò0°Ñ;Ô;Ð;Ø+×2Ò2°9Ñ=Ô=Ð=øð
>ð$ ×:Ò:ÝÔ-Ô9ñô ð#9ñ #9ñ ØØØ(Ø)Øð
 Ð!9Ò9Ð9Ø!Ð%>Ò>Ð>àØ!*×!5Ò!5°iÑ!@Ô!@�Ø.<ð 9ð 9Ð*Ø57Ð2Ø%2ð Mð M˜	Ø*3×*?Ò*?Ñ*AÔ*A™˜˜4 ð !%ðMà )Ô 0µDÐ9OÑ4PÔ4PÒ PÐ PÝ # F¡¤°¸Ð/AÒ AÐ Aà:×AÒAÀ)ÑLÔLÐLøåÐ9Ñ:Ô:¸aÒ?Ð?Ø(FÀqÔ(I˜Ø)×0Ò0°Ñ?Ô?Ð?Ø'×.Ò.Ø! =Ô#5Ð7MÐNñô ð ð Ô:Ø4Ð6OÐOôç š&Ð!7Ñ8Ô8Ð8øñ)9ð.ð ð ð Ø,ðñ ô ˆMðð ð ð Ø.ðñ ô ˆOð Ô ×'Ò'à 
Ð+Ø)6Ø+:Ø+:ð.ð .ðñô ð ñ ðWS	ð S	r$   c           	      óä   — | j                              ¦   «         D ]U\  \  }}}|                      ||¦  «        }|d         D ].}|                      |t	          j        ||¬¦  «        |¬¦  «         Œ/ŒVd S )Nr¯  r2  r  )ry   r\   Ú_get_dependencies_for_modelr   r
   r;  )r,   r§   r)   Úalt_indexesrÊ   r3  s         r%   rŸ   z,MigrationAutodetector.generate_added_indexes…  s§   € Ø48Ô4H×4NÒ4NÑ4PÔ4Pð 
	ð 
	Ñ0Ñ#ˆY˜
 [Ø×;Ò;¸IÀzÑRÔRˆLØ$ _Ô5ð ð �Ø×"Ò"ØÝÔ'Ø#-Ø#ðñ ô ð ".ð #ñ ô ð ð ðð
	ð 
	r$   c           	      ó¾   — | j                              ¦   «         D ]B\  \  }}}|d         D ]1}|                      |t          j        ||j        ¬¦  «        ¦  «         Œ2ŒCd S )Nr°  rO  )ry   r\   r   r
   ÚRemoveIndexrq   )r,   r§   r)   rÆ  r3  s        r%   r–   z.MigrationAutodetector.generate_removed_indexes’  s‹   € Ø48Ô4H×4NÒ4NÑ4PÔ4Pð 	ð 	Ñ0Ñ#ˆY˜
 [Ø$Ð%6Ô7ð ð �Ø×"Ò"ØÝÔ*Ø#-Ø"œZðñ ô ñô ð ð ðð	ð 	r$   c                 óÀ   — | j                              ¦   «         D ]C\  \  }}}|d         D ]2\  }}}|                      |t          j        ||||¬¦  «        ¦  «         Œ3ŒDd S )Nr±  )r)   r  r  Ú
old_fields)ry   r\   r   r
   ÚRenameIndex)r,   r§   r)   rÆ  rº  r·  rÊ  s          r%   r˜   z.MigrationAutodetector.generate_renamed_indexes�  sš   € Ø48Ô4H×4NÒ4NÑ4PÔ4Pð 	ð 	Ñ0Ñ#ˆY˜
 [Ø>IØ!ô?ð ð Ñ:� °
ð ×"Ò"ØÝÔ*Ø#-Ø!/Ø!/Ø#-ð	ñ ô ñô ð ð ðð	ð 	r$   c                 óú   — |                      ¦   «         \  }}}|                      ¦   «         \  }}}|j        D ]}	|                     |	d ¦  «         Œ|j        D ]}	|                     |	d ¦  «         Œ|||f|||fk    S r(   )rU   Únon_db_attrsrm   )
r,   Úold_constraintÚnew_constraintÚold_pathÚold_argsÚ
old_kwargsÚnew_pathÚnew_argsÚ
new_kwargsÚattrs
             r%   Ú+_constraint_should_be_dropped_and_recreatedzAMigrationAutodetector._constraint_should_be_dropped_and_recreated¬  sŸ   € ð *8×)CÒ)CÑ)EÔ)EÑ&ˆ�(˜JØ)7×)CÒ)CÑ)EÔ)EÑ&ˆ�(˜Jà"Ô/ð 	'ð 	'ˆDØ�NŠN˜4 Ñ&Ô&Ð&Ð&Ø"Ô/ð 	'ð 	'ˆDØ�NŠN˜4 Ñ&Ô&Ð&Ð&à˜( JÐ/°H¸hÈ
Ð3SÒSÐSr$   c                 óÆ  ‡‡‡— t           j        j        }t          | j        ¦  «        D �]6\  }}| j                             ||f|¦  «        }| j        j        ||f         }| j	        j        ||f         }|j
        |         Š|j
        |         Šg }g Š‰D ]Š}‰D ]…}	|                     ¦   «         }
|	                     ¦   «         }|
|k    rU|j        |	j        k    rE|                      ||	¦  «        s/|                     |	¦  «         ‰                     |	j        ¦  «         Œ†Œ‹ˆˆfd„‰D ¦   «         }ˆˆfd„‰D ¦   «         }| j                             ||f|||dœi¦  «         �Œ8d S )Nc                 ó.   •— g | ]}|‰v¯|j         ‰v¯|‘ŒS r#   rP  )r6   ÚcÚalt_constraints_nameÚold_constraintss     €€r%   rN   zDMigrationAutodetector.create_altered_constraints.<locals>.<listcomp>Ö  ó;   ø€ ð ð ð àØ˜OÐ+Ð+°´Ð>RÐ0RÐ0Rð à0RÐ0RÐ0Rr$   c                 ó.   •— g | ]}|‰v¯|j         ‰v¯|‘ŒS r#   rP  )r6   rÚ  rÛ  Únew_constraintss     €€r%   rN   zDMigrationAutodetector.create_altered_constraints.<locals>.<listcomp>Û  rÝ  r$   )Úadded_constraintsÚremoved_constraintsrz   )r
   r<  r²  rk   r®   r«   r„   r:   r	   r;   rƒ   rU   rq   r×  rn   rz   rÑ   )r,   r²  r§   r)   r·   r¸   rd  Úalt_constraintsÚold_cÚnew_cÚ	old_c_decÚ	new_c_decÚadd_constraintsÚrem_constraintsrÛ  rß  rÜ  s                 @@@r%   r”   z0MigrationAutodetector.create_altered_constraints¹  sõ  øøø€ Ý Ô.Ô:ˆÝ%+¨DÔ,@Ñ%AÔ%Að .	ñ .	Ñ!ˆI�zØ!Ô0×4Ò4Ø˜JÐ'¨ñô ˆNð #œoÔ4°YÀÐ5NÔOˆOØ"œmÔ2°9¸jÐ3HÔIˆOà-Ô5°kÔBˆOØ-Ô5°kÔBˆOà ˆOØ#%Ð à(ð @ð @�Ø,ð @ð @�EØ %× 1Ò 1Ñ 3Ô 3�IØ %× 1Ò 1Ñ 3Ô 3�Ià! YÒ.Ð.Ø!œJ¨%¬*Ò4Ð4Ø $× PÒ PØ! 5ñ!ô !ð 5ð
 (×.Ò.¨uÑ5Ô5Ð5Ø,×3Ò3°E´JÑ?Ô?Ð?øð@ðð ð ð ð à(ðñ ô ˆOð
ð ð ð ð à(ðñ ô ˆOð Ô$×+Ò+à 
Ð+Ø-<Ø/>Ø/>ð.ð .ðñô ð ñ ðM.	ð .	r$   c           	      óä   — | j                              ¦   «         D ]U\  \  }}}|                      ||¦  «        }|d         D ].}|                      |t	          j        ||¬¦  «        |¬¦  «         Œ/ŒVd S )Nrà  r4  r  )rz   r\   rÅ  r   r
   r<  ©r,   r§   r)   râ  rÊ   r5  s         r%   r    z0MigrationAutodetector.generate_added_constraintsë  s±   € ð #Ô6×<Ò<Ñ>Ô>ð	ð 	ñ ñ 
ØØØØ×;Ò;¸IÀzÑRÔRˆLØ-Ð.AÔBð ð �
Ø×"Ò"ØÝÔ,Ø#-Ø#-ðñ ô ð ".ð #ñ ô ð ð ðð	ð 	r$   c           	      ó¾   — | j                              ¦   «         D ]B\  \  }}}|d         D ]1}|                      |t          j        ||j        ¬¦  «        ¦  «         Œ2ŒCd S )Nrá  rO  )rz   r\   r   r
   ÚRemoveConstraintrq   )r,   r§   r)   râ  r5  s        r%   r•   z2MigrationAutodetector.generate_removed_constraintsû  s”   € ð #Ô6×<Ò<Ñ>Ô>ð	ð 	ñ ñ 
ØØØØ-Ð.CÔDð ð �
Ø×"Ò"ØÝÔ/Ø#-Ø'œ_ðñ ô ñô ð ð ðð		ð 	r$   c           
      óð   — | j                              ¦   «         D ][\  \  }}}|                      ||¦  «        }|d         D ]4}|                      |t	          j        ||j        |¬¦  «        |¬¦  «         Œ5Œ\d S )Nrz   )r)   rq   r5  r  )rz   r\   rÅ  r   r
   ÚAlterConstraintrq   rê  s         r%   r¡   z2MigrationAutodetector.generate_altered_constraints	  s¶   € ð #Ô6×<Ò<Ñ>Ô>ð	ð 	ñ ñ 
ØØØØ×;Ò;¸IÀzÑRÔRˆLØ-Ð.CÔDð 	ð 	�
Ø×"Ò"ØÝÔ.Ø#-Ø'œ_Ø#-ðñ ô ð
 ".ð #ñ ô ð ð ð	ð	ð 	r$   c                 ó€  ‡— d }t          ‰j        d¦  «        r‰j        j        }nb|j        | |f         }|                     ¦   «         D ]>\  \  }}}t          ˆfd„|                     ¦   «         D ¦   «         ¦  «        r	|› d|› �} nŒ?t          ‰dd ¦  «        }	|	�d}
|	}nt          || |¦  «        \  }
}t          |
|d t          j
        j        ¦  «        g}t          ‰j        dd ¦  «        rRt          ‰j        j        | |¦  «        \  }}|                     t          ||d t          j
        j        ¦  «        ¦  «         |S )Nr8   c              3   ó.   •K  — | ]}‰|j         k    V — Œd S r(   )rl   )r6   rK  rr   s     €r%   rP   zJMigrationAutodetector._get_dependencies_for_foreign_key.<locals>.<genexpr>"  s?   øè è € ð ð à%ð ˜]Ô7Ò7ðð ð ð ð ð r$   r¼   Úswappable_settingr»   rµ   )rc   rl   r8   r  r\   rô   rÍ   r¶   r   r   r&   r   rµ   rn   )r§   r)   rr   Úproject_stateÚremote_field_modelr  Úremote_app_labelÚremote_model_namero   rñ  Údep_app_labelÚdep_object_namerÊ   Úthrough_app_labelÚthrough_object_names     `            r%   r  z7MigrationAutodetector._get_dependencies_for_foreign_key  s®  ø€ à!ÐÝ�5Ô% wÑ/Ô/ð 
	Ø!&Ô!3Ô!9ÐÐà%Ô/°	¸:Ð0EÔFˆIØAJÇÂÑARÔARð ð Ñ=Ñ5Ð!Ð#4°vÝð ð ð ð à)/¯ª©¬ðñ ô ñ ô ð ð -=Ð)RÐ)RÐ?PÐ)RÐ)RÐ&Ø�Eðõ $ EÐ+>ÀÑEÔEÐØÐ(Ø)ˆMØ/ˆOˆOå-=Ø"ØØñ.ô .Ñ*ˆM˜?õ  Ø˜°Õ6IÔ6NÔ6Uñô ð
ˆõ
 �5Ô% y°$Ñ7Ô7ð 	Ý5EØÔ"Ô*ØØñ6ô 6Ñ2ÐÐ2ð
 ×ÒÝ#Ø%Ø'ØÝ'Ô,Ô3ñ	ô ñô ð ð Ðr$   c           	      óˆ  — g }t          j        |j        ¦  «        j        }t	          | j        | j        z
  ¦  «        }|D ]‚\  }}}| j        j         ||f                              |¦  «        }|j	        r|j	        j
        s	|j        |v r9|                     t          |||j        t          j        j        ¦  «        ¦  «         Œƒ|S r(   )r	   ÚQÚ
expressionÚreferenced_base_fieldsrk   r³   r²   r;   r`  rl   r8   rq   rn   r   r&   r   )	r,   rr   rÊ   rý  Únewly_added_fieldsr§   r)   Úadded_field_nameÚadded_fields	            r%   rw  z;MigrationAutodetector._get_dependencies_for_generated_fieldH  sá   € ØˆÝ!'¤¨%Ô*:Ñ!;Ô!;Ô!RÐÝ# DÔ$7¸$Ô:MÑ$MÑNÔNÐØ7Ið 	ð 	Ñ3ˆI�zÐ#3Øœ-Ô.¨y¸*Ð/DÔE×OÒOØ ñô ˆKð Ô(ð
Ø-8Ô-EÔ-Kð
àÔ!Ð%;Ð;Ð;Ø×#Ò#Ý'Ø!Ø"Ø#Ô(Ý+Ô0Ô7ñ	ô ñô ð øð Ðr$   c           	      óØ   — g }| j         j        ||f         }|j                             ¦   «         D ]9}|j        r0|                     |                      |||| j         ¦  «        ¦  «         Œ:|S )z3Return foreign key dependencies of the given model.)r;   r	   ro   rÍ   r  r  r  )r,   r§   r)   rÊ   r¨   rr   s         r%   rÅ  z1MigrationAutodetector._get_dependencies_for_model]  s†   € àˆØ”mÔ*¨9°jÐ+@ÔAˆØ Ô'×.Ò.Ñ0Ô0ð 		ð 		ˆEØÔ ð Ø×#Ò#Ø×:Ò:Ø!Ø"ØØœñ	ô ñô ð øð Ðr$   c              #   óž  ‡ ‡‡K  — t          ‰ j        ¦  «        D �]1\  ŠŠ‰ j                             ‰‰f‰¦  «        }‰ j        j        ‰|f         }‰ j        j        ‰‰f         }|j                             |¦  «        }|rˆˆˆ fd„|D ¦   «         nt          ¦   «         }|j                             |¦  «        }|rt          |¦  «        nt          ¦   «         }||k    rmg }|D ]_}|D ]Z}	| 	                    |	¦  «        }
|
j
        r<|
j
        j        r0|                     ‰                      ‰‰|
‰ j        ¦  «        ¦  «         Œ[Œ`||‰‰|fV — �Œ3d S )Nc                 óJ   •— h | ]}t          ˆˆˆfd „|D ¦   «         ¦  «        ’Œ S )c              3   óT   •K  — | ]"}‰j                              ‰‰|f|¦  «        V — Œ#d S r(   r“  )r6   Únr§   r)   r,   s     €€€r%   rP   zWMigrationAutodetector._get_altered_foo_together_operations.<locals>.<setcomp>.<genexpr>y  sQ   øè è € ð ð àð Ô+×/Ò/°¸JÈÐ0JÈAÑNÔNðð ð ð ð ð r$   )rZ   )r6   rˆ  r§   r)   r,   s     €€€r%   r9   zMMigrationAutodetector._get_altered_foo_together_operations.<locals>.<setcomp>x  se   ø€ ð ð ð ð
 õ	 ð ð ð ð ð ð à!'ðñ ô ñ ô ðð ð r$   )rk   r®   r«   r„   r:   r	   r;   rƒ   r|   r`  rl   r8   r  r  )r,   r²  r·   r¸   rd  r»  r¼  rÊ   Úfoo_togethersr0   rr   r§   r)   s   `          @@r%   r´  z:MigrationAutodetector._get_altered_foo_together_operationsm  sÔ  øøøè è € Ý%+¨DÔ,@Ñ%AÔ%Að ,	ñ ,	Ñ!ˆI�zØ!Ô0×4Ò4Ø˜JÐ'¨ñô ˆNð #œoÔ4°YÀÐ5NÔOˆOØ"œmÔ2°9¸jÐ3HÔIˆOð (Ô/×3Ò3°KÑ@Ô@ˆIð ðð ð ð ð ð ð ð
 #,ðñ ô ð õ ‘U”Uð ð (Ô/×3Ò3°KÑ@Ô@ˆIØ*3Ð>�˜I™œ˜½¹¼ˆIà˜IÒ%Ð%Ø!�Ø%.ð ð �MØ&3ð 
ð 
˜
Ø /× 9Ò 9¸*Ñ EÔ E˜Ø Ô-ð °%Ô2DÔ2Jð Ø(×/Ò/Ø $× FÒ FØ$-Ø$.Ø$)Ø$(¤Mñ	!"ô !"ñô ð øð
ð ØØØØ ðð ð ð ùðM,	ð ,	r$   c           
      ó  ‡ ‡‡— ‰                       |j        ¦  «        D ]h\  }}ŠŠ}|t          j        k    rˆˆˆ fd„|D ¦   «         }|                     |¦  «        }|s|r'‰                      ‰ |dd‰i|j        |i¤Ž|¬¦  «         Œid S )Nc                 ó6   •— h | ]}|‰j         ‰‰f         v¯|’ŒS r#   )r³  )r6   rM   r§   r)   r,   s     €€€r%   r9   zOMigrationAutodetector._generate_removed_altered_foo_together.<locals>.<setcomp>¥  sK   ø€ ð ð ð àØØÔ=¸iÈÐ>SÔTðUð Uð ðUð Uð Ur$   rq   r  r#   )r´  r²  r
   rü   r:  r   )r,   rØ   r»  r¼  rÊ   Úremoval_valuer§   r)   s   `     @@r%   Ú&_generate_removed_altered_foo_togetherz<MigrationAutodetector._generate_removed_altered_foo_togetherœ  sù   øøø€ ð ×6Ò6°yÔ7LÑMÔMð	ð 	ñ 
ØØØØØà�JÔ9Ò9Ð9ðð ð ð ð ð à!*ðñ ô �	ð &×2Ò2°9Ñ=Ô=ˆMØð  	ð Ø×"Ò"ØØ�Ið ð Ø'ðØ,5Ô,AÀ=Ð+Qðð ð ".ð #ñ ô ð øð!	ð 	r$   c                 óD   — |                       t          j        ¦  «         d S r(   )r
  r
   rû   r+   s    r%   r™   z>MigrationAutodetector.generate_removed_altered_unique_togetherµ  s   € Ø×3Ò3µJÔ4RÑSÔSÐSÐSÐSr$   c           
      óÐ   — |                       |j        ¦  «        D ]J\  }}}}}|                     |¦  «        }||k    r'|                      | |dd|i|j        |i¤Ž|¬¦  «         ŒKd S )Nrq   r  r#   )r´  r²  r:  r   )r,   rØ   r»  r¼  r§   r)   rÊ   r	  s           r%   Ú_generate_altered_foo_togetherz4MigrationAutodetector._generate_altered_foo_together¸  s¢   € ð ×6Ò6°yÔ7LÑMÔMð	ð 	ñ 
ØØØØØà%×2Ò2°9Ñ=Ô=ˆMØ˜MÒ)Ð)Ø×"Ò"ØØ�IÐTÐT :ÐT°)Ô2GÈÐ1SÐTÐTØ!-ð #ñ ô ð øð	ð 	r$   c                 óD   — |                       t          j        ¦  «         d S r(   )r  r
   rû   r+   s    r%   rž   z6MigrationAutodetector.generate_altered_unique_togetherÈ  s   € Ø×+Ò+­JÔ,JÑKÔKÐKÐKÐKr$   c                 óÌ  — | j                              | j        | j        ¦  «        }t	          |¦  «        D ]®\  }}| j                             ||f|¦  «        }| j        j        ||f         }| j	        j        ||f         }|j
                             d¦  «        }|j
                             d¦  «        }||k    r*|                      |t          j        ||¬¦  «        ¦  «         Œ¯d S )NÚdb_table)rq   Útable)r®   Úunionr¯   r°   rk   r«   r„   r:   r	   r;   rƒ   r   r
   ÚAlterModelTable)	r,   Úmodels_to_checkr§   r)   r·   r¸   rd  Úold_db_table_nameÚnew_db_table_names	            r%   r¢   z/MigrationAutodetector.generate_altered_db_tableË  s
  € ØÔ.×4Ò4ØÔ  $Ô":ñ
ô 
ˆõ &,¨OÑ%<Ô%<ð 	ð 	Ñ!ˆI�zØ!Ô0×4Ò4Ø˜JÐ'¨ñô ˆNð #œoÔ4°YÀÐ5NÔOˆOØ"œmÔ2°9¸jÐ3HÔIˆOØ /Ô 7× ;Ò ;¸JÑ GÔ GÐØ /Ô 7× ;Ò ;¸JÑ GÔ GÐØ Ð$5Ò5Ð5Ø×"Ò"ØÝÔ.Ø'Ø/ðñ ô ñô ð øð	ð 	r$   c                 óÌ  — | j                              | j        | j        ¦  «        }t	          |¦  «        D ]®\  }}| j                             ||f|¦  «        }| j        j        ||f         }| j	        j        ||f         }|j
                             d¦  «        }|j
                             d¦  «        }||k    r*|                      |t          j        ||¬¦  «        ¦  «         Œ¯d S )NÚdb_table_comment)rq   Útable_comment)r®   r  r¯   r°   rk   r«   r„   r:   r	   r;   rƒ   r   r
   ÚAlterModelTableComment)	r,   r  r§   r)   r·   r¸   rd  Úold_db_table_commentÚnew_db_table_comments	            r%   r‘   z7MigrationAutodetector.generate_altered_db_table_commentà  s  € ØÔ.×4Ò4ØÔ  $Ô":ñ
ô 
ˆõ &,¨OÑ%<Ô%<ð 	ð 	Ñ!ˆI�zØ!Ô0×4Ò4Ø˜JÐ'¨ñô ˆNð #œoÔ4°YÀÐ5NÔOˆOØ"œmÔ2°9¸jÐ3HÔIˆOà#2Ô#:×#>Ò#>Ð?QÑ#RÔ#RÐ Ø#2Ô#:×#>Ò#>Ð?QÑ#RÔ#RÐ Ø#Ð';Ò;Ð;Ø×"Ò"ØÝÔ5Ø'Ø&:ðñ ô ñô ð øð	ð 	r$   c                 ó(  — | j                              | j        | j        | j        | j        z  | j        | j        z  ¦  «        }t          |¦  «        D ]À\  }}| j	         
                    ||f|¦  «        }| j        j        ||f         }| j        j        ||f         }d„ |j                             ¦   «         D ¦   «         }d„ |j                             ¦   «         D ¦   «         }||k    r*|                      |t#          j        ||¬¦  «        ¦  «         ŒÁdS )zÄ
        Work out if any non-schema-affecting options have changed and make an
        operation to represent them in state changes (in case Python code in
        migrations needs them).
        c                 ó6   — i | ]\  }}|t           j        v ¯||“ŒS r#   ©r   ÚALTER_OPTION_KEYS©r6   rS   rM   s      r%   rT   zBMigrationAutodetector.generate_altered_options.<locals>.<dictcomp>  ó7   € ð ð ð á�C˜ØÕ+Ô=Ð=Ð=ð �Uà=Ð=Ð=r$   c                 ó6   — i | ]\  }}|t           j        v ¯||“ŒS r#   r  r!  s      r%   rT   zBMigrationAutodetector.generate_altered_options.<locals>.<dictcomp>  r"  r$   )rq   rƒ   N)r®   r  r¯   r°   r   r€   r}   r‚   rk   r«   r„   r:   r	   r;   rƒ   r\   r   r
   r   )	r,   r  r§   r)   r·   r¸   rd  Úold_optionsÚnew_optionss	            r%   r�   z.MigrationAutodetector.generate_altered_optionsö  sV  € ð Ô.×4Ò4ØÔ ØÔ$àÔ# dÔ&9Ñ9àÔ $Ô"9Ñ9ñ
ô 
ˆõ &,¨OÑ%<Ô%<ð 	ð 	Ñ!ˆI�zØ!Ô0×4Ò4Ø˜JÐ'¨ñô ˆNð #œoÔ4°YÀÐ5NÔOˆOØ"œmÔ2°9¸jÐ3HÔIˆOðð à"1Ô"9×"?Ò"?Ñ"AÔ"Aðñ ô ˆKð
ð à"1Ô"9×"?Ò"?Ñ"AÔ"Aðñ ô ˆKð
 ˜kÒ)Ð)Ø×"Ò"ØÝÔ0Ø'Ø +ðñ ô ñô ð øð#	ð 	r$   c           
      ór  — t          | j        ¦  «        D �] \  }}| j                             ||f|¦  «        }| j        j        ||f         }| j        j        ||f         }|j                             d¦  «        |j                             d¦  «        k    rŸg }|j                             d¦  «        r?|                     t          |||j        d         t          j
        j        ¦  «        ¦  «         |                      |t          j        ||j                             d¦  «        ¬¦  «        |¬¦  «         �Œ"d S )Nrú   r0  r  )rk   r®   r«   r„   r:   r	   r;   rƒ   rn   r   r&   r   r   r
   rù   )r,   r§   r)   r·   r¸   rd  rÊ   s          r%   r�   z<MigrationAutodetector.generate_altered_order_with_respect_to  sk  € Ý%+¨DÔ,@Ñ%AÔ%Að 	ñ 	Ñ!ˆI�zØ!Ô0×4Ò4Ø˜JÐ'¨ñô ˆNð #œoÔ4°YÀÐ5NÔOˆOØ"œmÔ2°9¸jÐ3HÔIˆOØÔ&×*Ò*Ø'ñô à Ô(×,Ò,Ð-DÑEÔEòFð Fð
  "�Ø"Ô*×.Ò.Ð/FÑGÔGð Ø ×'Ò'Ý+Ø%Ø&Ø+Ô3Ð4KÔLÝ/Ô4Ô;ñ	ô ñô ð ð ×"Ò"ØÝÔ6Ø'Ø.=Ô.E×.IÒ.IØ3ñ/ô /ðñ ô ð ".ð #ñ 	ô 	ð 	ùð-	ð 	r$   c                 óB  — t          | j        ¦  «        D ]‰\  }}| j                             ||f|¦  «        }| j        j        ||f         }| j        j        ||f         }|j        |j        k    r/|                      |t          j
        ||j        ¬¦  «        ¦  «         ŒŠd S )N)rq   r.  )rk   r®   r«   r„   r:   r	   r;   r.  r   r
   ÚAlterModelManagers)r,   r§   r)   r·   r¸   rd  s         r%   r�   z/MigrationAutodetector.generate_altered_managers@  sÂ   € Ý%+¨DÔ,@Ñ%AÔ%Að 	ð 	Ñ!ˆI�zØ!Ô0×4Ò4Ø˜JÐ'¨ñô ˆNð #œoÔ4°YÀÐ5NÔOˆOØ"œmÔ2°9¸jÐ3HÔIˆOØÔ'¨?Ô+CÒCÐCØ×"Ò"ØÝÔ1Ø'Ø!0Ô!9ðñ ô ñô ð øð	ð 	r$   c                 ót  ‡— |                      ¦   «         }i Št          |                     ¦   «         ¦  «        D �]I\  }}|sŒ	d}|D ]}|d         |k    r|} nŒ|€1| j                             |¦  «        s|D ]}	|df‰||	j        f<   Œ||= ŒS|€d}
n |                      |d         ¦  «        pddz   }
t          |¦  «        D ]Á\  }}	|dk    r|r|	j         	                    |¦  «         d|
z  g}|r| 	                    |¦  «         nM|dk    r|s| 	                    d¦  «         n/| 	                    |	 
                    ¦   «         dd…         ¦  «         d                     |¦  «        }||f‰||	j        f<   |
dz  }
||	_        ŒÂ�ŒK|                     ¦   «         D ]}|D ]}	ˆfd	„|	j        D ¦   «         |	_        ŒŒ |S )
zÁ
        Take a result from changes() and a MigrationGraph, and fix the names
        and dependencies of the changes so they extend the graph from the leaf
        nodes for each app.
        Nr   rÉ   r   z%04irÒ   éd   rÂ  c                 ó<   •— g | ]}‰                      ||¦  «        ‘ŒS r#   ©r„   )r6   r+  Úname_maps     €r%   rN   z;MigrationAutodetector.arrange_for_graph.<locals>.<listcomp>  s4   ø€ ð *ð *ð *Ø+,�H—L’L  AÑ&Ô&ð*ð *ð *r$   )rÐ   rY   r\   r<   Úask_initialrq   Úparse_numberÚ	enumeraterÊ   rn   Úsuggest_nameÚjoinrÍ   )r,   rG   rC   rF   Úleavesr§   r¦   Úapp_leafÚleafrí   Únext_numberÚiÚnew_name_partsr  r-  s                 @r%   rA   z'MigrationAutodetector.arrange_for_graphP  s[  ø€ ð ×!Ò!Ñ#Ô#ˆØˆÝ%)¨'¯-ª-©/¬/Ñ%:Ô%:ð #	*ñ #	*Ñ!ˆI�zØð ØàˆHØð ð �Ø˜”7˜iÒ'Ð'Ø#�HØ�Eð (ð Ð¨¬×(CÒ(CÀIÑ(NÔ(NÐà!+ð Uð U�IØ=FÈÐ<T�H˜i¨¬Ð8Ñ9Ð9Ø˜IÐ&ØàÐØ��à#×0Ò0°¸!´Ñ=Ô=ÐBÀÀaÑG�å )¨*Ñ 5Ô 5ð *ð *‘��9Ø˜’6�6˜h�6ØÔ*×1Ò1°(Ñ;Ô;Ð;Ø"(¨;Ñ"6Ð!7�Ø!ð JØ"×)Ò)¨.Ñ9Ô9Ð9Ð9Ø˜!’V�V H�VØ"×)Ò)¨)Ñ4Ô4Ð4Ð4à"×)Ò)¨)×*@Ò*@Ñ*BÔ*BÀ4ÀCÀ4Ô*HÑIÔIÐIØŸ8š8 NÑ3Ô3�Ø9BÀHÐ8M�˜) Y¤^Ð4Ñ5Ø˜qÑ �Ø!)�	”�ñ*ð "Ÿ.š.Ñ*Ô*ð 	ð 	ˆJØ'ð ð �	ð*ð *ð *ð *Ø09Ô0Fð*ñ *ô *�	Ô&Ð&ðð ˆr$   c                 ó„  ‡
— i Š
|                      ¦   «         D ]L\  }}|D ]D}|j        D ]:\  }}‰
                     |t          ¦   «         ¦  «                             |¦  «         Œ;ŒEŒMt          |¦  «        }d}	|	|k    r+t          |¦  «        }	 |j        ˆ
fd„|D ¦   «         Ž  |	|k    °+t          |¦  «        D ]	}||vr||= Œ
|S )a1  
        Take changes from arrange_for_graph() and set of app labels, and return
        a modified set of changes which trims out as many migrations that are
        not in app_labels as possible. Note that some other migrations may
        still be present as they may be required dependencies.
        Nc                 ó<   •— g | ]}‰                      |d ¦  «        ‘ŒS )r#   r,  )r6   r§   Úapp_dependenciess     €r%   rN   z7MigrationAutodetector._trim_to_apps.<locals>.<listcomp>—  s*   ø€ ÐUÐUÐU¸)Ð"×&Ò& y°"Ñ5Ô5ÐUÐUÐUr$   )r\   rÊ   rÓ   r|   r…   rÑ   rY   )r,   rG   Ú
app_labelsr§   r¦   rí   rö  rq   Úrequired_appsÚold_required_appsr;  s             @r%   rB   z#MigrationAutodetector._trim_to_apps„  s  ø€ ð ÐØ%,§]¢]¡_¤_ð 	Uð 	UÑ!ˆI�zØ'ð Uð U�	Ø+4Ô+Að Uð UÑ'�M 4Ø$×/Ò/°	½3¹5¼5ÑAÔA×EÒEÀmÑTÔTÐTÐTðUðUõ ˜J™œˆà ÐØ =Ò0Ð0Ý # MÑ 2Ô 2ÐØ ˆMÔ ØUÐUÐUÐUÀ}ÐUÑUÔUðð ð   =Ò0Ð0õ ˜g™œð 	'ð 	'ˆIØ Ð-Ð-Ø˜IÐ&øØˆr$   c                 ó¶   — t          j        d|¦  «        x}rt          |d         ¦  «        S t          j        d|¦  «        }|rt          |d         ¦  «        S dS )uã   
        Given a migration name, try to extract a number from the beginning of
        it. For a squashed migration such as '0001_squashed_0004â€¦', return the
        second number. If no number is found, return None.
        z.*_squashed_(\d+)r   z^\d+r   N)ÚreÚsearchÚintÚmatch)Úclsrq   Úsquashed_matchrC  s       r%   r/  z"MigrationAutodetector.parse_numberŸ  s_   € õ  œYÐ';¸TÑBÔBÐBˆ>ð 	*Ý�~ aÔ(Ñ)Ô)Ð)Ý”˜ $Ñ'Ô'ˆØð 	!Ý�u˜Q”x‘=”=Ð Øˆtr$   r(   )NNN)NN)NF)9r   r   r   Ú__doc__r>   rG   rK   rt   r@   r‰   rŠ   ÚstaticmethodrÁ   r¤   r£   r¥   rÏ   r   r  rˆ   rŒ   rŽ   r‹   r�   r’   r—   r›   rq  rš   rŽ  rœ   r“   rŸ   r–   r˜   r×  r”   r    r•   r¡   r  rw  rÅ  r´  r
  r™   r  rž   r¢   r‘   r�   r�   r�   rA   rB   Úclassmethodr/  r#   r$   r%   r3   r3   *   s­  € € € € € ð
ð 
ðGð Gð Gð Gð
ð 
ð 
ð 
ð$ð $ð $ðLð ð ðhð hð hð hðT
ð 
ð 
ð.ð ð ð( ð
ð 
ñ „\ð
ð(v"ð v"ð v"ð v"ðpKð Kð Kð$ð ð ð$RKð RKð RKðhRð Rð Rð Rðð ð ð.B"ð B"ð B"ðH[ð [ð [ðz(ð (ð (ðT]ð ]ð ]ð~ð ð ð<"ð <"ð <"ð|#Ið #Ið #IðJJð Jð Jð6
ð 6
ð 6
ðpLð Lð Lð
ð 
ð 
ð4yRð yRð yRðvWð Wð Wðrð ð ð	ð 	ð 	ðð ð ðTð Tð Tð0ð 0ð 0ðdð ð ð ð ð ðð ð ð" ð+ð +ñ „\ð+ðZð ð ð*ð ð ð -ð -ð -ð^ð ð ð2Tð Tð Tðð ð ð Lð Lð Lðð ð ð*ð ð ð,&ð &ð &ðP ð  ð  ðDð ð ð 2ð 2ð 2ð 2ðhð ð ð6 ðð ñ „[ðð ð r$   r3   )!r]   r@  Úcollectionsr   r   Úenumr   Úgraphlibr   Ú	itertoolsr   Údjango.confr   Ú	django.dbr	   Údjango.db.migrationsr
   Údjango.db.migrations.migrationr   Ú&django.db.migrations.operations.modelsr   Údjango.db.migrations.optimizerr   Údjango.db.migrations.questionerr   Údjango.db.migrations.utilsr   r   r   Údjango.utils.functionalr   r   r3   r#   r$   r%   ú<module>rV     s¡  ðØ Ð Ð Ð Ø 	€	€	€	Ø /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ø Ð Ð Ð Ð Ð Ø &Ð &Ð &Ð &Ð &Ð &Ø Ð Ð Ð Ð Ð à  Ð  Ð  Ð  Ð  Ð  Ø Ð Ð Ð Ð Ð Ø +Ð +Ð +Ð +Ð +Ð +Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø DÐ DÐ DÐ DÐ DÐ DØ =Ð =Ð =Ð =Ð =Ð =Ø ?Ð ?Ð ?Ð ?Ð ?Ð ?ðð ð ð ð ð ð ð ð ð ð
 4Ð 3Ð 3Ð 3Ð 3Ð 3ð'ð 'ð 'ð 'ð 'Ø€JÐ$Ð&LÑMÔMñ'ô 'ð 'ð&Að Að Að Að Añ Aô Að Að Að Ar$   