<div dir="ltr"><div class="markdown-here-wrapper" style="font-size:1em;font-family:Helvetica,arial,freesans,clean,sans-serif;color:rgb(34,34,34);background-color:rgb(255,255,255);border:none;line-height:1.2"><blockquote style="margin:1em 0px;border-left:4px solid rgb(221,221,221);padding:0px 1em;color:rgb(119,119,119);quotes:none">
<p style="margin:1em 0px">The latter - changing the behavior of multiplication breaks the principle.</p>
</blockquote>
<p style="margin:1em 0px">But this is not the main reason for deprecating matrix - almost all of the problems I’ve seen have been caused by the way that matrices behave when sliced. The way that <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:nowrap;border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);border-radius:3px;display:inline">m[i][j]</code> and <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:nowrap;border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);border-radius:3px;display:inline">m[i,j]</code> are different is just one example of this, the fact that they must be 2d is another.</p>
<p style="margin:1em 0px">Matrices behaving differently on multiplication isn’t super different in my mind to how string arrays fail to multiply at all.</p>
<p style="margin:1em 0px">Eric</p>
<p style="margin:1em 0px">On Mon, 29 Oct 2018 at 20:54 Ralf Gommers <<a href="mailto:ralf.gommers@gmail.com" target="_blank" style="color:rgb(51,51,238);text-decoration:none">ralf.gommers@gmail.com</a>> wrote:</p>
<p style="margin:1em 0px"></p><div class="markdown-here-exclude"><p></p><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_quote"><div dir="ltr">On Mon, Oct 29, 2018 at 4:31 PM Chris Barker <<a href="mailto:chris.barker@noaa.gov" target="_blank">chris.barker@noaa.gov</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Fri, Oct 26, 2018 at 7:12 PM, Travis Oliphant <span dir="ltr"><<a href="mailto:teoliphant@gmail.com" target="_blank">teoliphant@gmail.com</a>></span> wrote:<br><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div class="gmail_quote"><div> agree that we can stop bashing subclasses in general.   The problem with numpy subclasses is that they were made without adherence to SOLID:  <a href="https://en.wikipedia.org/wiki/SOLID" target="_blank">https://en.wikipedia.org/wiki/SOLID</a>.  In particular the Liskov substitution principle:  <a href="https://en.wikipedia.org/wiki/Liskov_substitution_principle" target="_blank">https://en.wikipedia.org/wiki/Liskov_substitution_principle</a> . </div></div></div></div></div></blockquote><div><br></div><div>...</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div class="gmail_quote"><div> did not properly apply them in creating np.matrix which clearly violates the substitution principle. </div></div></div></div></div></blockquote><div><br></div><div>So -- could a matrix subclass be made "properly"? or is that an example of something that should not have been a subclass?</div></div></div></div></blockquote><div><br></div></div></div><div dir="ltr"><div class="gmail_quote"><div>The latter - changing the behavior of multiplication breaks the principle.</div></div></div><div dir="ltr"><div class="gmail_quote"><div><br></div><div>Ralf</div><div><br></div></div></div>
_______________________________________________<br>
NumPy-Discussion mailing list<br>
<a href="mailto:NumPy-Discussion@python.org" target="_blank">NumPy-Discussion@python.org</a><br>
<a href="https://mail.python.org/mailman/listinfo/numpy-discussion" rel="noreferrer" target="_blank">https://mail.python.org/mailman/listinfo/numpy-discussion</a><br>
</blockquote><p></p></div><p style="margin:1em 0px"></p>
<div title="MDH:Jmd0O8KgPHNwYW4gc3R5bGU9ImNvbG9yOnJnYigzMywzMywzMykiPlRoZSBsYXR0ZXIgLSBjaGFu
Z2luZyB0aGUgYmVoYXZpb3Igb2YgbXVsdGlwbGljYXRpb24gYnJlYWtzIHRoZSBwcmluY2lwbGUu
PGJyPjxicj5CdXQgdGhpcyBpcyBub3QgdGhlIG1haW4gcmVhc29uIGZvciBkZXByZWNhdGluZyBt
YXRyaXggLSBhbG1vc3QgYWxsIG9mIHRoZSBwcm9ibGVtcyBJJ3ZlIHNlZW4gaGF2ZSBiZWVuIGNh
dXNlZCBieSB0aGUgd2F5IHRoYXQgbWF0cmljZXMgYmVoYXZlIHdoZW4gc2xpY2VkLiBUaGUgd2F5
IHRoYXQgYG1baV1bal1gIGFuZCBgbVtpLGpdYCBhcmUgZGlmZmVyZW50IGlzIGp1c3Qgb25lIGV4
YW1wbGUgb2YgdGhpcywgdGhlIGZhY3QgdGhhdCB0aGV5IG11c3QgYmUgMmQgaXMgYW5vdGhlci48
L3NwYW4+PGRpdj48Zm9udCBjb2xvcj0iIzIxMjEyMSI+PGJyPjwvZm9udD48L2Rpdj48ZGl2Pjxm
b250IGNvbG9yPSIjMjEyMTIxIj5NYXRyaWNlcyBiZWhhdmluZyBkaWZmZXJlbnRseSBvbiBtdWx0
aXBsaWNhdGlvbiBpc24ndCBzdXBlciBkaWZmZXJlbnQgaW4gbXkgbWluZCB0byBob3cgc3RyaW5n
IGFycmF5cyBmYWlsIHRvIG11bHRpcGx5IGF0IGFsbC48L2ZvbnQ+PC9kaXY+PGRpdj48Zm9udCBj
b2xvcj0iIzIxMjEyMSI+PGJyPjwvZm9udD48L2Rpdj48ZGl2Pjxmb250IGNvbG9yPSIjMjEyMTIx
Ij5FcmljPGJyPjwvZm9udD48ZGl2PjxkaXY+PGZvbnQgY29sb3I9IiMyMTIxMjEiPjxicj48L2Zv
bnQ+PGRpdiBjbGFzcz0iZ21haWxfcXVvdGUiPjxkaXYgZGlyPSJsdHIiPk9uIE1vbiwgMjkgT2N0
IDIwMTggYXQgMjA6NTQgUmFsZiBHb21tZXJzICZsdDs8YSBocmVmPSJtYWlsdG86cmFsZi5nb21t
ZXJzQGdtYWlsLmNvbSIgdGFyZ2V0PSJfYmxhbmsiPnJhbGYuZ29tbWVyc0BnbWFpbC5jb208L2E+
Jmd0OyB3cm90ZTo8YnI+PC9kaXY+PGJsb2NrcXVvdGUgY2xhc3M9ImdtYWlsX3F1b3RlIiBzdHls
ZT0ibWFyZ2luOjAgMCAwIC44ZXg7Ym9yZGVyLWxlZnQ6MXB4ICNjY2Mgc29saWQ7cGFkZGluZy1s
ZWZ0OjFleCI+PGRpdiBkaXI9Imx0ciI+PGRpdiBjbGFzcz0iZ21haWxfcXVvdGUiPjxkaXYgZGly
PSJsdHIiPk9uIE1vbiwgT2N0IDI5LCAyMDE4IGF0IDQ6MzEgUE0gQ2hyaXMgQmFya2VyICZsdDs8
YSBocmVmPSJtYWlsdG86Y2hyaXMuYmFya2VyQG5vYWEuZ292IiB0YXJnZXQ9Il9ibGFuayI+Y2hy
aXMuYmFya2VyQG5vYWEuZ292PC9hPiZndDsgd3JvdGU6PGJyPjwvZGl2PjxibG9ja3F1b3RlIGNs
YXNzPSJnbWFpbF9xdW90ZSIgc3R5bGU9Im1hcmdpbjowIDAgMCAuOGV4O2JvcmRlci1sZWZ0OjFw
eCAjY2NjIHNvbGlkO3BhZGRpbmctbGVmdDoxZXgiPjxkaXYgZGlyPSJsdHIiPjxkaXYgY2xhc3M9
ImdtYWlsX2V4dHJhIj48ZGl2IGNsYXNzPSJnbWFpbF9xdW90ZSI+T24gRnJpLCBPY3QgMjYsIDIw
MTggYXQgNzoxMiBQTSwgVHJhdmlzIE9saXBoYW50IDxzcGFuIGRpcj0ibHRyIj4mbHQ7PGEgaHJl
Zj0ibWFpbHRvOnRlb2xpcGhhbnRAZ21haWwuY29tIiB0YXJnZXQ9Il9ibGFuayI+dGVvbGlwaGFu
dEBnbWFpbC5jb208L2E+Jmd0Ozwvc3Bhbj4gd3JvdGU6PGJyPjxkaXY+Jm5ic3A7PC9kaXY+PGJs
b2NrcXVvdGUgY2xhc3M9ImdtYWlsX3F1b3RlIiBzdHlsZT0ibWFyZ2luOjAgMCAwIC44ZXg7Ym9y
ZGVyLWxlZnQ6MXB4ICNjY2Mgc29saWQ7cGFkZGluZy1sZWZ0OjFleCI+PGRpdiBkaXI9Imx0ciI+
PGRpdiBkaXI9Imx0ciI+PGRpdiBkaXI9Imx0ciI+PGRpdiBjbGFzcz0iZ21haWxfcXVvdGUiPjxk
aXY+Jm5ic3A7YWdyZWUgdGhhdCB3ZSBjYW4gc3RvcCBiYXNoaW5nIHN1YmNsYXNzZXMgaW4gZ2Vu
ZXJhbC4mbmJzcDsgJm5ic3A7VGhlIHByb2JsZW0gd2l0aCBudW1weSBzdWJjbGFzc2VzIGlzIHRo
YXQgdGhleSB3ZXJlIG1hZGUgd2l0aG91dCBhZGhlcmVuY2UgdG8gU09MSUQ6Jm5ic3A7Jm5ic3A7
PGEgaHJlZj0iaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU09MSUQiIHRhcmdldD0iX2Js
YW5rIiBkYXRhLXNhZmVyZWRpcmVjdHVybD0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS91cmw/cT1o
dHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TT0xJRCZhbXA7c291cmNlPWdtYWlsJmFtcDt1
c3Q9MTU0MDk2MTAxOTU0MTAwMCZhbXA7dXNnPUFGUWpDTkcyOTY0R014SlpqOUhFelZCM05xVWpz
ZlZUUEEiPmh0dHBzOi8vZW4ud2lraXBlZGlhLjx3YnI+b3JnL3dpa2kvU09MSUQ8L2E+LiZuYnNw
OyBJbiBwYXJ0aWN1bGFyIHRoZSBMaXNrb3Ygc3Vic3RpdHV0aW9uIHByaW5jaXBsZTombmJzcDsg
PGEgaHJlZj0iaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTGlza292X3N1YnN0aXR1dGlv
bl9wcmluY2lwbGUiIHRhcmdldD0iX2JsYW5rIiBkYXRhLXNhZmVyZWRpcmVjdHVybD0iaHR0cHM6
Ly93d3cuZ29vZ2xlLmNvbS91cmw/cT1odHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9MaXNr
b3Zfc3Vic3RpdHV0aW9uX3ByaW5jaXBsZSZhbXA7c291cmNlPWdtYWlsJmFtcDt1c3Q9MTU0MDk2
MTAxOTU0MTAwMCZhbXA7dXNnPUFGUWpDTkhoUVl3b2h6R1VGaW5MWVRhdTNjLWhQTE1QaUEiPmh0
dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpLzx3YnI+TGlza292X3N1YnN0aXR1dGlvbl9wcmlu
Y2lwbGU8L2E+IC4mbmJzcDs8L2Rpdj48L2Rpdj48L2Rpdj48L2Rpdj48L2Rpdj48L2Jsb2NrcXVv
dGU+PGRpdj48YnI+PC9kaXY+PGRpdj4uLi48L2Rpdj48ZGl2PiZuYnNwOzwvZGl2PjxibG9ja3F1
b3RlIGNsYXNzPSJnbWFpbF9xdW90ZSIgc3R5bGU9Im1hcmdpbjowIDAgMCAuOGV4O2JvcmRlci1s
ZWZ0OjFweCAjY2NjIHNvbGlkO3BhZGRpbmctbGVmdDoxZXgiPjxkaXYgZGlyPSJsdHIiPjxkaXYg
ZGlyPSJsdHIiPjxkaXYgZGlyPSJsdHIiPjxkaXYgY2xhc3M9ImdtYWlsX3F1b3RlIj48ZGl2PiBk
aWQgbm90IHByb3Blcmx5IGFwcGx5IHRoZW0gaW4gY3JlYXRpbmcgbnAubWF0cml4IHdoaWNoIGNs
ZWFybHkgdmlvbGF0ZXMgdGhlIHN1YnN0aXR1dGlvbiBwcmluY2lwbGUuJm5ic3A7PC9kaXY+PC9k
aXY+PC9kaXY+PC9kaXY+PC9kaXY+PC9ibG9ja3F1b3RlPjxkaXY+PGJyPjwvZGl2PjxkaXY+U28g
LS0gY291bGQgYSBtYXRyaXggc3ViY2xhc3MgYmUgbWFkZSAicHJvcGVybHkiPyBvciBpcyB0aGF0
IGFuIGV4YW1wbGUgb2Ygc29tZXRoaW5nIHRoYXQgc2hvdWxkIG5vdCBoYXZlIGJlZW4gYSBzdWJj
bGFzcz88L2Rpdj48L2Rpdj48L2Rpdj48L2Rpdj48L2Jsb2NrcXVvdGU+PGRpdj48YnI+PC9kaXY+
PC9kaXY+PC9kaXY+PGRpdiBkaXI9Imx0ciI+PGRpdiBjbGFzcz0iZ21haWxfcXVvdGUiPjxkaXY+
VGhlIGxhdHRlciAtIGNoYW5naW5nIHRoZSBiZWhhdmlvciBvZiBtdWx0aXBsaWNhdGlvbiBicmVh
a3MgdGhlIHByaW5jaXBsZS48L2Rpdj48L2Rpdj48L2Rpdj48ZGl2IGRpcj0ibHRyIj48ZGl2IGNs
YXNzPSJnbWFpbF9xdW90ZSI+PGRpdj48YnI+PC9kaXY+PGRpdj5SYWxmPC9kaXY+PGRpdj48YnI+
PC9kaXY+PC9kaXY+PC9kaXY+Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fXzx3YnI+X19f
X19fX19fX19fX19fX188YnI+Ck51bVB5LURpc2N1c3Npb24gbWFpbGluZyBsaXN0PGJyPgo8YSBo
cmVmPSJtYWlsdG86TnVtUHktRGlzY3Vzc2lvbkBweXRob24ub3JnIiB0YXJnZXQ9Il9ibGFuayI+
TnVtUHktRGlzY3Vzc2lvbkBweXRob24ub3JnPC9hPjxicj4KPGEgaHJlZj0iaHR0cHM6Ly9tYWls
LnB5dGhvbi5vcmcvbWFpbG1hbi9saXN0aW5mby9udW1weS1kaXNjdXNzaW9uIiByZWw9Im5vcmVm
ZXJyZXIiIHRhcmdldD0iX2JsYW5rIiBkYXRhLXNhZmVyZWRpcmVjdHVybD0iaHR0cHM6Ly93d3cu
Z29vZ2xlLmNvbS91cmw/cT1odHRwczovL21haWwucHl0aG9uLm9yZy9tYWlsbWFuL2xpc3RpbmZv
L251bXB5LWRpc2N1c3Npb24mYW1wO3NvdXJjZT1nbWFpbCZhbXA7dXN0PTE1NDA5NjEwMTk1NDEw
MDAmYW1wO3VzZz1BRlFqQ05GX0h0Nk00YnJ4SXdsTXp1THBQdWJ1dUdXXzR3Ij5odHRwczovL21h
aWwucHl0aG9uLm9yZy88d2JyPm1haWxtYW4vbGlzdGluZm8vbnVtcHktPHdicj5kaXNjdXNzaW9u
PC9hPjxicj4KPC9ibG9ja3F1b3RlPjwvZGl2PjwvZGl2PjwvZGl2PjwvZGl2Pg==" style="height:0;width:0;max-height:0;max-width:0;overflow:hidden;font-size:0em;padding:0;margin:0">​</div></div></div>