Reason behind only using internal knots when defining basis splines In the spline regression tutorials of pymc and bambi they first define the knots using quantiles, but for building the design matrix they don't use the boundary knots and only keep the internal knots. In the pymc tutorial they don't mention it at all, in bambi they don't give a reason either and just write:

We only pass the internal knots to the bs() function.

The reason isn't specified, thats why i was wondering if there are any advantages or disadvantages in only using internal knots.

Presumably because the upper and lower boundaries of the data are easily identified from the data themselves, whereas, in those two examples, the authors are wanting to specify the (internal) knot locations themselves.
In at least the pymc example, where the authors use patsy.bs() to generate the B spline basis, that function has additional arguments lower_bound and upper_bound where you can, if you want specify the the respective bounds of the basis. If these are not supplied then the bounds are found from the data:
https://patsy.readthedocs.io/en/latest/API-reference.html#spline-regression
So, you are attaching meaning to something that seems to be an implementational detail; the boundary knots are used to define the B spline basis, they just aren't specified as knots because these boundary knots can easily be found from the data or be specified separately by the user, But, you might want to set the upper and lower bound, but specify the degrees of freedom for the B spline not the internal knot locations. Hence the implementation affords greater flexibility if the boundary knots are specified sepoarately from the internal knots.
