
    %]i                         d Z ddlmZ ddlmZmZ ddlZddlmZ ddlm	Z	 ddl
mZ ddlmZ  ej                  e      Z G d	 d
e      Zy)zFeature engineering agent    )Session)datetime	timedeltaN)	BaseAgent)MatchRepository)FeatureBuilder)Featurec                   4     e Zd ZdZdef fdZdefdZ xZS )FeatureAgentzAgent for building featuresdbc                 f    t         |   |d       t        |      | _        t	        |      | _        y )Nr   )super__init__r   
match_repor   feature_builder)selfr   	__class__s      /app/app/agents/feature_agent.pyr   zFeatureAgent.__init__   s+    ^,)"--b1    returnc           
         | j                         }d}d}d}	 t        j                         }|t        d      z
  }|t        d      z   }|t        d      z
  }d}	| j                  j                  ||d      }
| j                  j                  ||	d      }t               }g }t        |
      t        |      z   D ]=  }|j                  |v r|j                  |j                         |j                  |       ? t        j                  d	t        |       d
t        |
       dt        |       d       |D ]T  }|dz  }| j                  j!                  t"              j%                  t"        j&                  |j                  k(        j)                         }| j*                  j-                  |      }|rut"        j.                  j0                  j3                         D ]+  }|dv rt5        ||      st7        ||t9        ||             - t        j:                         |_        |dz  }n | j                  j                  |       |dz  }|dz  dk(  s| j                  j?                          t        j                  d| d| d| d       W | j                  j?                          | j@                  jC                  |      }|r(||_"        ||_#        | j                  j?                          | jI                  d       t        j                  d| d| d|        y# tJ        $ r\}tM        |      }t        jO                  d| d       | j                  jQ                          | jI                  d|       Y d}~yd}~ww xY w)zRun feature engineeringr      )daysi  Ni  )	from_dateto_datelimiti  zBuilding features for z matches (upcoming=z, finished=)   )idmatch_idd   z
Processed z features (created=z
, updated=T)successzFeatures done: created=z, processed=zFeature engineering failed: )exc_infoF)r"   error))	start_runr   nowr   r   get_upcomingget_finishedsetlistr   addappendloggerinfolenr   queryr	   filterr    firstr   build_features_for_match	__table__columnskeyshasattrsetattrgetattrutcnowcalculated_atcommitrun_repo	get_by_idrecords_createdrecords_updated
finish_run	Exceptionstrr$   rollback)r   run_id	processedcreatedupdatedr&   upcoming_fromupcoming_tofinished_fromfinished_toupcomingfinishedseenall_matchesmexistingfeatcolrune	error_msgs                        r   rU   zFeatureAgent.run   s&   !	H	,,.C  )"44M	r 22K  )"99MK33'# 4 H
 33'# 4 H 5DK(^d8n4444<""1%	 5 KK0[1A0BBUVYZbVcUddopst|p}o~~  A  B Q	77==1889I9IQTT9QRXXZ++DDQG&0088==?"44$"4-#Hc743EF	  @
 .6__->H*qLGGGKK%qLGs?a'GGNN$KK*YK7J7)S]^e]ffg hi+ !. GGNN--))&1C&-#&-# OODO)KK1'*WI\ZcYdef 	AILL7	{CdLSGGOOEO;	s'   GL 0A L CL 	N'AM>>N)	__name__
__module____qualname____doc__r   r   boolrU   __classcell__)r   s   @r   r   r      s     %27 2
PT Pr   r   )r[   sqlalchemy.ormr   r   r   loggingapp.agents.baser   )app.core.db.repositories.match_repositoryr   app.ml.featuresr   app.core.db.models.featurer	   	getLoggerrX   r-   r    r   r   <module>rf      s=     " (  % E * .			8	$X9 Xr   