Devi seguire i termini della licenza (s). 1
1 Onestamente, è tutto.
Per le licenze che citi (BSD, MIT) non c'è nulla nei termini della licenza che dice che devi usare l'intero modulo. Di fatto, entrambe le licenze ti danno il permesso esplicito di fare ciò che stai suggerendo.
MIT
including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software
BSD
Redistribution and use in source and binary forms, with or without modification, are permitted ...
Quindi vai avanti e prendi quelle funzioni da quei moduli che desideri per evitare di creare una dipendenza su un'intera libreria.
Ma ciò che non puoi fare è non riuscire ad attribuire la fonte del codice che hai usato. Entrambe le licenze richiedono di includere una copia della licenza e l'avviso di copyright.
Ciò potrebbe significare che devi inserire un prologo attorno ai moduli che copi e fornire l'attribuzione del copyright. Oppure potrebbe essere necessario modificare i file di licenza per chiamare esplicitamente quali porzioni del codice sono state originate da dove. Dipenderà dal tuo progetto e dalla portata di quanto hai prestato.
Hai anche detto:
The safe way would be to always ask the upstream author what does he want
Ma non è del tutto vero. L'autore upstream ha già espresso esplicitamente le proprie intenzioni attraverso i termini della licenza con cui ha rilasciato il proprio codice. Devi solo contattare l'autore upstream se vuoi fare qualcosa al di fuori dei termini della licenza.