To assemble our annotations, we'll read our clustered B cell data and assign our expert annotations to those clusters. We'll then inspect the annotations in our UMAP projections, and output final labels for these cells.
For B cells, we have two groups of cells to label - Most of the B cells were assigned labels at one resolution, and the non-effector memory B cells were assigned labels after additional, iterative clustering. So, we'll load both of these sets, remove the memory cells from the rest of the B cells, assign identities based on clusters in each, and finally concatenate all of the cell barcodes.
import warnings
warnings.simplefilter(action='ignore', category=FutureWarning)
warnings.simplefilter(action='ignore', category=RuntimeWarning)
from datetime import date
import hisepy
import os
import pandas as pd
import scanpy as sc
This function makes it easy to pull csv files stored in HISE as a pandas data.frame
def read_csv_uuid(csv_uuid):
csv_path = '/home/jupyter/cache/{u}'.format(u = csv_uuid)
if not os.path.isdir(csv_path):
hise_res = hisepy.reader.cache_files([csv_uuid])
csv_filename = os.listdir(csv_path)[0]
csv_file = '{p}/{f}'.format(p = csv_path, f = csv_filename)
df = pd.read_csv(csv_file, index_col = 0)
return df
cell_class = 'b-cells'
h5ad_uuid = '99f83994-26ee-49af-a882-c1f2558daed2'
h5ad_path = '/home/jupyter/cache/{u}'.format(u = h5ad_uuid)
if not os.path.isdir(h5ad_path):
hise_res = hisepy.reader.cache_files([h5ad_uuid])
h5ad_filename = os.listdir(h5ad_path)[0]
h5ad_file = '{p}/{f}'.format(p = h5ad_path, f = h5ad_filename)
adata = sc.read_h5ad(h5ad_file)
adata.shape
(177994, 1209)
mem_uuid = '51838754-b378-4f13-b447-82511bcd0a66'
mem_path = '/home/jupyter/cache/{u}'.format(u = mem_uuid)
if not os.path.isdir(mem_path):
hise_res = hisepy.reader.cache_files([mem_path])
mem_filename = os.listdir(mem_path)[0]
mem_file = '{p}/{f}'.format(p = mem_path, f = mem_filename)
mem_adata = sc.read_h5ad(mem_file)
mem_adata
AnnData object with n_obs × n_vars = 47886 × 2110 obs: 'barcodes', 'batch_id', 'cell_name', 'cell_uuid', 'chip_id', 'hto_barcode', 'hto_category', 'n_genes', 'n_mito_umis', 'n_reads', 'n_umis', 'original_barcodes', 'pbmc_sample_id', 'pool_id', 'well_id', 'sample.sampleKitGuid', 'cohort.cohortGuid', 'subject.subjectGuid', 'subject.biologicalSex', 'subject.race', 'subject.ethnicity', 'subject.birthYear', 'sample.visitName', 'sample.drawDate', 'file.id', 'subject.cmv', 'subject.bmi', 'celltypist.low', 'seurat.l1', 'seurat.l1.score', 'seurat.l2', 'seurat.l2.score', 'seurat.l2.5', 'seurat.l2.5.score', 'seurat.l3', 'seurat.l3.score', 'predicted_doublet', 'doublet_score', 'n_genes_by_counts', 'log1p_n_genes_by_counts', 'total_counts', 'log1p_total_counts', 'pct_counts_in_top_50_genes', 'pct_counts_in_top_100_genes', 'pct_counts_in_top_200_genes', 'pct_counts_in_top_500_genes', 'total_counts_mito', 'log1p_total_counts_mito', 'pct_counts_mito', 'leiden', 'leiden_resolution_1', 'leiden_resolution_1.5', 'leiden_resolution_2', 'ms_leiden_2', 'umap_1', 'umap_2', 'ms_leiden_2.5' var: 'mito', 'n_cells_by_counts', 'mean_counts', 'log1p_mean_counts', 'pct_dropout_by_counts', 'total_counts', 'log1p_total_counts', 'highly_variable', 'means', 'dispersions', 'dispersions_norm', 'mean', 'std' uns: 'celltypist.low_colors', 'hvg', 'leiden', 'leiden_colors', 'leiden_resolution_2_colors', 'log1p', 'ms_leiden_2_colors', 'neighbors', 'pca', 'seurat.l2.5_colors', 'umap' obsm: 'X_pca', 'X_pca_harmony', 'X_umap' varm: 'PCs' obsp: 'connectivities', 'distances'
drop_lgl = [not x for x in adata.obs['barcodes'].isin(mem_adata.obs['barcodes'])]
nonmem_adata = adata[drop_lgl].copy()
nonmem_adata.shape
(130108, 1209)
anno_uuid = 'aed5e5f4-1166-48c1-ad84-c92aee8edcf8'
anno = read_csv_uuid(anno_uuid)
downloading fileID: aed5e5f4-1166-48c1-ad84-c92aee8edcf8 Files have been successfully downloaded!
join_col = 'ms_leiden_2'
anno[join_col] = anno[join_col].astype('string').astype('category')
obs = nonmem_adata.obs
sum(obs[join_col].isin(anno[join_col]))
130108
nonmem_anno = obs.merge(anno, how = 'left', on = join_col)
nonmem_anno.head()
barcodes | batch_id | cell_name | cell_uuid | chip_id | hto_barcode | hto_category | n_genes | n_mito_umis | n_reads | ... | log1p_total_counts_mito | pct_counts_mito | leiden | leiden_resolution_1 | leiden_resolution_1.5 | leiden_resolution_2 | ms_leiden_2 | AIFI_L3 | AIFI_L1 | AIFI_L2 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | cf72a14a48b611ea8957bafe6d70929e | B001 | bestial_fireless_rottweiler | cf72a14a48b611ea8957bafe6d70929e | B001-P1C1 | TGATGGCCTATTGGG | singlet | 904 | 58 | 10269 | ... | 4.077537 | 1.968103 | 7 | 7 | 14 | 18 | 21 | T_B doublet | T_B doublet | T_B doublet |
1 | cf73500e48b611ea8957bafe6d70929e | B001 | stressed_wishful_flea | cf73500e48b611ea8957bafe6d70929e | B001-P1C1 | TGATGGCCTATTGGG | singlet | 1085 | 71 | 12422 | ... | 4.276666 | 1.978267 | 7 | 1 | 1 | 0 | 0 | Core naive B cell | B cell | Naive B cell |
2 | cf73694a48b611ea8957bafe6d70929e | B001 | silicone_nonsolar_snowgeese | cf73694a48b611ea8957bafe6d70929e | B001-P1C1 | TGATGGCCTATTGGG | singlet | 1152 | 198 | 11355 | ... | 5.293305 | 5.899881 | 10 | 5 | 9 | 11 | 11 | CD27+ effector B cell | B cell | Effector B cell |
3 | cf73fbee48b611ea8957bafe6d70929e | B001 | luxuriant_overrated_gypsymoth | cf73fbee48b611ea8957bafe6d70929e | B001-P1C1 | TGATGGCCTATTGGG | singlet | 1769 | 245 | 18105 | ... | 5.505332 | 4.552211 | 7 | 4 | 3 | 6 | 1 | Transitional B cell | B cell | Transitional B cell |
4 | cf74ae2c48b611ea8957bafe6d70929e | B001 | real_bighearted_kitty | cf74ae2c48b611ea8957bafe6d70929e | B001-P1C1 | TGATGGCCTATTGGG | singlet | 692 | 83 | 5468 | ... | 4.430817 | 4.976019 | 7 | 1 | 1 | 0 | 0 | Core naive B cell | B cell | Naive B cell |
5 rows × 57 columns
mem_anno_uuid = 'afc4fe7f-6426-41ce-a10c-0dcdce422dd1'
mem_anno = read_csv_uuid(mem_anno_uuid)
downloading fileID: afc4fe7f-6426-41ce-a10c-0dcdce422dd1 Files have been successfully downloaded!
join_col = 'ms_leiden_2.5'
mem_anno[join_col] = mem_anno[join_col].astype('string').astype('category')
obs = mem_adata.obs
sum(obs[join_col].isin(mem_anno[join_col]))
47886
mem_anno = obs.merge(mem_anno, how = 'left', on = join_col)
mem_anno.head()
barcodes | batch_id | cell_name | cell_uuid | chip_id | hto_barcode | hto_category | n_genes | n_mito_umis | n_reads | ... | leiden_resolution_1 | leiden_resolution_1.5 | leiden_resolution_2 | ms_leiden_2 | umap_1 | umap_2 | ms_leiden_2.5 | AIFI_L3 | AIFI_L1 | AIFI_L2 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | cf720af048b611ea8957bafe6d70929e | B001 | patterny_untalented_halcyon | cf720af048b611ea8957bafe6d70929e | B001-P1C1 | TGATGGCCTATTGGG | singlet | 928 | 66 | 7856 | ... | 2 | 4 | 2 | 2 | NaN | NaN | 8 | Core memory B cell | B cell | Memory B cell |
1 | cf78473048b611ea8957bafe6d70929e | B001 | burly_backward_tuatara | cf78473048b611ea8957bafe6d70929e | B001-P1C1 | TGATGGCCTATTGGG | singlet | 1372 | 338 | 17586 | ... | 3 | 6 | 13 | 13 | NaN | NaN | 5 | Core memory B cell | B cell | Memory B cell |
2 | cf79279a48b611ea8957bafe6d70929e | B001 | illadvised_applicable_annelid | cf79279a48b611ea8957bafe6d70929e | B001-P1C1 | TGATGGCCTATTGGG | singlet | 757 | 207 | 8651 | ... | 3 | 7 | 10 | 13 | NaN | NaN | 8 | Core memory B cell | B cell | Memory B cell |
3 | cf80e44e48b611ea8957bafe6d70929e | B001 | frousy_vapourific_oropendola | cf80e44e48b611ea8957bafe6d70929e | B001-P1C1 | TGATGGCCTATTGGG | singlet | 776 | 70 | 5600 | ... | 2 | 4 | 2 | 2 | NaN | NaN | 8 | Core memory B cell | B cell | Memory B cell |
4 | cf81a58c48b611ea8957bafe6d70929e | B001 | minor_clerkish_hartebeest | cf81a58c48b611ea8957bafe6d70929e | B001-P1C1 | TGATGGCCTATTGGG | singlet | 1244 | 151 | 10561 | ... | 2 | 5 | 4 | 2 | NaN | NaN | 9 | Early memory B cell | B cell | Memory B cell |
5 rows × 60 columns
anno = pd.concat([nonmem_anno, mem_anno], axis = 0)
anno = anno[['barcodes', 'AIFI_L1', 'AIFI_L2', 'AIFI_L3']]
anno = anno.set_index('barcodes')
obs = adata.obs
obs = obs.merge(anno, how = 'left', left_index = True, right_index = True)
adata.obs = obs
adata.obs.head()
barcodes | batch_id | cell_name | cell_uuid | chip_id | hto_barcode | hto_category | n_genes | n_mito_umis | n_reads | ... | log1p_total_counts_mito | pct_counts_mito | leiden | leiden_resolution_1 | leiden_resolution_1.5 | leiden_resolution_2 | ms_leiden_2 | AIFI_L1 | AIFI_L2 | AIFI_L3 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
barcodes | |||||||||||||||||||||
cf720af048b611ea8957bafe6d70929e | cf720af048b611ea8957bafe6d70929e | B001 | patterny_untalented_halcyon | cf720af048b611ea8957bafe6d70929e | B001-P1C1 | TGATGGCCTATTGGG | singlet | 928 | 66 | 7856 | ... | 4.204693 | 2.798982 | 10 | 2 | 4 | 2 | 2 | B cell | Memory B cell | Core memory B cell |
cf72a14a48b611ea8957bafe6d70929e | cf72a14a48b611ea8957bafe6d70929e | B001 | bestial_fireless_rottweiler | cf72a14a48b611ea8957bafe6d70929e | B001-P1C1 | TGATGGCCTATTGGG | singlet | 904 | 58 | 10269 | ... | 4.077537 | 1.968103 | 7 | 7 | 14 | 18 | 21 | T_B doublet | T_B doublet | T_B doublet |
cf73500e48b611ea8957bafe6d70929e | cf73500e48b611ea8957bafe6d70929e | B001 | stressed_wishful_flea | cf73500e48b611ea8957bafe6d70929e | B001-P1C1 | TGATGGCCTATTGGG | singlet | 1085 | 71 | 12422 | ... | 4.276666 | 1.978267 | 7 | 1 | 1 | 0 | 0 | B cell | Naive B cell | Core naive B cell |
cf73694a48b611ea8957bafe6d70929e | cf73694a48b611ea8957bafe6d70929e | B001 | silicone_nonsolar_snowgeese | cf73694a48b611ea8957bafe6d70929e | B001-P1C1 | TGATGGCCTATTGGG | singlet | 1152 | 198 | 11355 | ... | 5.293305 | 5.899881 | 10 | 5 | 9 | 11 | 11 | B cell | Effector B cell | CD27+ effector B cell |
cf73fbee48b611ea8957bafe6d70929e | cf73fbee48b611ea8957bafe6d70929e | B001 | luxuriant_overrated_gypsymoth | cf73fbee48b611ea8957bafe6d70929e | B001-P1C1 | TGATGGCCTATTGGG | singlet | 1769 | 245 | 18105 | ... | 5.505332 | 4.552211 | 7 | 4 | 3 | 6 | 1 | B cell | Transitional B cell | Transitional B cell |
5 rows × 57 columns
sc.pl.umap(adata, color = ['AIFI_L1', 'AIFI_L2', 'AIFI_L3'], ncols = 1)
/opt/conda/lib/python3.10/site-packages/scanpy/plotting/_tools/scatterplots.py:394: UserWarning: No data for colormapping provided via 'c'. Parameters 'cmap' will be ignored cax = scatter( /opt/conda/lib/python3.10/site-packages/scanpy/plotting/_tools/scatterplots.py:394: UserWarning: No data for colormapping provided via 'c'. Parameters 'cmap' will be ignored cax = scatter( /opt/conda/lib/python3.10/site-packages/scanpy/plotting/_tools/scatterplots.py:394: UserWarning: No data for colormapping provided via 'c'. Parameters 'cmap' will be ignored cax = scatter(
sc.pl.umap(adata,
color = ['leiden_resolution_1',
'leiden_resolution_1.5',
'leiden_resolution_2',
'ms_leiden_2'],
ncols = 1)
/opt/conda/lib/python3.10/site-packages/scanpy/plotting/_tools/scatterplots.py:394: UserWarning: No data for colormapping provided via 'c'. Parameters 'cmap' will be ignored cax = scatter( /opt/conda/lib/python3.10/site-packages/scanpy/plotting/_tools/scatterplots.py:394: UserWarning: No data for colormapping provided via 'c'. Parameters 'cmap' will be ignored cax = scatter( /opt/conda/lib/python3.10/site-packages/scanpy/plotting/_tools/scatterplots.py:394: UserWarning: No data for colormapping provided via 'c'. Parameters 'cmap' will be ignored cax = scatter( /opt/conda/lib/python3.10/site-packages/scanpy/plotting/_tools/scatterplots.py:394: UserWarning: No data for colormapping provided via 'c'. Parameters 'cmap' will be ignored cax = scatter(
obs = adata.obs
obs = obs.reset_index(drop = True)
umap_mat = adata.obsm['X_umap']
umap_df = pd.DataFrame(umap_mat, columns = ['umap_1', 'umap_2'])
obs['umap_1'] = umap_df['umap_1']
obs['umap_2'] = umap_df['umap_2']
obs.head()
barcodes | batch_id | cell_name | cell_uuid | chip_id | hto_barcode | hto_category | n_genes | n_mito_umis | n_reads | ... | leiden | leiden_resolution_1 | leiden_resolution_1.5 | leiden_resolution_2 | ms_leiden_2 | AIFI_L1 | AIFI_L2 | AIFI_L3 | umap_1 | umap_2 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | cf720af048b611ea8957bafe6d70929e | B001 | patterny_untalented_halcyon | cf720af048b611ea8957bafe6d70929e | B001-P1C1 | TGATGGCCTATTGGG | singlet | 928 | 66 | 7856 | ... | 10 | 2 | 4 | 2 | 2 | B cell | Memory B cell | Core memory B cell | 1.259842 | -1.832500 |
1 | cf72a14a48b611ea8957bafe6d70929e | B001 | bestial_fireless_rottweiler | cf72a14a48b611ea8957bafe6d70929e | B001-P1C1 | TGATGGCCTATTGGG | singlet | 904 | 58 | 10269 | ... | 7 | 7 | 14 | 18 | 21 | T_B doublet | T_B doublet | T_B doublet | 1.463564 | 11.663149 |
2 | cf73500e48b611ea8957bafe6d70929e | B001 | stressed_wishful_flea | cf73500e48b611ea8957bafe6d70929e | B001-P1C1 | TGATGGCCTATTGGG | singlet | 1085 | 71 | 12422 | ... | 7 | 1 | 1 | 0 | 0 | B cell | Naive B cell | Core naive B cell | -2.856547 | -0.907700 |
3 | cf73694a48b611ea8957bafe6d70929e | B001 | silicone_nonsolar_snowgeese | cf73694a48b611ea8957bafe6d70929e | B001-P1C1 | TGATGGCCTATTGGG | singlet | 1152 | 198 | 11355 | ... | 10 | 5 | 9 | 11 | 11 | B cell | Effector B cell | CD27+ effector B cell | 3.092754 | -1.697405 |
4 | cf73fbee48b611ea8957bafe6d70929e | B001 | luxuriant_overrated_gypsymoth | cf73fbee48b611ea8957bafe6d70929e | B001-P1C1 | TGATGGCCTATTGGG | singlet | 1769 | 245 | 18105 | ... | 7 | 4 | 3 | 6 | 1 | B cell | Transitional B cell | Transitional B cell | -3.169807 | 2.543742 |
5 rows × 59 columns
out_dir = 'output'
if not os.path.isdir(out_dir):
os.makedirs(out_dir)
obs_out_csv = '{p}/ref_pbmc_{c}_labeled_meta_umap_{d}.csv'.format(p = out_dir, c = cell_class, d = date.today())
obs.to_csv(obs_out_csv, index = False)
obs_out_parquet = '{p}/ref_pbmc_{c}_labeled_meta_umap_{d}.parquet'.format(p = out_dir, c = cell_class, d = date.today())
obs.to_parquet(obs_out_parquet, index = False)
bc_anno = obs[['barcodes', 'AIFI_L1', 'AIFI_L2', 'AIFI_L3']]
label_out_csv = '{p}/ref_pbmc_{c}_barcode_labels_{d}.csv'.format(p = out_dir, c = cell_class, d = date.today())
bc_anno.to_csv(label_out_csv, index = False)
label_out_parquet = '{p}/ref_pbmc_{c}_barcode_labels_{d}.parquet'.format(p = out_dir, c = cell_class, d = date.today())
bc_anno.to_parquet(label_out_parquet, index = False)
Finally, we'll use hisepy.upload.upload_files()
to send a copy of our output to HISE to use for downstream analysis steps.
study_space_uuid = '64097865-486d-43b3-8f94-74994e0a72e0'
title = 'B cell barcode annotations {d}'.format(d = date.today())
in_files = [h5ad_uuid, mem_uuid, anno_uuid, mem_anno_uuid]
in_files
['99f83994-26ee-49af-a882-c1f2558daed2', '51838754-b378-4f13-b447-82511bcd0a66', 'aed5e5f4-1166-48c1-ad84-c92aee8edcf8', 'afc4fe7f-6426-41ce-a10c-0dcdce422dd1']
out_files = [obs_out_csv, obs_out_parquet,
label_out_csv, label_out_parquet]
out_files
['output/ref_pbmc_b-cells_labeled_meta_umap_2024-03-09.csv', 'output/ref_pbmc_b-cells_labeled_meta_umap_2024-03-09.parquet', 'output/ref_pbmc_b-cells_barcode_labels_2024-03-09.csv', 'output/ref_pbmc_b-cells_barcode_labels_2024-03-09.parquet']
hisepy.upload.upload_files(
files = out_files,
study_space_id = study_space_uuid,
title = title,
input_file_ids = in_files
)
output/ref_pbmc_b-cells_labeled_meta_umap_2024-03-09.csv output/ref_pbmc_b-cells_labeled_meta_umap_2024-03-09.parquet output/ref_pbmc_b-cells_barcode_labels_2024-03-09.csv output/ref_pbmc_b-cells_barcode_labels_2024-03-09.parquet Cannot determine the current notebook. 1) /home/jupyter/scRNA-Reference-IH-A/05-Assembly/17-Python_assign_B_cells.ipynb 2) /home/jupyter/scRNA-Reference-IH-A/04-Annotation/12-Python_B_cell_annotations.ipynb 3) /home/jupyter/scRNA-Reference-IH-A/visualizations/04-Python_other_markers.ipynb Please select (1-3)
you are trying to upload file_ids... ['output/ref_pbmc_b-cells_labeled_meta_umap_2024-03-09.csv', 'output/ref_pbmc_b-cells_labeled_meta_umap_2024-03-09.parquet', 'output/ref_pbmc_b-cells_barcode_labels_2024-03-09.csv', 'output/ref_pbmc_b-cells_barcode_labels_2024-03-09.parquet']. Do you truly want to proceed?
{'trace_id': '55a58595-c889-403d-aa20-cd4abfd16e22', 'files': ['output/ref_pbmc_b-cells_labeled_meta_umap_2024-03-09.csv', 'output/ref_pbmc_b-cells_labeled_meta_umap_2024-03-09.parquet', 'output/ref_pbmc_b-cells_barcode_labels_2024-03-09.csv', 'output/ref_pbmc_b-cells_barcode_labels_2024-03-09.parquet']}
import session_info
session_info.show()
----- anndata 0.10.3 hisepy 0.3.0 pandas 2.1.4 scanpy 1.9.6 session_info 1.0.0 -----
PIL 10.0.1 anyio NA arrow 1.3.0 asttokens NA attr 23.2.0 attrs 23.2.0 babel 2.14.0 beatrix_jupyterlab NA brotli NA cachetools 5.3.1 certifi 2024.02.02 cffi 1.16.0 charset_normalizer 3.3.2 cloudpickle 2.2.1 colorama 0.4.6 comm 0.1.4 cryptography 41.0.7 cycler 0.10.0 cython_runtime NA dateutil 2.8.2 db_dtypes 1.1.1 debugpy 1.8.0 decorator 5.1.1 defusedxml 0.7.1 deprecated 1.2.14 exceptiongroup 1.2.0 executing 2.0.1 fastjsonschema NA fqdn NA google NA greenlet 2.0.2 grpc 1.58.0 grpc_status NA h5py 3.10.0 idna 3.6 igraph 0.10.8 importlib_metadata NA ipykernel 6.28.0 ipython_genutils 0.2.0 ipywidgets 8.1.1 isoduration NA jedi 0.19.1 jinja2 3.1.2 joblib 1.3.2 json5 NA jsonpointer 2.4 jsonschema 4.20.0 jsonschema_specifications NA jupyter_events 0.9.0 jupyter_server 2.12.1 jupyterlab_server 2.25.2 jwt 2.8.0 kiwisolver 1.4.5 leidenalg 0.10.1 llvmlite 0.41.0 lz4 4.3.2 markupsafe 2.1.3 matplotlib 3.8.0 matplotlib_inline 0.1.6 mpl_toolkits NA mpmath 1.3.0 natsort 8.4.0 nbformat 5.9.2 numba 0.58.0 numpy 1.24.0 opentelemetry NA overrides NA packaging 23.2 parso 0.8.3 pexpect 4.8.0 pickleshare 0.7.5 pkg_resources NA platformdirs 4.1.0 plotly 5.18.0 prettytable 3.9.0 prometheus_client NA prompt_toolkit 3.0.42 proto NA psutil NA ptyprocess 0.7.0 pure_eval 0.2.2 pyarrow 13.0.0 pydev_ipython NA pydevconsole NA pydevd 2.9.5 pydevd_file_utils NA pydevd_plugins NA pydevd_tracing NA pygments 2.17.2 pynvml NA pyparsing 3.1.1 pyreadr 0.5.0 pythonjsonlogger NA pytz 2023.3.post1 referencing NA requests 2.31.0 rfc3339_validator 0.1.4 rfc3986_validator 0.1.1 rpds NA scipy 1.11.4 send2trash NA shapely 1.8.5.post1 six 1.16.0 sklearn 1.3.2 sniffio 1.3.0 socks 1.7.1 sql NA sqlalchemy 2.0.21 sqlparse 0.4.4 stack_data 0.6.2 sympy 1.12 termcolor NA texttable 1.7.0 threadpoolctl 3.2.0 torch 2.1.2+cu121 torchgen NA tornado 6.3.3 tqdm 4.66.1 traitlets 5.9.0 typing_extensions NA uri_template NA urllib3 1.26.18 wcwidth 0.2.12 webcolors 1.13 websocket 1.7.0 wrapt 1.15.0 xarray 2023.12.0 yaml 6.0.1 zipp NA zmq 25.1.2 zoneinfo NA zstandard 0.22.0
----- IPython 8.19.0 jupyter_client 8.6.0 jupyter_core 5.6.1 jupyterlab 4.1.2 notebook 6.5.4 ----- Python 3.10.13 | packaged by conda-forge | (main, Dec 23 2023, 15:36:39) [GCC 12.3.0] Linux-5.15.0-1052-gcp-x86_64-with-glibc2.31 ----- Session information updated at 2024-03-09 05:02