AD2000X commited on
Commit
921b4ce
Β·
verified Β·
1 Parent(s): d93cb7e

Update src/visualization.py

Browse files
Files changed (1) hide show
  1. src/visualization.py +40 -57
src/visualization.py CHANGED
@@ -492,69 +492,52 @@ def display_ontology_stats(ontology_manager):
492
 
493
 
494
  def display_class_hierarchy_tree(ontology_manager, class_hierarchy):
495
- """Display class hierarchy as an interactive tree."""
496
- # Find root classes (those that aren't subclasses of anything else)
497
  all_subclasses = set()
498
  for subclasses in class_hierarchy.values():
499
  all_subclasses.update(subclasses)
500
-
 
501
  root_classes = [cls for cls in ontology_manager.get_classes() if cls not in all_subclasses]
502
-
503
- # Create a recursive function to display the hierarchy
504
- def display_subclasses(class_name, indent=0):
505
- # Get class info
506
- class_info = ontology_manager.ontology_data["classes"].get(class_name, {})
507
  description = class_info.get("description", "")
508
- instance_count = len(ontology_manager.get_instances_of_class(class_name, include_subclasses=False))
509
-
510
- # Display class with expander for subclasses
511
- if indent == 0:
512
- # Root level classes are always expanded
513
- with st.expander(f"πŸ“ {class_name} ({instance_count} instances)", expanded=True):
514
- st.markdown(f"**Description:** {description}")
515
-
516
- # Show properties if any
517
- properties = class_info.get("properties", [])
518
- if properties:
519
- st.markdown("**Properties:**")
520
- st.markdown(", ".join(properties))
521
-
522
- # Display subclasses
523
- subclasses = class_hierarchy.get(class_name, [])
524
- if subclasses:
525
- st.markdown("**Subclasses:**")
526
- for subclass in sorted(subclasses):
527
- display_subclasses(subclass, indent + 1)
528
- else:
529
- st.markdown("*No subclasses*")
530
- else:
531
- # Nested classes use indentation and only show direct instances
532
- if instance_count > 0:
533
- class_label = f"πŸ“ {class_name} ({instance_count} instances)"
534
  else:
535
- class_label = f"πŸ“ {class_name}"
536
-
537
- with st.expander(class_label, expanded=False):
538
- st.markdown(f"**Description:** {description}")
539
-
540
- # Show properties if any
541
- properties = class_info.get("properties", [])
542
- if properties:
543
- st.markdown("**Properties:**")
544
- st.markdown(", ".join(properties))
545
-
546
- # Display subclasses
547
- subclasses = class_hierarchy.get(class_name, [])
548
- if subclasses:
549
- st.markdown("**Subclasses:**")
550
- for subclass in sorted(subclasses):
551
- display_subclasses(subclass, indent + 1)
552
- else:
553
- st.markdown("*No subclasses*")
554
-
555
- # Display each root class
556
- for root_class in sorted(root_classes):
557
- display_subclasses(root_class)
558
 
559
  def get_class_depths(ontology_manager) -> Dict[str, int]:
560
  """Calculate the inheritance depth of each class."""
 
492
 
493
 
494
  def display_class_hierarchy_tree(ontology_manager, class_hierarchy):
495
+ """Display class hierarchy using expanders at root level, and plain list for subclasses."""
496
+ # Find all subcategory sets
497
  all_subclasses = set()
498
  for subclasses in class_hierarchy.values():
499
  all_subclasses.update(subclasses)
500
+
501
+ # Root classes are those that are not subclassed by any class
502
  root_classes = [cls for cls in ontology_manager.get_classes() if cls not in all_subclasses]
503
+
504
+ for root_class in sorted(root_classes):
505
+ class_info = ontology_manager.ontology_data["classes"].get(root_class, {})
 
 
506
  description = class_info.get("description", "")
507
+ instance_count = len(ontology_manager.get_instances_of_class(root_class, include_subclasses=False))
508
+ properties = class_info.get("properties", [])
509
+
510
+ with st.expander(f"πŸ“ {root_class} ({instance_count} instances)", expanded=True):
511
+ st.markdown(f"**Description:** {description}")
512
+ if properties:
513
+ st.markdown("**Properties:**")
514
+ st.markdown(", ".join(properties))
515
+
516
+ subclasses = class_hierarchy.get(root_class, [])
517
+ if subclasses:
518
+ st.markdown("**Subclasses:**")
519
+ for subclass in sorted(subclasses):
520
+ display_subclass_plain(subclass, class_hierarchy, ontology_manager, indent=1)
 
 
 
 
 
 
 
 
 
 
 
 
521
  else:
522
+ st.markdown("*No subclasses*")
523
+
524
+
525
+ def display_subclass_plain(class_name, class_hierarchy, ontology_manager, indent=1):
526
+ """Use indentation to render subclass info without nested expanders."""
527
+ indent_str = " " * indent
528
+ class_info = ontology_manager.ontology_data["classes"].get(class_name, {})
529
+ description = class_info.get("description", "")
530
+ properties = class_info.get("properties", [])
531
+ instance_count = len(ontology_manager.get_instances_of_class(class_name, include_subclasses=False))
532
+
533
+ st.markdown(f"{indent_str}πŸ”Ή **{class_name}** ({instance_count} instances)")
534
+ st.markdown(f"{indent_str}> {description}")
535
+ if properties:
536
+ st.markdown(f"{indent_str}*Properties:* {', '.join(properties)}")
537
+
538
+ subclasses = class_hierarchy.get(class_name, [])
539
+ for subclass in sorted(subclasses):
540
+ display_subclass_plain(subclass, class_hierarchy, ontology_manager, indent + 1)
 
 
 
 
541
 
542
  def get_class_depths(ontology_manager) -> Dict[str, int]:
543
  """Calculate the inheritance depth of each class."""