o
    ùdÉ#  ã                   @   s  d dl mZmZmZ d dlmZ d dlmZ ddlm	Z	m
Z
mZ d dlmZ d dlZd dlZd dlZd dlZd dlZd dlmZ d dlZe d¡ d	d
„ Zdd„ Zdd„ Zdd„ Zdd„ Zedd�dd„ ƒZdd„ Z d dlmZ d dl!Z"dd„ Z#d dd„Z$d dd„Z%dS )!é    )ÚrenderÚredirectÚget_object_or_404)Úlogin_required)ÚDataseté   )Ú
SignupFormÚ	LoginFormÚ
SearchForm)ÚBytesIONÚAggc                 C   ó   t j ¡ }t| dd|iƒS )Nz
atlas.htmlÚdatasets©r   ÚobjectsÚallr   ©Úrequestr   © r   ú/home/tommy/Atlas/base/views.pyÚatlas   s   
ÿr   c           
   
   C   sŽ   t j ¡ }g }|D ]3}tt |jd�}|jj}| j dd¡}t	| ||d�\}}|j|j
|j|jt|ƒ|||dœ}	| |	¡ q	t| d|||dœƒS )N)ÚidÚqueryÚ )r   )r   ÚnameÚ
created_byÚdescriptionÚumap_fig_dataÚumap_search_dataÚsearch_formÚ	file_pathúcompare.html)r   Úselected_datasets_infor   )r   r   r   r   r   ÚdataÚpathÚGETÚgetÚplot_searchr   r   r   Ú	plot_umapÚappendr   )
r   r   r"   ÚdatasetÚtemp_datasetr    r   r   r   Údataset_infor   r   r   Úcompare   s,   
ø
ür-   c                 C   s
   t | dƒS )Nzlanding.html)r   )r   r   r   r   ÚlandingA   s   
r.   c                 C   sD   | j dkrt| jƒ}| ¡ r| ¡  tdƒS ntƒ }t| dd|iƒS )NÚPOSTú/login/zsignup.htmlÚform)Úmethodr   r/   Úis_validÚsaver   r   ©r   r1   r   r   r   ÚsignupD   s   

þÿr6   c                 C   s<   | j dkrt| jƒ}| ¡ rtdƒS ntƒ }t| dd|iƒS )Nr/   z/dashboard/z
login.htmlr1   )r2   r	   r/   r3   r   r   r5   r   r   r   ÚloginS   s   

