gsMap 1.62__py3-none-any.whl → 1.64__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- gsMap/GNN_VAE/adjacency_matrix.py +1 -1
- gsMap/GNN_VAE/model.py +5 -5
- gsMap/GNN_VAE/train.py +1 -1
- gsMap/__init__.py +1 -1
- gsMap/cauchy_combination_test.py +14 -36
- gsMap/config.py +473 -404
- gsMap/diagnosis.py +273 -0
- gsMap/find_latent_representation.py +22 -86
- gsMap/format_sumstats.py +79 -82
- gsMap/generate_ldscore.py +145 -78
- gsMap/latent_to_gene.py +65 -104
- gsMap/main.py +1 -9
- gsMap/report.py +160 -0
- gsMap/run_all_mode.py +195 -0
- gsMap/spatial_ldsc_multiple_sumstats.py +188 -113
- gsMap/templates/report_template.html +198 -0
- gsMap/utils/__init__.py +0 -0
- gsMap/{generate_r2_matrix.py → utils/generate_r2_matrix.py} +2 -10
- gsMap/{make_annotations.py → utils/make_annotations.py} +1 -43
- gsMap/utils/manhattan_plot.py +639 -0
- gsMap/{regression_read.py → utils/regression_read.py} +1 -1
- gsMap/visualize.py +100 -55
- {gsmap-1.62.dist-info → gsmap-1.64.dist-info}/METADATA +21 -46
- gsmap-1.64.dist-info/RECORD +30 -0
- gsmap-1.62.dist-info/RECORD +0 -24
- /gsMap/{jackknife.py → utils/jackknife.py} +0 -0
- {gsmap-1.62.dist-info → gsmap-1.64.dist-info}/LICENSE +0 -0
- {gsmap-1.62.dist-info → gsmap-1.64.dist-info}/WHEEL +0 -0
- {gsmap-1.62.dist-info → gsmap-1.64.dist-info}/entry_points.txt +0 -0
    
        gsMap/visualize.py
    CHANGED
    
    | @@ -1,12 +1,13 @@ | |
| 1 | 
            -
            import argparse
         | 
| 2 1 | 
             
            from pathlib import Path
         | 
| 3 2 | 
             
            from typing import Literal
         | 
| 4 3 |  | 
| 5 | 
            -
            import scanpy as sc
         | 
| 6 4 | 
             
            import numpy as np
         | 
| 7 5 | 
             
            import pandas as pd
         | 
| 8 6 | 
             
            import plotly.express as px
         | 
| 9 | 
            -
             | 
| 7 | 
            +
            import scanpy as sc
         | 
| 8 | 
            +
            from scipy.spatial import KDTree
         | 
| 9 | 
            +
             | 
| 10 | 
            +
            from gsMap.config import VisualizeConfig
         | 
| 10 11 |  | 
| 11 12 |  | 
| 12 13 | 
             
            def load_ldsc(ldsc_input_file):
         | 
| @@ -18,11 +19,19 @@ def load_ldsc(ldsc_input_file): | |
| 18 19 |  | 
| 19 20 |  | 
| 20 21 | 
             
            # %%
         | 
