+
    S<Âjè_ ã                   óö   € ^ RI t ^ RIt^ RIHtHt ^ RIHt ^ RIHt ^ RI	H
t
 ^ RIHt ^ RIHt ^ RIHt ^ R	IHt ^ R
IHt ^ RIHt ^ RIHt ^ RIHtHtHt ^ RIHt  ! R R]! RR4      4      t ! R R4      t R# )é    N)ÚdefaultdictÚ
namedtuple)ÚEnum)ÚTopologicalSorter)Úchain)Úsettings)Úmodels)Ú
operations)Ú	Migration)ÚAlterModelOptions)ÚMigrationOptimizer)ÚMigrationQuestioner)ÚCOMPILED_REGEX_TYPEÚRegexObjectÚresolve_relation)Úcached_propertyc                   óV   a € ] tR t^t o  ! R R]4      t]R 4       t]R 4       tRt	V t
R# )ÚOperationDependencyc                   ó.   € ] tR t^t^ t^t^t^t^t^t	Rt
R# )ÚOperationDependency.Type© N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__ÚCREATEÚREMOVEÚALTERÚREMOVE_ORDER_WRTÚALTER_FOO_TOGETHERÚREMOVE_INDEX_OR_CONSTRAINTÚ__static_attributes__r   ó    Úa/var/www/html/data_capital/venv/lib/python3.14/site-packages/django/db/migrations/autodetector.pyÚTyper      s#   † ØˆØˆØˆØÐØÐØ%&Ô"r#   r%   c                ó6   € V P                   P                  4       # ©N)Ú
model_nameÚlower©Úselfs   &r$   Úmodel_name_lowerÚ$OperationDependency.model_name_lower"   ó   € à�‰×$Ñ$Ó&Ð&r#   c                ó6   € V P                   P                  4       # r'   )Ú
field_namer)   r*   s   &r$   Úfield_name_lowerÚ$OperationDependency.field_name_lower&   r.   r#   r   N)r   r   r   r   r   r%   r   r,   r1   r"   Ú__classdictcell__©Ú__classdict__s   @r$   r   r      s9   ø‡ € ô'ˆtô 'ð ñ'ó ð'ð ñ'ó ö'r#   r   z$app_label model_name field_name typec                   ó’  a € ] tR t^+t o RtR8R ltR9R ltR tR tR:R lt	R t
R	 t]R
 4       tR8R ltR tR tR tR;R ltR tR tR tR tR tR tR tR tR tR tR tR tR tR t R t!R t"R  t#R! t$R" t%R# t&R$ t'R% t(]R& 4       t)R' t*R( t+R) t,R* t-R+ t.R, t/R- t0R. t1R/ t2R0 t3R1 t4R2 t5R3 t6R8R4 lt7R5 t8]9R6 4       t:R7t;V t<R# )<Ú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                ó¦   € Wn         W n        T;'       g    \        4       V n        VP                   UUu0 uF  w  rEVkK	  	  uppV n        R # u uppi r'   )Ú
from_stateÚto_stater   Ú
questionerr	   Úexisting_apps)r+   r9   r:   r;   ÚappÚmodels   &&&&  r$   Ú__init__ÚMigrationAutodetector.__init__8   sC   € Ø$ŒØ ŒØ$×=Ð=Ô(;Ó(=ˆŒØ4>×4EÒ4EÔFÑ4E¡j c›cÑ4EÒFˆÖùÓFs   µAc                ó~   € V P                  W14      pV P                  WQV4      pV'       d   V P                  WR4      pV# )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$   rI   ÚMigrationAutodetector.changes>   s>   € ð ×&Ñ& |Ó;ˆØ×(Ñ(¨¸ÓHˆßØ×(Ñ(¨Ó?ˆGØˆr#   c           
     óF  a € \        V\        4      '       d"   V Uu. uF  pS P                  V4      NK  	  up# \        V\        4      '       d3   \        ;QJ d    . V 3R lV 4       F  NK  	  5# ! V 3R lV 4       4      # \        V\        4      '       d5   VP                  4        UUu/ uF  w  r2VS P                  V4      bK  	  upp# \        V\        P                  4      '       dB   VP                  S P                  VP                  4      S P                  VP                  4      3# \        V\        4      '       d   \        V4      # \        V\        4      '       d   V# \        VR4      '       d•   VP                  4       p\        V\         P"                  4      '       d
   VR,          pVw  rVpTV Uu. uF  pS P                  V4      NK  	  upVP                  4        UUu/ uF  w  r2VS P                  V4      bK  	  upp3# V# u upi u uppi u upi u uppi )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              3   óF   <"  € T F  pSP                  V4      x € K  	  R # 5ir'   )Údeep_deconstruct)Ú.0Úvaluer+   s   & €r$   Ú	<genexpr>Ú9MigrationAutodetector.deep_deconstruct.<locals>.<genexpr>S   s   øé € ÐGÁ3¸%˜×.Ñ.¨u×5Ð5Ã3ùó   ƒ!Údeconstructºé   NN)Ú
isinstanceÚlistrM   ÚtupleÚdictÚitemsÚ	functoolsÚpartialÚfuncÚargsÚkeywordsr   r   ÚtypeÚhasattrrS   r	   ÚField)r+   ÚobjrO   ÚkeyÚdeconstructedÚpathr^   Úkwargss   f&      r$   rM   Ú&MigrationAutodetector.deep_deconstructJ   sÀ  ø€ ô �cœ4× Ò Ù>AÓB¹c°U�D×)Ñ)¨%Ö0¹cÑBÐBÜ˜œU×#Ò#ß”5ÔGÁ3ÓG—5ÐG�5ÔGÁ3ÓGÓGÐGÜ˜œT×"Ò"ØHKÏ	É	ÌÔTÉ¹*¸#�C˜×.Ñ.¨uÓ5Ò5ÉÒTÐTÜ˜œY×.Ñ.×/Ò/à—‘Ø×%Ñ% c§h¡hÓ/Ø×%Ñ% c§l¡lÓ3ðð ô
 ˜Ô0×1Ò1Ü˜sÓ#Ð#Ü˜œT×"Ò"ð ˆJÜ�S˜-×(Ò(ØŸO™OÓ-ˆMÜ˜#œvŸ|™|×,Ò,à -¨bÕ 1�Ø!.ÑˆD˜àÙ;?Ó@¹4°%�×&Ñ& uÖ-¹4Ñ@ØEKÇ\Á\Ä^ÔTÁ^±z°s��d×+Ñ+¨EÓ2Ò2Á^ÒTðð ð ˆJùò= Cùó Uùò, AùÛTs   œHÂ*HÆ:HÇ)H
c                ó   € . p\        VP                  4       4       Fn  w  r4V P                  V4      pVP                  '       d6   VP                  P                  '       d   V^,          P                  RR4       VP                  V4       Kp  	  V# )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).
ÚtoN)ÚsortedrZ   rM   Úremote_fieldr>   ÚpopÚappend)r+   ÚfieldsÚ
fields_defÚnameÚfieldÚdeconstructions   &&    r$   Úonly_relation_agnostic_fieldsÚ3MigrationAutodetector.only_relation_agnostic_fieldsq   sx   € ð ˆ
Ü! &§,¡,£.Ö1‰KˆDØ!×2Ñ2°5Ó9ˆNØ×!×!Ð! e×&8Ñ&8×&>×&>Ð&>Ø˜qÕ!×%Ñ% d¨DÔ1Ø×Ñ˜nÖ-ñ	 2ð
 Ðr#   c                óì  € / V n         / V n        / V n        / V n        \	        4       V n        \	        4       V n        \	        4       V n        \	        4       V n        \	        4       V n	        \	        4       V n
        V P                  P                  P                  4        F¿  w  w  r4pVP                  P                  RR4      '       g   V P                  P!                  W434       KH  W0P                  P"                  9  g   Kd  VP                  P                  R4      '       d   V P                  P!                  W434       K£  V P
                  P!                  W434       KÁ  	  V P$                  P                  P                  4        FÏ  w  w  r4pVP                  P                  RR4      '       g   V P                  P!                  W434       KH  W0P                  P"                  9  g   V'       g   Kl  W19   g   Kt  VP                  P                  R4      '       d   V P                  P!                  W434       K³  V P                  P!                  W434       KÑ  	  V P                  P'                  4        V P$                  P'                  4        V P)                  4        V P+                  4        V P-                  4        V P/                  4        V P1                  4        V P3                  4        V P5                  4        V P7                  4        V P9                  4        V P;                  4        V P=                  4        V P?                  4        V PA                  4        V PC                  4        V PE                  4        V PG                  4        V PI                  4        V PK                  4        V PM                  4        V PO                  4        V PQ                  4        V PS                  4        V PU                  4        V PW                  4        V PY                  4        V P[                  4        V P]                  4        V P_                  4        V Pa                  V4       V Pc                  4        V Pd                  # )a  
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_keysr9   r	   rZ   Ú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+   rG   rE   Ú	app_labelr(   Úmodel_states   &&&   r$   rB   Ú%MigrationAutodetector._detect_changes   sd  € ð& %'ˆÔ!Ø!ˆÔØ#%ˆÔ Ø ˆÔô "›eˆÔÜ!›eˆÔÜ"%£%ˆÔÜ!›eˆÔÜ!›eˆÔÜ"%£%ˆÔØ48·O±O×4JÑ4J×4PÑ4PÖ4RÑ0Ñ#ˆY [Ø×&Ñ&×*Ñ*¨9°d×;Ò;Ø×'Ñ'×+Ñ+¨YÐ,CÖDØ§/¡/×";Ñ";Ö;Ø×&Ñ&×*Ñ*¨7×3Ò3Ø×'Ñ'×+Ñ+¨YÐ,CÖDà×'Ñ'×+Ñ+¨YÐ,CÖDñ 5Sð 59·M±M×4HÑ4H×4NÑ4NÖ4PÑ0Ñ#ˆY [Ø×&Ñ&×*Ñ*¨9°d×;Ò;Ø×'Ñ'×+Ñ+¨YÐ,CÖDØ§/¡/×";Ñ";Ô;ß‘ Ö!:à×&Ñ&×*Ñ*¨7×3Ò3Ø×'Ñ'×+Ñ+¨YÐ,CÖDà×'Ñ'×+Ñ+¨YÐ,CÖDñ 5Qð 	�‰×4Ñ4Ô6Ø�‰×2Ñ2Ô4ð 	×$Ñ$Ô&ð 	×!Ñ!Ô#Ø×(Ñ(Ô*ð 	×$Ñ$Ô&Ø×$Ñ$Ô&Ø×%Ñ%Ô'Ø×%Ñ%Ô'Ø×%Ñ%Ô'Ø×&Ñ&Ô(Ø×.Ñ.Ô0ð 	×"Ñ"Ô$ð 	×#Ñ#Ô%Ø×'Ñ'Ô)à×)Ñ)Ô+Ø×%Ñ%Ô'à×$Ñ$Ô&Ø×%Ñ%Ô'à×5Ñ5Ô7à×$Ñ$Ô&Ø×"Ñ"Ô$Ø×$Ñ$Ô&Ø×3Ñ3Ô5Ø×-Ñ-Ô/Ø×#Ñ#Ô%Ø×'Ñ'Ô)Ø×)Ñ)Ô+Ø×&Ñ&Ô(à×ÑÔØ×"Ñ" 5Ô)Ø×!Ñ!Ô#à�‰Ðr#   c                ó’  € V P                   V P                  ,          V n        V P                  V P                  ,          V n        V P                  V P                  ,          V n        / V n	        V P                   UUUu0 uFS  w  rV P                  P                  WP                  P                  W3V4      3,          P                   F  pWV3kK	  	  KU  	  upppV n        V P                   UUUu0 uF8  w  rV P                   P                  W3,          P                   F  pWV3kK	  	  K:  	  upppV n        R# u upppi u upppi )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.
N)r~   r�   Úkept_model_keysr   r‚   Úkept_proxy_keysr€   rƒ   Úkept_unmanaged_keysÚthrough_usersr9   r	   Úrenamed_modelsr…   ro   Úold_field_keysr:   Únew_field_keys©r+   r¨   r(   r0   s   &   r$   rŠ   Ú*MigrationAutodetector._prepare_field_listsé   s*  € ð  $×2Ñ2°T×5HÑ5HÕHˆÔØ#×2Ñ2°T×5HÑ5HÕHˆÔØ#'×#:Ñ#:¸T×=TÑ=TÕ#TˆÔ ØˆÔð *.×)=Ò)=õ
á)=Ñ%�	Ø"Ÿo™o×4Ñ4Ø×.Ñ.×2Ñ2°IÐ3JÈJÓWÐWõç‰fò�
ð  JÓ/ññ 0Ù)=ó
ˆÔð *.×)=Ò)=õ
á)=Ñ%�	Ø"Ÿm™m×2Ñ2°9Ð3HÕI×PÔP�
ð  JÓ/áPñ 0Ù)=ó
ˆÖùô
ùô
s   Á>AD;Ã1>Ec                óÈ  € \        V P                  4       FÈ  w  rV P                  P                  W3V4      pV P                  P
                  W3,          pVP                  P                  4        Fj  w  rV\        VR4      '       g   K  \        VP                  RR4      '       g   K8  \        VP                  P                  W4      pVVV3V P                  V&   Kl  	  KÊ  	  R# )zThrough model map generation.rl   ÚthroughN)rk   r~   r°   r…   r9   r	   ro   rZ   ra   Úgetattrrl   r   r¶   r¯   )r+   r¨   r(   Úold_model_nameÚold_model_stater0   rr   Úthrough_keys   &       r$   r‹   Ú1MigrationAutodetector._generate_through_model_map   sÏ   € ä%+¨D×,?Ñ,?Ö%@Ñ!ˆIØ!×0Ñ0×4Ñ4ØÐ'¨óˆNð #Ÿo™o×4Ñ4°YÐ5NÕOˆOØ%4×%;Ñ%;×%AÑ%AÖ%CÑ!�
