[Ifeffit] Larch as python library
Matt Newville
newville at cars.uchicago.edu
Tue Nov 1 16:00:32 CDT 2016
Hi Sean,
On Tue, Nov 1, 2016 at 1:39 PM, Sean Fackler <swfackler at lbl.gov> wrote:
> Dear Matt,
>
> I’ve been working to implement Larch functions as a Python library. During
> the implementation I found a number of things I needed to do including:
>
>
You can use Larch functions from Python, of course. Normally, you'd do
something like
import larch
from larch_plugins.xafs import pre_edge, mback
> 1. Identifiying a functions’ python callable name, i.e. _group as a python
> callable function instead of group as the larch function.
>
I'm not sure I understand. You shouldn't need "a function's python
callable name", you should just need the function. Maybe I misunderstand.
If you need a larch Group, you should be able to do
import larch
agroup = larch.Group(name='mygroupname', xdata = range(100),
label='hello')
>
> 2. The need to pass '_larch = mylarch’ in the said function or I get the
> 'AttributeError: 'NoneType' object has no attribute ‘symtable’ ‘
>
>
Yes, many of the larch plugin functions either require or are much happier
with an instance of a larch session passed in as the '_larch' argument.
It's kind of a feature ;).
> 3. The need to run the script through the Python console as oppose to
> running as a script.
>
>
I'm not sure I understand what this means. You should be able to run a
python program from any environment.
> You can see my sample script with data attached. Keep in mind I am a
> Python novice. So for point 3 in particular *I don’t understand the
> difference between running some selected code in the Python console and
> running the whole script in the shell *(I am using PyCharm CE). I checked
> my Python interpreter with sys.executable (path) and sys.version_info
> (version) which are the same between the console and interpreter which were
> initial issues I found online. Is the interpreter somehow not seeing the
> xraylarch library?
>
Hmm, that doesn't make a lot of sense to me either. What errors do you get
when you run your script?
I don't use PyCharm, so maybe that's not seeing all of the modules from
anaconda? Is PyCharm seeing your anaconda distribution?
A few comments on your script:
a) there should be no need to do a os.chdir() to any folder, especially
not to source code folders.
b) doing from xxx import * is bound to lead to confusion. Import
what you need, and don't import what you don't need.
Finally: 1. Is there an easier way to use the larch functions as a python
> library?
>
Is the above suggestion better?
> 2. Is a larch group basically a python dictionary?
>
Actually, it's basically an empty class:
class Group:
def __init__(self, **kws):
....
mygroup = Group()
mygroup.x = 1
mygroup.y = 'a string'
even in more detail, it's an empty class. In most cases it would probably
be OK to substitute almost any class instance as a Group.
In Larch, I tend to make as many things as possible "group-like" so that
accessing elements is easy.
> If so, this could be made clearer in the documentation. I am interested to
> contribute to the documentation if that’s of interest/help.
>
>
Sure! The docs are definitely in need of some serious work.
> I am running MacOS Sierra 10.12.1 on a mid-2015 15" MacBook Pro with
> Python 2.7.
>
> Ron and Alpha: Maybe you have some ideas to the above points?
>
> Thanks everyone for any help.
>
> Sean
>
>
The attached modified version of your script works for me from a Terminal
(The fit's not very good, yet, but it did run). On Mac OSX with anaconda,
you probably have to run this as "pythonw import_fit.py" (note: pythonw,
not python).
Hope that helps,
--Matt
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://millenia.cars.aps.anl.gov/pipermail/ifeffit/attachments/20161101/107d9f68/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: import_fitMN.py
Type: text/x-python
Size: 2468 bytes
Desc: not available
URL: <http://millenia.cars.aps.anl.gov/pipermail/ifeffit/attachments/20161101/107d9f68/attachment.py>
More information about the Ifeffit
mailing list