Package: narr
narr# #| hide# from narr.strs import snake_case# from narr.axes import NamedAxis, NamedAxes# from narr.errs import NamedArrayDimsError# from narr.mixs import NamedArrayDynamicAttrsMixin# from narr.narr import NamedArray# from narr.traj import (#     TrajectoryDim, GeneTrajectoryDim,#     ObservationTrajectories, FeatureTrajectories,#     CellularTrajectories, ExpressionTrajectories,#     Trajectories, GeneTrajectories,# )Developer GuideSetup# create conda environment$mambaenvcreate-fenv.yml# update conda environment$mambaenvupdate-nnarr--fileenv.ymlInstallpipinstall-e.# install from pypipipinstallnarrnbdev# activate conda environment$condaactivatenarr# make sure the narr package is installed in development mode$pipinstall-e.# make changes under nbs/ directory# ...# compile to have changes apply to the narr package$nbdev_preparePublishing# publish to pypi$nbdev_pypi# publish to conda$nbdev_conda--build_args'-c conda-forge'$nbdev_conda--mambabuild--build_args'-c conda-forge -c dsm-72'UsageInstallationInstall latest from the GitHubrepository:$pipinstallgit+https://github.com/dsm-72/narr.gitor fromconda$condainstall-cdsm-72narror frompypi$pipinstallnarrDocumentationDocumentation can be found hosted on GitHubrepositorypages. Additionally you can find
package manager specific guidelines oncondaandpypirespectively.# import numpy as np# from typing import CallableSubclassing NamedArray# class Trajectories(NamedArray):#     DIMS = NamedAxes([NamedAxis(dim.name, i) for i, dim in enumerate(TrajectoryDim)])#     def to_obsv_x_traj(self, aggr: Callable = np.mean):#         agg_arr = aggr(np.asarray(self.transpose(#             TrajectoryDim.obsv.name, TrajectoryDim.traj.name, TrajectoryDim.feat.name,#         )), axis=2)#         return ObservationTrajectories(agg_arr)#     def to_feat_x_traj(self, aggr: Callable = np.mean):#         agg_arr = aggr(np.asarray(self.transpose(#             TrajectoryDim.feat.name, TrajectoryDim.traj.name, TrajectoryDim.obsv.name,#         )), axis=2)#         return FeatureTrajectories(agg_arr)Using NamedArray Subclass Trajectories# arr = np.random.randint(0, 10, (3, 5, 10))# arrarray([[[9, 7, 1, 4, 8, 2, 3, 3, 3, 1],
        [0, 3, 8, 7, 2, 9, 9, 9, 1, 7],
        [0, 8, 5, 3, 3, 8, 8, 1, 3, 8],
        [3, 6, 9, 1, 8, 7, 7, 3, 1, 3],
        [0, 0, 2, 9, 1, 6, 6, 8, 1, 7]],

       [[5, 9, 5, 7, 3, 2, 1, 0, 9, 5],
        [9, 8, 7, 3, 1, 7, 6, 6, 0, 5],
        [8, 2, 9, 7, 2, 9, 4, 4, 0, 8],
        [2, 8, 2, 2, 0, 6, 6, 8, 6, 9],
        [5, 5, 2, 2, 3, 5, 9, 9, 3, 4]],

       [[3, 6, 4, 6, 3, 2, 4, 6, 9, 0],
        [7, 1, 6, 7, 7, 2, 6, 2, 2, 8],
        [2, 3, 6, 2, 5, 5, 2, 6, 2, 0],
        [3, 9, 8, 5, 1, 5, 7, 8, 7, 9],
        [9, 2, 1, 5, 2, 7, 0, 7, 4, 3]]])# Trajectories(arr)Trajectories([[[9, 7, 1, 4, 8, 2, 3, 3, 3, 1],
               [0, 3, 8, 7, 2, 9, 9, 9, 1, 7],
               [0, 8, 5, 3, 3, 8, 8, 1, 3, 8],
               [3, 6, 9, 1, 8, 7, 7, 3, 1, 3],
               [0, 0, 2, 9, 1, 6, 6, 8, 1, 7]],

              [[5, 9, 5, 7, 3, 2, 1, 0, 9, 5],
               [9, 8, 7, 3, 1, 7, 6, 6, 0, 5],
               [8, 2, 9, 7, 2, 9, 4, 4, 0, 8],
               [2, 8, 2, 2, 0, 6, 6, 8, 6, 9],
               [5, 5, 2, 2, 3, 5, 9, 9, 3, 4]],

              [[3, 6, 4, 6, 3, 2, 4, 6, 9, 0],
               [7, 1, 6, 7, 7, 2, 6, 2, 2, 8],
               [2, 3, 6, 2, 5, 5, 2, 6, 2, 0],
               [3, 9, 8, 5, 1, 5, 7, 8, 7, 9],
               [9, 2, 1, 5, 2, 7, 0, 7, 4, 3]]])
               (3 traj, 5 obsv, 10 feat)# Trajectories(arr).transpose(1, 0, 2)Trajectories([[[9, 7, 1, 4, 8, 2, 3, 3, 3, 1],
               [5, 9, 5, 7, 3, 2, 1, 0, 9, 5],
               [3, 6, 4, 6, 3, 2, 4, 6, 9, 0]],

              [[0, 3, 8, 7, 2, 9, 9, 9, 1, 7],
               [9, 8, 7, 3, 1, 7, 6, 6, 0, 5],
               [7, 1, 6, 7, 7, 2, 6, 2, 2, 8]],

              [[0, 8, 5, 3, 3, 8, 8, 1, 3, 8],
               [8, 2, 9, 7, 2, 9, 4, 4, 0, 8],
               [2, 3, 6, 2, 5, 5, 2, 6, 2, 0]],

              [[3, 6, 9, 1, 8, 7, 7, 3, 1, 3],
               [2, 8, 2, 2, 0, 6, 6, 8, 6, 9],
               [3, 9, 8, 5, 1, 5, 7, 8, 7, 9]],

              [[0, 0, 2, 9, 1, 6, 6, 8, 1, 7],
               [5, 5, 2, 2, 3, 5, 9, 9, 3, 4],
               [9, 2, 1, 5, 2, 7, 0, 7, 4, 3]]])
               (5 obsv, 3 traj, 10 feat)# Trajectories(arr).transpose('obsv', 0, 2)Trajectories([[[9, 7, 1, 4, 8, 2, 3, 3, 3, 1],
               [5, 9, 5, 7, 3, 2, 1, 0, 9, 5],
               [3, 6, 4, 6, 3, 2, 4, 6, 9, 0]],

              [[0, 3, 8, 7, 2, 9, 9, 9, 1, 7],
               [9, 8, 7, 3, 1, 7, 6, 6, 0, 5],
               [7, 1, 6, 7, 7, 2, 6, 2, 2, 8]],

              [[0, 8, 5, 3, 3, 8, 8, 1, 3, 8],
               [8, 2, 9, 7, 2, 9, 4, 4, 0, 8],
               [2, 3, 6, 2, 5, 5, 2, 6, 2, 0]],

              [[3, 6, 9, 1, 8, 7, 7, 3, 1, 3],
               [2, 8, 2, 2, 0, 6, 6, 8, 6, 9],
               [3, 9, 8, 5, 1, 5, 7, 8, 7, 9]],

              [[0, 0, 2, 9, 1, 6, 6, 8, 1, 7],
               [5, 5, 2, 2, 3, 5, 9, 9, 3, 4],
               [9, 2, 1, 5, 2, 7, 0, 7, 4, 3]]])
               (5 obsv, 3 traj, 10 feat)# Trajectories(arr).transpose('obsv', 0, 2).to_obsv_x_traj()NameError: name 'aggr' is not defined