+
    ‹°³j¦S  ã                   ób   € ^ RI Ht ^ RIHt ^ RIHt ^ RIHt  ! R R]4      t ! R R]4      t	R	# )
é    ©Úisprime)ÚPermutationGroup)ÚDefaultPrinting)Ú
free_groupc                   ó>   a € ] tR t^t o RtRtRR ltR tR tRt	V t
R# )ÚPolycyclicGroupTNc                ó‚   € Wn         W n        W0n        V'       g   \        V P                   W#4      V n        R# TV n        R# )a·  

Parameters
==========

pc_sequence : list
    A sequence of elements whose classes generate the cyclic factor
    groups of pc_series.
pc_series : list
    A subnormal sequence of subgroups where each factor group is cyclic.
relative_order : list
    The orders of factor groups of pc_series.
collector : Collector
    By default, it is None. Collector class provides the
    polycyclic presentation with various other functionalities.

N)ÚpcgsÚ	pc_seriesÚrelative_orderÚ	CollectorÚ	collector)ÚselfÚpc_sequencer   r   r   s   &&&&&Ú^/home/luca/screen-checking/.venv/lib/python3.14/site-packages/sympy/combinatorics/pc_groups.pyÚ__init__ÚPolycyclicGroup.__init__   s/   € ð$  Œ	Ø"ŒØ,ÔßPYœ 4§9¡9¨iÓHˆŽÐ_hˆŽó    c                ó’   € \         ;QJ d&    R  V P                   4       F  '       d   K   R# 	  R# ! R  V P                   4       4      # )c              3   ó8   "  € T F  p\        V4      x € K  	  R # 5i©Nr   )Ú.0Úorders   & r   Ú	<genexpr>Ú1PolycyclicGroup.is_prime_order.<locals>.<genexpr>$   s   é € ÐCÑ/B e”7˜5—>�>Ó/Bùs   ‚FT)Úallr   ©r   s   &r   Úis_prime_orderÚPolycyclicGroup.is_prime_order#   s7   € ß‹sÑC¨t×/BÒ/BÓC�sŒsÐCŠsÐCˆsÑC¨t×/BÒ/BÓCÓCÐCr   c                ó,   € \        V P                  4      # r   )Úlenr   r   s   &r   ÚlengthÚPolycyclicGroup.length&   s   € Ü�4—9‘9‹~Ðr   )r   r   r   r   r   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Úis_groupÚis_solvabler   r   r#   Ú__static_attributes__Ú__classdictcell__©Ú__classdict__s   @r   r	   r	      s%   ø‡ € à€HØ€Kôiò.D÷ð r   r	   c                   óv   a € ] tR t^*t o 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V tR# )r   z„
References
==========

.. [1] Holt, D., Eick, B., O'Brien, E.
       "Handbook of Computational Group Theory"
       Section 8.1.3
Nc                óB  € Wn         W n        W0n        V'       g+   \        RP	                  \        V4      4      4      ^ ,          MTV n        \        V P                  P                  4       UUu/ uF  w  rgWvbK	  	  uppV n        V P                  4       V n
        R# u uppi )a©  

Most of the parameters for the Collector class are the same as for PolycyclicGroup.
Others are described below.

Parameters
==========

free_group_ : tuple
    free_group_ provides the mapping of polycyclic generating
    sequence with the free group elements.
pc_presentation : dict
    Provides the presentation of polycyclic groups with the
    help of power and conjugate relators.

See Also
========

PolycyclicGroup

zx:{}N)r   r   r   r   Úformatr"   Ú	enumerateÚsymbolsÚindexÚpc_relatorsÚpc_presentation)r   r   r   r   Úfree_group_r6   ÚiÚss   &&&&&&  r   r   ÚCollector.__init__5   sy   € ð, Œ	Ø"ŒØ,ÔßITœ* V§]¡]´3°t³9Ó%=Ó>¸qÖAÐZeˆŒÜ'0°·±×1HÑ1HÔ'IÔJÑ'I™t˜q�a’dÑ'IÒJˆŒ
Ø#×/Ñ/Ó1ˆÖùó Ks   Á.Bc                óî  € V'       g   R# VP                   pV P                  pV P                  p\        \	        V4      4       FK  pW%,          w  rgW4V,          ,          '       g   K$  V^ 8  g   WsWF,          ,          ^,
          8”  g   KG  Wg33u # 	  \        \	        V4      ^,
          4       FD  pW%,          w  rgW%^,           ,          w  r‰WF,          WH,          8”  g   K3  V	^ 8”  d   ^MRp
