o gR@s<dZddlZddlZddlmZGdddeZddZdS)z2Copyright (c) Meta Platforms, Inc. and affiliates.N)Spherec@s,eZdZddZddZddZddZd S) rcCsRd|j|||dd}||j|||dd|||}|d}t||| S)NT)keepdimgMbP?)innergttorchwhere)selfxyvdenomrescondr4/home/dufour/Documents/diff_plonk/utils/manifolds.pytransp s" z Sphere.transpc CsB|jd}t|dt|dtd|dttjS)N).r)shaper full_likemathlgammalogpi)r r dimrrruniform_logprobs *zSphere.uniform_logprobcO|j|i|SN)Zrandom_uniformr argskwargsrrr random_basezSphere.random_basecOrr)rrrrr base_logprobr#zSphere.base_logprobN)__name__ __module__ __qualname__rrr"r$rrrrrs  rcs |fdd}|S)Ncs$td|}d|}|S)zGenerate parameterized function for geodesic curve. Parameters ---------- t : array-like, shape=[n_points,] Times at which to compute points of the geodesics. z i,...k->...ik)reinsumZexpmap unsqueeze)tZ tangent_vecsZpoints_at_time_tmanifoldZshooting_tangent_vec start_pointrrpath szgeodesic..path)Zlogmap)r-r.Z end_pointr/rr,rgeodesics  r0)__doc__rrZgeoopt.manifoldsrZ geoopt_Spherer0rrrrs