<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def baseline_projection_plot(self, y_true, y_pred, baseline_period, projection_period, model_name, adj_r2, data, input_col, output_col, model, site):
 """ Create baseline and projection plots. Parameters y_true : pd.Series() Actual y values. y_pred : np.ndarray Predicted y values. baseline_period : list(str) Baseline period. projection_period : list(str) Projection periods. model_name : str Optimal model's name. adj_r2 : float Adjusted R2 score of optimal model. data : pd.Dataframe() Data containing real values. input_col : list(str) Predictor column(s). output_col : str Target column. model : func Optimal model. Returns ------- matplotlib.figure Baseline plot """


        # Baseline and projection plots
        fig = plt.figure(Plot_Data.count)
        
        # Number of plots to display
        if projection_period:
            nrows = len(baseline_period) + len(projection_period) / 2
        else:
            nrows = len(baseline_period) / 2
        
        # Plot 1 - Baseline
        base_df = pd.DataFrame()
        base_df['y_true'] = y_true
        base_df['y_pred'] = y_pred
        ax1 = fig.add_subplot(nrows, 1, 1)
        base_df.plot(ax=ax1, figsize=self.figsize,
            title='Baseline Period ({}-{}). \nBest Model: {}. \nBaseline Adj R2: {}. \nSite: {}.'.format(baseline_period[0], baseline_period[1], 
                                                                                                            model_name, adj_r2, site))

        if projection_period:
            # Display projection plots
            num_plot = 2
            for i in range(0, len(projection_period), 2):
                ax = fig.add_subplot(nrows, 1, num_plot)
                period = (slice(projection_period[i], projection_period[i+1]))
                project_df = pd.DataFrame()
                
                try:    
                    project_df['y_true'] = data.loc[period, output_col]
                    project_df['y_pred'] = model.predict(data.loc[period, input_col])

                    # Set all negative values to zero since energy > 0
                    project_df['y_pred'][project_df['y_pred'] < 0] = 0

                    project_df.plot(ax=ax, figsize=self.figsize, title='Projection Period ({}-{})'.format(projection_period[i], 
                                                                                                        projection_period[i+1]))
                    num_plot += 1
                    fig.tight_layout()

                    Plot_Data.count += 1
                    return fig, project_df['y_true'], project_df['y_pred']
                except:
                    raise TypeError("If projecting into the future, please specify project_ind_col that has data available \
                                        in the future time period requested.")
           
        return fig, None, None