Wg3WŠ33u # 	  R# )a  
Returns the minimal uncollected subwords.

Explanation
===========

A word ``v`` defined on generators in ``X`` is a minimal
uncollected subword of the word ``w`` if ``v`` is a subword
of ``w`` and it has one of the following form

* `v = {x_{i+1}}^{a_j}x_i`

* `v = {x_{i+1}}^{a_j}{x_i}^{-1}`

* `v = {x_i}^{a_j}`

for `a_j` not in `\{1, \ldots, s-1\}`. Where, ``s`` is the power
exponent of the corresponding generator.

Examples
========

>>> from sympy.combinatorics.named_groups import SymmetricGroup
>>> from sympy.combinatorics import free_group
>>> G = SymmetricGroup(4)
>>> PcGroup = G.polycyclic_group()
>>> collector = PcGroup.collector
>>> F, x1, x2 = free_group("x1, x2")
>>> word = x2**2*x1**7
>>> collector.minimal_uncollected_subword(word)
((x2, 2),)

Néÿÿÿÿ)Ú
array_formr   r4   Úranger"   )r   ÚwordÚarrayÚrer4   r8   Ús1Úe1Ús2Úe2Úes   &&         r   Úminimal_uncollected_subwordÚ%Collector.minimal_uncollected_subwordR   sÊ   € ÷F Ùà—‘ˆØ× Ñ ˆØ—
‘
ˆä”s˜5“zÖ"ˆAØ•X‰FˆBà˜•)�}Ž} " q¤&¨B°EµIµ¸qµÖ,@Ø˜�|Ò#ñ	 #ô ”s˜5“z !•|Ö$ˆAØ•X‰FˆBØ˜Q�3•Z‰FˆBà�y˜5�9Ö$Ø˜aœ‘A R�Ø˜ 2 'Ð*Ò*ñ %ñ r   c                óž   € / p/ pV P                   P                  4        F)  w  r4\        VP                  4      ^8X  d   WAV&   K%  WBV&   K+  	  W3# )a	  
Separates the given relators of pc presentation in power and
conjugate relations.

Returns
=======

(power_rel, conj_rel)
    Separates pc presentation into power and conjugate relations.

Examples
========

>>> from sympy.combinatorics.named_groups import SymmetricGroup
>>> G = SymmetricGroup(3)
>>> PcGroup = G.polycyclic_group()
>>> collector = PcGroup.collector
>>> power_rel, conj_rel = collector.relations()
>>> power_rel
{x0**2: (), x1**3: ()}
>>> conj_rel
{x0**-1*x1*x0: x1**2}

See Also
========

pc_relators

)r6   Úitemsr"   r=   )r   Úpower_relatorsÚconjugate_relatorsÚkeyÚvalues   &    r   Ú	relationsÚCollector.relationsŒ   sV   € ð< ˆØÐØ×.Ñ.×4Ñ4Ö6‰JˆCÜ�3—>‘>Ó" aÔ'Ø&+˜sÓ#à*/ 3Ó'ñ	 7ð
 Ð1Ð1r   c                óð   € RpRp\        \        V4      \        V4      ,
          ^,           4       FA  pVP                  WU\        V4      ,           4      V8X  g   K+  TpV\        V4      ,           p W43# 	  W43# )a|  
Returns the start and ending index of a given
subword in a word.

Parameters
==========

word : FreeGroupElement
    word defined on free group elements for a
    polycyclic group.
w : FreeGroupElement
    subword of a given word, whose starting and
    ending index to be computed.

Returns
=======

(i, j)
    A tuple containing starting and ending index of ``w``
    in the given word. If not exists, (-1,-1) is returned.

Examples
========

>>> from sympy.combinatorics.named_groups import SymmetricGroup
>>> from sympy.combinatorics import free_group
>>> G = SymmetricGroup(4)
>>> PcGroup = G.polycyclic_group()
>>> collector = PcGroup.collector
>>> F, x1, x2 = free_group("x1, x2")
>>> word = x2**2*x1**7
>>> w = x2**2*x1
>>> collector.subword_index(word, w)
(0, 3)
>>> w = x1**7
>>> collector.subword_index(word, w)
(2, 9)
>>> w = x1**8
>>> collector.subword_index(word, w)
(-1, -1)

