Fix binary operations Index by Series.

The binary operations between Index and Series raise an error when the operations are on Index and Series in this order and the Series has no name.
>>> ks.Index([1, 2, 3]) + ks.Series([10, 20, 30])
Traceback (most recent call last):
...
TypeError: object of type 'NoneType' has no len()

>>> ks.Index([1, 2, 3]) - ks.Series([10, 20, 30])
Traceback (most recent call last):
...
TypeError: object of type 'NoneType' has no len()

>>> ks.Index([1, 2, 3]) / ks.Series([10, 20, 30])
Traceback (most recent call last):
...
TypeError: object of type 'NoneType' has no len()

>>> ks.Index([1, 2, 3]) * ks.Series([10, 20, 30])
Traceback (most recent call last):
...
TypeError: object of type 'NoneType' has no len()

Resolves #2045.

Codecov Report

Merging #2046 (3687b30) into master (dca91a4) will decrease coverage by 3.43%.
The diff coverage is 100.00%.

@@            Coverage Diff             @@
##           master    #2046      +/-   ##
==========================================
- Coverage   94.71%   91.28%   -3.44%
==========================================
  Files          54       54
  Lines       11497    11388     -109
==========================================
- Hits        10889    10395     -494
- Misses        608      993     +385

Impacted Files
Coverage Δ

databricks/koalas/base.py
97.24% <100.00%> (-0.02%)
:arrow_down:

databricks/koalas/plot/plotly.py
9.47% <0.00%> (-87.37%)
:arrow_down:

...bricks/koalas/tests/plot/test_frame_plot_plotly.py
23.33% <0.00%> (-76.67%)
:arrow_down:

...ricks/koalas/tests/plot/test_series_plot_plotly.py
26.92% <0.00%> (-71.26%)
:arrow_down:

databricks/koalas/__init__.py
74.66% <0.00%> (-17.34%)
:arrow_down:

databricks/koalas/missing/__init__.py
84.61% <0.00%> (-15.39%)
:arrow_down:

databricks/koalas/indexes/datetimes.py
91.66% <0.00%> (-8.34%)
:arrow_down:

databricks/koalas/accessors.py
86.43% <0.00%> (-7.04%)
:arrow_down:

databricks/conftest.py
93.22% <0.00%> (-6.78%)
:arrow_down:

databricks/koalas/namespace.py
79.71% <0.00%> (-4.70%)
:arrow_down:

... and 24 more

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update dca91a4...3687b30. Read the comment docs.

FYI: after merge this, I'm going to create a PR for supporting binary operations with list-like Python objects we discussed in   https://github.com/databricks/koalas/pull/2022#issuecomment-768011750 !

Thanks! merging.


Create passcode and boot new agent

Ability to create a new passcode and boot a new agent

PR #141 includes two new functions:

generatePasscode
bootAndConnect

I'm attaching an example how the passcode generation and agent creation is implemented in Provenant wallet.

Video Link:
https://www.loom.com/share/74b31b3342e046a4b27e57dd2c6fedaa?sid=c0a212a1-b3d2-4b24-9552-3355c509411a

closing as it is merged with https://github.com/WebOfTrust/signify-browser-extension/pull/142


Fix errors in docs

Installation via pypi should have link.
Text for Validate command is slightly jumbled.
Make readme identical to index.md
Update the page for developing for the website and documentation.  It is out of date regarding fix_any.py

This was all fixed.


Cleanup KafkaContainer

The change seems to fail for testKafkaContainerCluster.

@kiview you are right! Also, I am glad that we have that test :D


saveAsImage – Specify path

One-line summary [问题简述]
I would like to be able to specify the path for the 'saveAsImage' file that is downloaded. Is that possible?
Version & Environment [版本及环境]

ECharts version [ECharts 版本]:
Browser version [浏览器类型和版本]:
OS Version [操作系统类型和版本]:

Expected behaviour [期望结果]
ECharts option [ECharts配置项]

option = {
toolbox: {
  feature: {
      saveAsImage: {
          ...,
          path: 'file://....'
      }
  }
}
}

Other comments [其他信息]