| 21 | 
            -
            def load_st_coord(adata,  | 
| 22 | 
            +
            def load_st_coord(adata, feature_series: pd.Series, annotation):
         | 
| 22 23 | 
             
                spot_name = adata.obs_names.to_list()
         | 
| 23 | 
            -
                 | 
| 24 | 
            -
             | 
| 25 | 
            -
                 | 
| 24 | 
            +
                assert 'spatial' in adata.obsm.keys(), 'spatial coordinates are not found in adata.obsm'
         | 
| 25 | 
            +
             | 
| 26 | 
            +
                # to DataFrame
         | 
| 27 | 
            +
                space_coord = adata.obsm['spatial']
         | 
| 28 | 
            +
                if isinstance(space_coord, np.ndarray):
         | 
| 29 | 
            +
                    space_coord = pd.DataFrame(space_coord, columns=['sx', 'sy'], index=spot_name)
         | 
| 30 | 
            +
                else:
         | 
| 31 | 
            +
                    space_coord = pd.DataFrame(space_coord.values, columns=['sx', 'sy'], index=spot_name)
         | 
| 32 | 
            +
             | 
| 33 | 
            +
                space_coord = space_coord[space_coord.index.isin(feature_series.index)]
         | 
| 34 | 
            +
                space_coord_concat = pd.concat([space_coord.loc[feature_series.index], feature_series], axis=1)
         | 
| 26 35 | 
             
                space_coord_concat.head()
         | 
| 27 36 | 
             
                if annotation is not None:
         | 
| 28 37 | 
             
                    annotation = pd.Series(adata.obs[annotation].values, index=adata.obs_names, name='annotation')
         | 
| @@ -30,10 +39,25 @@ def load_st_coord(adata, ldsc, annotation): | |
| 30 39 | 
             
                return space_coord_concat
         | 
| 31 40 |  | 
| 32 41 |  | 
| 33 | 
            -
             | 
| 42 | 
            +
            def estimate_point_size_for_plot(coordinates, DEFAULT_PIXEL_WIDTH = 1000):
         | 
| 43 | 
            +
                tree = KDTree(coordinates)
         | 
| 44 | 
            +
                distances, _ = tree.query(coordinates, k=2)
         | 
| 45 | 
            +
                avg_min_distance = np.mean(distances[:, 1])
         | 
| 46 | 
            +
                # get the width and height of the plot
         | 
| 47 | 
            +
                width = np.max(coordinates[:, 0]) - np.min(coordinates[:, 0])
         | 
| 48 | 
            +
                height = np.max(coordinates[:, 1]) - np.min(coordinates[:, 1])
         | 
| 49 | 
            +
             | 
| 50 | 
            +
                scale_factor = DEFAULT_PIXEL_WIDTH / max(width, height)
         | 
| 51 | 
            +
                pixel_width = width * scale_factor
         | 
| 52 | 
            +
                pixel_height = height * scale_factor
         | 
| 53 | 
            +
             | 
| 54 | 
            +
                point_size = np.ceil(avg_min_distance * scale_factor)
         | 
| 55 | 
            +
                return (pixel_width, pixel_height), point_size
         | 
| 56 | 
            +
             | 
| 57 | 
            +
             | 
| 34 58 | 
             
            def draw_scatter(space_coord_concat, title=None, fig_style: Literal['dark', 'light'] = 'light',
         | 
| 35 | 
            -
                             point_size: int = None, width=800, height=600, annotation=None):
         | 
| 36 | 
            -
                #  | 
| 59 | 
            +
                             point_size: int = None, width=800, height=600, annotation=None, color_by='logp'):
         | 
| 60 | 
            +
                # Set theme based on fig_style
         | 
| 37 61 | 
             
                if fig_style == 'dark':
         | 
| 38 62 | 
             
                    px.defaults.template = "plotly_dark"
         | 
| 39 63 | 
             
                else:
         | 
