Figured it out.

From PYODBC, call in the standard ODBC format (duh). The projected procedure name was causing the issue. If using the the above example code, then:
cursor.execute('{CALL exp.MD5NoMatch(?,?,?)}',('exchange', 'cplx','channel'))
(I was previously trying to call with the classname in the file..... exp.DayFiles_MD5NoMatch  

The correct projected SP name is in the management portal:Home->System Explorer->SQL->Procedures

There I could see that the class name is not included in this case, presumably because the SP name is unique in my "exp" schema. (FYI "exp" schema is just an example schema name I used when creating the class, you won't find it in your listings)  Also note that if more than one "." is used in defining the calling procedure name, only the leftmost will be a "." and the others will be replaced by an underscore "_" which is why I was originally trying to call the procedure as schema.classname_spName 

Studio is a windows only based tool. Could bootcamp or vmware / parallels a windows version. Intersystems had sunset new development on Studio and was migrating to an Eclipse based environment using a plugin (Atelier) that would allow you to compile classes and the like, but it may have also been sidelined after the just released 1.3 version for Eclipse Photon. (I am using Atelier on my Mac with Photon)

For what its worth: Cache is a great blend of database and programming language if you stick with it, but they don't make it easy, that's for sure. COS (Cache Object Script) is beyond fast and flexible (perhaps too much so) for achieving things that would take forever in standard RDBS. i.e. Don't give up ;-)