Re: [C++-sig] Cant Link Boost python example / Re: Cplusplus-sig Digest, Vol 118, Issue 1

2019-05-19 Thread Lewis Evans
Afternoon,

We built boost 1.70.0 with python 3.7 just two days ago, and we also
encountered the error about pyconfig.h.

We resolved it with this env-var export of CPLUS_INCLUDE_PATH:
export
CPLUS_INCLUDE_PATH="$CPLUS_INCLUDE_PATH:/usr/local/miniconda/envs/python3/include/python3.7m/"

(you will need to change the path to the location of your local install of
python-anaconda)



Bayforest Technologies Limited
16 Berkeley Street
London, W1J 8DZ
work1:  +44 203 907 3883  (dial-in for UK)
work2:   +1 347 746 0976(dial-in for US)
email: [email protected]
web:https://bayforest.ai/


On Fri, May 17, 2019 at 2:18 PM  wrote:

> Send Cplusplus-sig mailing list submissions to
> [email protected]
>
> To subscribe or unsubscribe via the World Wide Web, visit
> https://mail.python.org/mailman/listinfo/cplusplus-sig
> or, via email, send a message with subject or body 'help' to
> [email protected]
>
> You can reach the person managing the list at
> [email protected]
>
> When replying, please edit your Subject line so it is more specific
> than "Re: Contents of Cplusplus-sig digest..."
>
>
> Today's Topics:
>
>1. Python support in boost::python (what version)
>   (Jones, Torrin A (US))
>2. Re: Python support in boost::python (what version) (stefan)
>3. Cant link Boost Python Examples (Jimmy Rizos)
>
>
> --
>
> Message: 1
> Date: Thu, 16 May 2019 19:43:30 +
> From: "Jones, Torrin A (US)" 
> To: 'Development of Python/C++ integration' 
> Subject: [C++-sig] Python support in boost::python (what version)
> Message-ID: <[email protected]>
> Content-Type: text/plain; charset="us-ascii"
>
> What version of python does boost::python officially support?  I noticed
> in the python build file (see link below), it will only find from version
> 1.5 to 3.4.  Does this mean that boost python really only supports up to
> 3.4?  Folks do appear to be using other versions, but the fact that this
> only goes to 3.4 leads me to believe that is as far as it's been tested.
> Is that right?
>
> What are the official versions?  Is there any documentation that says that?
>
> https://github.com/boostorg/build/blob/develop/src/tools/python.jam#L401
> -- next part --
> An HTML attachment was scrubbed...
> URL: <
> http://mail.python.org/pipermail/cplusplus-sig/attachments/20190516/018ed420/attachment-0001.html
> >
>
> --
>
> Message: 2
> Date: Thu, 16 May 2019 15:56:49 -0400
> From: stefan 
> To: [email protected]
> Subject: Re: [C++-sig] Python support in boost::python (what version)
> Message-ID: 
> Content-Type: text/plain; charset="windows-1252"; Format="flowed"
>
> On 2019-05-16 3:43 p.m., Jones, Torrin A (US) wrote:
>
> > What version of python does boost::python officially support?
> >
> Anything above version 2.2
>
> > I noticed in the python build file (see link below), it will only find
> > from version 1.5 to 3.4.? Does this mean that boost python really only
> > supports up to 3.4? Folks do appear to be using other versions, but
> > the fact that this only goes to 3.4 leads me to believe that is as far
> > as it?s been tested.? Is that right?
> >
> Definitely not. You are right, though: this file needs to be fixed. (I'm
> not maintaining this file myself, so I'll follow up with the relevant
> people (Boost.Build).)
>
> Boost internally regularly builds and tests Boost.Python with versions >
> 3.4. and I know various distributions containing Boost.Python packages
> built against more recent Python versions.
>
> See for example https://anaconda.org/anaconda/boost/files
>
> > What are the official versions? Is there any documentation that says
> that?
> >
> Not really, as Boost only "officially" releases source packages. Users
> are free to compile against a large range of tools and prerequisites
> (compilers, Python versions, etc.).
>
> If you find any issues building and running against a particular Python
> version, please file a bug report, and I'll try to help as quickly as
> possible.
>
>
> Stefan
>
> --
>
>...ich hab' noch einen Koffer in Berlin...
>
>
> -- next part --
> An HTML attachment was scrubbed...
> URL: <
> http://mail.python.org/pipermail/cplusplus-sig/attachments/20190516/f7073771/attachment-0001.html
> >
> -- next part --
> A non-text attachment was scrubbed...
> Name: signature.png
> Type: image/png
> Size: 1478 bytes
> Desc: not available
> URL: <
> http://mail.python.org/pipermail/cplusplus-sig/attachments/20190516/f7073771/attachment-0001.png
> >
>
> --
>
> Message: 3
> Date: Thu, 16 May 2019 20:33:55 +
> From: Jimmy Rizos 
> To: "'[email protected]'" 
> Subject: [C++-sig] Cant link Boost Python Examples
> Message-ID: 
> Content-Type: text/plain; charset="windows-1252"
>
> Hello,
>
> 

