Skip to main content
  • Home
  • Development
  • Documentation
  • Donate
  • Operational login
  • Browse the archive

swh logo
SoftwareHeritage
Software
Heritage
Archive
Features
  • Search

  • Downloads

  • Save code now

  • Add forge now

  • Help

https://github.com/blab/mumps-wa-phylodynamics
20 April 2021, 13:07:29 UTC
  • Code
  • Branches (1)
  • Releases (0)
  • Visits
    • Branches
    • Releases
    • HEAD
    • refs/heads/master
    No releases to show
  • 95b28ff
  • /
  • baltic
  • /
  • baltic.pyc
Raw File Download
Take a new snapshot of a software origin

If the archived software origin currently browsed is not synchronized with its upstream version (for instance when new commits have been issued), you can explicitly request Software Heritage to take a new snapshot of it.

Use the form below to proceed. Once a request has been submitted and accepted, it will be processed as soon as possible. You can then check its processing state by visiting this dedicated page.
swh spinner

Processing "take a new snapshot" request ...

Permalinks

To reference or cite the objects present in the Software Heritage archive, permalinks based on SoftWare Hash IDentifiers (SWHIDs) must be used.
Select below a type of object currently browsed in order to display its associated SWHID and permalink.

  • content
  • directory
  • revision
  • snapshot
origin badgecontent badge Iframe embedding
swh:1:cnt:72d959d4e7c96c403415895d3351ed64107ed3ef
origin badgedirectory badge Iframe embedding
swh:1:dir:97219f79d4511ccc5ac7411a16c50df61fef6740
origin badgerevision badge
swh:1:rev:b8358a0d49d70670dbab9eeffa9972c277b3021b
origin badgesnapshot badge
swh:1:snp:18179ecad9f3eb540e5ef59079943da8f0033114
Citations

This interface enables to generate software citations, provided that the root directory of browsed objects contains a citation.cff or codemeta.json file.
Select below a type of object currently browsed in order to generate citations for them.

  • content
  • directory
  • revision
  • snapshot