Ü˜5 .×1Ô1´gØ×&Ñ&¨	°4÷7ô 7ô #3Ø×*Ñ*×2Ñ2°Ió#�Kð "Ø&Ø"ð7�D×&Ñ& {Ó3ó &Dó &Ar#   c                óæ   € V P                   R8w  d   V R3# \        \        V P                  4      P	                  R4      w  r\        VVP                  4       V P                  V P                  4      R3# )zX
Return the resolved dependency and a boolean denoting whether or not
it was swappable.
Ú__setting__FÚ.T)	r¨   r·   r   r(   Úsplitr   r)   r0   r`   )Ú
dependencyÚresolved_app_labelÚresolved_object_names   &  r$   Ú_resolve_dependencyÚ)MigrationAutodetector._resolve_dependency  sy   € ð ×Ñ =Ô0Ø˜uÐ$Ð$Ü3:Ü�j×+Ñ+ó4
ç
‰%�‹*ñ 	1Ðô  Ø"Ø$×*Ñ*Ó,Ø×%Ñ%Ø—‘ó	ð ð
ð 	
r#   c           
     óÒ  € / V n         \        R V P                  P                  4        4       4      pRpV'       Ed«   \	        V P                  4       EF3  p. p\        4       p\        V P                  V,          4       EFÿ  pRp\        4       p	VP                   EFž  p
T
pV P                  V
4      w  r¬V
P                  V8w  g   K,  V P                  P                  V
P                  . 4       F  pV P                  WÚ4      '       g   K  Rp M	  V'       g    EM$V'       d*   V	P                  VP                  VP                  34       K°  V
P                  V P                   9   dM   V	P                  V
P                  V P                   V
P                  ,          R,          P                  34       EK  V'       d~   V'       dV   VP                  V
P                  4      '       d5   V	P                  VP                  V
P                  4      ^ ,          4       EK|  V	P                  V
P                  R34       EKœ  RpEK¡  	  V'       d:   VP!                  V4       VP#                  V	4       V P                  V,          ^  EK    M	  V'       g   V'       g   EKC  V P                  V,          '       d	   V'       dª   \%        R\&        3R. R. /4      pV! R\)        V P                   P                  V. 4      4      ^,           ,          V4      p\        V4      Vn        W_n        W@P.                  9  Vn        V P                   P3                  V. 4      P!                  V4       RpEK  WPP                  V,          ,           V P                  V&   EK6  	  \        R	 V P                  P                  4        4       4      pVV8X  d(   V'       g   RpM\5        R
V P                  ,          4      hTpEK³  R# )a  
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   ó8   "  € T F  p\        V4      x € K  	  R # 5ir'   ©Úlen©rN   Úxs   & r$   rP   Ú>MigrationAutodetector._build_migration_list.<locals>.<genexpr>5  s   é € ÐIÑ&H ”c˜!—f�fÓ&Hùó   ‚FTÚ	__first__r   r
   Údependencieszauto_%ic              3   ó8   "  € T F  p\        V4      x € K  	  R # 5ir'   rÇ   rÉ   s   & r$   rP   rË   –  s   é € ÐQÑ.P¨œc !Ÿf˜fÓ.PùrÌ   z)Cannot resolve operation dependencies: %rNéÿÿÿÿ)r§   Úsumry   Úvaluesrk   r}   rW   Ú
_auto_depsrÃ   r¨   r…   Úcheck_dependencyr†   r(   rq   Ú
leaf_nodesrn   Úupdater`   r   rÈ   rÎ   r
   r<   ÚinitialÚ
setdefaultÚ
ValueError)r+   rE   Ú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¥   Ú+MigrationAutodetector._build_migration_list)  sG  € ð ˆŒÜÑI d×&?Ñ&?×&FÑ&FÔ&HÓIÓIˆØˆ	ßˆgô $ D×$=Ñ$=×>�	Ø�Ü"›u�Ü!% d×&?Ñ&?À	Õ&J×!K�IØ%)�NÜ-0«UÐ*Ø(×3Õ3˜ð
 (+˜Ø04×0HÑ0HÈÓ0MÑ-˜ØŸ=™=¨IÖ5ð 48×3LÑ3L×3PÑ3PØ #§¡¨rö4 ð $(×#8Ñ#8¸×#NÔ#NØ5: NÙ$)ñ4÷ $2Ú %ç#3Ø$:×$>Ñ$>à,8×,BÑ,BØ,8×,CÑ,Cð)*ö%&ð &)§]¡]°d·o±oÔ%EØ$:×$>Ñ$>à,/¯M©MØ,0¯O©O¸C¿M¹MÕ,JÈ2Õ,N×,SÑ,Sð)*÷%&÷ (1÷ ,1°U×5EÑ5EÀcÇmÁm×5TÒ5TØ,B×,FÑ,FØ05×0@Ñ0@ÀÇÁÓ0OÐPQÕ0R÷-.ð -C×,FÑ,FØ14·±ÀÐ0L÷-.ð :?«ñm  4÷n &ØŸ™ yÔ1Ø$×+Ñ+Ð,BÔCØ ×5Ñ5°iÕ@ÀÓCáñ "L÷B  §7¢7Ø×4Ñ4°Y×?Ô?Ç9Ü#'Ø'Ü&˜LØ)¨2¨~¸rÐBó$˜ñ
 $,Ø%¬¨T¯_©_×-@Ñ-@ÀÈBÓ-OÓ)PÐSTÕ)TÕUØ%ó$˜ô 15°\Ó0B˜Ô-Ø.5Ô+Ø+4×<NÑ<NÑ+N˜Ô(ØŸ™×2Ñ2°9¸bÓA×HÑHÈÔRØ$)›	ð $×&?Ñ&?À	Õ&JÕJð ×1Ñ1°)Ô<ñk ?ôp ÑQ¨d×.GÑ.G×.NÑ.NÔ.PÓQÓQˆKØ˜gÔ%ß Ø $‘Iä$ØCØ×3Ñ3õ4óð ð "‹GñQ r#   c                ó°  a a€ \        S P                  P                  4       4       F¬  w  r\        4       pV Fq  pVP	                  V4       VP
                   FM  oS P                  S4      ^ ,          oSP                  V8w  d   K.  VP                  ! V.VV 3R lV 4       O5!   KO  	  Ks  	  \        VP                  4       4      S P                  V&   K®  	  R# )zc
Reorder to make things possible. Reordering may be needed so FKs work
nicely inside the same app.
c              3   ó\   <"  € T F!  pSP                  VS4      '       g   K  Vx € K#  	  R # 5ir'   )rÔ   )rN   rÊ   rà   r+   s   & €€r$   rP   Ú9MigrationAutodetector._sort_migrations.<locals>.<genexpr>°  s"   øé € Ð Q©C q°4×3HÑ3HÈÈC×3P§¢«Cùs   ƒ,¢
,N)
rk   ry   rZ   r   r†   rÓ   rÃ   r¨   rW   Ústatic_order)r+   r¨   ÚopsÚtsÚoprà   s   f    @r$   r¤   Ú&MigrationAutodetector._sort_migrations¡  s¬   ù€ ô
 % T×%>Ñ%>×%DÑ%DÓ%FÖG‰NˆIÜ"Ó$ˆBÛ�Ø—‘�r”
ØŸ=œ=�Cð ×2Ñ2°3Ó7¸Õ:�CØ—}‘}¨	Ô1Ù Ø—F’F˜2ÐRÕ Q©CÓ QÖRó )ñ ô 48¸¿¹Ó8IÓ3JˆD×%Ñ% iÓ0ó Hr#   c                ó  € V P                   P                  4        FF  w  r\        W"R ,          4       F+  w  r4VP                  P	                  WP
                  34       K-  	  KH  	  V P                   P                  4        F/  pV F&  p\        \        VP                  4      4      Vn        K(  	  K1  	  V P                   P                  4        F7  w  rV F,  p\        4       P                  VP                  V4      Vn        K.  	  K9  	  R# )rT   N)r§   rZ   ÚziprÎ   rn   rq   rÒ   rW   r}   r   Úoptimizer
   )r+   r¨   r§   Úm1Úm2Ú	migrations   &     r$   r¦   Ú*MigrationAutodetector._optimize_migrations³  sÌ   € à%)§_¡_×%:Ñ%:Ö%<Ñ!ˆIÜ˜j°R­.Ö9‘�Ø—‘×&Ñ&¨	·7±7Ð';Ö<ó :ñ &=ð
 Ÿ/™/×0Ñ0Ö2ˆJÛ'�	Ü)-¬c°)×2HÑ2HÓ.IÓ)J�	Ö&ó (ñ 3ð
 &*§_¡_×%:Ñ%:Ö%<Ñ!ˆIÛ'�	Ü'9Ó';×'DÑ'DØ×(Ñ(¨)ó(�	Ö$ó (ó &=r#   c                óî	  a€ SP                   fe   SP                  \        P                  P                  8X  d<   \        V\        P                  4      ;'       d    VP                  SP                  8H  # SP                   Ee   SP                  \        P                  P                  8X  dö   \        V\        P                  4      ;'       dx    VP                  SP                  8H  ;'       dW    \        ;QJ d)    V3R lVP                   4       F  '       g   K   RM	  RM! V3R lVP                   4       4      ;'       g]    \        V\        P                  4      ;'       d;    VP                  SP                  8H  ;'       d    VP                  SP                  8H  # SP                   e†   SP                  \        P                  P                  8X  d]   \        V\        P                  4      ;'       d;    VP                  SP                  8H  ;'       d    VP                  SP                  8H  # SP                   fe   SP                  \        P                  P                  8X  d<   \        V\        P                   4      ;'       d    VP                  SP                  8H  # SP                   e†   SP                  \        P                  P"                  8X  d]   \        V\        P$                  4      ;'       d;    VP                  SP                  8H  ;'       d    VP                  SP                  8H  # SP                   ež   SP                  \        P                  P&                  8X  du   \        V\        P(                  4      ;'       dS    VP                  SP                  8H  ;'       d2    VP*                  ;'       g    RP-                  4       SP                  8g  # SP                   eu   SP                  \        P                  P.                  8X  dL   \        V\        P0                  \        P2                  34      ;'       d    VP                  SP                  8H  # SP                   eu   SP                  \        P                  P4                  8X  dL   \        V\        P6                  \        P8                  34      ;'       d    VP                  SP                  8H  # \;        RS: 24      h)zV
Return True if the given operation depends on the given dependency,
False otherwise.
c              3   óF   <"  € T F  w  rSP                   V8H  x € K  	  R # 5ir'   )r0   )rN   rÊ   ÚyrÀ   s   &  €r$   rP   Ú9MigrationAutodetector.check_dependency.<locals>.<genexpr>Û  s    øé € ÐPÑ?O±t°q˜
×-Ñ-°Ö2Ó?OùrR   TFÚ zCan't handle dependency )r0   r`   r   r%   r   rV   r
   ÚCreateModelÚ
