Closed Karduin closed 1 year ago
bonjour Jean-Michel
écoute oui ça va tout à fait dans le bon sens j'ai regardé rapidement, sans doute je ferai de petites corrections à la marge mais rien de lourd
je ne sais pas non plus trop où le mettre l'étape suivante ça va être de parler des instances de classe, c'est bcp + épineux, et il faut avoir vu les classes avant donc puisque tu évoques une deuxième partie il faudrait la viser dans la section 6 peut-être (et rédiger la première partie pour dire qu'on reverra le match plus loin)
en termes de licence, tu peux très bien ajouter ton nom hein, c'est quand même le minimum :)
sinon je crois que oui mais ne me souviens plus à 100%, le python dispo dans les notebooks a la bonne version pour faire tourner tout ça ?
en tous cas merci ça aide :)
pour info toujours mais on a commencé à évoquer vaguement l'idée de retourner quelques vidéos et ce sujet-là fait partie du top 2, avec le walrus operator...
Merci Thierry,
sans doute je ferai de petites corrections
Pas de soucis, c'est bien normal.
J'ai quelques petites interrogations en vrac.
entre tes deux options, j'ai une préférence pour la première option (2 notebooks en tout, un en semaine 4 et un en semaine 6) sachant qu'il faut que chacun conserve une taille 'raisonnable' (je ne suis pas sûr d'avoir à chaque fois respecté cette consigne, mais c'est important que chaque notebook reste relativement digeste) on n'est pas obligé de décrire tous les cas de coin et tout hein, ce n'est pas une doc de référence, sur la base de quelques exemples les gens sont normalement capables d'élaborer
on peut mentionner le cas des floats à mon avis, sur juste un exemple qui soit pathologique
pour la réf à kaamelott, je pense pas que le copyright pose problème, mais on peut se demander en effet ce que va comprendre quelqu'un qui n'a pas le background; à toi de voir :)
PS. il faudrait aussi modifier à l'occasion dans l'entête le 'notebookname' et le mettre à 'instruction match (1/2)' ou quelque chose dans ce genre
Voila, je pense que c'est bon pour la première partie. Je ne suis pas suffisamment calé en math pour un exemple sur les floats. Modifie ce que tu veux.
Merci Jean-Michel
je garde ça sous le coude, j'éditerai à l'occasion :)
J'ai retravaillé un peu le premier match_case.md
par contre j'ai tout rebasé, c'est plus simple je pense si tu repars de la branche match_case
mais depuis mon repo
ça va demander un peu de gymnastique avec git, dis-moi si tu as besoin d'aide pour ça
merci !
PS. de manière générale c'est plus simple pour moi si, lorsque u veux 'rattraper' mais tu rebases plutôt que de merger, c'est plus simple comme ça d'isoler vraiment ce qui est dans ta branche par rapport à ce qui a été fait dans main entretemps; je sais pas si c'est clair, là encore je peux éclaircir si besoin
Bon tu m'as un peu perdu là. ;-)
Quand tu auras le temps, je veux bien un éclaircissement sur le fait de rebaser plutôt que merger.
ça va demander un peu de gymnastique avec git, dis-moi si tu as besoin d'aide pour ça
Ce ne serait pas plus simple si je supprime mon fork et que je le refasse du coup ?
On 19 Apr 2023, at 13:21, Karduin @.***> wrote:
Bon tu m'as un peu perdu là. ;-)
Quand tu auras le temps, je veux bien un éclaircissement sur le fait de rebaser plutôt que merger.
ça va demander un peu de gymnastique avec git, dis-moi si tu as besoin d'aide pour ça
Ce ne serait pas plus simple si je supprime mon fork et que je le refasse du coup ?
— Reply to this email directly, view it on GitHub https://github.com/flotpython/course/pull/66#issuecomment-1514561383, or unsubscribe https://github.com/notifications/unsubscribe-auth/ABCPKO5LAPYRI634VYPWPHLXB7DCNANCNFSM6AAAAAARGLELHU. You are receiving this because you commented.
Bonjour Jean-Michel
je comprends que c’est un peu olé olé :-)
je suppose dans la suite que
ton repo est ‘propre’ - pas de modifes pendantes - à committer ou à stasher si nécessaire ça c’est super important bien sûr ton remote origin pointe vers mon repo (sinon tu remplaces origin par le bon nom) tu as une remote ‘mine’ qui pointe vers ton fork; pareil tu remplaces par le bon nom...
ce que tu peux faire pour te remettre en phase, c’est juste ceci
git switch match_case
git fetch --all
à ce stade tu auras une référence origin/match_case
git reset --hard origin/match_case
git push --force mine match_case:match_case
ce qu’il y a de bien avec cette façon c’est que le PR reste valide et on peut continuer à drafter le nb #2 mais si jamais ça foire de ton coté, ou si tu le sens pas, no worries, tu pourras toujours refaire ton fork en effet simplement dans tous les cas repars bien du commit d1ba5bd où il y a tout ce qu’il faut
désolé si c’est compliqué…
—— le principe de rebaser, c’est qu’au moment de rattraper main, au lieu de faire juste git pull, on fait git pull --rebase, ce qui au lieu de merger, va refaire les modifes de la branche mais au-dessus du main, comme ça on se fait moins de noeuds au cerveau pour visualiser les changements qui sont propres à la branche, vs ce qui a changé dans le main entretemps…
cad on obtient finalement un fil tout simple au lieu d’avoir des schémas en diamant
Bonjour Thierry,
Ce que j’avais fait pour proposer les pr :
Puis je modifie en local je push sur mon repo et pr à partir de github.
Du coup origin pointe sur mon repo.
remote origin Fetch URL: git@github.com:Karduin/course.git Push URL: git@github.com:Karduin/course.git HEAD branch: main Remote branches: jupytext tracked main tracked match_case tracked update-asyncio tracked Local branches configured for 'git pull': main merges with remote main match_case merges with remote match_case update-asyncio merges with remote update-asyncio Local refs configured for 'git push': main pushes to main (up to date) match_case pushes to match_case (up to date) update-asyncio pushes to update-asyncio (up to date)
❯ git remote -v origin git@github.com:Karduin/course.git (fetch) origin git@github.com:Karduin/course.git (push)
Du coup je ne pointe pas sur ton repo. Je peux quand même faire la manip que tu indiques ?
Concernant match case et les classes :
Tu pense à des choses dans ce genre ? Parce que j'avoue ne pas trop savoir comment traiter le sujet.
class Vars:
x = int(input())
y = int(input())
z = int(input())
match Vars.x:
case Vars.y:
print("something")
case Vars.z:
print("anything")
ah ok, alors je rephrase les manipes à faire
git remote add upstream git@github.com:flotpython/course.git git fetch --all git switch match_case git reset --hard upstream/match_case git push --force origin match_case:match_case
au départ je pensais plutôt à quelque chose comme ce qui suit, mais c'est très ouvert
je suis pas non plus un expert de ce trait qui est très récent et que je commence seulement à utiliser il ne faut pas hésiter à s'inspirer de trucs déjà existants
class Point:
def __init__(self, x, y):
self.x = x
self.y = y
# ça ne marche sûrement pas tel quel, mais en gros hein
def foo(p):
match p:
Point(0, 0):
print("le zéro")
Point(x, 0):
print(`horizontal, {x=}`)
Point(x, y):
print(`ailleurs {x=} {y=}`)
zero = Point(0, 0)
p1 = Point(0, 5)
p2 = Point(5, 5)
foo(zero)
foo(p1)
foo(p2)
c'est parfait comme ça on est bien en phase
c'est quoi du coup le plan pour la deuxième partie ?
on peut très bien dans un premier temps publier juste ça (peut-être du coup enlever le 1/2 et la phrase à la fin qui dit que ça continue en semaine 6) et remettre à plus tard (ou pas) la deuxième partie.
dis-moi
c'est parfait comme ça on est bien en phase
Oui merci pour la manip, ça a marché impeccable.
J'avoue que je n'avais pas d'idée précise en tête et que je comptais sur toi ;-). Il faut que je creuse la question en fouillant sur le net.
Du coup si tu as une dead line courte il vaut mieux partir sur la publication de la première partie.
Dans tous les cas je vais chercher de l'info dès à présent.
EDIT:
Bon en écrivant le code comme ça, ça fonctionne : (voir PEP 636) bien que leur exemple soit avec une dataclass
. Je ne me souvient pas d'avoir vu quelque chose à ce sujet dans le mooc. (différence ?)
class Point:
counter= 0
def __init__(self, x, y):
self.x = x
self.y = y
Point.counter += 1
def foo(p):
match p:
case Point(x=0, y=0):
print("le zéro")
case Point(x=x, y=0):
print(f"horizontal, {x=}")
case Point(x=x, y=y):
print(f"ailleurs {x=} {y=}")
zero = Point(0, 0)
p1 = Point(0, 5)
p2 = Point(5, 5)
foo(zero)
foo(p1)
foo(p2)
print(Point.counter)
J'ai rajouter un compteur parce que la façon de comparer me paraissait étrange, mais il ne compte bien que trois instances.
je n'ai pas de deadline; je voulais juste dire que si tu ne te sens pas d'écrire la 2ième partie on peut tout à fait se contenter de la première :)
si on part sur une deuxième partie: oui voilà, je pense que ça peut être un exemple intéressant (sans le compteur of course, car ça va confuser les gens); on n'est pas non plus obligé d'en écrire des tartines..
--
sinon à propos de dataclass
: pourtant si, il y a un notebook sur les dataclass en 6-3-3
Honnêtement, pour le moment je ne vois comment faire. Donc publions juste la première partie.
Cependant j'ai eu une idée, reste a savoir si elle est pas terrible et si j'arrive à la faire fonctionner.
Dans le notebook, je ne pense pas que l'on puisse faire la requête sans que leur serveur ne pleure. Mais on peux mettre un json à dispo. Si quelqu'un veux faire la manip en local on peux fournir un code de base .
Alors sans intérêt ou pas ?
dac pour publier la première partie.. il faut que je trouve 10 minutes pour insérer le notebook dans le cours
pour ton projet, ça semble très intéressant; toutefois c’est clairement un truc qu’on va avoir envie de faire en pandas non ? du coup j’ai du mal à voir le rapport avec le match/case, ça n’existe pas à ma connaissance sous forme vectorisée en pandas ça, si ?
ce qui à nouveau ne doit pas empêcher de faire cet exercice qui semble rigolo; avec un peu de folium dedans ?
mes 2 centimes
On 22 Apr 2023, at 10:55, Karduin @.***> wrote:
Honnêtement, pour le moment je ne vois comment faire. Donc publions juste la première partie.
Cependant j'ai eu une idée, reste a savoir si elle est pas terrible et si j'arrive à la faire fonctionner.
Utiliser l'API de http://www.fdsn.org/webservices/ http://www.fdsn.org/webservices/ pour récupérer des datas sur les derniers tremblements de terre. Il y a une page pour construire la requête https://www.seismicportal.eu/fdsn-wsevent.html https://www.seismicportal.eu/fdsn-wsevent.html. On pourrai filtrer sur les latitudes / longitudes France et toutes magnitudes (par exemple, ou Japon pour plus d'infos). On récupère le json. A partir du json, on fait une list ou un dict d'instances d'une class Eartquake avec juste 3 ou 4 attributs. Et enfin un match case sur les magnitudes par exemple. Ou autre c'est pas encore net pour moi. Dans le notebook, je ne pense pas que l'on puisse faire la requête sans que leur serveur ne pleure. Mais on peux mettre un json à dispo. Si quelqu'un veux faire la manip en local on peux fournir un code de base .
Alors sans intérêt ou pas ?
— Reply to this email directly, view it on GitHub https://github.com/flotpython/course/pull/66#issuecomment-1518568276, or unsubscribe https://github.com/notifications/unsubscribe-auth/ABCPKOZJIQZTXEPRXFODO5DXCOMJ7ANCNFSM6AAAAAARGLELHU. You are receiving this because you commented.
J'avais un peu peur que tu me répondes quelque chose dans ce goût. C'est plutôt un boulot pour base de données ou Pandas effectivement.
Du coup je vais voir si je peux faire un truc avec les exemples de la PEP636 pour le match case, et voir si je peux réaliser l'exercice avec folium. Je ne connaissais pas, c'est sympa.
Si j'y arrive tu crois que ça peux être intéressant pour le mooc ?
le notebook est en ligne sous le numéro 425
pour l'éventuelle seconde partie, ce n'est pas crucial hein
s'agissant de folium enfin, pourquoi pas, mais il faut alors viser quelque chose de super light l'objectif je pense ce serait essentiellement signaler l'existence du truc, et donner une idée de ce qu'on peut faire avec :)
Nice ! merci.
Bonjour Thierry,
Une proposition pour une première partie au sujet de match / case. Je ne sais pas trop comment tu veux organiser ça. J’ai mis le fichier dans la semaine 4. Je pensai faire ça en deux parties, et donc une deuxième partie pour les cas plus complexes. Je n’ai pas traduit structural pattern matching je ne vois rien d’élégant pour mettre ça en français.
Dis-moi si ça t’intéresses que je continue ou si tu vois les choses différemment. N’hésites pas à me dire que ça ne convient pas, je ne vais pas me vexer.
Cordialement,
Jean-Michel