Generate software citation in BibTex format (requires biblatex-software package)
Generating citation ...
Generate software citation in BibTex format (requires biblatex-software package)
Generating citation ...
Generate software citation in BibTex format (requires biblatex-software package)
Generating citation ...
Generate software citation in BibTex format (requires biblatex-software package)
Generating citation ...
Tip revision: b8358a0d49d70670dbab9eeffa9972c277b3021b authored by Louise Moncla on 17 March 2021, 19:25:20 UTC
adding in callouts for Wisconsin H and A genomes
Tip revision: b8358a0
baltic.pyc
ó
R®^c@spddlZddlZddlZddlZddlZdedd„Zd„Zdfd„ƒYZ	dfd	„ƒYZ
d
fd„ƒYZdfd
„ƒYZe
ed„Ze
ed„Zddeeed„Zdddeeed„Zidd6dd6e
eeed„ZedkrlddlZeejdeƒZejƒejjdejƒndS(iÿÿÿÿNs%Y-%m-%dt-c	Csæ|tkrzt|j|ƒƒ}|dkrL|j|j|ƒd ƒ}qz|dkrz|j|j|ƒd ƒ}qzntjj||ƒ}|j}tj|ddƒ}tj|dddƒ}|||jƒ||jƒS(s> Converts calendar dates in specified format to decimal date. iiÿÿÿÿiiþÿÿÿ(	tTruetlentsplittjointdttdatetimetstrptimetyeart
total_seconds(	tdatetfmttvariabletdateSplittertdateLt	adatetimeRtboyteoy((s#/Users/lmoncla/src/baltic/baltic.pytdecimalDates"	cCs"tjjtjj||ƒ|ƒS(s/ Converts calendar dates between given formats (RRtstrftimeR(txtstarttend((s#/Users/lmoncla/src/baltic/baltic.pytconvertDatestcladecBseZd„ZRS(cCs”d|_d|_d|_d|_d|_d|_d|_i|_d|_	||_
||_d|_d|_
d|_d|_d|_dS(Ntleafgi(t
branchTypetNonetsubtreetleavestlengththeighttabsoluteTimetparentttraitstindextnametnumNameRtyt
lastHeighttlastAbsoluteTimetwidth(tselft	givenName((s#/Users/lmoncla/src/baltic/baltic.pyt__init__s 															(t__name__t
__module__R,(((s#/Users/lmoncla/src/baltic/baltic.pyRstnodecBseZd„ZRS(cCssd|_d|_d|_d|_d|_g|_i|_d|_d|_	d|_
d|_tƒ|_
dS(NR/g(RRRRR R!tchildrenR"R#tchildHeightRR&tsetR(R*((s#/Users/lmoncla/src/baltic/baltic.pyR,.s											(R-R.R,(((s#/Users/lmoncla/src/baltic/baltic.pyR/-sRcBseZd„ZRS(cCsgd|_d|_d|_d|_d|_d|_d|_d|_i|_	d|_
d|_dS(NR(RRR$R%R#RR RR!R"RR&(R*((s#/Users/lmoncla/src/baltic/baltic.pyR,>s										(R-R.R,(((s#/Users/lmoncla/src/baltic/baltic.pyR=sttreec	BsÐeZd„Zd„Zd„Zd2d2d„Zd„Zd„Zd„Z	d2d„d„d2e
d	„Zd2d
„Ze
d„Zd2e
d„Zd2d2d
„Ze
e
d„Ze
d„d„Zd„Zd„ge
d„Zd2d2e
e
e
d2d2e
d„Ze
d„Ze
d„Zd„d„Zd„Zd„Zd„d„Zd„Zd„d„d „d!„d"„Zd#„d$„d%„d&„d'„d(„d)„Zd*d+„d,„d-„d.„d/„d0„d1„ZRS(3cCsatƒ|_d|j_d|j_d|j_d|_g|_d|_d|_	d|_
dS(NtRootgi(R/tcur_nodeR#RRRtroottObjectsttipMapt
treeHeighttySpan(R*((s#/Users/lmoncla/src/baltic/baltic.pyR,Ls				cCsltƒ}||_|jdkr-||_n|j|_|jjj|ƒ||_|jj|jƒdS(s& Attaches a new node to current node. N(	R/R#R6RR5R!R0tappendR7(R*titnew_node((s#/Users/lmoncla/src/baltic/baltic.pytadd_nodeWs			cCsutƒ}||_|jdkr-||_n|j|_|jjj|ƒ||_||_|j	j|jƒdS(s* Attach a new leaf (tip) to current node. N(
RR#R6RR5R!R0R;R%R7(R*R<R$tnew_leaf((s#/Users/lmoncla/src/baltic/baltic.pytadd_leafcs				csòtj|j|dd„d|ƒƒ}|dksgtg|D]}|jdkr=|^q=ƒdkrkdStƒ}||_|d|_t	|ƒ‰|dk	rêx8|j
ƒD]*}tt‡fd†|j
ƒƒ|_
q¯W|jƒn|SdS(s× Generate a subtree (as a baltic tree object) from a traversal.
            k is the starting branch for traversal (default: root).
            traverse_condition is a function that determines whether a child branch should be visited (default: always true).
            Returns a new baltic tree instance.
            Note - custom traversal functions can result in multitype trees.
            If this is undesired call singleType() on the resulting subtree afterwards. tinclude_conditioncSstS(N(R(tk((s#/Users/lmoncla/src/baltic/baltic.pyt<lambda>wsttraverse_conditionRics
|ˆkS(N((RB(tsubtree_set(s#/Users/lmoncla/src/baltic/baltic.pyRCƒsN(tcopytdeepcopyt
traverse_treeRRRR3R7R6R2tgetInternaltlisttfilterR0tfixHangingNodes(R*RBRDRt
local_treetnd((REs#/Users/lmoncla/src/baltic/baltic.pyRps'@		
(
cCsMg|jD]0}|jdkr
t|jƒdkr
|^q
}xüt|ƒdkr>g|jD]0}|jdkr_t|jƒdkr_|^q_}x£t|dd„ƒD]Œ}|jd}|j}||_|jj|ƒ|jj|ƒtt	|jƒƒ|_|j
|j
7_
|j|ƒ|jj|ƒq«WqCW|jƒdS(s= Removes any branches with a single child (multitype nodes). R/iitkeycSs|jS(N(R(R((s#/Users/lmoncla/src/baltic/baltic.pyRCŽsN(R7RRR0tsortedR!R;tremoveRJR2RtsortBranches(R*RBtmultiTypeNodestchildtgrandparent((s#/Users/lmoncla/src/baltic/baltic.pyt
singleType‰s@@
		
cCs/x(|jD]}||j|j|_q
WdS(sQ place all objects in absolute time by providing the date of the most recent tip N(R7R9RR (R*R
R<((s#/Users/lmoncla/src/baltic/baltic.pytsetAbsoluteTimescCs˜|jƒ|j}d|jtg|D]}|j^q&ƒfGH|jƒ}t}t}t}g|D]}t|jƒ^qf}t|ƒdkrœt	}nOt
|ƒt|ƒ}}	|	dkrÖ|dkrÖt	}n|dkrët	}nt}
tg|D]}t|jƒ^qûƒ}|dkr.t	}
n|r<dGHn|rJdGHn|rXdGHn|
rfdGHnd	t|ƒt|ƒt|ƒt|ƒfGHd
S(s$ provide information about the tree s$
Tree height: %.6f
Tree length: %.6fiiisstrictly bifurcating treesmultitype treessingleton treesannotations presents9
Numbers of objects in tree: %d (%d nodes and %d leaves)
N(
RHR7R9tsumRRItFalseRR0RtmintmaxR"(R*tobsRtnodeststrictlyBifurcatingt	multiTypet	singletont
N_childrentminChildrentmaxChildrent	hasTraitstmaxAnnotations((s#/Users/lmoncla/src/baltic/baltic.pyt	treeStats£s8
	."			(	cCs
|jdkS(NR(R(RB((s#/Users/lmoncla/src/baltic/baltic.pyRCÈscCstS(N(R(RB((s#/Users/lmoncla/src/baltic/baltic.pyRCÈscCsh|dkrpxA|jD]6}|jdkrCtƒ|_d|_nd|_qW|tkrddGHn|j}n|dkr…g}n|j	r¶|jdkr¶|j
|j	j|_n|jdkrÑd|_n|tkrõd|j|jfGHn||ƒr|j|ƒn|jdkr9|j	jj
|jƒn+|jdkrdxxt||jƒD]d}|tkr|d|jGHn|jd|d|d	|d
|d|ƒ|tkr[d|jGHq[q[Wt|jƒd
ksëtd|jƒ‚tg|jD]'}|jdkr|jn|j^qøƒ|_|j	rU|j	jj|jƒ|j	_n|j|_n|S(NR/sInitiated traversal from rootgs
at %s (%s)Rsvisiting child %sR5RARDtverbosetcollects
child %s doneisATried traversing through hanging node without children. Index: %s(RR7RR2RR1RRR6R!RR#R;taddR%RKR0RHRtAssertionErrorR[tunionR9(R*R5RARDRhRgRBRT((s#/Users/lmoncla/src/baltic/baltic.pyRHÈsD
	((@	!cCsR|dkr'|jdkr'|j}nx$|jƒD]}||j|_q4WdS(s5 Give each tip its correct label using a dictionary. N(RR8tgetExternalR%R$(R*tdRB((s#/Users/lmoncla/src/baltic/baltic.pyt
renameTipsóscs|tkrd‰n|tkr*d‰nxÌ|jƒD]¾}tg|jD]}|jdkrJ|^qJd‡fd†ƒ}tg|jD]}|jdkrŠ|^qŠd‡fd†ƒ}ˆdkrÙ|||_q7ˆdkr7|||_q7q7W|jƒdS(	s  Sort descendants of each node. iÿÿÿÿiR/ROcst|jƒˆ|jˆfS(N(RRR(tq(tmodifier(s#/Users/lmoncla/src/baltic/baltic.pyRCsRcs|jˆS(N(R(Ro(Rp(s#/Users/lmoncla/src/baltic/baltic.pyRCsN(RRYRIRPR0RtdrawTree(R*t
descendingRBRR]R((Rps#/Users/lmoncla/src/baltic/baltic.pyRRús		@@csÿ|dkr/|jƒ}|tkrCdGHqCn|tkrCdGHng|D]}|j^qJ}g|D](}t|tƒrdn
|jd^qf}x#|jD]}d|_d|_	qžWd}i‰x2t
ˆƒt
|jƒkrú|tkrdt
ˆƒGHnx¹t‡fd†|jƒD]œ}|jdkr9|tkrNd|j
GHn|j}|j
|jƒ}t||ƒ}	|tkr‘d	|	GHnt|tƒrÝ||dkrÝ|	||d
8}	|tkrÝd|	GHqÝn||_|	|_	dˆ|j
<t|jdƒtkr9t|jd|j	|j	gƒq9n|jd
krt
g|jD]}
|
j	dkrU|
j	^qUƒt
|jƒkrº|tkr¦d|j
GHn|j}g|jD]}
|
j	dkr¹|
j	^q¹}t|ƒtt
|ƒƒ}	||_|	|_	dˆ|j
<tg|jD]-}|jd
krIt|jƒn|j	^q%ƒ}
tg|jD]-}|jd
krŒt|jƒn|j	^qhƒ}t|d|
|gƒqºqqWt
ˆƒ|ksÜtdƒ‚t
ˆƒ}t|ƒ|_qÉWdS(s* Find x and y coordinates of each branch. sDrawing tree in pre-orders Drawing tree with provided orderiisDrawing iteration %dcs
|jˆkS(N(R#(tw(tdrawn(s#/Users/lmoncla/src/baltic/baltic.pyRC"sRsSetting leaf %s y coordinate tos%sg@s adjusting clade y position to %styRangeR/sSetting node %s coordinatess/Got stuck trying to find y positions of objectsN(RRHRR%t
isinstanceRR)R7RR&RRKRR#RRXRthasattrR!RYtsetattrR0tfloatRZRuR[RjR:(R*torderRgRt
name_ordertskipsRBtstorePlottedty_idxR&Rotchildren_y_coordsRTt	minYranget	maxYrange((Rts#/Users/lmoncla/src/baltic/baltic.pyRqsd5	
"			
%C	.		
CC cCs|d	krŒtg|jƒD](}t|tƒr7dn
|jd^qƒ}|j}x3|jD]%}d|jd<d|_	d|_
q`Wn|jdkr¹dtj
dt|ƒ}n$dtj
t|jƒt|ƒ}|jj	d	kr
d|j_	d|j_
n|jj	|jtj|jd|dƒ|_	|jj
|jtj|jd|dƒ|_
|jd}|jdkrxŒ|jD]~}|jdkrÇdtj
dt|ƒ}n$dtj
t|jƒt|ƒ}||jd<||7}|j||ƒq”Wnd	S(
sÙ
        Calculate x and y coordinates in an unrooted arrangement.
        Code translated from https://github.com/nextstrain/auspice/commit/fc50bbf5e1d09908be2209450c6c3264f298e98c, written by Richard Neher.
        igttauRigð?gà?R/N(RRXRlRvRR)R6R7R"RR&RtmathtpiRyRRR!RtcostsinR0tdrawUnrooted(R*tnttotalRRBRstetatch((s#/Users/lmoncla/src/baltic/baltic.pyR‡Gs0A	
	$22
$

c	Cség|D]}|j^q}tt|ƒƒdks@tdƒ‚|tkr¸tg|D]:}|g|jƒD]}|j^qlkrŠdnd^qVƒt|ƒks!td|ƒ‚nitg|D]:}|g|jƒD]}|j^qØkrödnd^qƒt|ƒks!td|ƒ‚t	t|ƒƒd}t
g|jD]E}|jdksht
|tƒrDt|jƒt|ƒkrD|^qDdd„ƒ}	|tkrg|	D]]}tg|D]2}
g|jD]}|j|^qÎj|
ƒ^q¾ƒt|ƒkr®|^q®d}ngg|	D]V}tg|D]+}
g|jD]}|^q?j|
ƒ^q/ƒt|ƒkr|^qd}|tkr|S|tkrºt|jƒt|ƒkrº|S|tkråt|jƒt|ƒkrådSdS(	Nis7More than one type of data detected in descendants listis-Not all specified descendants are in tree: %sR/ROcSs|jS(N(R(R((s#/Users/lmoncla/src/baltic/baltic.pyRCssiÿÿÿÿ(t	__class__RR2RjRYRXRlR$R%RJRPR7RRvRRR8tcountRR(R*tdescendantsR%tstricttdescttypesRBRstdtypetallAncestorstltancestor((s#/Users/lmoncla/src/baltic/baltic.pytcommonAncestorks $lidqg''cCs
t|jƒS(N(RR(RB((s#/Users/lmoncla/src/baltic/baltic.pyRC€sc
Cs|jdkstdƒ‚t|ƒ}|j|_|j|_|j|_|j|_|j|_|j|_|j	|_	||ƒ|_
|tkr±d|j|jjfGHn|j}|j|dd„ƒ}||_
t|ƒt|jƒkstdƒ‚tg|D]}|j^qƒ|_g|D]}|j^q.jdƒt|ƒkr€tg|D]}|j^qbƒ|_nx|D]}	|jj|	ƒq‡W|jj|ƒ|jj|ƒ|jj|ƒ||_|jdkrù||j|<n|jƒ|jƒdS(s1 Collapse an entire subtree into a clade object. R/sCannot collapse non-node classs0Replacing node %s (parent %s) with a clade classRAcSstS(N(R(RB((s#/Users/lmoncla/src/baltic/baltic.pyRC‘ss!Attempted collapse of entire treeN(RRjRR#RRRR!R R"R)RRHRRR7R[R'RRR(RQR0R;R8RR(
R*tclR+Rgt
widthFunctiontcollapsedCladeR!tremove_from_treeRRB((s#/Users/lmoncla/src/baltic/baltic.pytcollapseSubtree€s:		'%1(
	
cCsxôtg|jD]}t|tƒr|^qƒdkrög|jD]}t|tƒrD|^qD}x‹|D]ƒ}|j}|j}|jj|ƒ|jj|dƒ|j|7_|jj|ƒ|j	dkrl|j	j|jdƒqlqlWqW|j
ƒdS(s$ Uncollapse all collapsed subtrees. iN(RR7RvRR!RR0RQR;R8RtpopR$RH(R*RBtcladesR—R!R((s#/Users/lmoncla/src/baltic/baltic.pytuncollapseSubtree¥s:+
		!cCs|jddkS(Nt	posteriorgà?(R"(R((s#/Users/lmoncla/src/baltic/baltic.pyRC´scs©tj|ƒ‰tˆƒdkrHtt‡‡fd†ˆjƒƒ}nžgˆD]}|j^qOjdƒtˆƒks…tdƒ‚tgˆD]}|ˆj	kr|^qƒdksÅtdƒ‚tt‡fd†ˆjƒƒ}|t
kr dt|ƒg|D]}|j^qfGHnxxt|ƒdkrš|t
krSdt|ƒGHnxAt|d	d
„ƒD]*}|j
}|jj
|7_
|}|j}	|	dkr±|j	}	n|t
krñd|jg|j
D]}|j^qÐ|	jfGHnxYˆjD]N}|j|krû|	|_|j|j7_|t
krId|jGHqIqûqûW|jj
j|ƒˆjj|ƒ|j|ƒtˆƒdkrº|tt‡‡fd
†ˆjƒƒkn¾gˆD]}|j^qÁjdƒtˆƒks÷tdƒ‚tgˆD]}|ˆj	kr|^qƒdks7tdƒ‚gˆjD]1}|jgˆD]}
|
j^qTkrA|^qA}|t
krid|jGHqiqiWq#WˆjƒˆS(s Collapse all branches that satisfy a function collapseIf (default is an anonymous function that returns true if posterior probability is <=0.5).
            Alternatively, a list of nodes can be supplied to the script.
            Returns a deep copied version of the tree.
        ics.|jdko-ˆ|ƒtko-|ˆjkS(NR/(RRR6(Rˆ(t
collapseIftnewTree(s#/Users/lmoncla/src/baltic/baltic.pyRC»sR/s@Non-node class detected in list of nodes designated for deletions%Root node was designated for deletioncs#|jgˆD]}|j^q
kS(N(R#(RsRo(tdesignated_nodes(s#/Users/lmoncla/src/baltic/baltic.pyRCÀss%s nodes set for collapsing: %ss(Continuing collapse cycle, %s nodes leftROcSs|jS(N(R(R((s#/Users/lmoncla/src/baltic/baltic.pyRCÈss2Removing node %s, attaching children %s to node %ss Fixing branch length for node %scs.|jdko-ˆ|ƒtko-|ˆjkS(NR/(RRR6(Rˆ(R R¡(s#/Users/lmoncla/src/baltic/baltic.pyRCÝssRemoving references to node %sN(RFRGRRJRKR7RRRjR6RR#RPR0R!RRRQRR(R*R R¢Rgtnodes_to_deleteRsRBt	zero_nodet
old_parentt
new_parentRo((R R¢R¡s#/Users/lmoncla/src/baltic/baltic.pytcollapseBranches´sL'=@!.		4	
+=@A
c	CsŽ|d-kr|j}n|d-krattg|jD]}	t|	jjƒƒ^q4gƒƒ}n|d-kr¾g}|tkr¾|t	ks—t
dƒ‚|tkr«dGHn|jdƒq¾n|d-krÖd„}ng}
t|ƒdkröx|D]ú}||jkrÈ|tkrAd||j
|jt|j|ƒfGHnt|j|tƒr”|
jd||j|fƒ|tkrÅd|
d	GHqÅqït|j|tƒsÀt|j|tƒrý|
jd
||j|fƒ|tkrÅd|
d	GHqÅqït|j|tƒrïg}xj|j|D][}
t|
tƒrP|jd|
ƒq't|
tƒsnt|
tƒr'|jd
|
ƒq'q'W|
jd|dj|ƒfƒ|tkrÅd|
d	GHqÅqïqõ|tkrõd||j
|jfGHqõqõWn|jdkr|tkr d|j
GHn|jdƒtt||jƒƒ}t|ƒdksjt
d|j
ƒ‚x˜t|ƒD]Š\}}|tkr§d|j
|j
fGHn|jd|d|d|d|d|d|d|ƒ|dt|ƒkrw|jdƒqwqwW|jdƒn|jd kr¤|t	krW|jd-ksKt
d!ƒ‚|j}n|tkro|j}n|tkrd"|j
|fGHn|jd#|ƒnt|
ƒdkr|tkrÑd$|j
GHndj|
ƒ}
d%|
d&}
|jd
|
ƒn|tkrd'|j
GHn|jd(|jƒ||jkrŠ|jd)ƒ|tkri|jd*ƒn|tkr}d+GHnd,j|ƒSd-S(.sX Output the topology of the tree with branch lengths and comments to stringself.
            cur_node: starting point (default: None, starts at root)
            traits: list of keys that will be used to output entries in traits dict of each branch (default: all traits)
            numName: boolean, whether encoded (True) or decoded (default: False) tip names will be output
            verbose: boolean, debug
            nexus: boolean, whether to output newick (default: False) or nexus (True) formatted tree
            string_fragment: list of characters that comprise the tree string
        s/Nexus format not a valid option for JSON outputsExporting to Nexus formats&#NEXUS
Begin trees;
tree TREE1 = [&R] cSstS(N(R(RB((s#/Users/lmoncla/src/baltic/baltic.pyRCýsis'trait %s available for %s (%s) type: %ss%s="%s"sadding string comment %siÿÿÿÿs%s=%ssadding numeric comment %ss"%s"s%ss%s={%s}t,sadding range comment %ss trait %s unavailable for %s (%s)R/snode: %st(s*Node %s does not have traversable childrensmoving to child %s of node %sR5R"R%Rgtnexuststring_fragmentRDit)Rs Tip does not have converted names
leaf: %s (%s)s'%s'sadding comment to %ss[&t]sadding branch length to %ss:%8ft;s
End;tfinishedtN(RR6R2RXR7RJR"tkeysRRYRjR;RR#RttypeRvtstrRytintRRKR0t	enumeratettoStringR$R%R(R*R5R"R%RgRªR«RDtjsonRBtcommentttrtrangeCommenttvalttraverseChildrentcRTttreeName((s#/Users/lmoncla/src/baltic/baltic.pyR¶èsš	=
+, "
%4
c
s±|tkret|jƒdks-tdƒ‚g|jD]%}t|tƒr7|j|j^q7‰n.g|jD]}t|tƒro|j^qo‰‡fd†ˆDƒ}x|jƒD]ó}|t	krÚt
|jƒ}n#g|jD]}|j|^qä}x©tdt|ƒdƒD]Ž}x…t|dt|ƒƒD]j}||}||}	|||	dks||||	|jkr7|j|||	<|j||	|<q7q7WqWq¶W|S(Nis3Tree does not have a translation dict for tip namescs)i|]‰‡fd†ˆDƒˆ“qS(cs+i|]!}ˆ|krdnd|“qS(gN(R(t.0R&(R(s#/Users/lmoncla/src/baltic/baltic.pys
<dictcomp>Ks	((R¿(t	tip_names(Rs#/Users/lmoncla/src/baltic/baltic.pys
<dictcomp>Ks	i(RYRR8RjR7RvRR%RIRRJRtrangeRR (
R*R%RBttmrcaMatrixtall_childrentlvRR&ttipAttipB((RÀs#/Users/lmoncla/src/baltic/baltic.pyt	allTMRCAsEs"!8.#  

+ c	Cs‰t|ƒdkstdƒ‚tg|D]}|jdkr(|^q(ƒdksŠtdtg|D]}|jdkrb|^qbƒƒ‚|tkr¨dt|ƒGHnd„|Dƒ}g}|tkrÒdGHntj|ƒ}xš|jD]}|j|krë|}|tkr!d|jGHnxV||jkrv|tkr]d	|j||jkfGHn|j	|ƒ|j
}q$WqëqëW|j	|jƒ|tkr¢d
GHnt|ƒ}tt
|ƒdd„ƒ|_|tkràd
GHnx?|jƒD]1}g|jD]}||krý|^qý|_qíWg|jjD]}||kr/|^q/|j_|jƒ|tkrqdGHn|jƒ|jƒ|S(sz
        Reduce the tree to just those tracking a small number of tips.
        Returns a new baltic tree object.
        is$No tips given to reduce the tree to.Rs(Embedding contains %d non-leaf branches.s-Preparing branch hash for keeping %d branchescSsi|]}||j“qS((R#(R¿RB((s#/Users/lmoncla/src/baltic/baltic.pys
<dictcomp>ds	sDeep copying treesTraversing to root from %ssat %s root: %ssFinished extracting embeddingROcSs|jS(N(R(R((s#/Users/lmoncla/src/baltic/baltic.pyRCxssPruning untraversed lineagess!Last traversal and branch sorting(RRjRRRFRGR7R#R6R;R!R2RPRJRIR0RLRHRR(	R*tkeepRgRBtbranch_hasht	embeddingtreduced_treetcur_bR½((s#/Users/lmoncla/src/baltic/baltic.pyt
reduceTree[sFl
/1


cCstS(N(R(R((s#/Users/lmoncla/src/baltic/baltic.pyRCˆscCsQtg|jD]=}|jj|ko3|jknr
||ƒr
|^q
ƒS(N(RR7R!R (R*ttt	conditionRB((s#/Users/lmoncla/src/baltic/baltic.pyt
countLineagesˆscCsttd„|jƒƒS(NcSs
|jdkS(NR(R(RB((s#/Users/lmoncla/src/baltic/baltic.pyRCŒs(RJRKR7(R*((s#/Users/lmoncla/src/baltic/baltic.pyRl‹scCsttd„|jƒƒS(NcSs
|jdkS(NR/(R(RB((s#/Users/lmoncla/src/baltic/baltic.pyRCs(RJRKR7(R*((s#/Users/lmoncla/src/baltic/baltic.pyRIŽscCstS(N(R(R((s#/Users/lmoncla/src/baltic/baltic.pyRC‘scCs[tt||jƒƒ}t|ƒdkr9tdƒ‚nt|ƒdkrS|dS|SdS(Nis;No branches satisfying function were found amongst branchesiiÿÿÿÿ(RJRKR7Rt	Exception(R*tattrstselect((s#/Users/lmoncla/src/baltic/baltic.pytgetBranches‘scCs¦d„}tt||jƒƒ}x~t|ƒdkr¡xMt|dd„ƒD]6}|jjj|ƒ|j|ƒ|jj|ƒqLWtt||jƒƒ}q$WdS(s=
        Remove internal nodes without any children.
        cSs"|jdko!t|jƒdkS(NR/i(RRR0(RB((s#/Users/lmoncla/src/baltic/baltic.pyRCŸsiROcSs|jS(N(R(R((s#/Users/lmoncla/src/baltic/baltic.pyRC¢sN(RJRKR7RRPR!R0RQ(R*thangingConditionthangingNodesth((s#/Users/lmoncla/src/baltic/baltic.pyRL›s	
cCs
|jdkS(NR(R(RB((s#/Users/lmoncla/src/baltic/baltic.pyRC¨scCs|jd|jfS(Ng)\Âõ(ð?(RR&(RB((s#/Users/lmoncla/src/baltic/baltic.pyRC¨scCs|jS(N(R%(RB((s#/Users/lmoncla/src/baltic/baltic.pyRC¨scCsdS(Nie((RB((s#/Users/lmoncla/src/baltic/baltic.pyRC¨scKsaxZt||jƒD]F}||ƒ\}}	||ƒ}
|j||	||ƒd|
|qW|S(Ntzorder(RKR7ttext(R*taxttargettpositionRÙtzorder_functiontkwargsRBRR&tz((s#/Users/lmoncla/src/baltic/baltic.pytaddText¨s
&cCs|jS(N(R(RB((s#/Users/lmoncla/src/baltic/baltic.pyRC¯scCs|jS(N(R&(RB((s#/Users/lmoncla/src/baltic/baltic.pyRC¯scCs
|jdkS(NR(R(RB((s#/Users/lmoncla/src/baltic/baltic.pyRC¯scCsdS(Ni(((RB((s#/Users/lmoncla/src/baltic/baltic.pyRC¯scCsdS(NRB((RB((s#/Users/lmoncla/src/baltic/baltic.pyRC¯scCsdS(Nid((RB((s#/Users/lmoncla/src/baltic/baltic.pyRC¯sc
Ksˆxt||jƒD]m}	||	ƒ}
||	ƒ}||	ƒ}||	ƒ}
||	ƒ}|j||
d|
d|ddd||qW|S(Ntst	facecolort	edgecolortnoneRØ(RKR7tscatter(R*RÚtx_attrty_attrRÛt
size_functiontcolour_functionRÝRÞRBR&RR½tsizeRß((s#/Users/lmoncla/src/baltic/baltic.pyt
plotPoints¯s/trectangularcCstS(N(R(RB((s#/Users/lmoncla/src/baltic/baltic.pyRC¹scCs|jS(N(R(RB((s#/Users/lmoncla/src/baltic/baltic.pyRC¹scCs|jS(N(R&(RB((s#/Users/lmoncla/src/baltic/baltic.pyRC¹scCsdS(Ni((RB((s#/Users/lmoncla/src/baltic/baltic.pyRC¹scCsdS(NRB((tf((s#/Users/lmoncla/src/baltic/baltic.pyRC¹scCsdS(Nib((RB((s#/Users/lmoncla/src/baltic/baltic.pyRC¹sc	Ks•|d
kstd|ƒ‚xrt||jƒD]^}
||
ƒ}||
ƒ}||
jƒ}
|
dkrq|}
n||
ƒ}||
ƒ}||
ƒ}|dkr>|
jdkr
||
jdƒ}||
jdƒ}|j||g||gd|d|d	||	n|j||
g||gd|d|d	||	q/|dkr/||
jƒ}|j||
g||gd|d|d	||	q/q/W|S(NRìtunrootedsUnrecognised drawing type "%s"R/iiÿÿÿÿtcolortlwRØ(RìRî(RjRKR7R!RRR0tplot(R*RÚR²RÛRæRçtbranchWidthRéRÝRÞRBR&RtxpR½tbRßtyltyrtyp((s#/Users/lmoncla/src/baltic/baltic.pytplotTree¹s(	448N( R-R.R,R>R@RRRVRWRfRYRHRnRRRRqR‡R–R›RžR§R¶RÇRÍRÐRlRIRÔRLRàRëRø(((s#/Users/lmoncla/src/baltic/baltic.pyR3Ks6			
			%+;$%	4!]-		
	
!-
cCsat|tƒtkr$t|ƒ}n|d+kr<tƒ}nd}d+}x|t|ƒkr\||kr‹|tkr‹d|||fGHn||ks¼td|||||d!fƒ‚|}||dkr|tkrêd|GHn|j|ƒ|d7}nt	j
d||d|d	!ƒ}|d+k	r|tkrXd
||jdƒfGHn|j||jdƒƒ|t|jdƒƒ7}nt	j
d||d|d
!ƒ}|d+k	rN|tkrád||jdƒfGHn|j||jdƒj
dƒj
dƒƒ|t|jdƒƒ|jƒjdƒ|jƒjdƒ7}nt	j
d||d|d	!ƒ}|d+k	r¾|tkr¢d||jdƒfGHn|t|jdƒƒ7}nt	j
d||ƒ}|d+k	r|tkrd||jdƒfGHn|jdƒ}t	jd|ƒ}t	jd|ƒ}t	jd|ƒ}	t	jd|ƒ}
t	jd|ƒ}xh|D]`}|jdƒ\}
}|
d}
d|kr¾|jdƒd}n|j
dƒ|jj|
<qwWxC|D];}|jdƒ\}
}|
d}
t|ƒ|jj|
<qâWxª|	D]¢}|jdƒ\}
}|
d}
t	jd|ƒ}g|jj|
<xX|D]P}|jdƒ\}}}}|jj|
jt|ƒt|ƒ||fƒqvWq(Wxÿ|
D]÷}|jdƒ\}
}|
d}
d|
kr†g|jj|
<x³|dd !jdƒD]R}d!|
kr_|jj|
jt|ƒƒq-|jj|
j|j
dƒƒq-WqÕy3ttt|dd !jdƒƒƒ|jj|
<WqÕd"|GHqÕXqÕWt|ƒdkrêd#GHn|t|jƒƒ7}nt	j
d$||ƒ}|d+k	r{|tkrFd%|jdƒGHn|jdƒ|jjd&<|t|jdƒƒ7}nt	j
d'|||d	!ƒ}|d+k	r|tkrÑd(|t|jdƒƒfGHnt|jdƒƒ|j_|t|jƒƒ7}n||dks%||d)krA|d7}|jj|_n||d*krK|SPqKqKWd+S(,sH
    data is a tree string, ll (LL) is an instance of a tree object
    is%d >%s<sL
