Files
timmy-config/wizards/allegro-primus/knowledge/__pycache__/knowledge_graph.cpython-312.pyc

179 lines
21 KiB
Plaintext
Raw Normal View History

2026-03-31 20:02:01 +00:00
<EFBFBD>
<00><08>i<EFBFBD>E<00><00><><00>dZddlZddlmZddlmZddlmZmZmZm Z m
Z
ddl m Z ddl ZddlmZmZmZGd<08>d <09>Zy)
zv
AP Knowledge Base - Knowledge Graph
Relationship tracking and memory lineage for the Allegro-Primus knowledge base.
<EFBFBD>N)<01>Path)<01>datetime)<05>List<73>Dict<63>Optional<61>Set<65>Tuple)<01> defaultdict)<03> MemoryEntry<72>MemoryRelationship<69>RelationshipTypec<00><><00>eZdZdZdefd<03>Zd<04>Zd<05>Zdejfd<07>Z
d,d e d
e d e d e d e deedefd<0F>Zd-d e d
e d ee defd<10>Z d.de d ee de deefd<13>Z d/de dede dee eee e fffd<16>Zde defd<17>Zd0de de de fd<1B>Zd0de de de fd<1E>Zde deefd<1F>Zd0d e d!e d e fd"<22>Zd1d#edeee fd$<24>Zd2d%edeee e ffd&<26>Z defd'<27>Z!d3d(e de fd)<29>Z"d-d*eedefd+<2B>Z#y)4<>KnowledgeGraphz<68>
Knowledge graph for tracking relationships between memories.
Provides:
- Link related memories
- Track memory lineage (derived_from, supersedes)
- Query by relationship type
- Find memory clusters
- Detect conflicts
<20>base_dirc<00><><00>t|<01>|_|jdz |_|jdz |_d|_t t <00>|_i|_|j<00>y)Nzrelationships.jsonz lineage.json)
rr<00>relationships_path<74> lineage_path<74>_graphr
<00>list<73>_relationships<70>_lineage<67>_load)<02>selfrs <20>knowledge_graph.py<70>__init__zKnowledgeGraph.__init__sT<00><00><1C>X<EFBFBD><0E><04> <0A>"&<26>-<2D>-<2D>2F<32>"F<><04><1F> <20>M<EFBFBD>M<EFBFBD>N<EFBFBD>:<3A><04><19>,0<><04> <0B>CN<43>t<EFBFBD>CT<43><04><1B>)+<2B><04> <0A> <0C>
<EFBFBD>
<EFBFBD> <0C>c<00>N<00>|jj<00>r<> tj|jj <00><00>}|D]<5D>}t |d|dt |d<00>|jdd<05>tj|jdtj<00>j<00><00><00>|jdd<08>|jd i<00><00>
<EFBFBD>}|j|jj|<03><00><> |j"j<00>r4 tj|j"j <00><00>|_y y #t$r}t!d |<04><00><02>Yd }~<04>kd }~wwxYw#t$r}t!d |<04><00><02>Yd }~y d }~wwxYw)z)Load relationships and lineage from disk.<2E> source_id<69> target_id<69>type<70> description<6F><00>
created_at<EFBFBD>strength<74><00>?<3F>metadata<74>rrr r!r#r$r&z'Warning: Failed to load relationships: Nz!Warning: Failed to load lineage: )r<00>exists<74>json<6F>loads<64> read_textr r <00>getr<00> fromisoformat<61>utcnow<6F> isoformatrr<00>append<6E> Exception<6F>printrr)r<00>data<74>rel_data<74>rel<65>es rrzKnowledgeGraph._load(sn<00><00> <10> "<22> "<22> )<29> )<29> +<2B> E<01><1B>z<EFBFBD>z<EFBFBD>$<24>"9<>"9<>"C<>"C<>"E<>F<><04> $<24>
C<01>H<EFBFBD>,<2C>"*<2A>;<3B>"7<>"*<2A>;<3B>"7<>-<2D>h<EFBFBD>v<EFBFBD>.><3E>?<3F>$,<2C>L<EFBFBD>L<EFBFBD><1D><02>$C<>#+<2B>#9<>#9<>(<28>,<2C>,<2C>|<7C>U]<5D>Ud<55>Ud<55>Uf<55>Up<55>Up<55>Ur<55>:s<>#t<>!)<29><1C><1C>j<EFBFBD>#<23>!><3E>!)<29><1C><1C>j<EFBFBD>"<22>!=<3D><16>C<EFBFBD><19>'<27>'<27><03> <0A> <0A>6<>=<3D>=<3D>c<EFBFBD>B<>
C<01> <10> <1C> <1C> #<23> #<23> %<25> ?<3F> $<24>
<EFBFBD>
<EFBFBD>4<EFBFBD>+<<3C>+<<3C>+F<>+F<>+H<> I<><04> <0A> &<26><> <1D> E<01><15>?<3F><01>s<EFBFBD>C<>D<>D<><44> E<01><><1D> ?<3F><15>9<>!<21><13>=<3D>><3E>><3E><> ?<3F>s0<00>C3E<00>+2F<00> F<03>(E;<03>;F<03> F$<03> F<03>F$c <00><00>g}|jj<00>D]<5D>}|D]y}|j|j|j|j
j |j|jj<00>|j|jd<01><07><00>{<00><>|jjtj|d<02><03>d<04><05>|j jtj|j"d<02><03>d<04><05>y)z'Save relationships and lineage to disk.r'<00>)<01>indentzutf-8)<01>encodingN)r<00>valuesr0rrr <00>valuer!r#r/r$r&r<00>
write_textr)<00>dumpsrr)rr3<00>relsr5s r<00>_savezKnowledgeGraph._saveCs<><00><00><12><04><18>'<27>'<27>.<2E>.<2E>0<>
<13>D<EFBFBD><1B> <13><03><14> <0B> <0B>!$<24><1D><1D>!$<24><1D><1D><1F>H<EFBFBD>H<EFBFBD>N<EFBFBD>N<EFBFBD>#&<26>?<3F>?<3F>"%<25>.<2E>.<2E>":<3A>":<3A>"<<3C> #<23> <0C> <0C> #<23> <0C> <0C><12><13> <13>
<13> <0A><1F><1F>*<2A>*<2A>4<EFBFBD>:<3A>:<3A>d<EFBFBD>1<EFBFBD>+E<>PW<50>*<2A>X<> <0A><19><19>$<24>$<24>T<EFBFBD>Z<EFBFBD>Z<EFBFBD><04> <0A> <0A>a<EFBFBD>%H<>SZ<53>$<24>[r<00>returnc <00>h<00>|j<00><>tj<00>|_|jj <00>D]e}|D]^}|jj |j |j|jj|j|j<00><01><00>`<00>g|jS)z#Ensure the NetworkX graph is built.)r r$r!) r<00>nx<6E>DiGraphrr;<00>add_edgerrr r<r$r!)rr?r5s r<00> _ensure_graphzKnowledgeGraph._ensure_graphXs<><00><00> <0F>;<3B>;<3B> <1E><1C>*<2A>*<2A>,<2C>D<EFBFBD>K<EFBFBD><1D>+<2B>+<2B>2<>2<>4<> <16><04><1F><16>C<EFBFBD><18>K<EFBFBD>K<EFBFBD>(<28>(<28><1B> <0A> <0A><1B> <0A> <0A> <20>X<EFBFBD>X<EFBFBD>^<5E>^<5E>!$<24><1C><1C>$'<27>O<EFBFBD>O<EFBFBD> )<29><16><16> <16><14>{<7B>{<7B>rNrr<00>rel_typer!r$r&c <00><><00>t||||||xsi<00><01>}|j|j|<07>d|_|j <00>|S)a<>
Add a relationship between two memories.
Args:
source_id: ID of the source memory
target_id: ID of the target memory
rel_type: Type of relationship
description: Human-readable description
strength: Relationship strength (0.0-1.0)
metadata: Additional metadata
Returns:
The created relationship
)rrr r!r$r&N)r rr0rr@)rrrrGr!r$r&r5s r<00>add_relationshipzKnowledgeGraph.add_relationshipjsX<00><00>.!<21><1F><1F><19>#<23><1D><1D>^<5E><12> 
<EFBFBD><03> <0A><1B><1B>I<EFBFBD>&<26>-<2D>-<2D>c<EFBFBD>2<><1B><04> <0B> <0A>
<EFBFBD>
<EFBFBD> <0C><12>
rc<00><><00>||jvryt|j|<00>}|rI|j|D<00>cgc]"}|j|k(r|j|k(s|<05><02>$c}|j|<n9|j|D<00>cgc]}|j|k7r|<05><02>c}|j|<t|j|<00>|k}|rd|_|j <00>|Scc}wcc}w)z<>
Remove a relationship between memories.
Returns:
True if a relationship was removed
FN)r<00>lenrr rr@)rrrrG<00>original_count<6E>r<>removeds r<00>remove_relationshipz"KnowledgeGraph.remove_relationship<69>s<><00><00> <15>D<EFBFBD>/<2F>/<2F> /<2F><18><1C>T<EFBFBD>0<>0<><19>;<3B><<3C><0E> <13><1F>.<2E>.<2E>y<EFBFBD>9<>.<0E><17><19> <0B> <0B>y<EFBFBD>0<>Q<EFBFBD>V<EFBFBD>V<EFBFBD>x<EFBFBD>5G<35><12>.<0E>D<EFBFBD> <1F> <1F> <09> *<2A>  <20>.<2E>.<2E>y<EFBFBD>9<>.<0E><17><14>;<3B>;<3B>)<29>+<2B><12>.<0E>D<EFBFBD> <1F> <1F> <09> *<2A>
<16>d<EFBFBD>)<29>)<29>)<29>4<>5<><0E>F<><07> <12><1E>D<EFBFBD>K<EFBFBD> <10>J<EFBFBD>J<EFBFBD>L<EFBFBD><16><0E><>!.<0E><>
.s <00>'C"<04>C'<04> memory_id<69> directionc <00><00>g}|dvrD|jj|g<00>D]%}|<02>|j|k(s<01>|j|<05><00>'|dvr<>|jj <00>D]<5D>\}}||k(r<01> |D]<5D>}|j
|k(s<01>|<02>|j|k(s<01>%|jt |j
|j|j|j|j|j|j<00><03><00><00><><00><>|S)a.
Get relationships for a memory.
Args:
memory_id: The memory ID
rel_type: Filter by relationship type
direction: Which direction to look (outgoing, incoming, both)
Returns:
List of matching relationships
)<02>outgoing<6E>both)<02>incomingrTr') rr,r r0<00>itemsrr rr!r#r$r&)rrPrGrQ<00>resultsr5rr?s r<00>get_relationshipsz KnowledgeGraph.get_relationships<70>s<00><00>"<15><07> <14>,<2C> ,<2C><1B>*<2A>*<2A>.<2E>.<2E>y<EFBFBD>"<22>=<3D> (<28><03><1B>#<23>s<EFBFBD>x<EFBFBD>x<EFBFBD>8<EFBFBD>';<3B><1B>N<EFBFBD>N<EFBFBD>3<EFBFBD>'<27> (<28> <15>,<2C> ,<2C>#'<27>#6<>#6<>#<<3C>#<<3C>#><3E> <1F><0F> <09>4<EFBFBD><1C> <09>)<29><1C><1F> <1F>C<EFBFBD><1A>}<7D>}<7D> <09>1<>#<23>+<2B>s<EFBFBD>x<EFBFBD>x<EFBFBD>8<EFBFBD>/C<>#<23>N<EFBFBD>N<EFBFBD>+=<3D>*-<2D>-<2D>-<2D>*-<2D>-<2D>-<2D>%(<28>X<EFBFBD>X<EFBFBD>,/<2F>O<EFBFBD>O<EFBFBD>+.<2E>><3E>><3E>),<2C><1C><1C>),<2C><1C><1C>,<1E><1F> <1F> <1F>"<17>r<00> max_depth<74> min_strengthc<00><><00>|j<00>}||vriSd|dfgi}|h}td|dz<00>D]<5D>}g||<||dz
D]<5D>\}} |j|<08>D]n}
|
|vr<01>|j||
<EFBFBD>} | s<01>| j dd<02>|k\s<01>3| | j dd<02>z} ||j |
| f<02>|j |
<EFBFBD><00>p<00><>||r<01><>|S|S)aR
Find all memories related to a given memory.
Args:
memory_id: Starting memory ID
max_depth: Maximum traversal depth
min_strength: Minimum relationship strength
Returns:
Dict mapping depth to list of (memory_id, cumulative_strength) tuples
rr%<00>r$)rF<00>range<67> neighbors<72> get_edge_datar,r0<00>add) rrPrYrZ<00>graphrW<00>visited<65>depth<74>prev_id<69> prev_strength<74>neighbor<6F> edge_datar$s r<00> find_relatedzKnowledgeGraph.find_related<65>s<00><00>"<15>"<22>"<22>$<24><05> <14>E<EFBFBD> !<21><15>I<EFBFBD>78<37>I<EFBFBD>s<EFBFBD>;K<>:L<>6M<36><07><1C>+<2B><07><1A>1<EFBFBD>i<EFBFBD>!<21>m<EFBFBD>,<2C> <16>E<EFBFBD><1F>G<EFBFBD>E<EFBFBD>N<EFBFBD>*1<>%<25>!<21>)<29>*<<3C> .<2E>&<26><07><1D> %<25><0F><0F><07> 8<>.<2E>H<EFBFBD><1F>7<EFBFBD>*<2A> <20> %<25> 3<> 3<>G<EFBFBD>X<EFBFBD> F<>I<EFBFBD> <20>Y<EFBFBD>]<5D>]<5D>:<3A>s<EFBFBD>%C<>|<7C>%S<>#0<>9<EFBFBD>=<3D>=<3D><1A>S<EFBFBD>3Q<33>#Q<><08><1F><05><0E>-<2D>-<2D>x<EFBFBD><18>.B<>C<><1F> <0B> <0B>H<EFBFBD>-<2D>.<2E> .<2E><1B>5<EFBFBD>><3E><15><16><0E># <16>"<17>rc<00>H<00>g}g}d}|}t<00>}|rc||vr_|j|<05>|j|tjd<02>}|r#|dj
}|j |<08>|}nn|r||vr<01>_|j<00>|}|r_||vr[|j|<05>|j|tjd<04>}|D]} |j | j<00><00>|r||vr<01>[|j|tjd<04>}
|
r|
dj}||||d<05>S)z<>
Get the full lineage of a memory (what it was derived from).
Returns:
Dict with 'ancestors', 'descendants', and 'superseded_by' lists
NrSrrU)rP<00> ancestors<72> descendants<74> superseded_by)
<EFBFBD>setr`rXr <00> DERIVED_FROMrr0<00>clearr<00>
SUPERSEDES) rrPrjrkrl<00>currentrbr?<00>parentr5<00>sup_rels r<00> get_lineagezKnowledgeGraph.get_lineage s><00><00><17> <09><18> <0B><1C> <0A><1C><07><15>%<25><07><15>'<27><17>0<> <13>K<EFBFBD>K<EFBFBD><07> <20><17>)<29>)<29>'<27>3C<33>3P<33>3P<33>R\<5C>]<5D>D<EFBFBD><13><1D>a<EFBFBD><17>*<2A>*<2A><06><19> <20> <20><16>(<28> <20><07><15><16>'<27><17>0<> <10> <0A> <0A><0F><1B><07><15>'<27><17>0<> <13>K<EFBFBD>K<EFBFBD><07> <20><17>)<29>)<29>'<27>3C<33>3P<33>3P<33>R\<5C>]<5D>D<EFBFBD><1B> 2<><03><1B>"<22>"<22>3<EFBFBD>=<3D>=<3D>1<> 2<> <16>'<27><17>0<><17>(<28>(<28><19>4D<34>4O<34>4O<34>Q[<5B>\<5C><07> <12>#<23>A<EFBFBD>J<EFBFBD>0<>0<>M<EFBFBD>#<23>"<22>&<26>*<2A> 
<EFBFBD>
r<00> new_memory_id<69>parent_memory_id<69>notesc<00>F<00>|j||tj|xsd|<02><00><02><02>||jvr#|j|j dd<04>dz}nd}||t j <00>j<00>|d<06>|j|<|j<00>y)z.Record that a memory was derived from another.z Derived from <20>r!<00>
generationrr\)rrrzr#rwN) rIr rnrr,rr.r/r@)rrurvrwrzs r<00>record_derivationz KnowledgeGraph.record_derivation<s<><00><00> <0C><1D><1D> <19> <1C> <1C> )<29> )<29><1D>C<>=<3D>1A<31>0B<30>!C<> <1E>
<EFBFBD> <1C>t<EFBFBD>}<7D>}<7D> ,<2C><1D><1D><1D>'7<>8<><<3C><<3C>\<5C>1<EFBFBD>M<>PQ<50>Q<>J<EFBFBD><1A>J<EFBFBD>'<27>$<24>"<22>/<2F>/<2F>+<2B>5<>5<>7<><1A> (
<EFBFBD><04> <0A> <0A>m<EFBFBD>$<24> <0A>
<EFBFBD>
<EFBFBD> r<00> old_memory_id<69>reasonc<00>X<00>|j||tj|xsd|<02><00><02><02>y)z(Record that a memory supersedes another.z Supersedes ryN)rIr rp)rrur|r}s r<00>record_supersessionz"KnowledgeGraph.record_supersessionTs3<00><00> <0C><1D><1D> <19> <19> <1C> '<27> '<27><1E>?<3F>K<EFBFBD> <0A><EFBFBD>"?<3F> <1E>
rc<00>D<00>|j|tjd<01>S)z2Find memories that conflict with the given memory.rT)rXr <00>CONFLICTS_WITH)rrPs r<00>find_conflictszKnowledgeGraph.find_conflicts]s<00><00><13>%<25>%<25>i<EFBFBD>1A<31>1P<31>1P<31>RX<52>Y<>Yr<00> memory_a_id<69> memory_b_idc<00>J<00>|j||tj|<03><01>y)z'Record a conflict between two memories.ryN)rIr r<>)rr<>r<>r!s r<00>record_conflictzKnowledgeGraph.record_conflictas)<00><00> <0A><1D><1D> <17> <17> <1C> +<2B> +<2B>#<23> <1E>
r<00>min_cluster_sizec<00>D<00>|j<00>}t|<02>|krgS tjj |j <00><00>}|D<00>cgc]}t|<04>|k\s<01>t |<04><00><02>c}Scc}w#t$r}td|<05><00><02>gcYd}~Sd}~wwxYw)z<>
Find clusters of closely related memories.
Uses community detection on the relationship graph.
Returns:
List of memory ID sets (clusters)
z#Warning: Cluster detection failed: N) rFrKrC<00> community<74>greedy_modularity_communities<65> to_undirectedrmr1r2)rr<>ra<00> communities<65>cr6s r<00> find_clusterszKnowledgeGraph.find_clustersks<><00><00><15>"<22>"<22>$<24><05> <0E>u<EFBFBD>:<3A>(<28> (<28><15>I<EFBFBD> <16><1C>,<2C>,<2C>D<>D<>U<EFBFBD>EX<45>EX<45>EZ<45>[<5B>K<EFBFBD>$/<2F>N<>q<EFBFBD>3<EFBFBD>q<EFBFBD>6<EFBFBD>=M<>3M<33>C<EFBFBD><01>F<EFBFBD>N<> N<><4E>N<><4E><18> <16> <11>7<><01>s<EFBFBD>;<3B> <<3C><15>I<EFBFBD><49> <16>s5<00>1A<<00>A7<04>' A7<04>4A<<00>7A<<00>< B<03>B<03>B<03>B<03>nc<00><><00>|j<00>}t|<02>dk(rgS tj|<02>}t |j <00>d<02>d<03><04>}|d|S#t $r}td|<05><00><02>gcYd}~Sd}~wwxYw)z<>
Get the most central memories by PageRank.
Returns:
List of (memory_id, centrality_score) tuples
rc<00> <00>|dS)Nr\<00>)<01>xs r<00><lambda>z5KnowledgeGraph.get_central_memories.<locals>.<lambda><3E>s
<00><00>A<EFBFBD>a<EFBFBD>D<EFBFBD>rT)<02>key<65>reverseNz(Warning: Centrality calculation failed: )rFrKrC<00>pagerank<6E>sortedrVr1r2)rr<>ra<00>
centrality<EFBFBD> sorted_nodesr6s r<00>get_central_memoriesz#KnowledgeGraph.get_central_memories<65>s<00><00><15>"<22>"<22>$<24><05> <0E>u<EFBFBD>:<3A><11>?<3F><15>I<EFBFBD> <16><1B><1B><1B>U<EFBFBD>+<2B>J<EFBFBD>!<21>*<2A>"2<>"2<>"4<>.<2E>RV<52>W<>L<EFBFBD><1F><02><11>#<23> #<23><><18> <16> <11><<3C>Q<EFBFBD>C<EFBFBD>@<40> A<><15>I<EFBFBD><49> <16>s<00>6A<00> A<<03>"A7<03>1A<<03>7A<c<00><><00>|j<00>}|j<00>|j<00>iddd<03>}|jj <00>D]=}|D]6}|j
j }|dj|d<05>dz|d|<<00>8<00>?t|<01>dkDrB tj|j<00><00>|d< tj|<01>|d<|S|S#Y<00>!xYw#Y|SxYw) z)Get statistics about the knowledge graph.<2E>F)<05> total_nodes<65> total_edges<65>by_type<70>avg_clustering<6E> is_connectedr<64>rr\r<>r<>) rF<00>number_of_nodes<65>number_of_edgesrr;r r<r,rKrC<00>average_clusteringr<67><00>is_weakly_connected)rra<00>statsr?r5<00>ts r<00> get_statszKnowledgeGraph.get_stats<74>s<00><00><14>"<22>"<22>$<24><05>!<21>0<>0<>2<> <20>0<>0<>2<><19>!<21>!<21> 
<EFBFBD><05><19>'<27>'<27>.<2E>.<2E>0<> E<01>D<EFBFBD><1B> E<01><03><17>H<EFBFBD>H<EFBFBD>N<EFBFBD>N<EFBFBD><01>&+<2B>I<EFBFBD>&6<>&:<3A>&:<3A>1<EFBFBD>a<EFBFBD>&@<40>1<EFBFBD>&D<><05>i<EFBFBD> <20><11>#<23> E<01> E<01>
<0F>u<EFBFBD>:<3A><01>><3E> <15>*,<2C>*?<3F>*?<3F><05>@S<>@S<>@U<>*V<><05>&<26>'<27> <15>(*<2A>(><3E>(><3E>u<EFBFBD>(E<><05>n<EFBFBD>%<25><15> <0C>u<EFBFBD> <0C><> <15><14><> <15><14><14> <0C>s<00>&C!<00>C(<00>!C%<03>(C-<03>formatc<00><00>|j<00>}tj<00>jd<01>}|dk(r=|jd|<03>d<04>z }t j |t|<04><00>t|<04>S|dk(r=|jd|<03>d<06>z }t j|t|<04><00>t|<04>S|dk(r=|jd|<03>d<08>z }t j|t|<04><00>t|<04>Std |<01><00><02><00>)
z<EFBFBD>
Export the knowledge graph in various formats.
Args:
format: Export format (gexf, graphml, adjacency)
Returns:
Path to exported file
z %Y%m%d_%H%M%S<>gexf<78>knowledge_graph_z.gexf<78>graphmlz.graphml<6D> adjacencyz.adjzUnknown format: ) rFrr.<00>strftimerrC<00>
write_gexf<EFBFBD>str<74> write_graphml<6D> write_adjlist<73>
ValueError)rr<>ra<00> timestamp<6D>paths r<00> export_graphzKnowledgeGraph.export_graph<70>s<00><00><15>"<22>"<22>$<24><05><1C>O<EFBFBD>O<EFBFBD>%<25>.<2E>.<2E><EFBFBD>?<3F> <09> <11>V<EFBFBD> <1B><17>=<3D>=<3D>%5<>i<EFBFBD>[<5B><05>#F<>F<>D<EFBFBD> <0E>M<EFBFBD>M<EFBFBD>%<25><13>T<EFBFBD><19> +<2B><13>4<EFBFBD>y<EFBFBD><18><14>y<EFBFBD> <20><17>=<3D>=<3D>%5<>i<EFBFBD>[<5B><08>#I<>I<>D<EFBFBD> <0E> <1C> <1C>U<EFBFBD>C<EFBFBD><04>I<EFBFBD> .<2E><13>4<EFBFBD>y<EFBFBD><18> <14>{<7B> "<22><17>=<3D>=<3D>%5<>i<EFBFBD>[<5B><04>#E<>E<>D<EFBFBD> <0E> <1C> <1C>U<EFBFBD>C<EFBFBD><04>I<EFBFBD> .<2E><13>4<EFBFBD>y<EFBFBD><18><1D>/<2F><06>x<EFBFBD>8<>9<> 9r<00> output_pathc
<00>T<00> ddlm}|j<00>}t |<03>dk(r t d<04><00>|j d<05><06>tj|dd<08> <09>}g}|j<00>D]}|jd
<EFBFBD><00>tj|||d d <0C> <0A>tj||d<0E><0F>dddddd<15>}|j<00>D]b\}} |jd<16><17>D<00>
<EFBFBD> <0B> cgc]\}
} } | jd<18>|k(s<01>|
| f<02><02>!} } }
} | s<01>Gtj ||| | ddd<1A><1B><00>d|j#d<1C>|j%d<1D>|<01>|j&dz }|j)|dd <20>!<21>|j+<00>|S#t$r td<03><00>wxYwcc} } }
w)"z<>
Create a visualization of the knowledge graph.
Returns:
Path to the generated visualization
rNz(matplotlib is required for visualizationzCannot visualize empty graph)<02> <00>
)<01>figsizer8<00>2)<02>k<>
iterations<EFBFBD>skybluei<65>g<><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?)<03>
node_color<EFBFBD> node_size<7A>alpha<68>)<01> font_size<7A>gray<61>red<65>orange<67>green<65>purple)<05>related<65>
depends_on<EFBFBD>
supersedes<EFBFBD> derived_from<6F>conflicts_withT)r3r r<>g333333<33>?)<05>edgelist<73>
edge_color<EFBFBD>arrows<77> arrowsizer<65>zAP Knowledge Graph<70>offzknowledge_graph.png<6E>tight<68><74>)<02> bbox_inches<65>dpi)<16>matplotlib.pyplot<6F>pyplot<6F> ImportErrorrFrKr<><00>figurerC<00> spring_layout<75>nodesr0<00>draw_networkx_nodes<65>draw_networkx_labelsrV<00>edgesr,<00>draw_networkx_edges<65>title<6C>axisr<00>savefig<69>close)rr<><00>pltra<00>pos<6F> node_colors<72>node<64> edge_colorsrG<00>color<6F>u<>v<>dr<64>s r<00> visualizezKnowledgeGraph.visualize<7A>s<><00><00> J<01> +<2B><15>"<22>"<22>$<24><05> <0E>u<EFBFBD>:<3A><11>?<3F><1C>;<3B><<3C> <<3C> <0B>
<EFBFBD>
<EFBFBD>8<EFBFBD>
<EFBFBD>$<24><11><1E><1E>u<EFBFBD><01>b<EFBFBD>9<><03><19> <0B><19>K<EFBFBD>K<EFBFBD>M<EFBFBD> *<2A>D<EFBFBD> <17> <1E> <1E>y<EFBFBD> )<29> *<2A> <0B><1E><1E>u<EFBFBD>c<EFBFBD>k<EFBFBD>S<EFBFBD>X[<5B>\<5C>
<EFBFBD><1F><1F><05>s<EFBFBD>a<EFBFBD>8<><1E><1F>"<22>#<23>&<26> 
<EFBFBD> <0B> +<2B>0<>0<>2<> M<01>O<EFBFBD>H<EFBFBD>e<EFBFBD>+0<>;<3B>;<3B>D<EFBFBD>;<3B>+A<>_<>_<><07><01>1<EFBFBD>a<EFBFBD>Q<EFBFBD>U<EFBFBD>U<EFBFBD>6<EFBFBD>]<5D>V^<5E>E^<5E>a<EFBFBD><11>V<EFBFBD>_<>E<EFBFBD>_<><14><12>&<26>&<26>u<EFBFBD>c<EFBFBD>E<EFBFBD>e<EFBFBD>.2<EFBFBD>b<EFBFBD><03>M<01> M<01> <0C> <09> <09>&<26>'<27> <0B><08><08><15><0F> <16> <1E><1E>-<2D>-<2D>*?<3F>?<3F>K<EFBFBD> <0B> <0B> <0B>K<EFBFBD>W<EFBFBD>#<23> <0B>><3E> <0B> <09> <09> <0B><1A><1A><>]<1B> J<01><1D>H<>I<> I<> J<01><>@`s<00>F <00>)F#
<EFBFBD>F#
<EFBFBD> F )r"r%N)N)NrS)r8r<>)r")<01>)<01>)r<>)$<24>__name__<5F>
__module__<EFBFBD> __qualname__<5F>__doc__rrrr@rCrDrFr<>r <00>floatrrr rI<00>boolrOrrX<00>intr rhrtr{rr<>r<>rr<>r<>r<>r<>r<>r<>rrrrs.<00><00> <08> <15><14> <15>?<3F>6\<01>*<1B>r<EFBFBD>z<EFBFBD>z<EFBFBD><1B>.<1E><1D>#'<27>(<13><16>(<13><17>(<13>#<23> (<13>
<19> (<13> <18> (<13><1B>4<EFBFBD>.<2E>(<13>
<1C>(<13>T<17>S<EFBFBD><17>S<EFBFBD><17>H<EFBFBD>Ue<55>Lf<4C><17>rv<72><17>D04<30>#<23> *<17><16>*<17><1B>+<2B>,<2C>*<17><17> *<17>
<0E> <20> !<21> *<17>^<1B>!<21> *<17><16>*<17><17>*<17><1C> *<17>
<0E>c<EFBFBD>4<EFBFBD><05>c<EFBFBD>5<EFBFBD>j<EFBFBD>)<29>*<2A>*<2A> +<2B> *<17>X/
<EFBFBD>S<EFBFBD>/
<EFBFBD>T<EFBFBD>/
<EFBFBD>b<15>s<EFBFBD><15>c<EFBFBD><15>RU<52><15>0
<EFBFBD><13>
<EFBFBD>S<EFBFBD>
<EFBFBD>RU<EFBFBD>
<EFBFBD>Z<01><03>Z<01><04>5G<35>0H<30>Z<01>
<EFBFBD>3<EFBFBD>
<EFBFBD>S<EFBFBD>
<EFBFBD>s<EFBFBD>
<EFBFBD><16>c<EFBFBD><16>$<24>s<EFBFBD>3<EFBFBD>x<EFBFBD>.<2E><16>,<16>c<EFBFBD><16>$<24>u<EFBFBD>S<EFBFBD>%<25>Z<EFBFBD>7H<37>2I<32><16>(<15>4<EFBFBD><15>><19>3<EFBFBD><19>C<EFBFBD><19>87<1B>X<EFBFBD>d<EFBFBD>^<5E>7<1B>t<EFBFBD>7rr)r<>r)<00>pathlibrr<00>typingrrrrr <00> collectionsr
<00>networkxrC<00> memory_typesr r r rr<>rr<00><module>rs3<00><01><04>  <0C><18><1D>3<>3<>#<23><15>J<>J<>v<1B>vr