r<   )r>   r"   Úsubword)r   r?   ÚwÚlowÚhighr8   s   &&&   r   Úsubword_indexÚCollector.subword_index³   sp   € ðV ˆØˆÜ”s˜4“y¤ Q£Õ'¨Õ)Ö*ˆAØ�|‰|˜A¤ Q£�xÓ(¨AÖ-Ø�Øœ˜Q›•x�ØØˆyÐñ +ð
 ˆyÐr   c                óÌ   € VP                   pV^ ,          ^ ,          pV^,          ^ ,          pVR3V^3V^33pV P                  P                  V4      pV P                  V,          # )aW  
Return a conjugate relation.

Explanation
===========

Given a word formed by two free group elements, the
corresponding conjugate relation with those free
group elements is formed and mapped with the collected
word in the polycyclic presentation.

Examples
========

>>> from sympy.combinatorics.named_groups import SymmetricGroup
>>> from sympy.combinatorics import free_group
>>> G = SymmetricGroup(3)
>>> PcGroup = G.polycyclic_group()
>>> collector = PcGroup.collector
>>> F, x0, x1 = free_group("x0, x1")
>>> w = x1*x0
>>> collector.map_relation(w)
x1**2

See Also
========

pc_presentation

r<   )r=   r   Údtyper6   )r   rS   r@   rB   rD   rM   s   &&    r   Úmap_relationÚCollector.map_relationç   sd   € ð> —‘ˆØ�1�X�a�[ˆØ�1�X�a�[ˆØ�Bˆx˜"˜a˜ 2 q 'Ð*ˆØ�o‰o×#Ñ# CÓ(ˆØ×#Ñ# CÕ(Ð(r   c                ó¼  € V P                   p V P                  V4      pV'       g    V# V P                  WP                  ! V4      4      w  rEVR8X  d   KI  V^ ,          w  rg\	        V4      ^8X  Ed"   V P
                  V P                  V,          ,          pWx,          p	WyV,          ,
          p
V^ ,          ^ ,          V33pVP                  ! V4      pV P                  V,          '       dX   V P                  V,          P                  pV^ ,          w  rÞV^ ,          ^ ,          V
3WÙV,          33pVP                  ! V4      pM/V
^ 8w  d'   V^ ,          ^ ,          V
33pVP                  ! V4      pMRpVP                  VP                  ! V4      V4      p\	        V4      ^8X  d�   V^,          ^,          ^ 8”  d{   V^,          w  ppV^33pVP                  ! V4      pV P                  VP                  ! V4      4      pVW÷,          ,          pVP                  ! V4      pVP                  WEV4      pEK%  \	        V4      ^8X  g   EK8  V^,          ^,          ^ 8  g   EKP  V^,          w  ppV^33pVP                  ! V4      pV P                  VP                  ! V4      4      pVR,          W÷,          ,          pVP                  ! V4      pVP                  WEV4      pEKÑ  )aü  
Return the collected form of a word.

Explanation
===========

A word ``w`` is called collected, if `w = {x_{i_1}}^{a_1} * \ldots *
{x_{i_r}}^{a_r}` with `i_1 < i_2< \ldots < i_r` and `a_j` is in
`\{1, \ldots, {s_j}-1\}`.

Otherwise w is uncollected.

Parameters
==========

word : FreeGroupElement
    An uncollected word.

Returns
=======

word
    A collected word of form `w = {x_{i_1}}^{a_1}, \ldots,
    {x_{i_r}}^{a_r}` with `i_1, i_2, \ldots, i_r` and `a_j \in
    \{1, \ldots, {s_j}-1\}`.

Examples
========

>>> from sympy.combinatorics.named_groups import SymmetricGroup
>>> from sympy.combinatorics.perm_groups import PermutationGroup
>>> from sympy.combinatorics import free_group
>>> G = SymmetricGroup(4)
>>> PcGroup = G.polycyclic_group()
>>> collector = PcGroup.collector
>>> F, x0, x1, x2, x3 = free_group("x0, x1, x2, x3")
>>> word = x3*x2*x1*x0
>>> collected_word = collector.collected_word(word)
>>> free_to_perm = {}
>>> free_group = collector.free_group
>>> for sym, gen in zip(free_group.symbols, collector.pcgs):
...     free_to_perm[sym] = gen
>>> G1 = PermutationGroup()
>>> for w in word:
...     sym = w[0]
...     perm = free_to_perm[sym]
...     G1 = PermutationGroup([perm] + G1.generators)
>>> G2 = PermutationGroup()
>>> for w in collected_word:
...     sym = w[0]
...     perm = free_to_perm[sym]
...     G2 = PermutationGroup([perm] + G2.generators)

The two are not identical, but they are equivalent:

>>> G1.equals(G2), G1 == G2
(True, False)

See Also
========

minimal_uncollected_subword

Nr<   )r   rG   rV   rY   r"   r   r4   r6   r=   Úeliminate_wordrZ   Úsubstituted_word)r   r?   r   rS   rT   rU   rB   rC   rA   ÚqÚrrM   ÚpresentationÚsymÚexpÚword_rD   rE   s   &&                r   Úcollected_wordÚCollector.collected_word  s  € ðB —_‘_ˆ
ØØ×0Ñ0°Ó6ˆAßØðZ ˆðW ×*Ñ*¨4×1AÒ1AÀ!Ó1DÓE‰IˆCØ�bŒyÙà�q•T‰FˆBÜ�1‹v˜�{Ø×(Ñ(¨¯©°B­Õ8�Ø•H�Ø˜•t•G�à˜!�˜Q� �}Ð'�Ø ×&Ò& sÓ+�Ø×'Ñ'¨×,Ô,Ø#'×#7Ñ#7¸Õ#<×#GÑ#G�LØ+¨A�‘H�CØ �d 1�g q˜\¨C°3µ¨<Ð8�EØ&×,Ò,¨UÓ3‘Eà˜A”vØ"# A¥$ q¥'¨1 Ð 0˜Ø *× 0Ò 0°Ó 7™à $˜Ø×*Ñ*¨:×+;Ò+;¸AÓ+>ÀÓF�ä�1‹v˜Œ{˜q �t A�w¨œ{Ø˜1�‘��BØ˜1�g�[�Ø×%Ò% bÓ)�Ø×)Ñ)¨*×*:Ò*:¸1Ó*=Ó>�Ø˜5�9��Ø"×(Ò(¨Ó/�Ø×,Ñ,¨S¸Ó>“ä�Q“˜1—  1¥ a¥¨1§Ø˜1�‘��BØ˜1�g�[�Ø×%Ò% bÓ)�Ø×)Ñ)¨*×*:Ò*:¸1Ó*=Ó>�Ø˜B�˜u�yÕ(�Ø"×(Ò(¨Ó/�Ø×,Ñ,¨S¸Ó>“r   c                óš  € V P                   pV P                  p/ p/ pV P                  p\        WQP                  4       F  w  rgVR,          WFR,          &   WtV&   K  	  VRRR1,          pV P
                  RRR1,          pVRRR1,          p. p	\        V4       EF®  w  r¦W*,          pWF,          V,          pWŠ,          pVP                  Wk,          RR7      pVP                  4        VP                  pV F  pWôV,          ,          pK  	  V P                  V4      pV'       d   TMRW<&   W0n        V	P                  V4       \        V	4      ^8”  g   Kº  V	\        V	4      ^,
          ,          pVV,          p\        \        V	4      ^,
          4       F³  pWIV,          ,          pVR,          V,          V,          pVR,          V	V,          ,          V,          pVP                  VRR7      pVP                  4        VP                  pV F  pWôV,          ,          pK  	  V P                  V4      pV'       d   TMRW<&   W0n        Kµ  	  EK±  	  V# )a¥  
Return the polycyclic presentation.

Explanation
===========

There are two types of relations used in polycyclic
presentation.

* Power relations : Power relators are of the form `x_i^{re_i}`,
  where `i \in \{0, \ldots, \mathrm{len(pcgs)}\}`, ``x`` represents polycyclic
  generator and ``re`` is the corresponding relative order.

* Conjugate relations : Conjugate relators are of the form `x_j^-1x_ix_j`,
  where `j < i \in \{0, \ldots, \mathrm{len(pcgs)}\}`.

Returns
=======

A dictionary with power and conjugate relations as key and
their collected form as corresponding values.

Notes
=====

Identity Permutation is mapped with empty ``()``.

Examples
========

>>> from sympy.combinatorics.named_groups import SymmetricGroup
>>> from sympy.combinatorics.permutations import Permutation
>>> S = SymmetricGroup(49).sylow_subgroup(7)
>>> der = S.derived_series()
>>> G = der[len(der)-2]
>>> PcGroup = G.polycyclic_group()
>>> collector = PcGroup.collector
>>> pcgs = PcGroup.pcgs
>>> len(pcgs)
6
>>> free_group = collector.free_group
>>> pc_resentation = collector.pc_presentation
>>> free_to_perm = {}
>>> for s, g in zip(free_group.symbols, pcgs):
...     free_to_perm[s] = g

>>> for k, v in pc_resentation.items():
...     k_array = k.array_form
...     if v != ():
...        v_array = v.array_form
...     lhs = Permutation()
...     for gen in k_array:
...         s = gen[0]
...         e = gen[1]
...         lhs = lhs*free_to_perm[s]**e
...     if v == ():
...         assert lhs.is_identity
...         continue
...     rhs = Permutation()
...     for gen in v_array:
...         s = gen[0]
...         e = gen[1]
...         rhs = rhs*free_to_perm[s]**e
...     assert lhs == rhs

NT©Úoriginalr<   © )r   r   r   ÚzipÚ
generatorsr   r2   Úgenerator_productÚreverseÚidentityre   r6   Úappendr"   r>   )r   r   Ú	rel_orderr5   Úperm_to_freer   Úgenr9   ÚseriesÚcollected_gensr8   rA   ÚrelationÚGÚlr?   ÚgÚconjÚ
conjugatorÚjÚ
conjugatedÚgenss   &                     r   r5   ÚCollector.pc_relatorsƒ  s  € ðF —_‘_ˆ
Ø×'Ñ'ˆ	ØˆØˆØ�y‰yˆä˜$× 5Ñ 5Ö6‰FˆCØ$% r¥EˆL˜b�Ñ!Ø !˜Óñ 7ð ‘D�b�D�zˆØ—‘¡ " Õ%ˆØ™d ˜d•Oˆ	Øˆä —o‰FˆAØ•ˆBØ#Õ(¨"Õ,ˆHØ•	ˆAà×#Ñ# C¥G¸Ð#Ó=ˆAØ�I‰IŒKà×&Ñ&ˆDÛ�Ø¨�OÕ+’ñ ð ×&Ñ& tÓ,ˆDß,0¡D°bˆKÑ!Ø#.Ô à×!Ñ! #Ô&Ü�>Ó" QÖ&Ø%¤c¨.Ó&9¸!Õ&;Õ<�Ø)¨$Õ/�
äœs >Ó2°1Õ4Ö5�AØ!-¸QÕ.?Õ!@�Jà)¨2�~¨jÕ8¸ÕC�HØ �8 N°1Õ$5Õ5°dÕ:�Dà×+Ñ+¨D¸TÐ+ÓB�AØ—I‘I”KØ%×.Ñ.�DÛ˜Ø#°¥OÕ3šñ ð  ×.Ñ.¨tÓ4�Dß48©D¸b�KÑ)Ø+6Ö(ô 6ñ+ &ðJ Ðr   c                ó^  € V P                   p\        4       pV P                   F   p\        V.VP                  ,           4      pK"  	  VP	                  VRR7      pVP                  4        / p\        VP                  V P                  4       F  w  rtVR,          WdR,          &   WvV&   K  	  VP                  pV F  pW†V,          ,          pK  	  V P                  V4      p	V P                  p
^ .\        V4      ,          pV	P                  p	V	 F  pV^,          WºV^ ,          ,          &   K  	  V# )a:  
Return the exponent vector of length equal to the
length of polycyclic generating sequence.

Explanation
===========

For a given generator/element ``g`` of the polycyclic group,
it can be represented as `g = {x_1}^{e_1}, \ldots, {x_n}^{e_n}`,
where `x_i` represents polycyclic generators and ``n`` is
the number of generators in the free_group equal to the length
of pcgs.

Parameters
==========

element : Permutation
    Generator of a polycyclic group.

Examples
========

>>> from sympy.combinatorics.named_groups import SymmetricGroup
>>> from sympy.combinatorics.permutations import Permutation
>>> G = SymmetricGroup(4)
>>> PcGroup = G.polycyclic_group()
>>> collector = PcGroup.collector
>>> pcgs = PcGroup.pcgs
>>> collector.exponent_vector(G[0])
[1, 0, 0, 0]
>>> exp = collector.exponent_vector(G[1])
>>> g = Permutation()
>>> for i in range(len(exp)):
...     g = g*pcgs[i]**exp[i] if exp[i] else g
>>> assert g == G[1]

References
==========

.. [1] Holt, D., Eick, B., O'Brien, E.
       "Handbook of Computational Group Theory"
       Section 8.1.1, Definition 8.4

Trh   r<   )r   r   r   rl   rm   rn   rk   ro   re   r4   r"   r=   )r   Úelementr   rw   ry   r~   rr   rb   rS   r?   r4   Ú
exp_vectorÚts   &&           r   Úexponent_vectorÚCollector.exponent_vectorü  s  € ðZ —_‘_ˆ
ÜÓˆØ—”ˆAÜ  !  q§|¡|Õ!3Ó4ŠAñ à×"Ñ" 7°tÐ"Ó<ˆØ�‰ŒàˆÜ˜*×/Ñ/°·±Ö;‰FˆCØ"% r¥'ˆL˜B�ÑØ!˜‹Oñ <ð ×ÑˆÛˆAØ˜q•/Õ!ŠAñ ð ×"Ñ" 1Ó%ˆà—
‘
ˆØ�Sœ˜Z›Õ(ˆ
Ø�‰ˆÛˆAØ&'¨¥dˆJ˜Q˜q�T•{Ó#ñ àÐr   c                ó�   € V P                  V4      p\        R \        V4       4       \        V P                  4      ^,           4      # )ai  
Return the depth of a given element.

Explanation
===========

The depth of a given element ``g`` is defined by
`\mathrm{dep}[g] = i` if `e_1 = e_2 = \ldots = e_{i-1} = 0`
and `e_i != 0`, where ``e`` represents the exponent-vector.

Examples
========

>>> from sympy.combinatorics.named_groups import SymmetricGroup
>>> G = SymmetricGroup(3)
>>> PcGroup = G.polycyclic_group()
>>> collector = PcGroup.collector
>>> collector.depth(G[0])
2
>>> collector.depth(G[1])
1

References
==========

.. [1] Holt, D., Eick, B., O'Brien, E.
       "Handbook of Computational Group Theory"
       Section 8.1.1, Definition 8.5

c              3   óL   "  € T F  w  rV'       g   K  V^,           x € K  	  R# 5i)é   Nrj   )r   r8   Úxs   &  r   r   Ú"Collector.depth.<locals>.<genexpr>a  s   é € Ð@Ñ%:™T˜Q¼a”S�Q�q—S’SÓ%:ùs   ‚$“$)r„   Únextr2   r"   r   )r   r�   r‚   s   && r   ÚdepthÚCollector.depthA  s:   € ð> ×)Ñ)¨'Ó2ˆ
ÜÑ@¤Y¨zÔ%:Ó@Ä#ÀdÇiÁiÃ.ÐQRÕBRÓSÐSr   c                óª   € V P                  V4      pV P                  V4      pV\        V P                  4      ^,           8w  d   W#^,
          ,          # R# )aœ  