name_lowerr,   Úanyro   ÚAddFieldr1   r   ÚRemoveFieldÚDeleteModelr   Ú
AlterFieldr   ÚAlterOrderWithRespectToÚorder_with_respect_tor)   r    ÚAlterUniqueTogetherÚAlterIndexTogetherr!   ÚRemoveIndexÚRemoveConstraintrÙ   )r+   rÝ   rÀ   s   &&fr$   rÔ   Ú&MigrationAutodetector.check_dependencyÅ  s'  ø€ ð ×!Ñ!Ò)Ø—‘Ô#6×#;Ñ#;×#BÑ#BÔBô ˜9¤j×&<Ñ&<Ó=÷ Hð HØ×(Ñ(¨J×,GÑ,GÑGðð ×!Ñ!Ó-Ø—‘Ô#6×#;Ñ#;×#BÑ#BÔBô ˜9¤j×&<Ñ&<Ó=÷ Qð QØ×(Ñ(¨J×,GÑ,GÑG÷Qð Qç“CÔP¸y×?OÒ?OÓP—C—C’CÔP¸y×?OÒ?OÓPÓP÷ð ô
 ˜9¤j×&9Ñ&9Ó:÷ Hð HØ×.Ñ.°*×2MÑ2MÑM÷Hð Hà×(Ñ(¨J×,GÑ,GÑGðð ×!Ñ!Ò-Ø—‘Ô#6×#;Ñ#;×#BÑ#BÔBô ˜9¤j×&<Ñ&<Ó=÷ Hð HØ×.Ñ.°*×2MÑ2MÑM÷Hð Hà×(Ñ(¨J×,GÑ,GÑGðð ×!Ñ!Ò)Ø—‘Ô#6×#;Ñ#;×#BÑ#BÔBô ˜9¤j×&<Ñ&<Ó=÷ Hð HØ×(Ñ(¨J×,GÑ,GÑGðð ×!Ñ!Ò-Ø—‘Ô#6×#;Ñ#;×#AÑ#AÔAô ˜9¤j×&;Ñ&;Ó<÷ Hð HØ×.Ñ.°*×2MÑ2MÑM÷Hð Hà×(Ñ(¨J×,GÑ,GÑGðð ×!Ñ!Ò-Ø—‘Ô#6×#;Ñ#;×#LÑ#LÔLô ˜9¤j×&HÑ&HÓI÷ /ð /Ø×(Ñ(¨J×,GÑ,GÑG÷/ð /à×4Ñ4×:Ð:¸×AÑAÓCØ×.Ñ.ñ/ðð ×!Ñ!Ò-Ø—‘Ô#6×#;Ñ#;×#NÑ#NÔNô ØÜ×3Ñ3´Z×5RÑ5RÐSó÷ Hð Hð ×(Ñ(¨J×,GÑ,GÑGðð ×!Ñ!Ò-Ø—‘Ô#6×#;Ñ#;×#VÑ#VÔVô ØÜ×+Ñ+¬Z×-HÑ-HÐIó÷ Nð Nð ×.Ñ.°*×2MÑ2MÑMðõ ºZÐIÓJÐJr#   c                óê   € T;'       g    . Vn         V'       d/   V P                  P                  V. 4      P                  ^ V4       R# V P                  P                  V. 4      P	                  V4       R# )r   N)rÓ   ry   rØ   Úinsertrn   )r+   r¨   rÝ   rÎ   Ú	beginnings   &&&&&r$   Úadd_operationÚ#MigrationAutodetector.add_operation%  s[   € ð  ,×1Ð1¨rˆ	ÔßØ×%Ñ%×0Ñ0°¸BÓ?×FÑFÀqÈ)ÖTà×%Ñ%×0Ñ0°¸BÓ?×FÑFÀyÖQr#   c                ó  €  V P                   P                  V,          pVP                   Uu0 uF'  p\        V\        4      '       d   TMVP
                  kK)  	  ppV^ ,          : RV^,          : 2pVP                  P                  R4      '       g@   RV9   g9   RV9   g2   \        P                  P                  4       VP                  4       8X  d!   RV^ ,          ,           RV^,          ,           3#  V# u upi   \         d     T# i ; i)zd
Place potential swappable models first in lists of created models (only
real way to solve #22783).
r¾   Ú	swappableÚAbstractUserÚAbstractBaseUserÚ___)r:   r	   ÚbasesrV   Ústrr   r„   r…   r   ÚAUTH_USER_MODELr)   ÚLookupError)r+   Úitemr©   ÚbaseÚ
base_namesÚstring_versions   &&    r$   Úswappable_first_keyÚ)MigrationAutodetector.swappable_first_key.  sû   € ð
	ØŸ-™-×.Ñ.¨tÕ4ˆKð (×-Ò-óá-�Dô # 4¬×-Ò-‘°4·=±=Ò@Ù-ð ð ð )-¨Q¯¨°°a·Ð9ˆNà×#Ñ#×'Ñ'¨×4Ò4Ø! ZÔ/Ø%¨Ô3Ü×+Ñ+×1Ñ1Ó3°~×7KÑ7KÓ7MÔMà  Q¥�¨°°aµ­Ð9Ð9ð Nð
 ˆùòøô ô 	ØØˆð	ús#   ‚+C; ­-C6ÁBC; Ã6C; Ã;D
Ä	D
c                ór  € / V n         / V n        V P                  V P                  ,
          p\	        V4       EFu  w  r#V P
                  P                  W#3,          pV P                  VP                  4      pV P                  V P                  ,
          pV EF  w  rxWr8X  g   K  V P                  P                  Wx3,          p	V P                  V	P                  4      p
WZ8X  g   KO  V P                  P                  W”4      '       g   Kr  . p\        VP                  P                  4       4      V P
                  P                  W#3,          P                  4        UUu. uF&  pVP                  4        F  pVP                  NK  	  K(  	  upp,           pV FD  pVP                   '       g   K  VP#                  V P%                  VVVV P
                  4      4       KF  	  V P'                  V\(        P*                  ! V	P,                  VP,                  R7      VR7       W€P                   W#3&   V	P.                  : RV	P0                  : 2pVP.                  : RVP0                  : 2V P                  V&   V P                  P3                  Wx34       V P                  P5                  W#34        EKs  	  EKx  	  R# u uppi )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.
)Úold_nameÚnew_name©rÎ   r¾   N)r°   Úrenamed_models_relr�   r~   rk   r:   r	   rt   ro   r9   r;   Úask_rename_modelrW   rÒ   Ú	relationsrl   Ú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Î   r$  rr   ro   Úrenamed_models_rel_keys   &               r$   r‰   Ú-MigrationAutodetector.generate_renamed_modelsE  sˆ  € ð !ˆÔØ"$ˆÔØ×*Ñ*¨T×-@Ñ-@Õ@ˆÜ%+¨L×%9Ñ!ˆIØŸ-™-×.Ñ.¨yÐ/DÕEˆKØ#×AÑAÀ+×BTÑBTÓUÐà!×0Ñ0°4×3FÑ3FÕFˆNÜ1?Ñ-�Ø Ö-Ø&*§o¡o×&<Ñ&<Ø%Ð5õ'�Oð ,0×+MÑ+MØ'×.Ñ.ó,Ð(ð (Ö?ØŸ?™?×;Ñ;Ø+÷ô ð ,.˜LÜ%)¨+×*<Ñ*<×*CÑ*CÓ*EÓ%Fà15·±×1HÑ1HØ$-Ð$9õ2"ç"(¡&£(ð2+ôJñ2+ Ið .7×-=Ñ-=Ö-? Eð	 !&× 2Ô 2ñ .@ñ	 !3ñ2+òJõ &˜Fó *0 Ø#(×#4×#4Ò#4Ø$0×$7Ñ$7Ø(,×(NÑ(NØ,5Ø,6Ø,1Ø,0¯M©Mó	)*ö%&ñ *0ð !×.Ñ.Ø )Ü *× 6Ò 6Ø-<×-AÑ-AØ-8×-=Ñ-=ô!"ð .:ð /ô ð JX×/Ñ/°	Ð0EÑFà /× 9Ô 9Ø /× :Ó :ð6Ð2ð %0×$9Ô$9Ø$/×$:Ó$:ð!"ð !×3Ñ3Ð4JÑKð !×/Ñ/×6Ñ6¸Ð7VÔWØ ×/Ñ/×3Ñ3°YÐ4KÔLÛ!ôi 2@ó &:ùó$Js   Å,J3c                ó  € V P                   V P                  ,          pV P                  V,
          pV P                  V,
          p\	        \        W P                  RR7      \        W0P                  RR7      4      pV EFü  w  rVV P                  P                  WV3,          p/ pRp	VP                  P                  4        F¡  w  r«VP                  '       g   K  VP                  P                  '       dJ   VP                  '       d   VP                  P                  p	M VP                  P                  '       g   W¸V
