o
    /cI                     @   s$  d dl mZ d dlZd dlmZ d dlmZ d dlZd dlZd dl	Z	d dl
Z
e ZG dd dejZG dd dejZG d	d
 d
ejZG dd dejZG dd dejZde	jdefddZde	jdefddZdedefddZejdeddefddZedkre
jedd d! dS dS )"    )ListN)JSONResponse)Requestc                   @   s.   e Zd ZU eed< eed< eed< eed< dS )ETFintickerisinexchangefilenameN)__name__
__module____qualname__str__annotations__ r   r   +/home/byschii/eodhistoricaldata/./server.pyr      s
   
 r   c                   @   s6   e Zd ZU eed< eed< eed< eed< eed< dS )ETFOutr   r   r   percent
last_priceN)r
   r   r   r   r   floatr   r   r   r   r      s   
 r   c                   @   s2   e Zd ZU ee ed< eed< eed< eed< dS )	GoRequestetfsprefer_recent_data
min_weight
num_layersN)	r
   r   r   r   r   r   boolr   intr   r   r   r   r      
   
 r   c                   @   s2   e Zd ZU ee ed< eed< eed< eed< dS )LayerOutr   riskexpected_returnsharpe_ratioN)r
   r   r   r   r   r   r   r   r   r   r   r   #   r   r   c                   @   s   e Zd ZU ee ed< dS )
GoResponselayersN)r
   r   r   r   r   r   r   r   r   r   r!   )   s   
 r!   etf_inforeturnc                 C   s   t | j| j| j| j| jdS )N)r   r   r   r   r   )r   r   r   r   r   r   )r#   r   r   r   EtfInfo2ETFOut/   s   r%   
risk_layerc                 C   s"   t dd | jD | j| j| jdS )Nc                 S      g | ]}t |qS r   )r%   ).0r#   r   r   r   
<listcomp>:       z&RiskLayer2LayerOut.<locals>.<listcomp>)r   r   r   r    )r   r   r   r   r    )r&   r   r   r   RiskLayer2LayerOut8   s   r+   
go_requestc                    s   dd | j D }dd | j D }t|| tj | j| jd}td t|| j	}|d urOt
|dkrO fdd jD }t||}td	d |D d
S td)Nc                 S   s   g | ]}|j |j|jd qS )r   r   r   r-   r(   etfr   r   r   r)   D   s    zgo_optimize.<locals>.<listcomp>c                 S   s   g | ]}|j qS r   )r	   r.   r   r   r   r)   M   s    )r   r   zoptimizing portfolior   c                    s    i | ]}t | | jd  qS ))r   iloc)r(   r   dfr   r   
<dictcomp>b   s    zgo_optimize.<locals>.<dictcomp>c                 S   r'   r   )r+   )r(   r&   r   r   r   r)   k   r*   )r"   zerror optimizing portfolio)r   post_process_portfoliobuild_dataframeportfolio_optimizerPortfolioOptimizerr   r   printstratify_portfolior   lencolumnscomplete_infor!   	Exception)r,   	etf_datasetf_filenames	optimizerpartial_stratifiedlast_pricesfull_stratifiedr   r2   r   go_optimizeC   s<   	
rE   z	/optimize)response_modelrequestc              
      sr   |   I d H }tdi |}zt|}td| dW S  ty8 } ztddt|idW  Y d }~S d }~ww )N   )status_codecontenti  errorr   )jsonr   rE   r   dictr>   r   )rG   request_bodyr,   go_responseer   r   r   optimizev   s"   rQ   __main__z	127.0.0.1i@  )hostport)typingr   fastapifastapi.responsesr   fastapi.requestsr   pydanticr7   r5   uvicornFastAPIapp	BaseModelr   r   r   r   r!   EtfInfor%   	RiskLayerr+   rE   postrQ   r
   runr   r   r   r   <module>   s,    		3