
    lj                    B    d dl mZ d dlZd dlmZ ddgZ	 dddZddZdS )    )annotationsN)Mobjectextract_mobject_family_members2restructure_list_to_exclude_certain_family_membersFmobject_listlist[Mobject]only_those_with_pointsboolreturnc                l    t          t          j        d | D                        }|rd |D             }|S )Nc              3  >   K   | ]}|                                 V  d S N)
get_family.0mobs     Q/home/agentuser/manim-venv/lib/python3.11/site-packages/manim/utils/family_ops.py	<genexpr>z1extract_mobject_family_members.<locals>.<genexpr>   s,      FF#S^^--FFFFFF    c                :    g | ]}|                                 |S  )
has_pointsr   s     r   
<listcomp>z2extract_mobject_family_members.<locals>.<listcomp>   s'    <<<#3>>+;+;<#<<<r   )listitchain)r   r	   results      r   r   r      sG     "(FFFFFGHHF =<<<<<Mr   	to_removec                l    g t          |          }dfd | t          |                     S )	a  
    Removes anything in to_remove from mobject_list, but in the event that one of
    the items to be removed is a member of the family of an item in mobject_list,
    the other family members are added back into the list.

    This is useful in cases where a scene contains a group, e.g. Group(m1, m2, m3),
    but one of its submobjects is removed, e.g. scene.remove(m1), it's useful
    for the list of mobject_list to be edited to contain other submobjects, but not m1.
    list_to_examiner   set_to_removeset[Mobject]r   Nonec                    | D ]W}||v r|                     |                                          }|r |j        |           B                    |           Xd S r   )intersectionr   submobjectsappend)r    r!   r   	intersectadd_safe_mobjects_from_listnew_lists       r   r)   zWrestructure_list_to_exclude_certain_family_members.<locals>.add_safe_mobjects_from_list%   s~     # 	% 	%Cm##%223>>3C3CDDI %++COYGGGG$$$$	% 	%r   )r    r   r!   r"   r   r#   )r   set)r   r   r)   r*   s     @@r   r   r      s[     !H.y99I
% 
% 
% 
% 
% 
% 
%  c)nn===Or   )F)r   r   r	   r
   r   r   )r   r   r   r   r   r   )	
__future__r   	itertoolsr   manim.mobject.mobjectr   __all__r   r   r   r   r   <module>r0      s    " " " " " "     ) ) ) ) ) ) %8 AF         r   