@jbadilla I built an example.
http://gallery.echartsjs.com/editor.html?c=xIKpCw9YjJ&v=1
option = {
toolbox: {
  feature: {
      saveAsImage: {
          icon: 'file://....'
      }
  }
}
}

Hey! Thanks for your response. I think you misunderstood, though.
What I am wondering is if you have the ability to add functionality such that I can specify the path of the saved file relative to my file system. I imagine I cannot do this on react, since it is client side, though..

Browser settings control the download folder.

All is good, guys! I've decided to just convert the base 64 to a blob, and then send it in the request to the server so that it is handled in the back-end. I just wanted to know if there was compatibility like other tools (i.e. browserify-fs).


ENG-32 switch to posthog eu instance

Description

points Avo inspector stuff at new posthog EU destination
corresponding Avo branch

:tada: This PR is included in version 1.277.0 :tada:
The release is available on GitHub release
Your semantic-release bot :package::rocket:


Remove unused var 'errTLSConfigUnavailable'

- What I did
Remove var 'errTLSConfigUnavailable' which is unused
- How I did it
- How to verify it
- Description for the changelog
Signed-off-by: yuexiao-wang<EMAIL_ADDRESS>

LGTM


Directly print PDFs in Chromium (+PDF editing functionality)

This PR adds a minimalistic and low-level PDFDataWriter class to PDF.js, which allows us to (incrementally) update PDFs. With this new class, I add print instructions to the PDF, which significantly improves the printing performance in Chromium-based browsers with a built-in PDF previewer (so, basically every Chromium browser AFAIK).
I suggest to separately review each commit, instead of checking the combined diff of the PR, because each commit is focused on a specific feature and has a detailed commit message.
To verify that the whole works as expected:

node make chromium
Open Chrome, visit chrome://extensions and load the unpacked extension from build/chromium/.
Open any PDF (preferably one with 10+ pages) with Chrome.
Focus the page and press Ctrl + P.
A print preview should immediately be displayed, without rendering all pages upfront.
Close the preview and click on the print button (or Ctr+P).
Same as 5.

and

node make generic
node make server (to start the server).
Visit localhost:8888 and open a PDF
See step 4 - 7 of the previous list.

and

Visit http://localhost:8888/test/unit/unit_test.html?spec=pdf_data_writer and verify that all tests are green.

Doesn't work for password protected file
Here is a one: https://drive.google.com/file/d/0B6YhVF9p-y2AY3hjV2tDcHVWRGs/view?usp=sharing

On OS X, cmd+P doesn't work any more. It prints without preprocess the file. However ctrl+P works.

This will generate invalid PDF for printing for some file.
Original file: https://drive.google.com/file/d/0B6YhVF9p-y2AQnJkN0NMdlJyZEk/view?usp=sharing
Generated file: https://drive.google.com/file/d/0B6YhVF9p-y2AWWNwMkF5QzNSeFk/view?usp=sharing
All PDF readers I have (Preview, Adobe Acrobat Reader DC, and even Google Drive preview) says the generated one is invalid file. However PDF.js happily render it and auto-print on load.
iText RUPS say "The document has no page root (meaning: it's an invalid PDF)."

On OS X, cmd+P doesn't work any more. It prints with the browser default behaviour. However ctrl+P works.

Weird. I don't thread Cmd different from Ctrl. Is the difference observable even after adding event.preventDefault() as you've suggested before?

Doesn't work for password protected file
Here is one: https://drive.google.com/file/d/0B6YhVF9p-y2AY3hjV2tDcHVWRGs/view?usp=sharing
I think we should just use the canvas printing method for password protected file.

Sounds like a good plan. I might add support for password-protected PDFs in a later PR, if feasible.

This will generate invalid PDF for printing for some file.
Original file: https://drive.google.com/file/d/0B6YhVF9p-y2AQnJkN0NMdlJyZEk/view?usp=sharing
Generated file: https://drive.google.com/file/d/0B6YhVF9p-y2AWWNwMkF5QzNSeFk/view?usp=sharing

All PDF readers I have (PDFium in Chrome, Preview, Adobe Acrobat Reader DC, and even Google Drive preview) report the generated one is invalid. However PDF.js happily render it and auto-print on load.
iText RUPS says "The document has no page root (meaning: it's an invalid PDF)."
Apparently hybrid xref tables are not supported for files that originally consisted of XRef streams only... I'll submit a fix for that.