&   \        VP                  RR4      '       g   K�  W¸V
&   K£  	  VP                   P#                  R4      pVP                   P#                  R4      pVP                   P#                  RR4      pVP                   P#                  RR4      p\%        WVR\$        P&                  P(                  4      .pVP*                   EFV  p\-        V\.        4      '       g   K  R	V9   g   K%  VP1                  R	^4      w  ppVP3                  \%        VVR\$        P&                  P4                  4      4       V P6                  P                  P9                  VV34      pV P                  P                  P9                  VV34      pV'       g   KÇ  V'       g   KÑ  \;        VP                  4      P=                  VP                  4      P?                  VP                  4      pV F8  pVP3                  \%        VVV\$        P&                  P(                  4      4       K:  	  EKY  	  V	'       dB   VP3                  \%        . \A        W•V4      ORN\$        P&                  P4                  N5!  4       T PC                  T\D        PF                  ! VPH                  VP                  P                  4        Uu. uF  pV^ ,          V9  g   K  VNK  	  upVP                   VP*                  VPJ                  R
7      VRR7       VP                   P9                  RR4      '       g   EKÞ  \        VP                  4       4       F•  w  ppV PM                  VVVV P                  4      pVP3                  \%        WVR\$        P&                  P4                  4      4       V PC                  V\D        PN                  ! VVVR7      \Q        \;        V4      4      R7       K—  	  V'       dt   V PC                  V\D        PR                  ! VVR7      \%        VVV\$        P&                  P4                  4      \%        WVR\$        P&                  P4                  4      .R7       \        V4       Uu. uF(  p\%        WVV\$        P&                  P4                  4      NK*  	  ppVP3                  \%        WVR\$        P&                  P4                  4      4       V F-  pV PC                  V\D        PT                  ! VVR7      VR7       K/  	  V F-  pV PC                  V\D        PV                  ! VVR7      VR7       K/  	  V'       d+   V PC                  V\D        PX                  ! VVR7      VR7       V P                  PZ                  pWV3V P\                  9   g   EK?  VWV3,          P                  4        F¡  w  ppV P                  P                  V,          pVP                  4        Fj  w  p p!V PC                  VP^                  \D        P`                  ! VPH                  V V!R7      \%        VVR\$        P&                  P4                  4      .R7       Kl  	  K£  	  EKÿ  	  R# u upi u upi )a:  
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)rd   ÚreverseNr¶   ÚindexesÚconstraintsÚunique_togetherr  r¾   ©rq   ro   r„   r  Úmanagers)rÎ   r  rw   ©r(   rq   rr   r!  ©rq   r  ©r(   Úindex©r(   Ú
constraint©rq   r7  )1r~   r€   r�   rƒ   r   rk   r  r:   r	   ro   rZ   rl   r>   Úprimary_keyÚparent_linkr·   r„   rm   r   r%   r   r  rV   r  r¿   rn   r   r9   r…   r}   Ú
differenceÚintersectionr   r  r
   rü   rq   r9  r'  rÿ   rW   r  ÚAddIndexÚAddConstraintr  r$  r   r¨   r  )"r+   Úold_keysr*  Úadded_unmanaged_modelsÚall_added_modelsr¨   r(   r©   Úrelated_fieldsÚprimary_key_relr0   rr   r5  r6  r7  r  rÎ   r  Úbase_app_labelÚ	base_nameÚold_base_model_stateÚnew_base_model_stateÚremoved_base_fieldsÚremoved_base_fieldÚdrq   Úrelated_dependenciesr=  r?  r$  Úrelated_model_keyÚrelated_model_stateÚrelated_field_nameÚrelated_fields"   &                                 r$   r�   Ú-MigrationAutodetector.generate_created_models‰  sø  € ð ×&Ñ&¨×)@Ñ)@Õ@ˆØ×*Ñ*¨XÕ5ˆØ!%×!8Ñ!8¸8Õ!CÐÜ Ü�<×%=Ñ%=ÀtÔLÜÐ)×/GÑ/GÐQUÔVó
Ðô &6Ñ!ˆIØŸ-™-×.Ñ.¨yÐ/DÕEˆKàˆNØ"ˆOØ%0×%7Ñ%7×%=Ñ%=Ö%?Ñ!�
Ø×%×%Ò%Ø×)Ñ)×/×/Ð/Ø ×,×,Ð,Ø.3×.@Ñ.@×.FÑ.F™OØ!&×!3Ñ!3×!?×!?Ð!?Ø9>¨:Ñ6Ü˜u×1Ñ1°9¸d×CÔCØ5: zÓ2ñ &@ð "×)Ñ)×-Ñ-¨iÓ8ˆGØ%×-Ñ-×1Ñ1°-Ó@ˆKØ)×1Ñ1×5Ñ5Ð6GÈÓNˆOØ$/×$7Ñ$7×$;Ñ$;Ø'¨ó%Ð!ô
 $Ø¨4Ô1D×1IÑ1I×1PÑ1PóðˆLð $×)Õ)�Ü˜d¤C×(Ô(¨S°D®[Ø04·
±
¸3ÀÓ0BÑ-�N IØ ×'Ñ'Ü+Ø*Ø%Ø Ü/×4Ñ4×;Ñ;ó	ôð ,0¯?©?×+AÑ+A×+EÑ+EØ'¨Ð3ó,Ð(ð ,0¯=©=×+?Ñ+?×+CÑ+CØ'¨Ð3ó,Ð(÷ ,Ñ+×0DÑ0DäÐ 4× ;Ñ ;Ó<ß'™ZØ 4× ;Ñ ;ó÷ *™\¨+×*<Ñ*<Ó=ð ,ó 3FÐ.Ø(×/Ñ/Ü 3Ø$2Ø$-Ø$6Ü$7×$<Ñ$<×$CÑ$Có	!"öô 3Fñ7 *÷J Ø×#Ñ#Ü'ð Ü)¨/ÀjÓQðàðô ,×0Ñ0×7Ñ7óôð ×ÑØÜ×&Ò&Ø$×)Ñ)ð "-×!3Ñ!3×!9Ñ!9Ô!;óá!;˜AØ˜Q�4 ~Ñ5÷ ˜Ù!;ñð
 (×/Ñ/Ø%×+Ñ+Ø(×1Ñ1ô
ð *Øð ô ð& ×&Ñ&×*Ñ*¨9°d×;Ò;Úô  & n×&:Ñ&:Ó&<Ö=‘��eØ#×EÑEØØØØ—M‘Mó	 �ð ×#Ñ#Ü'Ø!¨tÔ5H×5MÑ5M×5TÑ5Tóôð ×"Ñ"ØÜ×'Ò'Ø#-Ø!Ø#ôô
 "&¤c¨,Ó&7Ó!8ð #ö ñ  >÷0 %Ø×"Ñ"ØÜ×6Ò6Ø'Ø.Côô
 ,Ø%Ø&Ø1Ü/×4Ñ4×;Ñ;ó	ô ,Ø%°4Ô9L×9QÑ9Q×9XÑ9Xóð
"ð #ô ô, # >Ô2ó	$ñ 3�Dô $Ø¨4Ô1D×1IÑ1I×1PÑ1Pöñ 3ð	 !ð $ð !×'Ñ'Ü#Ø¨4Ô1D×1IÑ1I×1PÑ1Póôó
 !�Ø×"Ñ"ØÜ×'Ò'Ø#-Ø#ôð "6ð #ö ñ !ó *�
Ø×"Ñ"ØÜ×,Ò,Ø#-Ø#-ôð "6ð #ö ñ *÷ Ø×"Ñ"ØÜ×2Ò2Ø'Ø(7ôð "6ð #ô ð Ÿ™×/Ñ/ˆIØÐ&¨$×*=Ñ*=×=Ø9BØÐ)õ:ç‘%“'ò:Ñ5Ð% ~ð +/¯-©-×*>Ñ*>Ð?PÕ*QÐ'Ø=K×=QÑ=QÖ=SÑ9Ð*¨MØ×*Ñ*Ø/×9Ñ9Ü&×1Ò1Ø+>×+CÑ+CØ%7Ø&3ôô !4Ø$-Ø$.Ø$(Ü$7×$<Ñ$<×$CÑ$Có	!"ð*ð +ö ó >Tô	:óo &6ùò^ùò|$s   Ï*]?Ï?]?Ö.^c                óÞ  € V P                   V P                  ,
          p\        V4       EF?  w  r#V P                  P                  W#3,          pVP
                  P                  R4      '       g   Q h\        W#R\        P                  P                  4      .pVP                   Fm  p\        V\        4      '       g   K  RV9   g   K$  VP                  R^4      w  rxVP                  \        VVR\        P                  P                  4      4       Ko  	  V P!                  V\"        P$                  ! VP&                  . VP
                  VP                  VP(                  R7      VR7       EKB  	  R# )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.
rx   Nr¾   r8  r!  )r‚   r   rk   r:   r	   r„   r…   r   r%   r   r  rV   r  r¿   rn   r   r  r
   rü   rq   r9  )	r+   Úaddedr¨   r(   r©   rÎ   r  rL  rM  s	   &        r$   r�   Ú.MigrationAutodetector.generate_created_proxiesg  s<  € ð ×#Ñ# d×&9Ñ&9Õ9ˆÜ%+¨E§]Ñ!ˆIØŸ-™-×.Ñ.¨yÐ/DÕEˆKØ×&Ñ&×*Ñ*¨7×3Ò3Ð3Ð3ô $Ø¨4Ô1D×1IÑ1I×1PÑ1PóðˆLð $×)Ô)�Ü˜d¤C×(Ô(¨S°D®[Ø04·
±
¸3ÀÓ0BÑ-�NØ ×'Ñ'Ü+Ø*Ø%Ø Ü/×4Ñ4×;Ñ;ó	öñ *ð ×ÑØÜ×&Ò&Ø$×)Ñ)ØØ'×/Ñ/Ø%×+Ñ+Ø(×1Ñ1ôð *ð ÷ ó- &3r#   c                óp  € V P                   V P                  ,          pV P                  V,
          pV P                  V,
          p\	        \        V4      \        V4      4      pV EFÍ  w  rVV P                  P                  WV3,          p/ pVP                  P                  4        F\  w  ršV
P                  '       g   K  V
P                  P                  '       d   W¨V	&   \        V
P                  RR4      '       g   KX  W¨V	&   K^  	  VP                  P                  RR4      pV'       d)   V P                  V\         P"                  ! VRR7      4       VP                  P                  RR4      ;p'       d<   V F5  pV P                  V\         P$                  ! VVP&                  R7      4       K7  	  VP                  P                  RR4      ;p'       d<   V F5  pV P                  V\         P(                  ! VVP&                  R7      4       K7  	  \        V4       FR  pV P                  V\         P*                  ! VVR7      \-        VVV\,        P.                  P0                  4      .R7       KT  	  . pV P                  P2                  pVWV3,          P                  4        F   w  w  pppVP                  4        Fƒ  w  ršVP5                  \-        VVV	\,        P.                  P6                  4      4       V
P8                  '       d   KN  VP5                  \-        VVV	\,        P.                  P:                  4      4       K…  	  K¢  	  \        V4       F7  pVP5                  \-        WVV\,        P.                  P6                  4      4       K9  	  V P<                  P?                  WWP@                  34      pV'       d6   VP5                  \-        . VO\,        P.                  P6                  N5!  4       V P                  V\         PB                  ! VP&                  R	7      \E        \G        V4      4      R7       EKÐ  	  R# )
aN  
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¶   Nr7  r@  r5  ©r(   rq   r6  r!  ©rq   )$r�   rƒ   r~   r€   r   rk   r9   r	   ro   rZ   rl   r>   r·   r„   rm   r  r
   r  r  rq   r  r   r   r%   r!   r$  rn   r   Úmany_to_manyr   r¯   r…   rý   r  rW   r}   )r+   Únew_keysÚdeleted_modelsÚdeleted_unmanaged_modelsÚall_deleted_modelsr¨   r(   r©   rJ  r0   rr   r7  r5  r=  r6  r?  rq   rÎ   r$  Úrelated_object_app_labelÚobject_nameÚrelation_related_fieldsÚthrough_users   &                      r$   rŒ   Ú-MigrationAutodetector.generate_deleted_models’  s»  € ð ×&Ñ&¨×)@Ñ)@Õ@ˆØ×,Ñ,¨xÕ7ˆØ#'×#:Ñ#:¸XÕ#EÐ Ü"Ü�>Ó"¤FÐ+CÓ$Dó
Ðô &8Ñ!ˆIØŸ/™/×0Ñ0°Ð1FÕGˆKàˆNØ%0×%7Ñ%7×%=Ñ%=Ö%?Ñ!�
Ø×%×%Ò%Ø×)Ñ)×/×/Ð/Ø5: zÑ2Ü˜u×1Ñ1°9¸d×CÔCØ5: zÓ2ñ &@ð *×1Ñ1×5Ñ5Ð6GÈÓNˆOßØ×"Ñ"ØÜ×2Ò2Ø'Ø(,ôôð &×-Ñ-×1Ñ1°)¸TÓBÐBˆwÖBÛ$�EØ×&Ñ&Ø!Ü"×.Ò.Ø'1Ø!&§¡ôöñ %ð *×1Ñ1×5Ñ5°mÀTÓJÐJˆ{ÖJÛ"-�JØ×&Ñ&Ø!Ü"×3Ò3Ø'1Ø!+§¡ôöñ #.ô ˜~Ö.�Ø×"Ñ"ØÜ×*Ò*Ø#-Ø!ôô
 ,Ø%Ø&Ø Ü/×4Ñ4×OÑOó	ð"ð #ö ñ /ð( ˆLØŸ™×1Ñ1ˆIð +4°IÐ4IÕ*J×*PÑ*PÖ*Rñ'ñ Ø(ØØ&Ø)@×)FÑ)FÖ)HÑ%�JØ ×'Ñ'Ü+Ø4Ø'Ø&Ü/×4Ñ4×;Ñ;ó	ôð !×-×-Ò-Ø$×+Ñ+Ü/Ø 8Ø +Ø *Ü 3× 8Ñ 8× >Ñ >ó	öó *Iñ +Sô( ˜~Ö.�Ø×#Ñ#Ü'Ø!¨tÔ5H×5MÑ5M×5TÑ5Tóöñ /ð  ×-Ñ-×1Ñ1°9×>TÑ>TÐ2UÓVˆLßØ×#Ñ#Ü'ÐW¨ÐWÔ7J×7OÑ7O×7VÑ7VÓWôð ×ÑØÜ×&Ò&Ø$×)Ñ)ôô "¤# lÓ"3Ó4ð ÷ óC &8r#   c                óL  € V P                   V P                  ,
          p\        V4       Fw  w  r#V P                  P                  W#3,          pVP
                  P                  R4      '       g   Q hV P                  V\        P                  ! VP                  R7      4       Ky  	  R# )z*Make DeleteModel options for proxy models.rx   r^  N)r   r‚   rk   r9   r	   r„   r…   r  r
   r  rq   )r+   Údeletedr¨   r(   r©   s   &    r$   rŽ   Ú.MigrationAutodetector.generate_deleted_proxies  s…   € à×%Ñ%¨×(;Ñ(;Õ;ˆÜ%+¨G¦_Ñ!ˆIØŸ/™/×0Ñ0°Ð1FÕGˆKØ×&Ñ&×*Ñ*¨7×3Ò3Ð3Ð3Ø×ÑØÜ×&Ò&Ø$×)Ñ)ôöó &5r#   c                ó  € . V n         V P                  P                  4       p\        V P                  V,
          4       EFF  w  r#pV P
                  P                  W#3V4      pV P                  P                  W%3,          pV P                  P                  W#3,          pVP                  V4      pV P                  V4      p	\        WP                  ,
          4       EF¤  w  r«pW¢8X  g   K  W³8X  g   K  VP                  V4      pV P                  V4      pVP                  '       dh   VP                  P                  '       dL   RV^,          9   d>   V^,          R,          pWðP                  9   d   V P                  V,          V^,          R&   VP                  V4       VP!                  4       ^,          pWé8X  g;   VR,          V	R,          8X  g   K÷  \#        V^,          VR7      V	^,          8X  g   EK  V P$                  P'                  W<WH4      '       g   EK?  V P                   P)                  V
VVP*                  VVVVV34       VP-                  W«V34       VP/                  W#V34       VV P0                  W#V3&    EKD  	  EKI  	  R# )zWork out renamed fields.rj   :r   é   N)Ú	db_columnN)Úrenamed_operationsr±   Úcopyrk   r²   r°   r…   r9   r	   r:   Ú	get_fieldrM   rl   r>   r"  Úset_attributes_from_nameÚget_attname_columnrY   r;   Ú
ask_renamern   rn  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“   Ú+MigrationAutodetector.create_renamed_fields  sV  € à"$ˆÔØ×,Ñ,×1Ñ1Ó3ˆÜ17Ø×Ñ .Õ0÷2
Ñ-ˆI :ð "×0Ñ0×4Ñ4ØÐ'¨óˆNð #Ÿo™o×4Ñ4°YÐ5NÕOˆOØ"Ÿm™m×2Ñ2°9Ð3HÕIˆOØ#×-Ñ-¨jÓ9ˆEà×-Ñ-¨eÓ4ˆIÜAGØ×!4Ñ!4Õ4÷BÑ=�¨~ð !Ö-°.Ö2NØ /× 9Ñ 9¸.Ó I�IØ$(×$9Ñ$9¸)Ó$D�Mà×*×*Ð*Ø!×.Ñ.×4×4Ð4Ø  M°!Õ$4Ô4à%2°1Õ%5°dÕ%;˜
Ø%×)@Ñ)@Ô@Ø59×5LÑ5LÈZÕ5X˜M¨!Õ,¨TÑ2Ø×6Ñ6°~ÔFØ$-×$@Ñ$@Ó$BÀ1Õ$E�MØ$Ô1ð & cÕ*¨i¸­nÖ<Ü  ¨qÕ!1¸]ÔKØ$ Q�<÷(ð  Ÿ?™?×5Ñ5Ø&¸
÷õ ð !×3Ñ3×:Ñ:à$1Ø$2Ø$-×$7Ñ$7Ø$2Ø$-Ø$.Ø$)Ø$.ð	!"ôð +×1Ñ1Ø!.ÀÐ Oôð +×.Ñ.°	ÀzÐ/RÔSà .ð !×/Ñ/°	ÀzÐ0QÑRó "ô[Bó2
r#   c           
     ó¢  € V P                    F¾  w  ppppppppW7P                  8w  d@   VP                  4       p	WIn        V P	                  V\
        P                  ! VVV	R7      4       V P	                  V\
        P                  ! VVVR7      4       V P                  P                  WV34       V P                  P                  WVV34       KÀ  	  R# )z Generate RenameField operations.r:  )r(   r  r   N)ro  rn  Úclonerq   r  r
   r  ÚRenameFieldr±   r)  r†   )
