Put-call parity is a basic no-arbitrage requirement of any option pricing engine. Why would you consume computation time and get numerical errors in pricing the call AND the put? Alternatively, you could only have some numerical error on the, say, put, and then an internally consistent call price at almost no extra computational cost.
In practice, pricing engines are calculatedcalibrated using liquid options, which are ATM and OTM options, and the corresponding ITM option's (for a given $(T, K)$ pair, if the call is OTM the put is ITM) price is computed using put-call parity.