are these safe defaults to have, and would they ever be different values? in general, there are a lot of string constant names throughout the code - is there an initial validation you can run to make sure the columns exist by the names you expect to see?
I see you doing these wide/long checks throughout the code and it might make it harder to maintain/improve this code, if, for example, you have to add support for a new type for some peculiar reason (if that is unlikely, then just ignore this comment). Maybe these checks can benefit from the recent enum support in Python?
Do you think would it make the code easier to read if you have SurvData as a base/utility class and WideSurvData and LongSurvData extending it to populate survival_type?
In part inspired by feedback from @julia326 & @armish, making a list of unresolved code questions.
Within [survivalstan/formulas.py]:
timepoint_id = 'id'
self._type = "wide"
Class Survdata(pd.DataFrame)
def len(self):