r+   r-  r.  Úrem_db_columnrw  r¨   r(   rr   r0   Úaltered_fields
   &         r$   r˜   Ú-MigrationAutodetector.generate_renamed_fieldsV  sÒ   € ð ×$Ô$ñ	
ØØØØØØØØð
 §¡Ô/Ø %§¡£�Ø%3Ô"Ø×"Ñ"ØÜ×)Ò)Ø#-Ø+Ø+ôôð ×ÑØÜ×&Ò&Ø)Ø+Ø'ôôð ×Ñ×&Ñ&¨À~Ð'VÔWØ×Ñ×#Ñ# Y¸JÐ$GÖHó1 %r#   c                óŠ   € \        V P                  V P                  ,
          4       F  w  rpV P                  WV4       K  	  R# )zMake AddField operations.N)rk   r²   r±   Ú_generate_added_fieldr³   s   &   r$   rœ   Ú+MigrationAutodetector.generate_added_fields{  s<   € ä17Ø×Ñ $×"5Ñ"5Õ5ö2
Ñ-ˆI :ð ×&Ñ& y¸jÖIó2
r#   c           
     óò  € V P                   P                  W3,          P                  V4      p\        WV\        P                  P
                  4      .pVP                  '       dJ   VP                  P                  '       d.   VP                  V P                  VVVV P                   4      4       VP                  '       d!   VP                  V P                  V4      4       \        P                  \        P                  \        P                  3p\        P                  \        P                   \        P"                  3pVP$                  ;'       gŸ    VP'                  4       ;'       g‡    VP)                  4       ;'       go    VP*                  ;'       g[    VP,                  ;'       d    VP.                  ;'       g3    \1        WF4      ;'       d    VP2                  ;'       g    \1        WG4      pV'       gu   VP5                  4       p\1        WF4      '       d4   VP6                  '       d"   V P8                  P;                  W24      Vn        M V P8                  P?                  W24      Vn        VP@                  '       dM   VP'                  4       '       d7   \C        VP<                  4      '       d   V P8                  PE                  W24       V PG                  V\H        PJ                  ! VVVVR 7      VR7       R# )©r(   rq   rr   Úpreserve_defaultr!  N)&r:   r	   rq  r   r%   r   rl   r>   r&  r'  Ú	generatedÚ%_get_dependencies_for_generated_fieldÚ	DateFieldÚDateTimeFieldÚ	TimeFieldÚ	AutoFieldÚSmallAutoFieldÚBigAutoFieldÚnullÚhas_defaultÚhas_db_defaultr_  ÚblankÚempty_strings_allowedrV   Úauto_nowr~  Ú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_fieldsrˆ  s	   &&&&     r$   r„  Ú+MigrationAutodetector._generate_added_field‚  s`  € Ø—‘×$Ñ$ YÐ%:Õ;×EÑEÀjÓQˆô  Ø zÔ3F×3KÑ3K×3RÑ3Róð
ˆð ××Ð %×"4Ñ"4×":×":Ð":Ø×ÑØ×6Ñ6ØØØØ—M‘Mó	ôð �?�?ˆ?Ø×Ñ × JÑ JÈ5Ó QÔRô ×'Ñ'¬×)=Ñ)=¼v×?OÑ?OÐPˆÜ×'Ñ'¬×)>Ñ)>Ä×@SÑ@SÐTˆà�J‰J÷ 0ð 0Ø× Ñ Ó"÷0ð 0à×#Ñ#Ó%÷0ð 0ð ×!Ñ!÷0ð 0ð —‘×;Ð; × ;Ñ ;÷	0ð 0ô
 ˜5Ó.×AÐA°5·>±>÷0ð 0ô ˜5Ó.ð 	÷  Ø—K‘K“MˆEÜ˜%×-Ò-°%×2D×2DÐ2DØ $§¡× IÑ IØó!�•ð !%§¡× EÑ EØó!�”ð �<�<ˆ<˜E×-Ñ-×/Ò/´H¸U¿]¹]×4KÒ4KØ�O‰O×@Ñ@ÀÔXØ×ÑØÜ×ÒØ%ØØØ!1ô	ð &ð 	ö 		
r#   c                óŠ   € \        V P                  V P                  ,
          4       F  w  rpV P                  WV4       K  	  R# )zMake RemoveField operations.N)rk   r±   r²   Ú_generate_removed_fieldr³   s   &   r$   r›   Ú-MigrationAutodetector.generate_removed_fieldsº  s<   € ä17Ø×Ñ $×"5Ñ"5Õ5ö2
Ñ-ˆI :ð ×(Ñ(¨À
ÖKó2
r#   c                ó\  € V P                  V\        P                  ! VVR 7      \        VVV\        P                  P
                  4      \        VVV\        P                  P                  4      \        VVV\        P                  P                  4      .V P                  WV4      OR7       R# )r]  r!  N)	r  r
   r   r   r%   r   r    r!   Ú3_get_generated_field_dependencies_for_removed_fieldr³   s   &&&&r$   r¢  Ú-MigrationAutodetector._generate_removed_fieldÁ  s±   € Ø×ÑØÜ×"Ò"Ø%Øôô $ØØØÜ'×,Ñ,×=Ñ=ó	ô $ØØØÜ'×,Ñ,×?Ñ?ó	ô $ØØØÜ'×,Ñ,×GÑGó	ðð& ×IÑIØ¨:óð'ð 	ö  	
r#   c                ó`
  € \        V P                  V P                  ,          4       EFø  w  rpV P                  P	                  W3V4      pV P
                  P	                  WV3V4      pV P                  P                  W3,          P                  V4      pV P                  P                  W3,          P                  V4      p. p\        VR4      '       Ed    \        VP                  RR4      '       Edâ   \        VP                  P                  W4      p	W�P                  9   d&   VP                  P                  VP                  n        \        VP                  RR4      p
V
'       db   . V	OV
N5pW°P
                  9   dK   VP                  P                  VP                  n        VP                  P                  VP                  n        \        VRR4      pV'       dË   W3p\!        V Uu. uF$  pV P
                  P	                  . VOVN5V4      NK&  	  up4      Vn        \!        VP$                   Uu. uF$  pV P
                  P	                  . V	OVN5V4      NK&  	  up4      Vn        \        VRR4      ;p'       d+   \!        V4      Vn        \!        VP$                  4      Vn        VP'                  V P)                  VVVV P                  4      4       \        VR4      '       ds   \        VP                  RR4      '       dV   \        VP                  P*                  W4      p	W�P                  9   d&   VP                  P*                  VP                  n        V P-                  V4      pV P-                  V4      pVV8w  g   EK`  WS8X  g   EKi  VP.                  ;'       d    VP.                  pVP.                  '       * ;'       d    VP.                  '       * pT;'       d"    V^,          R,          V^,          R,          8g  pV'       g	   V'       dç   V'       gß   RpVP0                  '       dš   VP0                  '       gˆ   VP3                  4       '       gr   VP5                  4       '       g\   VP.                  '       gJ   VP7                  4       pV P8                  P;                  W24      pV\        P<                  Jd
   VVn        R	pMTpV PA                  V\B        PD                  ! VVVVR
7      VR7       EKÔ  V PG                  WV4       V PI                  WV4       EKû  	  R# u upi u upi )zX
Make AlterField operations, or possibly RemovedField/AddField if alter
isn't possible.
rl   r>   Nr0   Úfrom_fieldsr¶   rj   TFr‡  r!  )%rk   r±   r²   r°   r…   r|   r9   r	   rq  r:   ra   r·   rl   r   r>   r0   rX   r¨  Ú	to_fieldsr&  r'  r¶   rM   r_  r‘  r’  r“  r~  r;   Úask_not_null_alterationÚNOT_PROVIDEDr™  r  r
   r  r¢  r„  )r+   r¨   r(   r0   r¸   Úold_field_namerx  Ú	new_fieldrÎ   Ú
rename_keyÚremote_field_nameÚto_field_rename_keyr¨  Úfrom_rename_keyÚ
from_fieldÚto_fieldÚold_from_fieldsry  Únew_field_decÚboth_m2mÚneither_m2mÚtarget_changedrˆ  rr   Únew_defaults   &                        r$   r�   Ú-MigrationAutodetector.generate_altered_fieldsä  s¬  € ô
 28Ø×Ñ $×"5Ñ"5Õ5÷2
Ñ-ˆI :ð "×0Ñ0×4Ñ4ØÐ'¨óˆNð "×0Ñ0×4Ñ4Ø¨
Ð3°ZóˆNð Ÿ™×.Ñ.¨yÐ/HÕI×SÑSØóˆIð Ÿ™×,Ñ,¨YÐ-BÕC×MÑMØóˆIð ˆLô �y .×1Ó1´gØ×&Ñ&¨°÷7ó 7ô .Ø×*Ñ*×0Ñ0°)ó�
ð ×!4Ñ!4Ô4Ø3<×3IÑ3I×3OÑ3O�I×*Ñ*Ô0ä$+¨I×,BÑ,BÀLÐRVÓ$WÐ!ß$Ø*J¨JÐ*JÐ8IÑ*JÐ'Ø*×.AÑ.AÔAð 8A×7MÑ7M×7SÑ7S˜	×.Ñ.Ô4à%×2Ñ2×=Ñ=ð "×.Ñ.Ô9ô
 & i°ÀÓE�ßØ'0Ð&=�OÜ,1ñ
 /:ó	ñ /: 
ð !×/Ñ/×3Ñ3Ø > /Ð >°:Ñ >À
öñ /:ñ	ó-�IÔ)ô +0ð -6×,?Ò,?óá,? ð !×/Ñ/×3Ñ3Ð4K°jÐ4KÀ(Ñ4KÈXÖVÙ,?ñó+�IÔ'ô +2°)¸]ÈDÓ*QÐQ�ÖQÜ05°oÓ0F˜	Ô-Ü.3°I×4GÑ4GÓ.H˜	Ô+Ø×#Ñ#Ø×:Ñ:Ø!Ø"Ø!ØŸ™ó	ôô �y .×1Ò1´gØ×&Ñ&¨	°4÷7ò 7ô .Ø×*Ñ*×2Ñ2°Ió�
ð ×!4Ñ!4Ô4Ø5>×5KÑ5K×5SÑ5S�I×*Ñ*Ô2Ø ×1Ñ1°)Ó<ˆMØ ×1Ñ1°)Ó<ˆMð  ×-°.×2NØ$×1Ñ1×LÐL°i×6LÑ6L�Ø"+×"8Ñ"8Ô8×WÐWÀ×AWÑAWÔ=W�à×QÐQ ¨qÕ!1°$Õ!7¸=ÈÕ;KÈDÕ;QÑ!Qð ÷ §·^à'+Ð$à!ŸŸ˜Ø )§§ Ø )× 5Ñ 5× 7Ò 7Ø )× 8Ñ 8× :Ò :Ø )× 6× 6Ð 6à )§¡Ó 1˜Ø&*§o¡o×&MÑ&MØ&ó'˜ð '¬f×.AÑ.AÓAØ,7˜EœMØ/4Ð,øà )˜Ø×&Ñ&Ø!Ü"×-Ò-Ø'1Ø!+Ø"'Ø-=ô	ð &2ð '÷ 	ð ×0Ñ0°È
ÔSØ×.Ñ.¨yÀj×Qóq2
ùòZùòs   Ç,*T&
È5*T+
c           
     ó¬  € \         P                  P                  p\        \        4      V n        \        V P                  4       EF÷  w  r#V P                  P                  W#3V4      pV P                  P                  W$3,          pV P                  P                  W#3,          pVP                  V,          pVP                  V,          pV U	u. uF  q™V9  g   K  V	NK  	  p
p	V U	u. uF  q™V9  g   K  V	NK  	  pp	. p. p. pV
 F¤  pVP                  4       pV^,          P                  R4      pV Fs  pVP                  4       pV^,          P                  R4      pVV8X  g   K4  VV8w  g   K=  VP!                  VVR34       VP!                  V4       VP!                  V4       Ku  	  K¦  	  V P#                  \         P$                  P                  4       EF  w  pppppVV8w  g   VV8w  d   K  VP'                  V4      pV FÛ  p. pV
 Fb  pVP                  4       w  pppV'       d   K!  VP(                  \	        V4      8X  g   K=  \+        V4      RR08X  g   KQ  VP!                  V4       Kd  	  \-        V4      ^8X  g   K  V^ ,          p VP!                  V 4       VP!                  RV P.                  V34       V P
                  VV3,          P!                  V4       KÝ  	  EK  	  V
 U	u. uF  q™V9  g   K  V	NK  	  p
p	V U	u. uF  q™V9  g   K  V	NK  	  pp	V P0                  P3                  W#3RV
RVRV//4       EKú  	  R# u up	i u up	i u up	i u up	i )rm  rq   Nro   Úadded_indexesÚremoved_indexesÚrenamed_indexes)r
   rE  Úoption_namer   rW   Úrenamed_index_together_valuesrk   r¬   r°   r…   r9   r	   r:   r„   rS   rm   rn   Ú$_get_altered_foo_together_operationsr  rC  ro   r}   rÈ   rq   rz   rÖ   )!r+   r¿  r¨   r(   r¸   r¹   ru  Úold_indexesÚnew_indexesÚidxr¼  r½  r¾  Úremove_from_addedÚremove_from_removedÚ	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^   rg   Úrenamed_indexs!   &                                r$   r”   Ú,MigrationAutodetector.create_altered_indexesc  sV  € Ü ×)Ñ)×5Ñ5ˆÜ-8¼Ó->ˆÔ*ä%+¨D×,@Ñ,@×%AÑ!ˆIØ!×0Ñ0×4Ñ4ØÐ'¨óˆNð #Ÿo™o×4Ñ4°YÐ5NÕOˆOØ"Ÿm™m×2Ñ2°9Ð3HÕIˆOà)×1Ñ1°+Õ>ˆKØ)×1Ñ1°+Õ>ˆKÙ,7ÓR©K SÀkÑ;QŸS˜S©KˆMÐRÙ.9ÓT©k sÈÑ=SŸs˜s©kˆOÐTØ ˆOà "ÐØ"$ÐÛ*�	Ø )× 5Ñ 5Ó 7�Ø!.¨qÕ!1×!5Ñ!5°fÓ!=�Û!0�IØ$-×$9Ñ$9Ó$;�MØ%2°1Õ%5×%9Ñ%9¸&Ó%A�Nð &¨Ö6Ø*¨nÖ<à'×.Ñ.°ÀÐPTÐ/UÔVØ)×0Ñ0°Ô;Ø+×2Ñ2°9Ö=ó "1ñ +ð* ×:Ñ:Ü×-Ñ-×9Ñ9÷ñØØØ(Ø)Øð
 Ð!9Ô9Ø!Ð%>Ô>áØ!*×!5Ñ!5°iÓ!@�Û.<Ð*Ø57Ð2Û%2˜	Ø*3×*?Ñ*?Ó*A™˜˜4 ÷ !%¡Ø )× 0Ñ 0´DÐ9OÓ4PÖ PÜ # F£°¸Ð/AÖ Aà:×AÑAÀ)ÖLñ &3ô Ð9Ó:¸aÖ?Ø(FÀqÕ(I˜Ø)×0Ñ0°Ô?Ø'×.Ñ.Ø! =×#5Ñ#5Ð7MÐNôð ×:Ñ:Ø4Ð6OÐOõç ™&Ð!7Ö8ô) /=ññB  -óÙ,˜Ð;LÑ0L—�™}ð ð ñ  /óÙ.˜Ð=PÑ2P—�™ð ð ð × Ñ ×'Ñ'àÐ+Ø'¨Ø)¨?Ø)¨?ð.ð÷óW &Bùò SùÚTùòtùòs0   ÃMÃMÃ&MÃ3MË)MË6MÌMÌMc           
     óè   € V P                   P                  4        FS  w  w  rpV P                  W4      pVR ,           F-  pV P                  V\        P
                  ! VVR7      VR7       K/  	  KU  	  R# )r¼  r<  r!  N)rz   rZ   Ú_get_dependencies_for_modelr  r
   rE  )r+   r¨   r(   Úalt_indexesrÎ   r=  s   &     r$   r    Ú,MigrationAutodetector.generate_added_indexes¼  su   € Ø48×4HÑ4H×4NÑ4NÖ4PÑ0Ñ#ˆY [Ø×;Ñ;¸IÓRˆLØ$ _×5Ð5�Ø×"Ñ"ØÜ×'Ò'Ø#-Ø#ôð ".ð #ö ó 6ó 5Qr#   c           
     óÖ   € V P                   P                  4        FJ  w  w  rpVR ,           F5  pV P                  V\        P                  ! VVP
                  R7      4       K7  	  KL  	  R# )r½  r]  N)rz   rZ   r  r
   r  rq   )r+   r¨   r(   rÙ  r=  s   &    r$   r—   Ú.MigrationAutodetector.generate_removed_indexesÉ  s`   € Ø48×4HÑ4H×4NÑ4NÖ4PÑ0Ñ#ˆY [Ø$Ð%6×7Ð7�Ø×"Ñ"ØÜ×*Ò*Ø#-Ø"ŸZ™Zôöó 8ó 5Qr#   c                óÌ   € V P                   P                  4        FE  w  w  rpVR ,           F0  w  rEpV P                  V\        P                  ! VVVVR7      4       K2  	  KG  	  R# )r¾  )r(   r   r  Ú
