CoolFace
Apppublic

yzhangvi/rnaseq

sourceHugging Faceupdated 3mo agoView on Hugging Face
0likes
server.cpython-313.pyc330 linesDownload Raw Back to __pycache__
1�

2��<jf��3���%SrSSKJr SSKrSSKrSSKrSSKrSSKrSSKrSSK	r	SSK4r5SSKrSSKrSSK
JrJr SSKJr SSKJr \R("SS\S	9 SSKrSSKrSSKr\"\5R95R:rS6SS/S
S
S
S.SS/SSSSS.S.SSSSSS./SQSSSS.S.SS S!.S".rS#\ S$'SQS%jr!SRS&jr"SSS'jr#STS(jr$SUSVS)jjr%SUSWS*jjr&SXSYS+jjr'SZS,jr(S[S-jr)S\S.jr*S]S/jr+S^S0jr,S_S`S1jjr-SaS2jr.SbS3jr/ScS4jr0SdS5jr1SeS6jr2S_SfS7jjr3SgS8jr4ShS9jr5SiS:jr6SjS;jr7SkS<jr8SlS=jr9SmS>jr:SnS?jr;SoSpS@jjr<SqSAjr=SrSBjr>SsSCjr?StSDjr@SuSEjrAS_SvSFjjrBSwSxSGjjrCSySHjrDS_SzSIjjrES{SJjrFS|SKjrG"SLSM\5rHS}SNjrIS~SOjrJ\KSP:Xa\J"5 gg)z?Local RNA-seq analysis web app backed by R/Bioconductor DESeq2.�)�annotationsN)�SimpleHTTPRequestHandler�ThreadingHTTPServer)�Path)�Any�ignorez'cgi' is deprecated.*)�message�category皙�����?��?�protein_codingT)�padj_cutoff�
log2fc_cutoff�7gene_types�protein_coding_only_for_labels�protein_coding_only_for_heatmap�"protein_coding_only_for_enrichmenti�������#D62728�#1F77B4z#B3B3B3��UP�DOWN�NS)�xlim�8max_labels�colors�2�@z#F8FAFC��low�mid�high)�#4D4D4Drrz#047C7Bz#B7791Fz#28724Fz#8B4F9Fr%)�control�KO1�KO2)�	top_genes�clipr�
group_palette�group_colors��P)�min_overlap�	max_terms)�deg�volcano�heatmap�9enrichment�dict[str, Any]�DEFAULT_RECIPEc�^�0nUR5H.up4[U[5(a[U05X#'M*XBU'M0 UR5HTup4[U[5(a6[UR	U5[5(a[X#U5X#'MPXBU'MV U$�N)�items�10isinstance�dict�11deep_merge�get)�base�override�merged�key�values     � outputs/rna_seq_webapp/server.pyr<r<9s����F��j�j�l�12���e�T�"�"�$�U�B�/�F�K��3�K�	#�13�n�n�&�14���e�T�"�"�z�&�*�*�S�/�4�'H�'H�$�V�[�%�8�F�K��3�K�	'�15�M�c�@�URS5nU(d[[05nOk[U[5(a%[[[16R"U55nO1[U[5(a[[U5nO[S5e[USRSS55USS'[USRSS55USS'USRSS	/5n[U[5(d/nUVs/sH<n[	U5R5(dM#[	U5R5PM> snUSS'[US17RSS55US18S'[US
RSS55US
S'[US
RSS55US
S'[USRSS55USS'[USRSS55USS'[U5 U$s snf)N�analysis_recipeu 分析 recipe 格式不正确。r1rrrrrr
r2rrr3r)rr*r r4r/r-r0r.)r=r<r6r:�str�json�loadsr;�19ValueError�float�list�strip�int�normalize_colors)�params�raw�reciper�items     rC�parse_reciperTHs���20�*�*�&�21'�C���N�B�/��	�C��	�	��N�D�J�J�s�O�<��	�C��	�	��N�C�0���;�<�<�#(����):�):�=�$�)O�#P�F�5�M�-� �%*�6�%�=�+<�+<�_�c�+R�%S�F�5�M�/�"����"�"�<�2B�1C�D�J��j�$�'�'��22�AK�"a���s�SW�y���O`�#4�3�t�9�?�?�#4��"a�F�5�M�,��&)�&��*;�*?�*?��b�*Q�&R�F�9��l�#�%(��	�):�)>�)>�{�B�)O�%P�F�9��k�"� %�f�Y�&7�&;�&;�F�C�&H� I�F�9��f��*-�f�\�.B�.F�.F�}�VW�.X�*Y�F�<���'�(+�F�<�,@�,D�,D�[�RT�,U�(V�F�<���%��V���M��#bs�"H�4Hc��[U=(d S5n[U5S:H=(a- URS5=(a [SUSS55$)N�r�#c3�*# �UH	oS;v� M g7f)�0123456789abcdefABCDEFN���.0�chs  rC�	<genexpr>�is_hex_color.<locals>.<genexpr>ds���:m�dl�^`�AY�;Y�dl�s��)rG�len�23startswith�all�rB�texts  rC�is_hex_colorrfbsF���u�{���D��t�9��>�m�d�o�o�c�2�m�s�:m�dh�ij�ik�dl�:m�7m�mrDc�p�[nSHMnUSRS05RU5n[U5(aM9USSUUSSU'MO SHMnUSRS05RU5n[U5(aM9USSUUSSU'MO USRS5n[	U[245(d/nUVs/sH n[U5(dM[
U5PM" nn[U5S:aUSSR5nX`SS'USRS5n[	U[5(d0nUR5VVs0sH,up�[U5(dM[
U5[
U5_M. snnUSS'gs snfs snnf)	Nrr2rr!r3r+�r,)r6�25setdefaultr=rfr:rLrGra�copyr;r9)	rR�defaultsrArB�palette�color�
clean_paletter,�groups	         rCrOrOgs����H�#���y�!�,�,�X�r�:�>�>�s�C���E�"�"�/7�	�/B�8�/L�S�/Q�F�9��h�'��,�$�&���y�!�,�,�X�r�:�>�>�s�C���E�"�"�/7�	�/B�8�/L�S�/Q�F�9��h�'��,�&��Y��#�#�O�4�G��g�t�$�$���-4�L�W�E��U�8K�Z�S��Z�W�M�L�26�=��A�� ��+�O�<�A�A�C�
�)6�9��o�&��)�$�(�(��8�L��l�D�)�)���T`�Tf�Tf�Th�)A�Th�L�E�lx�y~�l�)?��U��S��Z�)?�Th�)A�F�9��n�%��M��)As�F-�4F-�/F2�	F2c�2�[R"USSS9RS5nURU5 UR	SS5 UR	S[[
U555 UR5 URRU5 g)NF)�ensure_ascii�	allow_nan�utf-8�Content-Typezapplication/json; charset=utf-8�Content-Length)27rH�dumps�encode�
send_response�send_headerrGra�end_headers�wfile�write)�handler�payload�status�bodys    rC�
json_responser�~su���:�:�g�E�U�C�J�J�7�S�D����&�!�����(I�J����(�#�c�$�i�.�9������M�M����rDc��URU5 URSU5 URSSUS35 URS[[U555 UR	5 UR28R
U5 g)NrtzContent-Dispositionzattachment; filename="�"ru)rxryrGrarzr{r|)r}�content�filename�content_typers     rC�binary_responser��sv�����&�!������5����-�1G��z�QR�/S�T����(�#�c�'�l�*;�<������M�M���� rDc�$�[USUS.U5 g)NF)�ok�error)r�)r}r	rs   rC�error_responser��s���'�%�'�:�F�CrDc���[5n[R"5n[R"X [R[R29S9HCnUSSnU(dMUR
S5(aM,URSUSU35 ME [R"[R[R5nURS5 UR5SnU(a-UR
S5(dURSUSU35 SSS5 [U5$![a N�f=f!,(df   N)=f![a N8f=f)N)�family�type�rz127.zhttp://�:)z8.8.8.8r.)
�set�socket�gethostname�getaddrinfo�AF_INET�SOCK_STREAMrb�add�OSError�30SOCK_DGRAM�connect�getsockname�sorted)�port�	addresses�hostnamerS�ip�socks      rC�local_network_addressesr��s$���%�I�
��%�%�'���&�&�x�f�n�n�SY�Se�Se�f�D��a����B��r�"�-�-��/�/��
�
���t�1�T�F�3�4�g�
�
�]�]�6�>�>�6�+<�+<�
=���L�L��)��!�!�#�A�&�B��"�-�-��/�/��
�
���t�1�T�F�3�4�	>��)�����
��
��>�
=��31�
��
�sO�AD:�'D:�?D:�3E�AE32�'E�:33E�E�34 35E�E�E�36E(�'E(c�|�SRS[U555nUSS=(d SR5$)NrVc3�4# �UHoS;aUOSv� M g7f)z[]:*?/\�_NrZr[s  rCr^�"safe_sheet_name.<locals>.<genexpr>�s���N�I�b�j�0�b�c�9�I�s���sheet)�joinrGrM)�name�cleaneds  rC�safe_sheet_namer��s4���g�g�N�C��I�N�N�G��C�R�L�#�G�*�*�,�,rDc
�R�[R"5nURS5=(d 0nURS5=(d 0nURS5=(d 0nURS5=(d 0RS5=(d /nURS5=(d /nURS5=(d 0n[R"USS	9n[R37"0UEUER
5V	V38s/sH:up�U	[U39[[45(a[R"U40S41S9OU42S.PM< sn43n	5RUS44SS
9 U(a<[R45"S[R"US46SS9/05RUS47SS
9 /n[5nUGH7n
U
RSS5nU
RS5=(d /nU(dM9[R48"U5nURSSU5 URU5 [!U
RS5=(d UR#5S=(d S5n[%US35nUnSnUU;a[%USU35nUS-
nUU;aMUR'U5 UnU(a'SUR(;aUUSR+U5nURUS49US
9 GM: U(a$[R,"USS9RUS50SS
9 SHNun	nURU	5=(d /nU(dM)[R51"U5RUS52US
9 MP SSS5 UR/5$s sn53n	f!,(df   UR/5$=f)N�summaryrPrRr1r�	contrastsr4�openpyxl)�engineF�rq)rArB)�index�54sheet_name�analysis_recipe_jsonr-)rq�indent�label�contrast�resultsrro�_allr�r`�	gene_typeT��ignore_index�all_DESeq_results))�go�
GO_enrichment)�kegg�KEGG_enrichment)�io�BytesIOr=�pd�ExcelWriter�	DataFramer9r:r;rLrHrv�to_excelr��insert�appendrG�splitr�r��columns�isin�concat�getvalue)r~�outputr�rPrR�selected_gene_typesr�r4�writerrArB�flat_frames�55used_namesr�r��rows�frameror�r>�suffix�sheet_frames                      rC�export_deseq_workbookr��s(��
�Z�Z�\�F��k�k�)�$�*��G�
�[�[��
"�
(�b�F�
�[�[��
"�
(�b�F�"�J�J�u�-�3��8�8��F�L�"�����K�(�.�B�I����\�*�0�b�J�	����z�	2�f�56���#8�W�"7��"7�"=�"=�"?�
�"?�J�C��z�Z_�bf�hl�am�On�On�d�j�j��U�&K�ty�z�"?�
�	57�58�(�6��9�(�59=���L�L�0�4�:�:�f�SX�ab�3c�2d�e�f�o�o��e��
p�
���"�u�60�!�H��L�L��*�5�E��<�<�	�*�0�b�D����L�L��&�E��L�L��J��.����u�%�����W�-�O�����q�1A�O�Z�P�E�#�u�g�T�N�3�E��D��F��:�%�'�4�&��&��(:�;���!����:�%�
�N�N�5�!��K�"�{�k�6I�6I�'I�)�+�k�*B�*G�*G�H[�*\�]��� � ��u�� �G�'"�*��I�I�k��5�>�>�v�U�_r�>�s�P�J�C���>�>�#�&�,�"�D��t����T�"�+�+�F�%�E�+�R�Q�O613�X�?�?����U
�623�	2�X�?�?���s-�(N	�AN�EN	�B)N	�)N	�N	�	63N&c�r�[U5R5nU(aUR5S:waU$S$)N�nan�Unnamed)rGrM�lowerrds  rC�clean_headerr��s.���u�:����D��D�J�J�L�E�1�4�@�y�@rDc�2^�UR=(d SR5nURR5nU(d[	S5eSnSnUR=(d S/S.nURS5(Ga[R"[R"U55nURUS'URVs0sHowR5U_M nnURSn	SHn64X�;dM65X�n	 O [R"XiS	9nURH]nUR5mTS66;a[R"XgS	9n[U4SjS55(dMI[R"XgS	9nM_ X�S
'OjURS5(aIURS5(aSOSn[R"[R"U5US9nSUS
'O[	S5eURV
s/sHn
[U
5PM sn
UlUb+URV
s/sHn
[U
5PM sn
UlUb+URV
s/sHn
[U
5PM sn
UlX�XE4$s snfs sn
fs sn
fs sn
f)NrVu上传文件为空。z
uploaded file)r��sheets)z.xlsxz.xlsmz.xltxz.xltmz.xlsr�r)�counts�67raw_countsz68raw counts�count�matrix)r�>�meta�design�sample�samples�metadatac3�,># �UH	oT;v� M g7fr8rZ)r\�tokenr�s  �rCr^�&read_uploaded_table.<locals>.<genexpr>69s����q�/p�e�E�>�/p�s�)�70annotation�geneset�gene_setr�r�r4�count_sheet)z.csv�.txt�.tsv)r�r��	�,)�sep�fileu0请上传 .xlsx、.xls、.csv 或 .tsv 文件。)r�r�r��readrJ�endswithr��	ExcelFiler�r��sheet_names�71read_excel�any�read_csvr�r�)�	file_itemr�r�r�r�info�excelr��loweredr��	candidater�r��cr�s              @rC�read_uploaded_tabler�s7����"�"�(�b�/�/�1�H��n�n�!�!�#�G���0�1�1�$(�H�'+�K�(1�(:�(:�(M�o�Y[�\�D����E�F�F����R�Z�Z��0�1���*�*��X��27�2C�2C�D�2C�$�:�:�<��%�2C��D��'�'��*��R�I��#�%�0���S�72���u�=���%�%�D��J�J�L�E��K�K��=�=��@���q�/p�q�q�q� �m�m�E�C��&�*�]��	�	�	�3�	4�	4��'�'�(8�9�9�d�s�����R�Z�Z��0�c�:��$��]���K�L�L�/5�~�~�>�~�!�l�1�o�~�>�F�N���5=�5E�5E�F�5E��L��O�5E�F�����8C�8K�8K�L�8K�1�|�A��8K�L����[�.�.��7E��,?��F��Ls�J�J73�6J�$Jc��/nURHlnX1:XaM74[R"XSS9nUR5R	5[S[
U5S-5:�dM[URU5 Mn U$)N�coerce��errorsrh��?)r�r��75to_numeric�notna�sum�maxrar�)�df�gene_colr��col�valuess     rC�numeric_sample_columnsrsi���G��z�z���?�����r�w�x�8���<�<�>����3�q�#�f�+��*;�#<�<��N�N�3����NrDc���UbUR(agURVs0sHo"R5U_M nnURS5=(d) URS5=(d URS5nURS5=(d) URS5=(d URS5nUbUcg/nUR	5H^upx[X�5R
5n	[X�5R
5n76X�;dMBU77(dMKURX�S.5 M` [UVs1sHo�SiM	 sn5nXkS.$s snfs snf)	Nr��	sample_idr��	conditionro�	treatment)r�r)r��78conditions)	�emptyr�r�r=�iterrowsrGrMr�r�)r��sample_colsrr��79sample_col�
condition_colr�r��rowr�rrs            rC�infer_metadatar's&����8�>�>��#+�#3�#3�4�#3�a�W�W�Y��\�#3�E�4����8�$�V��	�	�+�(>�V�%�)�)�I�BV�J��I�I�k�*�Z�e�i�i��.@�Z�E�I�I�k�DZ�M���]�2��
�D��#�#�%����S�_�%�+�+�-����*�+�1�1�3�	�� �Y�Y��K�K�6�B�C�	&�80�T�:�T�c�[�)�T�:�;�J��3�3��
5��;s�E�E$c��SU;a/$USn[U[5(aUOU/nUVs/sHn[USS5(dMUPM sn$s snf)Nr�r�)r:rL�getattr)�formrSr9�entrys    rC�get_file_itemsr#:sP��
�T���	���<�D��t�T�*�*�D���E�$�I�u�e���z�4�(H�E�u�I�I��Is�A�Ac�Z�UR5nSH7nX!;dM81URU5SR5nU(dM5Us $ U(a>USR5(a&USSnU(aUSR5(aM&URS5=(d U$)N)�__r��-�.r�����z_-. )rMr��isdigit)r�r�r��heads    rC�infer_group_from_sampler+Bs����l�l�n�G�$���>��=�=��%�a�(�.�.�0�D��t���	%�82�g�b�k�)�)�+�+��#�2�,���g�b�k�)�)�+�+��=�=�� �*�F�*rDc�d�[X5nUc0$USVs0sHo3SUS_M
 sn$s snf)Nr�r�r)r)r�r�inferredrs    rC�metadata_group_mapr.NsB���h�4�H����	�7?��7G�H�7G���M�3�{�+�+�7G�H�H��Hs�-c�|�UnX2;aUSU3nSnUnX2;aUSU3nUS-
nX2;aMURU5 U$)Nr%r-r�r`)r�)r��batch�usedrr�r>s      rC�unique_sample_namer2Usb���I����g�R��v�&�	�
�F��D�83�84��f�A�f�X�&�	��!����85�	�H�H�Y���rDc��86�U(d[S5e/n/n/n/n[5nU=(d /n[USS9GHKupx[U5up�p�US-87[	U5:aXS-88O0n
[U
R
S5=(d$ [US5R=(d SU35R5nSU	R;aSOU	RSn[X�5nU(d[USS35e[U89U5n0nUHOn[UX�5nUUU'URUUUUR
U5=(d [U5USS	.5 MQ U	RVs/sHnUU;dMUU:wdMUPM nnU/U-U-nU	UR!5R#US0UES909nURU5 SVs/sHnUUR;dMUPM nn[	U5S:�a$UR"UUR%S55 Ub ['U5nUbUR"U5 URUSUUR
SS
5UVs/sHnUUPM91 snUS.5 GMN [USSR)[9255nUSSH'nU[USR)[9355-nM) U(d[S5eSn/nUH�nUR!5nUSR)[945US'UUSR+U5R%SSS9nUVs/sHnUSUR;dMUSPM nnURVs/sHnUU;dMUS:wdMUPM nnU(aURUS/U-5 US/U-nUcUOUR-USSS9nM� Uc[S5eSn U(ab[.R0"USS9n U R3S[4R65R9SSS9R;5n UR-U SSS9nSn!UV"s/sH)n"1SkR=U"R5(dM'U"PM+ n#n"U#(a#[.R0"U#SS9R%5n!UVs/sHnUSPM95 nnUH:n[.R>"UUSS9RAS5RCSS9UU'M< [EUVs1sHnUS iM96 snS!S"9n$UUUU$U U!U[	U5S#.$s snfs snfs snfs snfs snfs sn"fs snfs snf)$N�'请选择一个或多个数据文件。r`)�startr0r��generu' 没有检测到 raw count 样本列。�r��original_sampler0ror�)r�)r6�	gene_namer��
entrezgene_idr�r�)r�r0r�r��original_samplesu;多个文件之间没有共同 gene,无法合并分析。�first)�keepr��inner��on�howu没有可合并的数据。Tr�rVF)�as_index�left>r6�term_idr97�	term_namerr�r�roc�H�UR5S:gUR54$)Nr&rF)rBs rC�<lambda>�*prepare_uploaded_dataset.<locals>.<lambda>�s��5�;�;�=�\e�Ke�gl�gr�gr�gt�JurD�rA)r�r�sample_meta�groups�gene_annotation�term_annotation�	file_info�common_gene_count)#rJr��	enumeraterrarGr=r�stemrMr�rr.r2r�r+rj�rename�drop_duplicates�standardize_annotation_columns�astyper��merger�r��replace�npr��groupbyr<�issubsetr98�fillnar*r�)%�99file_items�batch_overrides�tables�all_metarrO�used_samplesr�rSr�r��sheet_annotationr�r?r0rr�	group_maprSr��renamedr�annotation_cols�	keep_cols�table�local_annotation_cols�standardized�common_genesr@�annotation_framesr�compactrMrNr��term_framesrLs%                                     rC�prepare_uploaded_datasetrnbs�����B�C�C�!#�F�%'�H�&(�K�&(�I� �U�L�%�+��O� ��1�5���3F�t�3L�0��*�16���S��=Q�1Q�?�1�9�-�WY���H�L�L��)�[�T�$�z�2B�-C�-H�-H�[�e�TY�SZ�O�\�b�b�d��#�v�~�~�5�6�6�>�>�!�;L��,�V�>�����Z� 0�1�1X�Y�Z�Z�&�x��=�	�!#��!�F�(���E�G�$�F�6�N��O�O�%�'-�"�&�]�]�6�2�U�6M�f�6U� ��,��
�"��~�~�100�%���+�%�
�*-��/�
�%�	�101�102�J��0�;�>�	��y�!�&�&�(�/�/��6�8T�V�8T�/�U���
�
�e��0c� |�0c��gj�ns�n{�n{�g{��0c�� |��$�%��)����u�%:�;�K�K�F�S�T��'�9�:J�K�L��'��"�"�<�0���� ��,��#�x�x�
�v�>�9D�E��v�F�6�N��E�$/�
�	103�S6�f�v�a�y��(�/�/��4�5�L��������E�&�M�0�0��5�6�6�����V�W�W�"&�F������104�105����f�
�,�,�S�1��f�
��e�F�m�(�(��6�7�G�G��U\�G�]��08�[���C��M�U�]�]�<Z�}�s�8�}���[�*/�-�-�d�-�3�3�k�;Q�3�VY�]c�Vc�3�-��d���$�$�U�F�8�o�+E�%F�G����;�.�/��"�N�����W��U\��0]����~��6�7�7��O���)�)�$5�D�I��)�1�1�"�b�f�f�=�E�E�f�W\�E�]�c�c�e�����o�&�f��E���O�&1�z�k�U�5a�5j�5j�kp�kx�kx�5y�5�k�K�z���)�)�K�d�C�S�S�U��,4�5�H�S�3�x�=�H�K�5����m�m�F�3�K��A�H�H��K�P�P�WX�P�Y��s����X�6�X�c�S��\�X�6�<u�
v�F��"���*�*�� ��.�	�	��C106��!}��F��"\��d�� {��6��7sZ�1107U�?U�U�U	�)U	�,U�
U�(	U�108U�U�U� &U�109U�U"�U'c��[R"U[S9n[R"U5n[R"U5nUR5(dU$[R"U5SnU[R"X5nX[U5-[R"S[U5S-5-n[RRUSSS25SSS2n[R"USS5X'U$)N��dtyperr`r()
rY�asarrayrK�	ones_like�isfiniter��where�argsortra�arange�minimum�110accumulater*)�pvalues�adjusted�finite�idx�order�rankeds      rC�	bh_adjustr��s����j�j���.�G��|�|�G�$�H�
�[�[��
!�F��:�:�<�<���111�(�(�6�112�1�113�C���114�115�7�<�(�)�E�
�^�c�%�j�
(�2�9�9�Q��E�116�Q��+G�
G�F�
�Z�Z�
"�
"�6�$�B�$�<�
0��2��
6�F��g�g�f�a��+�H�O��OrDc���[R"UVs/sHBn[R"[	[U55[R"S5-5PMD sn[117S9$s snf)Nr-rp)rY�array�math�erfc�absrK�sqrt)�zrBs  rC�normal_two_sided_pr��sE��
�8�8�a�P�a�U�T�Y�Y�s�5��<�0�4�9�9�Q�<�?�@�a�P�X]�^�^��Ps�A	A(c�f�UR[S9nUS:�RSS9nXnURSS:�a^[R118"[R"[R"U5SS95nX4SS2S4-n[R"USS9nOHURSS9nUS:�R5(a[R"XwS:�5OSnXx-n[R"[R"U5US:�-US5n[R"X`RS9$)Nrprr`��axisr-r�r�)�to_numpyrKrc�shaperY�exp�mean�log�medianrr�rurtr��Seriesr�)	r�r��positive_all�usable�	geo_means�ratios�factors�totals�median_totals	         rC�median_ratio_size_factorsr��s���
�_�_�5�_�
)�F��Q�J�#�#��#�+�L�
�
!�F�
�|�|�A��!���F�F�2�7�7�2�6�6�&�>��:�;�	��A�t�G�,�,���)�)�F��+�������#��9?�!��8H�8H�8J�8J�r�y�y���119�!3�4�PS���'���h�h�r�{�{�7�+�w��{�;�W�c�J�G�
�9�9�W�N�N�3�3rDc
�\�X#-nX/U-R5nXQR[5RR5XQ'XUUR	S5RU/SS9nUH8n[R"XVSS9RS5RSS9XV'M: XTn[U5nURUSS	9n	X�n120X�nU121RSS	9nURSS	9n
U	RSS	9n[R"U
S122-US123--5n[R"U	S124-5nUUnUUnURSSS9RS5nURSSS9RS5nSUS--SU
S---[ R""S5S--n[R$"U['[)U5S5-U['[)U5S5--U-5n[R*"[R,"U5US
:�-US1255nUU-n[/U5n[1U5nU	RSSS9U-126[R2"US-S
5-RSS9n[R4"XQR75UR75UR75U
R75UR75UUUUUR75S.1275R9/SQ/SQS9nU	R;SSXQR755 UU	4$)NrVr<)�subsetr=rrrrFr`r�r)r��ddofr-g��&�.>)128r6�baseMean�meanA�meanB�log2FoldChange�lfcSE�stat�pvalue�padj�129dispersion)r�r�r��TTF��	ascendingr6)rjrVrGrM�nerTr�r130r\r*r��divr�rY�log2�varr�r�r�r
rarurtr�r��maximumr�r��sort_valuesr�)r�r�group_a�group_b�selectedrQr�count_matrix�size_factors�131normalized�a�b�mean_a�mean_b�	base_mean�log2_fc�log_norm�log_a�log_b�var_a�var_b�
poisson_floor�ser�r�r�r�r�s                            rC�run_differential_expressionr��s��� �H�132��h�&�133'�134,�135,�136.�C��M�(�(��-�1�1�7�7�9�C�M�137
�(�m���r�"�138#�1393�1403�H�:�G�1413�142T�C����=�=���(�;�B�B�1�E�J�J�QR�J�S�����=�L�,�\�:�L��!�!�,�Q�!�7�J���A���A�
�V�V��V�^�F�
�V�V��V�^�F����Q��'�I��g�g�v��|����5�6�G��w�w�z�C�'�(�H��W��E��W��E��I�I�1�1�I�%�,�,�Q�/�E��I�I�1�1�I�%�,�,�Q�/�E��&�1�*�%��V�a�Z�(8�8�T�X�X�a�[�A�=M�N�M�	�����S��\�1�-�-���C��L�!�8L�0L�L�}�\�	]�B�	���"�+�+�b�/�R�$�Y�/��S�	9�B��R�<�D�
��
%�F��V��D��>�>�q�q�>�1�I�=����I�YZ�N�\`�Aa�a�g�g�no�g�p�J��l�l��M�*�*�,�!�*�*�,��_�_�&��_�_�&�%�.�.�0�����$�-�-�/�	143�
��k�0�<O�k�P�����a����!7�!7�!9�:��J��rDc�J�XR5nUH8n[R"X#SS9RS5R	SS9X#'M: [U5nUR
USS9nURSSUSR[5R55 U$)NrrrrFr`r�r6)rjr�r144r\r*r�r�r�rVrGr�)r�rr�rr�r�s      rC�normalize_all_countsr�0s����&�+�+�-�L����M�M�,�*;�H�M�T�T�UV�W�\�\�cd�\�e����,�\�:�L��!�!�,�Q�!�7�J����a�����!6�!6�s�!;�!D�!D�!F�G��rDc��SVs/sHo3UR;dMUPM nnU(a)US/U-RS5nURUSSS9nSUR;aUSUS'USRS5R	[1455US'[R"USR146R5RS5USUS5US'SUR;aSUS'USRS5R	[1475US'S	US148'[USS5n[USS
5nSURUSU:USU:�-S1494'SURUSU:USU*:-S1504'U$s snf)N�r9r�r:r6rCr?r9rV�display_gener�r�151regulationr1rrrr�r�r)r�rTrWr\rVrGrYrurMr�rK�loc)r�r�rRrrer��	fc_cutoffrs        rC�annotate_de_resultsr�:s���&Q�k�&Q�s�\b�\j�\j�Uj�s�&Q�O�k���V�H��6�7�G�G��O�152��-�-�153�v�6�-�B���'�/�/�)�&�v�����"�;�/�6�6�r�:�A�A�#�F�G�K�� �h�h�w�{�';�'?�'?�'E�'E�'G�'J�'J�2�'N�PW�Xc�Pd�fm�nt�fu�v�G�N���'�/�/�)�!����"�;�/�6�6�r�:�A�A�#�F�G�K�� �G�L���f�U�m�O�4�5�I���u�
�m�4�5�K�ko�G�K�K����;�.�7�;K�3L�y�3X�Y�[g�g�h�lr�G�K�K����;�.�7�;K�3L�PY�z�3Y�Z�\h�h�i��N��!ls154�F155�F156c�&�[R"URS5UR[5S-5n[157R"UVs0sHoDSUS_M
 sn5nURSS9nUR5nURUR5H[nUV	s/sHo�U	U:XdM
U	PM n158n	U159(dM(X:RSS9nX:RUSS9RUSS9Xz'M] U$s snfs sn	f)Nr6rr�r0r`r�r)
rYr��	set_indexrVrKr�r�r�rjr��unique�subr�)r�rKr�160log_matrixr�batches�overall�	correctedr0r��
batch_samples�161batch_means            rC�batch_correct_log_matrixr�Ns
������-�-�f�5�k�B�I�I�%�P�SV�V�W�J��i�i��L���X���G��4��L�M�G��o�o�1�o�%�G����!�I����[�)�0�0�2��.9�V�k�F�V�_�PU�=U��k�
�V����.�3�3��3�;�162�#-�#<�#@�#@��RS�#@�#T�#X�#X�Y`�gh�#X�#i�	� �3����M��Ws�D	�/D�?Dc	�d^^�/nUSRS5=(d /nUH�n	[R"U	S5n163U164R(aM/U165SS:gnU(aiSU166R;aYU167SR[5RR5R5(aX�SRU5-nURU168RU/SQ45 M� U(d//U//S.$[R"US	S1699RS5RS5R[!US
S55nUR(a//U//S.$US0mTR#[%U5V
Vs0sH170up�X�S-_M snn
5 UVs0sHo�SU_M171 snm['UVs/sHnTUST;dMUPM snUU4SjS9n[)XU5nURUSU4nUR+SS9nUR-SS9R/SS5n[1US
S5nUR3USS9R5USS9R7U*U5nUSR[5R95USR[5R95UUVs/sHnTUSPM
 snUVs/sHnTUSPM
 snUR;S5R<R95S.$s snn
fs snfs snfs snfs snf)Nr1rr�r�rr�)r6r�r�)�genes�gene_idsr�rLr�Tr�r�r6r3r)rr`r�roc�F>�TRTUSS5TUSU4$)Nro�cr0)r=)r��172group_rank�meta_maps ��rCrH�%build_multi_heatmap.<locals>.<lambda>�s.���J�N�N�8�F�+;�G�+D�b�I�8�TZ�K[�\c�Kd�fl�mrDrJr�r*r�r0r�)r�r�r�rLr�r�)r=r�r�rr�rVrGrMr�r�r�r�r�r�rTr*rN�updaterQr�r�r��stdrXrKr�r�r*�tolist�roundr)r��contrast_resultsrK�
control_group�	ko_groupsrrR�framesr�r�rr=�topr�rorr��ordered_samplesr��expr�row_mean�row_stdr*r�r�r�s                        @@rC�build_multi_heatmapr�\s����F� ��-�+�+�L�9�?�R��$��
�\�\�(�9�-�
.��
�8�8���<� �D�(���;�"�*�*�#<��K��AW�AW�X[�A\�A`�A`�Af�Af�Ah�Al�Al�An�An��{�O�(�(�)<�=�=�D��
�
�b�f�f�T�#C�C�D�E�%�����r�]_�`�`�	�	�	�&�t�,�	��V�	�	���	 �	
��c�&��#�K�0�1�	2�	��y�y����r�]_�`�`���#�J����I�i�<P�Q�<P�L�E�u�a�i�'�<P�Q�R�.9�:�k�s�H�
�s�"�k�:�H��)�U�k�F�X�f�-=�g�-F�*�-T��k�U�m��O�)��/�R�I��=�=��V��o�5�6�D��y�y�a�y� �H��h�h�A�h��&�&�q�!�,�G���	�"�6�*�+�D�������"�&�&�w�Q�&�7�<�<�d�U�D�I�A��^�$�+�+�C�0�7�7�9���K�&�&�s�+�2�2�4�"�;J�K�?��8�F�#�G�,�?�K�<K�L�O�&�H�V�$�W�-�O�L��'�'�!�*�#�#�*�*�,�
���R��:��U��L��Ls$�L173�$L�?L#�L#�L(174�L-c��XSS:�RU5SR5nU(d/U/S.$URS5RXB4R	[1755n[R"US-5nURSS9nURSS9RSS5nURUSS9RUSS9RSS	5n	UUU	RS1765RR5S.$)Nr�rr6)r�r�r�rr`r�g�g@r�)r*r�r�r�rVrKrYr�r�r�rXr�r�r*r�r)177r�r��selected_samples�limitr)r�r�r�r�r�s178          rC�
build_heatmapr��s���179�+�a�/�0�5�5�e�<�V�D�K�K�M�I���(8�B�G�G�
�
!�
!�&�
)�
-�
-�i�.I�
J�
Q�
Q�RW�
X�F�����#��&�J����A��&�H��n�n�!�n�$�,�,�Q��2�G����x�a��(�,�,�W�1�,�=�B�B�4��M�A��#��'�'�!�*�#�#�*�*�,��rDc���UbUR(agURVs0sHoR5U_M nnURS5=(d) URS5=(d URS5nURS5=(dY URS5=(dA URS5=(d) URS5=(d URS5nURS	5=(dA URS1805=(d) URS5=(d URS5nURS
5=(dA URS5=(d) URS5=(d URS5nUbUcg[R181"XR
[5RR5XR
[5RR5U(a/XR
[5RR5O.XR
[5RR5U(a/XR
[5RR5OSS.5nXwSRS5USRS5-nUR5$s snf)Nr6�gene_id�symbolrD�termr�r��182pathway_idrEr��pathway�descriptionr183�ontology�source�database�184Annotation�r6rDrEr185rV)rr�r�r=r�r�rVrGrMr�rT)rrr�r�term_col�name_col�category_col�outs        rCrUrU�s7����k�/�/��#.�#6�#6�7�#6�a�W�W�Y��\�#6�E�7��y�y�� �O�E�I�I�i�$8�O�E�I�I�h�<O�H��y�y��#�{�u�y�y��'8�{�E�I�I�d�O�{�u�y�y�Y_�O`�{�di�dm�dm�nz�d{�H��y�y��%�n����6�):�n�e�i�i�	�>R�n�V[�V_�V_�`m�Vn�H��9�9�Z�(�q�E�I�I�j�,A�q�U�Y�Y�x�EX�q�\a�\e�\e�fp�\q�L���8�+��186�,�,��)�0�0��5�9�9�?�?�A�"�,�3�3�C�8�<�<�B�B�D�JR��.�5�5�c�:�>�>�D�D�F�Xc�Xm�Xt�Xt�ux�Xy�X}�X}�YD�YD�YF�MY��1�8�8��=�A�A�G�G�I�_k�		187��C��&�k�n�n�R� �3�y�>�#4�#4�R�#8�8�1889�C���� � ��!
8s�K4c���US:dX:�a[S5$[R"US-5[R"US-5-189[R"X-190S-5-191$)Nrz-infr`)rKr��lgamma)�n�ks  rC�192log_chooser�sP���1�u����V�}���;�;�q�1�u�����A��E� 2�2�T�[�[�����5K�K�KrDc	�H^�[X#5n/n[XS-5H:nUR[X&5[X-193X6-1945-[X5-1955 M< U(dg[	U5m[S[196R"T5[U4SjU55-5$)Nr`rc3�V># �UHn[R"UT-1975v� M  g7fr8)r�r�)r\rB�max_logs  �rCr^�hypergeom_sf.<locals>.<genexpr>�s#����+X�SW�%�D�H�H�U�W�_�,E�,E�SW�s�&))�min�ranger�rr
r�r�r)r�198population�	successes�draws�upper�logs�xr199s       @rC�hypergeom_sfr�s�����	�!�E�
�D�
�1�a�i�
 �����J�y�,�z�*�:P�RW�R[�/\�\�_i�jt�_|�|�}�!����$�i�G��s�D�H�H�W�%��+X�SW�+X�(X�X�Y�YrDc��[U5nUcSS/S.$[USR[55n[UUSU:*USR	5U:�-USS:�-SR[55nXDSRU5n[
U5n[
U5n	US:XdU	S:XaS	S200/S.$/n201UR/SQ5nUH|uup�p�[US5n[
U5n[UU-5n[
U5nUS:aMB[UUUU	5nU202RUU
UUUU	US
RUSS5S.5 M~ U203(dS	S/S.$[R"U2045n[USR55US'USUS-US'UR!/SQ/SQS9R#S5nS	S[%U5S.$)NFu|未找到注释表。可在 Excel 中加入 annotation/go/kegg sheet,列名包含 gene、term_id、term_name、category。��	availabler	�termsr6r�r�r�rTu$当前阈值下没有显著基因。�r205rDrEr-�, �)r206rDrE�overlap�	term_size�significant_genesr�r�u-没有达到最小重叠数的富集条目。r�rr�207gene_ratio�r�r�rr�r�r.rV)rUr�rVrGr�r�rarZr�rr�r�r�r�r�r�r�r*�
clean_records)r�rr�rri�universe�sig�annrrr��groupedr208rDrEr��209term_genesrrrr��enricheds                      rC�run_enrichmentr(�s#��2�+�>�L����V��210�	211��7�6�?�)�)�#�.�/�H�212
��
�V�_��
+��'�(�,�,�.�)�;�
=��z�"�Q�&�
(�	213��		��&��+��C��F�+�0�0��:�214;�C��X��J���H�E��Q��%�1�*�!�.T�_a�b�b�!#�D��k�k�>�?�G�18�-�&��I���v��'�215��216�O�	���c�)�*����L���q�5���a��Y��>�����$�"�&��&�%*� ����7�3�B�<�0�	
�	217�29�*�!�.]�hj�k�k��|�|�D�!�H� ��(�!3�!<�!<�!>�?�H�V��%�i�0�8�<O�3P�P�H�\���#�#�$A�M`�#�a�f�f�gi�j�H��"�}�X�7N�O�OrDc��[U5nUcSS/S.$/n[USS5n[USS5n[USS5n[USS	5nUSRS2185=(d /n	UGH�n219[R220"U221S5nUR(aM0[USR[55nX3SRU5n
[U5nUS
:XaMzSGHvunnUS
:�aUUSU:*USU:�-nOUUSU:*USU*:*-nU	(ajSUR;aZUSR[5RR5R5(aUUSRU	5n[USR[55n[U5nUS
:XaM�U
R/SQ5H�uunnnn[US5n[U5n[!UU-5n[U5nUU:aMD[#UUUU5nUR%U222SUUUUUUUUSR'USS5S.2235 M� GMy GM� U(dSS///S.$[R224"U5n[)USR+55US'USUS-US'UR-/SQ/SQS 9R/US!-5nUS"R[5RR15RR3S#5nUU)R/U5nUUR/U5n SS$[5U5[5U5[5U 5S.$)%NFu�未找到 GO/KEGG 注释表。可在 Excel 中加入 annotation/go/kegg sheet,列名包含 gene、term_id、term_name、category。rr1rrr4r/r0rr�r6r))rr`)rr(r�r�r�rr�rr)225r��	directionr226rDrErrrr�r�Tu<当前阈值下没有达到最小重叠数的富集条目。)rr	rr�r�r�rrrr r�r�r-r227r�rV)rUrKrNr=r�r�rr�rVrGr�rar�rMr�rZr�rr�r�r�r�r�r*r��containsr!)!r�rrRrir�r�rr/r0r�r�r�r"r$rr*�sign�	sig_framer#rr228rDrEr�r&rrrr�r'�is_keggr�r�s!                                 rC�run_multi_enrichmentr/s���2292�+�>�L����_��230�	231�"$�D��f�U�m�O�4�5�I���u�
�m�4�5�K��f�\�*�=�9�:�K��F�<�(��5�6�I� ��-�+�+�L�9�?�R��$���,�,�x�	�2�3���=�=���w�v��-�-�c�2�3����/�4�4�X�>�?����]�232���?��8�O�I�t��a�x�#��V�_��3��/�0�I�=�?��	�233$��V�_��3��/�0�Y�J�>�@��	�#�{�i�6G�6G�'G�I�Va�Lb�Li�Li�jm�Ln�Lr�Lr�Lx�Lx�Lz�L~�L~�MA�MA�%�i��&<�&A�&A�BU�&V�W�	��i��'�.�.�s�3�4�C���H�E���z��9<���Ei�9j�5�.��7�I�� ��v��/�234��235�O�	� ��c�!1�2����L���{�?��%�a��Y��F�����$,�W�$5�%.�$,�#*�%.�#$�%.�-2�"(�!%���7�3�B�<�!8��
�:k�# 9�%�b�!�.l�wy�BD�NP�Q�	Q��|�|�D�!�H� ��(�!3�!<�!<�!>�?�H�V��%�i�0�8�<O�3P�P�H�\���#�#�$A�M`�#�a�f�f�gp�st�gt�u�H��z�"�)�)�#�.�2�2�8�8�:�>�>�G�G��O�G�	�7�(�	�	 �	 ��	+�B��G��!�!�)�,�D����x�(��B���d�#��rDc���UbURU5nUR[R[R*/[R5nUR[R"U5S5RSS9nUHXn[UR55H8upV[U[R5(dM&UR5XE'M: MZ U$)N�records��orient)r*rXrY�infr�rur��notnull�to_dictrLr9r:�genericrS)rr��cleanr1rrArBs       rCr!r![s�����
�W�W�U�^���J�J��������(�"�&�&�1�E��k�k�"�*�*�U�+�T�2�:�:�)�:�L�G����s�y�y�{�+�J�C��%����,�,� �:�:�<���,���NrDc	���[S-nUR5(d[S5eSVs/sHo�UR;dMUPM n	nS/U-U	-n236X237R	5nUSR[5US'UHLn[R"X�SS9RS5R5R[5X�'MN [R"U5nU/SQnUUUUS	.n
[R"S238S9n[U5nUS-nUS
-nUS-nUS-nUR!USS9 UR!USS9 UR#[$R&"U
SS9SS9 S[
U5[
U5[
U5[
U5[
U5/n[(R*"USSSS9nUR,S:waGUR.=(d UR0=(d SR35n[SUSS35eUR5(d[S5e[$R4"UR7SS95sSSS5 $s snf!,(df   g=f)Nzdeseq_pipeline.Ru,找不到 R 分析脚本 deseq_pipeline.R。r�r6rrr)r�r0ro)r�r�rF�species�rna_seq_deseq_)�prefixz239counts.csvzmetadata.csvzparams.jsonzresult.jsonFr�r�rs)�encoding�RscriptTiX)�capture_outputre�timeoutuR DESeq2 分析失败uR DESeq2 分析失败:i0���u$R DESeq2 分析没有生成结果。)�APP_DIR�existsrJr�rjrVrGr�r240r\r�rNr��tempfile�TemporaryDirectoryr�to_csv�241write_textrHrv�242subprocess�run�243returncode�stderr�stdoutrMrI�	read_text)r�rrKr�r�rRr:�scriptrre�export_cols�
export_counts�meta_dfrP�tmp�tmp_path�counts_path�
metadata_path�params_path�output_path�cmd�procr	s                       rC�run_r_deseq_pipelinerYgsM���)�
)�F��=�=�?�?��G�H�H�&Q�k�&Q�s�\b�\j�\j�Uj�s�&Q�O�k��(�[�(�?�:�K��'�,�,�.�M�)�&�1�8�8��=�M�&�����]�]�=�+=�h�O�V�V�WX�Y�_�_�a�h�h�il�m�
����l�l�;�'�G��2�3�G�&��!��	�F�244�	$�	$�,<�	=����9����-�� �>�1�
���.����.�����[���6����}�E��2����t�z�z�&�u�E�PW��X��#�f�+�s�;�'7��]�9K�S�Q\�M]�_b�cn�_o�p���~�~�c�$�T�3�O���?�?�a���{�{�L�d�k�k�L�5L�S�S�U�G��7�����7H�I�J�J��!�!�#�#��C�D�D��z�z�+�/�/��/�A�B�#245>�	=��!l� 246>�	=�s�I�I�
EI$�$247I2c248�X�[U5n[XRS5=(d /5nUSnURS5=(d USn[U[5(d[S5eUVs0sH"ofRS5US;dMUSU_M$ nn[
U5[
US5:wa[S5eUSVs/sHo�UPM	 nnUHRn[URS5=(d S	5R5US'US(aMC[USS24935e [URS5=(d S5R5n	[URS
5=(d S5R5R5n250U251S;a[S5eURS5=(d /n[U[5(d[S5eUVs/sH[n[U5R5(dM#[U5R5U	:wdMB[U5R5PM] nnU(d[S5eUVs/sHofSU	:XdM
USPM n
nU
(d[SU	35eUH3nUVs/sHofSU:XdM
UPM sn(aM'[SU35e [UUSUU	UUU252S9nUSUSS.US'U	UU253USSUSSUSSS.US 'S!UR;ag[US!R5R5Vs/sH.n[U5R5(dM#[U5PM0 sn5US'U$s snfs snfs snfs snfs snfs snf)"Nr^r�rKu样本分组格式不正确。r�ru样本分组信息不完整。rorVu 没有 group。r�r&r:�human>r[�mouseu'Species 只能选择 human 或 mouse。r�uKO 分组格式不正确。u-请至少选择一个 KO / treatment group。u找不到 control group:u!找不到 KO / treatment group:�r�rrKr�r�rRr:rOrP��filesrPr�r1rrr)r�r�r:rr�rrPr�)rTrnr=r:rLrJrarGrMr�rYr�r��dropnar�)r]rPrR�datasetr�rKrr�r�r�r:r�ro�control_samplesr~rSs                rC�analyze_payloadrc�s���
�&�
!�F�&�z�:�:�>O�3P�3V�TV�W�G�
�X�
�F��*�*�]�+�E�w�}�/E�K��k�4�(�(��9�:�:�.9�i�k�s�W�W�X�=N�RY�Zg�Rh�=h�"��H�
�s�"�k�H�i�254�8�}��G�M�2�3�3��9�:�:�29�-�2H�I�2H��F�#�2H�K�I����3�7�7�7�+�1�r�2�8�8�:��G���7�|�|���H�
��.>�?�@�@��255��256�257�?�3�@�y�A�G�G�I�M��&�*�*�Y�'�2�7�3�9�9�;�A�A�C�G��(�(��B�C�C��258�259�;�'�-�2�I��i��&�&��6�7�7�1:�y���c�%�j�>N�>N�>P�#�UX�Y^�U_�Ue�Ue�Ug�kx�Ux�#��U��!�!�#��I�y���H�I�I�0;�]���7�|�}�?\�}�s�8�}��O�]���5�m�_�E�F�F���*�D�{��'�l�e�.C��{�D�D��@���H�I�I��#���M�*��#�����G���%�$�%8�9��G�F�O�260'����U�m�L�1��E�]�?�3��e�}�]�3�
�G�H���f�n�n�$� &�f�[�>Q�>X�>X�>Z�>a�>a�>c�'y�>c�d�gj�ko�gp�gv�gv�gx�	��D�	�>c�'y� z�����N��ej��J��z��^��E��2(zsH�5N�261N�
N�4"N�N�9N�.N�>	N�'N"�7N"�
"N'�3N'c��U=(d 0n[XRS5=(d /5nUSnS/nSH%nXSR;dMURU5 M' UR	USSS5 X4RS5R
[R[R*/[R5R[R"X4RS55S5n/nSUR;ad[USR5R5Vs/sH.n[!U5R#5(dM#[!U5PM0 sn5nS	US262USS.[%UR5SUSUS
USUSUR;SUR;USSL[&UR)SS9S.
$s snf)Nr^r�r6)r9r�r��r�TrOrPr^rKrLr9rNr1r2)
r�r�r�rrrKrLr�
has_gene_name�
has_gene_type�has_annotationrR�preview)rnr=r�r��extendr*rXrYr4r�rur�r5r�r`r�rGrMrLr6r6)	r]rPrar��preview_colsrrjrrSs	         rC�inspect_payloadrm�s���
�\�r�F�&�z�:�:�>O�3P�3V�TV�W�G�
�X�
�F��8�L�)���.�.� �����$�*�����
�.�r��2�3��"�'�'��*�2�2�B�F�F�R�V�V�G�3D�b�f�f�M�S�S�TV�T^�T^�_e�_s�_x�_x�yz�_{�T|�C�D�G��J��f�n�n�$��6�+�3F�3M�3M�3O�3V�3V�3X�n�3X�4�\_�`d�\e�\k�\k�\m�Y�S��Y�3X�n�o�263���[�)�!(�)<�!=�264�����'���}�-��}�-��(�#� �$����6�$����6�!�"3�4�D�@� ��?�?�)�?�4�!���os�8"G�Gc�~�[R"S5n[SS5Vs/sH nS[U5R	S53PM" nn/SQn/n[U5GH5upVUR
SS5nS	nS	n	US265:aURSS5nO"S266Us=::aS
:aO OURSS5nSUs=::aS:aO OURSS5n	O"SUs=::aS:aO OURSS5n	/SQn267XwU-Xy-XwU-Xy-/n[X�5VV
s/sH1up�[S[URX�-X�-S-555PM3 nnn
US-S:waSOSnURUSUS-3US.[[X>55E5 GM8 [R"U5n/nSSS USS4SS!S"US#S$4SS%S&US'S4S(S)S*USS+US,S--4S(S.S/US0S1US2S3-4S(S4S5US1S64/nUH'unnnnUHnURUUUUS7.5 M M) U[R"U54$s snfs sn
nf)8N�r`i��Gener�)�268B1_control�B1_KO1�B1_KO2�269B2_control�B2_KO1�B2_KO2ri@r�*g������@g@�Rg270ףp=271�?r	�F�vg������@gffffff@�g{�G�z�?g���Q��?)rrr��z�G��?r|r|r�	r
�lncRNA�GN)r6r9r��GOz272GO:0006955zimmune responsez273GO:0008283zcell proliferation�#�z274GO:0006915zapoptotic processr.�KEGG�hsa04630zJAK-STAT signaling pathway�7i,iT�hsa04110z275Cell cycler�xihi��hsa04010zMAPK signaling pathway��r�)�random�Randomr
rG�zfillrQ�randint�uniform�zipr
rN�gaussr�r;r�r�)�rng�ir�r�r�r�r6r>�ko1_fold�ko2_fold�batch_shift�meansr��shiftr�r�r�	term_defsr276rDr��	gene_lists                      rC�make_demo_datar��s���277�-�-��278�C�/4�Q��}�=�}�!�t�C��F�L�L��O�$�
%�}�E�=�R�G�
�D� ��'����{�{�2�t�$�������2�:��{�{�3��,�H�
�5�
�2�
��{�{�4��-�H�
������{�{�3��,�H�
�E�
�C�
��{�{�4��.�H�7���h�����h��PT�P_�`��_b�ch�_v�w�_v�P[�PT�#�a��S�Y�Y�t�|�T�\�D�5H�I�J�K�_v��w�(-��	�Q��$�H�	�����!�%�!�)��-�&�
��s�7�+�,�	
�	279�#(�2�\�\�$�
�F��E�	
�|�.��c�r�280�;�	
�|�1�5��C�=�A�	
�|�0�%��3�-�@�	��9�5��"�:��c�RU��;V�W�	��\�5��C�=�5��S�>�+I�J�	��5�u�S��~�F�
�I�/8�*��'�4���D��L�L�$�7��[c�d�e��/8��2�<�<��&�&�&��U
>��$xs�'H4�8H9c�j�[5up[05nSSSSSS.SSSSSS.SS	SS	SS.S281SSSSS.S
SSSSS.SS	SS	SS./nUVs/sHoDSPM	 nnSnSS	/n[UUUUUUSS9nSSUSSS.SSUSSS./[[	U55S.US'UUSUSSUSSS.US'U$s snf)Nrqr&�batch1zdemo_batch1.xlsxr7rrr'rsr(rt�batch2zdemo_batch2.xlsxrurvr�r[r]rh)r�r0r�r^r�r1rr)r�r�r:r�rrP)r�rTrYrNra)	r��_annotationsrRrKrrr�r�r~s	         rC�demo_payloadr�$sP��)�+��F�
�"�
�F��I��[d�oA�	B����SX�bt�u����SX�bt�u��I��[d�oA�	B����SX�bt�u����SX�bt�u�
�K�-8�8�K�S�x�=�K�K�8��M����I�"����#�����G�,�h�;�WY�XY�?�[�+�h�;�WX�WY�?�[�282�!��V��-��G�F�O�'����E�]�?�3��e�}�]�3��G�H���N��59s�B0c�P^�\rSrSrSU4SjjrSSjrS	U4SjjrS	SjrSrU=r	$)283�284AppHandleriLc�D>�[TU]"US[[50UD6 g)N�	directory)�super�__init__rGrA)�self�args�kwargs�	__class__s   �rCr��AppHandler.__init__Ms���
���$�A�#�g�,�A�&�ArDc��[X-5 gr8)�print)r��formatr�s   rC�log_message�AppHandler.log_messagePs��
�f�m�rDc��>�URS:Xa[U[55 gURS:XaSUl[TU]5 g![a n[	U[U5S5 SnAgSnAff=f)Nz	/api/demoi��/z/index.html)�pathr�r��	Exceptionr�rGr��do_GET)r��excr�s  �rCr��AppHandler.do_GETSsj����9�9��#�
4��d�L�N�3�
��9�9���%�D�I�
������
4��t�S��X�s�3�3���
4�s�A�285A8�A3�3A8c�(�URS:Xa�[URRSS55n[R286"URRU5RS5=(d S5n[U5n[UUSS5 gURS	;a[US287S5 g[R"URRSS
55upVUS:wa
[US5 g[!USS5US'[R""URURSS0S9n[%U5nU(d
[US5 g[R288"UR'S5=(d S5n	URS:Xa[)X�5nO[+X�5n[-X5 g![a n[U[U5S5 SnAgSnAff=f![a n[U[U5S5 SnAgSnAff=f)Nz/api/export_deseqzcontent-length�0rsz{}zDESeq2_all_results.xlsxzAapplication/vnd.openxmlformats-officedocument.spreadsheetml.sheet�>�/api/analyze�/api/inspectzUnknown endpoint.i�zcontent-typerVzmultipart/form-datau请使用表单上传文件。�boundary�REQUEST_METHOD�POST)�fp�headers�environr4rPr�)r�rNr�r=rHrI�rfiler��decoder�r�r�r�rG�cgi�parse_header�bytes�FieldStorager#r�rmrcr�)289r��lengthr~�workbookr��ctype�pdictr!r]rPs290          rC�do_POST�AppHandler.do_POST^s����9�9�+�+�
4��T�\�\�-�-�.>��D�E���*�*�T�Z�Z�_�_�V�%<�%C�%C�G�%L�%T�PT�U��0��9�����-�W�	�
��9�9�<�<��4�!4�c�:���'�'����(8�(8���(L�M����)�)��4�!A�B��!�%�291�"3�W�=��j�����4�:�:�t�|�|�N^�`f�Mg�h��#�D�)�292���4�!J�K��	0��Z�Z��
�
�h� 7� ?�4�@�F��y�y�N�*�)�*�=��)�*�=���$�(��/�
4��t�S��X�s�3�3���
4��0�	0��4��S��3�/�/��	0�s1�BF:�A G'�:293G$�G�G$�'294H�1H�H)r�)r�rr�r�return�None)r�rGr�rr�r��r�r�)295�__name__�296__module__�__qualname__�__firstlineno__r�r�r�r��__static_attributes__�
__classcell__)r�s@rCr�r�Ls���B��	�%0�%0rDr�c��[XS-5Hdn[R"[R[R5nUR	SU45S:wa
UsSSS5 s $SSS5 Mf U$!,(df   My=f)Nr�	127.0.0.1r)r
r�r�r��297connect_ex)�	preferredr�r�s   rC�choose_portr��sl���i�R��0��
�]�]�6�>�>�6�+=�+=�
>�$�����T�2�3�q�8��?�
>�8�?�
>�1���?�
>�s�A9�9298B	c299�t�[R"5nURS[RRSS5S9 URS[[
[RRSS55S9 UR5n[UR5n[URU4[5nURS	;a/[S300U35 [U5Hn[SU35 M O)[SURS
U35 [SU-5 UR5 g)Nz--host�HOSTr�)�defaultz--port�PORT�8787)r�r�>�::�0.0.0.0z4RNA-seq web app running locally at http://127.0.0.1:zLAN access: z"RNA-seq web app running at http://r�zBFor LAN access, start with: HOST=0.0.0.0 PORT=%s python3 server.py)�argparse�ArgumentParser�add_argument�osr�r=rN�301parse_argsr�r�r�hostr�r�r��
serve_forever)�parserr�r��server�addresss     rC�mainr��s���
�
$�
$�
&�F�302����"�*�*�.�.���*M��N�303����s�C��304�305���v�v�8V�4W��X�����D��t�y�y�!�D�
 �$�)�)�T�!2�J�
?�F��y�y�%�%�
�D�T�F�K�L�.�t�4�G��L��	�*�+�5�	�2�4�9�9�+�Q�t�f�E�F�
�R�UY�Y�Z�306���rD�__main__)r>r5r?r5r�r5)rPr5r�r5)rBrr��bool)rRr5r�r�)��)r}rr~r5rrNr�r�)r}rr�r�r�rGr�rGrrNr�r�)r�)r}rr	rGrrNr�r�)r�rNr��	list[str])r�rGr�rG)r~r5r�r�)rBrr�rG)r��cgi.FieldStorager�zMtuple[pd.DataFrame, pd.DataFrame | None, pd.DataFrame | None, dict[str, Any]]r8)r�pd.DataFramerz307str | Noner�r�)r��pd.DataFrame | Nonerr�r��dict[str, Any] | None)r!r�r��list[cgi.FieldStorage])r�rGr�rG)r�r�rr�r�zdict[str, str])r�rGr0rGr1zset[str]r�rG)r]r�r^zlist[dict[str, Any]] | Noner�r5)rz�308np.ndarrayr�r�)r�r�r�r�)r�r�r�z	pd.Series)309r�r�rrGr�r�r�r�r��!tuple[pd.DataFrame, pd.DataFrame])r�r�rr�r�r�)r�r�r�r�rRr5r�r�)r�r�rK�list[dict[str, str]]rr�r�r�)r�r�r��list[dict[str, Any]]rKr�r�rGr�r�rr�rRr5r�r5)r)310r�r�r�r�r�r�r�rNr�r5)rr�r�r�)rrNrrNr�rK)311rrNrrNrrNrrNr�rK)312r�r�rr�r�rKrrKr�r5)r�r�rr�rRr5r�r5)rr�r�z313int | Noner�r�)r[)r�r�rr�rKr�r�rGr�r�rRr5r:rGr�r5)r]r�rPr5r�r5)r]r�rPr�r�r5)r�r�)r�r5)r�rNr�rNr�)L�__doc__�314__future__rr�r�rHr�r�r�r�rGrC�warnings�http.serverrr�pathlibr�typingr�filterwarnings�DeprecationWarningr��numpyrY�pandasr��__file__�resolve�parentrAr6�__annotations__r<rTrfrOr�r�r�r�r�r�r�rrrr#r+r.r2rnr�r�r�r�r�r�r�r�r�rUrrr(r/r!rYrcrmr�r�r�r�r�r�rZrDrC�<module>r	st��E�"��	���	�
�
����E�������*A�L^�_�315����x�.�316 �317 �318"�319)�320)����'�(�*.�+/�.2�
��Q���"�I�Y�G����#�I�y�I�f�$-�i�	�R�����+"����8��4n�321A�.��!�
%�!�
�!��!��	!�322
�!�323�
!�D��*-�3245�pA�325(/�V�4�&J�	+�I�326�48�p�&�p�0�p��p�f�_�
4� 6��6��6��6��	6�327'�6�r��(�3��3�*�3�&�3��	3�328�3��
3�
�3��3�l
� !�,L�Z�9P�
�9P�$�9P��9P��	9P�329�9P�xS�*�S�$�S�
�S��	S�l	�&�.C��.C��.C�&�.C��	.C�330�.C�
�
.C��.C��.C�b9�x�B,'�^%�P70�)�70�t��"�z���F�rD