Solved the mystery
pCity.setBuildingHappyChange(XXX, 1) works like this:
It makes Building XXX in pCity generate 1 extra Happiness.
So a Christian Temple will now display as 2 Happiness.
However, the weird part is that, even if the Christian Temple is NOT in the city, the extra happiness is still granted.
In other words, if pCity has Christian Temple, it will now has 2 Happiness from Buildings, but if pCity does not have Christian Temple, it will still have 1 Happiness from Buildings.
pCity.setBuildingHealthChange(XXX, 1) works like this:
It makes Building XXX in pCity generate 1 extra Health (in the building tooltip).
But what actually happens is that it generates the same thing as setBuildingHappyChange().
In other words, pCity.setBuildingHealthChange(aqueduct, 2)
will make Aqueducts appear to have 4 Health now, as correctly shown in Building Tooltips.
But the actual effect is that Aqueducts now give 2 Health and 2 Happiness, and similar to setBuildingHappyChange(), this extra 2 Happiness is granted regardless whether the building is present.
pCity with Aqueduct will now have 2 Health and 2 Happiness from Buildings.
pCity without Aqueduct will now have 2 Happiness from Buildings.
This is how you arrive at the 17 Happiness, 2 Health from the above screenshots.
Happiness:
1 from Palace, 7 from Temples, 1 from Collesium, 1 from Monument (Charismatic) regardless whether they are present
1 from Palace, 1 from Collesium present in City
3 from Hospital, 2 from Aqueduct
Health:
2 from Aqueduct present in City.
I conclude both codes are bugged due to SDK.
@The_J Nope, it is not just a display bug
Did some digging here and there, and found
Unofficial Patch for BTS 3.19
Seems to have fixed the error with this patch
Good News is since I am lazy, I decided to leave the 3 wonders alone since the error is not due to python.
Bad News is I assume whoever wants to use them have the SDK bug fixed