old_fieldsN)rz   rZ   r  r
   ÚRenameIndex)r+   r¨   r(   rÙ  rÌ  rÉ  rÞ  s   &      r$   r™   Ú.MigrationAutodetector.generate_renamed_indexesÔ  sm   € Ø48×4HÑ4H×4NÑ4NÖ4PÑ0Ñ#ˆY [Ø>IØ!÷?ð ?Ñ:�°
ð ×"Ñ"ØÜ×*Ò*Ø#-Ø!/Ø!/Ø#-ô	öó?ó 5Qr#   c           	     ó&  € VP                  4       w  r4pVP                  4       w  rgpVP                   F  p	VP                  V	R 4       K  	  VP                   F  p	VP                  V	R 4       K  	  V P                   Fw  w  p
p
ppp
p
ppVP                  '       g   K   W½P                  8X  g   K2  VR,          p VP                  V4      p\        TR T T3,           TT^,           R  ,           4      TR&   Ky  	  W4V3WgV38g  #   \         d     K’  i ; i)Nro   )rS   Únon_db_attrsrm   ro  rn  r=  rÙ   rX   )r+   Úold_constraintÚnew_constraintÚold_pathÚold_argsÚ
old_kwargsÚnew_pathÚnew_argsÚ
new_kwargsÚattrrÔ  r€  rw  rr   r0   Ú
new_fieldsÚnew_field_idxs   &&&              r$   Ú+_constraint_should_be_dropped_and_recreatedÚAMigrationAutodetector._constraint_should_be_dropped_and_recreatedã  s*  € ð *8×)CÑ)CÓ)EÑ&ˆ˜JØ)7×)CÑ)CÓ)EÑ&ˆ˜Jà"×/Ô/ˆDØ�N‰N˜4 Ö&ñ 0à"×/Ô/ˆDØ�N‰N˜4 Ö&ñ 0ð ×$Ô$ñ	
ØØØØØØØØà��Š =·O±OÖ#CØ'¨Õ1�
ðØ$.×$4Ñ$4°ZÓ$@�Mô (-Ø˜~ Ð.Ø%Ð'õ(à  °Õ!2Ð!4Ð5õ6ó(�
˜8Ó$ñ %ð  JÐ/°HÈ
Ð3SÑSÐSøô "ô Úðús   Â9DÄDÄDc           
     óÄ  € \         P                  P                  p\        V P                  4       EF¡  w  r#V P
                  P                  W#3V4      pV P                  P                  W$3,          pV P                  P                  W#3,          pVP                  V,          pVP                  V,          p. p	. p
V F–  pV F�  pVP                  4       pVP                  4       pWÞ8w  g   K+  VP                  VP                  8X  g   KH  V P                  W¼4      '       d   Ka  V	P                  V4       V
P                  VP                  4       K�  	  K˜  	  V Uu. uF   pW÷9  g   K  VP                  V
9  g   K  VNK"  	  ppV Uu. uF   pWø9  g   K  VP                  V
9  g   K  VNK"  	  ppV P                  P!                  W#3R VRVRV	//4       EK¤  	  R# u upi u upi )Úadded_constraintsÚremoved_constraintsr{   N)r
   rF  r¿  rk   r¬   r°   r…   r9   r	   r:   r„   rS   rq   rî  rn   r{   rÖ   )r+   r¿  r¨   r(   r¸   r¹   ru  Úold_constraintsÚnew_constraintsÚalt_constraintsÚalt_constraints_nameÚold_cÚnew_cÚ	old_c_decÚ	new_c_decÚcÚadd_constraintsÚrem_constraintss   &                 r$   r•   Ú0MigrationAutodetector.create_altered_constraints  sÛ  € Ü ×.Ñ.×:Ñ:ˆÜ%+¨D×,@Ñ,@×%AÑ!ˆIØ!×0Ñ0×4Ñ4ØÐ'¨óˆNð #Ÿo™o×4Ñ4°YÐ5NÕOˆOØ"Ÿm™m×2Ñ2°9Ð3HÕIˆOà-×5Ñ5°kÕBˆOØ-×5Ñ5°kÕBˆOà ˆOØ#%Ð ã(�Û,�EØ %× 1Ñ 1Ó 3�IØ %× 1Ñ 1Ó 3�Ià!Ö.Ø!ŸJ™J¨%¯*©*Ö4Ø $× PÑ PØ!÷!ô !ð (×.Ñ.¨uÔ5Ø,×3Ñ3°E·J±JÖ?ó -ñ )ñ  )óá(�AØÑ+ô à01·±Ð>RÑ0R÷ �Ù(ð ð ñ )óá(�AØÑ+ô à01·±Ð>RÑ0R÷ �Ù(ð ð ð ×$Ñ$×+Ñ+àÐ+Ø+¨_Ø-¨Ø-¨ð.ð÷óM &Bùò6ùò
s$   ÅGÅ&GÅ9GÆGÆGÆ%Gc           
     óê   € V P                   P                  4        FT  w  w  pppV P                  W4      pVR ,           F-  pV P                  V\        P
                  ! VVR7      VR7       K/  	  KV  	  R# )rñ  r>  r!  N)r{   rZ   rØ  r  r
   rF  ©r+   r¨   r(   rõ  rÎ   r?  s   &     r$   r¡   Ú0MigrationAutodetector.generate_added_constraints9  s�   € ð #×6Ñ6×<Ñ<Ö>ññ 
ØØØØ×;Ñ;¸IÓRˆLØ-Ð.A×BÐB�
Ø×"Ñ"ØÜ×,Ò,Ø#-Ø#-ôð ".ð #ö ó Có ?r#   c           
     óØ   € V P                   P                  4        FK  w  w  pppVR ,           F5  pV P                  V\        P                  ! VVP
                  R7      4       K7  	  KM  	  R# )rò  r]  N)r{   rZ   r  r
   r  rq   )r+   r¨   r(   rõ  r?  s   &    r$   r–   Ú2MigrationAutodetector.generate_removed_constraintsI  sk   € ð #×6Ñ6×<Ñ<Ö>ññ 
ØØØØ-Ð.C×DÐD�
Ø×"Ñ"ØÜ×/Ò/Ø#-Ø'Ÿ_™_ôöó Eó ?r#   c                ó   € V P                   P                  4        F_  w  w  pppV P                  W4      pVR ,           F8  pV P                  V\        P
                  ! VVP                  VR7      VR7       K:  	  Ka  	  R# )r{   )r(   rq   r?  r!  N)r{   rZ   rØ  r  r
   ÚAlterConstraintrq   r   s   &     r$   r¢   Ú2MigrationAutodetector.generate_altered_constraintsW  sˆ   € ð #×6Ñ6×<Ñ<Ö>ññ 
ØØØØ×;Ñ;¸IÓRˆLØ-Ð.C×DÐD�
Ø×"Ñ"ØÜ×.Ò.Ø#-Ø'Ÿ_™_Ø#-ôð
 ".ð #ö ó Eó ?r#   c                ó  a€ R p\        SP                  R4      '       d   SP                  P                  pM•VP                  W3,          pVP	                  4        Fm  w  w  rgp\
        ;QJ d-    V3R lVP                  4        4       F  '       g   K   RM"	  RM! V3R lVP                  4        4       4      '       g   Kf  V RV 2p M	  \        SRR 4      p	V	e   Rp
T	pM\        VV V4      w  r«\        W«R \        P                  P                  4      .p\        SP                  RR 4      '       dY   \        SP                  P                  V V4      w  rÞVP                  \        VVR \        P                  P                  4      4       V# )	Nr>   c              3   óB   <"  € T F  pSVP                   8H  x € K  	  R # 5ir'   )rl   )rN   rW  rr   s   & €r$   rP   ÚJMigrationAutodetector._get_dependencies_for_foreign_key.<locals>.<genexpr>p  s#   øé € ð á)8˜ð ˜]×7Ñ7Ö7Û)8ùs   ƒTFr¾   Úswappable_settingr½   r¶   )ra   rl   r>   r$  rZ   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   &&f&           r$   r'  Ú7MigrationAutodetector._get_dependencies_for_foreign_keyh  s€  ø€ à!ÐÜ�5×%Ñ% w×/Ò/Ø!&×!3Ñ!3×!9Ñ!9Ñà%×/Ñ/°	Ð0EÕFˆIØAJÇÁÖARÑ=Ñ5Ð!°vß“3ô à)/¯©¬ó—3—3’3ô à)/¯©¬ó÷ ô ð -=Ð+=¸QÐ?PÐ>QÐ)RÐ&Ùñ BSô $ EÐ+>ÀÓEÐØÒ(Ø)ˆMØ/‰Oä-=Ø"ØØó.Ñ*ˆMô  Ø°Ô6I×6NÑ6N×6UÑ6Uóð
ˆô
 �5×%Ñ% y°$×7Ò7Ü5EØ×"Ñ"×*Ñ*ØØó6Ñ2Ðð
 ×ÑÜ#Ø%Ø'ØÜ'×,Ñ,×3Ñ3ó	ôð Ðr#   c           	     óJ  € . p\         P                  P                  VP                  4       UUu. uF  vr4VNK  	  ppp\	        V P
                  V P                  ,
          4      pV F³  w  rxp	V P                  P                   Wx3,          P                  V	4      p
V
P                  '       d   V
P                  P                  '       g   V
P                  V9   g   Kt  VP                  \        VVV
P                  \        P                  P                  4      4       Kµ  	  V# u uppi r'   )r	   ÚModelÚ_get_expr_referencesÚ
expressionrk   r²   r±   r:   rq  rl   r>   rq   rn   r   r%   r   )r+   rr   rÎ   rq   ÚlookupsÚreferenced_base_fieldsÚnewly_added_fieldsr¨   r(   Úadded_field_nameÚadded_fields   &&         r$   rŠ  Ú;MigrationAutodetector._get_dependencies_for_generated_field–  s  € Øˆô #)§,¡,×"CÑ"CÀE×DTÑDTÔ"Uô"
á"U��ó Ù"Uð 	ñ "
ô $ D×$7Ñ$7¸$×:MÑ:MÕ$MÓNÐÛ7IÑ3ˆIÐ#3ØŸ-™-×.Ñ.¨yÐ/DÕE×OÑOØ óˆKð ×(×(Ð(¨[×-EÑ-E×-K×-KÐ-KØ×!Ñ!Ð%;Ö;Ø×#Ñ#Ü'Ø!Ø"Ø#×(Ñ(Ü+×0Ñ0×7Ñ7ó	öñ 8Jð Ðùó)"
s   ¯Dc           	     ó:  a€ . pV P                   P                  W3,          pR  VP                  P                  4        4       pV FÒ  p\        ;QJ dF    V3R l\        P
                  P                  VP                  4       4       F  '       g   K   RM;	  RM7! V3R l\        P
                  P                  VP                  4       4       4      '       g   K“  VP                  \        VVVP                  \        P                  P                  4      4       KÔ  	  V# )c              3   óL   "  € T F  qP                   '       g   K  Vx € K  	  R # 5ir'   )r‰  )rN   Úfs   & r$   rP   Ú\MigrationAutodetector._get_generated_field_dependencies_for_removed_field.<locals>.<genexpr>³  s   é € ÐRÑ'B !ÇkÅkŸAšAÓ'Bùs   ‚$š
$c              3   ó0   <"  € T F  vrSV8H  x € K  	  R # 5ir'   r   )rN   rq   rÔ  r0   s   &  €r$   rP   r!  µ  s   øé € ð á S�H�Dð ˜dÖ"Û Sùs   ƒTF)r9   r	   ro   rÒ   rþ   r  r  r  rn   r   rq   r%   r   )r+   r¨   r(   r0   rÎ   r©   Úgenerated_fieldsrr   s   &&&f    r$   r¥  ÚIMigrationAutodetector._get_generated_field_dependencies_for_removed_field®  sÚ   ø€ ð ˆØ—o‘o×,Ñ,¨YÐ-BÕCˆÙR {×'9Ñ'9×'@Ñ'@Ô'BÓRÐÛ%ˆEß‹sô ä &§¡× AÑ AÀ%×BRÑBRÔ Só�s�sŠsô ä &§¡× AÑ AÀ%×BRÑBRÔ Só÷ ô ð ×#Ñ#Ü'Ø!Ø"ØŸ
™
Ü+×0Ñ0×7Ñ7ó	öñ &ð Ðr#   c           	     ó
  € . pV P                   P                  W3,          pVP                  P                  4        FD  pVP                  '       g   K  VP                  V P                  VVVV P                   4      4       KF  	  V# )z3Return foreign key dependencies of the given model.)r:   r	   ro   rÒ   r%  r&  r'  )r+   r¨   r(   rÎ   r©   rr   s   &&&   r$   rØ  Ú1MigrationAutodetector._get_dependencies_for_modelÃ  sw   € àˆØ—m‘m×*Ñ*¨9Ð+@ÕAˆØ ×'Ñ'×.Ñ.Ö0ˆEØ× × Ò Ø×#Ñ#Ø×:Ñ:Ø!Ø"ØØŸ™ó	öñ 1ð Ðr#   c              #  óš  a aa"  € \        S P                  4       EF¤  w  ooS P                  P                  SS3S4      pS P                  P
                  SV3,          pS P                  P
                  SS3,          pVP                  P                  V4      pV'       dG   V Uu0 uF9  p\        ;QJ d    . VVV 3R  lV 4       F  NK  	  5M! VVV 3R  lV 4       4      kK;  	  upM	\        4       pVP                  P                  V4      pV'       d   \        V4      M	\        4       pWW8w  g   EK  . pV F|  p	V	 Fs  p
VP                  V
4      pVP                  '       g   K(  VP                  P                  '       g   KF  VP                  S P                  SSVS P                  4      4       Ku  	  K~  	  VVSSV3x € EK§  	  R# u upi 5i)c              3   ób   <"  € T F$  pSP                   P                  SSV3V4      x € K&  	  R # 5ir'   )r|   r…   )rN   Únr¨   r(   r+   s   & €€€r$   rP   ÚMMigrationAutodetector._get_altered_foo_together_operations.<locals>.<genexpr>à  s5   øé € ð á!'˜Að ×+Ñ+×/Ñ/°¸JÈÐ0JÈA×NÐNÛ!'ùs   ƒ,/N)rk   r¬   r°   r…   r9   r	   r:   r„   rX   r}   rq  rl   r>   r&  r'  )r+   r¿  r¸   r¹   ru  rÍ  r›  rÎ  rÎ   Úfoo_togethersr0   rr   r¨   r(   s   f&          @@r$   rÁ  Ú:MigrationAutodetector._get_altered_foo_together_operationsÓ  s¤  úé € Ü%+¨D×,@Ñ,@×%AÑ!ˆI�zØ!×0Ñ0×4Ñ4Ø˜JÐ'¨óˆNð #Ÿo™o×4Ñ4°YÀÐ5NÕOˆOØ"Ÿm™m×2Ñ2°9¸jÐ3HÕIˆOð (×/Ñ/×3Ñ3°KÓ@ˆI÷ ñ #,óñ
 #,˜÷	 ”Eö á!'ó—E‘Eö á!'óö ñ #,òô “Uð ð (×/Ñ/×3Ñ3°KÓ@ˆIß*3œ˜Iœ¼»ˆIà×%Ø!�Û%.�MÛ&3˜
Ø /× 9Ñ 9¸*Ó E˜Ø ×-×-Ò-°%×2DÑ2D×2J×2JÒ2JØ(×/Ñ/Ø $× FÑ FØ$-Ø$.Ø$)Ø$(§M¡Mó	!"öó '4ñ &/ð ØØØØ ðõ óO &Bùòùs1   …B GÂ%GÂ5/GÃ$/GÄGÄ2,GÅ#GÆA
Gc           
     óx  € V P                  VP                  4       F•  w  pppppV\        P                  8X  d-   V Uu0 uF   pVV P                  WE3,          9  g   K  VkK"  	  ppVP                  V4      pV'       g   V'       g   Km  V P                  VV! RR V/VP                  V/B VR7       K—  	  R# u upi ©rq   r!  Nr   )rÁ  r¿  r
   r  rÀ  rD  r  )	r+   rÝ   rÍ  rÎ  r¨   r(   rÎ   rO   Úremoval_values	   &&       r$   Ú&_generate_removed_altered_foo_togetherÚ<MigrationAutodetector._generate_removed_altered_foo_together  sÚ   € ð ×6Ñ6°y×7LÑ7LÖMñ
ØØØØØàœJ×9Ñ9Ô9ñ "+óá!*˜ØØ×=Ñ=¸iÐ>SÕTñU÷ �EÙ!*ð ð ð &×2Ñ2°9Ó=ˆMß§	¡	Ø×"Ñ"ØÙñ Ø'ðØ,5×,AÑ,AÀ=Ð+Qñð ".ð #ö ó Nùòs   ¾B7ÁB7c                óD   € V P                  \        P                  4       R # r'   )r0  r
   r  r*   s   &r$   rš   Ú>MigrationAutodetector.generate_removed_altered_unique_together  s   € Ø×3Ñ3´J×4RÑ4RÖSr#   c           
     óØ   € V P                  VP                  4       FJ  w  pppppVP                  V4      pW78w  g   K"  V P                  VV! RR V/VP                  V/B VR7       KL  	  R# r.  )rÁ  r¿  rD  r  )r+   rÝ   rÍ  rÎ  r¨   r(   rÎ   r/  s   &&      r$   Ú_generate_altered_foo_togetherÚ4MigrationAutodetector._generate_altered_foo_together  s|   € ð ×6Ñ6°y×7LÑ7LÖMñ
ØØØØØà%×2Ñ2°9Ó=ˆMØÖ)Ø×"Ñ"ØÙÑT :ÐT°)×2GÑ2GÈÐ1SÑTØ!-ð #ö ó Nr#   c                óD   € V P                  \        P                  4       R # r'   )r5  r
   r  r*   s   &r$   rŸ   Ú6MigrationAutodetector.generate_altered_unique_together/  s   € Ø×+Ñ+¬J×,JÑ,JÖKr#   c           	     ó  € V P                   P                  V P                  V P                  4      p\	        V4       FÄ  w  r#V P
                  P                  W#3V4      pV P                  P                  W$3,          pV P                  P                  W#3,          pVP                  P                  R 4      pVP                  P                  R 4      pWx8w  g   Kœ  V P                  V\        P                  ! VVR7      4       KÆ  	  R# )Údb_table)rq   ÚtableN)r¬   Úunionr­   r®   rk   r°   r…   r9   r	   r:   r„   r  r
   ÚAlterModelTable)	r+   Úmodels_to_checkr¨   r(   r¸   r¹   ru  Úold_db_table_nameÚnew_db_table_names	   &        r$   r£   Ú/MigrationAutodetector.generate_altered_db_table2  sä   € Ø×.Ñ.×4Ñ4Ø× Ñ  $×":Ñ":ó
ˆô &,¨OÖ%<Ñ!ˆIØ!×0Ñ0×4Ñ4ØÐ'¨óˆNð #Ÿo™o×4Ñ4°YÐ5NÕOˆOØ"Ÿm™m×2Ñ2°9Ð3HÕIˆOØ /× 7Ñ 7× ;Ñ ;¸JÓ GÐØ /× 7Ñ 7× ;Ñ ;¸JÓ GÐØ Ö5Ø×"Ñ"ØÜ×.Ò.Ø'Ø/ôöó &=r#   c           	     ó  € V P                   P                  V P                  V P                  4      p\	        V4       FÄ  w  r#V P
                  P                  W#3V4      pV P                  P                  W$3,          pV P                  P                  W#3,          pVP                  P                  R 4      pVP                  P                  R 4      pWx8w  g   Kœ  V P                  V\        P                  ! VVR7      4       KÆ  	  R# )Údb_table_comment)rq   Útable_commentN)r¬   r<  r­   r®   rk   r°   r…   r9   r	   r:   r„   r  r
   ÚAlterModelTableComment)	r+   r>  r¨   r(   r¸   r¹   ru  Úold_db_table_commentÚnew_db_table_comments	   &        r$   r’   Ú7MigrationAutodetector.generate_altered_db_table_commentG  sæ   € Ø×.Ñ.×4Ñ4Ø× Ñ  $×":Ñ":ó
ˆô &,¨OÖ%<Ñ!ˆIØ!×0Ñ0×4Ñ4ØÐ'¨óˆNð #Ÿo™o×4Ñ4°YÐ5NÕOˆOØ"Ÿm™m×2Ñ2°9Ð3HÕIˆOà#2×#:Ñ#:×#>Ñ#>Ð?QÓ#RÐ Ø#2×#:Ñ#:×#>Ñ#>Ð?QÓ#RÐ Ø#Ö;Ø×"Ñ"ØÜ×5Ò5Ø'Ø&:ôöó &=r#   c           	     ó<  € V P                   P                  V P                  V P                  V P                  V P
                  ,          V P                  V P                  ,          4      p\        V4       EF  w  r#V P                  P                  W#3V4      pV P                  P                  W$3,          pV P                  P                  W#3,          pVP                  P                  4        UUu/ uF  w  rxV\         P"                  9   g   K  WxbK   	  p	ppVP                  P                  4        UUu/ uF  w  rxV\         P"                  9   g   K  WxbK   	  p
ppWš8w  g   Kï  V P%                  V\&        P                   ! VV
R7      4       EK  	  R# u uppi u uppi )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).
)rq   r„   N)r¬   r<  r­   r®   r€   r�   r~   rƒ   rk   r°   r…   r9   r	   r:   r„   rZ   r   ÚALTER_OPTION_KEYSr  r
   )r+   r>  r¨   r(   r¸   r¹   ru  rd   rO   Úold_optionsÚnew_optionss   &          r$   r�   Ú.MigrationAutodetector.generate_altered_options]  sy  € ð ×.Ñ.×4Ñ4Ø× Ñ Ø×$Ñ$à×#Ñ# d×&9Ñ&9Õ9à×Ñ $×"9Ñ"9Õ9ó