ÿr7   r0   )Ú	login_urlc                 C   r   )Nzdashboard.htmlr   r   r   r   r   r   Ú	dashboard`   s   
ÿr9   c           	      C   sü  t jdd��}| ¡ D ]}| |¡ q|j}W d   ƒ n1 s w   Y  t |¡}| ¡  tjj	|dd� tjj
|dd� |dkrM|jj d¡|jd	< n|d
kr[|jj d¡|jd	< tjj|d	gd ddd� t |jjjd¡}t |jjjd¡}||jj|k |jj|k@  }||jjdk  }tjj|dd� tj |¡ tjj|dddd� ||_|d d …|jjf }tj |ddg¡ tjj|dd� tjj|dd� tjj|ddd� tjj |dd� tj !|¡ tjj"|dd d!� tj#j!|dgdd d"� | $¡  |S )#NF)ÚdeleteéÈ   )Ú	min_genesé   )Ú	min_cellsÚHumanzMT-ÚmtÚMousezmt-T)Úqc_varsÚpercent_topÚlog1pÚinplaceg\�Âõ(\ï?g{®Gáz”?é   g     ˆÃ@)Ú
target_sumgš™™™™™‰?g      à?)Úmin_meanÚmax_meanÚmin_dispÚtotal_countsÚpct_counts_mté
   )Ú	max_valueÚarpack)Ú
svd_solver)Ún_neighborsÚn_pcsg      Ð?)Ú
resolutionÚleidenÚwilcoxon)r2   )ÚcolorÚframeonÚ
return_fig)%ÚtempfileÚNamedTemporaryFileÚchunksÚwriter   ÚscÚread_10x_h5Úvar_names_make_uniqueÚppÚfilter_cellsÚfilter_genesÚ	var_namesÚstrÚ
startswithÚvarÚcalculate_qc_metricsÚnpÚquantileÚobsÚn_genes_by_countsÚvaluesrL   Únormalize_totalrD   Úhighly_variable_genesÚrawÚhighly_variableÚregress_outÚscaleÚtlÚpcaÚ	neighborsrT   ÚumapÚrank_genes_groupsÚplÚclose)	r   Úuploaded_fileÚspecimen_typeÚ	temp_fileÚchunkÚtemp_file_pathÚadataÚ	upper_limÚ	lower_limr   r   r   Úprocess_filej   sB   ü
r‚   c                 C   sV   t  | ¡}t jj|ddgddd�}| ¡  tƒ }|j|dd� t | 	¡ ¡ 
d¡}|S )	Nr   rT   FT)ÚtitlerV   rW   rX   Úpng©Úformatúutf-8)r]   Úreadrx   rv   Útight_layoutr   ÚsavefigÚbase64Ú	b64encodeÚgetvalueÚdecode)r    r   Úumap_figÚbufferr   r   r   r   r(   •   s   
r(   r   c                 C   s¼  t  |¡}| jdkr�t| jƒ}| ¡ r€|jd }z7t ¡ \}}t j	j
||gdd|d� |j ¡  tƒ }|jj|dd� t |j¡ t | ¡ ¡ d¡}||fW S  ty   d	}	t|	d
ƒ�}
|
 ¡ }W d   ƒ n1 slw   Y  t |¡ d¡}||f Y S w ntƒ }|jd  ¡  ¡ }||jd |k jt |j|jd |k jdd�¡ }t ¡ \}}t j	j
||gdd|d� |j ¡  tƒ }|jj|dd� t |j¡ t | ¡ ¡ d¡}||fS )Nr/   r   ÚmagmaF©rV   Ú	color_maprW   Úaxr„   r…   r‡   úmedia/assets/error3.pngÚrbrT   r   ©Úaxis)r]   rˆ   r2   r
   r/   r3   Úcleaned_dataÚpltÚsubplotsrx   rv   Úfigurer‰   r   rŠ   ry   r‹   rŒ   r�   rŽ   ÚKeyErrorÚopenrj   Úvalue_countsÚidxmaxrc   rh   ÚargmaxÚXÚsum)r   r    r   r   r1   Ú_r”   r�   r   Úerror_image_pathÚfÚerror_image_dataÚerror_image_base64Úlargest_clusterÚhighest_expressed_gener   r   r   r'   Ÿ   sD   






ÿúõ6
r'   c                 C   sä  t  |¡}| jdkr�t| jƒ}| ¡ r€|jd }z7t ¡ \}}t j	j
||gdd|d� |j ¡  tƒ }|jj|dd� t |j¡ t | ¡ ¡ d¡}||fW S  ty   d	}	t|	d
ƒ�}
|
 ¡ }W d   ƒ n1 slw   Y  t |¡ d¡}||f Y S w ntƒ }|jd  ¡  ¡ }||jd |k jt |j|jd |k jdd�¡ }t ¡ \}}t j	j
||gdd|d� |j ¡  tƒ }|jj|dd� t |j¡ t | ¡ ¡ d¡}| j dg ¡}t j!j"|d�}t#| d|||dœƒS )Nr/   r   r‘   Fr’   r„   r…   r‡   r•   r–   rT   r   r—   Úselected_datasets)Úpk__inr!   )r1   r   r«   )$r]   rˆ   r2   r
   r/   r3   r™   rš   r›   rx   rv   rœ   r‰   r   rŠ   ry   r‹   rŒ   r�   rŽ   r�   rž   rj   rŸ   r    rc   rh   r¡   r¢   r£   Úsessionr&   r   r   Úfilterr   )r   r    r   r   r1   r¤   r”   r�   r   r¥   r¦   r§   r¨   r©   rª   r«   Úselected_datasets_objectsr   r   r   Úplot_search_2Æ   sP   






ÿúõ6
ýr°   )r   )&Údjango.shortcutsr   r   r   Údjango.contrib.auth.decoratorsr   Údataset.modelsr   Úformsr   r	   r
   Úior   r‹   Úscanpyr]   Únumpyrh   rY   Ú
matplotlibÚmatplotlib.pyplotÚpyplotrš   ÚjsonÚuser   r-   r.   r6   r7   r9   r‚   ÚseabornÚsnsr(   r'   r°   r   r   r   r   Ú<module>   s4    
(
	'

'