# Source code for pymc.gp.mean

```#   Copyright 2023 The PyMC Developers
#
#   you may not use this file except in compliance with the License.
#   You may obtain a copy of the License at
#
#
#   Unless required by applicable law or agreed to in writing, software
#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#   See the License for the specific language governing permissions and

import pytensor.tensor as pt

__all__ = ["Zero", "Constant", "Linear"]

class Mean:
R"""
Base class for mean functions
"""

def __call__(self, X):
R"""
Evaluate the mean function.

Parameters
----------
X: The training inputs to the mean function.
"""
raise NotImplementedError

def __mul__(self, other):
return Prod(self, other)

[docs]class Zero(Mean):
R"""
Zero mean function for Gaussian process.

"""

def __call__(self, X):
return pt.alloc(0.0, X.shape)

[docs]class Constant(Mean):
R"""
Constant mean function for Gaussian process.

Parameters
----------
c: variable, array or integer
Constant mean value
"""

[docs]    def __init__(self, c=0):
super().__init__()
self.c = c

def __call__(self, X):
return pt.alloc(1.0, X.shape) * self.c

[docs]class Linear(Mean):
R"""
Linear mean function for Gaussian process.

Parameters
----------
coeffs: variables
Linear coefficients
intercept: variable, array or integer
Intercept for linear function (Defaults to zero)
"""

[docs]    def __init__(self, coeffs, intercept=0):
super().__init__()
self.b = intercept
self.A = coeffs

def __call__(self, X):
return pt.squeeze(pt.dot(X, self.A) + self.b)

def __init__(self, first_mean, second_mean):
super().__init__()
self.m1 = first_mean
self.m2 = second_mean

def __call__(self, X):