ˆô &,¨O×%<Ñ!ˆIØ!×0Ñ0×4Ñ4ØÐ'¨óˆNð #Ÿo™o×4Ñ4°YÐ5NÕOˆOØ"Ÿm™m×2Ñ2°9Ð3HÕIˆOð #2×"9Ñ"9×"?Ñ"?Ô"Aôá"A‘J�CØÔ+×=Ñ=Ñ=ô �’
Ù"Að ñ ð #2×"9Ñ"9×"?Ñ"?Ô"Aôá"A‘J�CØÔ+×=Ñ=Ñ=ô �’
Ù"Að ñ ð
 Ö)Ø×"Ñ"ØÜ×0Ò0Ø'Ø +ô÷ó# &=ùóùó
s   Ã0FÄFÄ4FÅFc           
     óÆ  € \        V P                  4       EFF  w  rV P                  P                  W3V4      pV P                  P
                  W3,          pV P                  P
                  W3,          pVP                  P                  R 4      VP                  P                  R 4      8w  g   Kš  . pVP                  P                  R 4      '       dG   VP                  \        VVVP                  R ,          \        P                  P                  4      4       V P                  V\        P                  ! VVP                  P                  R 4      R7      VR7       EKI  	  R# )r  r;  r!  N)rk   r¬   r°   r…   r9   r	   r:   r„   rn   r   r%   r   r  r
   r  )r+   r¨   r(   r¸   r¹   ru  rÎ   s   &      r$   rž   Ú<MigrationAutodetector.generate_altered_order_with_respect_to…  s9  € Ü%+¨D×,@Ñ,@×%AÑ!ˆIØ!×0Ñ0×4Ñ4ØÐ'¨óˆNð #Ÿo™o×4Ñ4°YÐ5NÕOˆOØ"Ÿm™m×2Ñ2°9Ð3HÕIˆOØ×&Ñ&×*Ñ*Ø'óà ×(Ñ(×,Ñ,Ð-DÓEöFð
  "�Ø"×*Ñ*×.Ñ.Ð/F×GÒGØ ×'Ñ'Ü+Ø%Ø&Ø+×3Ñ3Ð4KÕLÜ/×4Ñ4×;Ñ;ó	ôð ×"Ñ"ØÜ×6Ò6Ø'Ø.=×.EÑ.E×.IÑ.IØ3ó/ôð ".ð #÷ 	ó- &Br#   c           	     ó’  € \        V P                  4       F­  w  rV P                  P                  W3V4      pV P                  P
                  W3,          pV P                  P
                  W3,          pVP                  VP                  8w  g   K{  V P                  V\        P                  ! VVP                  R 7      4       K¯  	  R# ))rq   r9  N)rk   r¬   r°   r…   r9   r	   r:   r9  r  r
   ÚAlterModelManagers)r+   r¨   r(   r¸   r¹   ru  s   &     r$   r‘   Ú/MigrationAutodetector.generate_altered_managers§  s¨   € Ü%+¨D×,@Ñ,@Ö%AÑ!ˆIØ!×0Ñ0×4Ñ4ØÐ'¨óˆNð #Ÿo™o×4Ñ4°YÐ5NÕOˆOØ"Ÿm™m×2Ñ2°9Ð3HÕIˆOØ×'Ñ'¨?×+CÑ+CÖCØ×"Ñ"ØÜ×1Ò1Ø'Ø!0×!9Ñ!9ôöó &Br#   c           	     ó  € VP                  4       p/ p\        VP                  4       4       EF{  w  rgV'       g   K  RpV F  p	V	^ ,          V8X  g   K  T	p M	  VfA   V P                  P	                  V4      '       g    V F  p
VR3WVV
P
                  3&   K  	  W Kq  Vf   ^pM)V P                  V^,          4      ;'       g    ^ ^,           p\        V4       FË  w  rÊV^ 8X  d$   V'       d   V
P                  P                  V4       RV,          .pV'       d   VP                  V4       MGV^ 8X  d   V'       g   VP                  R4       M&VP                  V
P                  4       R,          4       RP                  V4      pWn3WVV
P
                  3&   V^,          pWên        KÍ  	  EK~  	  VP                  4        F;  pV F2  p
V
P                   Uu. uF  qõP                  Wÿ4      NK  	  upV
n        K4  	  K=  	  V# u upi )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Í   z%04ir×   :Néd   NrÔ  )rÕ   rW   rZ   r;   Úask_initialrq   Úparse_numberÚ	enumeraterÎ   rn   Úsuggest_nameÚjoinrÒ   r…   )r+   rI   rE   rH   ÚleavesÚname_mapr¨   r§   Úapp_leafÚleafrõ   Únext_numberÚiÚnew_name_partsr   rR  s   &&&&            r$   rC   Ú'MigrationAutodetector.arrange_for_graph·  sÍ  € ð ×!Ñ!Ó#ˆØˆÜ%)¨'¯-©-«/×%:Ñ!ˆIßÙàˆHÛ�Ø˜•7˜iÖ'Ø#�HÙñ ð
 Ò¨¯©×(CÑ(CÀI×(NÒ(Nã!+�IØ=FÈÐ<T�H¨¯©Ð8Ó9ñ ",àÐ&ÙàÒØ‘à#×0Ñ0°¸!µÓ=×BÐBÀÀaÕG�ä )¨*Ö 5‘�Ø˜”6ŸhØ×*Ñ*×1Ñ1°(Ô;Ø"(¨;Õ"6Ð!7�ß!Ø"×)Ñ)¨.Õ9Ø˜!”V§HØ"×)Ñ)¨)Õ4à"×)Ñ)¨)×*@Ñ*@Ó*BÀ4Õ*HÔIØŸ8™8 NÓ3�Ø9BÐ8M� Y§^¡^Ð4Ñ5Ø˜qÕ �Ø!)–ô !6ñ- &;ðJ "Ÿ.™.Ö*ˆJÛ'�	à09×0FÒ0Fó*Ù0F¨1—L‘L Ö&Ñ0Fñ*�	Ö&ó (ñ +ð
 ˆùò*s   ÇG=c           	     óª  € / pVP                  4        FL  w  rEV FA  pVP                   F.  w  rxVP                  V\        4       4      P	                  V4       K0  	  KC  	  KN  	  \        V4      p	Rp
W©8w  d=   \        V	4      p
V	P
                  ! V	 Uu. uF  qCP                  VR4      NK  	  up!   KB  \        V4       F  pWI9  g   K  W K  	  V# u upi )a	  
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.
Nr   )rZ   rÎ   rØ   r}   r†   rÖ   r…   rW   )r+   rI   Ú
app_labelsÚapp_dependenciesr¨   r§   rõ   r  rq   Úrequired_appsÚold_required_appss   &&&        r$   rD   Ú#MigrationAutodetector._trim_to_appsë  sÎ   € ð ÐØ%,§]¡]¦_Ñ!ˆIÛ'�	Ø+4×+AÔ+AÑ'�MØ$×/Ñ/°	¼3»5ÓA×EÑEÀmÖTó ,Bó (ñ &5ô ˜J›ˆà ÐØÔ0Ü # MÓ 2ÐØ× Ò ÙGTÓUÁ}¸)×&Ñ& y°"Ö5Á}ÑUôô ˜gžˆIØÖ-ØÒ&ñ 'ð ˆùò Vs   ÂCc                óÊ   € \         P                  ! RV4      ;p'       d   \        V^,          4      # \         P                  ! RV4      pV'       d   \        V^ ,          4      # R# )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+)z^\d+N)ÚreÚsearchÚintÚmatch)Úclsrq   Úsquashed_matchrl  s   &&  r$   rV  Ú"MigrationAutodetector.parse_number  sO   € ô  ŸYšYÐ';¸TÓBÐBˆ>ÖBÜ�~ aÕ(Ó)Ð)Ü—’˜ $Ó'ˆßÜ�u˜Q•x“=Ð Ùr#   )r{   rz   r<   r9   ry   r¬   r­   r®   r§   r²   r�   r‚   rƒ   r±   r~   r   r€   r;   r|   rÀ  r°   r"  ro  r¯   r:   r'   )NNN)NN)NF)=r   r   r   r   Ú__doc__r?   rI   rM   rt   rB   rŠ   r‹   ÚstaticmethodrÃ   r¥   r¤   r¦   rÔ   r  r  r‰   r�   r�   rŒ   rŽ   r“   r˜   rœ   r„  r›   r¢  r�   r”   r    r—   r™   rî  r•   r¡   r–   r¢   r'  rŠ  r¥  rØ  rÁ  r0  rš   r5  rŸ   r£   r’   r�   rž   r‘   rC   rD   ÚclassmethodrV  r"   r3   r4   s   @r$   r7   r7   +   sc  ø‡ € ñ
ôGô
ò%òNôhòT
ò.ð( ñ
ó ð
ô(v"òpKò$ò$^Kô@Ròò.B"òH\ò|)òVwòrò<"ò|#IòJJò6
òpLò!
òF}Rò~Wòrò	òò"TòH0òdò òð" ñ+ó ð+òZò0ò*ò .ò`ò2Tòò Lòò*ò,&òP òDô 2òhð6 ñó ör#   r7   )!r[   ri  Ú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   r7   r   r#   r$   Ú<module>r€     s]   ðÛ Û 	ß /Ý Ý &Ý å  Ý Ý +Ý 4Ý DÝ =Ý ?÷ñ õ
 4ô'ÙÐ$Ð&LÓMô'÷(gó gr#   