Proposition to help for PyTango 9

Hi guys,

I don't know what is the status for PyTango9 but there are few guys@MAXIV who propose to help with the development.
We would like to migrate to Tango 9 in January but 95% of our control system is based on Python.

Cheers,
Vincent


Vincent Hardion
Control System
MAX IV Laboratory
Dear Vincent,

thank you very much for your offer. We are currently planning the porting of PyTango9. We will send you more details next week on when the port can be done and where you can help. Help with testing will be very useful. Do you know if you need the new features of Tango9 (e.g. Pipes) in order to move your control system to Tango9 or if a port of PyTango8 to Tango9 will be sufficient in the first instance?

Kind regards

Andy
Great news!
We can help on both test and development, maybe to make Pogo compatible, to migrate PyTango to github smile
A port of PyTango8 to Tango9 can be a first step so the people will be able to deploy only one version of Tango. The Solaris guys have currently some trouble with that.
But definitively we will use the feature of Tango9 forwarded attributes, pipes, enumeration, …

In waiting for next week is there any materials to read about compilation, code generation, …?

Thanks for your answer we are very impatient to add that in our scrum planning.

Cheers,
Vincent
Vincent Hardion
Control System
MAX IV Laboratory
Hi Vincent,

Thanks for your offering to help.
I have recently pushed a branch in github (called tango9') which compiles with Tango C++ 9.
It doesn't implement any of the new Tango 9 features but it should work (I tested with a Lima device server).

The major items that need attention are:
  • Pipe API
  • Pipe config API
  • enum data type
  • new device interface event
  • forward attributes
  • dynamic commands (server)
  • Set of small API changes (added methods to DeviceProxy, enum members added, structure members added, etc)

The first three items need discussion before implementation.
I propose to create an issue (of type question) in github to make proposals for these three critical items and start discussion.

In the mean time if you can test the tango9 branch already it would be of great help.

Thanks again
Hi Tiago,

good work. I compiled PyTango 9.1.0 on Ubuntu 15.10 without problems. I got a number of warnings mostly like this:

/usr/local/include/tango/zmq.hpp:185:17: warning: unused variable ‘rc’ [-Wunused-variable]
             int rc = zmq_term (ptr);

and


src/boost/cpp/server/device_impl.cpp:1514:56: warning: ‘template<class> class std::auto_ptr’ is deprecated [-Wdeprecated-declarations]
     implicitly_convertible<auto_ptr<Device_4ImplWrap>, auto_ptr<Tango::Device_4Impl> >();

and

Compiling tango_util.cpp… In file included from /usr/include/python2.7/numpy/ndarraytypes.h:1761:0,
                 from /usr/include/python2.7/numpy/ndarrayobject.h:17,
                 from /usr/include/python2.7/numpy/arrayobject.h:4,
                 from src/boost/cpp/tango_numpy.h:25,
                 from src/boost/cpp/from_py.h:24,
                 from src/boost/cpp/pytgutils.h:19,
                 from src/boost/cpp/server/tango_util.cpp:14:
/usr/include/python2.7/numpy/npy_1_7_deprecated_api.h:15:2: warning: #warning "Using deprecated NumPy API, disable it by " "#defining NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION" [-Wcpp]
 #warning "Using deprecated NumPy API, disable it by " \


I don't know if they are serious or not. Just thought I would let you know.

How can I test PyTango9 without breaking my current PyTango8 installation ?

Andy
First warning comes from ZMQ. Normally PyTango (and other C++ tango clients or servers) should not have access to zmq or orb definitions. This is normally due to the fact that the tango library is including zmq header in tango.h (directly or indirectly). I will talk to Emmanuel Taurel to see if it can be cleaned (BTW, this is one of the reasons why compilation takes soo long smile.

Second warning is because boost is not prepared for C++ 11 and I still need to use the old auto_ptr.

Third warning comes because numpy changed its API in version 1.7. Carlos Falcon already sent a patch some time ago and I need to apply it.

Neither of the warnings are in any worrying.

If you need to have both installations I suggest you use virtualenv.

Tiago
Hi Tiago,

I noticed that PyTango9 does not print the usual message on the stdout when the device server starts up. It is completely silent. The message is useful to know when the server has finished initialising and is ready. Could you add following message to the startup:

Ready to accept request

Thanks

Andy
Hi all,

I built and installed Tango+PyTango 9 today, so I wrote a report of the different issues and warnings I ran into: PyTango 9 installation report.

It covers the following points:
- Tango build warnings
- Error while loading libzmq library
- PyTango build warnings
- IPython warnings
- Database hostname issue

Also:
Andy
I noticed that PyTango9 does not print the usual message on the stdout when the device server starts up.
Funny, I do get the usual message on my setup…

Vincent

Edited 8 years ago
Hi Vincent,

Thanks for trying PyTango and for the complete report.

I did not understand your database test: in tango 8 you tested with short host name but in tango 9 you test with the full host name. Does tango 8 work with full host name? Does tango 9 work with short host name?

Usually, the ready to accept request message is not in the core library (PyTango/C++). Instead it is coming from the code generated by Pogo. However, if you use the PyTango high level API, the server_init and server_run methods are hidden behind the server.run method. In this case PyTango generates the ready to accept request message since it is not possible in the user code.

Tiago
Hi Tiago,

TCoutinho
I did not understand your database test: in tango 8 you tested with short host name but in tango 9 you test with the full host name. Does tango 8 work with full host name? Does tango 9 work with short host name?
Both versions fail with to initialize the Database object with the long host name, and both of them succeed with the short one. The problem has to do with the hostname used when no argument is given to the Database client object. Using Tango 8 I get:
>>> PyTango.Database()
Database(vinmic-t440p, 10000)
and using Tango 9:
>>> PyTango.Database()
Database(vinmic-t440p.maxiv.lu.se, 10000)
But the ITango code gets the hostname using:
db = PyTango.Database()
_DFT_TANGO_HOST = "%s:%s" % (db.get_db_host(), db.get_db_port())
And then use it in __get_db:
db = PyTango.Database(*host_port.split(":"))
Which fails and triggers the following error:
Could not access any Database. Make sure:
    - .tangorc, /etc/tangorc or TANGO_HOST environment is defined.
    - the Database DS is running

TCoutinho
Usually, the ready to accept request message is not in the core library (PyTango/C++). Instead it is coming from the code generated by Pogo. However, if you use the PyTango high level API, the server_init and server_run methods are hidden behind the server.run method. In this case PyTango generates the ready to accept request message since it is not possible in the user code.
I used the high level API so that makes sense!

Vincent
Edited 8 years ago
 
Register or login to create to post a reply.