Weird. I don't thread Cmd different from Ctrl. Is the difference observable even after adding event.preventDefault() as you've suggested before?
Without preventDefault, Cmd+P will trigger Chrome's print function. I can see the File menu flash blue indicate Chrome's shortcut is triggered. And obversely its default print function won't work.
With preventDefault, Chrome's print function is not triggered, File menu no longer flash blue, and it prints properly.

Fixed all mentioned issues, ready for another round of review:

Password-protected PDFs are ignored and printed using the current method.
PDFs that exclusively use XRef streams are also printed correctly.
Ctrl/Cmd + P calls event.preventDefault() when needed.

Future plans:

Support printing of encrypted PDFs using the new method.
Add a setting (Chrome extension) or another UI control to allow users to always print using PDF.js (= the current method).

I found out you can postMessage to PDFium to give it password and ask for print
diff --git a/web/viewer.js b/web/viewer.js
index 2c10e0a..9c34b03 100644
--- a/web/viewer.js
+++ b/web/viewer.js
@@ -608,10 +608,34 @@ var PDFViewerApplication = {
     this._printAction = printAction;

     canUsePDFium(function yes() {
-      PDFViewerApplication.pdfDocument.getDataForPrinting().then(function(res) {
-        printAction.pdfBlobUrl = res.pdfBlobUrl;
+      PDFViewerApplication.pdfDocument.getData().then(function(data) {
+        var blob = PDFJS.createBlob(data, 'application/pdf');
+        var blobUrl = URL.createObjectURL(blob);
+        printAction.pdfBlobUrl = blobUrl;
         printAction.embed = createPDFiumEmbed();
         printAction.embed.src = printAction.pdfBlobUrl;
+        printAction.embed.addEventListener('message', function(evt) {
+          var data = evt.data;
+          console.log(data);
+          switch (data.type) {
+            case 'loadProgress':
+              // TODO: show load progress in a progress bar
+              if (data.progress === 100) { // load successful
+                printAction.embed.postMessage({
+                  type: 'print'
+                });
+              } else if (data.progress === -1) { // load failed
+                onFallback()
+              }
+              break;
+            case 'getPassword':
+              printAction.embed.postMessage({
+                type: 'getPasswordComplete',
+                password: 'password' // TODO: ask user for password or get it from worker
+              });
+              break;
+          }
+        });
         document.body.appendChild(printAction.embed);
         // Clean up when the print dialog is closed.
         window.addEventListener('focus', printAction);

embed tag with type of application/x-google-chrome-pdf no longer works in Chrome v46.

@xlc And it does not work in Chrome 45 either. We have to use the default MIME-type (application/pdf) instead, and include proper guards to ensure that we don't accidentally let PDF.js render it again (which is why I was using this MIME-type in the first place).


AmazonProduct won't parse Relationships

I've figured that the Relationships node of the Xml for GetMatchingProductForIdResponse aren't getting parsed by the function. This has to do with the fact that it uses namespaced child nodes combined with non-namespaced child nodes. It seems the SimepleXml lib cannot handle the the non-namespaced nodes. For instance, it is not possible getting the Identifiers node.
//Relationships
if ($xml->Relationships){
    foreach($xml->Relationships->children() as $x){
        foreach($x->children() as $y){
            foreach($y->children() as $z){
                foreach($z->children() as $zzz){
                    $this->data['Relationships'][$x->getName()][$y->getName()][$z->getName()][$zzz->getName()] = (string)$zzz;
                }
            }
        }
    }
}

<?xml version="1.0"?>
<GetMatchingProductForIdResponse xmlns="http://mws.amazonservices.com/schema/Products/2011-10-01">
    <GetMatchingProductForIdResult Id="1554" IdType="SellerSKU" status="Success">
        <Products xmlns="http://mws.amazonservices.com/schema/Products/2011-10-01" xmlns:ns2="http://mws.amazonservices.com/schema/Products/2011-10-01/default.xsd">
            <Product>
                <Identifiers>
                    <MarketplaceASIN>
                        <MarketplaceId>A1PA6795UKMFR9</MarketplaceId>
                        <ASIN>B00XQACUYU</ASIN>
                    </MarketplaceASIN>
                </Identifiers>
                <AttributeSets>
                    <ns2:ItemAttributes xml:lang="de-DE">
                        <ns2:Binding>Textilien</ns2:Binding>
                        <ns2:Brand>Mim-Pi</ns2:Brand>
                        <ns2:Department>Mädchen</ns2:Department>
                        <ns2:NumberOfItems>1</ns2:NumberOfItems>
                        <ns2:PackageQuantity>1</ns2:PackageQuantity>
                        <ns2:ProductGroup>Apparel</ns2:ProductGroup>
                        <ns2:ProductTypeName>PANTS</ns2:ProductTypeName>
                        <ns2:SmallImage>
                            <ns2:URL>http://ecx.images-amazon.com/images/I/41OMIkqP2IL._SL75_.jpg</ns2:URL>
                            <ns2:Height Units="pixels">75</ns2:Height>
                            <ns2:Width Units="pixels">75</ns2:Width>
                        </ns2:SmallImage>
                        <ns2:Title>MIM-PI Baggy Mädchen Hose</ns2:Title>
                    </ns2:ItemAttributes>
                </AttributeSets>
                <Relationships>
                    <ns2:VariationChild>
                        <Identifiers>
                            <MarketplaceASIN>
                                <MarketplaceId>A1PA6795UKMFR9</MarketplaceId>
                                <ASIN>B00XQACWXO</ASIN>
                            </MarketplaceASIN>
                        </Identifiers>
                        <ns2:Color>Blau</ns2:Color>
                        <ns2:Size>92</ns2:Size>
                    </ns2:VariationChild>
                    <ns2:VariationChild>
                        <Identifiers>
                            <MarketplaceASIN>
                                <MarketplaceId>A1PA6795UKMFR9</MarketplaceId>
                                <ASIN>B00XQACZRW</ASIN>
                            </MarketplaceASIN>
                        </Identifiers>
                        <ns2:Color>Blau</ns2:Color>
                        <ns2:Size>98</ns2:Size>
                    </ns2:VariationChild>
                    <ns2:VariationChild>
                        <Identifiers>
                            <MarketplaceASIN>
                                <MarketplaceId>A1PA6795UKMFR9</MarketplaceId>
                                <ASIN>B00XQAD2HO</ASIN>
                            </MarketplaceASIN>
                        </Identifiers>
                        <ns2:Color>Blau</ns2:Color>
                        <ns2:Size>104</ns2:Size>
                    </ns2:VariationChild>
                    <ns2:VariationChild>
                        <Identifiers>
                            <MarketplaceASIN>
                                <MarketplaceId>A1PA6795UKMFR9</MarketplaceId>
                                <ASIN>B00XQAD59Y</ASIN>
                            </MarketplaceASIN>
                        </Identifiers>
                        <ns2:Color>Blau</ns2:Color>
                        <ns2:Size>110</ns2:Size>
                    </ns2:VariationChild>
                    <ns2:VariationChild>
                        <Identifiers>
                            <MarketplaceASIN>
                                <MarketplaceId>A1PA6795UKMFR9</MarketplaceId>
                                <ASIN>B00XQAD8LY</ASIN>
                            </MarketplaceASIN>
                        </Identifiers>
                        <ns2:Color>Blau</ns2:Color>
                        <ns2:Size>116</ns2:Size>
                    </ns2:VariationChild>
                    <ns2:VariationChild>
                        <Identifiers>
                            <MarketplaceASIN>
                                <MarketplaceId>A1PA6795UKMFR9</MarketplaceId>
                                <ASIN>B00XQADAKI</ASIN>
                            </MarketplaceASIN>
                        </Identifiers>
                        <ns2:Color>Blau</ns2:Color>
                        <ns2:Size>122</ns2:Size>
                    </ns2:VariationChild>
                    <ns2:VariationChild>
                        <Identifiers>
                            <MarketplaceASIN>
                                <MarketplaceId>A1PA6795UKMFR9</MarketplaceId>
                                <ASIN>B00XQADDYG</ASIN>
                            </MarketplaceASIN>
                        </Identifiers>
                        <ns2:Color>Blau</ns2:Color>
                        <ns2:Size>128</ns2:Size>
                    </ns2:VariationChild>
                    <ns2:VariationChild>
                        <Identifiers>
                            <MarketplaceASIN>
                                <MarketplaceId>A1PA6795UKMFR9</MarketplaceId>
                                <ASIN>B00XQADGWA</ASIN>
                            </MarketplaceASIN>
                        </Identifiers>
                        <ns2:Color>Blau</ns2:Color>
                        <ns2:Size>134</ns2:Size>
                    </ns2:VariationChild>
                    <ns2:VariationChild>
                        <Identifiers>
                            <MarketplaceASIN>
                                <MarketplaceId>A1PA6795UKMFR9</MarketplaceId>
                                <ASIN>B00XQADJV8</ASIN>
                            </MarketplaceASIN>
                        </Identifiers>
                        <ns2:Color>Blau</ns2:Color>
                        <ns2:Size>140</ns2:Size>
                    </ns2:VariationChild>
                    <ns2:VariationChild>
                        <Identifiers>
                            <MarketplaceASIN>
                                <MarketplaceId>A1PA6795UKMFR9</MarketplaceId>
                                <ASIN>B00XQADN7I</ASIN>
                            </MarketplaceASIN>
                        </Identifiers>
                        <ns2:Color>Blau</ns2:Color>
                        <ns2:Size>146</ns2:Size>
                    </ns2:VariationChild>
                    <ns2:VariationChild>
                        <Identifiers>
                            <MarketplaceASIN>
                                <MarketplaceId>A1PA6795UKMFR9</MarketplaceId>
                                <ASIN>B00XQADPXA</ASIN>
                            </MarketplaceASIN>
                        </Identifiers>
                        <ns2:Color>Blau</ns2:Color>
                        <ns2:Size>152</ns2:Size>
                    </ns2:VariationChild>
                </Relationships>
                <SalesRankings/>
            </Product>
        </Products>
    </GetMatchingProductForIdResult>
    <GetMatchingProductForIdResult Id="1556" IdType="SellerSKU" status="Success">
        <Products xmlns="http://mws.amazonservices.com/schema/Products/2011-10-01" xmlns:ns2="http://mws.amazonservices.com/schema/Products/2011-10-01/default.xsd">
            <Product>
                <Identifiers>
                    <MarketplaceASIN>
                        <MarketplaceId>A1PA6795UKMFR9</MarketplaceId>
                        <ASIN>B00XQ9OE8G</ASIN>
                    </MarketplaceASIN>
                </Identifiers>
                <AttributeSets>
                    <ns2:ItemAttributes xml:lang="de-DE">
                        <ns2:Binding>Textilien</ns2:Binding>
                        <ns2:Brand>Mim-Pi</ns2:Brand>
                        <ns2:Department>Mädchen</ns2:Department>
                        <ns2:NumberOfItems>1</ns2:NumberOfItems>
                        <ns2:PackageQuantity>1</ns2:PackageQuantity>
                        <ns2:ProductGroup>Apparel</ns2:ProductGroup>
                        <ns2:ProductTypeName>SHIRT</ns2:ProductTypeName>
                        <ns2:SmallImage>
                            <ns2:URL>http://ecx.images-amazon.com/images/I/41zzIcFZetL._SL75_.jpg</ns2:URL>
                            <ns2:Height Units="pixels">75</ns2:Height>
                            <ns2:Width Units="pixels">75</ns2:Width>
                        </ns2:SmallImage>
                        <ns2:Title>MIM-PI Mädchen T-shirt</ns2:Title>
                    </ns2:ItemAttributes>
                </AttributeSets>
                <Relationships>
                    <ns2:VariationChild>
                        <Identifiers>
                            <MarketplaceASIN>
                                <MarketplaceId>A1PA6795UKMFR9</MarketplaceId>
                                <ASIN>B00XQ9OFRG</ASIN>
                            </MarketplaceASIN>
                        </Identifiers>
                        <ns2:Color>Blau</ns2:Color>
                        <ns2:Size>92</ns2:Size>
                    </ns2:VariationChild>
                    <ns2:VariationChild>
                        <Identifiers>
                            <MarketplaceASIN>
                                <MarketplaceId>A1PA6795UKMFR9</MarketplaceId>
                                <ASIN>B00XQ9OI6O</ASIN>
                            </MarketplaceASIN>
                        </Identifiers>
                        <ns2:Color>Blau</ns2:Color>
                        <ns2:Size>98</ns2:Size>
                    </ns2:VariationChild>
                    <ns2:VariationChild>
                        <Identifiers>
                            <MarketplaceASIN>
                                <MarketplaceId>A1PA6795UKMFR9</MarketplaceId>
                                <ASIN>B00XQ9OK9O</ASIN>
                            </MarketplaceASIN>
                        </Identifiers>
                        <ns2:Color>Blau</ns2:Color>
                        <ns2:Size>104</ns2:Size>
                    </ns2:VariationChild>
                    <ns2:VariationChild>
                        <Identifiers>
                            <MarketplaceASIN>
                                <MarketplaceId>A1PA6795UKMFR9</MarketplaceId>
                                <ASIN>B00XQ9OMU6</ASIN>
                            </MarketplaceASIN>
                        </Identifiers>
                        <ns2:Color>Blau</ns2:Color>
                        <ns2:Size>110</ns2:Size>
                    </ns2:VariationChild>
                    <ns2:VariationChild>
                        <Identifiers>
                            <MarketplaceASIN>
                                <MarketplaceId>A1PA6795UKMFR9</MarketplaceId>
                                <ASIN>B00XQ9OPF8</ASIN>
                            </MarketplaceASIN>
                        </Identifiers>
                        <ns2:Color>Blau</ns2:Color>
                        <ns2:Size>116</ns2:Size>
                    </ns2:VariationChild>
                    <ns2:VariationChild>
                        <Identifiers>
                            <MarketplaceASIN>
                                <MarketplaceId>A1PA6795UKMFR9</MarketplaceId>
                                <ASIN>B00XQ9ORMO</ASIN>
                            </MarketplaceASIN>
                        </Identifiers>
                        <ns2:Color>Blau</ns2:Color>
                        <ns2:Size>122</ns2:Size>
                    </ns2:VariationChild>
                    <ns2:VariationChild>
                        <Identifiers>
                            <MarketplaceASIN>
                                <MarketplaceId>A1PA6795UKMFR9</MarketplaceId>
                                <ASIN>B00XQ9OU3K</ASIN>
                            </MarketplaceASIN>
                        </Identifiers>
                        <ns2:Color>Blau</ns2:Color>
                        <ns2:Size>128</ns2:Size>
                    </ns2:VariationChild>
                    <ns2:VariationChild>
                        <Identifiers>
                            <MarketplaceASIN>
                                <MarketplaceId>A1PA6795UKMFR9</MarketplaceId>
                                <ASIN>B00XQ9OW1U</ASIN>
                            </MarketplaceASIN>
                        </Identifiers>
                        <ns2:Color>Blau</ns2:Color>
                        <ns2:Size>134</ns2:Size>
                    </ns2:VariationChild>
                    <ns2:VariationChild>
                        <Identifiers>
                            <MarketplaceASIN>
                                <MarketplaceId>A1PA6795UKMFR9</MarketplaceId>
                                <ASIN>B00XQ9OYC2</ASIN>
                            </MarketplaceASIN>
                        </Identifiers>
                        <ns2:Color>Blau</ns2:Color>
                        <ns2:Size>140</ns2:Size>
                    </ns2:VariationChild>
                </Relationships>
                <SalesRankings/>
            </Product>
        </Products>
    </GetMatchingProductForIdResult>
    <ResponseMetadata>
        <RequestId>5b394041-ba9c-4630-b948-c2c98ca626d8</RequestId>
    </ResponseMetadata>
</GetMatchingProductForIdResponse>

Im not sure this code would do;
if ($xml->Relationships){
    foreach($xml->Relationships->children() as $x){
        foreach($x->children() as $y){
            foreach($y->children() as $z){
                foreach($z->children() as $zzz){
                    $this->data['Relationships'][$x->getName()][$y->getName()][$z->getName()][$zzz->getName()] = (string)$zzz;
                }
            }
        }
    }
}

But this made my Xml work:
if ($xml->Relationships) {
    foreach($xml->Relationships->children('ns2', true) as $variation) {
        foreach ($variation->children() as $identifier) {
            $this->data['Relationships'][] = [
                'ASIN' => (string) $identifier->MarketplaceASIN->ASIN,
                'Color' => (string) $variation->Color,
                'Size' => (int) $variation->Size
            ];
        }
    }
}

Yes, this is an issue that was discovered in February and fixed in the master development branch. (https://github.com/CPIGroup/phpAmazonMWS/commit/e93aa29c2569f2d31a708a42365ad60e535551c7)

When are you releasing a new version (composer)?

As soon as I am allowed to do so.

Just checked. This fix doesn't completely fix the problem. I do not receive all the Relationship values / ASIN's with the test Xml from my first post. I actually receive 1 of 10 ASIN's in the Relationship VariationChild.

I think I see why. All ten of those nodes use the same name, so it's overwriting the same "VariationChild" key in the array every time, isn't it? Unfortunately, I am not able to look into it or fix it at this time.

Since the ASIN / Marketplace combination is linked to the Variation data, add them to an array Relationships? Something like:
[Relationships] => Array
    (
        [0] => Array
        (
            ASIN => '123'
            MarketplaceId => '123
            W => 'X'
            Y => 'Z'
        )
)

Do you have more test data, other than my example?

I was thinking that the variation data should be stored as an array, yes. However, I'd have to look into it more to see in what ways the data can be condensed, if at all.
And no, I'm afraid I don't have any test data on hand.

How about this?
//Relationships
if ($xml->Relationships){
    //child relations use namespace but parent does not
    foreach($xml->Relationships->children('ns2', true) as $variation){
        $variations = (array) $variation;
        foreach($variation->children() as $identifier) {
            $this->data['Relationships'][] = array_merge($variations, [
                'ASIN' => (string) $identifier->MarketplaceASIN->ASIN,
                'MarketplaceId' => (string) $identifier->MarketplaceASIN->MarketplaceId
            ]);
        }
    }
}

Will include the VariationData (of any name / type) into the array. Based upon my test data, this will output::
[Relationships] => Array
(
        [0] => Array
        (
                [Color] => Blau
                [Size] => 92
                [ASIN] => B00XQACWXO
                [MarketplaceId] => A1PA6795UKMFR9
        )
        [1] => Array
        (
                [Color] => Blau
                [Size] => 98
                [ASIN] => B00XQACZRW
                [MarketplaceId] => A1PA6795UKMFR9
        )
        [2] => Array
        (
                [Color] => Blau
                [Size] => 104
                [ASIN] => B00XQAD2HO
                [MarketplaceId] => A1PA6795UKMFR9
        )
        [3] => Array
        (
                [Color] => Blau
                [Size] => 110
                [ASIN] => B00XQAD59Y
                [MarketplaceId] => A1PA6795UKMFR9
        )
        [4] => Array
        (
                [Color] => Blau
                [Size] => 116
                [ASIN] => B00XQAD8LY
                [MarketplaceId] => A1PA6795UKMFR9
        )
        [5] => Array
        (
                [Color] => Blau
                [Size] => 122
                [ASIN] => B00XQADAKI
                [MarketplaceId] => A1PA6795UKMFR9
        )
        [6] => Array
        (
                [Color] => Blau
                [Size] => 128
                [ASIN] => B00XQADDYG
                [MarketplaceId] => A1PA6795UKMFR9
        )
        [7] => Array
        (
                [Color] => Blau
                [Size] => 134
                [ASIN] => B00XQADGWA
                [MarketplaceId] => A1PA6795UKMFR9
        )
        [8] => Array
        (
                [Color] => Blau
                [Size] => 140
                [ASIN] => B00XQADJV8
                [MarketplaceId] => A1PA6795UKMFR9
        )
        [9] => Array
        (
                [Color] => Blau
                [Size] => 146
                [ASIN] => B00XQADN7I
                [MarketplaceId] => A1PA6795UKMFR9
        )
        [10] => Array
        (
                [Color] => Blau
                [Size] => 152
                [ASIN] => B00XQADPXA
                [MarketplaceId] => A1PA6795UKMFR9
        )
)

It looks like that gets all the data from your sample, but I would have to research it further to see if the solution works for all possible responses. Variations is the one area of products that I do not have much familiarity with, because the stores I work with don't use that feature yet.

I did not edit any other line of code, except for that one. Perhaps run your PHPUnit with my edits? Would be nice having the Xsd on this one. :disappointed:

What I mean is that I can't research or test it at all right now. Just running the tests won't be enough, because the test data is not comprehensive and the tests pass even before the namespace issue was (partially) fixed before.
You should be able to find the XSD somewhere. The XML you posted up above links to an XSD, but the link doesn't seem to work. I do not have it myself, unfortunately.

I cannot find the XSD either. So its impossible for me to validate and/or create a good testcase.
Where are we moving from here? Do I have to fork this project with my edits just to keep my project running?

Did some further testing when requesting by EAN (see Xml). Which changed the function again. It could happen that there are no VariationChild nodes. So I updated to function to this:
//Relationships
if ($xml->Relationships){
    // When there are variations (VariationChild) nodes
    foreach($xml->Relationships->children('ns2', true) as $variation){
        $variations = (array) $variation;
        foreach($variation->children() as $identifier) {
            $this->data['Relationships'][] = array_merge($variations, (array) $identifier->MarketplaceASIN);
        }
    }

    // when there isn't any VariationChild node, but there are identifiers
    foreach ($xml->Relationships->children() as $identifier) {
        $this->data['Relationships'][] = (array) $identifier->Identifiers->MarketplaceASIN;
    }
}

Xml:
<?xml version="1.0"?>
<GetMatchingProductForIdResponse xmlns="http://mws.amazonservices.com/schema/Products/2011-10-01">
    <GetMatchingProductForIdResult Id="8718888013105" IdType="EAN" status="Success">
        <Products xmlns="http://mws.amazonservices.com/schema/Products/2011-10-01" xmlns:ns2="http://mws.amazonservices.com/schema/Products/2011-10-01/default.xsd">
            <Product>
                <Identifiers>
                    <MarketplaceASIN>
                        <MarketplaceId>A1PA6795UKMFR9</MarketplaceId>
                        <ASIN>B00V38Q1DI</ASIN>
                    </MarketplaceASIN>
                </Identifiers>
                <AttributeSets>
                    <ns2:ItemAttributes xml:lang="de-DE">
                        <ns2:Binding>Textilien</ns2:Binding>
                        <ns2:Brand>Mim-Pi</ns2:Brand>
                        <ns2:Color>Grau</ns2:Color>
                        <ns2:Department>Mädchen</ns2:Department>
                        <ns2:PartNumber>0115S-1513</ns2:PartNumber>
                        <ns2:ProductGroup>Apparel</ns2:ProductGroup>
                        <ns2:ProductTypeName>SWEATER</ns2:ProductTypeName>
                        <ns2:Size>122</ns2:Size>
                        <ns2:SmallImage>
                            <ns2:URL>http://ecx.images-amazon.com/images/I/417RrUuX3rL._SL75_.jpg</ns2:URL>
                            <ns2:Height Units="pixels">49</ns2:Height>
                            <ns2:Width Units="pixels">75</ns2:Width>
                        </ns2:SmallImage>
                        <ns2:Title>Mim-Pi Sweat Cardigan mim1513, Größe:122</ns2:Title>
                    </ns2:ItemAttributes>
                </AttributeSets>
                <Relationships>
                    <VariationParent>
                        <Identifiers>
                            <MarketplaceASIN>
                                <MarketplaceId>A1PA6795UKMFR9</MarketplaceId>
                                <ASIN>B00V3850SA</ASIN>
                            </MarketplaceASIN>
                        </Identifiers>
                    </VariationParent>
                </Relationships>
                <SalesRankings/>
            </Product>
        </Products>
    </GetMatchingProductForIdResult>
    <ResponseMetadata>
        <RequestId>bc979b82-9c14-41f0-816b-9813de3461d6</RequestId>
    </ResponseMetadata>
</GetMatchingProductForIdResponse>

If you need the changes, then yes, you can fork it and put the changes on it for now, because it could be a while before I am able to look into it myself.

Finally taken care of