@@ -1010,14 +1010,16 @@ <h1>Source code for treeswift.Tree</h1><div class="highlight"><pre>
10101010 < span class ="k "> except</ span > < span class ="p "> :</ span >
10111011 < span class ="k "> raise</ span > < span class ="ne "> TypeError</ span > < span class ="p "> (</ span > < span class ="s2 "> "labels must be iterable"</ span > < span class ="p "> )</ span >
10121012 < span class ="n "> l2n</ span > < span class ="o "> =</ span > < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> label_to_node</ span > < span class ="p "> (</ span > < span class ="n "> labels</ span > < span class ="p "> )</ span >
1013- < span class ="n "> count</ span > < span class ="o "> =</ span > < span class ="p "> {}</ span >
1014- < span class ="k "> for</ span > < span class ="n "> node</ span > < span class ="ow "> in</ span > < span class ="n "> l2n</ span > < span class ="o "> .</ span > < span class ="n "> values</ span > < span class ="p "> ():</ span >
1015- < span class ="k "> for</ span > < span class ="n "> a</ span > < span class ="ow "> in</ span > < span class ="n "> node</ span > < span class ="o "> .</ span > < span class ="n "> traverse_ancestors</ span > < span class ="p "> ():</ span >
1016- < span class ="k "> if</ span > < span class ="n "> a</ span > < span class ="ow "> not</ span > < span class ="ow "> in</ span > < span class ="n "> count</ span > < span class ="p "> :</ span >
1017- < span class ="n "> count</ span > < span class ="p "> [</ span > < span class ="n "> a</ span > < span class ="p "> ]</ span > < span class ="o "> =</ span > < span class ="mi "> 0</ span >
1018- < span class ="n "> count</ span > < span class ="p "> [</ span > < span class ="n "> a</ span > < span class ="p "> ]</ span > < span class ="o "> +=</ span > < span class ="mi "> 1</ span >
1019- < span class ="k "> if</ span > < span class ="n "> count</ span > < span class ="p "> [</ span > < span class ="n "> a</ span > < span class ="p "> ]</ span > < span class ="o "> ==</ span > < span class ="nb "> len</ span > < span class ="p "> (</ span > < span class ="n "> l2n</ span > < span class ="p "> ):</ span >
1020- < span class ="k "> return</ span > < span class ="n "> a</ span >
1013+ < span class ="n "> count</ span > < span class ="o "> =</ span > < span class ="p "> {};</ span > < span class ="n "> q</ span > < span class ="o "> =</ span > < span class ="n "> deque</ span > < span class ="p "> (</ span > < span class ="n "> l2n</ span > < span class ="o "> .</ span > < span class ="n "> values</ span > < span class ="p "> ())</ span >
1014+ < span class ="k "> while</ span > < span class ="nb "> len</ span > < span class ="p "> (</ span > < span class ="n "> q</ span > < span class ="p "> )</ span > < span class ="o "> !=</ span > < span class ="mi "> 0</ span > < span class ="p "> :</ span >
1015+ < span class ="n "> curr</ span > < span class ="o "> =</ span > < span class ="n "> q</ span > < span class ="o "> .</ span > < span class ="n "> popleft</ span > < span class ="p "> ()</ span >
1016+ < span class ="k "> if</ span > < span class ="n "> curr</ span > < span class ="ow "> not</ span > < span class ="ow "> in</ span > < span class ="n "> count</ span > < span class ="p "> :</ span >
1017+ < span class ="n "> count</ span > < span class ="p "> [</ span > < span class ="n "> curr</ span > < span class ="p "> ]</ span > < span class ="o "> =</ span > < span class ="mi "> 0</ span >
1018+ < span class ="n "> count</ span > < span class ="p "> [</ span > < span class ="n "> curr</ span > < span class ="p "> ]</ span > < span class ="o "> +=</ span > < span class ="mi "> 1</ span >
1019+ < span class ="k "> if</ span > < span class ="n "> count</ span > < span class ="p "> [</ span > < span class ="n "> curr</ span > < span class ="p "> ]</ span > < span class ="o "> ==</ span > < span class ="nb "> len</ span > < span class ="p "> (</ span > < span class ="n "> l2n</ span > < span class ="p "> ):</ span >
1020+ < span class ="k "> return</ span > < span class ="n "> curr</ span >
1021+ < span class ="k "> if</ span > < span class ="n "> curr</ span > < span class ="o "> .</ span > < span class ="n "> parent</ span > < span class ="ow "> is</ span > < span class ="ow "> not</ span > < span class ="kc "> None</ span > < span class ="p "> :</ span >
1022+ < span class ="n "> q</ span > < span class ="o "> .</ span > < span class ="n "> append</ span > < span class ="p "> (</ span > < span class ="n "> curr</ span > < span class ="o "> .</ span > < span class ="n "> parent</ span > < span class ="p "> )</ span >
10211023 < span class ="k "> raise</ span > < span class ="ne "> RuntimeError</ span > < span class ="p "> (</ span > < span class ="s2 "> "There somehow does not exist an MRCA for the given labels"</ span > < span class ="p "> )</ span > </ div >
10221024
10231025
0 commit comments