@@ -618,6 +618,36 @@ def permissible_value_parent(self, permissible_value: str, enum_name: ENUM_NAME)
618618 else :
619619 return []
620620
621+ @lru_cache ()
622+ def permissible_value_children (self , permissible_value : str , enum_name : ENUM_NAME ) -> Union [
623+ str , PermissibleValueText , None , ValueError ]:
624+ """
625+ :param enum_name: parent enum name
626+ :param permissible_value: permissible value
627+ :return: all direct child enum names (is_a)
628+
629+ CAT:
630+ LION:
631+ is_a: CAT
632+ ANGRY_LION:
633+ is_a: LION
634+ BIRD:
635+ EAGLE:
636+ is_a: BIRD
637+
638+ """
639+
640+ enum = self .get_enum (enum_name , strict = True )
641+ if enum :
642+ if permissible_value in enum .permissible_values :
643+ pv = enum .permissible_values [permissible_value ]
644+ for isapv in enum .permissible_values :
645+ isapv_entity = enum .permissible_values [isapv ]
646+ if isapv_entity .is_a and pv .text == isapv_entity .is_a :
647+ return [isapv ]
648+ else :
649+ return []
650+
621651 @lru_cache ()
622652 def slot_parents (self , slot_name : SLOT_NAME , imports = True , mixins = True , is_a = True ) -> List [SlotDefinitionName ]:
623653 """
@@ -719,6 +749,22 @@ def permissible_value_ancestors(self, permissible_value_text: str,
719749 reflexive = reflexive ,
720750 depth_first = depth_first )
721751
752+ @lru_cache ()
753+ def permissible_value_descendants (self , permissible_value_text : str ,
754+ enum_name : ENUM_NAME ,
755+ reflexive = True ,
756+ depth_first = True ) -> List [str ]:
757+ """
758+ Closure of permissible_value_children method
759+ :enum
760+ """
761+
762+
763+ return _closure (lambda x : self .permissible_value_children (x , enum_name ),
764+ permissible_value_text ,
765+ reflexive = reflexive ,
766+ depth_first = depth_first )
767+
722768 @lru_cache ()
723769 def enum_ancestors (self , enum_name : ENUM_NAME , imports = True , mixins = True , reflexive = True , is_a = True ,
724770 depth_first = True ) -> List [EnumDefinitionName ]:
0 commit comments