def __init__(self,<EOL>num_timesteps,<EOL>num_seasons,<EOL>drift_scale,<EOL>initial_state_prior,<EOL>observation_noise_scale=<NUM_LIT>,  <EOL>num_steps_per_season=<NUM_LIT:1>,<EOL>initial_step=<NUM_LIT:0>,<EOL>validate_args=False,<EOL>allow_nan_stats=True,<EOL>name=None):  
with tf.compat.v1.name_scope(<EOL>name, '<STR_LIT>',<EOL>values=[drift_scale, observation_noise_scale]) as name:<EOL><INDENT>dtype = initial_state_prior.dtype<EOL>drift_scale = tf.convert_to_tensor(<EOL>value=drift_scale, name='<STR_LIT>', dtype=dtype)<EOL>observation_noise_scale = tf.convert_to_tensor(<EOL>value=observation_noise_scale,<EOL>name='<STR_LIT>',<EOL>dtype=dtype)<EOL>num_steps_per_season = np.squeeze(np.asarray(num_steps_per_season))<EOL>if num_steps_per_season.ndim == <NUM_LIT:0>:  <EOL><INDENT>num_steps_per_season = np.tile(num_steps_per_season, num_seasons)<EOL><DEDENT>elif ((num_steps_per_season.ndim <= <NUM_LIT:2>)  <EOL>and (num_steps_per_season.shape[-<NUM_LIT:1>] != num_seasons)):<EOL><INDENT>raise ValueError('<STR_LIT>'<EOL>'<STR_LIT>'<EOL>'<STR_LIT>'.format(<EOL>num_seasons, num_steps_per_season.shape))<EOL><DEDENT>is_last_day_of_season = build_is_last_day_of_season(num_steps_per_season)<EOL>[<EOL>effects_to_residuals,<EOL>residuals_to_effects<EOL>] = build_effects_to_residuals_matrix(num_seasons, dtype=dtype)<EOL>seasonal_transition_matrix = build_seasonal_transition_matrix(<EOL>num_seasons=num_seasons,<EOL>is_last_day_of_season=is_last_day_of_season,<EOL>dtype=dtype,<EOL>basis_change_matrix=effects_to_residuals,<EOL>basis_change_matrix_inv=residuals_to_effects)<EOL>seasonal_transition_noise = build_constrained_seasonal_transition_noise(<EOL>drift_scale, num_seasons, is_last_day_of_season)<EOL>observation_matrix = tf.concat(<EOL>[tf.ones([<NUM_LIT:1>, <NUM_LIT:1>], dtype=dtype),<EOL>tf.zeros([<NUM_LIT:1>, num_seasons-<NUM_LIT:1>], dtype=dtype)], axis=-<NUM_LIT:1>)<EOL>observation_matrix = tf.matmul(observation_matrix, residuals_to_effects)<EOL>self._drift_scale = drift_scale<EOL>self._observation_noise_scale = observation_noise_scale<EOL>self._num_seasons = num_seasons<EOL>self._num_steps_per_season = num_steps_per_season<EOL>super(ConstrainedSeasonalStateSpaceModel, self).__init__(<EOL>num_timesteps=num_timesteps,<EOL>transition_matrix=seasonal_transition_matrix,<EOL>transition_noise=seasonal_transition_noise,<EOL>observation_matrix=observation_matrix,<EOL>observation_noise=tfd.MultivariateNormalDiag(<EOL>scale_diag=observation_noise_scale[..., tf.newaxis]),<EOL>initial_state_prior=initial_state_prior,<EOL>initial_step=initial_step,<EOL>allow_nan_stats=allow_nan_stats,<EOL>validate_args=validate_args,<EOL>name=name)<EOL><DEDENT>
Build a seasonal effect state space model with a zero-sum constraint.

        {seasonal_init_args}