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{Gz?   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rt| 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rt| 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    
(
	'

'