Tree string unparseable
Stopped at >>%s<<
string region looks like this: %siˆR©s%d adding nodeis(\(|,)([0-9]+)(\[|\:)ids%d adding leaf (BEAST) %sis2(\(|,)('|")*([A-Za-z\_\-\|\.0-9\?\/ ]+)('|"|)(\[)*iÈs%d adding leaf (non-BEAST) %sit"t's\)([0-9]+)\[s%d adding multitype node %ss5(\:)*\[(&[A-Za-z\_\-{}\,0-9\.\%="'\+!# :\/\(\)\&]+)\]s%d comment: %ss![,&][A-Za-z\_\.0-9]+=[0-9\-Ee\.]+s=[,&][A-Za-z\_\.0-9]+=["|']*[A-Za-z\_0-9\.\+ :\/\(\)\&]+["|']*s4[,&][A-Za-z\_\.0-9]+={[A-Za-z\_,{}0-9\. :\/\(\)\&]+}s9[,&][A-Za-z\_\.0-9\%]+={[A-Za-z\.\-0-9eE,"\_ :\/\(\)\&]+}s#\![A-Za-z]+=[A-Za-z0-9# :\/\(\)\&]+t=t+s${([0-9]+,[0-9\.\-e]+,[A-Z]+,[A-Z]+)}R¨R2iÿÿÿÿsset.probssome other trait: %ssFigTree comment found, ignorings([A-Za-z\_\-0-9\.]+)(\:|\;)sold school comment found: %stlabels(\:)*([0-9\.\-Ee]+)sadding branch length (%d) %.6fR¬R®N(RvR³RYRR3RRRjR>tretmatchtgroupR@tstripRtfindallRR5R"RyR;R´RJtmapRR!(tdatatllRgR<tstored_itcerberusR¸tnumericststringsttreelisttsetstfigtreetvalsR¹R»t
microcerberustcodonttimingRRtv((s#/Users/lmoncla/src/baltic/baltic.pyt	make_treeÐs¾1

!!+B!






7

 '3! 
csDdˆkrtƒ}n+tƒ}ˆ|d|_ˆ|d|_|dkrdtƒ}||_ndˆkrˆjdƒ}ˆj|ƒn|j	|_
|j	jj|ƒˆ|d|_
‡fd†tˆjƒƒDƒ|_|jj|ƒ||_	dˆkr@x4ˆdD]%}t|||ƒ|j	j
|_	qWn|S(NR0R$tattrcs)i|]}|dkrˆ||“qS(R0((R¿Rˆ(tJSONnode(s#/Users/lmoncla/src/baltic/baltic.pys
<dictcomp>[s	(R/RR%R$RR3R6RœtupdateR5R!R0R;R#RJR±R"R7t
make_treeJSON(Rtjson_translationRRgR=RRT((Rs#/Users/lmoncla/src/baltic/baltic.pyRIs,		%	s\|([0-9]+\-[0-9]+\-[0-9]+)cCshd}t|tƒr't|dƒ}n|}xe|D]]}|jdƒ}	d|	kr4|	jdƒ}
t|	|
d|ƒ}|tkr‘dGHq‘q4q4W|s§tdƒ‚|j	d|ƒ|j
ƒ|tkrdg}xr|jƒD]d}|j}
|j|_
tj||
ƒ}|dk	rà|jt|jdƒd|d	|ƒƒqàqàWt|ƒ}|j|ƒn|S(
Ntrs
R©RgsIdentified tree strings-Regular expression failed to find tree stringiRR(RRvR³topenRR#RRRjRHRRRlR%R$RþtsearchR;RRR[RW(t	tree_patht	tip_regextdate_fmttvariableDateR RgRthandletlineR”ttreeString_startttipDatesRBRˆRt
highestTip((s#/Users/lmoncla/src/baltic/baltic.pyt
loadNewickes2

	/stree [A-Za-z\_]+([0-9]+)cCsùt}i}d}	d}
t|tƒr9t|dƒ}n|}x­|D]¥}|jdƒ}
tjd|
jƒƒ}|dk	r¯t	|j
dƒƒ}	|tkr¯d|	GHq¯ntj||
ƒ}|dk	r|
jdƒ}t
|
|ƒ}
|tkrdGHqn|tkr»tjd	|
ƒ}|dk	r’|j
d
ƒjdƒjdƒ||j
dƒ<|tkr¸d
|j
dƒ||j
dƒfGHq¸q»d|
kr»d|
jddƒfGHq»nd|
jƒkrÖt}nd|
krFt}qFqFW|
stdƒ‚|
jƒ|
jƒt|ƒdkr@|
j|ƒ||
_n|tkrõg}x„|
jƒD]v}t|ƒdkrƒ|j}n	|j}tj||ƒ}|dk	r_|jt|j
dƒd|d|ƒƒq_q_Wt|ƒ}|
j|ƒn|
S(NiRs
sdimensions ntax=([0-9]+);isFile should contain %d taxaR©sIdentified tree strings$([0-9]+) ([A-Za-z\-\_\/\.'0-9 \|?]+)iRùRús!Identified tip translation %s: %sR®stip not captured by regex:s	R°t	translates-Regular expression failed to find tree stringRR(RYRRvR³RRRþRtlowerR´RRR#RtreplaceRjRHRRRRnR8RlR$R%R;RR[RW(RRRttreestring_regexRR RgttipFlagttipsttipNumRRR R”RR!R"RBRˆR#((s#/Users/lmoncla/src/baltic/baltic.pyt	loadNexus…sd
.+	



	/tstrainR$tnum_dateR c	Cs¬d|kr$d|ksnd|ksntddjgddddgD]}||ktkrC|^qCƒƒ‚|tkr‚dGHnt|tƒrÍt|ƒ+}tj|ƒ}t	||d|ƒ}	Wd	QXnt	tj|ƒ|d|ƒ}	d|krd|ks'd|krd|ks'td