| @@ -50,24 +74,25 @@ def draw_scatter(space_coord_concat, title=None, fig_style: Literal['dark', 'lig | |
| 50 74 | 
             
                    (1 / 8, '#4575b4'),  # Dark Blue
         | 
| 51 75 | 
             
                    (0, '#313695')  # Deep Blue
         | 
| 52 76 | 
             
                ]
         | 
| 53 | 
            -
                # custom_color_scale = px.colors.diverging.balance
         | 
| 54 77 | 
             
                custom_color_scale.reverse()
         | 
| 78 | 
            +
             | 
| 79 | 
            +
                # Create the scatter plot
         | 
| 55 80 | 
             
                fig = px.scatter(
         | 
| 56 81 | 
             
                    space_coord_concat,
         | 
| 57 82 | 
             
                    x='sx',
         | 
| 58 83 | 
             
                    y='sy',
         | 
| 59 | 
            -
                    color= | 
| 84 | 
            +
                    color=color_by,
         | 
| 60 85 | 
             
                    symbol='annotation' if annotation is not None else None,
         | 
| 61 86 | 
             
                    title=title,
         | 
| 62 87 | 
             
                    color_continuous_scale=custom_color_scale,
         | 
| 63 | 
            -
                    range_color=[0, max(space_coord_concat | 
| 88 | 
            +
                    range_color=[0, max(space_coord_concat[color_by])],
         | 
| 64 89 | 
             
                )
         | 
| 65 90 |  | 
| 91 | 
            +
                # Update marker size if specified
         | 
| 66 92 | 
             
                if point_size is not None:
         | 
| 67 | 
            -
                    fig.update_traces(marker=dict(size=point_size))
         | 
| 68 | 
            -
             | 
| 69 | 
            -
                fig.update_layout(legend_title_text='Annotation')
         | 
| 93 | 
            +
                    fig.update_traces(marker=dict(size=point_size, symbol='circle'))
         | 
| 70 94 |  | 
| 95 | 
            +
                # Update layout for figure size
         | 
| 71 96 | 
             
                fig.update_layout(
         | 
| 72 97 | 
             
                    autosize=False,
         | 
| 73 98 | 
             
                    width=width,
         | 
| @@ -78,26 +103,74 @@ def draw_scatter(space_coord_concat, title=None, fig_style: Literal['dark', 'lig | |
| 78 103 | 
             
                fig.update_layout(
         | 
| 79 104 | 
             
                    legend=dict(
         | 
| 80 105 | 
             
                        yanchor="top",
         | 
| 81 | 
            -
                        y=0. | 
| 106 | 
            +
                        y=0.95,
         | 
| 82 107 | 
             
                        xanchor="left",
         | 
| 83 | 
            -
                        x | 
| 108 | 
            +
                        x=1.0,
         | 
| 84 109 | 
             
                        font=dict(
         | 
| 85 110 | 
             
                            size=10,
         | 
| 86 111 | 
             
                        )
         | 
| 87 112 | 
             
                    )
         | 
| 88 113 | 
             
                )
         | 
| 89 | 
            -
             | 
| 90 | 
            -
                 | 
| 114 | 
            +
             | 
| 115 | 
            +
                # Update colorbar to be at the bottom and horizontal
         | 
| 116 | 
            +
                fig.update_layout(
         | 
| 117 | 
            +
                    coloraxis_colorbar=dict(
         | 
| 118 | 
            +
                        orientation='h',  # Make the colorbar horizontal
         | 
| 119 | 
            +
                        x=0.5,  # Center the colorbar horizontally
         | 
| 120 | 
            +
                        y=-0.0,  # Position below the plot
         | 
| 121 | 
            +
                        xanchor='center',  # Anchor the colorbar at the center
         | 
| 122 | 
            +
                        yanchor='top',  # Anchor the colorbar at the top to keep it just below the plot
         | 
| 123 | 
            +
                        len=0.75,  # Length of the colorbar relative to the plot width
         | 
| 124 | 
            +
                        title=dict(
         | 
| 125 | 
            +
                            text='-log10(p)' if color_by == 'logp' else color_by,  # Colorbar title
         | 
| 126 | 
            +
                            side='top'  # Place the title at the top of the colorbar
         | 
| 127 | 
            +
                        )
         | 
| 128 | 
            +
                    )
         | 
| 129 | 
            +
                )
         | 
| 130 | 
            +
                # Remove gridlines, axis labels, and ticks
         | 
| 131 | 
            +
                fig.update_xaxes(
         | 
| 132 | 
            +
                    showgrid=False,   # Hide x-axis gridlines
         | 
| 133 | 
            +
                    zeroline=False,   # Hide x-axis zero line
         | 
| 134 | 
            +
                    showticklabels=False,  # Hide x-axis tick labels
         | 
| 135 | 
            +
                    title=None,       # Remove x-axis title
         | 
| 136 | 
            +
                    scaleanchor='y',  # Link the x-axis scale to the y-axis scale
         | 
| 137 | 
            +
                )
         | 
| 138 | 
            +
             | 
| 139 | 
            +
                fig.update_yaxes(
         | 
| 140 | 
            +
                    showgrid=False,   # Hide y-axis gridlines
         | 
| 141 | 
            +
                    zeroline=False,   # Hide y-axis zero line
         | 
| 142 | 
            +
                    showticklabels=False,  # Hide y-axis tick labels
         | 
| 143 | 
            +
                    title=None        # Remove y-axis title
         | 
| 144 | 
            +
                )
         | 
| 145 | 
            +
             | 
| 146 | 
            +
                # Adjust margins to ensure no clipping and equal axis ratio
         | 
| 147 | 
            +
                fig.update_layout(
         | 
| 148 | 
            +
                    margin=dict(l=0, r=0, t=20, b=10),  # Adjust margins to prevent clipping
         | 
| 149 | 
            +
                    height=width  # Ensure the figure height matches the width for equal axis ratio
         | 
| 150 | 
            +
                )
         | 
| 151 | 
            +
             | 
| 152 | 
            +
                # Adjust the title location and font size
         | 
| 153 | 
            +
                fig.update_layout(
         | 
| 154 | 
            +
                    title=dict(
         | 
| 155 | 
            +
                        y=0.98,
         | 
| 156 | 
            +
                        x=0.5,  # Center the title horizontally
         | 
| 157 | 
            +
                        xanchor='center',  # Anchor the title at the center
         | 
| 158 | 
            +
                        yanchor='top',  # Anchor the title at the top
         | 
| 159 | 
            +
                        font=dict(
         | 
| 160 | 
            +
                            size=20  # Increase the title font size
         | 
| 161 | 
            +
                        )
         | 
| 162 | 
            +
                    ))
         | 
| 91 163 |  | 
| 92 164 | 
             
                return fig
         | 
| 93 165 |  | 
| 94 166 |  | 
| 167 | 
            +
             | 
| 95 168 | 
             
            def run_Visualize(config: VisualizeConfig):
         | 
| 96 | 
            -
                print(f'------Loading LDSC results of {config. | 
| 97 | 
            -
                ldsc = load_ldsc(ldsc_input_file=Path(config. | 
| 169 | 
            +
                print(f'------Loading LDSC results of {config.ldsc_save_dir}...')
         | 
| 170 | 
            +
                ldsc = load_ldsc(ldsc_input_file=Path(config.ldsc_save_dir) / f'{config.sample_name}_{config.trait_name}.csv.gz')
         | 
| 98 171 |  | 
| 99 172 | 
             
                print(f'------Loading ST data of {config.sample_name}...')
         | 
| 100 | 
            -
                adata = sc.read_h5ad(f'{config. | 
| 173 | 
            +
                adata = sc.read_h5ad(f'{config.hdf5_with_latent_path}')
         | 
| 101 174 |  | 
| 102 175 | 
             
                space_coord_concat = load_st_coord(adata, ldsc, annotation=config.annotation)
         | 
| 103 176 | 
             
                fig = draw_scatter(space_coord_concat,
         | 
| @@ -109,46 +182,18 @@ def run_Visualize(config: VisualizeConfig): | |
| 109 182 | 
             
                                   annotation=config.annotation
         | 
| 110 183 | 
             
                                   )
         | 
| 111 184 |  | 
| 112 | 
            -
                # save the figure to html
         | 
| 113 185 |  | 
| 114 186 | 
             
                # Visualization
         | 
| 115 | 
            -
                output_dir = Path(config. | 
| 187 | 
            +
                output_dir = Path(config.output_dir)
         | 
| 116 188 | 
             
                output_dir.mkdir(parents=True, exist_ok=True, mode=0o755)
         | 
| 117 189 | 
             
                output_file_html = output_dir / f'{config.sample_name}_{config.trait_name}.html'
         | 
| 118 190 | 
             
                output_file_pdf = output_dir / f'{config.sample_name}_{config.trait_name}.pdf'
         | 
| 191 | 
            +
                output_file_csv = output_dir / f'{config.sample_name}_{config.trait_name}.csv'
         | 
| 119 192 |  | 
| 120 193 | 
             
                fig.write_html(str(output_file_html))
         | 
| 121 194 | 
             
                fig.write_image(str(output_file_pdf))
         | 
| 195 | 
            +
                space_coord_concat.to_csv(str(output_file_csv))
         | 
| 122 196 |  | 
| 123 197 | 
             
                print(
         | 
| 124 198 | 
             
                    f'------The visualization result is saved in a html file: {output_file_html} which can interactively viewed in a web browser and a pdf file: {output_file_pdf}.')
         | 
| 125 | 
            -
             | 
| 126 | 
            -
             | 
| 127 | 
            -
            if __name__ == '__main__':
         | 
| 128 | 
            -
                TEST = True
         | 
| 129 | 
            -
                if TEST:
         | 
| 130 | 
            -
                    test_dir = '/storage/yangjianLab/chenwenhao/projects/202312_gsMap/data/gsMap_test/Nature_Neuroscience_2021'
         | 
| 131 | 
            -
                    name = 'E16.5_E1S1'
         | 
| 132 | 
            -
             | 
| 133 | 
            -
                    config = VisualizeConfig(
         | 
| 134 | 
            -
                        input_hdf5_path=f'/storage/yangjianLab/songliyang/SpatialData/Data/Embryo/Mice/Cell_MOSTA/h5ad/E16.5_E1S1.MOSTA.h5ad',
         | 
| 135 | 
            -
                        input_ldsc_dir=
         | 
| 136 | 
            -
                        f'/storage/yangjianLab/songliyang/SpatialData/Data/Embryo/Mice/Cell_MOSTA/ldsc_enrichment_frac/E16.5_E1S1/',
         | 
| 137 | 
            -
                        output_figure_dir='/storage/yangjianLab/chenwenhao/projects/202312_gsMap/data/gsMap_test/Nature_Neuroscience_2021/snake_workdir/Cortex_151507/figure/',
         | 
| 138 | 
            -
                        sample_name=name,
         | 
| 139 | 
            -
                        trait_name='GIANT_EUR_Height_2022_Nature',
         | 
| 140 | 
            -
                        fig_title='GIANT_EUR_Height_2022_Nature',
         | 
| 141 | 
            -
                        fig_height=800,
         | 
| 142 | 
            -
                        fig_width=800,
         | 
| 143 | 
            -
                        fig_style='light',
         | 
| 144 | 
            -
                        point_size=2,
         | 
| 145 | 
            -
                        annotation='annotation',
         | 
| 146 | 
            -
                    )
         | 
| 147 | 
            -
                    run_Visualize(config)
         | 
| 148 | 
            -
                else:
         | 
| 149 | 
            -
                    parser = argparse.ArgumentParser(description="Visualization the results")
         | 
| 150 | 
            -
                    add_Visualization_args(parser)
         | 
| 151 | 
            -
                    args = parser.parse_args()
         | 
| 152 | 
            -
                    config = VisualizeConfig(**vars(args))
         | 
| 153 | 
            -
             | 
| 154 | 
            -
                    run_Visualize(config)
         | 
| 199 | 
            +
                print(f'------The visualization data is saved in a csv file: {output_file_csv}.')
         | 
| @@ -1,6 +1,6 @@ | |
| 1 1 | 
             
            Metadata-Version: 2.1
         | 
| 2 2 | 
             
            Name: gsMap
         | 
| 3 | 
            -
            Version: 1. | 
| 3 | 
            +
            Version: 1.64
         | 
| 4 4 | 
             
            Summary: Genetics-informed pathogenic spatial mapping
         | 
| 5 5 | 
             
            Author-email: liyang <songliyang@westlake.edu.cn>, wenhao <chenwenhao@westlake.edu.cn>
         | 
| 6 6 | 
             
            Requires-Python: >=3.8
         | 
| @@ -26,6 +26,12 @@ Requires-Dist: pyranges | |
| 26 26 | 
             
            Requires-Dist: pyfiglet
         | 
| 27 27 | 
             
            Requires-Dist: plotly
         | 
| 28 28 | 
             
            Requires-Dist: kaleido
         | 
| 29 | 
            +
            Requires-Dist: jinja2
         | 
| 30 | 
            +
            Requires-Dist: scanpy
         | 
| 31 | 
            +
            Requires-Dist: zarr
         | 
| 32 | 
            +
            Requires-Dist: bitarray
         | 
| 33 | 
            +
            Requires-Dist: pyarrow
         | 
| 34 | 
            +
            Requires-Dist: scikit-misc
         | 
| 29 35 | 
             
            Requires-Dist: sphinx ; extra == "doc"
         | 
| 30 36 | 
             
            Requires-Dist: sphinx-argparse ; extra == "doc"
         | 
| 31 37 | 
             
            Requires-Dist: sphinx-autobuild ; extra == "doc"
         | 
| @@ -46,21 +52,22 @@ Requires-Dist: sphinxcontrib-serializinghtml ; extra == "doc" | |
| 46 52 | 
             
            Requires-Dist: furo ; extra == "doc"
         | 
| 47 53 | 
             
            Requires-Dist: myst-parser ; extra == "doc"
         | 
| 48 54 | 
             
            Requires-Dist: nbsphinx ; extra == "doc"
         | 
| 49 | 
            -
            Project-URL: Documentation, https | 
| 55 | 
            +
            Project-URL: Documentation, https://yanglab.westlake.edu.cn/gsmap/document
         | 
| 50 56 | 
             
            Project-URL: Home, https://github.com/LeonSong1995/gsMap
         | 
| 51 | 
            -
            Project-URL: Website, https | 
| 57 | 
            +
            Project-URL: Website, https://yanglab.westlake.edu.cn/gsmap/home
         | 
| 52 58 | 
             
            Provides-Extra: doc
         | 
| 53 59 |  | 
| 54 60 | 
             
            # gsMap (genetically informed spatial mapping of cells for complex traits)
         | 
| 55 | 
            -
            [](https://github.com/LeonSong1995/gsMap/stargazers)
         | 
| 62 | 
            +
            [](https://pypi.org/p/gsMap)
         | 
| 56 63 | 
             
            [](https://opensource.org/licenses/MIT)
         | 
| 57 64 |  | 
| 65 | 
            +
            
         | 
| 58 66 |  | 
| 59 | 
            -
            ##  | 
| 67 | 
            +
            ## 1.Citation
         | 
| 68 | 
            +
            Liyang Song, Wenhao Chen, Junren Hou, Minmin Guo, Jian Yang (2024) Spatially resolved mapping of cells associated with human complex traits. (Under review)
         | 
| 60 69 |  | 
| 61 | 
            -
             | 
| 62 | 
            -
             | 
| 63 | 
            -
            ## Installation
         | 
| 70 | 
            +
            ## 2.Installation
         | 
| 64 71 |  | 
| 65 72 | 
             
            install use pip:
         | 
| 66 73 |  | 
| @@ -71,52 +78,20 @@ pip install gsMap | |
| 71 78 | 
             
            install from source:
         | 
| 72 79 |  | 
| 73 80 | 
             
            ```bash
         | 
| 74 | 
            -
            git clone
         | 
| 81 | 
            +
            git clone https://github.com/LeonSong1995/gsMap.git
         | 
| 75 82 | 
             
            cd gsMap
         | 
| 76 83 | 
             
            pip install -e .
         | 
| 77 84 | 
             
            ```
         | 
| 78 85 |  | 
| 79 | 
            -
            ## Usage
         | 
| 80 | 
            -
             | 
| 81 | 
            -
            To use gsMap, navigate to the command line and enter `gsMap` followed by the subcommand that corresponds to the desired operation. Each subcommand may require specific arguments to run.
         | 
| 82 | 
            -
             | 
| 83 | 
            -
            ### Basic Command Structure
         | 
| 84 | 
            -
             | 
| 85 | 
            -
            ```bash
         | 
| 86 | 
            -
            gsmap subcommand [arguments...]
         | 
| 87 | 
            -
            ```
         | 
| 88 | 
            -
             | 
| 89 | 
            -
            - `subcommand`: The specific operation you wish to perform.
         | 
| 90 | 
            -
            - `arguments`: The arguments and options required for the subcommand.
         | 
| 91 | 
            -
             | 
| 92 | 
            -
            ### Available Subcommands
         | 
| 93 | 
            -
             | 
| 94 | 
            -
            (Provide a list and brief description of each available subcommand. For example:)
         | 
| 95 | 
            -
             | 
| 96 | 
            -
            - `run_find_latent_representations`: Finds latent representations using a GNN-VAE model.
         | 
| 97 | 
            -
            - `run_latent_to_gene`: Maps latent representations to gene markers.
         | 
| 98 | 
            -
            - `run_generate_ldscore`: Generates LD scores for genomic spots.
         | 
| 99 | 
            -
            - `run_spatial_ldsc`: Conducts spatial LDSC analysis.
         | 
| 100 | 
            -
            - `run_cauchy_combination`: Performs Cauchy combination tests for annotations.
         | 
| 101 | 
            -
            - `run_all_mode`: Executes a comprehensive pipeline covering all steps.
         | 
| 102 | 
            -
             | 
| 103 | 
            -
            ### Examples
         | 
| 104 | 
            -
             | 
| 105 | 
            -
            To run a specific functionality, you need to provide the appropriate subcommand and arguments. For example:
         | 
| 106 | 
            -
            ### Running Requirement
         | 
| 107 | 
            -
             | 
| 108 | 
            -
             | 
| 109 | 
            -
            ```bash
         | 
| 110 | 
            -
            gsmap run_find_latent_representations --input_hdf5_path <path> --output_hdf5_path <path> --sample_name <name>
         | 
| 111 | 
            -
            ```
         | 
| 86 | 
            +
            ## 3.Usage
         | 
| 112 87 |  | 
| 113 | 
            -
             | 
| 88 | 
            +
            Please checkout the documentations and tutorials at
         | 
| 89 | 
            +
            [gsMap.docs](https://yanglab.westlake.edu.cn/gsmap/document).
         | 
| 114 90 |  | 
| 115 | 
            -
            ## Contributing
         | 
| 116 91 |  | 
| 117 | 
            -
             | 
| 92 | 
            +
            ## 4.Online visualization
         | 
| 118 93 |  | 
| 119 | 
            -
             | 
| 94 | 
            +
            To visualize the traits-embryo or traits-brain association spatial maps, please refer to [gsmap.visualization](https://yanglab.westlake.edu.cn/gsmap/visualize).
         | 
| 120 95 |  | 
| 121 96 | 
             
            ....
         | 
| 122 97 |  | 
| @@ -0,0 +1,30 @@ | |
| 1 | 
            +
            gsMap/__init__.py,sha256=hH_7cxKCiXvoE-nLdYVifzx31Y227kJExpLs9O9ecRo,78
         | 
| 2 | 
            +
            gsMap/__main__.py,sha256=jR-HT42Zzfj2f-7kFJy0bkWjNxcV1MyfQHXFpef2nSE,62
         | 
| 3 | 
            +
            gsMap/cauchy_combination_test.py,sha256=zBPR7DOaNkr7rRoua4tAjRZL7ArjCyMRSQlPSUdHNSE,5694
         | 
| 4 | 
            +
            gsMap/config.py,sha256=hMUvlwlKZXeRdTJZfMINz_8DadVhEIT6X6fyJf11M9E,41134
         | 
| 5 | 
            +
            gsMap/diagnosis.py,sha256=pp3ONVaWCOoNCog1_6eud38yicBFxL-XhH7D8iTBgF4,13220
         | 
| 6 | 
            +
            gsMap/find_latent_representation.py,sha256=BVv4dyTolrlciHG3I-vwNDh2ruPpTf9jiT1hMKZnpto,6044
         | 
| 7 | 
            +
            gsMap/format_sumstats.py,sha256=9OBxuunoOLml3LKZvvRsPEEjQvT1Cuqb0w6lqsRIYPw,13714
         | 
| 8 | 
            +
            gsMap/generate_ldscore.py,sha256=2JfQoMWeQ0-B-zRHakmwq8ovkeewlnWHUCnih6od6ZE,29089
         | 
| 9 | 
            +
            gsMap/latent_to_gene.py,sha256=6TlOWDhzzrj18o9gJk2b-WMOkeXqscK8CJJKxCtilHg,9640
         | 
| 10 | 
            +
            gsMap/main.py,sha256=skyBtESdjvuXd9HNq5c83OPxQTNgLVErkYhwuJm8tE4,1285
         | 
| 11 | 
            +
            gsMap/report.py,sha256=H0uYAru2L5-d41_LFHPPdoJbtiTzP4f8kX-mirUNAfc,6963
         | 
| 12 | 
            +
            gsMap/run_all_mode.py,sha256=sPEct9fRw7aAQuU7BNChxk-I8YQcXuq--mtBn-2wTTY,8388
         | 
| 13 | 
            +
            gsMap/spatial_ldsc_multiple_sumstats.py,sha256=09j2zG98JUjQvSHPaRIDQVMZZLYDd1JBFaZTkW7tdvY,18470
         | 
| 14 | 
            +
            gsMap/visualize.py,sha256=FLIRHHj1KntLMFDjAhg1jZnJUdvrncR74pCW2Kj5pus,7453
         | 
| 15 | 
            +
            gsMap/GNN_VAE/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
         | 
| 16 | 
            +
            gsMap/GNN_VAE/adjacency_matrix.py,sha256=pmSfK9TTwdrsWTmHvCqVrbRE0PAiq1lvgmxzrdQgpiU,3500
         | 
| 17 | 
            +
            gsMap/GNN_VAE/model.py,sha256=Fixl8-2zN3T5MmMtpMIvxsBYydM3QVR4uC3Hhsg0DzI,3349
         | 
| 18 | 
            +
            gsMap/GNN_VAE/train.py,sha256=KnvZYHImRzTwJl1H0dkZZqWASdZ5VgYTCifQVW8TavM,3389
         | 
| 19 | 
            +
            gsMap/templates/report_template.html,sha256=pdxHFl_W0W351NUzuJTf_Ay_BfKlEbD_fztNabAGmmg,8214
         | 
| 20 | 
            +
            gsMap/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
         | 
| 21 | 
            +
            gsMap/utils/generate_r2_matrix.py,sha256=A1BrUnlTrYjRwEKxK0I1FbZ5SCQzcviWVM-JzFHHRkw,29352
         | 
| 22 | 
            +
            gsMap/utils/jackknife.py,sha256=nEDPVQJOPQ_uqfUCGX_v5cQwokgCqUmJTT_8rVFuIQo,18244
         | 
| 23 | 
            +
            gsMap/utils/make_annotations.py,sha256=lCbtahT27WFOwLgZrEUE5QcNRuMXmAFYUfsFR-cT-m0,22197
         | 
| 24 | 
            +
            gsMap/utils/manhattan_plot.py,sha256=k3n-NNgMsov9-8UQrirVqG560FUfJ4d6wNG8C0OeCjY,26235
         | 
| 25 | 
            +
            gsMap/utils/regression_read.py,sha256=n_hZZzQXHU-CSLvSofXmQM5Jw4Zpufv3U2HoUW344ko,8768
         | 
| 26 | 
            +
            gsmap-1.64.dist-info/entry_points.txt,sha256=s_P2Za22O077tc1FPLKMinbdRVXaN_HTcDBgWMYpqA4,41
         | 
| 27 | 
            +
            gsmap-1.64.dist-info/LICENSE,sha256=Ni2F-lLSv_H1xaVT3CoSrkiKzMvlgwh-dq8PE1esGyI,1094
         | 
| 28 | 
            +
            gsmap-1.64.dist-info/WHEEL,sha256=EZbGkh7Ie4PoZfRQ8I0ZuP9VklN_TvcZ6DSE5Uar4z4,81
         | 
| 29 | 
            +
            gsmap-1.64.dist-info/METADATA,sha256=ITHEobajRdMgQkc-ZpI708Xb5cB95_NxX-uDWVMPa60,3376
         | 
| 30 | 
            +
            gsmap-1.64.dist-info/RECORD,,
         | 
    
        gsmap-1.62.dist-info/RECORD
    DELETED
    
    | @@ -1,24 +0,0 @@ | |
| 1 | 
            -
            gsMap/__init__.py,sha256=RJYX4ncfccRzcIr2GQI4s5QYvjfLD-KKlzWeHaZMtzk,78
         | 
| 2 | 
            -
            gsMap/__main__.py,sha256=jR-HT42Zzfj2f-7kFJy0bkWjNxcV1MyfQHXFpef2nSE,62
         | 
| 3 | 
            -
            gsMap/cauchy_combination_test.py,sha256=WI71HmSJ38Q2VEohnVrWHL02MnY0clqX9Fb5VrXCCz4,6758
         | 
| 4 | 
            -
            gsMap/config.py,sha256=2-gQR-nJRI9XfxegGCuUYMPDf43nuo7gWXR8JhtKWjs,39578
         | 
| 5 | 
            -
            gsMap/find_latent_representation.py,sha256=liRXtQKixYwGA6ZQmfXXVeHAypobACYO1wYT-wyr3AU,8337
         | 
| 6 | 
            -
            gsMap/format_sumstats.py,sha256=wC8eSFCbD8qpq5JOaxhYP5iL3JZ6NmG-JPThyQ52tDM,13838
         | 
| 7 | 
            -
            gsMap/generate_ldscore.py,sha256=s2nhq9MvQa6wfRRsCe93lv54zyimvNn1aW0-dG-PsXo,25494
         | 
| 8 | 
            -
            gsMap/generate_r2_matrix.py,sha256=BGe4WrCm19nQwzYz5vmNIC7tfIM2_QUMPd8JdfFDock,29761
         | 
| 9 | 
            -
            gsMap/jackknife.py,sha256=nEDPVQJOPQ_uqfUCGX_v5cQwokgCqUmJTT_8rVFuIQo,18244
         | 
| 10 | 
            -
            gsMap/latent_to_gene.py,sha256=lvEokL3po0kTnMk7mQvBwN0gkfO26myudRRQX1pX0BQ,11269
         | 
| 11 | 
            -
            gsMap/main.py,sha256=ttGY1uSmHaC6R1fPfuvonr3Nj5lZt_U3UFw15VQKDIM,1511
         | 
| 12 | 
            -
            gsMap/make_annotations.py,sha256=QhI3aTO9eOUuqvDXLe23eUGjld7bt_1H6vtvWX5TR5Y,23984
         | 
| 13 | 
            -
            gsMap/regression_read.py,sha256=ATfUapl4zypkUwo8xivzD7aGlZNSMavR-xVavSsmVkI,8780
         | 
| 14 | 
            -
            gsMap/spatial_ldsc_multiple_sumstats.py,sha256=Ixt8HpWZyJ7L1OA539mkvykdIDoZG9VT9ivwRmCOSwA,14440
         | 
| 15 | 
            -
            gsMap/visualize.py,sha256=FMuSInYfNZQMLHgh-jjER4j-U78SQVNCZJOTnL-xhgM,5645
         | 
| 16 | 
            -
            gsMap/GNN_VAE/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
         | 
| 17 | 
            -
            gsMap/GNN_VAE/adjacency_matrix.py,sha256=0-qw5qHGrGugkjgVyWLYjC0Qa_iKvR1TnFxAgCaxJFw,3500
         | 
| 18 | 
            -
            gsMap/GNN_VAE/model.py,sha256=3uWTM_zjgCjBGnuutiua0ZV2W7WiIG5RA9Y9gRHmYA8,3349
         | 
| 19 | 
            -
            gsMap/GNN_VAE/train.py,sha256=cAj81gJ9AwV-f5gqS1PjNtfkcZ1s_TtRcDIPIb4AtoM,3389
         | 
| 20 | 
            -
            gsmap-1.62.dist-info/entry_points.txt,sha256=s_P2Za22O077tc1FPLKMinbdRVXaN_HTcDBgWMYpqA4,41
         | 
| 21 | 
            -
            gsmap-1.62.dist-info/LICENSE,sha256=Ni2F-lLSv_H1xaVT3CoSrkiKzMvlgwh-dq8PE1esGyI,1094
         | 
| 22 | 
            -
            gsmap-1.62.dist-info/WHEEL,sha256=EZbGkh7Ie4PoZfRQ8I0ZuP9VklN_TvcZ6DSE5Uar4z4,81
         | 
| 23 | 
            -
            gsmap-1.62.dist-info/METADATA,sha256=E9L2xZn1IRR2cmoC_gMjWoTF2fIx6qY9VDlSLg6_MrQ,3924
         | 
| 24 | 
            -
            gsmap-1.62.dist-info/RECORD,,
         | 
| 
            File without changes
         | 
| 
            File without changes
         | 
| 
            File without changes
         | 
| 
            File without changes
         |