ó ÌxDcc@s;ddlTd„Zd„Zd„Zd„Zd„ZdS(iÿÿÿÿ(t*cCs'ttg|D]}||^q ƒƒS(N(tsqrttsum(tvtc((s dotlib.pyt magnitudescCst|ƒt|ƒt|ƒS(N(Rtcos(tv1tv2ttheta((s dotlib.pytdot_geoscCs0tgt||ƒD]\}}||^qƒS(N(Rtzip(RRtc1tc2((s dotlib.pytdot_alg scCstt|ƒt|ƒƒS(N(Rt normalize(RR((s dotlib.pytcos_from_vectors scCs't|ƒ}g|D]}||^qS(N(R(RtmR((s dotlib.pyRs N(tmathRR RRR(((s dotlib.pyts