ƒ‚x=|D]5}
x,|	j
D]!}t||
|j||
ƒq>Wq.Wd|krÒx\|	j
D]N}|d|j
jkrÂ|j|d|j
j|d|_q}d|_q}Wn|tkrædGHn|	jd|ƒ|	jƒ|tkr|	jƒn|tkr2|	jƒn|r¨t|tƒrftjt|d
dƒƒ}ntj|d
ƒ}t|d|ddƒ}
t|	d|
ƒn|	S(s 
    Load a nextstrain JSON by providing either the path to JSON or a file handle.
    json_translation is a dictionary that translates JSON attributes to baltic branch attributes (e.g. 'absoluteTime' is called 'num_date' in nextstrain JSONs).
    Note that to avoid conflicts in setting node heights you can either define the absolute time of each node or branch lengths (e.g. if you want a substitution tree).
    R$R Rs/JSON translation dictionary missing entries: %ss, RsReading JSONRgNsaCannot use both absolute time and branch length, include only one in json_translation dictionary.gsTraversing and drawing treetfileRt
color_optionst	traitNamet	color_maptcmap(RjRRYRRvR³RR·tloadRR7RxR"R!RRHRqRfRRtdict(RRt	json_metaRgtsorttstatstentryt	json_dataRmRRRBtmetadataR3((s#/Users/lmoncla/src/baltic/baltic.pytloadJSONÄs@n<
#)


t__main__is%s
(RþRFRƒRRR·RYRRRR/RR3RRRRR$R,R<R-tsystargvRRHtstdouttwriteR9(((s#/Users/lmoncla/src/baltic/baltic.pyt<module>s,	ÿÿ‡y ?&1


Software Heritage — Copyright (C) 2015–2025, The Software Heritage developers. License: GNU AGPLv3+.
The source code of Software Heritage itself is available on our development forge.
The source code files archived by Software Heritage are available under their own copyright and licenses.
Terms of use: Archive access, API— Contact— JavaScript license information— Web API

back to top