Re: [C++-sig] "cmake can't find boost python (Paddy Finn)"

2019-05-21 Thread Lewis Evans
We use cmake and build C++ against boost-python (boost 1.70.0, python 3.7).
We set the envvar "BOOST_ROOT" to the correct folder;
Include files are in folder %BOOST_ROOT%\boost
Libraries are in %BOOST_ROOT%\libs.
Once you've done that, cmake's command find_package(Boost
REQUIRED_COMPONENTS date_time ... python) should succeed (we check the
cmake flag variable Boost_FOUND after the call to find_package).

To verify that your original build of boost completed as intended, you can
check what's in the directory BOOST_ROOT/lib, eg does that folder contain
libboost_python.* with various endings (eg .a, .so for linux)?

Also the version of python you have in BOOST_ROOT/lib should match the one
that you get from typing "python" at the command prompt.

Hope that helps

Lewis



Bayforest Technologies Limited
16 Berkeley Street
London, W1J 8DZ
work1:  +44 203 907 3883  (dial-in for UK)
work2:   +1 347 746 0976(dial-in for US)
email: [email protected]
web:https://bayforest.ai/


On Tue, May 21, 2019 at 1:32 PM  wrote:

> Send Cplusplus-sig mailing list submissions to
> [email protected]
>
> To subscribe or unsubscribe via the World Wide Web, visit
> https://mail.python.org/mailman/listinfo/cplusplus-sig
> or, via email, send a message with subject or body 'help' to
> [email protected]
>
> You can reach the person managing the list at
> [email protected]
>
> When replying, please edit your Subject line so it is more specific
> than "Re: Contents of Cplusplus-sig digest..."
>
>
> Today's Topics:
>
>1. Re: Python support in boost::python (what version)
>   (Stefan Seefeld)
>2. openexr can't find boost python (Patrick Finn)
>3. cmake can't find boost python (Paddy Finn)
>
>
> --
>
> Message: 1
> Date: Mon, 20 May 2019 12:15:43 -0400
> From: Stefan Seefeld 
> To: [email protected]
> Subject: Re: [C++-sig] Python support in boost::python (what version)
> Message-ID: <[email protected]>
> Content-Type: text/plain; charset="windows-1252"; Format="flowed"
>
>
> On 2019-05-20 11:20 a.m., Jones, Torrin A (US) wrote:
> >
> > For clarity, my boss is asking, ?what version of python does boost
> > python support??? I was hoping there was some kind of table or
> > something, but I guess the answer is something like, ?It supports
> > whatever version of python was out at the time that boost python was
> > released?? And then we can go back and look at release dates.? LOL.
> >
> What did you expect ? It's obvious that a given release of Boost.Python
> can not make any compatibility guarantees about future Python releases,
> unless, of course, Python itself promises to be fully backward
> compatible. That's precisely why the versioning scheme used by Python
> supports the distinction between "major" and "minor" version, to be able
> to make statements as to what degree of backward-compatibility to expect.
>
> > Ex: boost python 1.66.0 was released/tagged on Nov 17, 2017.? Python
> > 3.6.3 was released on Oct 3, 2017.? Python 3.6.4 was released on Dec
> > 19. 2017. So in theory boost python 1.66.0 has support for Python
> > 3.6.3, but does not have support for Python 3.6.4.? I know that?s
> > ludicrous but, I work in the corporate world so here we are.
> >
> What's your point, exactly ? What are you trying to do ?
>
> (For the specific case, I would *hope* that Boost.Python 1.66.0 was
> compatible with Python 3.6.4, for the reason I cite above. But of
> course, there is no guarantee. Boost is Free Software, and its license
> (https://www.boost.org/users/license.html) clearly states that it is
> provided "...without warranty of any kind...". So make of it what you
> want.)
>
> Stefan
> --
>
>...ich hab' noch einen Koffer in Berlin...
>
> -- next part --
> An HTML attachment was scrubbed...
> URL: <
> http://mail.python.org/pipermail/cplusplus-sig/attachments/20190520/e025f3d1/attachment-0001.html
> >
> -- next part --
> A non-text attachment was scrubbed...
> Name: .signature.png
> Type: image/png
> Size: 2754 bytes
> Desc: not available
> URL: <
> http://mail.python.org/pipermail/cplusplus-sig/attachments/20190520/e025f3d1/attachment-0001.png
> >
>
> --
>
> Message: 2
> Date: Mon, 20 May 2019 14:07:41 +0100
> From: Patrick Finn 
> To: [email protected]
> Subject: [C++-sig] openexr can't find boost python
> Message-ID:
> <
> cac5ozggshbvvmxavmp5f_piassvwtxg5gnyjke5zoxjmjit...@mail.gmail.com>
> Content-Type: text/plain; charset="utf-8"
>
> Hi,
>
> I've managed to build openexr and Ilmbase but am having trouble building
> pyilmbase that other projects need like alembic etc. I found an openexr
> build that has a single CMakeLIsts.txt to build the whole project so tried
> that instead and the only error that is popping up so far is an inabilit

Re: [C++-sig] Compiling boost python

2020-05-01 Thread Lewis Evans
We build boost-python using a simple setup:
1. build boost according to its own instructions
2. cmake to build our C++, using find_package for python and boost libraries
we use the latest cmake, find_package with exact required components

I personally found bjam tricky to use (very few examples or search results
for problems), whereas cmake/gnumake are standard and widely used.

Lewis


Bayforest Technologies Limited
48 Dover St, Mayfair
London W1S 4FF
work1:  +44 203 968 5167
email: [email protected]
web:https://bayforest.ai/


On Thu, Apr 30, 2020 at 10:27 PM  wrote:

> Send Cplusplus-sig mailing list submissions to
> [email protected]
>
> To subscribe or unsubscribe via the World Wide Web, visit
> https://mail.python.org/mailman/listinfo/cplusplus-sig
> or, via email, send a message with subject or body 'help' to
> [email protected]
>
> You can reach the person managing the list at
> [email protected]
>
> When replying, please edit your Subject line so it is more specific
> than "Re: Contents of Cplusplus-sig digest..."
>
>
> Today's Topics:
>
>1. Re: Compiling boost python (Axel Huebl)
>
>
> --
>
> Message: 1
> Date: Thu, 30 Apr 2020 14:21:40 -0700
> From: Axel Huebl 
> To: Development of Python/C++ integration 
> Subject: Re: [C++-sig] Compiling boost python
> Message-ID: <[email protected]>
> Content-Type: text/plain; charset="utf-8"
>
> Hi,
>
> Check out the bazel example or the plain build with setuptools:
>
> https://github.com/pybind/
> https://github.com/pybind/python_example
>
> Axel
>
> On April 30, 2020 9:05:39 AM PDT, Andrew Voelkel <
> [email protected]> wrote:
> >The examples all use cmake, and there is a cmake extension for pybind11
> >that takes care of a number of things for you. From the docs:
> >
> >For C++ codebases that have an existing CMake-based build system, a
> >Python extension module can be created with just a few lines of code:
> >cmake_minimum_required(VERSION 2.8.12)
> >project(example)
> >
> >add_subdirectory(pybind11)
> >pybind11_add_module(example example.cpp)
> >
> >More here:
> >
> >
> https://pybind11.readthedocs.io/en/stable/compiling.html#building-with-cmake
> >
> >
> >From: Cplusplus-sig
> > on behalf
> >of Alain O' Miniussi 
> >Reply-To: Development of Python/C++ integration
> >
> >Date: Thursday, April 30, 2020 at 8:30 AM
> >To: Development of Python/C++ integration 
> >Subject: Re: [C++-sig] Compiling boost python
> >
> >But having one more lib outside boost means one more dependency.
> >
> >The sad thing is that dropping support for "the oldest and buggiest of
> >compiler specimens" in Boost would be rational to do, there are plenty
> >of old Boost releases for those.
> >How the cmake support for pybind ?
> >
> >- On 29 Avr 20, at 20:09, Andrew Voelkel
> > wrote:
> >
> >This blurb might help with that question:
> >
> >The main issue with Boost.Python?and the reason for creating such a
> >similar project?is Boost. Boost is an enormously large and complex
> >suite of utility libraries that works with almost every C++ compiler in
> >existence. This compatibility has its cost: arcane template tricks and
> >workarounds are necessary to support the oldest and buggiest of
> >compiler specimens. Now that C++11-compatible compilers are widely
> >available, this heavy machinery has become an excessively large and
> >unnecessary dependency. Think of this library as a tiny self-contained
> >version of Boost.Python with everything stripped away that isn?t
> >relevant for binding generation. Without comments, the core header
> >files only require ~4K lines of code and depend on Python (2.7 or 3.x,
> >or PyPy2.7 >= 5.7) and the C++ standard library. This compact
> >implementation was possible thanks to some of the new C++11 language
> >features (specifically: tuples, lambda functions and variadic
> >templates). Since its creation, this library has grown beyond
> >Boost.Python in many ways, leading to dramatically simpler binding code
> >in many common situations.
> >
> >
> >  *   Andy
> >
> >From: Cplusplus-sig
> > on behalf
> >of Torsten Kn?ppel 
> >Reply-To: Development of Python/C++ integration
> >
> >Date: Wednesday, April 29, 2020 at 8:15 AM
> >To: Development of Python/C++ integration 
> >Subject: Re: [C++-sig] Re: Compiling boost python
> >
> >Hi Andy,
> >
> >thanks for the quick reply. I only came across pybind recently when I
> >was encountering some dependency issues with
> >boost.python and looked for an alternative. It
> >looks really useful, but I hesitated to make the switch - but I think I
> >will do it sooner or later. Maybe one question regarding pybind - is it
> >easy to create bindings for different Python versions?
> >Am 29.04.20, 16:42 schrieb Andrew Voelkel :
> >Have you considered using pybind11? It?s the same basic idea as
> >boost.python, but

Re: [C++-sig] Cplusplus-sig Digest, Vol 125, Issue 3

2020-05-13 Thread Lewis Evans
Hello,

I suggest to avoid eval, in main()

instead, after "import test" in main():

funcObj = global["test"].attr("test") // assuming your global["test"] is a
successfully imported module
resultObj = funcObj()

then check resultObj:
as well as extract-and-check, you can query repr/str, and is_none(), and
check attributes __class__ and __class__.__name__

in boost-python say someObject.attr("attributeNameHere")

Best

Lewis




Bayforest Technologies Limited
48 Dover St, Mayfair
London W1S 4FF
work1:  +44 203 968 5167
email: [email protected]
web:https://bayforest.ai/


On Tue, May 12, 2020 at 5:00 PM  wrote:

> Send Cplusplus-sig mailing list submissions to
> [email protected]
>
> To subscribe or unsubscribe via the World Wide Web, visit
> https://mail.python.org/mailman/listinfo/cplusplus-sig
> or, via email, send a message with subject or body 'help' to
> [email protected]
>
> You can reach the person managing the list at
> [email protected]
>
> When replying, please edit your Subject line so it is more specific
> than "Re: Contents of Cplusplus-sig digest..."
>
>
> Today's Topics:
>
>1. Beginner - How to extract a Python Class that inherits from
>   C++ Class (Carlos Duran)
>
>
> --
>
> Message: 1
> Date: Tue, 12 May 2020 12:11:36 +0200
> From: Carlos Duran 
> To: "cplusplus-sig" 
> Subject: [C++-sig] Beginner - How to extract a Python Class that
> inherits from C++ Class
> Message-ID:
> <[email protected]>
> Content-Type: text/plain; charset="utf-8"
>
> Hi,
>
>
>
> I was being researching the Boost.Python library, this archive and
> stackoverflow but I couldn't find the correct answer.
>
>
>
> I tried the following:
> -First: I created the C++ Class.
> --
>
> user@host ~/ProjectFolder: cat lib/DemiComponent.hpp
>
> #pragma once
>
> #include 
>
>
>
> namespace DemiWu
>
> {
>
> ?? ?class Component
>
> ?? ?{
>
> ?? ??? ?public:
>
> ?? ??? ?Component(){};
>
> ?? ??? ?virtual ~Component(){};
>
> ?? ??? ?virtual void on_create(){};
>
> ?? ?};
>
>
>
> ?? ?class ComponentWrap : public Component, public
> boost::python::wrapper
>
> ?? ?{
>
> ?? ??? ?public:
>
> ?? ??? ?void empty(){}
>
> ?? ??? ?virtual void on_create()
>
> ?? ??? ?{
>
> ?? ??? ??? ?this->get_override("on_create")();
>
> ?? ??? ?}
>
> ?? ?};
>
>
>
> ?? ?void import_component()
>
> ?? ?{
>
> ?? ??? ?using namespace DemiWu;
>
> ?? ? ?? ?using namespace boost::python;
>
> ?? ??? ?class_("Component")
>
> ?? ??? ??? ?.def("on_create", &Component::on_create,
> &ComponentWrap::empty);
>
>
>
> ?? ?};
>
> };
>
> --
>
>
>
> -Second: I exported to Python
>
> --
>
> user@host ~/ProjectFolder: cat lib/DemiWu.hpp
>
> #pragma once
>
> #include 
>
> #include 
>
>
>
> BOOST_PYTHON_MODULE(DemiWu)
>
> {
>
> ?? ?DemiWu::import_component();
>
> }
>
> --
>
> ?cat lib/DemiWu.cpp
>
> #include 
>
> ---
>
>
>
> -Third: I used Meson to compile, but I think that is not important. The
> module works on python3 interpreter.
>
> --
>
>
>
> -Fourth: I wrote a Python Class that inherit form the C++ Class
> DemiWu::Component.
>
> --
>
> user@host ~/ProjectFolder: cat build/test.py
>
> import DemiWu
>
>
>
> class test(DemiWu.Component):
>
> ??? def __init__(self):
>
> ??? self.x = 10;
>
> ??? self.y = 20;
>
>
>
> ??? def on_create(self):
>
> ??? print("(",self.x, ",",self.y,")", sep="")
>
> ??? self.x = self.x + 1
>
> ??? self.y = self.y + 1
>
> --
>
>
>
> Fifth: I write a program that extracts the test Python Class.
>
> --
>
> user@host ~/ProjectFolder: cat src/DemiWu.cpp
>
> #include 
>
> #include 
>
> #include 
>
> #include 
>
> using namespace boost::python;
>
> using namespace DemiWu;
>
>
>
> int main()
>
> {
>
> ?? ?PyImport_AppendInittab("DemiWu", PyInit_DemiWu);
>
> ?? ?Py_Initialize();
>
> ?? ?object main = import("__main__");
>
> ?? ??? ?object global = main.attr("__dict__");
>
> ?? ?PySys_SetPath(L".");
>
> ?? ?global["test"] = import("test");
>
> ?? ?object obj = eval("test.test()", global);
>
> ?? ?extract ex(obj);
>
> ?? ?if(ex.check()){
>
> ??? ??? ?Component* b=ex();
>
> ? ?? b->on_create();?
>
> ?? ??? ? std::cout << "SUCCESS\n";
>
> ?? ??? ? return 0;
>
> ?? ?} else {
>
> ?? ??? ?std::cout << "FAIL\n";
>
> ?? ??? ?return 1;
>
> ?? ?}
>
> }
>

Re: [C++-sig] Cplusplus-sig Digest, Vol 125, Issue 5

2020-05-14 Thread Lewis Evans
I suggest

(a) renaming as test.test is confusing, eg call the file/module test_file,
and the class test_class
(b) I think from your previous post that test.test() simply calls the
constructor for class test, and this constructor is defined in python,
returning an object not a pointer,
so perhaps try extract not extract

Best

Lewis


Bayforest Technologies Limited
48 Dover St, Mayfair
London W1S 4FF
work1:  +44 203 968 5167
email: [email protected]
web:https://bayforest.ai/


On Thu, May 14, 2020 at 5:00 PM  wrote:

> Send Cplusplus-sig mailing list submissions to
> [email protected]
>
> To subscribe or unsubscribe via the World Wide Web, visit
> https://mail.python.org/mailman/listinfo/cplusplus-sig
> or, via email, send a message with subject or body 'help' to
> [email protected]
>
> You can reach the person managing the list at
> [email protected]
>
> When replying, please edit your Subject line so it is more specific
> than "Re: Contents of Cplusplus-sig digest..."
>
>
> Today's Topics:
>
>1. Re: Cplusplus-sig Digest, Vol 125, Issue 3 (Carlos Duran)
>
>
> --
>
> Message: 1
> Date: Wed, 13 May 2020 17:50:16 +0200
> From: Carlos Duran 
> To: "cplusplus-sig" 
> Subject: Re: [C++-sig] Cplusplus-sig Digest, Vol 125, Issue 3
> Message-ID:
> <[email protected]>
> Content-Type: text/plain; charset="utf-8"
>
> Hello again,
>
>
>
> I rewrite part of the code, but I didn't find my error.
>
> My new code is:
>
> cat ../src/DemiWu.cpp
>
> #include 
>
>
>
> #include 
>
> #include 
>
> #include 
>
> #include 
>
>
>
> using namespace boost::python;
>
> using namespace DemiWu;
>
>
>
> #if PY_MAJOR_VERSION >= 3
>
> #?? define INIT_MODULE PyInit_DemiWu
>
> ??? extern "C" PyObject* INIT_MODULE();
>
> #else
>
> #?? define INIT_MODULE initDemiwu
>
> ??? extern "C" void INIT_MODULE();
>
> #endif
>
>
>
> int main()
>
> {
>
> ? PyImport_AppendInittab((char*)"DemiWu", INIT_MODULE);
>
> ? Py_Initialize();
>
> ? object main = import("__main__");
>
> ? object global = main.attr("__dict__");
>
> ? PySys_SetPath(L".");
>
> ? global["test"] = import("test"); // How can I check the import?
>
>
>
> ? object funcObj = global["test"].attr("test");
>
> ? std::cout << std::boolalpha;
>
> ? std::cout << funcObj.is_none() << "\n"; // funcObj.is_none() == false
>
> ? object resultObj = funcObj();
>
> ? std::cout << resultObj.is_none() << "\n"; // resultObj.is_none() ==
> false
>
>
>
> ? // I suppose that in "real" code I need to check every time I use
> attr method.
>
> ? extract
> exclass(funcObj.attr("__class__").attr("__name__"));
>
> ? if(exclass.check())
>
> ? ? std::cout << "test.test.__class__.__name__: " << exclass() <<
> "\n"; // exclass() == "class"
>
> ? extract
> exclass2(resultObj.attr("__class__").attr("__name__"));
>
> ? if(exclass2.check())
>
> ? ? std::cout << "test.test().__class__.__name__: " << exclass2()
> << "\n"; // exclass2() == "test"
>
> ? extract
> exbase(funcObj.attr("__base__").attr("__name__"));
>
> ? if(exbase.check())
>
> ? ? std::cout << "test.test.__base__.__name__: " << exbase() <<
> "\n"; // exbase() == "Component"
>
> ? // It seems that resultObj is correct, I think that I am using
> extract<> function wrong.
>
> ? extract ex(resultObj);
>
> ? if(ex.check()){
>
> ? ? Component * const b=ex();
>
> ? ? b->on_create(); ?
>
> ? ? std::cout << "SUCCESS\n";
>
> ? ? return 0;
>
> ? } else {
>
> ? ? std::cout << "FAIL\n"; // And again the program jumps here.
>
> ? ? return 1;
>
> ? }
>
> }
>
>
>
> And the execution:
>
> ./DemiWu
>
> false
>
> false
>
> test.test.__class__.__name__: class
>
> test.test().__class__.__name__: test
>
> test.test.__base__.__name__: Component
>
> FAIL
>
>
>
> Thank you for your response
>
>
>
> Carlos
> -- next part --
> An HTML attachment was scrubbed...
> URL: <
> http://mail.python.org/pipermail/cplusplus-sig/attachments/20200513/e8d19d13/attachment-0001.html
> >
>
> --
>
> Subject: Digest Footer
>
> ___
> Cplusplus-sig mailing list
> [email protected]
> https://mail.python.org/mailman/listinfo/cplusplus-sig
>
>
> --
>
> End of Cplusplus-sig Digest, Vol 125, Issue 5
> *
>

-- 


Bayforest Capital Limited ( Bayforest®) is an Appointed Representative of 
G10 Capital Limited. G10 Capital Limited is authorised and regulated by the 
Financial Conduct Authority, registration number 648953.





The 
information
contained in this transmission may contain privileged and 
confidential
information.  It is intended only for the
use of the person(s) 
named above.  If