Return the leading non-zero exponent.

Explanation
===========

The leading exponent for a given element `g` is defined
by `\mathrm{leading\_exponent}[g]` `= e_i`, if `\mathrm{depth}[g] = i`.

Examples
========

>>> from sympy.combinatorics.named_groups import SymmetricGroup
>>> G = SymmetricGroup(3)
>>> PcGroup = G.polycyclic_group()
>>> collector = PcGroup.collector
>>> collector.leading_exponent(G[1])
1

N)r„   rŒ   r"   r   )r   r�   r‚   rŒ   s   &&  r   Úleading_exponentÚCollector.leading_exponentc  sG   € ð* ×)Ñ)¨'Ó2ˆ
Ø—
‘
˜7Ó#ˆØ”C˜Ÿ	™	“N 1Õ$Ô$Ø A�gÕ&Ð&Ùr   c                óˆ  € TpV P                  V4      pV\        V P                  4      8  d•   W^,
          ,          ^8w  d�   W^,
          ,          pV P                  V4      V P                  V4      R,          ,          pW`P                  V^,
          ,          ,          pWV) ,          V,          pV P                  V4      pK®  V# )rˆ   r<   )rŒ   r"   r   r�   r   )r   Úzry   ÚhÚdÚkrF   s   &&&    r   Ú_siftÚCollector._sift~  s–   € ØˆØ�J‰J�q‹MˆØ”#�d—i‘i“.Ô  Q¨¥s¥V¨q¤[Ø�A•#•ˆAØ×%Ñ% aÓ(¨$×*?Ñ*?ÀÓ*BÀRÕ)GÕGˆAØ×'Ñ'¨¨!­Õ,Õ,ˆAØ�2•�a•ˆAØ—
‘
˜1“ŠAØˆr   c                óÔ  € ^.\        V P                  4      ,          pTpV'       d£   VP                  ^ 4      pV P                  W$4      pV P	                  V4      pV\        V P                  4      8  g   KW  V F@  pV^8w  g   K  VP                  VR,          VR,          ,          V,          V,          4       KB  	  WRV^,
          &   Kª  V Uu. uF  qw^8w  g   K  VNK  	  ppV# u upi )ax  

Parameters
==========

gens : list
    A list of generators on which polycyclic subgroup
    is to be defined.

Examples
========

>>> from sympy.combinatorics.named_groups import SymmetricGroup
>>> S = SymmetricGroup(8)
>>> G = S.sylow_subgroup(2)
>>> PcGroup = G.polycyclic_group()
>>> collector = PcGroup.collector
>>> gens = [G[0], G[1]]
>>> ipcgs = collector.induced_pcgs(gens)
>>> [gen.order() for gen in ipcgs]
[2, 2, 2]
>>> G = S.sylow_subgroup(3)
>>> PcGroup = G.polycyclic_group()
>>> collector = PcGroup.collector
>>> gens = [G[0], G[1]]
>>> ipcgs = collector.induced_pcgs(gens)
>>> [gen.order() for gen in ipcgs]
[3]

r<   )r"   r   Úpopr–   rŒ   rp   )r   r~   r’   rw   ry   r“   r”   rs   s   &&      r   Úinduced_pcgsÚCollector.induced_pcgs‰  s»   € ð> ˆC”�D—I‘I“ÕˆØˆßØ—‘�a“ˆAØ—
‘
˜1Ó ˆAØ—
‘
˜1“ˆAØ”3�t—y‘y“>Ö!Û�CØ˜a–xØŸ™  B¥ s¨B¥w¥¨q¥°Õ!4Ö5ñ ð �!�A•#“ÙÓ*™A�S¨¡�SˆS™AˆÐ*Øˆùò +s   ÃC%ÃC%c                ó”  € ^ .\        V4      ,          pTpV P                  V4      p\        V4       F‰  w  rgV P                  V4      V8X  g   K  V P                  V4      V P                  V4      ,          pW€P                  V^,
          ,          ,          pWx) ,          V,          pWƒV&   V P                  V4      pK†  	  V^8X  d   V# R# )z.
Return the exponent vector for induced pcgs.
F)r"   rŒ   r2   r�   r   )	r   Úipcgsry   rF   r“   r”   r8   rs   Úfs	   &&&      r   Úconstructive_membership_testÚ&Collector.constructive_membership_test¶  s¯   € ð ˆC”�E“
�NˆØˆØ�J‰J�q‹MˆÜ Ö&‰FˆAØ—*‘*˜S“/ QÖ&Ø×)Ñ)¨!Ó,¨T×-BÑ-BÀ3Ó-GÕG�Ø×+Ñ+¨A¨a­CÕ0Õ0�Ø˜"•I˜a•K�Ø�!‘Ø—J‘J˜q“M’ñ 'ð �Œ6ØˆHÙr   )r   r4   r6   r   r   r   )NN)r%   r&   r'   r(   Ú__doc__r   rG   rO   rV   rZ   re   r5   r„   rŒ   r�   r–   rš   rŸ   r+   r,   r-   s   @r   r   r   *   s]   ø‡ € ñô2ò:8òt%2òN2òh$)òNròjwòrCòJ TòDò6	ò+÷Zð r   r   N)
Úsympy.ntheory.primetestr   Úsympy.combinatorics.perm_groupsr   Úsympy.printing.defaultsr   Úsympy.combinatorics.free_groupsr   r	   r   rj   r   r   Ú<module>r¦      s,   ðÝ +Ý <Ý 3Ý 6ô �oô  ôF\
�ö \
r   