Using Python: create a private key of my choosing, then generate public key and address
For this very reduced case, you can take a look at https://github.com/circulosmeos/bitcoin-in-tiny-pieces

It has each operation coded for ease of understanding, isolated in a different file, but they're easy to join or to use directly from command line: for example:

$ echo 0x01 | ./bitcoin-public-from-private.py | ./bitcoin-address-from-public-key.py

And for the question:


  For instance could there be an arbitrary or infinite number of pub keys from the private key?


In principle, from a private key only one public key is derived: but this can be coded in three different Bitcoin addresses. Normally only one or two of these formats are used. 

This is in the most simple case, not considering more complex cases introduced later in Bitcoin (like HD keys, etc)...