bugGNU Octave - Bugs: bug #41428, Add an &~ binary operator


bug #41428: Add an &~ binary operator

Submitter:  David Spies <dspyz>
Submitted:  Sun 02 Feb 2014 05:11:38 AM UTC
Category:  Octave Function Severity:  1 - Wish
Priority:  3 - Low Item Group:  Feature Request
Status:  Patch Submitted Assigned to:  dbateman
Originator Name:  Open/Closed:  * Open
Release:  * dev Operating System:  * Any
Fixed Release:  None Planned Release:  None
* Mandatory Fields

Add a New Comment Rich Markup

Jump to the original submission

Wed 05 Feb 2014 11:01:33 PM UTC, comment #7: 

Well I implemented the code for the el_not_and, el_not_or, el_and_not and el_or_not operators and a changeset is attached.

However, it seems that Jaroslav never implemented the tree_compound_binary_expression::rvalue method and so the compound operators are in fact never called. I can, and have, added this method and get these compound operators to work, but in doing so I a lot of code for full matrix compound operators that is currently dead will start being used including for operators like mul_trans, herm_ldiv etc. So this change comes with a risk that this currently dead code has errors in it. I hesitate to apply it without a bit of testing, though "make check" seems to pass correctly


(file #30466)

David Bateman <dbateman>
Group Member
Mon 03 Feb 2014 08:06:32 PM UTC, comment #6: 

I'm not proposing to add the operators as that are already there. I believe Micheal added them a couple of years ago. Look in ov.h(enum compound_binary_ops). The operators


are already defined and used for full matrices. I have a first try of the operators op_el_not_and, op_el_not_or, op_el_and_not and op_el_or_not written for scalar-sparse, sparse-scalar, full-sparse, sparse-full and sparse-sparse with the exception of op_el_not_or and op_el_or_not for sparse-sparse binary operators as I can't see a way of efficently implementing that.I just need to debug it as it doesn't quite work yet ;-)


PS: I was probably optomistic for the effort needed to implement the other compound operators though UMFPACK and CHOLMOD seem to natively support the transpose and hermitian version of the solvers

David Bateman <dbateman>
Group Member
Mon 03 Feb 2014 05:00:37 PM UTC, comment #5: 

For this Feature Request, I was really just asking about 'and_not'.  If implementing or_not at the same time is convenient, then by all means go ahead, but it's not something that can be used practically with sparse matrices anyway (or optimized for full matrices as far as I know).

Many bitset libraries include 'and, or, xor, and_not', as these are the set of binary boolean operators (up to swapping the inputs) for which (0,0) -> 0, but I don't know of any particular implementations or uses of or_not.

Also, by not_or and not_and, do you mean nor and nand or do you mean r(or_not) and r(and_not)  (like rmul and rdiv)?

David Spies <dspyz>
Mon 03 Feb 2014 04:39:55 PM UTC, comment #4: 

I was proposing a new operator, but only because I didn't know it was possible to specially handle a recognized sequence.  Yes, of course it would be better to handle & and ~ together specially if possible (since it may optimize existing code).

But, I still think it is important to have the functional equivalent so that it can be used with bsxfun (that is, once http://savannah.gnu.org/bugs/?41441 is resolved)

David Spies <dspyz>
Mon 03 Feb 2014 04:26:38 PM UTC, comment #3: 

David, are you proposing adding new operators, or just recognizing the sequence of operators and handling them specially as is done for the other compound operators?

I would rather not introduce new syntax.

John W. Eaton <jwe>
Group administrator
Sun 02 Feb 2014 11:49:35 PM UTC, comment #2: 

Do we want to also provide the functional equivalents such as and_not, or_not in the same way that we provide functional forms of the operators 'and' and 'or'.  Or is it enough for people to call

and (a, not(b))

Rik <rik5>
Group administrator
Sun 02 Feb 2014 05:19:36 PM UTC, comment #1: 

The compound operators not_and, not_or, an_not and or_not exist already in octave and are used for full matrices. Its just a matter of slightly modifying a couple of macros in Sparse-op-defs.h, instatiating these functions and then installing the associated binary operators in the op-sm-sm.cc, etc. I've started doing this and should have a patch shortly

We should probably also treat the other compound operators trans_mul, mul_trans, herm_mul, mul_herm, trans_ldiv and herm_ldiv as well. Seems like a nice little project so I'll try to do this at the same time


David Bateman <dbateman>
Group Member
Sun 02 Feb 2014 05:11:38 AM UTC, original submission:  

In pretty much every project I write, I always end up writing an andnot.m

function [r] = andnot(a,b)
  a(logical(b)) = false
  r = logical(a)

It comes up consistently with logical operations and if you're dealing with sparse matrices, you can't say a & ~b without invoking an OOM

David Spies <dspyz>


(Note: upload size limit is set to 16384 kB, after insertion of the required escape characters.)

Attach Files:

Attached Files
file #30466:  patch.compound_ops added by dbateman (34KiB - application/octet-stream)


Depends on the following items: None found

Items that depend on this one: None found


Carbon-Copy List
  • -email is unavailable- added by jwe (Posted a comment)
  • -email is unavailable- added by rik5 (Posted a comment)
  • -email is unavailable- added by dbateman (Posted a comment)
  • -email is unavailable- added by dspyz (Submitted the item)

    There are 0 votes so far. Votes easily highlight which items people would like to see resolved in priority, independently of the priority of the item set by tracker managers.

    Only project members can vote.


    Follow 6 latest changes.

    Date Changed by Updated Field Previous Value => Replaced by
    2014-02-05 dbateman Attached File- Added patch.compound_ops, #30466
        StatusIn Progress Patch Submitted
    2014-02-03 jwe Severity3 - Normal 1 - Wish
        Priority5 - Normal 3 - Low
    2014-02-02 rik5 StatusNone In Progress
    2014-02-02 dbateman Assigned toNone dbateman

    Back to the top

    Powered by Savane 3.12.
    Corresponding source code