Looking for good tutorials after reading "Byte of Python"
My main goal is to do web development with Django/flask or another framework that suits me best. But I think that I should learn a bit more of Python before diving into a framework. I would like to know if anyone has some good tutorials like building a to-do list app or any other type of programs so I can learn by doing and also as a guiding kinda thing. Thanks in advance. P.S. excuse my poor english. -- http://mail.python.org/mailman/listinfo/python-list
mod_python friendly isps in europe
Hello everybody I'm thinking about improving my web site scripts and would like to use Python instead of PHP/Perl. Does anyone know of mod_python friendly ISPs in europe? With prices around 10 ? Thanks in advance, Paulo -- http://mail.python.org/mailman/listinfo/python-list
High Level FTP library
Hello, Is there any Python library similar to NET::FTP from Perl? ftplib seems too lowlevel. I already found a few, but would like to get one that is endorsed by the community. Thanks, Paulo -- http://mail.python.org/mailman/listinfo/python-list
What happened to SPE?
Hi, does anyone know what happened to SPE? It seems that the address http://pythonide.stani.be is no longer valid. :( Thanks in advance, Paulo -- http://mail.python.org/mailman/listinfo/python-list
Re: What happened to SPE?
Hi, Thanks for the feedback. Paulo -- http://mail.python.org/mailman/listinfo/python-list
Newbie Question: Can't multiply sequence by non-int of type 'str'
Hi, I'm just learning the very basics of python and I ran into this problem in version 3.0/3000: >>>x = input("x: ") x: 36 >>> y = input("y: ") y: 42 >>> print (x*y) Traceback (most recent call last): File "", line 1, in print (x*y) TypeError: can't multiply sequence by non-int of type 'str' But when I run the same code with Python 2.6.1 it does prints the result. Is there any special function that I should add in order to work properly under Python 3.0? Thanks, Paulo Repreza -- http://mail.python.org/mailman/listinfo/python-list
Re: Newbie Question: Can't multiply sequence by non-int of type 'str'
Hi, Thanks for your reply. It worked. Paulo Repreza On Sat, Jan 31, 2009 at 4:25 PM, Robert Kern wrote: > On 2009-01-31 18:19, Paulo Repreza wrote: > >> Hi, >> I'm just learning the very basics of python and I ran into this problem >> in version 3.0/3000: >> >>>x = input("x: ") >> x: 36 >> >>> y = input("y: ") >> y: 42 >> >>> print (x*y) >> Traceback (most recent call last): >> File "", line 1, in >> print (x*y) >> TypeError: can't multiply sequence by non-int of type 'str' >> But when I run the same code with Python 2.6.1 it does prints the result. >> > > In Python 3.0, the 2.x input() function, which evaluates the string, was > removed, and the 2.x raw_input() function, which just returns the string > that was entered, was renamed to input(). > > Is there any special function that I should add in order to work >> properly under Python 3.0? >> > > x = int(input('x: ')) > y = int(input('y: ')) > > -- > Robert Kern > > "I have come to believe that the whole world is an enigma, a harmless > enigma > that is made terrible by our own mad attempt to interpret it as though it > had > an underlying truth." > -- Umberto Eco > > -- > http://mail.python.org/mailman/listinfo/python-list > -- http://mail.python.org/mailman/listinfo/python-list
String Format Error.
Hi, I'm a newbie with python and I recently bought Beginning with Python (Which is a book I recommend) but the problem that I'm facing it's the following: *This is the code: * #!/usr/bin/python2.5 # Filename: str_format.py age = 25 name = 'foobar' print('{0} is {1} years old'.format(name, age)) print('Why is {0} playing with that python?'.format(name)) *But when I run the script I receive this error: *Traceback (most recent call last): File "str_format.py", line 7, in print('{0} is {1} years old'.format(name, age)) AttributeError: 'str' object has no attribute 'format' It is an error because of the version that I'm using ? Python 2.5.2 (Debian lenny) Thanks in advance. -- http://mail.python.org/mailman/listinfo/python-list
Re: String Format Error.
Thank You! On Tue, Dec 23, 2008 at 3:49 AM, Steve Holden wrote: > Chris Rebert wrote: > > On Mon, Dec 22, 2008 at 10:19 PM, Paulo Repreza > wrote: > >> Hi, > >> > >> I'm a newbie with python and I recently bought Beginning with Python > (Which > >> is a book I recommend) but the problem that I'm facing it's the > following: > >> > >> This is the code: > >> > >> #!/usr/bin/python2.5 > >> # Filename: str_format.py > >> > >> age = 25 > >> name = 'foobar' > >> > >> print('{0} is {1} years old'.format(name, age)) > >> print('Why is {0} playing with that python?'.format(name)) > >> > >> > >> But when I run the script I receive this error: > >> > >> Traceback (most recent call last): > >> File "str_format.py", line 7, in > >> print('{0} is {1} years old'.format(name, age)) > >> AttributeError: 'str' object has no attribute 'format' > >> > >> > >> It is an error because of the version that I'm using ? Python 2.5.2 > (Debian > >> lenny) > > > > Yes, Python 2.6 or higher is required to use .format() according to > > http://docs.python.org/whatsnew/2.6.html > > > For a replacement that will work in 2.5, see the "%" sign as an operator > (sometimes called "string interpolation"). > > regards > Steve > -- > Steve Holden+1 571 484 6266 +1 800 494 3119 > Holden Web LLC http://www.holdenweb.com/ > > -- > http://mail.python.org/mailman/listinfo/python-list > -- http://mail.python.org/mailman/listinfo/python-list
Menu Interface Problem.
Hi all, I'm having a little problem in my program Menu Interface. Here is the code: - # Improvement of lists-demolists.py **Includes a MENU interface* menu_item = 0 list = [] # Program exits until 'menu_item = 9' while menu_item != 9: print '-' print '1. Print the list.' print '2. Add a name to the list.' print '3. Remove a name from the list.' print '4. Change an item in the list.' print '9. Quit' menu_item = input('Pick an item from the menu: ') # TO-DO for option '1'. if menu_item == 1: current = 0 if len(list) > 0: while current < len(list): print current,'. ',list[current] current = current + 1 else: print 'List is empty.' # TO-DO for option '2'. elif menu_item == 2: name = raw_input('Type in a name to add: ') list.append(name) # TO-DO for option '3'. elif menu_item == 3: del_name = raw_input('What name would you like to remove: ') if del_name in list: item_number = list.index(del_name) del list[item_number] # The code above only removes the first occurance of # the name. The code below from G removes all. # while del_name in list: # item_number = list.inder(del_name) # del list[item_number] else: print del_name, 'was not found.' # TO-DO for option '4'. elif menu_item == 4: old_name = raw_input('What name would you like to change: ') if old_name in list: item_number = list.index(old_name) new_name = raw_input('What is the new name: ') list[item_number] = new_name else: print old_name, ' was not found.' print "Goodbye" - Well the program runs, but my issue it's when I try to enter a letter instead of a number (I do this to check if I will see the Menu regarding if I enter a wrong character) but when I enter a character(string) I get this: Pick an item from the menu: f Traceback (most recent call last): File "lists-improve-demolists.py", line 14, in menu_item = input('Pick an item from the menu: ') File "", line 1, in NameError: name 'f' is not defined --- I've noticed that the 'menu_option; var' it's not a string so that's why I see this error, but I tryed by doing str(menu_option) and it works, but when I enter a digit 1, 2, 3, 4, 9 it won't take me to that particular option, instead it shows the menu all over again and the only way I can exit the program is by doing ctrl + C. Any hint on how I can change the code in order for me to use the menu regarding if is a string or an integer (menu_option)? Thank You! Paulo Repreza -- http://mail.python.org/mailman/listinfo/python-list
DataObjects
Please, let me know if this library is useful or not: http://code.google.com/p/python-dataobjects/ []s Paulo -- http://mail.python.org/mailman/listinfo/python-list
Re: debian apt somehow created python hell! - help
Hi, Try this. # aptitude update # aptitude update # aptitude upgrade you can also use # aptitude safe-upgrade Hope it helps. Paulo Repreza On May 1, 2009 7:20 PM, "watermod" wrote: I was doing one of those auto apt-get gui things with update manager in Debian and not watching the error log so I don't know where it started. It involves only Python stuff. I don't know Python but apps use it. The current apt state is that python apps are failing install in: /usr/sbin/update-python-modules typical error list looks like: dpkg: warning - old pre-removal script returned error exit status 1 dpkg - trying script from the new package instead ... WARNING: python-gtk2-doc.private does not exist. Some bytecompiled files may be left behind. Traceback (most recent call last): File "/usr/sbin/update-python-modules", line 437, in public_packages[package].install(need_postinstall) File "/usr/sbin/update-python-modules", line 232, in __getitem__ self[name] = SharedFileList (path) File "/usr/sbin/update-python-modules", line 146, in __init__ for line in file(path): IOError: [Errno 21] Is a directory dpkg: error processing /var/cache/apt/archives/python-gtk2- doc_2.14.1-2_all.deb (--unpack): subprocess new pre-removal script returned error exit status 1 Traceback (most recent call last): File "/usr/sbin/update-python-modules", line 437, in public_packages[package].install(need_postinstall) File "/usr/sbin/update-python-modules", line 232, in __getitem__ self[name] = SharedFileList (path) File "/usr/sbin/update-python-modules", line 146, in __init__ for line in file(path): IOError: [Errno 21] Is a directory dpkg: error while cleaning up: on and on and on The following: dpkg -C gives: The following packages are in a mess due to serious problems during installation. They must be reinstalled for them (and any packages that depend on them) to function properly: python-reportbug Python modules for interacting with bug tracking systems lsb-release Linux Standard Base version reporting utility python-ogg Python interface to the Ogg library system-config-lvmA utility for graphically configuring Logical Volumes bitpim utility to communicate with many CDMA phones bitpim-lib architecture-dependent helper files for BitPim python-glade2GTK+ bindings: Glade support python-gtk2 Python bindings for the GTK+ widget set python-feedparserUniversal Feed Parser for Python python-gtk2-doc Python bindings for the GTK+ widget set - documentation k3d 3D modeling and animation system The following packages have been unpacked but not yet configured. They must be configured using dpkg --configure or the configure menu option in dselect for them to work: acroread-plugins Plugins for Adobe Acrobat(R) Reader python-roman module for generating/analyzing Roman numerals python-soappySOAP Support for Python python-glpk Python bindings to the GNU Linear Programming Kit python-dialogPython module for making simple Text/Console-mode user in python-biggles Scientific plotting package for Python python-gdPython module wrapper for libgd python-clutter Open GL based interactive canvas library - Python binding python-decoratortools version-agnostic decorators support for Python python-fpconst Utilities for handling IEEE 754 floating point special va acroread-datadata files for acroread python-galago-gtkGTK+ widgets for the Galago presence library (Python inte python-utmp python module for working with utmp python-debianbts Python interface to Debian's Bug Tracking System python-gobject-dev Development headers for the GObject Python bindings acroread-escript Adobe EScript Plug-In python-dhm collection of Python utilities / helper python-unit unit test framework for Python acpidUtilities for using ACPI power management python-sqlalchemySQL toolkit and Object Relational Mapper for Python python-gnutlsPython wrapper for the GNUTLS library python-xlib Interface for Python to the X11 Protocol acroread Adobe Acrobat Reader: Portable Document Format file viewe python-pyinotify simple Linux inotify Python bindings python-facebook Python wrappers for the Facebook API reportbugreports bugs in the Debian distribution python-ll-core Python modules for colors, make, cron, daemons, URLs, tem python-beakerSimple WSGI middleware that uses the Myghty Container API python-xcbgenX C Binding - protocol binding generator libroot-dev Header files for ROOT python-dcop DCOP bindings for Python python-docutils utilities for the documentation of Python modules libroot-python-dev Python exten
Loop problem while generating a new value with random.randint()
Greetings, I'm having problems with a little script that I'm trying to finish, I don't know if I'm in the right track but I know somebody is going to help me. The script: # Import modules random for function randint import random # Generating a constant. var = 65 # Generating a random number. ranum = random.randint(1,100) #Creating while loop. Stops until var == ranum while var != ranum: if var == ranum: print var, 'equals to:', ranum else: print var, 'does not equal to:', ranum ## End of Script ### What I'm trying to do is to print the new value that ranum generates if the condition is not met. So far if you run the script it prints the same value over and over again, making in an infinite loop. What can I do in order to print out the new value generated every time the condition is not met? Thanks! Paulo Repreza -- http://mail.python.org/mailman/listinfo/python-list
Re: Loop problem while generating a new value with random.randint()
Thanks for the help! Using while True helps alot! Paulo Repreza -- http://mail.python.org/mailman/listinfo/python-list
Re: Iterate from 2nd element of a huge list
Em 01-02-2012 01:39, Paulo da Silva escreveu: > Hi! > > What is the best way to iterate thru a huge list having the 1st element > a different process? I.e.: > > process1(mylist[0]) > for el in mylist[1:]: > process2(el) > > This way mylist is almost duplicated, isn't it? > > Thanks. I think iter is nice for what I need. Thank you very much to all who responded. -- http://mail.python.org/mailman/listinfo/python-list
Re: Iterate from 2nd element of a huge list
Em 01-02-2012 03:16, Paulo da Silva escreveu: > Em 01-02-2012 01:39, Paulo da Silva escreveu: >> Hi! >> >> What is the best way to iterate thru a huge list having the 1st element >> a different process? I.e.: >> >> process1(mylist[0]) >> for el in mylist[1:]: >> process2(el) >> >> This way mylist is almost duplicated, isn't it? >> >> Thanks. > > > I think iter is nice for what I need. > Thank you very much to all who responded. BTW, iter seems faster than iterating thru mylist[1:]! -- http://mail.python.org/mailman/listinfo/python-list
Re: Iterate from 2nd element of a huge list
Em 01-02-2012 04:55, Cameron Simpson escreveu: > On 01Feb2012 03:34, Paulo da Silva wrote: > | BTW, iter seems faster than iterating thru mylist[1:]! > > I would hope the difference can be attributed to the cost of copying > mylist[1:]. I don't think so. I tried several times and the differences were almost always consistent. I put mylist1=mylist[1:] outside the time control. iter still seems a little bit faster. Running both programs several times (1000 elements list) I only got iter being slower once! But, of course, most of the difference comes from the copy. -- http://mail.python.org/mailman/listinfo/python-list
setup.py for an extension
Hi all. I have a python extension (bindings for a C lib - no swig) and I would like to write a setup.py to build a source distribution pack. The extension consists of 3 files: foo.h foo.c foo.py that are placed in a eclipse directory /home//ECLIPSE/workspace/ext/src foo.h+foo.c are to be compiled into _foo.so shared lib. _foo.so is itself a module only called from foo.py. The dir I wrote the setup.py is any arbitrary dir. I don't want to put packaging stuff into the eclipse source. I read the docs but have no idea on how to do this. Some tentatives I did completely failed. Any help? Thanks in advance. -- http://mail.python.org/mailman/listinfo/python-list
Multiple process output
Hi all, I am have a function which executes a command in the shell. The stdout and stderr of the command should be multipled to two strings for stdout and stderr respectively and stdout and stderr of the current process respectively. I have done like this: from subprocess import Popen, PIPE, STDOUT from select import select from os import read from sys import stdout, stderr def communicate(p): """ Multiplex the subprocess stdout/stderr to the process stdout/stderr and a tuple of strings """ output = [] errput = [] while True: (ready_to_read, _, _) = select([p.stdout, p.stderr], [], []) dataout = "" dataerr = "" if p.stdout in ready_to_read: dataout = read(p.stdout.fileno(), 1024) stdout.write(dataout) output.append(dataout) if p.stderr in ready_to_read: dataerr = read(p.stderr.fileno(), 1024) stderr.write(dataerr) errput.append(dataerr) if dataout == "" and dataerr == "": p.stdout.close() p.stderr.close() break return (''.join(output), ''.join(errput)) def exe(s, cwd=None, output_command=True): if output_command: print s p = Popen(s, stdin=None, stdout=PIPE, stderr=PIPE, shell=True, cwd=cwd) (output, err) = communicate(p) rc = p.wait() return (rc, output, err) Unfortunately, the program is _sometimes_ but not always getting stuck on the call to select. I don't really understand when this happens. Any suggestions to the above code so select doesn't block the function? Cheers, -- PMatos -- http://mail.python.org/mailman/listinfo/python-list
pyplot: change the number of x labels (from 6)
Hi all. I want to have dates as major ticks labels of X axis. This fragment of code works fine except that I need more dates to appear instead the 6 I am getting. The number of dates in dtsd is for ex. 262. Thanks for any help. BTW, I got most of this code from some site on the internet. ... fig=plt.figure(figsize=(12,9)) gs=gridspec.GridSpec(2,1,height_ratios=[4,1]) ... ax0=plt.subplot(gs[0]) ... plt.xlim(-0.1,dts[-1]+0.1) dtsd=pd.to_datetime(ds.getIndexes()) def format_date(x,__pos=None): thisind=np.clip(int(x+0.5),0,dtslen-1) return dtsd[thisind].strftime('%Y-%m-%d') ax0.xaxis.set_major_formatter(ticker.FuncFormatter(format_date)) fig.autofmt_xdate() ... -- https://mail.python.org/mailman/listinfo/python-list
Re: pyplot: change the number of x labels (from 6)
Às 09:17 de 10-01-2018, Thomas Jollans escreveu: On 2018-01-10 05:22, Paulo da Silva wrote: Hi all. ... It's a bit hard to tell without a working example, but I think you'll want to set a tick locator, e.g. something like ax0.xaxis.set_major_locator(matplotlib.ticker.MultipleLocator(1)) Basically I have a list of hundred of dates (one per point) and I want few of them, to fill the X axis. This should be simple! The code I have (too complex for the task, btw), from the internet, does exactly that, including presenting them 45º oriented, but only presents 5 or 6 dates. I want more, perhaps 12. Read this: https://matplotlib.org/api/ticker_api.html The old-fashioned way would be to set to tick locations manually with https://matplotlib.org/api/_as_gen/matplotlib.axes.Axes.set_xticks.html Yes, I need to look at this ... Thank you. -- https://mail.python.org/mailman/listinfo/python-list
pandas (in jupyter?) problem
Hi all! I'm having the following problem. Consider the code (the commented or the not commented which I think do the same things): #for col in missing_cols: #df[col] = np.nan df=df.copy() df[missing_cols]=np.nan df has about 2 cols and len(missing_cols) is about 18000. I'm getting lots (1 by missing_col?) of the following message from ipykernel: "PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()` df[missing_cols]=np.nan" At first I didn't have df=df.copy(). I added it later, but the same problem. This slows down the code a lot, perhaps because jupyter is taking too much time issuing these messages! Thanks for any comments. -- https://mail.python.org/mailman/listinfo/python-list
Re: What's up with modern Python programmers rewriting everything in Rust?
Às 16:40 de 20/06/22, Dennis Lee Bieber escreveu: On Mon, 20 Jun 2022 15:54:29 +0100, Paulo da Silva declaimed the following: Às 15:07 de 19/06/22, jan Anja escreveu: Dude, it's called CPython for a reason. IMHO CPython means Core Python, not C Python. It is, as I recall, a term for the reference implementation of Python, which was written in C... In contrast to things like Jython -- Python implemented using Java. Yes, it is a reference. That's why it is called "Core Python". The "C" has nothing to do with the C programming language. It may well be written in any language. So far it is "C" language. -- https://mail.python.org/mailman/listinfo/python-list
Re: What's up with modern Python programmers rewriting everything in Rust?
Às 15:07 de 19/06/22, jan Anja escreveu: Dude, it's called CPython for a reason. IMHO CPython means Core Python, not C Python. -- https://mail.python.org/mailman/listinfo/python-list
Re: "CPython"
Às 18:19 de 20/06/22, Stefan Ram escreveu: The same personality traits that make people react to troll postings might make them spread unconfirmed ideas about the meaning of "C" in "CPython". The /core/ of CPython is written in C. CPython is the /canonical/ implementation of Python. The "C" in "CPython" stands for C. Not so "unconfirmed"! Look at this article, I recently read: https://www.analyticsinsight.net/cpython-to-step-over-javascript-in-developing-web-applications/ There is a sentence in ther that begins with "CPython, short for Core Python, a reference implementation that other Python distributions are derived from, ...". Anyway, I wrote "IMHO". Do you have any credible reference to your assertion "The "C" in "CPython" stands for C."? Thank you. -- https://mail.python.org/mailman/listinfo/python-list
Re: "CPython"
Às 20:01 de 20/06/22, Paulo da Silva escreveu: Às 18:19 de 20/06/22, Stefan Ram escreveu: The same personality traits that make people react to troll postings might make them spread unconfirmed ideas about the meaning of "C" in "CPython". The /core/ of CPython is written in C. CPython is the /canonical/ implementation of Python. The "C" in "CPython" stands for C. Not so "unconfirmed"! Look at this article, I recently read: https://www.analyticsinsight.net/cpython-to-step-over-javascript-in-developing-web-applications/ There is a sentence in ther that begins with "CPython, short for Core Python, a reference implementation that other Python distributions are derived from, ...". Anyway, I wrote "IMHO". Do you have any credible reference to your assertion "The "C" in "CPython" stands for C."? Thank you. Well ... I read the responses and they are not touching the point! I just answered, with my opinion based on articles I have read in the past. Certainly I could not be sure. That's why I responded as an opinion (IMHO) and not as an assertion. Stefan Ram responded with a, at least, not very polite post. That's why I needed to somehow "defend" why I posted that response, and, BTW, trying to learn why he said that the C in CPython means "written in C". I still find very strange, to not say weird, that a compiler or interpreter has a name based in the language it was written. But, again, is just my opinion and nothing more. I rest my case. Thank you all. -- https://mail.python.org/mailman/listinfo/python-list
Re: "CPython"
Às 03:20 de 21/06/22, MRAB escreveu: On 2022-06-21 02:33, Chris Angelico wrote: On Tue, 21 Jun 2022 at 11:13, Paulo da Silva wrote: Às 20:01 de 20/06/22, Paulo da Silva escreveu: > Às 18:19 de 20/06/22, Stefan Ram escreveu: >> The same personality traits that make people react >> to troll postings might make them spread unconfirmed >> ideas about the meaning of "C" in "CPython". >> >> The /core/ of CPython is written in C. >> >> CPython is the /canonical/ implementation of Python. >> >> The "C" in "CPython" stands for C. >> >> > > Not so "unconfirmed"! > Look at this article, I recently read: > https://www.analyticsinsight.net/cpython-to-step-over-javascript-in-developing-web-applications/ > > > There is a sentence in ther that begins with "CPython, short for Core > Python, a reference implementation that other Python distributions are > derived from, ...". > > Anyway, I wrote "IMHO". > > Do you have any credible reference to your assertion "The "C" in > "CPython" stands for C."? > > Thank you. Well ... I read the responses and they are not touching the point! I just answered, with my opinion based on articles I have read in the past. Certainly I could not be sure. That's why I responded as an opinion (IMHO) and not as an assertion. Stefan Ram responded with a, at least, not very polite post. That's why I needed to somehow "defend" why I posted that response, and, BTW, trying to learn why he said that the C in CPython means "written in C". I still find very strange, to not say weird, that a compiler or interpreter has a name based in the language it was written. But, again, is just my opinion and nothing more. Not sure why it's strange. The point is to distinguish "CPython" from "Jython" or "Brython" or "PyPy" or any of the other implementations. Yes, CPython has a special place because it's the reference implementation and the most popular, but the one thing that makes it distinct from all the others is that it's implemented in C. And just to make it clear, the interpreter/compiler _itself_ is still called "python". "CPython" is a name/term that was applied retroactively to that particular implementation when another implementation appeared. Yes, but that does not necessarily means that the C has to refer to the language of implementation. It may well be a "core" reference to distinguish that implementation from others with different behaviors. Let's say they reimplement "reference python" CPython in Rust. What is better? Change the "reference python" CPython name to RPython, for example, or let it as CPython? It's my opinion that it should stay as CPython. After all who cares in which language it is implemented? Regards. Paulo -- https://mail.python.org/mailman/listinfo/python-list
Re: "CPython"
Às 02:33 de 21/06/22, Chris Angelico escreveu: On Tue, 21 Jun 2022 at 11:13, Paulo da Silva wrote: Às 20:01 de 20/06/22, Paulo da Silva escreveu: Às 18:19 de 20/06/22, Stefan Ram escreveu: The same personality traits that make people react to troll postings might make them spread unconfirmed ideas about the meaning of "C" in "CPython". The /core/ of CPython is written in C. CPython is the /canonical/ implementation of Python. The "C" in "CPython" stands for C. Not so "unconfirmed"! Look at this article, I recently read: https://www.analyticsinsight.net/cpython-to-step-over-javascript-in-developing-web-applications/ There is a sentence in ther that begins with "CPython, short for Core Python, a reference implementation that other Python distributions are derived from, ...". Anyway, I wrote "IMHO". Do you have any credible reference to your assertion "The "C" in "CPython" stands for C."? Thank you. Well ... I read the responses and they are not touching the point! I just answered, with my opinion based on articles I have read in the past. Certainly I could not be sure. That's why I responded as an opinion (IMHO) and not as an assertion. Stefan Ram responded with a, at least, not very polite post. That's why I needed to somehow "defend" why I posted that response, and, BTW, trying to learn why he said that the C in CPython means "written in C". I still find very strange, to not say weird, that a compiler or interpreter has a name based in the language it was written. But, again, is just my opinion and nothing more. Not sure why it's strange. The point is to distinguish "CPython" from "Jython" or "Brython" or "PyPy" or any of the other implementations. Notice that they are, for example, Jython and not JPython. There is also Cython that is a different thing. And YES. You have the right to not feel that as strange. Regards Paulo -- https://mail.python.org/mailman/listinfo/python-list
Subtract n months from datetime
Hi! I implemented a part of a script to subtract n months from datetime. Basically I subtracted n%12 from year and n//12 from the month adding 12 months when it goes<=0. Then used try when converting to datetime again. So, if the day is for example 31 for a 30 days month it raises a ValuError exception. Then I subtract 1 to day and repeat. The code seems too naive and very very complicated! What is the best way to achieve this? Any existent module? At the very end, what I want is to subtract nx where x can be y, m, w, d for respectively years, months, weeks or days. I feel I am missing something here ... Thanks. Paulo -- https://mail.python.org/mailman/listinfo/python-list
Re: Subtract n months from datetime
Às 05:44 de 21/06/22, Paul Bryan escreveu: Here's how my code does it: import calendar def add_months(value: date, n: int): """Return a date value with n months added (or subtracted if negative).""" year = value.year + (value.month - 1 + n) // 12 month = (value.month - 1 + n) % 12 + 1 day = min(value.day, calendar.monthrange(year, month)[1]) return date(year, month, day) Paul I have a datetime, not a date. Anyway, the use of calendar.monthrange simplifies the task a lot. Assuming dtnow has the current datetime and dtn the number of months to be subtracted, here is my solution (the code was not cleaned yet - just a test): dtnow_t=list(dtnow.timetuple()[:6]+(dtnow.microsecond,)) y=dtnow_t[0] # y,m,d,*_=dtnow_t seems slower m=dtnow_t[1] d=dtnow_t[2] dy,dm=divmod(dtn,12) y-=dy m-=dm if m<1: m+=12 y-=1 daysinmonth=calendar.monthrange(y,m)[1] d=min(d,daysinmonth) dtnow_t[0]=y dtnow_t[1]=m dtnow_t[2]=d bt=datetime.datetime(*dtnow_t) Any comments are welcome. Thank you. Paulo On Tue, 2022-06-21 at 05:29 +0100, Paulo da Silva wrote: Hi! I implemented a part of a script to subtract n months from datetime. Basically I subtracted n%12 from year and n//12 from the month adding 12 months when it goes<=0. Then used try when converting to datetime again. So, if the day is for example 31 for a 30 days month it raises a ValuError exception. Then I subtract 1 to day and repeat. The code seems too naive and very very complicated! What is the best way to achieve this? Any existent module? At the very end, what I want is to subtract nx where x can be y, m, w, d for respectively years, months, weeks or days. I feel I am missing something here ... Thanks. Paulo -- https://mail.python.org/mailman/listinfo/python-list
Re: Subtract n months from datetime [Why?]
Às 05:29 de 21/06/22, Paulo da Silva escreveu: As a general response to some comments ... Suppose we need to delete records from a database older than ... Today, it's usual to specify days. For example you have to keep some gov papers for 90 days. This seems to come from computers era. In our minds, however, we immediately think 90 days=3 months. For example, one may want to delete some files older than 9 months. It's far more intuitive than 270 days. When we talk about years it is still going. For example I need to keep my receipts for 5 years because IRS audits. Accepting this, it's intuitive, for example, that 3 months before July, 31 is April, 30. The same happens for the years. 5 years before February, 29 is February, 28. Again, this is my opinion and that's the way I like it :-) Regards Paulo -- https://mail.python.org/mailman/listinfo/python-list
Re: Subtract n months from datetime [Why?]
Às 20:25 de 22/06/22, Barry Scott escreveu: On 22 Jun 2022, at 17:59, Paulo da Silva wrote: Às 05:29 de 21/06/22, Paulo da Silva escreveu: As a general response to some comments ... Suppose we need to delete records from a database older than ... Today, it's usual to specify days. For example you have to keep some gov papers for 90 days. This seems to come from computers era. In our minds, however, we immediately think 90 days=3 months. For example, one may want to delete some files older than 9 months. It's far more intuitive than 270 days. When we talk about years it is still going. For example I need to keep my receipts for 5 years because IRS audits. Accepting this, it's intuitive, for example, that 3 months before July, 31 is April, 30. The same happens for the years. 5 years before February, 29 is February, 28. The advantage of 30 days, 90 days etc is that a contract or law does not need to tell you how to deal with the problems of calendar months. As you say in peoples thoughts that 1 month or 3 months etc. But an accounts department will know how to to the number of days till they have to pay up. Yes. But my point is to justify why I want months. And it depends on the application. Let's suppose a program for Joe User to clean something - files, for example. There are no rules except for the comfort of the user. He would prefer to be able to say 9 months back instead of 270 days. And by 9 months, he expects to count down 9 months. Not 270 days. That's what happens with the script I am writing. Paulo -- https://mail.python.org/mailman/listinfo/python-list
Re: Subtract n months from datetime
Às 19:47 de 22/06/22, Marco Sulla escreveu: The package arrow has a simple shift method for months, weeks etc https://arrow.readthedocs.io/en/latest/#replace-shift At first look it seems pretty good! I didn't know it. Thank you Marco. Paulo -- https://mail.python.org/mailman/listinfo/python-list
Find the path of a shell command
Hi! The simple question: How do I find the full path of a shell command (linux), i.e. how do I obtain the corresponding of, for example, "type rm" in command line? The reason: I have python program that launches a detached rm. It works pretty well until it is invoked by cron! I suspect that for cron we need to specify the full path. Of course I can hardcode /usr/bin/rm. But, is rm always in /usr/bin? What about other commands? Thanks for any comments/responses. Paulo -- https://mail.python.org/mailman/listinfo/python-list
Re: Find the path of a shell command
Às 05:00 de 12/10/22, Paulo da Silva escreveu: Hi! The simple question: How do I find the full path of a shell command (linux), i.e. how do I obtain the corresponding of, for example, "type rm" in command line? The reason: I have python program that launches a detached rm. It works pretty well until it is invoked by cron! I suspect that for cron we need to specify the full path. Of course I can hardcode /usr/bin/rm. But, is rm always in /usr/bin? What about other commands? Thank you all who have responded so far. I think that the the suggestion of searching the PATH env seems the best. Another thing that I thought of is that of the 'which', but, to avoid the mentioned recurrent problem of not knowing where 'which' is I would use 'type' instead. 'type' is a bash (sh?) command. Thanks Paulo -- https://mail.python.org/mailman/listinfo/python-list
Re: Find the path of a shell command
Às 17:22 de 12/10/22, Tilmann Hentze escreveu: Paulo da Silva schrieb: I have python program that launches a detached rm. It works pretty well until it is invoked by cron! I suspect that for cron we need to specify the full path. Probably you could use os.unlink[1] with no problem. No, because I need to launch several rm's that keep running after the script ends. -- https://mail.python.org/mailman/listinfo/python-list
Re: Find the path of a shell command
Às 20:16 de 12/10/22, 2qdxy4rzwzuui...@potatochowder.com escreveu: On 2022-10-12 at 17:43:18 +0100, Paulo da Silva wrote: Às 17:22 de 12/10/22, Tilmann Hentze escreveu: Paulo da Silva schrieb: I have python program that launches a detached rm. It works pretty well until it is invoked by cron! I suspect that for cron we need to specify the full path. Probably you could use os.unlink[1] with no problem. No, because I need to launch several rm's that keep running after the script ends. rm doesn't take that long. Why are you detaching them? Because the use of "rm -rf" here is to remove full dirs, mostly in external drives, each reaching more than hundreds thousand files. -- https://mail.python.org/mailman/listinfo/python-list
Re: Find the path of a shell command
Às 19:14 de 12/10/22, Jon Ribbens escreveu: On 2022-10-12, Paulo da Silva wrote: Às 05:00 de 12/10/22, Paulo da Silva escreveu: Hi! The simple question: How do I find the full path of a shell command (linux), i.e. how do I obtain the corresponding of, for example, "type rm" in command line? The reason: I have python program that launches a detached rm. It works pretty well until it is invoked by cron! I suspect that for cron we need to specify the full path. Of course I can hardcode /usr/bin/rm. But, is rm always in /usr/bin? What about other commands? Thank you all who have responded so far. I think that the the suggestion of searching the PATH env seems the best. Another thing that I thought of is that of the 'which', but, to avoid the mentioned recurrent problem of not knowing where 'which' is I would use 'type' instead. 'type' is a bash (sh?) command. If you're using subprocess.run / subprocess.Popen then the computer is *already* searching PATH for you. Yes, and it works out of cron. Your problem must be that your cron job is being run without PATH being set, perhaps you just need to edit your crontab to set PATH to something sensible. I could do that, but I am using /etc/cron.* for convenience. Or just hard-code your program to run '/bin/rm' explicitly, which should always work (unless you're on Windows, of course!) It can also be in /bin, at least. A short idea is to just check /bin/rm and /usr/bin/rm, but I prefer searching thru PATH env. It only needs to do that once. -- https://mail.python.org/mailman/listinfo/python-list
Re: Find the path of a shell command
Às 20:09 de 12/10/22, Antoon Pardon escreveu: Op 12/10/2022 om 18:49 schreef Paulo da Silva: Às 05:00 de 12/10/22, Paulo da Silva escreveu: Hi! The simple question: How do I find the full path of a shell command (linux), i.e. how do I obtain the corresponding of, for example, "type rm" in command line? The reason: I have python program that launches a detached rm. It works pretty well until it is invoked by cron! I suspect that for cron we need to specify the full path. Of course I can hardcode /usr/bin/rm. But, is rm always in /usr/bin? What about other commands? Thank you all who have responded so far. I think that the the suggestion of searching the PATH env seems the best. I fear that won't work. If it doesn't work in cron, that probably means, PATH is not set properly in your cron environment. And if PATH is not set properly, searching it explicitely won't work either. It seems you are right :-( I didn't think of that! Does 'type' bash command work? I don't know how bash 'type' works. I need to do some tests. Thanks Paulo -- https://mail.python.org/mailman/listinfo/python-list
Re: Find the path of a shell command
Às 22:38 de 12/10/22, Jon Ribbens escreveu: On 2022-10-12, Jon Ribbens wrote: On 2022-10-12, Paulo da Silva wrote: Às 19:14 de 12/10/22, Jon Ribbens escreveu: On 2022-10-12, Paulo da Silva wrote: Às 05:00 de 12/10/22, Paulo da Silva escreveu: Hi! The simple question: How do I find the full path of a shell command (linux), i.e. how do I obtain the corresponding of, for example, "type rm" in command line? The reason: I have python program that launches a detached rm. It works pretty well until it is invoked by cron! I suspect that for cron we need to specify the full path. Of course I can hardcode /usr/bin/rm. But, is rm always in /usr/bin? What about other commands? Thank you all who have responded so far. I think that the the suggestion of searching the PATH env seems the best. Another thing that I thought of is that of the 'which', but, to avoid the mentioned recurrent problem of not knowing where 'which' is I would use 'type' instead. 'type' is a bash (sh?) command. If you're using subprocess.run / subprocess.Popen then the computer is *already* searching PATH for you. Yes, and it works out of cron. Your problem must be that your cron job is being run without PATH being set, perhaps you just need to edit your crontab to set PATH to something sensible. I could do that, but I am using /etc/cron.* for convenience. Or just hard-code your program to run '/bin/rm' explicitly, which should always work (unless you're on Windows, of course!) It can also be in /bin, at least. I assume you mean /usr/bin. But it doesn't matter. As already discussed, even if 'rm' is in /usr/bin, it will be in /bin as well (or /usr/bin and /bin will be symlinks to the same place). A short idea is to just check /bin/rm and /usr/bin/rm, but I prefer searching thru PATH env. It only needs to do that once. I cannot think of any situation in which that will help you. But if for some reason you really want to do that, you can use the shutil.which() function from the standard library: >>> import shutil >>> shutil.which('rm') '/usr/bin/rm' Actually if I'm mentioning shutil I should probably mention shutil.rmtree() as well, which does the same as 'rm -r', without needing to find or run any other executables. Except that you can't have parallel tasks, at least in an easy way. Using Popen I just launch rm's and end the script. -- https://mail.python.org/mailman/listinfo/python-list
Re: Find the path of a shell command [POSTPONED]
Às 05:00 de 12/10/22, Paulo da Silva escreveu: Hi! The simple question: How do I find the full path of a shell command (linux), i.e. how do I obtain the corresponding of, for example, "type rm" in command line? The reason: I have python program that launches a detached rm. It works pretty well until it is invoked by cron! I suspect that for cron we need to specify the full path. Of course I can hardcode /usr/bin/rm. But, is rm always in /usr/bin? What about other commands? For now I will postpone this problem. I just wrote a small script to delete a dir using rm and it works even under cron! There is another problem involved. The script, works fine except when launched by cron! Why? I'll have to look into this later when I have more time. For now I solved the problem using a complementary shell script. Thank you very much to those who responded. Paulo -- https://mail.python.org/mailman/listinfo/python-list
A trivial question that I don't know - document a function/method
Hi all! What is the correct way, if any, of documenting a function/method? 1. def foo(a,b): """ A description. a: Whatever 1 b: Whatever 2 """ ... 2. def foo(a,b): """ A description. a -- Whatever 1 b -- Whatever 2 """ ... 3. def foo(a,b): """ A description. @param a: Whatever 1 @param b: Whatever 2 """ ... 4. def foo(a,b): """ A description. :param a: Whatever 1 :param b: Whatever 2 """ ... 5. Any other ... Any comments/suggestions are welcome. Thanks. Paulo -- https://mail.python.org/mailman/listinfo/python-list
Typing: Is there a "cast operator"?
Hello! I am in the process of "typing" of some of my scripts. Using it should help a lot to avoid some errors. But this is new for me and I'm facing some problems. Let's I have the following code (please don't look at the program content): f=None # mypy naturally assumes Optional(int) because later, at open, it is assigned an int. .. if f is None: f=os.open(... .. if f is not None: os.write(f, ...) .. if f is not None: os.close(f) When I use mypy, it claims Argument 1 to "write" has incompatible type "Optional[int]"; expected "int" Argument 1 to "close" has incompatible type "Optional[int]"; expected "int" How to solve this? Is there a way to specify that when calling os.open f is an int only? I use None a lot for specify uninitialized vars. Thank you. -- https://mail.python.org/mailman/listinfo/python-list
Re: A trivial question that I don't know - document a function/method
Às 21:58 de 22/10/22, Paulo da Silva escreveu: Hi all! What is the correct way, if any, of documenting a function/method? Thank you all for the, valuable as usual, suggestions. I am now able to make my choices. Paulo -- https://mail.python.org/mailman/listinfo/python-list
Re: Typing: Is there a "cast operator"? [RESOLVED]
Às 21:36 de 23/10/22, Paulo da Silva escreveu: Hello! I am in the process of "typing" of some of my scripts. Using it should help a lot to avoid some errors. But this is new for me and I'm facing some problems. Let's I have the following code (please don't look at the program content): f=None # mypy naturally assumes Optional(int) because later, at open, it is assigned an int. .. if f is None: f=os.open(... .. if f is not None: os.write(f, ...) .. if f is not None: os.close(f) When I use mypy, it claims Argument 1 to "write" has incompatible type "Optional[int]"; expected "int" Argument 1 to "close" has incompatible type "Optional[int]"; expected "int" How to solve this? Is there a way to specify that when calling os.open f is an int only? And yes there is! Exactly the "cast" operator. A mistype led me to wrong search results. I'm sorry. So, in the above code, we have to do: os.write(cast(int,f), ...) and os.close(cast(int,f), ...) Regards. Paulo -- https://mail.python.org/mailman/listinfo/python-list
Re: Typing: Is there a "cast operator"?
Às 23:56 de 23/10/22, Cameron Simpson escreveu: On 23Oct2022 21:36, Paulo da Silva wrote: I am in the process of "typing" of some of my scripts. Using it should help a lot to avoid some errors. But this is new for me and I'm facing some problems. Let's I have the following code (please don't look at the program content): f=None # mypy naturally assumes Optional(int) because later, at open, it is assigned an int. .. if f is None: f=os.open(... .. if f is not None: os.write(f, ...) .. if f is not None: os.close(f) When I use mypy, it claims Argument 1 to "write" has incompatible type "Optional[int]"; expected "int" Argument 1 to "close" has incompatible type "Optional[int]"; expected "int" How to solve this? Is there a way to specify that when calling os.open f is an int only? I use None a lot for specify uninitialized vars. Maybe you shouldn't. The other way is to just not initialise the var at all. You could then just specify a type. Example: Python 3.8.13 (default, Aug 11 2022, 15:46:53) [Clang 12.0.0 (clang-1200.0.32.29)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> f:int >>> f Traceback (most recent call last): File "", line 1, in NameError: name 'f' is not defined >>> So now `f` has `int` type definitely (for `mypy`'s purposes), and if used before assignment raises a distinctive error (versus having the value `None`, which you might then pass around, and perhaps successfully use in some contexts). It is probably better on the whole to specify types up front rather than relying on `mypy` or similar to infer them. That way (a) you're stating your intent and (b) not relying on an inferred type, which if you've got bugs may be inferred _wrong_. If `mypy` infers a type incorrectly all the subsequent checks will also be flawed, perhaps subtly. Yes. I also use to make f unavailable (f=None) when something goes wrong and I don't want to stop the script but of course I could use "del f". I also need to care about using "try", which might be better than "if" tests. A thing to think of ... Thanks. Paulo -- https://mail.python.org/mailman/listinfo/python-list
A typing question
Hi! Consider this simple script ... ___ from typing import List, Optional class GLOBALS: foos=None class Foo: def __init__(self): pass class Foos: Foos: List[Foo]=[] # SOME GLOBALS ARE USED HERE in a real script def __init__(self): pass GLOBALS.foos: Optional[Foos]=Foos() ___ Running mypy on it: pt9.py:18: error: Type cannot be declared in assignment to non-self attribute pt9.py:18: error: Incompatible types in assignment (expression has type "Foos", variable has type "None") Line 18 is last line and pt9.py is the scrip. Replacing last line by GLOBALS.foos=Foos() and running mypy still gives the second error. pt9.py:18: error: Incompatible types in assignment (expression has type "Foos", variable has type "None") What is the common practice in these cases? Thank you. -- https://mail.python.org/mailman/listinfo/python-list
Re: Fwd: A typing question
Às 22:34 de 29/10/22, dn escreveu: Out of interest, tested snippet in PyCharm, cf native-mypy. It flags the original: GLOBALS.foos: Optional[Foos]=Foos() but not the fall-back: GLOBALS.foos=Foos() Must admit, the first query coming to mind was: why is the typing taking place at initialisation-time, rather than within the (class) definition? At definition time "foos" has already been typed as None by implication! Solution (below) will not work if the mention of Foos in GLOBALS is a forward-reference. Either move GLOBALS to suit, or surround "Foos" with quotes. This is the problem for me. So far, without typing, I used to have some config and globals classes, mostly to just group definitions an make the program more readable. A matter of taste and style. Now, "typing" is breaking this, mostly because of this forward reference issue. The funny thing is that if I replace foos by Foos it works because it gets known by the initial initialization :-) ! from typing import List, Optional class GLOBALS: Foos: Optional[Foos]=None class Foo: def __init__(self): pass class Foos: Foos: List[Foo]=[] # SOME GLOBALS ARE USED HERE def __init__(self): pass GLOBALS.Foos=Foos() Also, these days (Python version allowing) importing "List" is unnecessary. Instead could use "list". On 30/10/2022 10.23, Sam Ezeh wrote: Do you want the following? ``` from typing import List, Optional class GLOBALS: foos: Optional[Foos] = None class Foo: def __init__(self): pass class Foos: Foos: List[Foo] = [] def __init__(self): pass GLOBALS.foos = Foos() ``` Kind regards, Sam Ezeh On Sat, 29 Oct 2022 at 22:13, Paulo da Silva < p_d_a_s_i_l_v_a...@nonetnoaddress.pt> wrote: Hi! Consider this simple script ... ___ from typing import List, Optional class GLOBALS: foos=None class Foo: def __init__(self): pass class Foos: Foos: List[Foo]=[] # SOME GLOBALS ARE USED HERE in a real script def __init__(self): pass GLOBALS.foos: Optional[Foos]=Foos() ___ Running mypy on it: pt9.py:18: error: Type cannot be declared in assignment to non-self attribute pt9.py:18: error: Incompatible types in assignment (expression has type "Foos", variable has type "None") Line 18 is last line and pt9.py is the scrip. Replacing last line by GLOBALS.foos=Foos() and running mypy still gives the second error. pt9.py:18: error: Incompatible types in assignment (expression has type "Foos", variable has type "None") What is the common practice in these cases? Thank you. -- https://mail.python.org/mailman/listinfo/python-list -- https://mail.python.org/mailman/listinfo/python-list
Re: Fwd: A typing question
Às 02:32 de 30/10/22, dn escreveu: On 30/10/2022 11.59, Paulo da Silva wrote: Solution (below) will not work if the mention of Foos in GLOBALS is a forward-reference. Either move GLOBALS to suit, or surround "Foos" with quotes. This is the problem for me. So far, without typing, I used to have some config and globals classes, mostly to just group definitions an make the program more readable. A matter of taste and style. Agreed, a good practice. Thank you. Now, "typing" is breaking this, mostly because of this forward reference issue. As a first step, use the quotation-marks to indicate that such will be defined later in the code:- class GLOBALS: Foos: Optional[Foos]=None class GLOBALS: Foos: Optional["Foos"]=None Later, as gather (typing) expertise, can become more sophisticated, as-and-when... The funny thing is that if I replace foos by Foos it works because it gets known by the initial initialization :-) ! Is the objective to write (good) code, or merely to satisfy the type-checker? Something that is misleading is not going to be appreciated by others (including the +6-months you), eg a = a + 1 # decrement total Typing is not compulsory, and has been designed so that we can implement it a bit at a time, eg only one function amongst many contained by a module - if that's the only code that requires maintenance/update. Best not to create "technical debt" though! The main idea is to eventually catch some, otherwise "hidden", errors and produce better and cleaner code. Documentation is also a must. Regards -- https://mail.python.org/mailman/listinfo/python-list
Re: A typing question
Às 01:14 de 30/10/22, Thomas Passin escreveu: On 10/29/2022 1:45 PM, Paulo da Silva wrote: Hi! Consider this simple script ... ___ from typing import List, Optional class GLOBALS: foos=None class Foo: def __init__(self): pass class Foos: Foos: List[Foo]=[] # SOME GLOBALS ARE USED HERE in a real script def __init__(self): pass GLOBALS.foos: Optional[Foos]=Foos() ___ Running mypy on it: pt9.py:18: error: Type cannot be declared in assignment to non-self attribute pt9.py:18: error: Incompatible types in assignment (expression has type "Foos", variable has type "None") Line 18 is last line and pt9.py is the scrip. Replacing last line by GLOBALS.foos=Foos() and running mypy still gives the second error. pt9.py:18: error: Incompatible types in assignment (expression has type "Foos", variable has type "None") What is the common practice in these cases? Thank you. I don't understand class Foos: Foos: List[Foo]=[] If "Foos" is supposed to be a class attribute, then it cannot have the same name as the class. Yes it can. You can refer it anywhere by Foos.Foos as a list of Foo elements. -- https://mail.python.org/mailman/listinfo/python-list
Re: Fwd: A typing question
Às 10:26 de 30/10/22, Peter J. Holzer escreveu: On 2022-10-29 23:59:44 +0100, Paulo da Silva wrote: Às 22:34 de 29/10/22, dn escreveu: Solution (below) will not work if the mention of Foos in GLOBALS is a forward-reference. Either move GLOBALS to suit, or surround "Foos" with quotes. ^^ This is the problem for me. Quotes are a bit ugly, but why are they a problem? [...] The funny thing is that if I replace foos by Foos it works because it gets known by the initial initialization :-) ! from typing import List, Optional class GLOBALS: Foos: Optional[Foos]=None [...] class Foos: That seems like a bug to me. What is the «Foos» in «Optional[Foos]» referring to? If it's the class attribute «Foos» then that's not a type and even if its type is inferred that's not the same as «Optional[it's type]», or is it? If it's referring to the global symbol «Foos» (i.e. the class defined later) that hasn't been defined yet, so it shouldn't work (or alternatively, if forward references are allowed it should always work). The problem is exactly this. Is there anything to do without loosing my script structure and usual practice? The forward reference only is needed to the "typing thing". Even if I declare class "Foos: pass" before, then another error arises - something like "already declared" below. -- https://mail.python.org/mailman/listinfo/python-list
Re: Fwd: A typing question
Às 22:34 de 29/10/22, dn escreveu: Out of interest, tested snippet in PyCharm, cf native-mypy. It flags the original: GLOBALS.foos: Optional[Foos]=Foos() but not the fall-back: GLOBALS.foos=Foos() Must admit, the first query coming to mind was: why is the typing taking place at initialisation-time, rather than within the (class) definition? At definition time "foos" has already been typed as None by implication! Solution (below) will not work if the mention of Foos in GLOBALS is a forward-reference. Either move GLOBALS to suit, or surround "Foos" with quotes. Somehow I missed this sentence the 1st. time I read this post :-( This is good enough to me! Thank you. I didn't know about this "quoting" thing. Regards Paulo -- https://mail.python.org/mailman/listinfo/python-list
Re: Fwd: A typing question
Às 17:06 de 30/10/22, Stefan Ram escreveu: Paulo da Silva writes: Is there anything to do without loosing my script structure and usual practice? to lose (losing): to stop having something to loose (loosing): to let or make loose (see next line) loose (adj.): not firmly attached/tied/fastened/controlled to loosen: similar to "to loose" It was a keyboard bounce ;-) How about answering the question? Thank you. -- https://mail.python.org/mailman/listinfo/python-list
Re: Fwd: A typing question
Às 21:08 de 31/10/22, Peter J. Holzer escreveu: On 2022-10-30 11:26:56 +0100, Peter J. Holzer wrote: On 2022-10-29 23:59:44 +0100, Paulo da Silva wrote: The funny thing is that if I replace foos by Foos it works because it gets known by the initial initialization :-) ! from typing import List, Optional class GLOBALS: Foos: Optional[Foos]=None [...] class Foos: That seems like a bug to me. But is it even true? I just tried to reproduce it (should have done that before answering) with mypy 0.942 (included in Ubuntu 22.04 LTS): [p1]--- from typing import List, Optional class GLOBALS: foos: Optional[Foos]=None class Foo: def __init__(self): pass class Foos: Foos: List[Foo]=[] # SOME GLOBALS ARE USED HERE def __init__(self): pass GLOBALS.foos=Foos() --- [p2]--- from typing import List, Optional class GLOBALS: Foos: Optional[Foos]=None class Foo: def __init__(self): pass class Foos: Foos: List[Foo]=[] # SOME GLOBALS ARE USED HERE def __init__(self): pass GLOBALS.Foos=Foos() --- --- p1 2022-10-31 21:59:49.639869922 +0100 +++ p2 2022-10-31 21:58:19.815830677 +0100 @@ -1,7 +1,7 @@ from typing import List, Optional class GLOBALS: -foos: Optional[Foos]=None +Foos: Optional[Foos]=None class Foo: @@ -15,4 +15,4 @@ def __init__(self): pass -GLOBALS.foos=Foos() +GLOBALS.Foos=Foos() So the only difference is the capitalization of foos. And mypy accepts both (as it probably should): % mypy p1 Success: no issues found in 1 source file % mypy p2 Success: no issues found in 1 source file If you did something different, please explain what you did. Yes for mypy. Try to run them (python3 ). Paulo -- https://mail.python.org/mailman/listinfo/python-list
typing: property/setter and lists?
Hi! And a typing problem again!!! ___ class C: def __init__(self): self.__foos=5*[0] @property def foos(self) -> list[int]: return self.__foos @foos.setter def foos(self,v: int): self.__foos=[v for __i in self.__foos] c=C() c.foos=5 print(c.foos) ___ mypy gives the following error: error: Incompatible types in assignment (expression has type "int", variable has type "List[int]") How do I turn around this? Thanks. Paulo -- https://mail.python.org/mailman/listinfo/python-list
Re: typing: property/setter and lists? [RESOLVED]
Às 03:24 de 03/11/22, Paulo da Silva escreveu: Hi! And a typing problem again!!! ___ class C: def __init__(self): self.__foos=5*[0] @property def foos(self) -> list[int]: return self.__foos @foos.setter def foos(self,v: int): self.__foos=[v for __i in self.__foos] c=C() c.foos=5 print(c.foos) ___ mypy gives the following error: error: Incompatible types in assignment (expression has type "int", variable has type "List[int]") How do I turn around this? Changing def foos(self) -> list[int]: to def foos(self) -> Union[list[int]]: fixes the problem. Not so elegant, however! Regards. Paulo -- https://mail.python.org/mailman/listinfo/python-list
Re: typing: property/setter and lists? [RESOLVED ERRATA]
Às 05:32 de 03/11/22, Paulo da Silva escreveu: Às 03:24 de 03/11/22, Paulo da Silva escreveu: Hi! And a typing problem again!!! ___ class C: def __init__(self): self.__foos=5*[0] @property def foos(self) -> list[int]: return self.__foos @foos.setter def foos(self,v: int): self.__foos=[v for __i in self.__foos] c=C() c.foos=5 print(c.foos) ___ mypy gives the following error: error: Incompatible types in assignment (expression has type "int", variable has type "List[int]") How do I turn around this? Changing def foos(self) -> list[int]: to def foos(self) -> Union[list[int]]: I meant, of course, def foos(self) -> Union[list[int],int]: Sorry. Paulo -- https://mail.python.org/mailman/listinfo/python-list
Re: typing: property/setter and lists? [RESOLVED]
Às 18:16 de 03/11/22, Chris Angelico escreveu: On Fri, 4 Nov 2022 at 05:03, Paulo da Silva wrote: Changing def foos(self) -> list[int]: to def foos(self) -> Union[list[int]]: fixes the problem. Not so elegant, however! Wait, what?! Union[X, Y] means "X or Y" Union[X] means "X, but don't complain if it's a @property". Is that how it goes? I'm sorry. A bad transposition of the text. I meant def foos(self) -> Union[list[int],int]: Regards. Paulo -- https://mail.python.org/mailman/listinfo/python-list
Re: typing: property/setter and lists?
Às 07:55 de 03/11/22, dn escreveu: On 03/11/2022 16.24, Paulo da Silva wrote: class C: def __init__(self): self.__foos=5*[0] @property def foos(self) -> list[int]: return self.__foos @foos.setter def foos(self,v: int): self.__foos=[v for __i in self.__foos] c=C() c.foos=5 print(c.foos) ___ mypy gives the following error: error: Incompatible types in assignment (expression has type "int", variable has type "List[int]") To help us to help you please copy-paste the *exact* message - especially which line is in-question. The above code passes without complaint in PyCharm, and executes. However, the general rule?convention would be to establish type at the first mention of the identifier, eg def __init__(self): self.__foos:list[int] = 5 * [ 0 ] # or [ 0, 0, 0, 0, 0, ] Why the "__i", and not "i", or "_"? Just because of my personal taste. I know that __ means (for me) a "not used anymore" var and i is an indexer/counter/... Regards. Paulo -- https://mail.python.org/mailman/listinfo/python-list
Re: typing: property/setter and lists? [RESOLVED ERRATA]
Às 07:52 de 04/11/22, dn escreveu: On 04/11/2022 07.50, Chris Angelico wrote: On Fri, 4 Nov 2022 at 05:48, Paulo da Silva wrote: Às 05:32 de 03/11/22, Paulo da Silva escreveu: Às 03:24 de 03/11/22, Paulo da Silva escreveu: Hi! And a typing problem again!!! ___ class C: def __init__(self): self.__foos=5*[0] @property def foos(self) -> list[int]: return self.__foos @foos.setter def foos(self,v: int): self.__foos=[v for __i in self.__foos] c=C() c.foos=5 print(c.foos) ___ mypy gives the following error: error: Incompatible types in assignment (expression has type "int", variable has type "List[int]") How do I turn around this? Changing def foos(self) -> list[int]: to def foos(self) -> Union[list[int]]: I meant, of course, def foos(self) -> Union[list[int],int]: Ohhh! I thought this was triggering a strange quirk of the checker in some way... Yes, these personal styles (?quirks) are off-putting to others. Plus "_" means (more or less) "not used anymore" and for most of us, a weak-identifier name such as "i" is indeed "an indexer/counter/... " Thank you for the suggestions. BTW, I am not a python pro programmer. I use it as a tool as many other tools and some other (few) languages. .. ...and whilst I'm griping, "To help us to help you please copy-paste the *exact* message" has been followed by: "I'm sorry. A bad transposition of the text." copy-paste for the win! (and to keep others happy to spend their voluntary time helping you - more working-with-the-team thinking to consider - please) The full original message was there. Seemed to me that that was obvious considering the simplicity of the subject and the illustrative toy example. Anyway, I'm sorry. Thank you. Paulo -- https://mail.python.org/mailman/listinfo/python-list
spyder does not work under root! [linux]
Hi! I need to debug a python3 script under root. I tried spyder but it does not work. Running as root without --no-sandbox is not supported. See https://crbug.com/638180. Thanks for any comments including alternative solutions to debug as root. Paulo -- https://mail.python.org/mailman/listinfo/python-list
Re: spyder does not work under root! [linux]
Às 22:56 de 08/10/21, Paulo da Silva escreveu: > Hi! > > I need to debug a python3 script under root. I tried spyder but it does > not work. > > Running as root without --no-sandbox is not supported. See > https://crbug.com/638180. > > Thanks for any comments including alternative solutions to debug as root. > I also tried with eric and curiously it gave the same message!! This seems crazy. -- https://mail.python.org/mailman/listinfo/python-list
Assign a value to a var content in an object
Hello! Is there a better way of doing this? Why didn't setattr (as commented) work? Thanks for an help/comments. class C: def f(self,v): #setattr(self,n,v) self.__dict__['n']=v c=C() c.f(3) print(c.n) -- https://mail.python.org/mailman/listinfo/python-list
Re: Assign a value to a var content in an object
Às 23:28 de 10/10/21, Stefan Ram escreveu: > Paulo da Silva writes: >> class C: >>def f(self,v): >>#setattr(self,n,v) >>self.__dict__['n']=v > >> Why didn't setattr (as commented) work? > > Because the name n has not been initialized to a suitable > value in the function f. You could write > > setattr( self, "n", v ) Ah, OK - I missed the "" around n! :-( > > , but if you want this, > > self.n = v > > would be better. Of course :-) But that's not the purpose. This is just a toy example. Thanks. -- https://mail.python.org/mailman/listinfo/python-list
Re: spyder does not work under root! [linux]
Às 22:54 de 11/10/21, Chris Angelico escreveu: > On Tue, Oct 12, 2021 at 8:52 AM Paulo da Silva > wrote: >> >> Hi! >> >> I need to debug a python3 script under root. I tried spyder but it does >> not work. >> >> Running as root without --no-sandbox is not supported. See >> https://crbug.com/638180. >> >> Thanks for any comments including alternative solutions to debug as root. >> > > Did you try reading the linked bug report? Or running it with --no-sandbox? > Yes. It is about a web browser! Why are 2 python debuggers related with a web browser?! As per spyder, there is no such switch --no-sandbox! Thanks. -- https://mail.python.org/mailman/listinfo/python-list
Re: spyder does not work under root! [linux]
Às 02:08 de 12/10/21, Michael Torrie escreveu: > On 10/8/21 4:32 PM, Paulo da Silva wrote: >> Às 22:56 de 08/10/21, Paulo da Silva escreveu: >>> Hi! >>> >>> I need to debug a python3 script under root. I tried spyder but it does >>> not work. >>> >>> Running as root without --no-sandbox is not supported. See >>> https://crbug.com/638180. >>> >>> Thanks for any comments including alternative solutions to debug as root. >>> >> I also tried with eric and curiously it gave the same message!! >> >> This seems crazy. > > Not so crazy. It's incredibly dangerous to run a web browser as root. > There's no reason I can think of for running a python script driving a > web browser as root. spyder and eric are both python editors/debuggers! Why are they related with web browsers?! Thanks -- https://mail.python.org/mailman/listinfo/python-list
Re: spyder does not work under root! [linux]
Às 16:16 de 14/10/21, Mats Wichmann escreveu: > On 10/13/21 16:55, Michael Torrie wrote: >> On 10/13/21 12:09 PM, Paulo da Silva wrote: >>> spyder and eric are both python editors/debuggers! Why are they related >>> with web browsers?! >> >> Good point. I was going off of the chromium bug report. My bad. I >> mistook Spyder for Selenium, which is a web scraping scripting engine >> that does use a real browser. Oops. >> >> However, for better or worse, browser engines power all kinds of apps >> these days, including IDEs. I do not know if Spyder is powered by >> Chromium or not. VS Code, for example, is powered by a web browser >> engine. >> >> As to Eric and Qt, I can't speak to that. > > (sorry sent this wrong place first time) > > > The configuration dialog in eric uses its WebBrowser module, which uses > qtwebengine, which uses Chromium, which gives you the error. It's not a > Python error, fwiw. > > It seems there's an environment variable you can try in the Qt world > (I've never had occasion to check this out): > > https://forum.qt.io/topic/94721/running-as-root-without-no-sandbox-is-not-supported > Ok, thank you. -- https://mail.python.org/mailman/listinfo/python-list
Re: spyder does not work under root! [linux]
Às 23:55 de 13/10/21, Michael Torrie escreveu: > On 10/13/21 12:09 PM, Paulo da Silva wrote: >> spyder and eric are both python editors/debuggers! Why are they related >> with web browsers?! > > Good point. I was going off of the chromium bug report. My bad. I > mistook Spyder for Selenium, which is a web scraping scripting engine > that does use a real browser. Oops. > > However, for better or worse, browser engines power all kinds of apps > these days, including IDEs. I do not know if Spyder is powered by > Chromium or not. VS Code, for example, is powered by a web browser engine. > > As to Eric and Qt, I can't speak to that. Software starts to get sickly complicated these days :-( Thanks Michael and Peter. -- https://mail.python.org/mailman/listinfo/python-list
New assignmens ...
Hi! Why doesn't this work if (self.ctr:=self.ctr-1)<=0: while this works if (ctr:=ctr-1)<=0: Thanks -- https://mail.python.org/mailman/listinfo/python-list
Re: New assignmens ...
Às 20:34 de 22/10/21, Chris Angelico escreveu: > On Sat, Oct 23, 2021 at 6:24 AM Jon Ribbens via Python-list > wrote: >> >> On 2021-10-22, Stefan Ram wrote: >>> Paulo da Silva writes: >>>> Why doesn't this work >>>> if (self.ctr:=self.ctr-1)<=0: >>>> while this works >>>> if (ctr:=ctr-1)<=0: >>> >>> assignment_expression ::= [identifier ":="] expression, >>> but the attribute references "self.ctr" is no identifier! >> >> This seems a surprising omission. You'd expect at least 'attributeref' >> and 'subscription' to be allowed, if not the whole of 'target'. > > That's not the primary use-case for assignment expressions, and they > were highly controversial. It is much easier to expand it afterwards > than to restrict it, or to have the feature rejected because people > are scared of some small aspect of it. > > If you want to propose relaxing the restrictions, make your use-case > and attempt to convince people of the value. > Well, I didn't follow the discussion of this new feature, but the reason I can see behind allowing it seems so valid for for ctr:=ctr-1 as for self.ctr:=self.ctr-1. The kind of use is exactly the same. One is for a normal function, the other for a method. IMHO this makes no sense at all. Arguable may be for example LHS ctrs[i], or something like that. But self.ctr ...! Too weird. Thanks Paulo -- https://mail.python.org/mailman/listinfo/python-list
Avoid nested SIGINT handling
Hi! How do I handle a SIGINT (or any other signal) avoid nesting? Does this work? class STATUS: InInt=False def SIGINT_handler(sn,f): if STATUS.InInt: return STATUS.InInt=True process_int() STATUS.InInt=False Thanks for any suggestions. Paulo -- https://mail.python.org/mailman/listinfo/python-list
Re: Avoid nested SIGINT handling
Às 21:55 de 10/11/21, Jon Ribbens escreveu: > On 2021-11-10, Paulo da Silva wrote: >> Hi! >> >> How do I handle a SIGINT (or any other signal) avoid nesting? > > I don't think you need to. Python will only call signal handlers in > the main thread, so a handler can't be executed while another handler > is running anyway. > Do you mean that if I issue a ctrl+c while the previous one is "processing" it is held until, at least, the "processing" returns? -- https://mail.python.org/mailman/listinfo/python-list
Re: Avoid nested SIGINT handling
Às 06:22 de 11/11/21, Chris Angelico escreveu: > On Thu, Nov 11, 2021 at 5:01 PM Jon Ribbens via Python-list > wrote: >> >> On 2021-11-10, Paulo da Silva wrote: >>> Hi! >>> >>> How do I handle a SIGINT (or any other signal) avoid nesting? >> >> I don't think you need to. Python will only call signal handlers in >> the main thread, so a handler can't be executed while another handler >> is running anyway. > > Threads aren't the point here - signals happen immediately. > > Would it be easier to catch KeyboardInterrupt and do your processing > there, rather than actually catching SIGINT? > > I'd recommend just trying what you have, and seeing if it's reentrant. > My suspicion is that it isn't, on a technical level (the Python > function will be queued for when it's safe to call it - probably after > the next bytecode instruction), but that your own code will still need > to worry about reentrancy. > OK, thank you -- https://mail.python.org/mailman/listinfo/python-list
Writing a package
Hello! Let's say I have a dir src containing another dir named foo and a script test.py. So, I have src/foo (dir) src/test.py (script) test.py has the folloing code: import foo as f c=f.C() I am inside src and want to run python test.py. How can I create the class C inside src/foo dir if it is possible at all? Thanks. -- https://mail.python.org/mailman/listinfo/python-list
Re: Writing a package
Às 02:01 de 05/02/22, Cameron Simpson escreveu: On 05Feb2022 00:37, Paulo da Silva wrote: Let's say I have a dir src containing another dir named foo and a script test.py. So, I have src/foo (dir) src/test.py (script) test.py has the folloing code: import foo as f c=f.C() I am inside src and want to run python test.py. How can I create the class C inside src/foo dir if it is possible at all? Define it in the file "src/foo/__init__.py". When you go: import blah Python reaches for the file "blah.py" or "blah/__init__.py" (this second path is for "packages"). Yes, thank you. -- https://mail.python.org/mailman/listinfo/python-list
Unpacking lists in a f string
Hi! Let's say I have two lists of equal length but with a variable number of elements. For ex.: l1=['a','b','c'] l2=['j','k','l'] I want to build a string like this "foo a j, b k, c l bar" Is it possible to achieve this with f strings or any other simple/efficient way? Thanks for any help/comments. -- https://mail.python.org/mailman/listinfo/python-list
Re: Unpacking lists in a f string
Às 02:17 de 09/02/22, Paulo da Silva escreveu: Hi! Let's say I have two lists of equal length but with a variable number of elements. For ex.: l1=['a','b','c'] l2=['j','k','l'] I want to build a string like this "foo a j, b k, c l bar" Is it possible to achieve this with f strings or any other simple/efficient way? Thanks for any help/comments. Thank you for your responses. -- https://mail.python.org/mailman/listinfo/python-list
Append/Replace a row in a pandas DataFrame
Hi all. I am learning pandas DataFrame and I want to add (eventually replace by index) some rows. For adding here is what I tried: >df = pd.DataFrame(np.random.randn(6,4), index=dates, columns=list('ABCD')) >df A B C D 2013-01-01 -0.111621 1.126761 -2.420517 0.660948 2013-01-02 -0.243397 -0.975684 -0.679209 -0.656913 2013-01-03 0.405816 0.478353 0.621906 -0.262615 2013-01-04 -0.380249 0.416711 -0.906286 1.828339 2013-01-05 0.772747 0.993784 0.452746 1.665306 2013-01-06 0.535011 -0.662874 1.504281 0.543537 [6 rows x 4 columns] >dft=pd.DataFrame([[1,2,3,4]], index=[datetime.date(2016,1,12)],columns=df.columns) >dft A B C D 2016-01-12 1 2 3 4 [1 rows x 4 columns] >pd.concat([df,dft]) Out[71]: A B C D 2013-01-01 00:00:00 -0.111621 1.126761 -2.420517 0.660948 2013-01-02 00:00:00 -0.243397 -0.975684 -0.679209 -0.656913 2013-01-03 00:00:00 0.405816 0.478353 0.621906 -0.262615 2013-01-04 00:00:00 -0.380249 0.416711 -0.906286 1.828339 2013-01-05 00:00:00 0.772747 0.993784 0.452746 1.665306 2013-01-06 00:00:00 0.535011 -0.662874 1.504281 0.543537 2016-01-12 1.00 2.00 3.00 4.00 [7 rows x 4 columns] Why am I getting the second column?! How do I do to have a row replaced instead of added if its date (index) is an existent one? Thanks for any help or comments. Paulo -- https://mail.python.org/mailman/listinfo/python-list
Re: Append/Replace a row in a pandas DataFrame [SOLVED]
Às 21:10 de 13-04-2016, Paulo da Silva escreveu: > Hi all. ... > [6 rows x 4 columns] > >> dft=pd.DataFrame([[1,2,3,4]], > index=[datetime.date(2016,1,12)],columns=df.columns) > >> dft > A B C D > 2016-01-12 1 2 3 4 > > [1 rows x 4 columns] > >> pd.concat([df,dft]) > Out[71]: > A B C D > 2013-01-01 00:00:00 -0.111621 1.126761 -2.420517 0.660948 > 2013-01-02 00:00:00 -0.243397 -0.975684 -0.679209 -0.656913 > 2013-01-03 00:00:00 0.405816 0.478353 0.621906 -0.262615 > 2013-01-04 00:00:00 -0.380249 0.416711 -0.906286 1.828339 > 2013-01-05 00:00:00 0.772747 0.993784 0.452746 1.665306 > 2013-01-06 00:00:00 0.535011 -0.662874 1.504281 0.543537 > 2016-01-12 1.00 2.00 3.00 4.00 > > [7 rows x 4 columns] > > Why am I getting the second column?! I need to use for example pd.datetime instead of datetime.date. In fact there is no extra col but the inclusion of hour in the index. Still don't understand why! > > How do I do to have a row replaced instead of added if its date (index) > is an existent one? df.loc[]= Paulo -- https://mail.python.org/mailman/listinfo/python-list
Creating a hot vector (numpy)
Hi all. I have seen this "trick" to create a hot vector. In [45]: x Out[45]: array([0, 1]) In [46]: y Out[46]: array([1, 1, 1, 0, 0, 1, 0, 0], dtype=uint8) In [47]: y[:,None] Out[47]: array([[1], [1], [1], [0], [0], [1], [0], [0]], dtype=uint8) In [48]: x==y[:,None] Out[48]: array([[False, True], [False, True], [False, True], [ True, False], [ True, False], [False, True], [ True, False], [ True, False]], dtype=bool) In [49]: (x==y[:,None]).astype(np.float32) Out[49]: array([[ 0., 1.], [ 0., 1.], [ 0., 1.], [ 1., 0.], [ 1., 0.], [ 0., 1.], [ 1., 0.], [ 1., 0.]], dtype=float32) How does this (step 48) work? Thanks -- https://mail.python.org/mailman/listinfo/python-list
Re: Creating a hot vector (numpy)
Às 05:05 de 18-04-2016, Reto Brunner escreveu: > Hi, > It is called broadcasting an array, have a look here: > http://docs.scipy.org/doc/numpy-1.10.1/user/basics.broadcasting.html > So, there are two broadcasts here. OK. Thanks. -- https://mail.python.org/mailman/listinfo/python-list
A pickle problem!
Hi. Why in this code fragment self.__name is not kept between pickle dumps/loads? How to fix it? Thanks. import pickle import pandas as pd import numpy as np class C(pd.DataFrame): def __init__(self,name,*a,**b): super(C,self).__init__(*a,**b) self.__name=name def GetName(self): return self.__name dates = pd.date_range('20130101', periods=6) c = C("FOO",np.random.randn(6,4), index=dates, columns=list('ABCD')) cd=pickle.dumps(c,pickle.HIGHEST_PROTOCOL) d=pickle.loads(cd) d.GetName() # AttributeError: 'C' object has no attribute '_C__name' -- https://mail.python.org/mailman/listinfo/python-list
Re: A pickle problem!
Às 22:43 de 21-04-2016, Paulo da Silva escreveu: > Hi. > > Why in this code fragment self.__name is not kept between pickle > dumps/loads? How to fix it? > > Thanks. > > import pickle > import pandas as pd > import numpy as np > > class C(pd.DataFrame): > def __init__(self,name,*a,**b): > super(C,self).__init__(*a,**b) > self.__name=name > > def GetName(self): > return self.__name > # Adding this works but looks tricky! def __getstate__(self): dfstate=super(C,self).__getstate__() cstate=(dfstate,self.__name) return cstate def __setstate__(self,cstate): super(C,self).__setstate__(cstate[0]) self.__name=cstate[1] > > dates = pd.date_range('20130101', periods=6) > c = C("FOO",np.random.randn(6,4), index=dates, columns=list('ABCD')) > > cd=pickle.dumps(c,pickle.HIGHEST_PROTOCOL) > > d=pickle.loads(cd) > > d.GetName() > > # AttributeError: 'C' object has no attribute '_C__name' > -- https://mail.python.org/mailman/listinfo/python-list
Re: A pickle problem!
Às 17:27 de 22-04-2016, Ian Kelly escreveu: > On Thu, Apr 21, 2016 at 7:52 PM, Paulo da Silva > wrote: >> Às 22:43 de 21-04-2016, Paulo da Silva escreveu: ... > > Probably this is necessary because the DataFrame class is already > customizing its pickle behavior without taking into account the > possibility of added attributes by subclasses. I think that your > solution of wrapping the state of the superclass looks fine. > Thank you. For any other vars ... Is there a way to get the vars of only the derived class? -- https://mail.python.org/mailman/listinfo/python-list
Re: A pickle problem!
Às 21:33 de 22-04-2016, Ian Kelly escreveu: > On Fri, Apr 22, 2016 at 2:21 PM, Paulo da Silva > wrote: ... > > If they start with two underscores then you could use the name > mangling to find them. If the class name is MyClass then look for any > keys in the instance dict that start with '_MyClass__'. Otherwise no, > you'd have to list them explicitly. > OK, thanks. -- https://mail.python.org/mailman/listinfo/python-list
A problem with classes - derived type
Hi! Suppose I have a class A whose implementation I don't know about. That class A has a method f that returns a A object. class A: ... def f(self, <...>): ... Now I want to write B derived from A with method f1. I want f1 to return a B object: class B(A): ... def f1(self, <...>): ... res=f(<...>) How do I return res as a B object? Thanks. -- https://mail.python.org/mailman/listinfo/python-list
Re: A problem with classes - derived type
Às 05:20 de 09-05-2016, Paulo da Silva escreveu: Thank you Yann and Peter. I really didn't know anything about those "things". So far I have worked a lot with classes but they are written by me. Now I needed to derive pandas.Series (for example) and it has some methods that return pandas.Series objects. And I needed to return the derived object, not the pandas.Series one. The problem is now fixed. I'll find some time to read a little more about this to improve my pyhon knowledge. Thank you very much. -- https://mail.python.org/mailman/listinfo/python-list
pandas.datetime addition: What's wrong?
Hi all! What's wrong with this? import pandas as pd x=pd.to_datetime("20160501") x+pd.DateOffset(days=1) Timestamp('2016-05-02 00:00:00', tz=None) x.__add__(pd.DateOffset(days=1)) NotImplemented More generally I have a class derived from pandas.datetime and I want to implement its own __add__ that at a given point call super __add__. For example: class C(pandas.datetime): ... def __add__(self,n): ... r=super(C,self).__add__(pd.DateOffset(days=n)) ... BTW, in the last line is it needed and how to "cast" self to pandas.datetime? Thanks for any help -- https://mail.python.org/mailman/listinfo/python-list
Re: pandas.datetime addition: What's wrong?
Às 04:08 de 08-06-2016, MRAB escreveu: > On 2016-06-08 03:09, Paulo da Silva wrote: >> Hi all! >> ... >> >> More generally I have a class derived from pandas.datetime and I want to >> implement its own __add__ that at a given point call super __add__. >> >> For example: >> >> class C(pandas.datetime): >> ... >> def __add__(self,n): >> ... >> r=super(C,self).__add__(pd.DateOffset(days=n)) >> ... >> BTW, in the last line is it needed and how to "cast" self to >> pandas.datetime? >> ... > When you have x+y, it tries x.__add__(y). If that fails, it then tries > y.__radd__(x). That's it! > > Does that mean that the calculation above is actually implemented by the > DateOffset class? It seems so. Using __radd__ it works. > > Does pd.to_datetime return a datetime instance? Yes. > I still have the problem of self being C (not pandas.datetime). I tried self.__class__=pandas.datetime but it says something like "__class__ assignment: only for heap types" I don't know what this means. Using a new object op=pandas.datetime(self.year,self.month,self.day) works but it's too heavy :-) Thank you very much. -- https://mail.python.org/mailman/listinfo/python-list
conda/anaconda and pip3 (pip)
Hi! I have an environment created with conda (anaconda3). There is a package that is unavailable in conda. Installing it with pip3, with conda env activated, the installation goes to .local/bin and .local/lib in my home dir (BTW I'm running linux kubuntu 18.04). This also has a bad side effect! It reinstalls there some depedencies already installed in the conda created environment! Is there a way to avoid this situation? Thanks for any help. -- https://mail.python.org/mailman/listinfo/python-list
tkinter resizable text with grid
Hi! Does anybody know why this code does not expand the text widget when I increase the window size (with mouse)? I want height and width but as minimum (or may be initial) size. import tkinter as tk class App: def __init__(self,master): self.tboard=tk.Text(master,height=40,width=50) self.tboard.grid(row=1,column=1,sticky="nsew") self.tboard.grid_rowconfigure(1,weight=1) self.tboard.grid_columnconfigure(1,weight=1) root=tk.Tk() app=App(root) root.mainloop() Thanks -- https://mail.python.org/mailman/listinfo/python-list
Re: tkinter resizable text with grid
Às 08:24 de 06/12/18, Peter Otten escreveu: > Paulo da Silva wrote: > ... > > You have to set the column/row weight of the /master/: > > master.grid_columnconfigure(1, weight=1) > master.grid_rowconfigure(1, weight=1) Ok. That works! > > Also, columns and rows usually start with 0. > Yes, I know that. I have other stuff there. Thank you very much Peter. -- https://mail.python.org/mailman/listinfo/python-list
Re: tkinter resizable text with grid
Às 21:15 de 06/12/18, Rick Johnson escreveu: > Paulo da Silva wrote: > ... > > In Tkinter, if you have a "container"[1] that only has a > single widget stuffed inside, and, you want that single > widget to expand to fill the extents of its parent > container, then, the pack geometry manager is the simplest > approach. > > w = create_a_widget() > w.pack(fill=X|Y|BOTH, expand=YES) Yes, I am aware of pack. Unfortunately the code fragment I posted is a very small part of a larger widget. ... > > I kinda have a love/hate relationship with Tkinter and IDLE. > On one hand i find them to be practical[2] and simple[3] and > on the other, i find them to be poorly designed and > unintuitive. And it's a real shame, because, both of these > libraries have tons of potential, *IF*, they were designed > probably and the shortcomings of TclTk were abstracted away > behind a more Pythonic interface. > I fully agree. Nevertheless, what I miss more is the lack of more complex mega widgets - scrollable list of widgets with insert, append and remove methods and perhaps a spreadsheet like widget are two big ones. There are others smaller, like a single scrollable text with two scroll bars that hide when not needed, tab multi-choice container, etc ... Unfortunately I rarely need gui programming and don't have the expertise to address such task. Being tk so old, I wonder why no one developed those expansions - continuing tix, for example. There are some implementations but they seem not being maintained. Pmw has some of the later, but it is not much stable for python3. Thanks for responding Paulo -- https://mail.python.org/mailman/listinfo/python-list
Re: tkinter resizable text with grid
Às 07:11 de 07/12/18, Christian Gollwitzer escreveu: > Am 07.12.18 um 03:00 schrieb Paulo da Silva: >> Às 21:15 de 06/12/18, Rick Johnson escreveu: ... > So instead of complaining about lacking support in Tk, the > Python community should do their homework and provide wrappers to the > most common Tk extensions. > That was what I did. When I referred tk was in the context of python. I left tcl/tk long time ago and by that time the problems were the same as tkinter's today, not to mention the angels sex discussions/wars about which oop paradigm to use or if use any at all :-) Regards -- https://mail.python.org/mailman/listinfo/python-list
Re: Why Python don't accept 03 as a number?
Às 01:17 de 08/12/18, jf...@ms4.hinet.net escreveu: 00 > 0 03 > File "", line 1 > 03 > ^ > SyntaxError: invalid token > > Any particular reason? > Not sure but I think that after 0 it expects x for hexadecimal, o for octal, b for binary, ... may be others. 0xa 10 0o10 8 0b10 2 -- https://mail.python.org/mailman/listinfo/python-list
cython3: Cannot start!
Hi! Sorry if this is OT. I decided to give cython a try and cannot run a very simple program! 1. I am using kubuntu 18.04 and installe cython3 (not cython). 2. My program tp.pyx: # cython: language_level=3 print("Test",2) 3. setup.py from distutils.core import setup from Cython.Build import cythonize setup( ext_modules = cythonize("tp.pyx") ) 4. Running it: python3 setup.py build_ext --inplace python3 -c 'import tp' 5. output: ('Test', 2) This is wrong for python3! It should output Test 2 It seems that it is parsing tp.pyx as a python2 script! I tried to change the print to python2 print "Test",2 and it recognizes the syntax and outputs Test 2 So, how can I tell cython to use python3? Thanks for any help/comments -- https://mail.python.org/mailman/listinfo/python-list
Re: cython3: Cannot start! [RESOLVED]
Às 19:48 de 22/12/18, MRAB escreveu: > On 2018-12-22 18:26, Paulo da Silva wrote: ... > Well, I've just tried this on Raspbian with the same files (for Python 3): > > python3 -m pip install cython > python3 setup.py build_ext --inplace > python3 -c 'import tp' > > and it printed: > > Test 2 OK. I uninstalled the distributed cython3 and installed it using pip3. Now it works! Thanks -- https://mail.python.org/mailman/listinfo/python-list
Re: cython3: Cannot start!
Às 14:07 de 24/12/18, Stefan Behnel escreveu: > Paulo da Silva schrieb am 22.12.18 um 19:26: ... > > Ubuntu 18.04 ships Cython 0.26, which has a funny bug that you hit above. > It switches the language-level too late, so that the first token (or word) > in the file is parsed with Py2 syntax. In your case, that's the print > statement, which is really parsed as (Py2) statement here, not as (Py3) > function. In normal cases, the language level does not matter for the first > statement in the source (because, why would you have a print() there?), so > it took us a while to find this bug. > > pip-installing Cython will get you the latest release, where this bug is > resolved. > Thank you Stefan for the clarification. Regards. Paulo -- https://mail.python.org/mailman/listinfo/python-list
Re: conda/anaconda and pip3 (pip)
Às 19:54 de 09/12/18, Tim Williams escreveu: > On Saturday, December 8, 2018 at 10:13:14 PM UTC-5, Monte Milanuk wrote: >> Did you find any solution(s)? > > I usually just lurk and read on this list. I don't reply since there's > usually more competent people that regularly post helpful answers. (I lurk to > learn from them!) > > If no one's replied yet, I'll give it my 2 cents ... > > Without being a pip expert, I see from 'pip install -h' that you can specify > where you want the package to be installed. > > Install Options: ... > path or a VCS url. > -t, --target Install packages into . By default this > will not replace existing files/folders in > . Use --upgrade to replace existing > packages in with new versions. ... > > I'm thinking the the --target option may be the solution. > I don't think this is a solution. It seems that there is no really solutions at all. (ana)conda has its own dependencies management. Playing with pip just seems to cause dependencies problems, eventually. So far, I have not found any problems, probably because the newer modules are backwards compatible. Thanks for responding. -- https://mail.python.org/mailman/listinfo/python-list
Re: conda/anaconda and pip3 (pip)
Às 19:39 de 02/01/19, Hartmut Goebel escreveu: > Am 03.12.18 um 18:39 schrieb Paulo da Silva: >> This also has a bad side effect! It reinstalls there some depedencies >> already installed in the conda created environment! >> >> Is there a way to avoid this situation? > > Try whether `pyvenv --system-site-packages` suites you. > I need to use conda for this. I need anaconda because it has all stuff to work with GPUs. Otherwise I'd need to install lots of SW. One package, for example, requires registration at Nvidia. It also difficult to determine a common base of compatible versions. Thanks for responding. -- https://mail.python.org/mailman/listinfo/python-list