[Numpy-discussion] Created NumPy 1.7.x branch
Dag Sverre Seljebotn
d.s.seljebotn at astro.uio.no
Sat Jun 23 03:34:28 EDT 2012
On 06/23/2012 09:32 AM, Dag Sverre Seljebotn wrote:
> On 06/23/2012 05:14 AM, Charles R Harris wrote:
>>
>>
>> On Fri, Jun 22, 2012 at 2:42 PM, Travis Oliphant<travis at continuum.io
>> <mailto:travis at continuum.io>> wrote:
>>
>>>
>>> The usual practice is to announce a schedule first.
>>
>> I just did announce the schedule.
>>
>>
>> What has been done in the past is that an intent to fork is announced
>> some two weeks in advance so that people can weigh in on what needs to
>> be done before the fork. The immediate fork was a bit hasty. Likewise,
>> when I suggested going to the github issue tracking, I opened a
>> discussion on needed tags, but voila, there it was with an incomplete
>> set and no discussion. That to seemed hasty.
>>
>>>
>>> There is time before the first Release candidate to make
>>> changes on the 1.7.x branch. If you want to make the changes
>>> on master, and just indicate the Pull requests, Ondrej can
>>> make sure they are added to the 1.7.x. branch by Monday. We
>>> can also delay the first Release Candidate by a few days to
>>> next Wednesday and then bump everything 3 days if that will
>>> help. There will be a follow-on 1.8 release before the end
>>> of the year --- so there is time to make changes for that
>>> release as well. The next release will not take a year to
>>> get out, so we shouldn't feel pressured to get *everything* in
>>> this release.
>>>
>>>
>>> What are we going to do for 1.8?
>>
>> Let's get 1.7 out the door first.
>>
>>
>> Mark proposed a schedule for the next several releases, I'd like to know
>> if we are going to follow it.
>>
>>
>>>
>>> Yes, the functions will give warnings otherwise.
>>
>> I think this needs to be revisited. I don't think these changes are
>> necessary for *every* use of macros. It can cause a lot of effort
>> for people downstream without concrete benefit.
>>
>>
>> The idea is to slowly move towards hiding the innards of the array type.
>> This has been under discussion since 1.3 came out. It is certainly the
>> case that not all macros need to go away.
>>
>>
>>>
>>> That's not as nice to type.
>>>
>>>
>>> So? The point is to have correctness, not ease of typing.
>>
>> I'm not sure if a pun was intended there or not. C is not a safe
>> and fully-typed system. That is one of its weaknesses according
>> to many. But, I would submit that not being forced to give
>> everything a "type" (and recognizing the tradeoffs that implies) is
>> also one reason it gets used.
>>
>>
>> C was famous for bugs due to the lack of function prototypes. This was
>> fixed with C99 and the stricter typing was a great help.
>>
>>
>>
>>>
>>> Is that assuming that PyArray_NDIM will become a function and
>>> need a specific object type for its argument (and everything
>>> else cast....). That's one clear disadvantage of inline
>>> functions versus macros in my mind: no automatic polymorphism.
>>>
>>>
>>> That's a disadvantage of Python. The virtue of inline functions is
>>> precisely type checking.
>>
>> Right, but we need to be more conscientious about this. Not every
>> use of Macros should be replaced by inline function calls and the
>> requisite *forced* type-checking. type-chekcing is not
>> *universally* a virtue --- if it were, nobody would use Python.
>>
>>>
>>> I don't think type safety is a big win for macros like these.
>>> We need to be more judicious about which macros are
>>> scheduled for function inlining. Some just don't benefit from
>>> the type-safety implications as much as others do, and you end
>>> up requiring everyone to change their code downstream for no
>>> real reason.
>>>
>>> These sorts of changes really feel to me like unnecessary
>>> spelling changes that require work from extension writers who
>>> now have to modify their code with no real gain. There seems
>>> to be a lot of that going on in the code base and I'm not
>>> really convinced that it's useful for end-users.
>>>
>>>
>>> Good style and type checking are useful. Numpy needs more of both.
>>
>> You can assert it, but it doesn't make it so. "Good style" depends
>> on what you are trying to accomplish and on your point of view.
>> NumPy's style is not the product of one person, it's been adapted
>> from multiple styles and inherits quite a bit from Python's style.
>> I don't make any claims for it other than it allowed me to write it
>> with the time and experience I had 7 years ago. We obviously
>> disagree about this point. I'm sorry about that. I'm pretty
>> flexible usually --- that's probably one of your big criticisms of
>> my "style".
>>
>>
>> Curiously, my criticism would be more that you are inflexible, slow to
>> change old habits.
>>
>>
>> But, one of the things I feel quite strongly about is how hard we
>> make it for NumPy users to upgrade. There are two specific things
>> I disagree with pretty strongly:
>>
>> 1) Changing defined macros that should work the same on
>> PyArrayObjects or PyObjects to now *require* types --- if we want to
>> introduce new macros that require types than we can --- as long as
>> it just provides warnings but still compiles then I suppose I could
>> find this acceptable.
>>
>> 2) Changing MACROS to require semicolons when they were previously
>> not needed. I'm going to be very hard-nosed about this one.
>>
>>>
>>> I'm going to be a lot more resistant to that sort of change in
>>> the code base when I see it.
>>>
>>>
>>> Numpy is a team effort. There are people out there who write
>>> better code than you do, you should learn from them.
>>
>> Exactly! It's a team effort. I'm part of that team as well, and
>> while I don't always have strong opinions about things. When I do,
>> I'm going to voice it.
>>
>> I've learned long ago there are people that write better code than
>> me. There are people that write better code than you.
>>
>>
>> Of course. Writing code is not my profession, and even if it were, there
>> are people out there who would be immeasurable better. I have tried to
>> improve my style over the years by reading books and browsing code by
>> people who are better than me. I also recognize common bad habits naive
>> coders tend to pick up when they start out, not least because I have at
>> one time or another had many of the same bad habits.
>>
>> That is not the question here at all. The question here is not
>> requiring a *re-write* of code in order to get their extensions to
>> compile using NumPy headers. We should not be making people
>> change their code to get their extensions to compile in NumPy 1.X
>>
>>
>> I think a bit of rewrite here and there along the way is more palatable
>> than a big change coming in as one big lump, especially if the changes
>> are done with a long term goal in mind. We are working towards a Numpy
>> 2, but we can't just go off for a year or two and write it, we have to
>> get there step by step. And that requires a plan.
>
> To me you sound like you expect that people just need to change, say,
>
> PyArray_SHAPE(obj)
>
> to
>
> PyArray_SHAPE((PyArrayObject*)obj)
>
> But that's not the reality. The reality is that most users of the NumPy
> C API are required to do:
>
> #if WHATEVERNUMPYVERSIONDEFINE> 0x...
> PyArray_SHAPE(obj)
> #else
> PyArray_SHAPE((PyArrayObject*)obj)
> #endif
>
> or, perhaps, PyArray_SHAPE(CAST_IF_NEW_NUMPY obj).
Whoops. Terribly sorry, bad example -- I guess fixes to the users code
would make it work with any NumPy version.
And I guess an extra semicolon never hurts for the macros either?
So by now I wish I could retract that post. Realized it five seconds too
late :-)
Dag
>
> Or perhaps write a shim wrapper to insulate themselves from the NumPy API.
>
> At least if you want to cleanly compile against all the last ~3 versions
> of NumPy cleanly without warnings -- which any good developer wishes
> (unless there are *features* in newer versions that make a hard
> dependency on the newest version logical). Thus, cleaning up the NumPy
> API makes users' code much more ugly and difficult to read.
>
> "Gradual changes along the way" means there will be lots of different
> #if tests like that, which is at least harder to remember and work with
> than a single #if test for 1.x vs 2.x.
>
> Dag
> _______________________________________________
> NumPy-Discussion mailing list
> NumPy-Discussion at scipy.org
> http://mail.scipy.org/mailman/listinfo/numpy-discussion
More information about the NumPy-Discussion
mailing list